//
|
// CourseListVC.swift
|
// WanPai
|
//
|
// Created by 杨锴 on 2023/6/9.
|
//
|
|
import UIKit
|
import QMUIKit
|
import JQTools
|
import RxSwift
|
import RxDataSources
|
import RxCocoa
|
|
class CourseListViewModel:RefreshModel<CourseItemModel>{
|
|
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)
|
|
override func api() -> (Observable<BaseResponse<[CourseItemModel]>>)? {
|
return Services.queryCourseList(typeId: selectPackeType.value?.id, distanceSort: distanceSort.value, salesRanking: salesRanking.value, search: search.value, storeId: selectStore.value?.id)
|
}
|
|
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{
|
|
@IBOutlet weak var view_topView: UIView!
|
@IBOutlet weak var tf_search: QMUITextField!
|
@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!
|
|
private var viewModel = CourseListViewModel()
|
private var showSubTypeView:CourseSubTypeView?
|
|
init(selectStore:NormalSimpleModel? = nil) {
|
super.init(nibName: nil, bundle: nil)
|
if selectStore != nil{
|
viewModel.selectStore.accept(selectStore)
|
}
|
}
|
|
override func viewDidLoad() {
|
super.viewDidLoad()
|
title = "运动营列表"
|
viewModel.getDefaultData()
|
viewModel.beginRefresh()
|
}
|
|
override func setUI() {
|
btn_courseType.imagePosition = .right
|
btn_stores.imagePosition = .right
|
btn_sales.imagePosition = .right
|
btn_distance.imagePosition = .right
|
|
btn_courseType.spacingBetweenImageAndTitle = 5
|
btn_stores.spacingBetweenImageAndTitle = 5
|
btn_sales.spacingBetweenImageAndTitle = 5
|
btn_distance.spacingBetweenImageAndTitle = 5
|
|
tableView.delegate = self
|
tableView.dataSource = self
|
tableView.register(UINib(nibName: "CourseTCell", bundle: nil), forCellReuseIdentifier: "_CourseTCell")
|
tableView.separatorStyle = .none
|
tf_search.delegate = self
|
viewModel.configure(tableView,needMore: false)
|
// tableView.jq_setEmptyView()
|
btn_stores.setTitle(viewModel.selectStore.value?.name ?? "所在门店", for: .normal)
|
}
|
|
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 cleanOther(){
|
showSubTypeView?.removeFromSuperview()
|
btn_courseType.isSelected = false
|
btn_stores.isSelected = false
|
btn_sales.isSelected = false
|
btn_distance.isSelected = false
|
}
|
|
@IBAction func searchAction(_ sender: UIButton) {
|
view.endEditing(true)
|
guard !tf_search.isEmpty else {
|
alert(msg: "请输入搜索内容");return
|
}
|
viewModel.beginRefresh()
|
}
|
|
|
@IBAction func enrolledAction(_ sender: UIButton) {
|
view.endEditing(true)
|
let vc = SignUpCourseVC()
|
push(vc: vc)
|
}
|
|
|
@IBAction func crouseTypeAction(_ sender: UIButton) {
|
view.endEditing(true)
|
guard viewModel.packageTypeData.value != nil else {
|
alertError(msg: "分类数据加载失败,请再试一次")
|
viewModel.getDefaultData()
|
return
|
}
|
|
guard !sender.isSelected else {return}
|
cleanOther()
|
sender.isSelected = true
|
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?.viewModel.beginRefresh()
|
} closeClouse: {
|
sender.isSelected = false
|
}
|
}
|
|
@IBAction func inStoresAction(_ sender: UIButton) {
|
view.endEditing(true)
|
guard viewModel.storesData.value != nil else {
|
alertError(msg: "分类数据加载失败,请再试一次")
|
viewModel.getDefaultData()
|
return
|
}
|
|
guard !sender.isSelected else {return}
|
cleanOther()
|
sender.isSelected = true
|
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?.viewModel.beginRefresh()
|
} closeClouse: {
|
sender.isSelected = false
|
}
|
}
|
|
@IBAction func saleAction(_ sender: UIButton) {
|
view.endEditing(true)
|
sender.isSelected = !sender.isSelected
|
let sortType = sender.isSelected ? SortType.desc:SortType.asc
|
viewModel.salesRanking.accept(sortType)
|
sender.setImage(viewModel.salesRanking.value?.img, for: .normal)
|
viewModel.beginRefresh()
|
}
|
|
@IBAction func distanceAction(_ sender: UIButton) {
|
view.endEditing(true)
|
sender.isSelected = !sender.isSelected
|
let sortType = sender.isSelected ? SortType.desc:SortType.asc
|
viewModel.distanceSort.accept(sortType)
|
sender.setImage(viewModel.distanceSort.value?.img, for: .normal)
|
viewModel.beginRefresh()
|
}
|
|
required init?(coder: NSCoder) {
|
fatalError("init(coder:) has not been implemented")
|
}
|
|
}
|
|
extension CourseListVC:UITableViewDelegate{
|
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
|
let item = viewModel.dataSource.value[indexPath.row]
|
let vc = CourseDetailVC(id: item.id)
|
push(vc: vc)
|
}
|
|
}
|
|
extension CourseListVC:UITableViewDataSource{
|
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
|
let cell = tableView.dequeueReusableCell(withIdentifier: "_CourseTCell") as! CourseTCell
|
cell.courseItemModel = viewModel.dataSource.value[indexPath.row]
|
return cell
|
}
|
|
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
|
return viewModel.dataSource.value.count
|
}
|
}
|
|
extension CourseListVC:QMUITextFieldDelegate{
|
func textFieldShouldReturn(_ textField: UITextField) -> Bool {
|
textField.resignFirstResponder()
|
viewModel.beginRefresh()
|
return true
|
}
|
}
|