160 lines
6.1 KiB
Swift
160 lines
6.1 KiB
Swift
//
|
|
// MemberInfoVC.swift
|
|
// QuickLocation
|
|
//
|
|
|
|
import UIKit
|
|
import RxSwift
|
|
import RxCocoa
|
|
import ObjectMapper
|
|
import Kingfisher
|
|
|
|
final class MemberInfoVC: BaseViewController {
|
|
|
|
private var rootView: MemberInfoView!
|
|
private var members: [GroupMemberModel]
|
|
private var selectedUserId: String
|
|
private var groupModel: GroupModel?
|
|
|
|
init(members: [GroupMemberModel], selectedUserId: String, groupModel: GroupModel?) {
|
|
self.members = members
|
|
self.selectedUserId = selectedUserId
|
|
self.groupModel = groupModel
|
|
super.init(nibName: nil, bundle: nil)
|
|
}
|
|
|
|
convenience init(userInfo: [String: Any]) {
|
|
let rawMembers = userInfo["members"]
|
|
let membersJson: [[String: Any]]
|
|
if let arr = rawMembers as? [[String: Any]] {
|
|
membersJson = arr
|
|
} else if let arr = rawMembers as? [Any] {
|
|
membersJson = arr.compactMap { $0 as? [String: Any] }
|
|
} else {
|
|
membersJson = []
|
|
}
|
|
let members = membersJson.compactMap { GroupMemberModel(JSON: $0) }
|
|
let selected = (userInfo["userId"] as? String) ?? members.first?.user_id ?? ""
|
|
let group = (userInfo["groupJson"] as? [String: Any]).flatMap { GroupModel(JSON: $0) }
|
|
self.init(members: members, selectedUserId: selected, groupModel: group)
|
|
}
|
|
|
|
required init?(coder: NSCoder) { fatalError("init(coder:) has not been implemented") }
|
|
|
|
override func loadView() {
|
|
rootView = MemberInfoView(frame: UIScreen.main.bounds)
|
|
view = rootView
|
|
}
|
|
|
|
override func viewDidLoad() {
|
|
super.viewDidLoad()
|
|
rootView.memberCV.dataSource = self
|
|
rootView.memberCV.delegate = self
|
|
bind()
|
|
refreshDetail()
|
|
rootView.memberCV.reloadData()
|
|
}
|
|
|
|
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)
|
|
}
|
|
|
|
private func switchGroup() {
|
|
guard let groupModel else { return }
|
|
GroupListPopView.show(groupModel: groupModel) { [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?.navigationController?.popViewController(animated: true)
|
|
})
|
|
.disposed(by: self.disposeBag)
|
|
}
|
|
}
|
|
|
|
private func refreshDetail() {
|
|
let member = members.first { $0.user_id == selectedUserId }
|
|
let isSelf = selectedUserId == AppContextManager.shared.userId
|
|
let joinText: String = {
|
|
guard let ts = member?.join_time, ts > 0 else { return "**" }
|
|
let date = Date(timeIntervalSince1970: TimeInterval(ts) / 1000)
|
|
let f = DateFormatter()
|
|
f.dateFormat = "yyyy-MM-dd"
|
|
return f.string(from: date)
|
|
}()
|
|
let circleName: String = {
|
|
guard let gm = groupModel else { return "共同圈子" }
|
|
let name = gm.groups.first(where: { $0.group_key == gm.default_group_key })?.name
|
|
?? gm.groups.first?.name
|
|
return (name?.isEmpty == false) ? name! : "共同圈子"
|
|
}()
|
|
|
|
if isSelf {
|
|
let sexText: String = {
|
|
switch AppContextManager.shared.sex {
|
|
case 1: return "男"
|
|
case 2: return "女"
|
|
default: return "未设置"
|
|
}
|
|
}()
|
|
rootView.renderRows([
|
|
MemberInfoRow(title: "头像", value: "", kind: .avatar, avatarURL: member?.head_pic) { [weak self] in
|
|
AppRouter.push(Route.myProfile)
|
|
_ = self
|
|
},
|
|
MemberInfoRow(title: "昵称", value: member?.nick_name ?? "", kind: .disclosure) {
|
|
AppRouter.push(Route.myProfile)
|
|
},
|
|
MemberInfoRow(title: "性别", value: sexText, kind: .disclosure) {
|
|
AppRouter.push(Route.myProfile)
|
|
},
|
|
MemberInfoRow(title: "添加时间", value: joinText, kind: .text),
|
|
MemberInfoRow(title: "共同圈子", value: circleName, kind: .tag)
|
|
])
|
|
} else {
|
|
rootView.renderRows([
|
|
MemberInfoRow(title: "昵称", value: member?.nick_name ?? "", kind: .text),
|
|
MemberInfoRow(title: "备注", value: member?.nick_name ?? "", kind: .disclosure) {
|
|
DLToast.show(text: "敬请期待")
|
|
},
|
|
MemberInfoRow(title: "关系", value: "未绑定", kind: .disclosure) {
|
|
DLToast.show(text: "敬请期待")
|
|
},
|
|
MemberInfoRow(title: "性别", value: "保密", kind: .text),
|
|
MemberInfoRow(title: "添加时间", value: joinText, kind: .text),
|
|
MemberInfoRow(title: "共同圈子", value: circleName, kind: .tag)
|
|
])
|
|
}
|
|
}
|
|
}
|
|
|
|
extension MemberInfoVC: UICollectionViewDataSource, UICollectionViewDelegate {
|
|
func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
|
|
members.count
|
|
}
|
|
|
|
func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
|
|
let cell: GroupMemberListCell = collectionView.dequeueReusableCell(for: indexPath)
|
|
let model = members[indexPath.item]
|
|
cell.configure(
|
|
model: model,
|
|
isCurrentUser: model.user_id == AppContextManager.shared.userId,
|
|
isSelected: model.user_id == selectedUserId
|
|
)
|
|
return cell
|
|
}
|
|
|
|
func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {
|
|
selectedUserId = members[indexPath.item].user_id
|
|
collectionView.reloadData()
|
|
refreshDetail()
|
|
}
|
|
}
|