CNLiveShopTransListViewController.swift 8.08 KB
//
//  CNLiveShopTransListViewController.swift
//  metaCode
//
//  Created by open on 2023/11/15.
//



import Foundation
import JXSegmentedView
import JXPagingView
import EmptyDataSet_Swift
import MJRefresh

enum CNLiveShopTransListShowType {
    case all //全部
    case income //收入
    case outcome //支出
}

class CNLiveShopTransListViewController: CNLiveBaseViewController, UITableViewDelegate, UITableViewDataSource, JXSegmentedListContainerViewListDelegate, EmptyDataSetSource, EmptyDataSetDelegate {
    
    func listView() -> UIView {
        return view
    }
    
    let kShopBodyTransListViewCellIdentifier = "kShopBodyTransListViewCellIdentifier"
    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.contentInset = UIEdgeInsets(top: adapt_length(length: 82), left: 0, bottom: 0, right: 0)
        tableView.scrollIndicatorInsets = UIEdgeInsets(top: adapt_length(length: 82), left: 0, bottom: 0, right: 0)
        tableView.separatorInset = UIEdgeInsets(top: 0, left: adapt_length(length: 20), bottom: 0, right: adapt_length(length: 20))
        tableView.register(ShopBodyTransListViewCell.self, forCellReuseIdentifier: kShopBodyTransListViewCellIdentifier)
        return tableView
    }()
    
    lazy var headerView: ShopBodyTransListHeaderView = {
        let headerView = ShopBodyTransListHeaderView.init(frame: CGRect.zero)
        headerView.clickBlcok = { [self] headerView in
            MineStandListAlertView.showStandListView(infos: [currentDate!,"YYYY年MM月"], name:"选择月份", show_type:.max_date, result: { [self] text in
                currentDate = (text as! NSString).timeStrChangeTotimedate("YYYY-MM-dd")
                current_string = (text as! String)
                let array = (text as! NSString).components(separatedBy: "-") as NSArray
                headerView.dateLab.text = "\(array[0])\(array[1])月"
                loadDataSourceAction()
            })
        }
        return headerView
    }()
    
    lazy var dataArray: NSMutableArray = {
        let dataArray = NSMutableArray.init()
        return dataArray
    }()
    
    var currentDate: NSDate!
    var current_string: String!
    var network_type: CNLiveMineResponseType!
    var _show_type:CNLiveShopTransListShowType!
    init(show_type: CNLiveShopTransListShowType) {
        _show_type = show_type
        currentDate = Date() as NSDate
        current_string = NSDate.timeIntervalChangeToTimeStr(timeInterval: 0)
       super.init(nibName:nil, bundle:nil)
    }

    required init?(coder: NSCoder) {
        fatalError("init(coder:) has not been implemented")
    }
    
    override func viewDidLoad() {
        super.viewDidLoad()
        view.backgroundColor = HexColor("#FAFAFA")
        
        loadDataSourceAction()
        
        view.addSubview(tableView)
        tableView.snp.makeConstraints { make in
            make.top.equalToSuperview()
            make.bottom.left.right.equalToSuperview()
        }
        view.addSubview(headerView)
        headerView.snp.makeConstraints { make in
            make.top.left.right.equalToSuperview()
            make.height.equalTo(adapt_length(length: 82))
        }
    }
    
    func loadDataSourceAction() {
        showLoading(message: "")
        CNLiveShopViewModel.requestAccount(date: current_string, type: _show_type) { [weak self] result, respStatue in
            if respStatue == .success {
                let baseModel = (result as! ShopOrderTransBaseDataModel)
                self!.dataArray.addObjects(from: (result as! ShopOrderTransBaseDataModel).list)
                self!.tableView.reloadData()
                if self!.dataArray.count > 0 && self!.tableView.mj_header == nil && self!.tableView.mj_footer == nil {
                    self!.addRefreshView()
                }
                self!.headerView.priceLab.text = "支出 ¥\(baseModel.payment ?? "0.00") 收入 ¥\(baseModel.income ?? "0.00")"
            }else if (respStatue == .noNetwork) {
                self!.network_type = .noNetwork
                self!.tableView.reloadEmptyDataSet()
            } else {
                self!.network_type = .failed
                self!.tableView.reloadEmptyDataSet()
            }
        }
    }
    
    func addRefreshView() {
        tableView.mj_header = MJRefreshNormalHeader.init(refreshingBlock: {[weak self] in
            self!.tableView.mj_header?.endRefreshing()
        })
        
        tableView.mj_footer = MJRefreshAutoNormalFooter.init(refreshingBlock: {[weak self] in
            self!.tableView.mj_footer?.endRefreshing()
            self!.tableView.mj_footer?.endRefreshingWithNoMoreData()
        })
    }
    
    override func viewDidLayoutSubviews() {
        super.viewDidLayoutSubviews()
    }
    
}
extension CNLiveShopTransListViewController {
    
    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return dataArray.count
    }
    
    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        guard let cell = tableView.dequeueReusableCell(withIdentifier: kShopBodyTransListViewCellIdentifier) as? ShopBodyTransListViewCell else {
            return ShopBodyTransListViewCell()
        }
        cell.setupWithDataSource(listModel: dataArray[indexPath.row] as! ShopOrderTransListDataModel)
        return cell
    }
    
    func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
        return adapt_length(length: 75)
    }
    
    func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
        let listModel = self.dataArray[indexPath.row] as! ShopOrderTransListDataModel
        if listModel.type == "1" {
            if listModel.title == "order" {
                self.navigationController?.pushViewController(CNLiveShopOrderDetailViewController.init(orderId: listModel.order_id!, show_type: .order, form_type: .afterSale), animated: true)
            }
            if listModel.title == "foods_order" {
                
            }
        }
    }
}

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