jsdw_ios/QuickLocation/Manager/App/RouterManager.swift

457 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 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 privacySettings = "privacySettings"
/// 权限检测
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"
/// APP 使用报告
case appUsageReport = "appUsageReport"
/// 关于我们
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 sosList = "sosList"
/// 圈子消息
case mailbox = "mailbox"
}
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.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()
}
AppRouter.register(Route.privacySettings) { _, _ in
let vc = PrivacySettingsViewController()
vc.isNeedLogin = true
return vc
}
// 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: - APP 使用报告
AppRouter.register(Route.appUsageReport) { _, parameters in
AppUsageReportVC(userInfo: parameters)
}
// MARK: - 关于我们
AppRouter.register(Route.about) { _, _ in
AboutVC()
}
// MARK: - 意见反馈
AppRouter.register(Route.feedback) { _, parameters in
FeedbackVC(contextText: parameters["text"].safeString)
}
// 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
let vc = SignInVC(lastLocation: nil)
vc.isNeedLogin = true
return vc
}
// MARK: - SOS
AppRouter.register(Route.sos) { _, _ in
let vc = SOSViewController()
vc.isNeedLogin = true
return vc
}
AppRouter.register(Route.sosList) { _, _ in
let vc = SOSListViewController()
vc.isNeedLogin = true
return vc
}
AppRouter.register(Route.mailbox) { _, _ in
let vc = MailboxViewController()
vc.isNeedLogin = true
return vc
}
}
}