// // 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/account_security", title: "账户与安全"), MineMenuItem(icon: "Mine/status_setting", title: "状态设置"), MineMenuItem(icon: "Mine/emergency_contact", title: "紧急联系人"), MineMenuItem(icon: "Mine/customer_service", title: "在线客服"), MineMenuItem(icon: "Mine/privacy_agreement", title: "隐私与协议"), MineMenuItem(icon: "Mine/permission_check", title: "权限检测") ] lazy var cellAction: Action = { this in return Action { model in switch model.title { case "账户与安全": AppRouter.push(Route.account) case "紧急联系人": AppRouter.push(Route.emergencyContact) case "隐私与协议": AppRouter.push(Route.privacyPolicy) case "在线客服": this.requestWechatService() case "权限检测": AppRouter.push(Route.checkPermission) default: break } return .empty() } }(self) func loadMenuData() { sectionedItems.onNext(menuItems.mapSection()) } 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) } // MARK: - Init init() { output = Output( sectionedItems: sectionedItems.asObservable() ) } } struct MineMenuItem { let icon: String let title: String }