CNLiveCreateCouponTableViewCell.swift 11.9 KB
//
//  CNLiveCreateCouponTableViewCell.swift
//  metaCode
//
//  Created by zx on 2023/12/15.
//

import Foundation

typealias couponGoodsHiddenActionBlock = (_ isHidden:Bool)->Void
typealias textFieldChangeActionBlock = (_ section:Int,_ number:String)->Void
typealias dateSelectActionBlock = (_ id:Int,_ date:NSDate)->Void
typealias couponGoodsActionBlock = (_ goodsId:String)->Void

class CNLiveCreateCouponTableViewCell:UITableViewCell,UITextFieldDelegate{
    var _model:CNLiveShopCouponModel?
    var model:CNLiveShopCouponModel?{
        get{
            _model
        }
        set{
            _model = newValue
            self.titleLabel.text = _model!.title
            self.leftView.isHidden = true
            self.titleNumber.isHidden = true
            self.moneyView.isHidden = true
            self.chooseView.isHidden = true
            self.goodsLabel.isHidden = true
            self.rightView.isHidden = true
            self.showSwitch.isHidden = true
            if _model!.id%5 == 0{
                self.lineView.isHidden = true
            }else{
                self.lineView.isHidden = false
            }
            switch _model!.type{
            case 1:
                self.leftView.isHidden = false
                self.titleNumber.isHidden = false
                self.titleNumber.isEnabled = true
                self.titleNumber.placeholder = _model!.subTitle
                self.titleNumber.text = _model!.message
                if (_model!.id == 3) {
                    self.titleNumber.keyboardType = .numberPad
                }else{
                    self.titleNumber.keyboardType = .default
                }
                
                break
            case 2:
                self.leftView.isHidden = false
                self.moneyView.isHidden = false
                self.moneyView.editEnabled = self.editEnabled
                self.moneyView.model = _model
                break
            case 3:
                self.leftView.isHidden = false
                self.titleNumber.isHidden = false
                self.titleNumber.placeholder = _model?.subTitle
                self.titleNumber.isEnabled = false
                if model?.message?.isEmpty == false{
                    let interval = Double((_model?.message)!)!
                    let dateFormatter = DateFormatter()
                    dateFormatter.dateFormat = "yyyy-MM-dd"
                    let date = Date(timeIntervalSince1970: TimeInterval(interval))
                    let dateStr = dateFormatter.string(from: date)
                    self.titleNumber.text = dateStr
                }
                break
            case 4:
                self.chooseView.isHidden = false
                self.chooseView.editEnabled = self.editEnabled
                self.chooseView.titles = CNLiveShopCouponViewModel.selectTitles(id: _model!.id)
                self.chooseView.selectIndex = _model!.section
                break
            case 5:
                self.rightView.isHidden = false
                self.goodsLabel.isHidden = false
                self.goodsLabel.placeholder = _model!.subTitle
                self.goodsLabel.text = _model!.message
                break
            case 6:
                self.showSwitch.isHidden = false
                if _model!.section == 1{
                    self.showSwitch.setOn(true, animated: true)
                }else{
                    self.showSwitch.setOn(false, animated: true)
                }
                break
            default:
                break
            }
        }
    }
    
    lazy var goodsLabel :UITextField = {
        let goodsLabel = UITextField()
        goodsLabel.textColor = HexColor("#333333")
        goodsLabel.textAlignment = .right
        goodsLabel.font = Font_14
        goodsLabel.delegate = self
        goodsLabel.isEnabled = false
        return goodsLabel
    }()

    var editEnabled:Bool = false
    var couponGoodsHiddenBlock:couponGoodsHiddenActionBlock?
    var textFieldChangeBlock:textFieldChangeActionBlock?
    var dateSelectBlock:dateSelectActionBlock?
    var couponGoodsBlock:couponGoodsActionBlock?
    
    lazy var leftView :UIImageView = {
        let leftView = UIImageView()
        leftView.contentMode = .scaleAspectFit
        leftView.image = UIImage(named: "DS_coupon_need")
        return leftView
    }()

    lazy var titleLabel: UILabel = {
        let titleLabel = UILabel.init()
        titleLabel.textColor = HexColor("#333333")
        titleLabel.textAlignment = .left
        titleLabel.font = Font_14
        return titleLabel
    }()

    lazy var lineView :UIView = {
        let lineView = UIView()
        lineView.backgroundColor = HexColor("#E4E4E4")
        return lineView
    }()

    //右侧输入框
    lazy var titleNumber :UITextField = {
        let textFiled = UITextField()
        textFiled.textColor = HexColor("#333333")
        textFiled.textAlignment = .right
        textFiled.font = Font_14
        textFiled.delegate = self
        return textFiled
    }()

    var currentDate:NSDate?
    //满减view
    lazy var moneyView :CNLiveCreateCouponTypeMoneyView = {
        let moneyView = CNLiveCreateCouponTypeMoneyView()
        moneyView.textFieldChangeBlock = {section,number in
            self.textFieldChangeBlock!(section, number)
        }
        return moneyView
    }()

    //单选选择器
    lazy var chooseView :CNLiveSelectCouponTapView = {
        let chooseView = CNLiveSelectCouponTapView()
        chooseView.selectTypeBlock = { section in
            self.model?.section = section
            if self.model!.id == 6{
                self.couponGoodsHiddenBlock!((section == 1) ? true : false)
            }
        }
        return chooseView
    }()

    //商品选择器
    lazy var rightView :UIImageView = {
        let rightView = UIImageView()
        rightView.contentMode = .scaleAspectFit
        rightView.image = UIImage(named: "DS_main_rightArrow")
        return rightView
    }()

    //开关
    lazy var showSwitch :UISwitch = {
        let showSwitch = UISwitch()
        showSwitch.addTarget(self, action: #selector(switchChangesd(_:)), for: .valueChanged)
        return showSwitch
    }()

    override init(style: UITableViewCell.CellStyle, reuseIdentifier: String?) {
        super.init(style: style, reuseIdentifier: reuseIdentifier)
        self.selectionStyle = .none
        self.currentDate = NSDate(timeIntervalSince1970: NSDate().timeIntervalSince1970)
        CNLiveCommonManager.shared.postGetTimeWithResult(resultBlock: { networkTimestamp in
            self.currentDate = NSDate(timeIntervalSince1970:networkTimestamp)
        })
        self.contentView.addSubview(self.leftView)
        self.contentView.addSubview(self.titleLabel)
        self.contentView.addSubview(self.lineView)
        self.contentView.addSubview(self.titleNumber)
        self.contentView.addSubview(self.moneyView)
        self.contentView.addSubview(self.chooseView)
        self.contentView.addSubview(self.rightView)
        self.contentView.addSubview(self.goodsLabel)
        self.contentView.addSubview(self.showSwitch)
        self.setSubViewsLayout()
        
    }
    
    required init?(coder: NSCoder) {
        fatalError("init(coder:) has not been implemented")
    }
    func setSubViewsLayout(){
        self.leftView.snp.makeConstraints({ make in
            make.left.equalTo(self).offset(5.5)
            make.centerY.equalTo(self)
            make.width.height.equalTo(5)
        })
        self.titleLabel.snp.makeConstraints({ make in
            make.left.equalTo(self.leftView.snp.right).offset(4.5)
            make.centerY.equalTo(self)
            make.width.equalTo(70)
        })
        self.lineView.snp.makeConstraints({ make in
            make.left.equalTo(self).offset(15)
            make.right.equalTo(self).offset(-15)
            make.height.equalTo(0.5)
            make.bottom.equalTo(self)
        })
        self.titleNumber.snp.makeConstraints({ make in
            make.right.equalTo(self).offset(-15)
            make.left.equalTo(self.titleLabel.snp.right)
            make.centerY.equalTo(self)
        })
        self.moneyView.snp.makeConstraints({ make in
            make.right.equalTo(self.titleNumber)
            make.left.equalTo(self.titleLabel.snp.right)
            make.centerY.height.equalTo(self)
        })
        self.chooseView.snp.makeConstraints({ make in
            make.right.equalTo(self.titleNumber)
            make.left.equalTo(self.titleLabel.snp.right)
            make.centerY.height.equalTo(self)
        })
        self.rightView.snp.makeConstraints({ make in
            make.right.equalTo(self.titleNumber)
            make.width.equalTo(16)
            make.centerY.height.equalTo(self)
        })
        self.goodsLabel.snp.makeConstraints({ make in
            make.right.equalTo(self.rightView.snp.left).offset(-5)
            make.centerY.equalTo(self)
        })
        self.showSwitch.snp.makeConstraints({ make in
            make.right.equalTo(self.titleNumber)
            make.centerY.equalTo(self)
        })
    }

    override func setSelected(_ selected: Bool, animated: Bool) {
        if self.model?.type == 3 && selected{
            if self.editEnabled == false{
                showMessage(message: "该项不可编辑")
                return
            }
            CNLiveCommonManager.shared.postGetTimeWithResult(resultBlock: {networkTimestamp in
                let pickerView = CNLivePickerView(pickerDateStyle: [.displayYear , .displayMonth , .displayDay], selectDate: self.currentDate!, maxDate: NSDate(timeIntervalSinceNow: 3600.0 * 24 * 30 * 24), minDate: NSDate(timeIntervalSince1970: networkTimestamp), remind: self.model!.subTitle!)
                pickerView.confirmSelectDateCallback = { date in
                    let formatter = DateFormatter()
                    formatter.dateFormat = "yyyy-MM-dd"
                    let dateStr = formatter.string(from: date as Date)
                    
                    self.currentDate = date
                    self.titleNumber.text = dateStr
                    formatter.timeZone = NSTimeZone.local
                    self.dateSelectBlock!(self.model!.id, formatter.date(from: dateStr)! as NSDate)
                }
                pickerView.show()
            })
        }else if self.model!.type == 5 && selected{
            if self.editEnabled == false{
                showMessage(message: "该项不可编辑")
                return
            }
            
            CNLiveCouponGoodsListView.couponGoodsViewShow(){ goodsId ,goodsTitle in
                self.couponGoodsBlock!(goodsId)
                if goodsTitle.count > 20 {
                    self.goodsLabel.text = goodsTitle.substring(to: goodsTitle.index(goodsTitle.startIndex, offsetBy: 20))
                } else {
                    self.goodsLabel.text = goodsTitle
                }
            }
            
        }
    }

    @objc func switchChangesd(_ sender:UISwitch){
        self.model?.section = sender.isOn ? 1 : 2
    }
    
    // MARK: - UITextFieldDelegate
    func textFieldShouldBeginEditing(_ textField: UITextField) -> Bool {
        if self.model!.id != 1 {
            if !self.editEnabled{
                showMessage(message: "该项不可编辑")
                return false
            }
        }
        return true
    }
    
    func textFieldDidEndEditing(_ textField: UITextField){
    
        if self.model!.id == 1{
            self.model!.message = textField.text
        }
        self.textFieldChangeBlock!(self.model!.id,textField.text!)
    }
    
    func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {
        if self.model!.id == 1{
            if textField.text!.count + string.count > 20{
                
                let substringToAdd = string.prefix(20 - (textField.text?.count ?? 0) )
                textField.text = textField.text?.appending(substringToAdd)
                return false
            }
            return true
        }else{
            return true
        }
    }
}