jsdw_ios/QuickLocation/Section/LockDistract/LockDistractVC.swift

138 lines
4.2 KiB
Swift
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

//
// LockDistractVC.swift
// QuickLocation
//
import UIKit
import RxSwift
import RxCocoa
final class LockDistractVC: BaseViewController {
private var rootView: LockDistractView!
private var groupModel: GroupModel?
private var activeGroupKey: String = ""
private var members: [GroupMemberModel] = []
private var selectedIndex = 0
override var isNavigationBarHidden: Bool { true }
override func loadView() {
rootView = LockDistractView(frame: UIScreen.main.bounds)
view = rootView
}
override func viewDidLoad() {
super.viewDidLoad()
view.backgroundColor = UIColor(hexStr: "#FAFAFA")
bind()
loadGroupMembers()
}
private func bind() {
rootView.navView.onBackTapped = { [weak self] in
self?.navigationController?.popViewController(animated: true)
}
rootView.switchGroupBtn.rx.tap
.subscribe(onNext: { [weak self] in
self?.switchGroup()
})
.disposed(by: disposeBag)
rootView.memberPrevBtn.rx.tap
.subscribe(onNext: { [weak self] in
self?.stepMember(-1)
})
.disposed(by: disposeBag)
rootView.memberNextBtn.rx.tap
.subscribe(onNext: { [weak self] in
self?.stepMember(1)
})
.disposed(by: disposeBag)
// /
rootView.notFetchedView.rx.tap
.subscribe(onNext: { _ in
LockDistractPermissionPopView.show()
}).disposed(by: disposeBag)
}
private func loadGroupMembers() {
GroupService.groupInfo().subscribe(onNext: { [weak self] response in
guard let self, let model = response.model else { return }
self.groupModel = model
self.activeGroupKey = model.default_group_key
self.updateGroupName()
self.loadUsers(for: self.activeGroupKey)
}).disposed(by: disposeBag)
}
private func loadUsers(for groupKey: String) {
guard !groupKey.isEmpty else {
applyMembers([])
return
}
GroupService.groupUsers(groupKey: groupKey)
.subscribe(onNext: { [weak self] response in
guard response.isValid(for: groupKey) else {
DLToast.showError(text: response.message ?? "获取圈子成员失败")
return
}
self?.applyMembers(response.list)
}, onError: { error in
DLToast.showError(text: error.localizedDescription)
})
.disposed(by: disposeBag)
}
private func applyMembers(_ members: [GroupMemberModel]) {
self.members = members
selectedIndex = 0
refreshMember()
rootView.setTodayLockCount(0)
}
private func stepMember(_ delta: Int) {
guard !members.isEmpty else { return }
let count = members.count
selectedIndex = (selectedIndex + delta + count) % count
refreshMember()
}
private func refreshMember() {
guard members.indices.contains(selectedIndex) else {
rootView.configureMember(name: " ", avatar: nil)
rootView.configureLocked(false)
return
}
let m = members[selectedIndex]
let name = m.remark.isEmpty ? m.nick_name : m.remark
rootView.configureMember(name: name, avatar: m.userIcon)
rootView.configureLocked(false)
}
private func updateGroupName() {
let name = groupModel?.groups.first(where: { $0.group_key == activeGroupKey })?.name ?? ""
rootView.setGroupName(name)
}
private func switchGroup() {
guard let groupModel else {
loadGroupMembers()
return
}
GroupListPopView.show(
groupModel: groupModel,
currentMembers: members,
selectedKey: activeGroupKey
) { [weak self] groupKey in
guard let self, let key = groupKey, key != self.activeGroupKey else { return }
self.activeGroupKey = key
self.updateGroupName()
self.loadUsers(for: key)
}
}
}