Files
suixinkan_ios_uikit/suixinkan_ios/App/Navigation/AppRouteViewControllerFactory.swift
2026-06-26 14:33:31 +08:00

182 lines
7.4 KiB
Swift
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

//
// 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)
}
}