杨锴
2025-04-16 09a372bc45fde16fd42257ab6f78b8deeecf720b
XQMuse/Root/Course/VC/CourseVCOfficalCommentVC.swift
@@ -7,17 +7,55 @@
import UIKit
import JQTools
import RxRelay
import RxSwift
class CourseVCOfficalViewModel:RefreshInnerModel<CourseModel>{
            var cateId = BehaviorRelay<Int?>(value: nil)
    var search = BehaviorRelay<String?>(value: nil)
            override func api() -> (Observable<BaseResponse<BaseResponseList<CourseModel>>>)? {
        return Services.getCoursePageList(page: page,cateId: cateId.value, courseTitle: search.value)
            }
}
let CourseOfficalComment_Noti = Notification.Name.init("CourseOfficalComment_Noti")
class CourseVCOfficalCommentVC: BaseVC {
            private var collectionView:UICollectionView!
            private var titleItems = [TitleItem]()
            private var subTitleItems = [TitleItem]()
            private var bannerModels = [CommonBannerModel]()
            private var viewModel = CourseVCOfficalViewModel()
    override func viewDidAppear(_ animated: Bool) {
        super.viewDidAppear(animated)
        Services.getCourseBannerList().subscribe(onNext: {data in
            for (index,v) in (data.data ?? []).enumerated(){
                self.bannerModels.append(CommonBannerModel(index: index, id: v.id, name: v.name, resource:v.imageUrl.jq_urlEncoded(), mediaType: .imageUrl,courseId: v.courseId))
            }
            self.collectionView.reloadData()
        }).disposed(by: disposeBag)
    }
            override func viewDidLoad() {
                        super.viewDidLoad()
                        titleItems.append(TitleItem(title: "新手冥想指南", subTitle: "Meditation guide"))
                        titleItems.append(TitleItem(title: "推荐课程", subTitle: "与内心的宁静与喜悦入睡"))
                        Services.getCourseCategory().subscribe(onNext: {data in
                                    for v in data.data ?? []{
                                                self.subTitleItems.append(TitleItem(id:v.id,title: v.name,coverImage: v.imageUrl.jq_urlEncoded()))
                                    }
                                    self.collectionView.reloadData()
                        }).disposed(by: disposeBag)
                        viewModel.configure(collectionView)
                        viewModel.beginRefresh()
            }
            override func setUI() {
@@ -37,9 +75,48 @@
                                    make.edges.equalToSuperview()
                        }
            }
    override func setRx() {
        NotificationCenter.default.rx.notification(CourseOfficalComment_Noti).take(until: self.rx.deallocated).subscribe(onNext: {[weak self] _ in
            self?.viewModel.beginRefresh()
        }).disposed(by: disposeBag)
    }
            override var shouldAutorotate: Bool{
                        return  false
            }
}
extension CourseVCOfficalCommentVC:UICollectionViewDelegate & UICollectionViewDataSource{
            func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {
                        let model = viewModel.dataSource.value!.list[indexPath.row]
        if model.courseType == .online{
            if model.chargeType == .vipFree || model.chargeType == .payment{
                guard sceneDelegate!.checkisLoginState() else{return}
            }
            Services.getCourseDetail(courseId: model.id).subscribe(onNext: {data in
                if let m = data.data{
                    if m.isVip == .no && m.chargeType == .vipFree{
                        let vc = VIPCenterVC()
                        JQ_currentViewController().jq_push(vc: vc)
                    }else if m.courseType == .online{
                        let vc = CourseDetialVC(courseModel: m)
                        JQ_currentViewController().jq_push(vc: vc)
                    }else{
                        let vc = CourseDetialOfflineVC(courseId: m.id)
                        JQ_currentViewController().jq_push(vc: vc)
                    }
                }
            }).disposed(by: disposeBag)
        }else{
            let vc = CourseDetialOfflineVC(courseId: model.id)
            JQ_currentViewController().jq_push(vc: vc)
        }
            }
            func collectionView(_ collectionView: UICollectionView, viewForSupplementaryElementOfKind kind: String, at indexPath: IndexPath) -> UICollectionReusableView {
@@ -47,6 +124,7 @@
                                    let headerView = collectionView.dequeueReusableSupplementaryView(ofKind: kind, withReuseIdentifier: "header", for: indexPath) as! HomeHeaderView_1
                                    let m = titleItems[indexPath.section]
                                    headerView.setTitle(m.title, subTitle: m.subTitle)
                                    headerView.btn_more.isHidden = true
                                    return headerView
                        }
                        return UICollectionReusableView()
@@ -56,12 +134,22 @@
                        if indexPath.section == 0{
                                    let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "_CourseOfficalCommendTopCCell", for: indexPath) as! CourseOfficalCommendTopCCell
                                    cell.backgroundColor = .jq_randomColor
                                    cell.setTitles(subTitleItems)
                                    cell.setBanners(bannerModels)
                                    cell.clickAtClouse { index in
                                                let vc = CourseMenuVC()
                                                vc.setTitleItem(self.subTitleItems,defaultSelectIndex: index)
                                                vc.hidesBottomBarWhenPushed = true
                                                JQ_currentNavigationController().pushViewController(vc, animated: true)
                                    }
                                    return cell
                        }
                        let model = viewModel.dataSource.value!.list[indexPath.row]
                        let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "_HomeRelaxBanner_2_CCell", for: indexPath) as! HomeRelaxBanner_2_CCell
                        cell.backgroundColor = .jq_randomColor
                        cell.setCourseModel(model)
        cell.label_title.font = UIFont.systemFont(ofSize: 19, weight: .bold)
        cell.cons_title_top.constant = 14
        cell.cons_title_left.constant = 16.5
                        return cell
            }
@@ -69,7 +157,7 @@
                        if section == 0{
                                    return 1
                        }
                        return 20
                        return viewModel.dataSource.value?.list.count ?? 0
            }
            func numberOfSections(in collectionView: UICollectionView) -> Int {
@@ -80,7 +168,9 @@
extension CourseVCOfficalCommentVC:UICollectionViewDelegateFlowLayout{
            func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize {
                        if indexPath.section == 0{
                                    return CGSize(width: JQ_ScreenW, height: 421)
                                    let h = ceil(subTitleItems.count.double / 4.0) * 103.75 + floor(subTitleItems.count.double / 4.0) * 5 + 208.5
                                    return CGSize(width: JQ_ScreenW, height: h)
                        }
                        let w = (JQ_ScreenW - 19 * 2 - 14) / 2
@@ -97,6 +187,9 @@
            }
            func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, referenceSizeForHeaderInSection section: Int) -> CGSize {
        if section == 0{
            return .zero
        }
                        return CGSize(width: JQ_ScreenW, height: 80.5)
            }
}