CNLiveHomeLanmuController.swift 10.4 KB
//
//  CNLiveHomeLanmuController.swift
//  metaCode
//
//  Created by zx on 2025/3/11.
//

import Foundation
import MJRefresh
class CNLiveHomeLanmuController:CNLiveBaseViewController, UITableViewDataSource, UITableViewDelegate{
        
    var _slideContentModel : CNLiveDownSlideContentsModel?
    var slideContentModel : CNLiveDownSlideContentsModel? {
        get{
            _slideContentModel
        }
        set{
            _slideContentModel = newValue!
            
        }
    }

    ///数据源
    lazy var dataArray: NSMutableArray = {
        var dataArray = NSMutableArray()
        return dataArray
    }()
    lazy var headerDataArray: NSMutableArray = {
        var dataArray = NSMutableArray()
        return dataArray
    }()

    let kCNLiveHomeLanmuThreeImgCellIdentifier = "kCNLiveHomeLanmuThreeImgCellIdentifier"
    
    lazy var tableView : UITableView = {
        let tableView = UITableView(frame: .zero, style: .plain)
        tableView.dataSource = self
        tableView.delegate = self
        tableView.separatorStyle = .none
        tableView.register(CNLiveHomeLanmuThreeImgCell.self, forCellReuseIdentifier: kCNLiveHomeLanmuThreeImgCellIdentifier)
        tableView.backgroundColor = .white
        return tableView
    }()

    var pageId = ""
    var currentHeaderBtnIndex = 0
    var resultHeaderView:UIView?
    var footerRefreshView: MJRefreshAutoNormalFooter!
    var page = 1//当前页数

    override func viewDidLoad() {
        super.viewDidLoad()
        self.navigationBarHidden = false
        titleName = self.slideContentModel?.title ?? ""
        
        view.addSubview(tableView)
        tableView.snp.makeConstraints { make in
            make.left.equalToSuperview()
            make.top.equalTo(KNavigationHeight)
            make.bottom.equalToSuperview()
            make.right.equalToSuperview()
        }
        self.addRefreshView()
        self.setUpResultHeaderView()

        self.getPageApi(pageID: self.pageId)
    }
    func addRefreshView() {
        tableView.mj_header = MJRefreshNormalHeader.init(refreshingBlock: {[weak self] in
            guard let self = self else { return }
            self.page = 1
            self.getBlockContents(page: 1)
        })
        tableView.mj_footer = MJRefreshAutoNormalFooter.init(refreshingBlock: {[weak self] in
            guard let self = self else { return }
            self.page = self.page + 1
            self.getBlockContents(page: self.page)
        })
    }

    func setUpResultHeaderView(){
        resultHeaderView = UIView(frame: CGRect(x: 0, y: 0, width: KSreenWidth, height: 52))
        resultHeaderView?.backgroundColor = .white
        
        tableView.tableHeaderView = resultHeaderView
    }

    // MARK: - BtnAction
    @objc func headerBtnAction(btn:UIButton){
        let index = btn.tag - 1000
        self.currentHeaderBtnIndex = index
        for objBtn in self.resultHeaderView!.subviews{
            if let obj = objBtn as? UIButton{
                if obj.tag == btn.tag{
                    //选中
                    obj.backgroundColor = HexColor("#D3E4FF")
                    obj.setTitleColor(HexColor("#2076FF"), for: .normal)
                }else{
                    //未选中
                    obj.backgroundColor = .clear
                    obj.setTitleColor(HexColor("#919191"), for: .normal)
                }

            }
        }
        //刷新接口
        self.getBlockContents(page: 1)
    }
        
    // MARK: - UITableViewDelegate
    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 let slideModel = self.dataArray[indexPath.row] as? [CNLiveAlbumModel]{
            guard let cell = tableView.dequeueReusableCell(withIdentifier: kCNLiveHomeLanmuThreeImgCellIdentifier) as? CNLiveHomeLanmuThreeImgCell
            else {
                let cell = CNLiveHomeLanmuThreeImgCell()
                return cell
            }
            cell.slideModel = slideModel
            return cell
        }
        return UITableViewCell()
    }
    
    func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
        let imgW:CGFloat = (KSreenWidth-60.0)/3.0
        let imgH:CGFloat = imgW*140.0/105.0
        return imgH+55.0
    }
    
    deinit {
    }
    //MARK: - 网络请求获取区块详情页
    func getPageApi(pageID:String)
    {
        showLoading(message: "")
        CNLiveDownSlideViewModel.requestGetPage(pageId: pageID as NSString) {[weak self] result, status in
            hiddenLoading()
            guard let self = self else { return }
            if status == .success{
                self.headerDataArray.removeAllObjects()
                let array = result as! [Any]
                let newDataArray = NSMutableArray()
                for (idx,slideModel) in array.enumerated() {
                    if let model = slideModel as? CNLiveDownSlideModel{
                                                
                        newDataArray.addObjects(from: [model])
                        //创建区块btn                        
                        let width = 60.0
                        let height = 32.0
                        let x = 15.0+CGFloat(idx)*width
                        let y = 10.0

                        let expandBtn = UIButton.init(type: .custom)
//                        expandBtn.backgroundColor = HexColor("#D3E4FF")
//                        expandBtn.setTitleColor(HexColor("#2076FF"), for: .normal)
                        if idx == self.currentHeaderBtnIndex{
                            //选中
                            expandBtn.backgroundColor = HexColor("#D3E4FF")
                            expandBtn.setTitleColor(HexColor("#2076FF"), for: .normal)
                        }else{
                            //未选中
                            expandBtn.backgroundColor = .clear
                            expandBtn.setTitleColor(HexColor("#919191"), for: .normal)
                        }

                        expandBtn.setTitle(model.blockName, for: .normal)
                        expandBtn.layer.cornerRadius = 16
                        expandBtn.clipsToBounds = true
                        expandBtn.titleLabel?.font = BoldFont_13
                        expandBtn.frame = CGRect(x: x, y: y, width: width, height: height)
                        expandBtn.tag = 1000+idx
                        expandBtn.addTarget(self, action: #selector(headerBtnAction), for: .touchUpInside)
                        resultHeaderView?.addSubview(expandBtn)
                    }
                }
                self.headerDataArray.addObjects(from: newDataArray as! [Any])
                self.getBlockContents(page: 1)
                
            }else if (status == .failed){
                //                self.NetApiStatus = .apiError
            }else if (status == .noNetwork){
                
                //                self.NetApiStatus = .notNetwork
            }
        }
        //
    }

    func chunkArray<T>(array: [T], chunkSize: Int) -> [[T]] {
        var result = [[T]]()
        var currentIndex = 0
        
        while currentIndex < array.count {
            let endIndex = min(currentIndex + chunkSize, array.count)
            let chunk = Array(array[currentIndex..<endIndex])
            result.append(chunk)
            currentIndex += chunkSize
        }
        
        return result
    }


    // MARK: - 获取内容
    func getBlockContents(page:NSInteger){
        showLoading(message: "")
        if let slideModel = self.headerDataArray[self.currentHeaderBtnIndex] as? CNLiveDownSlideModel{
            let blockId = slideModel.blockId
            print("blockId:\(blockId)")
            CNLiveHomePageViewModel.getBlockContents(blockId: blockId, page: page) {[weak self] result, status in
                hiddenLoading()
                guard let self = self else { return }
                if status == .success{
                    let albumBaseModel = result as! CNLiveAlbumBaseModel
                    if self.page > 1 && albumBaseModel.list.count > 0 {
                        var tempArr = Array<Any>()
                        for obj in self.dataArray {
                            if let objArr = obj as? Array<Any>{
                                for tempObj in objArr{
                                    if let tempMdl = tempObj as? CNLiveAlbumModel{
                                        tempArr.append(tempMdl)
                                    }
                                }
                            }else{
                                if let tempMdl = obj as? CNLiveAlbumModel{
                                    tempArr.append(tempMdl)
                                }
                            }
                        }

                        self.dataArray = NSMutableArray(array: tempArr)
                        self.dataArray.addObjects(from: albumBaseModel.list)
                    }
                    if self.page == 1 {
                        self.dataArray.removeAllObjects()
                        self.dataArray.addObjects(from: albumBaseModel.list)
                        if self.dataArray.count > 0 && self.tableView.mj_header == nil && self.tableView.mj_footer == nil {
                            self.addRefreshView()
                        }
                    }
                    
                    self.tableView.mj_header?.endRefreshing()
                    
                    //分成3个一组
                    let chunkedArray = self.chunkArray(array: self.dataArray as! Array<Any>, chunkSize: 3)
                    self.dataArray = NSMutableArray(array: chunkedArray)
                    self.tableView.reloadData()
                    if albumBaseModel.hasNextPage{
                        self.tableView.mj_footer?.endRefreshing()
                    }else{
                        self.tableView.mj_footer?.endRefreshingWithNoMoreData()
                    }

                }else if (status == .noNetwork) {
//                    self.network_type = .noNetwork
//                    self.tableView.reloadEmptyDataSet()
                } else {
//                    self.network_type = .failed
//                    self.tableView.reloadEmptyDataSet()
                }
            }

        }else{
            
        }
    }

}