QSLMessageHeaderView.swift 6.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203
  1. //
  2. // QSLMessageHeaderView.swift
  3. // QuickSearchLocation
  4. //
  5. // Created by Destiny on 2024/12/5.
  6. //
  7. import UIKit
  8. protocol QSLMessageHeaderViewDelegate: NSObjectProtocol {
  9. func refuseBtnAction(model: QSLRequestModel)
  10. func accpetBtnAction(model: QSLRequestModel)
  11. func jumpToRequest()
  12. }
  13. class QSLMessageHeaderView: UIView {
  14. weak var delegate: QSLMessageHeaderViewDelegate?
  15. var model: QSLRequestModel?
  16. lazy var contentView: UIView = {
  17. let view = UIView()
  18. view.backgroundColor = .white
  19. return view
  20. }()
  21. lazy var avatarImageView: UIImageView = {
  22. let imageView = UIImageView()
  23. imageView.image = UIImage(named: "friends_cell_other_avatar")
  24. return imageView
  25. }()
  26. lazy var titleLabel: UILabel = {
  27. let label = UILabel()
  28. label.text("用户1388888888向您发出了好友申请")
  29. label.mediumFont(15)
  30. label.textColor = .hexStringColor(hexString: "#404040")
  31. label.setSpecificTextColor("1388888888", color: .hexStringColor(hexString: "#15CBA1"))
  32. return label
  33. }()
  34. lazy var timeLabel: UILabel = {
  35. let label = UILabel()
  36. label.text("2023-10-20 09:43")
  37. label.font(13)
  38. label.textColor = .hexStringColor(hexString: "#A7A7A7")
  39. return label
  40. }()
  41. lazy var refuseBtn: UIButton = {
  42. let btn = UIButton()
  43. btn.backgroundColor = QSLColor.backGroundColor
  44. btn.title("拒绝")
  45. btn.textColor(.hexStringColor(hexString: "#A7A7A7"))
  46. btn.addRadius(radius: 16.rpx)
  47. btn.addBorder(borderWidth: 1.rpx, borderColor: .hexStringColor(hexString: "#E2E2E2"))
  48. btn.addTarget(self, action: #selector(refuseBtnAction), for: .touchUpInside)
  49. return btn
  50. }()
  51. lazy var agreeBtn: UIButton = {
  52. let btn = UIButton()
  53. btn.gradientBackgroundColor(color1: .hexStringColor(hexString: "#15CBA1"), color2: .hexStringColor(hexString: "#15CBA1"), width: 120.rpx, height: 32.rpx, direction: .horizontal)
  54. btn.title("同意")
  55. btn.addRadius(radius: 16.rpx)
  56. btn.addBorder(borderWidth: 1.rpx, borderColor: .hexStringColor(hexString: "#E2E2E2"))
  57. btn.addTarget(self, action: #selector(agreeBtnAction), for: .touchUpInside)
  58. return btn
  59. }()
  60. lazy var checkBtn: UIButton = {
  61. let btn = UIButton()
  62. btn.title("查看全部申请")
  63. btn.image(UIImage(named: "public_arrow_right_A7"))
  64. btn.textColor(.hexStringColor(hexString: "#A7A7A7"))
  65. btn.font(13)
  66. btn.setImageTitleLayout(.imgRight, spacing: 0)
  67. btn.addTarget(self, action: #selector(checkBtnAction), for: .touchUpInside)
  68. return btn
  69. }()
  70. override init(frame: CGRect) {
  71. super.init(frame: frame)
  72. initView()
  73. }
  74. required init?(coder: NSCoder) {
  75. fatalError("init(coder:) has not been implemented")
  76. }
  77. @objc func refuseBtnAction() {
  78. if let model = self.model {
  79. delegate?.refuseBtnAction(model: model)
  80. }
  81. }
  82. @objc func agreeBtnAction() {
  83. if let model = self.model {
  84. delegate?.accpetBtnAction(model: model)
  85. }
  86. }
  87. @objc func checkBtnAction() {
  88. delegate?.jumpToRequest()
  89. }
  90. func config(model: QSLRequestModel) {
  91. self.model = model
  92. self.titleLabel.text = "用户\(model.userPhone)向您发出了好友申请"
  93. self.titleLabel.setSpecificTextColor(model.userPhone, color: .hexStringColor(hexString: "#15CBA1"))
  94. self.timeLabel.text = Date.timestampToFormatterTimeString(timestamp: model.createTime)
  95. switch QSLRequestType(rawValue: model.status) {
  96. case .wait:
  97. break
  98. case .refused:
  99. self.agreeBtn.isHidden = true
  100. self.refuseBtn.title("已拒绝")
  101. break
  102. case .agreed:
  103. self.agreeBtn.isHidden = true
  104. self.refuseBtn.backgroundColor = .white
  105. self.refuseBtn.layer.borderColor = QSLColor.themeMainColor.cgColor
  106. self.refuseBtn.title("已同意")
  107. self.refuseBtn.textColor(QSLColor.themeMainColor)
  108. break
  109. default:
  110. break
  111. }
  112. }
  113. }
  114. extension QSLMessageHeaderView {
  115. func initView() {
  116. self.backgroundColor = QSLColor.backGroundColor
  117. self.addSubview(contentView)
  118. contentView.snp.makeConstraints { make in
  119. make.top.right.left.equalTo(0)
  120. make.bottom.equalTo(-8.rpx)
  121. }
  122. contentView.addSubview(avatarImageView)
  123. avatarImageView.snp.makeConstraints { make in
  124. make.size.equalTo(CGSize(width: 48.rpx, height: 48.rpx))
  125. make.left.equalTo(12.rpx)
  126. make.top.equalTo(20.rpx)
  127. }
  128. contentView.addSubview(titleLabel)
  129. titleLabel.snp.makeConstraints { make in
  130. make.left.equalTo(avatarImageView.snp.right).offset(8.rpx)
  131. make.right.equalTo(-12.rpx)
  132. make.bottom.equalTo(avatarImageView.snp.centerY)
  133. }
  134. contentView.addSubview(timeLabel)
  135. timeLabel.snp.makeConstraints { make in
  136. make.left.equalTo(avatarImageView.snp.right).offset(8.rpx)
  137. make.right.equalTo(-12.rpx)
  138. make.top.equalTo(titleLabel.snp.bottom).offset(3.rpx)
  139. }
  140. contentView.addSubview(refuseBtn)
  141. refuseBtn.snp.makeConstraints { make in
  142. make.size.equalTo(CGSize(width: 120.rpx, height: 32.rpx))
  143. make.left.equalTo(avatarImageView.snp.right).offset(8.rpx)
  144. make.top.equalTo(timeLabel.snp.bottom).offset(16.rpx)
  145. }
  146. contentView.addSubview(agreeBtn)
  147. agreeBtn.snp.makeConstraints { make in
  148. make.size.equalTo(CGSize(width: 120.rpx, height: 32.rpx))
  149. make.left.equalTo(refuseBtn.snp.right).offset(12.rpx)
  150. make.top.equalTo(timeLabel.snp.bottom).offset(16.rpx)
  151. }
  152. contentView.addSubview(checkBtn)
  153. checkBtn.snp.makeConstraints { make in
  154. make.size.equalTo(CGSize(width: 100.rpx, height: 20.rpx))
  155. make.centerX.equalToSuperview()
  156. make.bottom.equalTo(-8.rpx)
  157. }
  158. }
  159. }