// // GroupSettingVC.swift // QuickLocation // // Created by 八条 on 2026/6/9. // import UIKit import RxSwift import RxCocoa import RxDataSources import ObjectMapper class GroupSettingVC: BaseViewController { fileprivate var rootView: GroupSettingView! override func loadView() { rootView = GroupSettingView(frame: UIScreen.main.bounds) view = rootView } private var viewModel: GroupSettingViewModel override func viewDidLoad() { super.viewDidLoad() // Do any additional setup after loading the view. reactiveAction() requestGroupInfo() } // MARK: - Actions private func reactiveAction() { // 更换名称 rootView.groupNameView.rx.tapGesture.subscribe { _ in guard let model = self.viewModel.groupModel, model.is_owner else { return } let vc = TextInputViewController(title: "圈子名称", maxLength: 10, initialText: model.name) { text in self.requestEditName(text) } self.present(vc, animated: true, completion: nil) }.disposed(by: disposeBag) // 修改描述 rootView.groupDescView.rx.tapGesture.subscribe { _ in guard let model = self.viewModel.groupModel, model.is_owner else { return } let vc = TextInputViewController(title: "圈子描述", maxLength: 40, initialText: model.description) { text in self.requestEditDesc(text) } self.present(vc, animated: true, completion: nil) }.disposed(by: disposeBag) // 更换图标 rootView.groupIconView.rx.tapGesture.subscribe { _ in guard let model = self.viewModel.groupModel, model.is_owner else { return } let vc = GroupIconListVC(iconIndex: "\(model.icon_index)") vc.onSelectIcon = { index in self.requestChangeIcon(index) } self.navigationController?.pushViewController(vc, animated: true) }.disposed(by: disposeBag) // 审核开关 rootView.switchBtn.rx.isOn .subscribe(onNext: { isOn in guard let model = self.viewModel.groupModel, model.is_owner else { return } self.requestChangeReview(isOn) }) .disposed(by: disposeBag) // 标签 rootView.tagView.rx.tapGesture.subscribe { _ in guard let model = self.viewModel.groupModel, model.is_owner else { return } GroupTagListView.show(selectedTagList: model.labels) { tagList in guard let model = self.viewModel.groupModel, model.is_owner, let list = tagList else { return } self.requestEditLabels(labels: list) } }.disposed(by: disposeBag) // 邀请成员 rootView.inviteView.rx.tapGesture.subscribe(onNext: { _ in guard let model = self.viewModel.groupModel else { return } AppRouter.push(Route.inviteJoin, userInfo: ["groupInfo": model.toJSON()]) }).disposed(by: disposeBag) } // 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.rootView.setupData(model) }.disposed(by: disposeBag) } private func requestChangeIcon(_ iconIndex: Int) { DLToast.showLoading() GroupService.changeIcon(requestData: ["group_key": viewModel.groupId, "icon_index": iconIndex]).subscribe { response in DLToast.dismiss() self.requestGroupInfo() }.disposed(by: disposeBag) } private func requestChangeReview(_ review: Bool) { DLToast.showLoading() GroupService.changeReview(requestData: ["group_key": viewModel.groupId, "review": review]).subscribe { response in DLToast.dismiss() self.requestGroupInfo() }.disposed(by: disposeBag) } private func requestEditName(_ name: String) { DLToast.showLoading() GroupService.editName(requestData: ["group_key": viewModel.groupId, "group_name": name]).subscribe { response in DLToast.dismiss() self.requestGroupInfo() }.disposed(by: disposeBag) } private func requestEditDesc(_ desc: String) { DLToast.showLoading() GroupService.editDesc(requestData: ["group_key": viewModel.groupId, "description": desc]).subscribe { response in DLToast.dismiss() self.requestGroupInfo() }.disposed(by: disposeBag) } private func requestEditLabels(labels: [String]) { DLToast.showLoading() GroupService.editLabels(requestData: ["group_key": viewModel.groupId, "labels": labels]).subscribe { response in DLToast.dismiss() self.requestGroupInfo() }.disposed(by: disposeBag) } // MARK: - Init init(groupId: String) { self.viewModel = GroupSettingViewModel(groupId: groupId) super.init(nibName: nil, bundle: nil) } required init?(coder: NSCoder) { fatalError("init(coder:) has not been implemented") } }