From ca2a4ce89064be715e90ae60dc305c26e7dd5719 Mon Sep 17 00:00:00 2001
From: younger_times <841720330@qq.com>
Date: 星期五, 14 七月 2023 18:52:34 +0800
Subject: [PATCH] 新增

---
 WanPai/Root/Activity/VC/ActivityListVC.swift |   89 +++++++++++++++++++++++++++++++++++++-------
 1 files changed, 75 insertions(+), 14 deletions(-)

diff --git a/WanPai/Root/Activity/VC/ActivityListVC.swift b/WanPai/Root/Activity/VC/ActivityListVC.swift
index 348d580..6702618 100644
--- a/WanPai/Root/Activity/VC/ActivityListVC.swift
+++ b/WanPai/Root/Activity/VC/ActivityListVC.swift
@@ -7,6 +7,20 @@
 
 import UIKit
 import QMUIKit
+import RxSwift
+import RxCocoa
+
+class ActivityListViewModel:RefreshModel<ActivityListModel>{
+
+    var city = BehaviorRelay<Int?>(value:nil)
+    var content = BehaviorRelay<String>(value: "")
+    var heat = BehaviorRelay<SortType?>(value:nil)
+    var registerCondition = BehaviorRelay<RegisterAcitivyType?>(value:nil)
+
+    override func api() -> (Observable<BaseResponse<[ActivityListModel]>>)? {
+        return Services.queryCompetitionList(cityCode: city.value, content: content.value, heat: heat.value, registerCondition: registerCondition.value?.rawValue)
+    }
+}
 
 class ActivityListVC: BaseVC {
     @IBOutlet weak var view_top: UIView!
@@ -14,17 +28,26 @@
     @IBOutlet weak var btn_holdCity: QMUIButton!
     @IBOutlet weak var btn_joinCondition: QMUIButton!
     @IBOutlet weak var btn_hotFilter: QMUIButton!
-    @IBOutlet weak var tableView: UITableView!
+    @IBOutlet weak var tableView: BaseTableView!
+
+    private var courseSubTypeView:CourseSubTypeView?
+    private var cityChooseSubTypeView:CityChooseSubTypeView?
+
+    private var viewModel = ActivityListViewModel()
     
     override func viewDidLoad() {
         super.viewDidLoad()
         title = "赛事活动列表"
+        viewModel.configure(tableView,needMore: false)
+        viewModel.beginRefresh()
     }
     
     override func setUI() {
         tableView.delegate = self
         tableView.dataSource = self
+        tf_search.delegate = self
         tableView.register(UINib(nibName: "ActivityInfoTCell", bundle: nil), forCellReuseIdentifier: "_ActivityInfoTCell")
+        tableView.jq_setEmptyView()
         
         btn_holdCity.imagePosition = .right
         btn_holdCity.spacingBetweenImageAndTitle = 5
@@ -35,55 +58,93 @@
         btn_hotFilter.imagePosition = .right
         btn_hotFilter.spacingBetweenImageAndTitle = 5
     }
+
+    override func setRx() {
+        tf_search.rx.text.orEmpty.changed.bind(to: viewModel.content).disposed(by: disposeBag)
+
+    }
     
     @IBAction func searchAction(_ sender: Any) {
-        
+        tf_search.resignFirstResponder()
+        viewModel.beginRefresh()
     }
     
     @IBAction func holdCityAction(_ sender: QMUIButton) {
-        guard !btn_holdCity.isSelected else {return}
-        btn_holdCity.isSelected = true
-        CityChooseSubTypeView.show(inView: self.view, afterView: view_top) { text in
-            
+        guard !sender.isSelected else {return}
+        hiddenMenu()
+        sender.isSelected = true
+        cityChooseSubTypeView = CityChooseSubTypeView.show(inView: self.view, afterView: view_top) { text in
+            sender.setTitle(text, for: .normal)
+            sender.isSelected = false
         } closeClouse: {
-            self.btn_holdCity.isSelected = false
+            sender.isSelected = false
         }
     }
     
     @IBAction func signupConditionAction(_ sender: QMUIButton) {
         guard !sender.isSelected else {return}
+        hiddenMenu()
         sender.isSelected = true
-        let items = Array<NormalSimpleModel>()
-        CourseSubTypeView.show(inView: self.view, afterView: btn_joinCondition, items: items) { m in
+        var items = Array<NormalSimpleModel>()
+        items.append(NormalSimpleModel(id: 1, name: "全部用户"))
+        items.append(NormalSimpleModel(id: 2, name: "仅限年度会员参与"))
+        items.append(NormalSimpleModel(id: 3, name: "仅限学员参与"))
+        courseSubTypeView = CourseSubTypeView.show(inView: self.view, afterView: btn_joinCondition, items: items) { [weak self] m in
+            sender.setTitle(m.name, for: .normal)
             sender.isSelected = false
-            
+            self?.viewModel.registerCondition.accept(RegisterAcitivyType(rawValue: m.id))
+            self?.viewModel.beginRefresh()
         } closeClouse: {
             sender.isSelected = false
         }
     }
     
+    @IBAction func hotFliterAction(_ sender: UIButton) {
+        sender.isSelected = !sender.isSelected
+        let sortType = sender.isSelected ? SortType.desc:SortType.asc
+        sender.setImage(sortType.img, for: .normal)
+        viewModel.heat.accept(sortType)
+        viewModel.beginRefresh()
+    }
+
     @IBAction func signupAction(_ sender: UIButton) {
         let vc = ActivitySignupListVC()
         push(vc: vc)
     }
-    
-    
+
+    private func hiddenMenu(){
+        btn_holdCity.isSelected = false
+        btn_joinCondition.isSelected = false
+        courseSubTypeView?.removeFromSuperview()
+        cityChooseSubTypeView?.removeFromSuperview()
+    }
 }
 
 extension ActivityListVC:UITableViewDelegate{
     func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
-        let vc = ActivityDetailVC()
+        let model = viewModel.dataSource.value[indexPath.row]
+        let vc = ActivityDetailVC(id: model.id)
         push(vc: vc)
     }
 }
 
 extension ActivityListVC:UITableViewDataSource{
     func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
+        let model = viewModel.dataSource.value[indexPath.row]
         let cell = tableView.dequeueReusableCell(withIdentifier: "_ActivityInfoTCell") as! ActivityInfoTCell
+        cell.activityListModel = model
         return cell
     }
     
     func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
-        return 5
+        return viewModel.dataSource.value.count
+    }
+}
+
+extension ActivityListVC:QMUITextFieldDelegate{
+    func textFieldShouldReturn(_ textField: UITextField) -> Bool {
+        textField.resignFirstResponder()
+        viewModel.beginRefresh()
+        return true
     }
 }

--
Gitblit v1.7.1