CNLiveInputFeedBackViewController.swift 9.69 KB
//
//  CNLiveInputFeedBackViewController.swift
//  metaCode
//
//  Created by open on 2023/6/7.
//

import Foundation
import HXPHPicker

enum InputFeedBackType {
    case problem
    case product
}

let textView_placeholder = "请尽可能详细地输入您遇到的问题,包括时间、问题发生的页面、进行什么样的操作、出现的具体问题和细节,以便我们更快地处理您的问题 (至少5个字)"
class CNLiveInputFeedBackViewController: CNLiveBaseViewController, UITextViewDelegate {
    
    var _show_type:InputFeedBackType!
    init(show_type:InputFeedBackType) {
       super.init(nibName:nil, bundle:nil)
        _show_type = show_type
    }
    
    lazy var iView: UIView = {
        let iView = UIView.init()
        iView.backgroundColor = .white
        iView.layer.cornerRadius = 10
        iView.layer.masksToBounds = true
        return iView
    }()
    
    lazy var p_textView : UITextView = {
        let p_textView = UITextView.init()
        p_textView.backgroundColor = .white
        p_textView.font = BoldFont_16
        p_textView.text = textView_placeholder
        p_textView.textColor = HexColor("#C8C8C8")
        p_textView.delegate = self
        return p_textView
    }()
    
    lazy var numberLabel : UILabel = {
        let numberLabel = UILabel.init()
        numberLabel.text = "0/200"
        numberLabel.textColor = .black
        numberLabel.font = Font_14
        numberLabel.textAlignment = .right
        return numberLabel
    }()
    
    lazy var photoLabel : UILabel = {
        let photoLabel = UILabel.init()
        let mString = NSMutableAttributedString(string: "上传截图 (选填 0/3)")
        mString.addAttributes([.foregroundColor: UIColor.black,.font: BoldFont_18], range: NSRange(location: 0, length: 4))
        mString.addAttributes([.foregroundColor: HexColor("#B4B4B4")!,.font: Font_14], range: NSRange(location: 4, length: 9))
        photoLabel.attributedText = mString
        return photoLabel
    }()
    
    lazy var photoView: MinePhotoUploadView = {
        let pView = MinePhotoUploadView.init(frame: .zero) { [self] index in
            let mString = NSMutableAttributedString(string: "上传截图 (选填 \(index)/3)")
            mString.addAttributes([.foregroundColor: UIColor.black,.font: BoldFont_18], range: NSRange(location: 0, length: 4))
            mString.addAttributes([.foregroundColor: HexColor("#B4B4B4")!,.font: Font_14], range: NSRange(location: 4, length: 9))
            photoLabel.attributedText = mString
        }
        pView.backgroundColor = .clear
        return pView
    }()
    
    lazy var mobileLabel : UILabel = {
        let mobileLabel = UILabel.init()
        let mString = NSMutableAttributedString(string: "联系电话 (选填)")
        mString.addAttributes([.foregroundColor: UIColor.black,.font: BoldFont_18], range: NSRange(location: 0, length: 4))
        mString.addAttributes([.foregroundColor: HexColor("#B4B4B4")!,.font: Font_14], range: NSRange(location: 4, length: 5))
        mobileLabel.attributedText = mString
        return mobileLabel
    }()
    
    lazy var mobileView: UIView = {
        let mobileView = UIView.init()
        mobileView.backgroundColor = .white
        mobileView.layer.cornerRadius = 10
        mobileView.layer.masksToBounds = true
        return mobileView
    }()
    
    lazy var mobileField: UITextField = {
        let mobileField = UITextField.init()
        mobileField.backgroundColor = .white
        mobileField.placeholder = "便于我们与您联系"
        mobileField.font = BoldFont_16_Fit
        mobileField.keyboardType = .numberPad
        mobileField.clearButtonMode = .whileEditing
        mobileField.layer.cornerRadius = 10
        mobileField.layer.masksToBounds = true
        return mobileField
    }()
    
    lazy var sendButton: UIButton = {
        let sendButton = UIButton(type: .custom)
        sendButton.setTitle("提  交", for: .normal)
        sendButton.setTitleColor(.white, for: .normal)
        sendButton.titleLabel?.font = BoldFont_16_Fit
        sendButton.layer.cornerRadius = 20
        sendButton.layer.masksToBounds = true
        sendButton.addTarget(self, action: #selector(sendInfoActionMothod), for: .touchUpInside)
        return sendButton
    }()
    
    required init?(coder aDecoder:NSCoder) {
       fatalError("init(coder:) has not been implemented")
    }
    
    override func viewWillAppear(_ animated: Bool) {
        
    }
    
    override func viewDidLoad() {
        super.viewDidLoad()
        navigationBarHidden = false
        switch _show_type {
        case .problem:
            titleName = "问题反馈"
        case .product:
            titleName = "产品建议"
        case .none:
            break
        }
        
        view.addSubview(iView)
        iView.snp.makeConstraints { make in
            make.centerX.equalToSuperview()
            make.top.equalToSuperview().offset(get_system_nav_height()+10)
            make.left.equalToSuperview().offset(10)
            make.right.equalToSuperview().offset(-10)
            make.height.equalTo(200)
        }
        
        iView.addSubview(p_textView)
        p_textView.snp.makeConstraints { make in
            make.top.left.equalToSuperview().offset(10)
            make.right.equalToSuperview().offset(-10)
            make.bottom.equalToSuperview().offset(-30)
        }
        
        iView.addSubview(numberLabel)
        numberLabel.snp.makeConstraints { make in
            make.left.bottom.equalToSuperview()
            make.right.equalToSuperview().offset(-20)
            make.height.equalTo(30)
        }
        
        view.addSubview(photoLabel)
        photoLabel.snp.makeConstraints { make in
            make.top.equalTo(iView.snp.bottom).offset(15)
            make.left.equalToSuperview().offset(10)
        }
        
        view.addSubview(photoView)
        photoView.snp.makeConstraints { make in
            make.left.right.equalToSuperview()
            make.top.equalTo(photoLabel.snp.bottom).offset(10)
            make.height.equalTo((KSreenWidth - 40)/3)
        }
        
        view.addSubview(mobileLabel)
        mobileLabel.snp.makeConstraints { make in
            make.top.equalTo(photoView.snp.bottom).offset(15)
            make.left.equalToSuperview().offset(10)
        }
        
        view.addSubview(mobileView)
        mobileView.snp.makeConstraints { make in
            make.left.equalToSuperview().offset(10)
            make.right.equalToSuperview().offset(-10)
            make.top.equalTo(mobileLabel.snp.bottom).offset(10)
            make.height.equalTo(50)
        }
        
        mobileView.addSubview(mobileField)
        mobileField.snp.makeConstraints { make in
            make.top.bottom.equalToSuperview()
            make.left.equalToSuperview().offset(10)
            make.right.equalToSuperview().offset(-10)
        }
        
        view.addSubview(sendButton)
        sendButton.snp.makeConstraints { make in
            make.bottom.equalToSuperview().offset(-get_system_tabbar_ui_offsetHeight() - 20)
            make.left.equalToSuperview().offset(10)
            make.right.equalToSuperview().offset(-10)
            make.height.equalTo(40)
        }
        setupWithSendBtnStatue(statue: false)

    }
    
    
    private func setupWithSendBtnStatue(statue: Bool) {
        var alpha = 0.3
        if statue {
            alpha = 1
        }
        sendButton.setGradient(colors: [UIColor(red: 103/255.0, green: 197/255.0, blue: 255/255.0, alpha: alpha),UIColor(red: 96/255.0, green: 154/255.0, blue: 255/255.0, alpha: alpha)], startPoint: CGPoint(x: 0, y: 0.5), endPoint: CGPoint(x: 1, y: 0.5))
        sendButton.isUserInteractionEnabled = statue
    }
    
    @objc func sendInfoActionMothod() {
        let array = photoView.selectedImages
        array.remove("")
        print("获取的图片:\(array) 内容:\(p_textView.text ?? "") 手机号:\(mobileField.text ?? "")")
    }
}


extension CNLiveInputFeedBackViewController {
    func textViewDidEndEditing(_ textView: UITextView) {
        if textView.text.lengthOfBytes(using: .utf8) < 1 {
            textView.text = textView_placeholder
            textView.textColor = HexColor("#C8C8C8")
            setupWithSendBtnStatue(statue: false)
        }
    }
    func textViewDidBeginEditing(_ textView: UITextView) {
        if textView.text == textView_placeholder {
            textView.text = ""
            textView.textColor = .black
            setupWithSendBtnStatue(statue: true)
        }
    }
    func textViewDidChange(_ textView: UITextView) {
        if textView.text.count > 200 {
            let selectRang = textView.markedTextRange
            
            if let selectRang = selectRang {
                let position = textView.position(from: (selectRang.start), offset: 0)
                if position != nil {
                    return
                }
            }
            
            let textContent = textView.text ?? ""
            let textNum = textContent.count
            
            if textNum > 200 {
                textView.text = string_prefix(index: 200, text: textContent)
            }
        }
        numberLabel.text = "\(textView.text.count)/200"
    }
    func textView(_ textView: UITextView, shouldChangeTextIn range: NSRange, replacementText text: String) -> Bool {
        if textView.returnKeyType == .done {
            if text == "\n" {
                textView.resignFirstResponder()
            }
            return true
        }
        return true
    }
    
    private func string_prefix(index: Int, text: String) -> String {
        if text.count <= index {
            return text
        } else {
            let index = text.index(text.startIndex, offsetBy: index)
            let str = text.prefix(upTo: index)
            return String(str)
        }
    }
}