| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170 |
- //
- // LNOrderCommentPanel.swift
- // Lanu
- //
- // Created by OneeChan on 2025/11/19.
- //
- import Foundation
- import UIKit
- import SnapKit
- class LNOrderCommentPanel: LNPopupView {
- var handler: ((Double, String) -> Void)? = nil
-
- private let avatar = UIImageView()
- private let titleLabel = UILabel()
- private let descLabel = UILabel()
- private let starLabel = UILabel()
- private let scoreView = LNFiveStarScoreView()
- private let commentView = LNCommonTextView()
- private let confirmButton = UIButton()
-
- private var curOrderId: String?
-
- override init(frame: CGRect) {
- super.init(frame: frame)
-
- setupViews()
- }
-
- func update(_ url: String, orderId: String) {
- avatar.sd_setImage(with: URL(string: url))
- curOrderId = orderId
- }
-
- required init?(coder: NSCoder) {
- fatalError("init(coder:) has not been implemented")
- }
- }
- extension LNOrderCommentPanel: LNFiveStarScoreViewDelegate {
- func onFiveStarScoreView(view: LNFiveStarScoreView, scoreChanged newScore: Double) {
- let bg = newScore == 0 ? nil : UIImage.primary_8
- starLabel.text = "\(newScore)"
- confirmButton.setBackgroundImage(bg, for: .normal)
- starLabel.textColor = .text_5
- descLabel.textColor = .text_5
- starLabel.font = .heading_h3
- }
- }
- extension LNOrderCommentPanel {
- private func setupViews() {
- avatar.layer.cornerRadius = 30
- avatar.layer.borderColor = UIColor.fill.cgColor
- avatar.layer.borderWidth = 2
- avatar.backgroundColor = .fill
- avatar.clipsToBounds = true
- container.addSubview(avatar)
- avatar.snp.makeConstraints { make in
- make.centerX.equalToSuperview()
- make.top.equalToSuperview().offset(-16)
- make.width.height.equalTo(60)
- }
-
- titleLabel.font = .heading_h3
- titleLabel.textColor = .text_5
- titleLabel.text = .init(key: "A00166")
- titleLabel.textAlignment = .center
- container.addSubview(titleLabel)
- titleLabel.snp.makeConstraints { make in
- make.horizontalEdges.equalToSuperview().inset(16)
- make.top.equalTo(avatar.snp.bottom).offset(11)
- }
-
- scoreView.startType = .whiteBorder
- scoreView.icSize = 30
- scoreView.editable = true
- scoreView.unit = 0.5
- scoreView.spacing = 12
- scoreView.delegate = self
- container.addSubview(scoreView)
- scoreView.snp.makeConstraints { make in
- make.centerX.equalToSuperview()
- make.top.equalTo(titleLabel.snp.bottom).offset(17)
- }
-
- descLabel.font = .heading_h5
- descLabel.textColor = .text_2
- descLabel.text = .init(key: "A00192")
- container.addSubview(descLabel)
- descLabel.snp.makeConstraints { make in
- make.centerY.equalTo(scoreView)
- make.leading.equalToSuperview().offset(20)
- make.trailing.lessThanOrEqualTo(scoreView.snp.leading).offset(-12)
- }
-
- starLabel.font = .heading_h5
- starLabel.textColor = .text_2
- starLabel.text = .init(key: "A00193")
- container.addSubview(starLabel)
- starLabel.snp.makeConstraints { make in
- make.centerY.equalTo(scoreView)
- make.trailing.equalToSuperview().offset(-20)
- make.leading.greaterThanOrEqualTo(scoreView.snp.leading).offset(12)
- }
-
- commentView.maxInput = LNOrderManager.orderCommentMaxLength
- commentView.placeholderLabel.text = .init(key: "A00182")
- container.addSubview(commentView)
- commentView.snp.makeConstraints { make in
- make.horizontalEdges.equalToSuperview().inset(16)
- make.top.equalTo(scoreView.snp.bottom).offset(12)
- make.height.equalTo(90)
- }
-
- confirmButton.setTitle(.init(key: "A00183"), for: .normal)
- confirmButton.titleLabel?.font = .heading_h3
- confirmButton.backgroundColor = .text_2
- confirmButton.setTitleColor(.text_1, for: .normal)
- confirmButton.layer.cornerRadius = 23.5
- confirmButton.clipsToBounds = true
- confirmButton.addAction(UIAction(handler: { [weak self] _ in
- guard let self else { return }
- guard let curOrderId else { return }
- LNOrderManager.shared.commentOrder(
- orderId: curOrderId,
- star: scoreView.score,
- comment: commentView.text)
- { [weak self] success in
- guard let self else { return }
- guard success else { return }
- self.dismiss()
- handler?(scoreView.score, commentView.text)
- }
- }), for: .touchUpInside)
- container.addSubview(confirmButton)
- confirmButton.snp.makeConstraints { make in
- make.horizontalEdges.equalToSuperview().inset(12)
- make.top.equalTo(commentView.snp.bottom).offset(25)
- make.bottom.equalToSuperview().offset(commonBottomInset)
- make.height.equalTo(47)
- }
- }
- }
- #if DEBUG
- import SwiftUI
- struct LNOrderCommentPanelPreview: UIViewRepresentable {
- func makeUIView(context: Context) -> some UIView {
- let container = UIView()
- container.backgroundColor = .lightGray
-
- let view = LNOrderCommentPanel()
- view.popup(container)
-
- return container
- }
-
- func updateUIView(_ uiView: UIViewType, context: Context) { }
- }
- #Preview(body: {
- LNOrderCommentPanelPreview()
- })
- #endif
|