// // RemoveMemberVC.swift // QuickLocation // // Created by 八条 on 2026/6/12. // import UIKit import RxSwift import RxCocoa import RxDataSources import ObjectMapper class RemoveMemberVC: BaseViewController { fileprivate var rootView: RemoveMemberView! override func loadView() { rootView = RemoveMemberView(frame: UIScreen.main.bounds) view = rootView } private var viewModel: RemoveMemberViewModel override func viewDidLoad() { super.viewDidLoad() // Do any additional setup after loading the view. bindViewModel() requestGroupInfo() } private func bindViewModel() { viewModel.output.sectionedItems .bind(to: rootView.tableView.rx.items(dataSource: dataSource)) .disposed(by: disposeBag) viewModel.output.sectionedItems .subscribe(onNext: { [weak self] sections in let count = sections.first?.items.count ?? 0 self?.rootView.updateHeight(itemCount: count) }) .disposed(by: disposeBag) rootView.tableView.rx.modelSelected(GroupMemberModel.self) .subscribe(viewModel.cellAction.inputs) .disposed(by: disposeBag) // selectedMembers 驱动删除按钮状态和文字 let selectedCount = viewModel.selectedMembers .map { $0.count } .share(replay: 1) selectedCount .map { $0 > 0 } .bind(to: rootView.deleteBtn.rx.isEnabled) .disposed(by: disposeBag) selectedCount .map { "删除(\($0))" } .bind(to: rootView.deleteBtn.rx.title()) .disposed(by: disposeBag) rootView.deleteBtn.rx.tap.subscribe(onNext: { _ in self.showConfirmPop(showCloseBtn: true, title: "确定要移除成员吗?", message: "成员将从当前圈子中移除", confirmText: "否", cancelText: "是") { self.requestRemoveMember() } }).disposed(by: disposeBag) } // MARK: - UITableViewDataSource lazy private var dataSource: RxTableViewSectionedReloadDataSource = { return RxTableViewSectionedReloadDataSource( configureCell: { (_, tableView, indexPath, model) in let cell: RemoveMemberCell = tableView.dequeueReusableCell(for: indexPath) cell.configure(model, isOwn: self.viewModel.groupId.contains(model.user_id), isSelected: self.viewModel.isSelected(id: model.user_id)) return cell }) }() // MARK: - API private func requestGroupInfo() { DLToast.showLoading() GroupService.groupInfoByKey(viewModel.groupId).subscribe { response in DLToast.dismiss() guard let model = response.model else { return } self.viewModel.groupModel = model self.viewModel.loadData(response.list) }.disposed(by: disposeBag) } // MARK: - API删除成员 private func requestRemoveMember() { DLToast.showLoading() GroupService.kickMember(requestData: ["group_key": viewModel.groupId, "kick_userid": viewModel.selectedMembers.value]).subscribe { response in DLToast.dismiss() self.viewModel.selectedMembers.accept([]) self.requestGroupInfo() }.disposed(by: disposeBag) } // MARK: - Init init(groupId: String) { self.viewModel = RemoveMemberViewModel(groupId: groupId) super.init(nibName: nil, bundle: nil) } required init?(coder: NSCoder) { fatalError("init(coder:) has not been implemented") } }