CNLiveShopOrderSendViewController.swift 13.2 KB
//
//  CNLiveShopOrderSendViewController.swift
//  metaCode
//
//  Created by open on 2023/11/7.
//

import Foundation
import EmptyDataSet_Swift

enum CNLiveShopOrderSpliteSendViewType {
    case splite //发货界面
    case select //拆单界面
}

class CNLiveShopOrderSendViewController: CNLiveBaseViewController, UITableViewDelegate, UITableViewDataSource, EmptyDataSetSource, EmptyDataSetDelegate {
    
    let kShopBodyOrderSelectTableViewCellIdentifier = "kShopBodyOrderSelectTableViewCellIdentifier"
    let kShopBodyOrderSpliteTableViewCellIdentifier = "kShopBodyOrderSpliteTableViewCellIdentifier"
    lazy var tableView: UITableView = {
        let tableView = UITableView.init(frame: CGRect.zero, style: .plain)
        tableView.dataSource = self
        tableView.delegate = self
        tableView.emptyDataSetSource = self
        tableView.emptyDataSetDelegate = self
        tableView.backgroundColor = .clear
        tableView.tableFooterView = UIView.init()
        tableView.separatorStyle = .none
        tableView.register(ShopBodyOrderSelectTableViewCell.self, forCellReuseIdentifier: kShopBodyOrderSelectTableViewCellIdentifier)
        tableView.register(ShopBodyOrderSpliteTableViewCell.self, forCellReuseIdentifier: kShopBodyOrderSpliteTableViewCellIdentifier)
        return tableView
    }()
    
    lazy var saveButton: UIButton = {
        let saveButton = UIButton.init(type: .custom)
        saveButton.frame = CGRect(x: KSreenWidth - 70, y: (get_system_nav_height() - (get_system_statusBar_height() + 25))/2 + get_system_statusBar_height(), width: 60, height: 25)
        saveButton.setTitle("拆 单", for: .normal)
        saveButton.titleLabel?.font = semibold_adapt_font(pointSize: 15)
        saveButton.setTitleColor(HexColor("#F5A623"), for: .normal)
        saveButton.backgroundColor = .clear
        saveButton.layer.masksToBounds  = true
        saveButton.layer.cornerRadius = 5
        saveButton.addTarget(self, action: #selector(bottomBtnClick), for: .touchUpInside)
        saveButton.tag = 1000
        return saveButton
    }()
    
    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(allSelectBtn)
        allSelectBtn.snp.makeConstraints { make in
            make.width.equalTo(65)
            make.height.equalTo(30)
            make.left.equalToSuperview().offset(adapt_length(length: 20))
            make.top.equalToSuperview().offset(adapt_length(length: 9.5))
        }
        footerView.addSubview(deliveryBtn)
        deliveryBtn.snp.makeConstraints { make in
            make.width.equalTo(77)
            make.height.equalTo(30)
            make.right.equalToSuperview().offset(-adapt_length(length: 20))
            make.top.equalToSuperview().offset(adapt_length(length: 9.5))
        }
        return footerView
    }()
    
    lazy var allSelectBtn: UIButton = {
        let allSelectBtn = UIButton.init(type: .custom)
        allSelectBtn.backgroundColor = .white
        allSelectBtn.setImage(UIImage(named: "DS_goods_select_no"), for: .normal)
        allSelectBtn.setImage(UIImage(named: "DS_goods_select_yes"), for: .selected)
        allSelectBtn.setTitle("  全选", for: .normal)
        allSelectBtn.setTitleColor(HexColor("#3A3A3A"), for: .normal)
        allSelectBtn.setTitle("  全选", for: .selected)
        allSelectBtn.setTitleColor(HexColor("#3A3A3A"), for: .selected)
        allSelectBtn.titleLabel?.font = medium_adapt_font(pointSize: 14)
        allSelectBtn.addTarget(self, action: #selector(bottomBtnClick), for: .touchUpInside)
        allSelectBtn.isHidden = _show_type == .splite
        allSelectBtn.tag = 1001
        return allSelectBtn
    }()
    
    lazy var deliveryBtn: UIButton = {
        let deliveryBtn = UIButton.init()
        deliveryBtn.backgroundColor = HexColor("#65C368")
        deliveryBtn.layer.cornerRadius = 4
        deliveryBtn.layer.masksToBounds = true
        deliveryBtn.setTitle("快递发货", for: .normal)
        deliveryBtn.titleLabel?.font = regular_adapt_font(pointSize: 14)
        deliveryBtn.setTitleColor(HexColor("#FFFFFF"), for: .normal)
        deliveryBtn.addTarget(self, action: #selector(bottomBtnClick), for: .touchUpInside)
        deliveryBtn.tag = 1002
        return deliveryBtn
    }()
    
    lazy var dataArray: NSMutableArray = {
        let dataArray = NSMutableArray.init()
        return dataArray
    }()
    
    var _orderId: NSString
    var network_type: CNLiveMineResponseType!
    var _show_type: CNLiveShopOrderSpliteSendViewType!
    init(orderId: NSString, show_type:CNLiveShopOrderSpliteSendViewType) {
        _orderId = orderId
        _show_type = show_type
        super.init(nibName:nil, bundle:nil)
    }
    
    required init?(coder: NSCoder) {
        fatalError("init(coder:) has not been implemented")
    }
    
    override func viewDidLoad() {
        super.viewDidLoad()
        navigationBarHidden = false
        titleName = "选择发货商品"
        
        if _show_type == .splite {
            topNavView.addSubview(saveButton)
        }
        
        view.addSubview(tableView)
        tableView.snp.makeConstraints { make in
            make.top.equalTo(KNavigationHeight)
            make.left.right.equalToSuperview()
            make.bottom.equalToSuperview().offset(-get_system_tabbar_height())
        }
        
        loadDataSourceAction()
        
        view.addSubview(footerView)
    }
    
    func loadDataSourceAction() {
        CNLiveShopViewModel.requestOrderDetail(orderId: _orderId as String, isOrderDetai: true, isRefund: false) { [weak self] result, respStatue in
            if respStatue == .success {
                let detailModel = result as! ShopOrderDetailModel
                if self!._show_type == .splite {
                    for goodsModel in detailModel.order_detail {
                        if (detailModel.state == "2" && (goodsModel.num! - goodsModel.refund_num!) > 0) || (goodsModel.send_num! != 0 && (goodsModel.send_num! - goodsModel.refund_num!) > 0) {
                            self!.dataArray.add(goodsModel)
                        }
                    }
                } else {
                    for goodsModel in detailModel.order_detail {
                        goodsModel.select = false
                        goodsModel.selectNum = 1
                        
                        if (detailModel.state == "2" && (goodsModel.num! - goodsModel.refund_num!) > 0 ) || (goodsModel.send_num! != 0 && (goodsModel.send_num! - goodsModel.refund_num!) > 0 ) {
                            self!.dataArray.add(goodsModel)
                        }
                    }
                }
                self?.tableView.reloadData()
            }else if (respStatue == .noNetwork) {
                self!.network_type = .noNetwork
                self!.tableView.reloadEmptyDataSet()
            } else {
                self!.network_type = .failed
                self!.tableView.reloadEmptyDataSet()
            }
        }
    }
    
    @objc func bottomBtnClick(button: UIButton) {
        //拆单
        if button.tag == 1000 {
            self.navigationController?.pushViewController(CNLiveShopOrderSendViewController.init(orderId: _orderId, show_type: .select), animated: true)
        }
        //全选
        if button.tag == 1001 {
            button.isSelected = !button.isSelected
            for model in self.dataArray {
                (model as! ShopOrderListGoodsModel).select = button.isSelected
            }
            tableView.reloadData()
        }
        //快递发货
        if button.tag == 1002 {
            var goods_array: NSArray = []
            var isExp: Bool = false
            if _show_type == .select {
                let array = NSMutableArray.init()
                for item in dataArray {
                    let model = item as! ShopOrderListGoodsModel
                    if (model.select == false || (model.selectNum! < ((model.send_num != 0 ? model.send_num : model.num)!))) {
                        isExp = true
                    }
                    if model.select == true {
                        let dic = ["id":model.goods_id,"num":"\(model.selectNum ?? 0)"]
                        array.add(dic)
                    }
                }
                goods_array = array.copy() as! NSArray
                if goods_array.count <= 0 {
                    showMessage(message: "请选择发货商品")
                    return
                }
            }
            let vc = CNLiveShopOrderExpressViewController.init(orderId: _orderId,isExp: isExp, goods_arr: goods_array)
            self.navigationController?.pushViewController(vc, animated: true)
        }
    }
}
extension CNLiveShopOrderSendViewController {
    func numberOfSections(in tableView: UITableView) -> Int {
        return 1
    }
    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return self.dataArray.count
    }
    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        if _show_type == .select {
            guard let cell = tableView.dequeueReusableCell(withIdentifier: kShopBodyOrderSelectTableViewCellIdentifier) as? ShopBodyOrderSelectTableViewCell else {
                return ShopBodyOrderSelectTableViewCell()
            }
            cell.setupDataSource(goodsModel: self.dataArray[indexPath.row] as! ShopOrderListGoodsModel)
            cell.clickCallBack = { [self] isSelected in
                if isSelected {
                    var select :Bool = true
                    for model in dataArray {
                        if !(model as! ShopOrderListGoodsModel).select {
                            select = false
                        }
                    }
                    allSelectBtn.isSelected = select
                } else {
                    allSelectBtn.isSelected = false
                }
            }
            cell.lineLabel.isHidden = (indexPath.row == dataArray.count-1)
            return cell
        } else {
            guard let cell = tableView.dequeueReusableCell(withIdentifier: kShopBodyOrderSpliteTableViewCellIdentifier) as? ShopBodyOrderSpliteTableViewCell else {
                return ShopBodyOrderSpliteTableViewCell()
            }
            cell.setupDataSource(goodsModel: self.dataArray[indexPath.row] as! ShopOrderListGoodsModel)
            cell.lineLabel.isHidden = (indexPath.row == dataArray.count-1)
            return cell
        }
    }
    func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
        return adapt_length(length: 130)
    }
    func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
        if _show_type == .select {
            let goodsModel = dataArray[indexPath.row] as! ShopOrderListGoodsModel
            goodsModel.select = !goodsModel.select
            if goodsModel.select {
                var select: Bool = true
                for model in dataArray {
                    if !(model as! ShopOrderListGoodsModel).select {
                        select = false
                    }
                }
                allSelectBtn.isSelected = select
            } else {
                allSelectBtn.isSelected = false
            }
            tableView.reloadRows(at: [indexPath], with: .none)
        }
    }
}

extension CNLiveShopOrderSendViewController {
    
    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()
        }
    }
}