| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385 |
- //
- // QSLContactController.swift
- // QuickSearchLocation
- //
- // Created by Destiny on 2024/12/11.
- //
- import UIKit
- import YYText
- enum QSLContactJumpPage: Int {
- case shortcut = 1 // 快捷键
- case mine = 2 // 我的页面
- }
- class QSLContactController: QSLBaseController {
-
- var type: QSLContactJumpPage?
-
- var contactList: [QSLContactModel]?
-
- lazy var bgImageView: UIImageView = {
-
- let imageView = UIImageView()
- imageView.image = UIImage(named: "mine_bg")
- return imageView
- }()
-
- lazy var backButton: UIButton = {
-
- let button = UIButton()
- button.image(UIImage(named: "public_back_btn"))
- button.title("添加紧急联系人")
- button.mediumFont(17)
- button.textColor(QSLColor.Color_202020)
- button.setImageTitleLayout(.imgLeft, spacing: 4.rpx)
- button.addTarget(self, action: #selector(backBtnAction), for: .touchUpInside)
- return button
- }()
-
- lazy var contactIcon: UIImageView = {
-
- let imageView = UIImageView()
- imageView.image = UIImage(named: "contact_icon")
- return imageView
- }()
-
- lazy var contactLabel: UILabel = {
-
- let label = UILabel()
- label.textAlignment = .center
- label.numberOfLines = 0
- label.text("使用一键求助,需要添加正确的紧急联系人手机号码,您的联系人将会收到短信以及APP消息通知。")
- label.font(13)
- label.textColor = .hexStringColor(hexString: "#404040")
- label.changeLineSpace(space: 5)
- return label
- }()
-
- lazy var titleIcon: UIImageView = {
-
- let imageView = UIImageView()
- imageView.image = UIImage(named: "contact_title_icon")
- return imageView
- }()
-
- lazy var addBtn: UIButton = {
-
- let btn = UIButton()
- btn.title("添加联系人")
- btn.textColor(.hexStringColor(hexString: "#15CBA1"))
- btn.mediumFont(14)
- btn.image(UIImage(named: "contact_add_icon"))
- btn.addTarget(self, action: #selector(addBtnAction), for: .touchUpInside)
- return btn
- }()
-
- lazy var emptyAddLabel: YYLabel = {
-
- let label = YYLabel()
-
- let attr = NSMutableAttributedString()
-
- let firstAttr = NSMutableAttributedString(string: "未添加联系人,")
- firstAttr.font(14)
- firstAttr.color(.hexStringColor(hexString: "#A7A7A7"))
- attr.append(firstAttr)
-
- let addHL = YYTextHighlight()
- var addStr = "点我添加"
-
- let addText = NSMutableAttributedString(string: addStr)
-
- addText.font(14)
- addText.color(.hexStringColor(hexString: "#15CBA1"))
- addText.yy_setTextHighlight(addHL, range: NSRange(location: 0, length: addStr.count))
- addHL.tapAction = { [weak self] containerView, text, range, rect in
- self?.addBtnAction()
- }
- attr.append(addText)
- label.attributedText = attr
-
- return label
- }()
-
- lazy var contactTableView: UITableView = {
-
- let tableView = UITableView(frame: .zero, style: .grouped)
- tableView.backgroundColor = QSLColor.backGroundColor
- tableView.separatorStyle = .none
- tableView.showsVerticalScrollIndicator = false
- tableView.delegate = self
- tableView.dataSource = self
- tableView.tableViewNeverAdjustContentInset()
- tableView.bounces = true
- tableView.isUserInteractionEnabled = true
- tableView.isScrollEnabled = true
- tableView.contentInsetAdjustmentBehavior = .never
- tableView.register(cellClass: QSLContactCell.self)
-
- return tableView
- }()
-
- lazy var bottomView: UIView = {
-
- let view = UIView(frame: CGRect(x: 0, y: 0, width: QSLConst.qsl_kScreenW, height: 76.rpx))
- view.backgroundColor = .white
- view.addFourCorner(topLeft: 12.rpx, topRight: 12.rpx, bottomLeft: 0, bottomRight: 0)
- view.layer.shadowOffset = CGSize(width: 0, height: -1)
- view.layer.shadowColor = UIColor.hexStringColor(hexString: "#A7A7A7", alpha: 0.1).cgColor
- view.layer.shadowOpacity = 5
- view.layer.shadowRadius = 0
- return view
- }()
-
- lazy var sendBtn: UIButton = {
-
- let btn = UIButton()
- btn.addRadius(radius: 22.rpx)
- btn.gradientBackgroundColor(color1: .hexStringColor(hexString: "#FF5146"), color2: .hexStringColor(hexString: "#FF766D"), width: QSLConst.qsl_kScreenW - 32.rpx, height: 44.rpx, direction: .horizontal)
- btn.title("一键发送求助")
- btn.mediumFont(16)
- btn.textColor(.white)
- btn.addTarget(self, action: #selector(sendAllBtnAction), for: .touchUpInside)
- return btn
- }()
-
- override func viewDidLoad() {
- super.viewDidLoad()
- self.initView()
-
- self.requestContactList()
-
- NotificationCenter.default.addObserver(self, selector: #selector(requestContactList), name: QSLNotification.QSLRefreshContact, object: nil)
-
- if let type = self.type {
- if type == .mine {
- QSEventHandle.gravityPush(eventName: QSLGravityConst.contact_show, eventProps: ["id": 1002])
- } else {
- QSEventHandle.gravityPush(eventName: QSLGravityConst.contact_show, eventProps: ["id": 1001])
- }
- }
- }
-
- }
- extension QSLContactController {
-
- @objc func addBtnAction() {
- if QSLBaseManager.shared.isVip() {
- if !QSLBaseManager.shared.isLogin() {
- QSLJumpManager.shared.pushToLogin(type: .contact)
- return
- }
- }else{
- QSLJumpManager.shared.pushToVip(type: .contact)
- return
- }
-
- QSLContactAddAlertView.alert(vc: self) { phone in
- self.requestAddContact(phone: phone)
- }
- }
-
- @objc func sendAllBtnAction() {
- QSEventHandle.gravityPush(eventName: QSLGravityConst.contact_resort_all)
- // QSLContactSendFailAlertView.alert(view: self.view, contactList: self.contactList!)
- QSLNetwork().request(.contactMaydayAll(dict: [:])) { response in
-
- if let data = response.fetchJSONString(path: "data>fail").data(using: .utf8), let failList = try? JSONSerialization.jsonObject(with: data, options: []) as? [String] {
- print(failList)
- if failList.count > 0 {
- QSLContactSendFailAlertView.alert(view: self.view, contactList: failList)
- QSEventHandle.gravityPush(eventName: QSLGravityConst.contact_resort_all_fail_alert)
- } else {
- self.view.toast(text: "求助消息发送成功")
- QSEventHandle.gravityPush(eventName: QSLGravityConst.contact_resort_all_success)
- }
- }
- } fail: { code, error in
- QSEventHandle.gravityPush(eventName: QSLGravityConst.contact_resort_all_fail)
- self.view.toast(text: "求助消息发送失败,请稍后重试")
- }
- }
- }
- extension QSLContactController: QSLContactCellDelegate {
-
- func resortClickAction(model: QSLContactModel) {
- QSEventHandle.gravityPush(eventName: QSLGravityConst.contact_resort_click)
- QSLAlertView.alert(view: self.view, title: "紧急求助", content: "确认向\(model.phone)发送短信求助?", isOneBtn: true, oneBtnText: "确认", oneBtnClosure: {
- QSEventHandle.gravityPush(eventName: QSLGravityConst.contact_resort_confirm)
- QSLNetwork().request(.contactMayday(dict: ["phone": model.phone])) { reponse in
- self.view.toast(text: "求助消息发送成功")
- QSEventHandle.gravityPush(eventName: QSLGravityConst.contact_resort_success)
- } fail: { code, error in
- self.view.toast(text: "求助消息发送失败,请核实手机号码")
- QSEventHandle.gravityPush(eventName: QSLGravityConst.contact_resort_fail)
- }
- }, closeBtnClosure: {
- QSEventHandle.gravityPush(eventName: QSLGravityConst.contact_resort_cancel)
- })
- }
-
- func favorClickAction(model: QSLContactModel) {
-
- QSLNetwork().request(.contactFavor(dict: ["phone": model.phone, "favor": true])) { reponse in
- self.view.toast(text: "修改默认联系人成功")
- NotificationCenter.default.post(name: QSLNotification.QSLRefreshContact, object: nil)
- } fail: { code, error in
- self.view.toast(text: "修改默认联系人失败,请稍后重试")
- }
- }
-
- func deleteClickAction(model: QSLContactModel) {
- QSEventHandle.gravityPush(eventName: QSLGravityConst.contact_delete)
- QSLAlertView.alert(view: self.view, title: "移除紧急联系人", content: "您确定要将\n\(model.phone)移除紧急联系人吗?", isOneBtn: false, firstBtnClosure: {
- QSEventHandle.gravityPush(eventName: QSLGravityConst.contact_delete_cancel)
- }, secondBtnClosure: {
- QSEventHandle.gravityPush(eventName: QSLGravityConst.contact_delete_confirm)
- QSLNetwork().request(.contactDelete(dict: ["phone": model.phone])) { reponse in
- self.view.toast(text: "删除联系人成功")
- NotificationCenter.default.post(name: QSLNotification.QSLRefreshContact, object: nil)
- } fail: { code, error in
- self.view.toast(text: "删除联系人失败,请稍后重试")
- }
- })
- }
-
- }
- extension QSLContactController {
-
- @objc func requestContactList() {
-
- QSLNetwork().request(.contactList(dict: [:])) { response in
-
- let list = response.mapArray(QSLContactModel.self, modelKey: "data>list")
- self.contactList = list
- self.contactTableView.reloadData()
- } fail: { code, error in
-
- self.view.toast(text: error)
- }
- }
-
- func requestAddContact(phone: String) {
-
- QSLNetwork().request(.contactCreate(dict: ["phone": phone])) { response in
-
- self.view.toast(text: "添加成功")
- NotificationCenter.default.post(name: QSLNotification.QSLRefreshContact, object: nil)
- } fail: { code, error in
-
- self.view.toast(text: error)
- }
- }
- }
- extension QSLContactController: UITableViewDelegate, UITableViewDataSource {
-
- func numberOfSections(in tableView: UITableView) -> Int {
- return self.contactList?.count ?? 0
- }
-
- func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
- return 1
- }
-
- func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
-
- let cell = tableView.dequeueReusableCell(cellType: QSLContactCell.self, cellForRowAt: indexPath)
- cell.delegate = self
- cell.selectionStyle = .none
- if let model = self.contactList?[indexPath.section] {
- cell.config(model: model)
- }
- return cell
- }
-
- func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
- return 112.rpx
- }
-
- func tableView(_ tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat {
- return 0.0001
- }
-
- func tableView(_ tableView: UITableView, heightForFooterInSection section: Int) -> CGFloat {
- return 8.rpx
- }
- }
- extension QSLContactController {
-
- func initView() {
-
- self.view.addSubview(bgImageView)
- bgImageView.snp.makeConstraints { make in
- make.left.top.right.equalTo(0)
- }
-
- self.view.addSubview(backButton)
- backButton.snp.makeConstraints { make in
- make.size.equalTo(CGSize(width: 150.rpx, height: 25.rpx))
- make.left.equalTo(12.rpx)
- make.top.equalTo(QSLConst.qsl_kStatusBarFrameH)
- }
-
- self.view.addSubview(contactIcon)
- contactIcon.snp.makeConstraints { make in
- make.size.equalTo(CGSize(width: 155.rpx, height: 126.rpx))
- make.centerX.equalToSuperview()
- make.top.equalTo(backButton.snp.bottom).offset(24.rpx)
- }
-
- self.view.addSubview(contactLabel)
- contactLabel.snp.makeConstraints { make in
- make.left.equalTo(20.rpx)
- make.right.equalTo(-20.rpx)
- make.top.equalTo(backButton.snp.bottom).offset(128.rpx)
- }
-
- self.view.addSubview(titleIcon)
- titleIcon.snp.makeConstraints { make in
- make.size.equalTo(CGSize(width: 89.rpx, height: 26.rpx))
- make.left.equalTo(20.rpx)
- make.top.equalTo(contactLabel.snp.bottom).offset(32.rpx)
- }
-
- self.view.addSubview(addBtn)
- addBtn.snp.makeConstraints { make in
- make.size.equalTo(CGSize(width: 90.rpx, height: 20.rpx))
- make.right.equalTo(-12.rpx)
- make.bottom.equalTo(titleIcon.snp.bottom)
- }
-
- self.view.addSubview(emptyAddLabel)
- emptyAddLabel.snp.makeConstraints { make in
- make.top.equalTo(addBtn.snp.bottom).offset(110.rpx)
- make.centerX.equalToSuperview()
- }
-
- self.view.addSubview(bottomView)
- bottomView.snp.makeConstraints { make in
- make.left.right.bottom.equalTo(0)
- make.height.equalTo(76.rpx)
- }
-
- bottomView.addSubview(sendBtn)
- sendBtn.snp.makeConstraints { make in
- make.size.equalTo(CGSize(width: 328.rpx, height: 44.rpx))
- make.center.equalToSuperview()
- }
-
- self.view.addSubview(contactTableView)
- contactTableView.snp.makeConstraints { make in
- make.top.equalTo(addBtn.snp.bottom).offset(13.rpx)
- make.left.equalTo(12.rpx)
- make.right.equalTo(-12.rpx)
- make.bottom.equalTo(bottomView.snp.top)
- }
- }
- }
|