jsdw_ios/QuickLocation/Section/Mine/MineViewModel.swift

117 lines
3.7 KiB
Swift
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

//
// 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/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_privacy", title: "隐私设置")
]
lazy var cellAction: Action<MineMenuItem, Void> = { 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: "敬请期待")
default:
break
}
}
func loadMenuData() {
sectionedItems.onNext(menuItems.mapSection())
}
/// 线
func sortedMembers(_ list: [GroupMemberModel], groupKey: String) -> [GroupMemberModel] {
list.enumerated()
.sorted { lhs, rhs in
let lp = memberSortPriority(lhs.element, groupKey: groupKey)
let rp = memberSortPriority(rhs.element, groupKey: groupKey)
if lp != rp { return lp < rp }
return lhs.offset < rhs.offset
}
.map(\.element)
}
private func memberSortPriority(_ member: GroupMemberModel, groupKey: String) -> Int {
if !groupKey.isEmpty, groupKey.contains(member.user_id) { return 0 }
if member.user_id == AppContextManager.shared.userId { return 1 }
if member.is_online { return 2 }
return 3
}
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
}