jsdw_ios/QuickLocation/Section/Group/RemoveMember/RemoveMemberVC.swift

119 lines
3.9 KiB
Swift

//
// 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<ReviewMemberListSectionModel> = {
return RxTableViewSectionedReloadDataSource<ReviewMemberListSectionModel>(
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")
}
}