//
|
// CourseVCOfficalCommentVC.swift
|
// XQMuse
|
//
|
// Created by 无故事王国 on 2024/8/15.
|
//
|
|
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() {
|
super.setUI()
|
view.backgroundColor = UIColor(hexString: "#F0F0F0")
|
let layout = UICollectionViewFlowLayout()
|
collectionView = UICollectionView(frame: .zero, collectionViewLayout: layout)
|
collectionView.delegate = self
|
collectionView.dataSource = self
|
collectionView.contentInset = UIEdgeInsets(top: 0, left: 19, bottom: 0, right: 19)
|
collectionView.register(UINib(nibName: "HomeRelaxBanner_2_CCell", bundle: nil), forCellWithReuseIdentifier: "_HomeRelaxBanner_2_CCell")
|
collectionView.register(UINib(nibName: "CourseOfficalCommendTopCCell", bundle: nil), forCellWithReuseIdentifier: "_CourseOfficalCommendTopCCell")
|
|
collectionView.register(HomeHeaderView_1.self, forSupplementaryViewOfKind: UICollectionView.elementKindSectionHeader, withReuseIdentifier: "header")
|
view.addSubview(collectionView)
|
collectionView.snp.makeConstraints { make in
|
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 {
|
if kind == UICollectionView.elementKindSectionHeader{
|
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()
|
}
|
|
func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
|
|
if indexPath.section == 0{
|
let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "_CourseOfficalCommendTopCCell", for: indexPath) as! CourseOfficalCommendTopCCell
|
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.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
|
}
|
|
func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
|
if section == 0{
|
return 1
|
}
|
return viewModel.dataSource.value?.list.count ?? 0
|
}
|
|
func numberOfSections(in collectionView: UICollectionView) -> Int {
|
return titleItems.count
|
}
|
}
|
|
extension CourseVCOfficalCommentVC:UICollectionViewDelegateFlowLayout{
|
func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize {
|
if indexPath.section == 0{
|
|
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
|
|
return CGSize(width: w, height: w * 1.314)
|
}
|
|
func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, minimumLineSpacingForSectionAt section: Int) -> CGFloat {
|
return 14
|
}
|
|
func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, minimumInteritemSpacingForSectionAt section: Int) -> CGFloat {
|
return 14
|
}
|
|
func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, referenceSizeForHeaderInSection section: Int) -> CGSize {
|
if section == 0{
|
return .zero
|
}
|
return CGSize(width: JQ_ScreenW, height: 80.5)
|
}
|
}
|