jsdw_ios/QuickLocation/Section/LockDistract/LockDistractVC.swift

122 lines
3.8 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 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.tapGesture
.subscribe(onNext: { _ in
/// TODO
}).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
guard !model.default_group_key.isEmpty else {
self.applyMembers([])
return
}
GroupService.groupUsers(groupKey: model.default_group_key)
.subscribe(onNext: { [weak self] response in
guard response.isValid(for: model.default_group_key) else {
DLToast.showError(text: response.message ?? "获取圈子成员失败")
return
}
self?.applyMembers(response.list)
}, onError: { error in
DLToast.showError(text: error.localizedDescription)
})
.disposed(by: self.disposeBag)
}).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)
return
}
let m = members[selectedIndex]
rootView.configureMember(name: m.nick_name, avatar: m.userIcon)
}
private func switchGroup() {
guard let groupModel else {
loadGroupMembers()
return
}
GroupListPopView.show(groupModel: groupModel, currentMembers: members) { [weak self] groupKey in
guard let self, let key = groupKey else { return }
GroupService.operate(opType: "setdefault", requestData: ["group_key": key])
.subscribe(onNext: { [weak self] _ in
NotificationCenter.default.post(name: .RefreshGroupInfoNotification, object: nil)
self?.loadGroupMembers()
})
.disposed(by: self.disposeBag)
}
}
}