129 lines
3.6 KiB
Swift
129 lines
3.6 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 }
|
|
|
|
// 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<MineListSectionModel> = {
|
|
return RxTableViewSectionedReloadDataSource<MineListSectionModel>(
|
|
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
|
|
}
|
|
}
|
|
}
|