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