CNLiveShopCouponViewController.swift 12 KB
//
//  CNLiveShopCouponViewController.swift
//  metaCode
//
//  Created by open on 2023/11/16.
//

import Foundation
import EmptyDataSet_Swift
import IQKeyboardManagerSwift
import APButton

enum CNLiveShopCouponShowType {
    case create //创建
    case edit //编辑
}
class CNLiveShopCouponViewController: CNLiveBaseViewController, UITableViewDelegate, UITableViewDataSource, EmptyDataSetSource, EmptyDataSetDelegate {
    
    let kShopBodyCouponCreateTableViewCellIdentifier = "kShopBodyCouponCreateTableViewCellIdentifier"
    let kUITableViewHeaderFooterViewIdentifier = "kUITableViewHeaderFooterViewIdentifier"
    lazy var tableView : UITableView = {
        let tableView = UITableView(frame: .zero, style: .plain)
        tableView.dataSource = self
        tableView.delegate = self
        tableView.emptyDataSetSource = self
        tableView.emptyDataSetDelegate = self
        tableView.backgroundColor = HexColor("#f6f6f6")
        tableView.tableFooterView = UIView.init()
        tableView.separatorStyle = .none
        tableView.register(ShopBodyCouponCreateTableViewCell.self, forCellReuseIdentifier: kShopBodyCouponCreateTableViewCellIdentifier)
        tableView.register(UITableViewHeaderFooterView.self, forHeaderFooterViewReuseIdentifier: kUITableViewHeaderFooterViewIdentifier)
        return tableView
    }()
    
    lazy var footerView: UIView = {
        let footerView = UIView.init(frame: CGRect(x: 0, y: KSreenHeight - get_system_tabbar_height(), width: KSreenWidth, height: get_system_tabbar_height()))
        footerView.backgroundColor = .white
        footerView.addSubview(cancelBtn)
        cancelBtn.snp.makeConstraints { make in
            make.width.equalTo(adapt_length(length: 130))
            make.height.equalTo(get_system_tabbar_ui_height())
            make.left.equalToSuperview()
            make.top.equalToSuperview()
        }
        footerView.addSubview(deliveryBtn)
        deliveryBtn.snp.makeConstraints { make in
            make.width.equalTo(KSreenWidth - adapt_length(length: 130))
            make.height.equalTo(get_system_tabbar_ui_height())
            make.right.equalToSuperview()
            make.top.equalToSuperview()
        }
        return footerView
    }()
    
    lazy var cancelBtn: UIButton = {
        let cancelBtn = UIButton.init(type: .custom)
        cancelBtn.backgroundColor = .white
        cancelBtn.setTitle("取消", for: .normal)
        cancelBtn.setTitleColor(HexColor("#3A3A3A"), for: .normal)
        cancelBtn.titleLabel?.font = medium_adapt_font(pointSize: 14)
        cancelBtn.addTarget(self, action: #selector(cancelBtnClick), for: .touchUpInside)
        return cancelBtn
    }()
    
    lazy var deliveryBtn: APButton = {
        let deliveryBtn = APButton.init()
        deliveryBtn.backgroundColor = HexColor("#65C368")
        deliveryBtn.setTitle("保存", for: .normal)
        deliveryBtn.activityIndicator.color = .white
        deliveryBtn.titleLabel?.font = regular_adapt_font(pointSize: 15)
        deliveryBtn.setTitleColor(HexColor("#FFFFFF"), for: .normal)
        deliveryBtn.addTarget(self, action: #selector(sendBtnClick), for: .touchUpInside)
        return deliveryBtn
    }()
    
    lazy var dataArray: NSMutableArray = {
        let dataArray = NSMutableArray.init()
        return dataArray
    }()
    
    
    
    var _listModel: ShopOrderCouponListModel!
    var _show_type: CNLiveShopCouponShowType!
    /// 创建优惠券使用的
    init() {
        _show_type = .create
        _listModel = ShopOrderCouponListModel.init()
        super.init(nibName:nil, bundle:nil)
    }
    
    /// 编辑优惠券需要调用
    /// - Parameters:
    ///   - listModel: 数据源
    ///   - show_type: 显示类型
    init(listModel: ShopOrderCouponListModel) {
        _show_type = .edit
        _listModel = listModel
        super.init(nibName:nil, bundle:nil)
    }
    
    
    required init?(coder: NSCoder) {
        fatalError("init(coder:) has not been implemented")
    }
    

    var hiddenGoodsLine: Bool!
    var network_type: CNLiveMineResponseType!
    override func viewDidLoad() {
        super.viewDidLoad()
        view.backgroundColor = HexColor("#f6f6f6")
        navigationBarHidden = false
        titleName = "发布优惠券"
        
        loadDataSourceAction()
        
        view.addSubview(tableView)
        tableView.snp.makeConstraints { make in
            make.top.equalTo(KNavigationHeight)
            make.left.right.equalToSuperview()
            make.bottom.equalToSuperview().offset(-get_system_tabbar_height())
        }
        view.addSubview(footerView)
    }
    
    func loadDataSourceAction() {
        
        CNLiveShopViewModel.requestCoupon(model: _listModel) { [weak self] result, respStatue in
            if respStatue == .success {
                self!.dataArray = result as! NSMutableArray
                self!.tableView.reloadData()
                let model = (self!.dataArray[1] as! NSArray)[0] as! ShopOrderCouponDataModel
                self!.hiddenGoodsLine = model.section == "1"
            }
        }
    }
    
    @objc func cancelBtnClick() {
        self.navigationController?.popViewController(animated: true)
    }
    
    
    var couponTitle: String! = ""
    var totalNum: String! = ""
    var maxMoney: String! = ""
    var lessMoney: String! = ""
    var startTime: String! = ""
    var endTime: String! = ""
    var goodsId: String! = ""
    @objc func sendBtnClick(sender: APButton) {
        let model01 = (self.dataArray[1] as! NSArray)[0] as! ShopOrderCouponDataModel
        let model02 = (self.dataArray[1] as! NSArray)[2] as! ShopOrderCouponDataModel
        let model03 = (self.dataArray[1] as! NSArray)[3] as! ShopOrderCouponDataModel
        let model04 = (self.dataArray[1] as! NSArray)[4] as! ShopOrderCouponDataModel
        if _show_type == .create {
            showLoading(message: "提交中...")
            sender.startAnimating()
            CNLiveShopViewModel.requestCouponCreate(title: couponTitle, filled: maxMoney, discount: lessMoney, startTime: startTime, endTime: endTime, state: model02.section!, isShow: model04.section!, receiveNum: model03.section!, totalNum: totalNum, goodsType: model01.section!, goodsId: goodsId) { result, respStatue in
                sender.stopAnimating()
                if respStatue == .success {
                    showMessage(message: result as! String)
                }
            }
        } else {
            showLoading(message: "提交中...")
            sender.startAnimating()
            CNLiveShopViewModel.requestCouponEdit(model: _listModel, title: (couponTitle.isNotBlank() ? couponTitle : _listModel.title)!, state: model02.section!, isShow: model04.section!, receiveNum: model03.section!) { result, respStatue in
                sender.stopAnimating()
                if respStatue == .success {
                    showMessage(message: result as! String)
                }
            }
        }
    }
     
}

extension CNLiveShopCouponViewController {
    func numberOfSections(in tableView: UITableView) -> Int {
        return dataArray.count
    }
    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        let temp_array = dataArray[section] as! NSArray
        return temp_array.count
    }
    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        guard let cell = tableView.dequeueReusableCell(withIdentifier: kShopBodyCouponCreateTableViewCellIdentifier) as? ShopBodyCouponCreateTableViewCell else {
            return ShopBodyCouponCreateTableViewCell()
        }
        if _show_type == .edit {
            if ((indexPath.section == 0 && indexPath.row == 0) || (indexPath.section == 1  && (indexPath.row == 2 || indexPath.row == 3 || indexPath.row == 4))) {
                cell.editEnabled = true
            } else {
                cell.editEnabled = false
            }
        } else {
            cell.editEnabled = true
        }
        cell.setupWithDataSource(couponModel: (dataArray[indexPath.section] as! NSArray)[indexPath.row] as! ShopOrderCouponDataModel)
        cell.textFieldCallBack = { [self] section, number in
            switch section {
            case "1":
                couponTitle = number
                break
            case "3":
                totalNum = number
                break
            case "1001":
                maxMoney = number
                break
            case "1002":
                lessMoney = number
                break
            default:
                break
            }
        }
        cell.dateSelectCallBack = { [self] id, date in
            let interval = date.timeIntervalSince1970
            if id == "4" {
                startTime = "\(interval)"
            } else {
                endTime = "\(interval + 3600 * 24 - 1)"
            }
        }
        if (indexPath.row == 1 && indexPath.section == 1)  {
            if goodsId.isNotBlank() && _listModel.goods_id!.isNotBlank() && _listModel.goods_id != "0" {
                cell.goodsLabel.text = ""
            }
            cell.isHidden = hiddenGoodsLine
        }
        cell.goodsHiddenCallBack = { [self] isHidden in
            hiddenGoodsLine = isHidden
            goodsId = ""
            let indexPath = IndexPath(row: 1, section: 1)
            tableView.reloadRows(at: [indexPath], with: .middle)
        }
        cell.goodsCallBack = { [weak self] goodsId in
            self!.goodsId = goodsId
        }
        return cell
    }
    func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
        if indexPath.section == 1 && indexPath.row == 1 && hiddenGoodsLine {
            return 0
        }
        return adapt_length(length: 50)
    }
    func tableView(_ tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat {
        if section == 0 {
            return 0
        }
        return adapt_length(length: 5)
    }
    func scrollViewWillBeginDragging(_ scrollView: UIScrollView) {
        view.endEditing(true)
    }
    func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? {
        let view = tableView.dequeueReusableHeaderFooterView(withIdentifier: kUITableViewHeaderFooterViewIdentifier)
        view?.contentView.backgroundColor = HexColor("#f6f6f6")
        return view
    }

}

extension CNLiveShopCouponViewController {
    
    func image(forEmptyDataSet scrollView: UIScrollView) -> UIImage? {
        if network_type == .failed  || network_type == .unkonw {
            return UIImage(named: "mine_list_source_unusual_failed")
        }
        if dataArray.count == 0 {
            return UIImage(named: "mine_list_source_unusual_empty")
        }
        if network_type == .noNetwork {
            return UIImage(named: "mine_list_source_unusual_noNet")
        }
        return UIImage(named: "mine_list_source_unusual_empty")
    }
    
    func title(forEmptyDataSet scrollView: UIScrollView) -> NSAttributedString? {
        var defult_string = ""
        if network_type == .failed  || network_type == .unkonw {
            defult_string = "接口请求错误,刷新试试~"
        }
        if network_type == .noNetwork {
            defult_string = "网络开小差了,刷新试试~"
        }
        if dataArray.count == 0 {
            defult_string = "暂时没有数据~"
        }
        return NSAttributedString(string: defult_string, attributes: [.font: Font_17,.foregroundColor: HexColor("#666666")!])
    }
    
    func buttonTitle(forEmptyDataSet scrollView: UIScrollView, for state: UIControl.State) -> NSAttributedString? {
        if network_type == .failed || network_type == .noNetwork {
            let attributes = [NSAttributedString.Key.font:Font_16_Fit,
                              NSAttributedString.Key.foregroundColor: HexColor("#609BFF")]
            return NSAttributedString(string: "刷一刷", attributes: attributes as [NSAttributedString.Key : Any])
        }
        return nil
    }
    
    func emptyDataSet(_ scrollView: UIScrollView, didTapView view: UIView) {
        if network_type == .failed || network_type == .noNetwork  {
            loadDataSourceAction()
        }
    }
}