CNLiveMineEarnListViewController.swift 8.54 KB
//
//  CNLiveMineEarnListViewController.swift
//  metaCode
//
//  Created by open on 2023/6/28.
//

import Foundation
import JXPagingView
import MJRefresh
import EmptyDataSet_Swift

enum MineEarnShowType {
    case record //积分记录
    case balance//余额记录
}

typealias CallBack = (_ scrollView: UIScrollView) -> Void
class CNLiveMineEarnListViewController: CNLiveBaseViewController, JXPagingViewListViewDelegate, UITableViewDelegate, UITableViewDataSource, EmptyDataSetSource, EmptyDataSetDelegate{
    
    
    let kMIneBodyFiveViewCellIdentifier = "kMIneBodyFiveViewCellIdentifier"
    lazy var tableView: UITableView = {
        let tableView = UITableView.init(frame: .zero, style: .plain)
        tableView.delegate = self
        tableView.dataSource = self
        tableView.emptyDataSetSource = self
        tableView.emptyDataSetDelegate = self
        tableView.backgroundColor = .clear
        tableView.separatorStyle = .none
        tableView.showsVerticalScrollIndicator = false
        tableView.showsHorizontalScrollIndicator = false
        tableView.register(MIneBodyFiveViewCell.self, forCellReuseIdentifier: kMIneBodyFiveViewCellIdentifier)
        let footerView = UIView(frame: CGRect(x: 0, y: 0, width: KSreenWidth - 40, height: 10))
        footerView.clipsToBounds = true
        footerView.backgroundColor = .white
        footerView.addCorner(conrners: [.bottomLeft,.bottomRight], radius: 5)
        tableView.tableFooterView = footerView
        return tableView
    }()
    
    lazy var dataArray: NSMutableArray = {
        let dataArray = NSMutableArray()
        return dataArray
    }()
    
    var pageNum: NSInteger!
    var _callBack: CallBack!
    var _show_type : MineEarnShowType!
    var network_type: CNLiveMineResponseType!
    init(show_type: MineEarnShowType) {
        pageNum = 1
        super.init(nibName: nil, bundle: nil)
        _show_type = show_type
    }
    
    func loadDataWithTradRecord(page: NSInteger, resultBlock: @escaping resultNewsBlock) {
        if page == 1 {
            self.pageNum = 1
        }
        if _show_type == .balance {
            CNLiveMineViewModel.requestWithTradRecord(page: page) { result, respStatue in
                if respStatue == .success {
                    let listModel = result as! MineTradingRecordBaseModel
                    self.network_type = .success
                    self.dataArray.removeAllObjects()
                    self.dataArray.addObjects(from: listModel.list)
                    self.tableView.reloadData()
                    self.tableView.mj_header?.endRefreshing()
                    self.tableView.mj_footer?.endRefreshing()
                    if self.dataArray.count > 0 {
                        self.addRefreshView()
                    }
                }else if (respStatue == .noNetwork) {
                    self.network_type = .noNetwork
                    self.tableView.reloadEmptyDataSet()
                } else {
                    self.network_type = .failed
                    self.tableView.reloadEmptyDataSet()
                }
                resultBlock(result, respStatue)
            }
        }
        if _show_type == .record {
            CNLiveMineViewModel.requestWithIntegralRecord(page: page) { result, respStatue in
                if respStatue == .success {
                    let listModel = result as! MineIntegralRecordModel
                    self.network_type = .success
                    self.dataArray.removeAllObjects()
                    self.dataArray.addObjects(from: listModel.integralList)
                    self.tableView.reloadData()
                    self.tableView.mj_header?.endRefreshing()
                    self.tableView.mj_footer?.endRefreshing()
                    if self.dataArray.count > 0 {
                        self.addRefreshView()
                    }
                    if !listModel.hasNext {
                        self.tableView.mj_footer?.endRefreshing()
                        self.tableView.mj_footer?.endRefreshingWithNoMoreData()
                    }
                }else if (respStatue == .noNetwork) {
                    self.network_type = .noNetwork
                    self.tableView.reloadEmptyDataSet()
                } else {
                    self.network_type = .failed
                    self.tableView.reloadEmptyDataSet()
                }
                resultBlock(result, respStatue)
            }
        }
    }
    
    required init?(coder: NSCoder) {
        fatalError("init(coder:) has not been implemented")
    }
    
    override func viewDidLoad() {
        super.viewDidLoad()
    
        loadDataWithTradRecord(page: self.pageNum) {result,respStatue in }
        
        view.addSubview(tableView)
        tableView.snp.makeConstraints { make in
            make.top.bottom.equalToSuperview()
            make.left.equalToSuperview().offset(20)
            make.right.equalToSuperview().offset(-20)
        }
    }
    
    private func addRefreshView() {
        let footerView = MJRefreshAutoNormalFooter.init(refreshingBlock: {[weak self] in
            self!.pageNum += 1
            self!.loadDataWithTradRecord(page: self!.pageNum) {result,respStatue in }
        })
        footerView.setTitle("123456", for: .noMoreData)
        tableView.mj_footer = footerView
    }
}
extension CNLiveMineEarnListViewController {
    
    func numberOfSections(in tableView: UITableView) -> Int {
        return 1
    }
    
    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: kMIneBodyFiveViewCellIdentifier) as? MIneBodyFiveViewCell else {
            return MIneBodyFiveViewCell()
        }
        if _show_type == .balance {
            cell.setupWithBalanceDataSource(isLast: indexPath.row == dataArray.count - 1,dataModel: dataArray[indexPath.row] as! MineTradingRecordModel)
        }
        if _show_type == .record {
            cell.setupWithRecordDataSource(isLast: indexPath.row == dataArray.count - 1,dataModel: dataArray[indexPath.row] as! MineIntegralRecordDescModel)
        }

        return cell
    }
    func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
        return 70
    }
    
    func scrollViewDidScroll(_ scrollView: UIScrollView) {
        _callBack(scrollView)
    }
}

extension CNLiveMineEarnListViewController {
    
    func image(forEmptyDataSet scrollView: UIScrollView) -> UIImage? {
        if network_type == .failed  || network_type == .unkonw {
            return UIImage(named: "mine_list_source_unusual_failed")
        }
        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 && network_type == .success{
            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 backgroundColor(forEmptyDataSet scrollView: UIScrollView) -> UIColor? {
        return UIColor.white
    }
    
    func emptyDataSet(_ scrollView: UIScrollView, didTapView view: UIView) {
        pageNum = 1
        loadDataWithTradRecord(page: 1) {result,respStatue in }
    }
}

extension CNLiveMineEarnListViewController {
    
    func listView() -> UIView {
        return view
    }
    
    func listScrollView() -> UIScrollView {
        return tableView
    }
    
    func listViewDidScrollCallback(callback: @escaping (UIScrollView) -> ()) {
        _callBack = callback
    }
}