杨锴
2024-11-20 c649531411191cd60591eafcd9c3b9a9fede13e4
XQMuse/Root/Home/HomeVC.swift
@@ -18,28 +18,28 @@
let ReloadData_Noti = Notification.Name.init("ReloadData_Noti")
struct TitleItem{
            var id = 0
            var title = ""
            var subTitle = ""
            var hasMore:Bool = false
            var coverImage:String?
    var id = 0
    var title = ""
    var subTitle = ""
    var hasMore:Bool = false
    var coverImage:String?
}
class HomeViewModel{
            var homeTopMenuItems = [HomeTopMenuItem]()
            var homeBottomMenuItems = [HomeTopMenuItem]()
            var todyModel:ToDayMeditationModel?
            var privateTodyModels = [MeditationModel]()
            var meditationList = [MeditationListModel]()
    var homeTopMenuItems = [HomeTopMenuItem]()
    var homeBottomMenuItems = [HomeTopMenuItem]()
    var todyModel:ToDayMeditationModel?
    var privateTodyModels = [MeditationModel]()
    var meditationList = [MeditationListModel]()
}
class HomeVC: BaseVC {
            private var tableView:UITableView!
            private let topMenuView = HomeTopMenuView.jq_loadNibView()
            private var titleItems = [TitleItem]()
            private var viewModel = HomeViewModel()
    private var tableView:UITableView!
    private let topMenuView = HomeTopMenuView.jq_loadNibView()
    private var titleItems = [TitleItem]()
    private var viewModel = HomeViewModel()
    private var timer:Timer?
    private var needPopToTree:Bool = false //是否需要跳转到树苗
    private var needPopToTree:Bool = false //是否需跳转到树苗
    private var cellularData:CTCellularData!
@@ -84,20 +84,20 @@
    override func viewDidLoad() {
        super.viewDidLoad()
                        titleItems.removeAll()
        titleItems.removeAll()
        timer = Timer.scheduledTimer(timeInterval: 30, target: self, selector: #selector(autoUpdate), userInfo: nil, repeats: true)
        RunLoop.current.add(timer!, forMode: .default)
                        titleItems.append(TitleItem(title: "每日疗愈", subTitle: "Daily Meditation"))
                        titleItems.append(TitleItem(title: "私人订制", subTitle: "Private Customization",hasMore: true))
                        titleItems.append(TitleItem(title: "新手冥想指南", subTitle: "Meditation guide"))
        titleItems.append(TitleItem(title: "每日疗愈", subTitle: "Daily Meditation"))
        titleItems.append(TitleItem(title: "私人订制", subTitle: "Private Customization",hasMore: true))
        titleItems.append(TitleItem(title: "新手冥想指南", subTitle: "Meditation guide"))
                        if let setting = UserDefaultSettingViewModel.getSetting(){
                                    if let audioFile = setting.bgm?.audioFile{
                                                AudioPlayer.getSharedInstance().playSceneAt(audioFile)
                                    }
                        }
        if let setting = UserDefaultSettingViewModel.getSetting(){
            if let audioFile = setting.bgm?.audioFile{
                AudioPlayer.getSharedInstance().playSceneAt(audioFile)
            }
        }
        tableView.mj_header = MJRefreshNormalHeader(refreshingBlock: {
            self.getData()
@@ -107,7 +107,7 @@
            topMenuView.image_top.sd_setImage(with: URL(string: m.imageUrl.jq_urlEncoded()))
        }
                        getData()
        getData()
        cellularData = CTCellularData()
        cellularData.cellularDataRestrictionDidUpdateNotifier = {[weak self] state in
@@ -142,95 +142,95 @@
        }
    }
            override func setUI() {
                        super.setUI()
    override func setUI() {
        super.setUI()
                        let titleView = UIView()
                        titleView.frame = CGRect(x: 0, y: 0, width: 100, height: 40)
                        let titleL = UILabel()
                        titleL.font = Def_SourceHanSansCN_Regular(fontSize: 21)
                        titleL.text = "心 泉 疗 愈"
                        titleL.textAlignment = .center
                        titleL.textColor = UIColor(hexStr: "#252A23")
                        titleL.frame = CGRect(x: 0, y: 0, width: 100, height: 19)
        let titleView = UIView()
        titleView.frame = CGRect(x: 0, y: 0, width: 100, height: 40)
        let titleL = UILabel()
        titleL.font = Def_SourceHanSansCN_Regular(fontSize: 21)
        titleL.text = "心 泉 疗 愈"
        titleL.textAlignment = .center
        titleL.textColor = UIColor(hexStr: "#252A23")
        titleL.frame = CGRect(x: 0, y: 0, width: 100, height: 19)
                        let subTitleL = UILabel()
                        subTitleL.font = Def_Agenda_Light(fontSize: 8)
                        subTitleL.text = "XIN QUAN"
                        subTitleL.textAlignment = .center
                        subTitleL.textColor = UIColor(hexStr: "#252A23")
                        subTitleL.frame = CGRect(x: 0, y: 20, width: 100, height: 19)
        let subTitleL = UILabel()
        subTitleL.font = Def_Agenda_Light(fontSize: 8)
        subTitleL.text = "XIN QUAN"
        subTitleL.textAlignment = .center
        subTitleL.textColor = UIColor(hexStr: "#252A23")
        subTitleL.frame = CGRect(x: 0, y: 20, width: 100, height: 19)
                        titleView.addSubview(titleL)
                        titleView.addSubview(subTitleL)
        titleView.addSubview(titleL)
        titleView.addSubview(subTitleL)
                        navigationItem.titleView = titleView
        navigationItem.titleView = titleView
                         let search = UIButton(type: .custom)
                        search.setImage(UIImage(named: "btn_search"), for: .normal)
                        search.addTarget(self, action: #selector(searchAction), for: .touchUpInside)
                        search.bounds = CGRect(origin: .zero, size:CGSize(width: 50, height: 30))
                        navigationItem.leftBarButtonItem = UIBarButtonItem(customView: search)
        let search = UIButton(type: .custom)
        search.setImage(UIImage(named: "btn_search"), for: .normal)
        search.addTarget(self, action: #selector(searchAction), for: .touchUpInside)
        search.bounds = CGRect(origin: .zero, size:CGSize(width: 50, height: 30))
        navigationItem.leftBarButtonItem = UIBarButtonItem(customView: search)
                        let voices = UIButton(type: .custom)
                        voices.setImage(UIImage(named: "btn_voices"), for: .normal)
                        voices.addTarget(self, action: #selector(settingvoiceAction), for: .touchUpInside)
                        voices.bounds = CGRect(origin: .zero, size:CGSize(width: 50, height: 30))
                        navigationItem.rightBarButtonItem = UIBarButtonItem(customView: voices)
        let voices = UIButton(type: .custom)
        voices.setImage(UIImage(named: "btn_voices"), for: .normal)
        voices.addTarget(self, action: #selector(settingvoiceAction), for: .touchUpInside)
        voices.bounds = CGRect(origin: .zero, size:CGSize(width: 50, height: 30))
        navigationItem.rightBarButtonItem = UIBarButtonItem(customView: voices)
                        tableView = UITableView(frame: .zero, style: .plain)
                        tableView.contentInset = UIEdgeInsets(top: 0, left: 0, bottom: 40, right: 0)
                        tableView.showsVerticalScrollIndicator = false
                        DispatchQueue.main.async {
                                    let h = 119 + 20.5 + JQ_ScreenW * 0.913
                                    self.topMenuView.frame = CGRect(x: 0, y: 0, width: JQ_ScreenW, height: h)
                                    self.tableView.tableHeaderView = self.topMenuView
                        }
        tableView = UITableView(frame: .zero, style: .plain)
        tableView.contentInset = UIEdgeInsets(top: 0, left: 0, bottom: 40, right: 0)
        tableView.showsVerticalScrollIndicator = false
        DispatchQueue.main.async {
            let h = 119 + 20.5 + JQ_ScreenW * 0.913
            self.topMenuView.frame = CGRect(x: 0, y: 0, width: JQ_ScreenW, height: h)
            self.tableView.tableHeaderView = self.topMenuView
        }
                        tableView.tableHeaderView = topMenuView
        tableView.tableHeaderView = topMenuView
                        tableView.register(UINib(nibName: "Home_Style_1_TCell", bundle: nil), forCellReuseIdentifier: "_Home_Style_1_TCell")
                        tableView.register(UINib(nibName: "Home_Style_2_TCell", bundle: nil), forCellReuseIdentifier: "_Home_Style_2_TCell")
                        tableView.register(UINib(nibName: "Home_Style_3_TCell", bundle: nil), forCellReuseIdentifier: "_Home_Style_3_TCell")
                        tableView.register(UINib(nibName: "Home_Style_4_TCell", bundle: nil), forCellReuseIdentifier: "_Home_Style_4_TCell")
        tableView.register(UINib(nibName: "Home_Style_1_TCell", bundle: nil), forCellReuseIdentifier: "_Home_Style_1_TCell")
        tableView.register(UINib(nibName: "Home_Style_2_TCell", bundle: nil), forCellReuseIdentifier: "_Home_Style_2_TCell")
        tableView.register(UINib(nibName: "Home_Style_3_TCell", bundle: nil), forCellReuseIdentifier: "_Home_Style_3_TCell")
        tableView.register(UINib(nibName: "Home_Style_4_TCell", bundle: nil), forCellReuseIdentifier: "_Home_Style_4_TCell")
                        tableView.register(UINib(nibName: "Home_Style_5_TCell", bundle: nil), forCellReuseIdentifier: "_Home_Style_5_TCell")
        tableView.register(UINib(nibName: "Home_Style_5_TCell", bundle: nil), forCellReuseIdentifier: "_Home_Style_5_TCell")
                        tableView.separatorStyle = .none
                        tableView.delegate = self
                        tableView.dataSource = self
                        if #available(iOS 15.0, *) {
                                    tableView.sectionHeaderTopPadding = 0
                        } else {
        tableView.separatorStyle = .none
        tableView.delegate = self
        tableView.dataSource = self
        if #available(iOS 15.0, *) {
            tableView.sectionHeaderTopPadding = 0
        } else {
                        }
                        tableView.register(HomeHeaderView.self, forHeaderFooterViewReuseIdentifier: "_HomeHeaderView")
                        view.addSubview(tableView)
                        tableView.snp.makeConstraints { make in
                                    make.edges.equalToSuperview()
                        }
            }
        }
        tableView.register(HomeHeaderView.self, forHeaderFooterViewReuseIdentifier: "_HomeHeaderView")
        view.addSubview(tableView)
        tableView.snp.makeConstraints { make in
            make.edges.equalToSuperview()
        }
    }
            override func setRx() {
                        topMenuView.clickItemAt {[unowned self] item in
    override func setRx() {
        topMenuView.clickItemAt {[unowned self] item in
            let vc = HomeItemListVC(topTitle: item.title, id: item.id, showType:.vertical)
                                    self.push(vc: vc)
                        }
            self.push(vc: vc)
        }
                        NotificationCenter.default.rx.notification(SetBGMSuccess_Noti).take(until: self.rx.deallocated).subscribe(onNext: {data in
                                    self.topMenuView.resetTopImage()
                        }).disposed(by: disposeBag)
        NotificationCenter.default.rx.notification(SetBGMSuccess_Noti).take(until: self.rx.deallocated).subscribe(onNext: {data in
            self.topMenuView.resetTopImage()
        }).disposed(by: disposeBag)
                        NotificationCenter.default.rx.notification(PlantGuideQuit_Noti).take(until: self.rx.deallocated).subscribe(onNext: {[weak self]data in
        NotificationCenter.default.rx.notification(PlantGuideQuit_Noti).take(until: self.rx.deallocated).subscribe(onNext: {[weak self]data in
            guard let weakSelf = self else { return }
            weakSelf.needPopToTree = data.object as? Bool ?? false
            weakSelf.getData()
                        }).disposed(by: disposeBag)
        }).disposed(by: disposeBag)
        NotificationCenter.default.rx.notification(LoginSuccess_Noti).take(until: self.rx.deallocated).subscribe(onNext: {data in
            self.getData()
@@ -244,40 +244,40 @@
        NotificationCenter.default.rx.notification(ReloadData_Noti).take(until: self.rx.deallocated).subscribe(onNext: {data in
            self.tableView.reloadData()
        }).disposed(by: disposeBag)
            }
    }
            private func getData(){
    private func getData(){
        tableView.mj_header?.endRefreshing()
                        Services.getCategoryListByType(type: 1).subscribe(onNext: { data in
                                    var items = [HomeTopMenuItem]()
                                    for v in data.data ?? []{
        Services.getCategoryListByType(type: 1).subscribe(onNext: { data in
            var items = [HomeTopMenuItem]()
            for v in data.data ?? []{
                let model = HomeTopMenuItem(id: v.id, title: v.categoryName, image: v.firstIconUrl.jq_urlEncoded(), imageFrom: .url)
                                                items.append(model)
                                    }
                items.append(model)
            }
                                    self.viewModel.homeTopMenuItems = items
                                    let h = ceil(Double(items.count) / 4.0) * 119 + 20.5 + JQ_ScreenW * 0.913
                                    self.topMenuView.menu_height.constant = ceil(Double(items.count) / 4.0) * 119
                                    self.tableView.tableHeaderView?.frame = CGRect(origin: .zero, size: CGSizeMake(JQ_ScreenW, h))
                                    self.topMenuView.resetItems(items)
                                    self.topMenuView.menu_collectionView.reloadData()
                        }).disposed(by: disposeBag)
            self.viewModel.homeTopMenuItems = items
            let h = ceil(Double(items.count) / 4.0) * 119 + 20.5 + JQ_ScreenW * 0.913
            self.topMenuView.menu_height.constant = ceil(Double(items.count) / 4.0) * 119
            self.tableView.tableHeaderView?.frame = CGRect(origin: .zero, size: CGSizeMake(JQ_ScreenW, h))
            self.topMenuView.resetItems(items)
            self.topMenuView.menu_collectionView.reloadData()
        }).disposed(by: disposeBag)
                        Services.getCategoryListByType(type: 2).subscribe(onNext: { data in
                                    var items = [HomeTopMenuItem]()
                                    for v in data.data ?? []{
        Services.getCategoryListByType(type: 2).subscribe(onNext: { data in
            var items = [HomeTopMenuItem]()
            for v in data.data ?? []{
                let model = HomeTopMenuItem(id: v.id, title: v.categoryName, image: v.secondIconUrl.jq_urlEncoded(), imageFrom: .url)
                                                items.append(model)
                                    }
                items.append(model)
            }
            self.viewModel.homeBottomMenuItems = items
                                    self.tableView.reloadRows(at: [IndexPath(row: 4, section: 0)], with: .none)
                        }).disposed(by: disposeBag)
            self.tableView.reloadRows(at: [IndexPath(row: 4, section: 0)], with: .none)
        }).disposed(by: disposeBag)
                        Services.getTopdayMedita().subscribe(onNext: { data in
                                    self.viewModel.todyModel = data.data
                                    self.tableView.reloadRows(at: [IndexPath(row: 0, section: 0)], with: .none)
                        }).disposed(by: disposeBag)
        Services.getTopdayMedita().subscribe(onNext: { data in
            self.viewModel.todyModel = data.data
            self.tableView.reloadRows(at: [IndexPath(row: 0, section: 0)], with: .none)
        }).disposed(by: disposeBag)
@@ -285,36 +285,36 @@
        let m = MeditationModel()
        m.id = 0
        self.viewModel.privateTodyModels = [m]
//        if !(UserViewModel.getLoginInfo()?.accessToken.isEmpty ?? true){
            Services.getPersonalityPlan().subscribe(onNext: { data in
                if let m = data.data{
                    if m.count > 0{
                        self.viewModel.privateTodyModels = m
                    }
                    self.tableView.reloadRows(at: [IndexPath(row: 1, section: 0)], with: .none)
        //        if !(UserViewModel.getLoginInfo()?.accessToken.isEmpty ?? true){
        Services.getPersonalityPlan().subscribe(onNext: { data in
            if let m = data.data{
                if m.count > 0{
                    self.viewModel.privateTodyModels = m
                }
            }).disposed(by: disposeBag)
//        }else{
//            self.tableView.reloadData()
//        }
                self.tableView.reloadRows(at: [IndexPath(row: 1, section: 0)], with: .none)
            }
        }).disposed(by: disposeBag)
        //        }else{
        //            self.tableView.reloadData()
        //        }
                        Services.getMeditationAndCateList().subscribe(onNext: { data in
                                    if let m = data.data{
                                                self.viewModel.meditationList.removeAll()
        Services.getMeditationAndCateList().subscribe(onNext: { data in
            if let m = data.data{
                self.viewModel.meditationList.removeAll()
                self.titleItems.removeAll()
                self.titleItems.append(TitleItem(title: "每日疗愈", subTitle: "Daily Meditation"))
                self.titleItems.append(TitleItem(title: "私人订制", subTitle: "Private Customization",hasMore: true))
                self.titleItems.append(TitleItem(title: "新手冥想指南", subTitle: "Meditation guide"))
                                                self.viewModel.meditationList = m
                self.viewModel.meditationList = m
                for v in self.viewModel.meditationList{
                    if v.clientMeditationCategoryVO?.categoryName.isEmpty ?? true{continue}
                                                            self.titleItems.append(TitleItem(title: v.clientMeditationCategoryVO?.categoryName ?? "", subTitle: v.clientMeditationCategoryVO?.description ?? "",hasMore:true))
                                                }
                                                self.tableView.reloadData()
                                    }
                        }).disposed(by: disposeBag)
                    self.titleItems.append(TitleItem(title: v.clientMeditationCategoryVO?.categoryName ?? "", subTitle: v.clientMeditationCategoryVO?.description ?? "",hasMore:true))
                }
                self.tableView.reloadData()
            }
        }).disposed(by: disposeBag)
        Services.getLunchPage().subscribe(onNext: {data in
@@ -340,106 +340,120 @@
            }
        }).disposed(by: disposeBag)
            }
    }
    @objc func autoUpdate(){
        guard !(viewModel.todyModel?.endPlayTime.isEmpty ?? true) else {return}
    @objc func autoUpdate() {
        guard let endPlayTime = viewModel.todyModel?.endPlayTime, !endPlayTime.isEmpty else { return }
        let todayEndDay = Date().jq_format("yyyy-MM-dd") + " \(viewModel.todyModel!.endPlayTime)"
        let endDayInterval = Date.jq_StringToTimeInterval(todayEndDay,"yyyy-MM-dd HH:mm:ss")
        let todayEndDay = Date().jq_format("yyyy-MM-dd") + " \(endPlayTime)"
        let endDayInterval = Date.jq_StringToTimeInterval(todayEndDay, "yyyy-MM-dd HH:mm:ss")
        if Date().timeIntervalSince1970 > endDayInterval{
            Services.getTopdayMedita().subscribe(onNext: { data in
        if Date().timeIntervalSince1970 > endDayInterval {
            Services.getTopdayMedita().subscribe(onNext: { [weak self] data in
                guard let self = self else { return }
                self.viewModel.todyModel = data.data
                self.tableView.reloadRows(at: [IndexPath(row: 0, section: 0)], with: .none)
            }).disposed(by: disposeBag)
        }
    }
            @objc func searchAction(){
    @objc func searchAction(){
        let vc = SearchVC(serchType: .muse)
                        push(vc: vc)
            }
        push(vc: vc)
    }
            @objc func settingvoiceAction(){
    @objc func settingvoiceAction(){
        let vc = BackgroundVoiceVC(isFromFist: false)
                        push(vc: vc)
            }
        push(vc: vc)
    }
            @objc func jumpMoreAction(_ sender:UIButton){
                        switch sender.tag {
                                    case 201:
                                                //跳转计划引导
    @objc func jumpMoreAction(_ sender:UIButton){
        switch sender.tag {
            case 201:
                //跳转计划引导
                let nav   = BaseNav(rootViewController: PlanGuideVC(isFromFist: false))
                                                nav.modalPresentationStyle = .fullScreen
                                                present(nav, animated: true)
                                                break
                                    default:
                                                 let topTitle = titleItems[sender.tag - 200].title
                                                let m = viewModel.meditationList[sender.tag - 200 - 3]
                                                if let id = m.clientMeditationCategoryVO?.id{
                nav.modalPresentationStyle = .fullScreen
                present(nav, animated: true)
                break
            default:
                let topTitle = titleItems[sender.tag - 200].title
                let m = viewModel.meditationList[sender.tag - 200 - 3]
                if let id = m.clientMeditationCategoryVO?.id{
                    let vc = HomeItemListVC(topTitle: topTitle, id: id,showType: .vertical)
                                                            push(vc: vc)
                                                }
                        }
            }
                    push(vc: vc)
                }
        }
    }
    deinit {
        // 使定时器失效
        timer?.invalidate()
        // 移除通知中心观察者
        NotificationCenter.default.removeObserver(self)
    }
}
extension HomeVC:UITableViewDelegate & UITableViewDataSource{
            func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
    func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
        if indexPath.section == 0{
            if let m = viewModel.todyModel,let detailId = m.clientMeditationVO?.id{
                if AudioPlayer.getSharedInstance().meditationModel?.id == m.meditationId{
                    if AudioPlayer.getSharedInstance().bgmPlayer?.timeControlStatus == .paused{
                        AudioPlayer.getSharedInstance().bgmPlayer?.play()
                        AudioPlayer.getSharedInstance().masterPlayer?.play()
                        PayMusicVC.updateStatus(.playing)
                        self.viewModel.todyModel?.playAtMe = true
                    }else{
                        AudioPlayer.getSharedInstance().bgmPlayer?.pause()
                        AudioPlayer.getSharedInstance().masterPlayer?.pause()
                        PayMusicVC.updateStatus(.pause)
                        self.viewModel.todyModel?.playAtMe = false
            guard let m = viewModel.todyModel, let detailId = m.clientMeditationVO?.id else {
                alert(msg: "平台暂未设置今日疗愈")
                return
            }
            let audioPlayer = AudioPlayer.getSharedInstance()
            let isSameMeditation = audioPlayer.meditationModel?.id == m.meditationId
            let isPaused = audioPlayer.bgmPlayer?.timeControlStatus == .paused
            if isSameMeditation {
                if isPaused {
                    audioPlayer.bgmPlayer?.play()
                    audioPlayer.masterPlayer?.play()
                    PayMusicVC.updateStatus(.playing)
                    viewModel.todyModel?.playAtMe = true
                } else {
                    audioPlayer.bgmPlayer?.pause()
                    audioPlayer.masterPlayer?.pause()
                    PayMusicVC.updateStatus(.pause)
                    viewModel.todyModel?.playAtMe = false
                }
                DispatchQueue.main.asyncAfter(deadline: .now() + 0.4) {
                    self.tableView.reloadData()
                }
            } else {
                // 游客模式都能播放
                Services.getMeditationDetail(id: detailId).subscribe(onNext: { [weak self] data in
                    guard let self = self, let m = data.data else { return }
                    if audioPlayer.meditationModel?.id == m.id && audioPlayer.bgmPlayer?.timeControlStatus == .playing {
                        return
                    }
                    DispatchQueue.main.asyncAfter(delay: 0.4) {
                    audioPlayer.playBGMAt(firstPlayIndex: 0, model: m, delegate: self)
                    PayMusicVC.show(model: m, isHidden: false)
                    self.viewModel.todyModel?.playAtMe = true
                    DispatchQueue.main.asyncAfter(deadline: .now() + 1.0) {
                        self.tableView.reloadData()
                    }
                }else{
                    //游客模式都能播放
                    Services.getMeditationDetail(id: detailId).subscribe(onNext: {[weak self]data in
                        if let m = data.data{
                            if AudioPlayer.getSharedInstance().meditationModel?.id == m.id && AudioPlayer.getSharedInstance().bgmPlayer?.timeControlStatus == .playing{
                                return
                            }
                            AudioPlayer.getSharedInstance().playBGMAt(firstPlayIndex: 0, model: m, delegate: self)
                            PayMusicVC.show(model: m,isHidden: false)
                            self?.viewModel.todyModel?.playAtMe = true
                            DispatchQueue.main.asyncAfter(delay: 1.0) {
                                self?.tableView.reloadData()
                            }
                        }
                    }).disposed(by: disposeBag)
                }
            }else{
                alert(msg: "平台暂未设置今日疗愈")
                }).disposed(by: disposeBag)
            }
        }
                        if indexPath.section == 2{
                                    let vc = WebVC(type: .guide)
                                    vc.title = "泉疗愈"
                                    push(vc: vc)
                        }
            }
        if indexPath.section == 2{
            let vc = WebVC(type: .guide)
            vc.title = "泉疗愈"
            push(vc: vc)
        }
    }
            func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        if indexPath.section == 0 && indexPath.row == 0{
            //每日疗愈
                                    let cell = tableView.dequeueReusableCell(withIdentifier: "_Home_Style_1_TCell") as! Home_Style_1_TCell
            let cell = tableView.dequeueReusableCell(withIdentifier: "_Home_Style_1_TCell") as! Home_Style_1_TCell
            if viewModel.todyModel?.id != 0{
                cell.model = viewModel.todyModel
                cell.view_data.isHidden = false
@@ -449,109 +463,108 @@
            }
            cell.setplaying()
                                    return cell
                        }else if indexPath.section == 1 && indexPath.row == 0{
            return cell
        }else if indexPath.section == 1 && indexPath.row == 0{
            //私人定制
                                    let cell = tableView.dequeueReusableCell(withIdentifier: "_Home_Style_4_TCell") as! Home_Style_4_TCell
                                    cell.style = .style1
            let cell = tableView.dequeueReusableCell(withIdentifier: "_Home_Style_4_TCell") as! Home_Style_4_TCell
            cell.style = .style1
            cell.setModels(viewModel.privateTodyModels,showType: .horizontal)
                                    return cell
                        }else if indexPath.section == 2 && indexPath.row == 0{
            return cell
        }else if indexPath.section == 2 && indexPath.row == 0{
            // 新手冥想指南
                                    let cell = tableView.dequeueReusableCell(withIdentifier: "_Home_Style_2_TCell") as! Home_Style_2_TCell
            let cell = tableView.dequeueReusableCell(withIdentifier: "_Home_Style_2_TCell") as! Home_Style_2_TCell
            cell.imgView.image = UIImage(named: "bg_guide_home")
                                    cell.view_shadow.isHidden = true
                                    return cell
                        }else {
            cell.view_shadow.isHidden = true
            return cell
        }else {
                                    let index = indexPath.section - 3
                                    if index == 0 && indexPath.row != 0{
                                                let cell = tableView.dequeueReusableCell(withIdentifier: "_Home_Style_5_TCell") as! Home_Style_5_TCell
            let index = indexPath.section - 3
            if index == 0 && indexPath.row != 0{
                let cell = tableView.dequeueReusableCell(withIdentifier: "_Home_Style_5_TCell") as! Home_Style_5_TCell
                cell.setHomeTopMenuItem(viewModel.homeBottomMenuItems)
                                                return cell
                                    }else{
                                                let m = viewModel.meditationList[index]
                                                if m.clientMeditationCategoryVO!.showType == .horizontal{
                                                            let cell = tableView.dequeueReusableCell(withIdentifier: "_Home_Style_4_TCell") as! Home_Style_4_TCell
                                                            cell.style = .style2
                return cell
            }else{
                let m = viewModel.meditationList[index]
                if m.clientMeditationCategoryVO!.showType == .horizontal{
                    let cell = tableView.dequeueReusableCell(withIdentifier: "_Home_Style_4_TCell") as! Home_Style_4_TCell
                    cell.style = .style2
                    cell.setModels(m.clientMeditationVOList,showType: .horizontal)
                                                            return cell
                                                }else if m.clientMeditationCategoryVO!.showType == .vertical{
                                                            let cell = tableView.dequeueReusableCell(withIdentifier: "_Home_Style_3_TCell") as! Home_Style_3_TCell
                    return cell
                }else if m.clientMeditationCategoryVO!.showType == .vertical{
                    let cell = tableView.dequeueReusableCell(withIdentifier: "_Home_Style_3_TCell") as! Home_Style_3_TCell
                    cell.setModels(m.clientMeditationVOList,showType: .vertical)
                                                            return cell
                                                }
                                    }
                                    return UITableViewCell()
                        }
            }
                    return cell
                }
            }
            return UITableViewCell()
        }
    }
            func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
                        if section - 3 == 0{
                                    return 2
                        }
                        return 1
            }
        if section - 3 == 0{
            return 2
        }
        return 1
    }
            func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
                        if indexPath.section == 0 || indexPath.section == 1 || indexPath.section == 2{
                                    return JQ_ScreenW * 0.551
                        }else{
                                    let index = indexPath.section - 3
                                    let m = viewModel.meditationList[index]
    func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
        if indexPath.section == 0 || indexPath.section == 1 || indexPath.section == 2{
            return JQ_ScreenW * 0.551
        }else{
            let index = indexPath.section - 3
            let m = viewModel.meditationList[index]
                                    if index == 0 && indexPath.row != 0 {
                                                return 236
                                    }
            if index == 0 && indexPath.row != 0 {
                return 236
            }
                                    if m.clientMeditationCategoryVO?.showType == .horizontal{
                                                return 328
                                    }else{
                                                return 213
                                    }
                        }
            }
            if m.clientMeditationCategoryVO?.showType == .horizontal{
                return 328
            }else{
                return 213
            }
        }
    }
            func numberOfSections(in tableView: UITableView) -> Int {
                        return titleItems.count
            }
    func numberOfSections(in tableView: UITableView) -> Int {
        return titleItems.count
    }
            func tableView(_ tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat {
                        return 80.5
            }
    func tableView(_ tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat {
        return 80.5
    }
            func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? {
                        let headerView = tableView.dequeueReusableHeaderFooterView(withIdentifier: "_HomeHeaderView") as! HomeHeaderView
                        headerView.setTitle(titleItems[section].title, subTitle: titleItems[section].subTitle)
                        headerView.btn_more.isHidden = !titleItems[section].hasMore
                        headerView.btn_more.tag = section + 200
                        headerView.btn_more.addTarget(self, action: #selector(jumpMoreAction(_:)), for: .touchUpInside)
    func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? {
        let headerView = tableView.dequeueReusableHeaderFooterView(withIdentifier: "_HomeHeaderView") as! HomeHeaderView
        headerView.setTitle(titleItems[section].title, subTitle: titleItems[section].subTitle)
        headerView.btn_more.isHidden = !titleItems[section].hasMore
        headerView.btn_more.tag = section + 200
        headerView.btn_more.addTarget(self, action: #selector(jumpMoreAction(_:)), for: .touchUpInside)
                        if section == 1{
                                    headerView.btn_more.setImage(UIImage(named: "btn_more"), for: .normal)
                        }else{
                                    headerView.btn_more.setImage(UIImage(named: "icon_exchange"), for: .normal)
                        }
                        return headerView
            }
        if section == 1{
            headerView.btn_more.setImage(UIImage(named: "btn_more"), for: .normal)
        }else{
            headerView.btn_more.setImage(UIImage(named: "icon_exchange"), for: .normal)
        }
        return headerView
    }
}
extension HomeVC:UIScrollViewDelegate{
            func scrollViewDidScroll(_ scrollView: UIScrollView) {
//                        let v = min(scrollView.contentOffset.y / JQ_NavBarHeight, 1)
//                        navigationController?.navigationBar.standardAppearance.backgroundColor = .white.withAlphaComponent(v)
    func scrollViewDidScroll(_ scrollView: UIScrollView) {
        //                        let v = min(scrollView.contentOffset.y / JQ_NavBarHeight, 1)
        //                        navigationController?.navigationBar.standardAppearance.backgroundColor = .white.withAlphaComponent(v)
        navigationController?.navigationBar.standardAppearance.backgroundColor = .white
        navigationController?.navigationBar.scrollEdgeAppearance?.backgroundColor = .white
            }
    }
}
extension HomeVC:PayMusicDelegate{
    func playState(_ state: PlayMusicState) {
    }
}