jsdw_ios/QuickLocation/Manager/App/RouterManager.swift

450 lines
15 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.

//
// AppRouter.swift
// dinoGo
//
// Created by osell on 2023/2/8.
// Copyright © 2023 dino. All rights reserved.
//
// MARK: - Route
import URLNavigator
enum Route: String {
/// web
case web = "web"
///
case login = "login"
///
case inviteJoin = "inviteJoin"
///
case joinGroup = "joinGroup"
///
case createGroup = "createGroup"
///
case scan = "scan"
///
case groupIconList = "groupIconList"
///
case avatarIconList = "avatarIconList"
///
case vipRecharge = "vipRecharge"
///
case vipRights = "vipRights"
///
case groupChat = "groupChat"
///
case groupInfo = "groupInfo"
///
case groupSetting = "groupSetting"
///
case reviewMemberList = "reviewMemberList"
///
case removeMember = "removeMember"
///
case account = "account"
///
case changePhone = "changePhone"
///
case myProfile = "myProfile"
///
case emergencyContact = "emergencyContact"
///
case emergencyContactAdd = "emergencyContactAdd"
///
case privacyPolicy = "privacyPolicy"
///
case checkPermission = "checkPermission"
///
case createSchedule = "createSchedule"
///
case scheduleDetail = "scheduleDetail"
/// 线
case itineraryDetail = "itineraryDetail"
///
case scheduleHistory = "scheduleHistory"
///
case scheduleViewed = "scheduleViewed"
///
case createBubble = "createBubble"
///
case searchLocation = "searchLocation"
///
case searchLocationResult = "searchLocationResult"
///
case groupSchedule = "groupSchedule"
///
case groupMemberList = "groupMemberList"
///
case itineraryTrace = "itineraryTrace"
///
case todayTrackDetail = "todayTrackDetail"
///
case phoneReportDetail = "phoneReportDetail"
///
case about = "about"
///
case feedback = "feedback"
///
case moodStatus = "moodStatus"
///
case memberInfo = "memberInfo"
///
case cancelAccount = "cancelAccount"
/// App
case appRestrict = "appRestrict"
///
case lockDistract = "lockDistract"
///
case pigeonMessage = "pigeonMessage"
/// /
case signIn = "signIn"
/// SOS
case sos = "sos"
///
case promotionalActivities = "promotionalActivities"
}
extension Route: RouterTarget {
var scheme: String { "jsdw://" }
var name: String { "" }
var path: String { rawValue }
}
// MARK: - AppRouter
extension AppRouter: AppRouterProtocol {
public func setupHandlerRouter() {
AppRouter.globalRouteHandler { route, userInfo in
guard let url = URL(string: route),
let scheme = url.scheme else {
DLToast.showError(text: "oapp_RouteError".localizedString)
return false
}
// https/http
if scheme == "https" || scheme == "http" {
var params = userInfo ?? [String: String]()
let query = url.queryParameters
params = params.merging(query ?? [:], uniquingKeysWith: { value1, _ in return value1 })
if params["browesr"].safeString == "2" {
//
UIApplication.shared.open(url)
} else {
//
params["url"] = url.absoluteString
AppRouter.push(Route.web, userInfo: params)
}
return false
}
//
if ["tel", "telprompt", "sms", "mailto"].contains(where: { $0 == scheme.lowercased() }) {
UIApplication.shared.open(url)
return false
}
guard let vc = AppRouter.viewController(route, userInfo: userInfo) else {
DLToast.showError(text: "请检查路由")
return false
}
if vc.isNeedLogin && AppContextManager.shared.isGuest {
AppRouter.push(Route.login)
return false
}
return true
}
}
public func setupRegisterRouter() {
// MARK: - web
AppRouter.register(Route.web) { url, parameters in
guard let urlStr = parameters["url"] as? String,
let url = URL(string: urlStr)?.absoluteString else { return nil }
let params = parameters.compactMap {
guard $0.key != "url" else {
return nil
}
return "\($0.key)=\(String(describing: $0.value))"
}.joined(separator: "&")
let separator = url.contains("?") ? "&" : "?"
let tempUrl = url + separator + params
let style = parameters["style"].safeString
let isShare = parameters["isShare"].safeString == "1" ? true : false
let fullscreen = parameters["fullscreen"].safeString == "1" ? true : false
return WebViewController(url: tempUrl, isShare: isShare, fullscreen: fullscreen, style: style.isEmpty ? "default" : style)
}
// MARK: -
AppRouter.register(Route.login) { url, parameters in
LoginViewController()
}
// MARK: -
AppRouter.register(Route.inviteJoin) { url, parameters in
let vc = InviteJoinVC(groupInfo: parameters["groupInfo"].safeDictionary as! [String : Any])
// vc.isNeedLogin = true
return vc
}
// MARK: -
AppRouter.register(Route.joinGroup) { url, parameters in
let vc = JoinGroupVC()
vc.isNeedLogin = true
return vc
}
// MARK: -
AppRouter.register(Route.createGroup) { url, parameters in
let vc = CreateGroupVC()
vc.isNeedLogin = true
return vc
}
// MARK: -
AppRouter.register(Route.scan) { url, parameters in
ScanVC()
}
// MARK: -
AppRouter.register(Route.groupIconList) { url, parameters in
let vc = GroupIconListVC(iconIndex: parameters["iconIndex"].safeString)
return vc
}
// MARK: -
AppRouter.register(Route.avatarIconList) { url, parameters in
let vc = AvatarIconListVC(iconIndex: parameters["iconIndex"].safeString)
return vc
}
// MARK: -
AppRouter.register(Route.vipRecharge) { url, parameters in
VipRechargeVC()
}
// MARK: -
AppRouter.register(Route.vipRights) { url, parameters in
VipRightsVC()
}
// MARK: -
AppRouter.register(Route.groupChat) { url, parameters in
let groupId = parameters["groupId"].safeString
return GroupChatVC(groupId: groupId)
}
// MARK: -
AppRouter.register(Route.groupInfo) { url, parameters in
let vc = GroupInfoVC(groupInfo: parameters["groupInfo"].safeDictionary as! [String : Any])
return vc
}
// MARK: -
AppRouter.register(Route.groupSetting) { url, parameters in
let groupId = parameters["groupId"].safeString
return GroupSettingVC(groupId: groupId)
}
// MARK: -
AppRouter.register(Route.reviewMemberList) { url, parameters in
let groupId = parameters["groupId"].safeString
return ReviewMemberListVC(groupId: groupId)
}
// MARK: -
AppRouter.register(Route.removeMember) { url, parameters in
let groupId = parameters["groupId"].safeString
return RemoveMemberVC(groupId: groupId)
}
// MARK: -
AppRouter.register(Route.account) { url, parameters in
let vc = AccountVC()
vc.isNeedLogin = true
return vc
}
// MARK: -
AppRouter.register(Route.changePhone) { url, parameters in
let vc = ChangePhoneVC()
vc.isNeedLogin = true
return vc
}
// MARK: -
AppRouter.register(Route.myProfile) { url, parameters in
let vc = MyProfileVC()
vc.isNeedLogin = true
return vc
}
// MARK: -
AppRouter.register(Route.emergencyContact) { url, parameters in
let vc = EmergencyContactVC()
vc.isNeedLogin = true
return vc
}
// MARK: -
AppRouter.register(Route.emergencyContactAdd) { url, parameters in
let vc = EmergencyContactAddVC()
vc.isNeedLogin = true
return vc
}
// MARK: -
AppRouter.register(Route.privacyPolicy) { url, parameters in
PrivacyPolicyVC()
}
// MARK: -
AppRouter.register(Route.checkPermission) { url, parameters in
CheckPermissionVC()
}
// MARK: -
AppRouter.register(Route.createSchedule) { url, parameters in
let routeId = parameters["routeId"].safeString
return CreateScheduleVC(routeId: routeId,
scheduleJson: parameters["scheduleJson"].safeDictionary as! [String : Any])
}
// MARK: -
AppRouter.register(Route.scheduleDetail) { url, parameters in
let routeId = parameters["routeId"].safeString
return ScheduleDetailVC(routeId: routeId,
scheduleJson: parameters["scheduleJson"].safeDictionary as! [String : Any])
}
// MARK: - 线
AppRouter.register(Route.itineraryDetail) { url, parameters in
let routeId = parameters["routeId"].safeString
return ScheduleDetailVC(routeId: routeId,
scheduleJson: parameters["scheduleJson"].safeDictionary as! [String : Any])
}
// MARK: -
AppRouter.register(Route.scheduleHistory) { url, parameters in
ScheduleHistoryVC()
}
// MARK: -
AppRouter.register(Route.scheduleViewed) { url, parameters in
ScheduleViewedVC()
}
// MARK: -
AppRouter.register(Route.createBubble) { url, parameters in
let vc = CreateBubbleVC()
vc.isNeedLogin = true
return vc
}
// MARK: -
AppRouter.register(Route.searchLocation) { url, parameters in
let vc = SearchLocationVC()
// vc.isNeedLogin = true
return vc
}
// MARK: -
AppRouter.register(Route.searchLocationResult) { url, parameters in
SearchLocationResultVC(phone: parameters["phone"].safeString,
code: parameters["code"].safeInt,
memberData: parameters["memberData"].safeDictionary as! [String : Any])
}
// MARK: -
AppRouter.register(Route.groupSchedule) { url, parameters in
let groupKey = parameters["groupKey"].safeString
return GroupScheduleVC(groupKey: groupKey)
}
// MARK: -
AppRouter.register(Route.groupMemberList) { url, parameters in
GroupMemberListVC(groupKey: parameters["groupKey"].safeString)
}
// MARK: -
AppRouter.register(Route.itineraryTrace) { url, parameters in
ItineraryTraceVC(scheduleJson: parameters["model"].safeDictionary as! [String : Any],
memberInfo: parameters["memberInfo"].safeDictionary as! [String : Any])
}
// MARK: -
AppRouter.register(Route.todayTrackDetail) { url, parameters in
TodayTrackDetailVC(userInfo: parameters)
}
// MARK: -
AppRouter.register(Route.phoneReportDetail) { url, parameters in
PhoneReportDetailVC(userInfo: parameters)
}
// MARK: -
AppRouter.register(Route.about) { _, _ in
AboutVC()
}
// MARK: -
AppRouter.register(Route.feedback) { _, _ in
FeedbackVC()
}
// MARK: -
AppRouter.register(Route.moodStatus) { _, _ in
let vc = MoodStatusVC()
vc.isNeedLogin = true
return vc
}
// MARK: -
AppRouter.register(Route.memberInfo) { _, parameters in
MemberInfoVC(userInfo: parameters)
}
// MARK: -
AppRouter.register(Route.cancelAccount) { _, _ in
CancelAccountVC()
}
// MARK: - App
AppRouter.register(Route.appRestrict) { _, _ in
AppRestrictFactory.make()
}
// MARK: -
AppRouter.register(Route.lockDistract) { _, _ in
let vc = LockDistractVC()
vc.isNeedLogin = true
return vc
}
// MARK: -
AppRouter.register(Route.pigeonMessage) { _, _ in
let vc = PigeonMessageVC()
vc.isNeedLogin = true
return vc
}
// MARK: -
AppRouter.register(Route.signIn) { _, _ in
SignInVC(lastLocation: nil)
}
// MARK: - SOS
AppRouter.register(Route.sos) { _, _ in
SOSViewController()
}
// MARK: -
AppRouter.register(Route.promotionalActivities) { url, parameters in
PromotionalActivitiesVC()
}
}
}