jsdw_ios/QuickLocation/Section/Mine/MineViewController.swift

129 lines
4.1 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
import ObjectMapper
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 = ""
private var groupModel: GroupModel?
private var photoWallMembers: [GroupMemberModel] = []
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.onTapMember = { [weak self] member in
self?.openMemberInfo(selectedUserId: member.user_id)
}
rootView.onQuickTap = { [weak self] title in
self?.viewModel.handleMenu(MineMenuItem(icon: "", title: title))
}
}
private lazy var dataSource: RxTableViewSectionedReloadDataSource<MineListSectionModel> = {
RxTableViewSectionedReloadDataSource<MineListSectionModel>(
configureCell: { (dataSource, tableView, indexPath, model) in
let cell: MineMenuCell = tableView.dequeueReusableCell(for: indexPath)
cell.configure(model)
let isLast = indexPath.row == dataSource[indexPath.section].items.count - 1
cell.showDivider = !isLast
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.groupModel = model
self.groupKey = model.default_group_key
let sorted = self.viewModel.sortedMembers(model.select_group_employee, groupKey: model.default_group_key)
self.photoWallMembers = sorted
// 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)
}
private func openMemberInfo(selectedUserId: String) {
let members = photoWallMembers.map { $0.toJSON() }
guard !members.isEmpty else { return }
var userInfo: [String: Any] = [
"members": members,
"userId": selectedUserId
]
if let group = groupModel {
userInfo["groupJson"] = group.toJSON()
}
AppRouter.push(Route.memberInfo, userInfo: userInfo)
}
}