// // AppRouteViewControllerFactory.swift // suixinkan // import UIKit @MainActor /// 应用路由 ViewController 工厂,将 `AppRoute` 及各模块路由映射为 UIKit 页面。 enum AppRouteViewControllerFactory { /// 根据路由创建目标 ViewController;未迁移页面使用占位页。 static func makeViewController(for route: AppRoute, services: AppServices) -> UIViewController { switch route { case .placeholder(let title): return PlaceholderViewController(title: title) case .home(let homeRoute): return makeViewController(for: homeRoute, services: services) case .profile(let profileRoute): return makeViewController(for: profileRoute, services: services) case .orders(let ordersRoute): return makeViewController(for: ordersRoute, services: services) } } /// 根据首页二级路由创建 ViewController。 static func makeViewController(for route: HomeRoute, services: AppServices) -> UIViewController { switch route { case .profileSpace: return ProfileViewController() case .scenicSelection: return ScenicSelectionViewController() case .permissionApply: return PermissionApplyViewController() case .permissionApplyStatus: return PermissionApplyStatusViewController() case .scenicApplication: return ScenicApplicationViewController() case .moreFunctions: return HomeMoreFunctionsViewController() case .settings: return SettingsViewController() case .paymentCollection: return PaymentCollectionViewController() case .wallet: return WalletViewController() case .taskManagement: return TaskManagementViewController() case .taskCreate: return TaskCreateViewController() case .taskDetail(let id, let summary): return TaskDetailViewController(taskId: id, summary: summary) case .projectManagement: return ProjectManagementViewController() case .pmProjectManagement: return StoreProjectManagementViewController() case .projectDetail(let id, let storeMode): return ProjectDetailViewController(projectId: id, storeMode: storeMode) case .projectEditor(let id, let storeMode): if storeMode { return StoreProjectEditorViewController(projectId: id) } return ProjectEditorViewController(projectId: id) case .scheduleManagement: return ScheduleManagementViewController() case .scheduleAdd: return ScheduleAddViewController() case .photographerInvite: return PhotographerInviteViewController() case .inviteRecord: return InviteRecordViewController() case .cloudStorage: return CloudStorageViewController() case .cloudStorageTransit: return CloudStorageTransitViewController() case .materialLibrary: return MediaLibraryViewController(kind: .material) case .materialUpload: return MediaLibraryUploadViewController(kind: .material) case .sampleLibrary: return MediaLibraryViewController(kind: .sample) case .sampleUpload: return MediaLibraryUploadViewController(kind: .sample) case .albumList: return AlbumListViewController() case .albumTrailer: return AlbumTrailerViewController() case .punchPointList: return PunchPointListViewController() case .punchPointDetail(let id, let summary): return PunchPointDetailViewController(punchPointId: id, summary: summary) case .punchPointEditor(let id): return PunchPointEditorViewController(punchPointId: id) case .punchPointQR(_, let title, let qrURL): return PunchPointQRViewController(title: title, qrURL: qrURL) case .locationReport: return LocationReportViewController() case .locationReportHistory: return LocationReportHistoryViewController() case .depositOrders: return DepositOrderListViewController() case .withdrawalAudit: return WithdrawalAuditViewController() case .scenicSettlement: return ScenicSettlementViewController() case .scenicSettlementReview: return ScenicSettlementReviewViewController() case .messageCenter: return MessageCenterViewController() case .queueManagement: return QueueManagementViewController() case .liveManagement: return LiveManagementViewController() case .liveAlbum: return LiveAlbumViewController() case .operatingArea: return OperatingAreaViewController() case .pilotCertification: return PilotCertificationViewController() case .modulePlaceholder(_, let title): return FeaturePlaceholderViewController(title: title, uri: homeRouteURI(route)) } } /// 根据个人中心二级路由创建 ViewController。 static func makeViewController(for route: ProfileRoute, services: AppServices) -> UIViewController { switch route { case .accountSwitch: return AccountSwitchViewController() case .realNameAuth: return RealNameAuthViewController() case .settings: return SettingsViewController() case .agreement(let page): return AgreementViewController(page: page) #if DEBUG case .debugHomeMenus: return HomeMoreFunctionsViewController() #endif } } /// 根据订单模块二级路由创建 ViewController。 static func makeViewController(for route: OrdersRoute, services: AppServices) -> UIViewController { switch route { case .storeDetail(let item): return StoreOrderDetailViewController(item: item) case .writeOffDetail(let item): return WriteOffOrderDetailViewController(item: item) case .depositDetail(let orderNumber): return DepositOrderDetailViewController(orderNumber: orderNumber) case .depositShootingInfo(let orderNumber, let scenicSpotId, let photogUid): return DepositOrderShootingInfoViewController( orderNumber: orderNumber, scenicSpotId: scenicSpotId, photogUid: photogUid ) case .historicalShooting(let orderNumber): return HistoricalShootingInfoViewController(orderNumber: orderNumber) case .multiTravelTaskUpload(let orderNumber): return MultiTravelTaskUploadViewController(initialOrderNumber: orderNumber) case .orderTrailer(let orderNumber, let title): return FeaturePlaceholderViewController(title: title, uri: "order_trailer:\(orderNumber)") } } /// 将首页路由编码为 URI 字符串。 private static func homeRouteURI(_ route: HomeRoute) -> String { if case let .modulePlaceholder(uri, _) = route { return uri } return String(describing: route) } }