// // MineViewModel.swift // QuickLocation // import Foundation import RxSwift import RxDataSources typealias MineListSectionModel = SectionModel class MineViewModel { struct Output { var sectionedItems: Observable<[MineListSectionModel]> } let output: Output private var disposeBag = DisposeBag() private let sectionedItems = PublishSubject<[MineListSectionModel]>() let userAvatar = PublishSubject() let userName = PublishSubject() let userID = PublishSubject() /// 设置列表(设计稿) let menuItems: [MineMenuItem] = [ MineMenuItem(icon: "Mine/emergency_contact", title: "紧急联系人"), MineMenuItem(icon: "Mine/customer_service", title: "在线客服"), MineMenuItem(icon: "Mine/menu_about", title: "关于我们") ] /// 快捷入口 let quickItems: [MineMenuItem] = [ MineMenuItem(icon: "Mine/quick_permission", title: "权限检测"), MineMenuItem(icon: "Mine/quick_data_security", title: "数据安全"), MineMenuItem(icon: "Mine/quick_status", title: "状态设置"), MineMenuItem(icon: "Mine/quick_account", title: "账户设置") ] lazy var cellAction: Action = { this in return Action { model in this.handleMenu(model) return .empty() } }(self) func handleMenu(_ model: MineMenuItem) { switch model.title { case "账户与安全", "账户设置": AppRouter.push(Route.account) case "紧急联系人": AppRouter.push(Route.emergencyContact) case "隐私与协议", "隐私设置": AppRouter.push(Route.privacyPolicy) case "在线客服": requestWechatService() case "权限检测": AppRouter.push(Route.checkPermission) case "数据安全": DLToast.show(text: "敬请期待") case "状态设置": AppRouter.push(Route.moodStatus) case "关于我们": AppRouter.push(Route.about) default: break } } func loadMenuData() { sectionedItems.onNext(menuItems.mapSection()) } /// 圈主 → 自己 → 在线(对齐首页) func sortedMembers(_ list: [GroupMemberModel], groupKey: String) -> [GroupMemberModel] { GroupMemberSorter.sorted( list, groupKey: groupKey, currentUserId: AppContextManager.shared.userId ) } func requestWechatService() { DLToast.showLoading() SystemService.wechatService().subscribe(onNext: { response in DLToast.dismiss() guard let responseData = response.data, let corpid = responseData["corpid"] as? String, let url = responseData["kf.address"] as? String else { return } let req = WXOpenCustomerServiceReq() req.corpid = corpid req.url = url WXApi.send(req) }, onError: { _ in }).disposed(by: disposeBag) } init() { output = Output( sectionedItems: sectionedItems.asObservable() ) } } struct MineMenuItem { let icon: String let title: String }