450 lines
15 KiB
Swift
450 lines
15 KiB
Swift
//
|
||
// 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) { _, 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
|
||
SignInVC(lastLocation: nil)
|
||
}
|
||
|
||
// MARK: - SOS
|
||
AppRouter.register(Route.sos) { _, _ in
|
||
SOSViewController()
|
||
}
|
||
|
||
// MARK: - 充值优惠弹窗
|
||
AppRouter.register(Route.promotionalActivities) { url, parameters in
|
||
PromotionalActivitiesVC()
|
||
}
|
||
}
|
||
}
|