182 lines
7.4 KiB
Swift
182 lines
7.4 KiB
Swift
//
|
||
// 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)")
|
||
}
|
||
}
|
||
|
||
private static func homeRouteURI(_ route: HomeRoute) -> String {
|
||
if case let .modulePlaceholder(uri, _) = route {
|
||
return uri
|
||
}
|
||
return String(describing: route)
|
||
}
|
||
}
|
||
|
||
@MainActor
|
||
/// 首页路由 ViewController 工厂,供 `UIKitAppNavigation` 复用。
|
||
enum HomeRouteViewControllerFactory {
|
||
static func make(for route: HomeRoute) -> UIViewController {
|
||
AppRouteViewControllerFactory.makeViewController(for: route, services: AppServices.shared)
|
||
}
|
||
}
|