新增 CooperationOrder 模块(双 Tab 列表、获客员绑定、主 Tab 扫码)、订单来源/带客单绑定及配套 API 测试;同步引入 roleCode 权限匹配与相关单元测试。 Co-authored-by: Cursor <cursoragent@cursor.com>
143 lines
4.6 KiB
Swift
143 lines
4.6 KiB
Swift
//
|
||
// HomeSupportViews.swift
|
||
// suixinkan
|
||
//
|
||
// Created by Codex on 2026/6/22.
|
||
//
|
||
|
||
import SwiftUI
|
||
|
||
extension HomeRoute {
|
||
/// 将首页路由映射为真实页面或迁移占位页。
|
||
@ViewBuilder
|
||
var destinationView: some View {
|
||
switch self {
|
||
case .profileSpace:
|
||
ProfileView()
|
||
case .scenicSelection:
|
||
ScenicSelectionView()
|
||
case .permissionApply:
|
||
PermissionApplyView()
|
||
case .permissionApplyStatus:
|
||
PermissionApplyStatusView()
|
||
case .scenicApplication:
|
||
ScenicApplicationView()
|
||
case .moreFunctions:
|
||
HomeMoreFunctionsView()
|
||
case .settings:
|
||
SettingsCenterView()
|
||
case .paymentCollection:
|
||
PaymentCollectionView()
|
||
case .wallet:
|
||
WalletView()
|
||
case .taskManagement:
|
||
TaskManagementView()
|
||
case .taskCreate:
|
||
TaskCreateView()
|
||
case .taskDetail(let id, let summary):
|
||
TaskDetailView(taskId: id, summary: summary)
|
||
case .projectManagement:
|
||
ProjectManagementView()
|
||
case .pmProjectManagement:
|
||
StoreProjectManagementView()
|
||
case .projectDetail(let id, let storeMode):
|
||
ProjectDetailView(projectId: id, storeMode: storeMode)
|
||
case .projectEditor(let id, let storeMode):
|
||
if storeMode {
|
||
StoreProjectEditorView(projectId: id)
|
||
} else {
|
||
ProjectEditorView(projectId: id)
|
||
}
|
||
case .scheduleManagement:
|
||
ScheduleManagementView()
|
||
case .scheduleAdd:
|
||
ScheduleAddView()
|
||
case .photographerInvite:
|
||
PhotographerInviteView()
|
||
case .inviteRecord:
|
||
InviteRecordView()
|
||
case .cloudStorage:
|
||
CloudStorageView()
|
||
case .cloudStorageTransit:
|
||
CloudStorageTransitView()
|
||
case .materialLibrary:
|
||
MediaLibraryView()
|
||
case .materialUpload:
|
||
MediaLibraryUploadView()
|
||
case .sampleLibrary:
|
||
MediaLibraryView(kind: .sample)
|
||
case .sampleUpload:
|
||
MediaLibraryUploadView(kind: .sample)
|
||
case .albumList:
|
||
AlbumListView()
|
||
case .albumTrailer:
|
||
AlbumTrailerEntryView()
|
||
case .punchPointList:
|
||
PunchPointListView()
|
||
case .punchPointDetail(let id, let summary):
|
||
PunchPointDetailView(punchPointId: id, summary: summary)
|
||
case .punchPointEditor(let id):
|
||
PunchPointEditorView(punchPointId: id)
|
||
case .punchPointQR(_, let title, let qrURL):
|
||
PunchPointQRView(title: title, qrURL: qrURL)
|
||
case .locationReport:
|
||
LocationReportView()
|
||
case .locationReportHistory:
|
||
LocationReportHistoryView()
|
||
case .depositOrders:
|
||
DepositOrderEntryView()
|
||
case .withdrawalAudit:
|
||
WithdrawalAuditView()
|
||
case .cooperationOrder:
|
||
CooperationOrderAccessView()
|
||
case .scenicSettlement:
|
||
ScenicSettlementView()
|
||
case .scenicSettlementReview:
|
||
ScenicSettlementReviewView()
|
||
case .messageCenter:
|
||
MessageCenterView()
|
||
case .queueManagement:
|
||
QueueManagementView()
|
||
case .liveManagement:
|
||
LiveManagementView()
|
||
case .liveAlbum:
|
||
LiveAlbumView()
|
||
case .operatingArea:
|
||
OperatingAreaView()
|
||
case .pilotCertification:
|
||
PilotCertificationView()
|
||
case let .modulePlaceholder(uri, title):
|
||
HomeMigrationModuleView(title: title, uri: uri)
|
||
}
|
||
}
|
||
}
|
||
|
||
/// 首页迁移占位视图,用于承接尚未同步的功能入口。
|
||
struct HomeMigrationModuleView: View {
|
||
let title: String
|
||
let uri: String
|
||
|
||
var body: some View {
|
||
VStack(spacing: AppMetrics.Spacing.medium) {
|
||
Image(systemName: "square.grid.2x2")
|
||
.font(.system(size: 44, weight: .semibold))
|
||
.foregroundStyle(AppDesign.primary)
|
||
|
||
Text(title)
|
||
.font(.system(size: AppMetrics.FontSize.title2, weight: .semibold))
|
||
.foregroundStyle(AppDesign.textPrimary)
|
||
|
||
Text(uri)
|
||
.font(.system(size: AppMetrics.FontSize.subheadline))
|
||
.foregroundStyle(AppDesign.textSecondary)
|
||
.lineLimit(2)
|
||
.multilineTextAlignment(.center)
|
||
.padding(.horizontal, AppMetrics.Spacing.large)
|
||
}
|
||
.frame(maxWidth: .infinity, maxHeight: .infinity)
|
||
.background(Color(hex: 0xF5F7FA))
|
||
.navigationTitle(title)
|
||
.navigationBarTitleDisplayMode(.inline)
|
||
}
|
||
}
|