// // 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 } // MARK: - Properties fileprivate var rootView: MineView! private var tableView: UITableView { rootView.settingsTableView } private let viewModel = MineViewModel() // MARK: - Lifecycle 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) rootView.avatarImageView.image = AppContextManager.shared.avaterIcon rootView.nameLabel.text = AppContextManager.shared.name rootView.idLabel.text = "ID:" + AppContextManager.shared.userId } // MARK: - Bindings 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) viewModel.userName .bind(to: rootView.nameLabel.rx.text) .disposed(by: disposeBag) viewModel.userID .bind(to: rootView.idLabel.rx.text) .disposed(by: disposeBag) } private func reactiveAction() { rootView.vipActivateButton.rx.tap .subscribe(onNext: { [weak self] in // TODO: Navigate to VIP activation }) .disposed(by: disposeBag) rootView.editButton.rx.tap .subscribe(onNext: { [weak self] in // TODO: Navigate to edit profile }) .disposed(by: disposeBag) rootView.copyButton.rx.tap .subscribe(onNext: { [weak self] in guard let id = self?.rootView.idLabel.text else { return } UIPasteboard.general.string = id.replacingOccurrences(of: "ID:", with: "") DLToast.showSuccess(text: "已复制") }) .disposed(by: disposeBag) rootView.onMenuTap = { [weak self] index in self?.handleMenuTap(at: index) } } // MARK: - UITableViewDataSource lazy private var dataSource: RxTableViewSectionedReloadDataSource = { return RxTableViewSectionedReloadDataSource( configureCell: { (_, tableView, indexPath, model) in let cell: MineMenuCell = tableView.dequeueReusableCell(for: indexPath) cell.configure(model) return cell }) }() private func handleMenuTap(at index: Int) { switch index { case 0: // TODO: Account & security break case 1: // TODO: Status setting break case 2: // TODO: Emergency contact break case 3: // TODO: Customer service break case 4: // TODO: Privacy & agreement break case 5: // TODO: Permission check break default: break } } }