jsdw_ios/QuickLocation/Section/Group/InviteJoin/InviteJoinVC.swift

125 lines
4.0 KiB
Swift

//
// InviteJoinVC.swift
// QuickLocation
//
// Created by on 2026/6/1.
//
import UIKit
import ObjectMapper
import RxSwift
import RxCocoa
import Kingfisher
class InviteJoinVC: BaseViewController {
fileprivate var rootView: InviteJoinView!
override func loadView() {
rootView = InviteJoinView(frame: UIScreen.main.bounds)
view = rootView
}
private let groupInModel: GroupInfoModel?
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view.
//
rootView.shareAppBtn.rx.tap.subscribe(onNext: { _ in
SharePopView.show()
}).disposed(by: disposeBag)
//
rootView.shareCodeBtn.rx.tap.subscribe(onNext: { [weak self] in
guard let self = self else { return }
guard let config = AppContextManager.shared.systemConfig,
let shareConfig = config.shareConfig else { return }
DLToast.showLoading()
let fallbackImage = UIImage(named: "Common/logo108")
let imageURL: URL? = {
if shareConfig.image.isEmpty { return nil }
return URL(string: shareConfig.image)
}()
let sendMessage: (UIImage?) -> Void = { [weak self] thumbImage in
guard let self = self else { return }
DLToast.dismiss()
guard let screenshot = self.rootView.inviteInfoView.takeScreenshot(),
let imageData = screenshot.pngData() else {
DLToast.showError(text: "分享失败")
return
}
let message = WXMediaMessage()
message.title = "邀请加入圈子"
message.description = shareConfig.content
if let thumb = thumbImage {
message.setThumbImage(thumb)
}
let imageObject = WXImageObject()
imageObject.imageData = imageData
message.mediaObject = imageObject
let req = SendMessageToWXReq()
req.bText = false
req.message = message
req.scene = 0
WXApi.send(req)
}
if let url = imageURL {
KingfisherManager.shared.retrieveImage(with: url) { result in
switch result {
case .success(let value):
sendMessage(value.image)
case .failure:
sendMessage(fallbackImage)
}
}
} else {
sendMessage(fallbackImage)
}
}).disposed(by: disposeBag)
guard let model = groupInModel else { return }
rootView.groupIcon.image = model.groupIcon
rootView.groupNameLab.text = model.name
requestOperateGroup(key: model.group_key)
}
// MARK: - API
private func requestOperateGroup(key: String) {
DLToast.showLoading()
GroupService.operate(opType: "share", requestData: ["group_key" : key]).subscribe(onNext: { [weak self] response in
guard let self = self,
let data = response.data,
let code = data["share_code"] as? String else { return }
self.rootView.inviteCodeLab.text = code
self.rootView.qrCodeImgView.image = code.createQRCode(size: self.rootView.qrCodeImgView.dl.size)
}, onError: { (error) in
DLToast.show(text: "获取错误,请重试") {
AppRouter.shared.popOrDismiss()
}
}).disposed(by: disposeBag)
}
// MARK: - Init
init(groupInfo: [String: Any]) {
self.groupInModel = GroupInfoModel.init(JSON: groupInfo)
super.init(nibName: nil, bundle: nil)
}
required init?(coder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
}