// // 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 vipRecharge = "vipRecharge" /// 权益对比 case vipRights = "vipRights" /// 群聊 case groupChat = "groupChat" } 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 JoinGroupVC() } // MARK: - 创建圈子 AppRouter.register(Route.createGroup) { url, parameters in CreateGroupVC() } // 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.vipRecharge) { url, parameters in VipRechargeVC() } // MARK: - 权益对比 AppRouter.register(Route.vipRights) { url, parameters in VipRightsVC() } AppRouter.register(Route.groupChat) { url, parameters in let groupId = parameters["groupId"].safeString return GroupChatVC(groupId: groupId) } } }