fix
无故事王国
2024-02-28 4468d9f9b3b8c70597f04e5f1ecb61118c404d2c
WanPai/Root/Course/VC/CourseListVC.swift
@@ -14,234 +14,234 @@
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)
            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)
   }
            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
            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)
                        }.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
                        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)
    }
                        }.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!
            @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?
            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
            init(selectStore:NormalSimpleModel? = nil) {
                        super.init(nibName: nil, bundle: nil)
                        if selectStore != nil{
                                    viewModel.selectStore.accept(selectStore)
                        }
            }
        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)
      btn_stores.setTitle(viewModel.selectStore.value?.name ?? "所在门店", for: .normal)
    }
            override func viewDidLoad() {
                        super.viewDidLoad()
                        title = "运动营列表"
                        viewModel.getDefaultData()
                        viewModel.beginRefresh()
            }
    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)
    }
            override func setUI() {
                        btn_courseType.imagePosition = .right
                        btn_stores.imagePosition = .right
                        btn_sales.imagePosition = .right
                        btn_distance.imagePosition = .right
    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()
    }
                        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)
                        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.distanceSort.accept(nil)
      btn_distance.isSelected = false
      btn_distance.setImage(SortType.def.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)
            @IBAction func enrolledAction(_ sender: UIButton) {
                        view.endEditing(true)
                        let vc = SignUpCourseVC()
                        push(vc: vc)
            }
      //复原销量
      viewModel.salesRanking.accept(nil)
      btn_sales.isSelected = false
      btn_sales.setImage(SortType.def.img, for: .normal)
            @IBAction func crouseTypeAction(_ sender: UIButton) {
                        view.endEditing(true)
                        guard viewModel.packageTypeData.value != nil else {
                                    alertError(msg: "分类数据加载失败,请再试一次")
                                    viewModel.getDefaultData()
                                    return
                        }
      viewModel.beginRefresh()
    }
                        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
                        }
            }
   required init?(coder: NSCoder) {
      fatalError("init(coder:) has not been implemented")
   }
            @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.distanceSort.accept(nil)
                        btn_distance.isSelected = false
                        btn_distance.setImage(SortType.def.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.salesRanking.accept(nil)
                        btn_sales.isSelected = false
                        btn_sales.setImage(SortType.def.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)
    }
            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
    }
            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
    }
            func textFieldShouldReturn(_ textField: UITextField) -> Bool {
                        textField.resignFirstResponder()
                        viewModel.beginRefresh()
                        return true
            }
}