Integrate高德 SDK with simulator-safe build flags, add map views for operating area and punch points, refactor main tabs and key feature screens to UIKit with Diffable lists, and document Swift concurrency defaults in AGENTS.md. Co-authored-by: Cursor <cursoragent@cursor.com>
184 lines
7.5 KiB
Swift
184 lines
7.5 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)")
|
||
}
|
||
}
|
||
|
||
/// 将首页路由编码为 URI 字符串。
|
||
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)
|
||
}
|
||
}
|