From 09a372bc45fde16fd42257ab6f78b8deeecf720b Mon Sep 17 00:00:00 2001 From: 杨锴 <841720330@qq.com> Date: 星期三, 16 四月 2025 16:38:05 +0800 Subject: [PATCH] fix bug --- XQMuse/Root/Course/VC/CourseVCOfficalCommentVC.swift | 103 +++++++++++++++++++++++++++++++++++++++++++++++++-- 1 files changed, 98 insertions(+), 5 deletions(-) diff --git a/XQMuse/Root/Course/VC/CourseVCOfficalCommentVC.swift b/XQMuse/Root/Course/VC/CourseVCOfficalCommentVC.swift index 7dec829..f8cd103 100644 --- a/XQMuse/Root/Course/VC/CourseVCOfficalCommentVC.swift +++ b/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) } } -- Gitblit v1.7.1