109 lines
3.3 KiB
Swift
109 lines
3.3 KiB
Swift
//
|
||
// 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)
|
||
// 圈主 id:group_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)
|
||
}
|
||
}
|