From 31b6be2dfcc5a7e9300c90b2216dbd579153c3b0 Mon Sep 17 00:00:00 2001 From: younger_times <841720330@qq.com> Date: 星期一, 10 七月 2023 19:22:00 +0800 Subject: [PATCH] 新增 --- WanPai/Root/Course/VC/CourseListVC.swift | 147 +++++++++++++++++++++++++++++++++++++++++++++---- 1 files changed, 135 insertions(+), 12 deletions(-) diff --git a/WanPai/Root/Course/VC/CourseListVC.swift b/WanPai/Root/Course/VC/CourseListVC.swift index 3fc37d5..04f5593 100644 --- a/WanPai/Root/Course/VC/CourseListVC.swift +++ b/WanPai/Root/Course/VC/CourseListVC.swift @@ -7,20 +7,62 @@ import UIKit import QMUIKit +import JQTools +import RxSwift +import RxDataSources +import RxCocoa -class CourseListVC: BaseVC { +class CourseListViewModel{ + + var disposeBag = DisposeBag() + + var packageTypeData = BehaviorRelay<[NormalSimpleModel]?>(value: nil) + var storesData = BehaviorRelay<[NormalSimpleModel]?>(value: nil) + var selectPackeType = BehaviorRelay<NormalSimpleModel?>(value: nil) + var selectStore = BehaviorRelay<NormalSimpleModel?>(value: nil) + var distanceSort = BehaviorRelay<SortType?>(value: nil) + var salesRanking = BehaviorRelay<SortType?>(value: nil) + var search = BehaviorRelay<String?>(value: nil) + + func getDefaultData(){ + Services.coursePackageType().subscribe(onNext: {[weak self] data in + if var datas = data.data{ + datas.insert(NormalSimpleModel(id: -1, name: "全部"), at: 0) + self?.packageTypeData.accept(datas) + } + }) { error in + + }.disposed(by: disposeBag) + + Services.queryStoreList().subscribe(onNext: {[weak self] data in + if var datas = data.data{ + datas.insert(NormalSimpleModel(id: -1, name: "全部"), at: 0) + self?.storesData.accept(datas) + } + }) { error in + + }.disposed(by: disposeBag) + } +} + +class CourseListVC: BaseVC,Refreshable{ @IBOutlet weak var view_topView: UIView! @IBOutlet weak var tf_search: QMUITextField! - @IBOutlet weak var tableView: UITableView! + @IBOutlet weak var tableView: BaseTableView! @IBOutlet weak var btn_courseType: QMUIButton! @IBOutlet weak var btn_stores: QMUIButton! @IBOutlet weak var btn_sales: QMUIButton! @IBOutlet weak var btn_distance: QMUIButton! + var items = [CourseItemModel]() + + private var viewModel = CourseListViewModel() + private var showSubTypeView:CourseSubTypeView? override func viewDidLoad() { super.viewDidLoad() title = "课程列表" + viewModel.getDefaultData() } override func setUI() { @@ -38,6 +80,43 @@ tableView.dataSource = self tableView.register(UINib(nibName: "CourseTCell", bundle: nil), forCellReuseIdentifier: "_CourseTCell") tableView.separatorStyle = .none + tf_search.delegate = self + + tableView.jq_setEmptyView() + + refreshStatusBind(to: tableView) {[weak self] in + self?.getData() + } footer: {} + refreshStatus.onNext(.beingHeaderRefresh) + } + + override func setRx() { + tf_search.rx.controlEvent(.editingDidEnd).subscribe(onNext: { [weak self] in + if self?.tf_search.text?.isEmpty ?? true{ + self?.viewModel.search.accept(nil) + }else{ + self?.viewModel.search.accept(self?.tf_search.text!) + } + }).disposed(by: disposeBag) + } + + private func getData(_ header:Bool = true){ + Services.queryCourseList(typeId: viewModel.selectPackeType.value?.id, distanceSort: viewModel.distanceSort.value, salesRanking: viewModel.salesRanking.value, search: viewModel.search.value, storeId: viewModel.selectStore.value?.id).subscribe { [weak self] data in + self?.refreshStatus.onNext(.endAll) + self?.items = data.data ?? [] + self?.tableView.reloadData() + } onError: {[weak self] error in + self?.refreshStatus.onNext(.endAll) + }.disposed(by: disposeBag) + + } + + private func cleanOther(){ + showSubTypeView?.removeFromSuperview() + btn_courseType.isSelected = false + btn_stores.isSelected = false + btn_sales.isSelected = false + btn_distance.isSelected = false } @IBAction func searchAction(_ sender: UIButton) { @@ -45,40 +124,77 @@ } @IBAction func crouseTypeAction(_ sender: UIButton) { + guard viewModel.packageTypeData.value != nil else { + alertError(msg: "分类数据加载失败,请再试一次") + viewModel.getDefaultData() + return + } + guard !sender.isSelected else {return} + cleanOther() sender.isSelected = true - CourseSubTypeView.show(inView: self.view, afterView: view_topView, items: ["足球课程","篮球课程","羽毛球课程","网球课程"]) { str in + showSubTypeView = CourseSubTypeView.show(inView: self.view, afterView: view_topView, items: viewModel.packageTypeData.value!,selectModel: viewModel.selectPackeType.value) { [weak self] m in + if m.name != "全部"{ + sender.setTitle(m.name, for: .normal) + self?.viewModel.selectPackeType.accept(m) + }else{ + sender.setTitle("课程类型", for: .normal) + self?.viewModel.selectPackeType.accept(nil) + } sender.isSelected = false - + self?.refreshStatus.onNext(.beingHeaderRefresh) } closeClouse: { sender.isSelected = false } } @IBAction func inStoresAction(_ sender: UIButton) { + guard viewModel.storesData.value != nil else { + alertError(msg: "分类数据加载失败,请再试一次") + viewModel.getDefaultData() + return + } + guard !sender.isSelected else {return} + cleanOther() sender.isSelected = true - CourseSubTypeView.show(inView: self.view, afterView: view_topView, items: ["玩湃-喜望店","玩湃-喜望店","玩湃-喜望店","玩湃-喜望店"]) { str in + showSubTypeView = CourseSubTypeView.show(inView: self.view, afterView: view_topView, items: viewModel.storesData.value!,selectModel: viewModel.selectStore.value) { [weak self] m in + if m.name != "全部"{ + sender.setTitle(m.name, for: .normal) + self?.viewModel.selectStore.accept(m) + }else{ + sender.setTitle("所在门店", for: .normal) + self?.viewModel.selectStore.accept(nil) + } sender.isSelected = false - + self?.refreshStatus.onNext(.beingHeaderRefresh) } closeClouse: { sender.isSelected = false } } @IBAction func saleAction(_ sender: UIButton) { - + sender.isSelected = !sender.isSelected + let sortType = sender.isSelected ? SortType.desc:SortType.asc + viewModel.salesRanking.accept(sortType) + sender.setImage(viewModel.salesRanking.value?.img, for: .normal) + refreshStatus.onNext(.beingHeaderRefresh) } @IBAction func distanceAction(_ sender: UIButton) { - + sender.isSelected = !sender.isSelected + let sortType = sender.isSelected ? SortType.desc:SortType.asc + viewModel.distanceSort.accept(sortType) + sender.setImage(viewModel.distanceSort.value?.img, for: .normal) + refreshStatus.onNext(.beingHeaderRefresh) } } extension CourseListVC:UITableViewDelegate{ func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { - let vc = CourseDetailVC() + let item = items[indexPath.row] + let vc = CourseDetailVC(id: item.id) push(vc: vc) } @@ -87,12 +203,19 @@ extension CourseListVC:UITableViewDataSource{ func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { let cell = tableView.dequeueReusableCell(withIdentifier: "_CourseTCell") as! CourseTCell + cell.courseItemModel = items[indexPath.row] return cell } func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { - return 5 + return items.count } - - +} + +extension CourseListVC:QMUITextFieldDelegate{ + func textFieldShouldReturn(_ textField: UITextField) -> Bool { + textField.resignFirstResponder() + refreshStatus.onNext(.beingHeaderRefresh) + return true + } } -- Gitblit v1.7.1