jsdw_ios/QuickLocation/Section/Group/GroupSetting/GroupSettingVC.swift

150 lines
5.3 KiB
Swift

//
// 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")
}
}