// // 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 = { RxCollectionViewSectionedReloadDataSource { [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 = { RxCollectionViewSectionedReloadDataSource { _, 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") } }