jsdw_ios/QuickLocation/Section/Mine/MineViewController.swift

109 lines
3.3 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.

//
// MineViewController.swift
// QuickLocation
//
// Created based on Lanhu design:
//
import UIKit
import RxSwift
import RxCocoa
import RxDataSources
final class MineViewController: BaseViewController {
override var isNavigationBarHidden: Bool { true }
override var preferredStatusBarStyle: UIStatusBarStyle { .default }
fileprivate var rootView: MineView!
private var tableView: UITableView {
rootView.settingsTableView
}
private let viewModel = MineViewModel()
private var groupKey: String = ""
override func loadView() {
rootView = MineView(frame: UIScreen.main.bounds)
view = rootView
}
override func viewDidLoad() {
super.viewDidLoad()
bindViewModel()
reactiveAction()
viewModel.loadMenuData()
}
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
requestUserInfo()
requestGroupMembers()
}
private func bindViewModel() {
viewModel.output.sectionedItems
.bind(to: tableView.rx.items(dataSource: dataSource))
.disposed(by: disposeBag)
tableView.rx.modelSelected(MineMenuItem.self)
.subscribe(viewModel.cellAction.inputs)
.disposed(by: disposeBag)
}
private func reactiveAction() {
rootView.vipActivateButton.rx.tap
.subscribe(onNext: { _ in
AppRouter.push(Route.vipRecharge)
})
.disposed(by: disposeBag)
rootView.photoWall.onCopyID = { id in
UIPasteboard.general.string = id
DLToast.showSuccess(text: "已复制")
}
rootView.photoWall.onTapSelfAvatar = {
AppRouter.push(Route.myProfile)
}
rootView.onQuickTap = { [weak self] title in
self?.viewModel.handleMenu(MineMenuItem(icon: "", title: title))
}
}
private lazy var dataSource: RxTableViewSectionedReloadDataSource<MineListSectionModel> = {
RxTableViewSectionedReloadDataSource<MineListSectionModel>(
configureCell: { (_, tableView, indexPath, model) in
let cell: MineMenuCell = tableView.dequeueReusableCell(for: indexPath)
cell.configure(model)
return cell
})
}()
private func requestUserInfo() {
UserService.userInfo().subscribe { response in
guard let model = response.model else { return }
if AppContextManager.shared.saveAccount(model) {
self.rootView.setupData(model)
}
}.disposed(by: disposeBag)
}
private func requestGroupMembers() {
GroupService.groupInfo().subscribe(onNext: { [weak self] response in
guard let self = self, let model = response.model else { return }
self.groupKey = model.default_group_key
let sorted = self.viewModel.sortedMembers(model.select_group_employee, groupKey: model.default_group_key)
// idgroup_key userId
let ownerId = sorted.first(where: { model.default_group_key.contains($0.user_id) })?.user_id ?? ""
self.rootView.photoWall.reload(
members: sorted,
ownerUserId: ownerId,
preferUserId: AppContextManager.shared.userId
)
}).disposed(by: disposeBag)
}
}