104 lines
3.4 KiB
Swift
104 lines
3.4 KiB
Swift
//
|
||
// GroupMemberListVC.swift
|
||
// QuickLocation
|
||
//
|
||
// Created by 八条 on 2026/6/29.
|
||
//
|
||
|
||
import UIKit
|
||
import RxSwift
|
||
import RxCocoa
|
||
import RxDataSources
|
||
import ObjectMapper
|
||
|
||
class GroupMemberListVC: BaseViewController {
|
||
|
||
fileprivate var rootView: GroupMemberListView!
|
||
|
||
override func loadView() {
|
||
rootView = GroupMemberListView(frame: UIScreen.main.bounds)
|
||
view = rootView
|
||
}
|
||
|
||
private var viewModel: GroupMemberListVM
|
||
|
||
override func viewDidLoad() {
|
||
super.viewDidLoad()
|
||
|
||
bindViewModel()
|
||
reactiveAction()
|
||
|
||
requestGroupInfo()
|
||
}
|
||
|
||
private func reactiveAction() {
|
||
|
||
}
|
||
|
||
private var selectedRow = 0
|
||
|
||
private func bindViewModel() {
|
||
viewModel.output.sectionedItems
|
||
.bind(to: rootView.collectionView.rx.items(dataSource: memberDataSource))
|
||
.disposed(by: disposeBag)
|
||
|
||
viewModel.output.drivingSectionedItems
|
||
.bind(to: rootView.drivingEventCV.rx.items(dataSource: drivingDataSource))
|
||
.disposed(by: disposeBag)
|
||
|
||
// 成员点击
|
||
rootView.collectionView.rx.modelSelected(GroupMemberModel.self)
|
||
.subscribe(onNext: { [weak self] model in
|
||
guard let self = self, let row = self.viewModel.rowOf(userId: model.user_id) else { return }
|
||
self.selectedRow = row
|
||
self.rootView.selectedMemberIsSelf = self.viewModel.isCurrentUser(id: model.user_id)
|
||
self.rootView.collectionView.reloadData()
|
||
}).disposed(by: disposeBag)
|
||
}
|
||
|
||
// MARK: - dataSource
|
||
|
||
private lazy var memberDataSource: RxCollectionViewSectionedReloadDataSource<GroupMemberListSectionModel> = {
|
||
RxCollectionViewSectionedReloadDataSource<GroupMemberListSectionModel> { [weak self] datasource, collectionView, indexPath, model in
|
||
let cell: GroupMemberListCell = collectionView.dequeueReusableCell(for: indexPath)
|
||
cell.configure(model: model,
|
||
isCurrentUser: self?.viewModel.isCurrentUser(id: model.user_id) ?? false,
|
||
isSelected: indexPath.row == (self?.selectedRow ?? 0))
|
||
return cell
|
||
}
|
||
}()
|
||
|
||
private lazy var drivingDataSource: RxCollectionViewSectionedReloadDataSource<DrivingEventSection> = {
|
||
RxCollectionViewSectionedReloadDataSource<DrivingEventSection> { _, collectionView, indexPath, item in
|
||
let cell: DrivingEventCell = collectionView.dequeueReusableCell(for: indexPath)
|
||
cell.configure(item)
|
||
return cell
|
||
}
|
||
}()
|
||
|
||
// MARK: - API
|
||
private func requestGroupInfo() {
|
||
DLToast.showLoading()
|
||
GroupService.groupInfoByKey(viewModel.groupKey).subscribe { response in
|
||
DLToast.dismiss()
|
||
guard let model = response.model else { return }
|
||
self.viewModel.groupModel = model
|
||
self.viewModel.loadData(response.list)
|
||
// 默认选中第一个成员,更新日期可点范围
|
||
if let first = self.viewModel.firstMemberId {
|
||
self.rootView.selectedMemberIsSelf = self.viewModel.isCurrentUser(id: first)
|
||
}
|
||
}.disposed(by: disposeBag)
|
||
}
|
||
|
||
// MARK: - Init
|
||
init(groupKey: String) {
|
||
viewModel = GroupMemberListVM(groupKey: groupKey)
|
||
super.init(nibName: nil, bundle: nil)
|
||
}
|
||
|
||
required init?(coder: NSCoder) {
|
||
fatalError("init(coder:) has not been implemented")
|
||
}
|
||
}
|