jsdw_ios/QuickLocation/Section/Mine/MineViewController.swift

114 lines
3.5 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()
rootView.avatarImageView.image = AppContextManager.shared.avaterIcon
rootView.nameLabel.text = AppContextManager.shared.name
rootView.idLabel.text = "ID:" + AppContextManager.shared.userId
viewModel.loadMenuData()
}
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
requestUserInfo()
}
// 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
AppRouter.push(Route.vipRecharge)
})
.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)
}
// 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 requestUserInfo() {
UserService.userInfo().subscribe { response in
guard let model = response.model else { return }
if AppContextManager.shared.saveAccount(model) {
self.rootView.avatarImageView.image = model.userIcon
self.rootView.nameLabel.text = model.name
self.rootView.idLabel.text = "ID:\(model.uid ?? "")"
self.rootView.setupData(model)
}
}.disposed(by: disposeBag)
}
}