84 lines
2.5 KiB
Swift
84 lines
2.5 KiB
Swift
//
|
|
// MineViewModel.swift
|
|
// QuickLocation
|
|
//
|
|
|
|
import Foundation
|
|
import RxSwift
|
|
import RxDataSources
|
|
|
|
typealias MineListSectionModel = SectionModel<String, MineMenuItem>
|
|
|
|
class MineViewModel {
|
|
|
|
struct Output {
|
|
var sectionedItems: Observable<[MineListSectionModel]>
|
|
}
|
|
|
|
let output: Output
|
|
|
|
private var disposeBag = DisposeBag()
|
|
private let sectionedItems = PublishSubject<[MineListSectionModel]>()
|
|
|
|
let userAvatar = PublishSubject<String>()
|
|
let userName = PublishSubject<String>()
|
|
let userID = PublishSubject<String>()
|
|
|
|
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<MineMenuItem, Void> = { 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()
|
|
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
|
|
}
|