CNLiveShopOrderExpressDetailViewController.swift 7.91 KB
//
//  CNLiveShopOrderExpressDetailViewController.swift
//  metaCode
//
//  Created by open on 2023/11/9.
//

import Foundation
import EmptyDataSet_Swift
enum CNLiveShopOrderExpressDetailShowType {
    case orderExpress //订单详情快递
    case byYourself //自提
    case refundExpress //退款详情快递
}
enum CNLiveShopOrderExpressDetailYBYProgress {
    case Zero    //备货完毕
    case Complete//自取完毕
}
class CNLiveShopOrderExpressDetailViewController: CNLiveBaseViewController, UITableViewDelegate, UITableViewDataSource, EmptyDataSetSource, EmptyDataSetDelegate {
    
    let kShopBodyOrderExpressDetailTableViewCellIdentifier = "kShopBodyOrderExpressDetailTableViewCellIdentifier"
    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 = .white
        tableView.tableFooterView = UIView.init()
        tableView.separatorStyle = .none
        tableView.register(ShopBodyOrderExpressDetailTableViewCell.self, forCellReuseIdentifier: kShopBodyOrderExpressDetailTableViewCellIdentifier)
        return tableView
    }()
    
    lazy var headerView: ShopBodyOrderExpressDetailHeaderView = {
        let headerView = ShopBodyOrderExpressDetailHeaderView.init(frame: CGRect(x: 0, y: 0, width: KSreenWidth, height: 0), show_type: _show_type)
        if _show_type == .orderExpress || _show_type == .refundExpress {
            headerView.expressModel = self.expressModel
            headerView.express_num = _express_num! as String
            headerView._orderId = _orderId! as String
            headerView._expId = _expId! as String
        } else {
            headerView.TBY_progress = _progress
        }
        headerView.isUserInteractionEnabled = true
        return headerView
    }()
    
    lazy var dataArray: NSMutableArray = {
        let dataArray = NSMutableArray.init()
        return dataArray
    }()
    
    var _expId: NSString!
    var _orderId: NSString!
    var _refundId: NSString!
    var _express_num: NSString!
    var expressModel: ShopOrderExpressModel!
    var _show_type: CNLiveShopOrderExpressDetailShowType!
    var _progress: CNLiveShopOrderExpressDetailYBYProgress!
    var network_type: CNLiveMineResponseType!
    init(orderId: NSString, expId: NSString, express_num: NSString, show_type: CNLiveShopOrderExpressDetailShowType, progress: CNLiveShopOrderExpressDetailYBYProgress) {
        _orderId = orderId
        _expId = expId
        _show_type = show_type
        _progress = progress
        _express_num = express_num
        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 = "物流详情"
        
        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() - get_system_tabbar_ui_height())
        }
    }
    
    func loadDataSourceAction() {
        showLoading(message: "")
        CNLiveShopViewModel.requestExpressDetail(orderId: _orderId, expId: _expId, networkType: _show_type) { [weak self] result, respStatue in
            if respStatue == .success {
                self!.expressModel = (result as! ShopOrderExpressDetailModel).express
                self!.dataArray.addObjects(from: (result as! ShopOrderExpressDetailModel).data)
                self!.tableView.tableHeaderView = self!.headerView
                self!.tableView.reloadData()
            }else if (respStatue == .noNetwork) {
                self!.network_type = .noNetwork
                self!.tableView.reloadEmptyDataSet()
            } else {
                self!.network_type = .failed
                self!.tableView.reloadEmptyDataSet()
            }
        }
    }
}

extension CNLiveShopOrderExpressDetailViewController {
    func numberOfSections(in tableView: UITableView) -> Int {
        return 1
    }
    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        if _show_type == .orderExpress || _show_type == .refundExpress {
            return dataArray.count == 0 ? 0 : dataArray.count + 1
        } else {
            return self.dataArray.count
        }
    }
    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        guard let cell = tableView.dequeueReusableCell(withIdentifier: kShopBodyOrderExpressDetailTableViewCellIdentifier) as? ShopBodyOrderExpressDetailTableViewCell else {
            return ShopBodyOrderExpressDetailTableViewCell()
        }
        var isLastRow: Bool = false
        var detailModel: ShopOrderExpressDetailDateModel!
        if _show_type == .orderExpress || _show_type == .refundExpress {
            if indexPath.row == 0 {
                detailModel = ShopOrderExpressDetailDateModel()
            } else {
                detailModel = (dataArray[indexPath.row - 1] as! ShopOrderExpressDetailDateModel)
            }
            if indexPath.row == dataArray.count {
                isLastRow = true
            }
        } else {
            detailModel = (dataArray[indexPath.row] as! ShopOrderExpressDetailDateModel)
            if indexPath.row == dataArray.count - 1 {
                isLastRow = true
            }
        }
        cell.setupDataSource(dataModel: detailModel, row: indexPath.row, isLastRow: isLastRow, type: _show_type, address: expressModel.address! as NSString, express_state: expressModel.state! as NSString)
        return cell
    }
    func tableView(_ tableView: UITableView, estimatedHeightForRowAt indexPath: IndexPath) -> CGFloat {
        return adapt_length(length: 80)
    }
    func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
    }
}

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