// // 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 = { RxTableViewSectionedReloadDataSource( 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) } }