119 lines
3.9 KiB
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")
|
|
}
|
|
}
|