杨锴
2025-05-11 7453d2d0cef415b34323d1b91e6cfa4a6ba31178
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
//
//  ActivityListVC.swift
//  WanPai
//
//  Created by 杨锴 on 2023/6/13.
//
 
import UIKit
import QMUIKit
import RxSwift
import RxCocoa
 
class ActivityListViewModel:RefreshModel<ActivityListModel>{
 
                var cityCode = 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: cityCode.value, content: content.value, heat: heat.value, registerCondition: registerCondition.value?.rawValue)
                }
}
 
class ActivityListVC: BaseVC {
                @IBOutlet weak var view_top: UIView!
                @IBOutlet weak var tf_search: QMUITextField!
                @IBOutlet weak var btn_holdCity: QMUIButton!
                @IBOutlet weak var btn_joinCondition: QMUIButton!
                @IBOutlet weak var btn_hotFilter: QMUIButton!
                @IBOutlet weak var tableView: BaseTableView!
 
                private var courseSubTypeView:CourseSubTypeView?
                private var cityChooseSubTypeView:CityChooseSubTypeView?
 
                private var viewModel = ActivityListViewModel()
                private var selectSignupConditionModel:NormalSimpleModel?
                private var cityModel:HomeStoreModel?
 
                init(cityModel:HomeStoreModel? = nil){
                                super.init(nibName: nil, bundle: nil)
                                self.cityModel = cityModel
                }
 
                required init?(coder: NSCoder) {
                                fatalError("init(coder:) has not been implemented")
                }
 
                override func viewDidLoad() {
                                super.viewDidLoad()
                                title = "活动列表"
                                if cityModel != nil{
                                                btn_holdCity.setTitle(cityModel!.city, for: .normal)
                                                viewModel.cityCode.accept(cityModel!.cityCode)
                                }
                                viewModel.configure(tableView,needMore: false)
                                viewModel.beginRefresh()
                }
 
                override func setUI() {
                                tableView.delegate = self
                                tableView.dataSource = self
                                tf_search.delegate = self
                                tableView.separatorStyle = .none
                                tableView.register(UINib(nibName: "ActivityInfoTCell", bundle: nil), forCellReuseIdentifier: "_ActivityInfoTCell")
                                //        tableView.jq_setEmptyView()
 
                                btn_holdCity.imagePosition = .right
                                btn_holdCity.spacingBetweenImageAndTitle = 5
 
                                btn_joinCondition.imagePosition = .right
                                btn_joinCondition.spacingBetweenImageAndTitle = 5
 
                                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) {
                                view.endEditing(true)
                                guard !sender.isSelected else {return}
                                hiddenMenu()
                                sender.isSelected = true
                                cityChooseSubTypeView = CityChooseSubTypeView.show(inView: self.view, afterView: view_top) { [weak self] m in
                                                sender.setTitle(m.name, for: .normal)
                                                self?.viewModel.cityCode.accept(m.code)
                                                self?.viewModel.beginRefresh()
                                                sender.isSelected = false
                                } closeClouse: {
                                                sender.isSelected = false
                                }
                }
 
                @IBAction func signupConditionAction(_ sender: QMUIButton) {
                                view.endEditing(true)
                                guard !sender.isSelected else {return}
                                hiddenMenu()
                                sender.isSelected = true
                                var items = Array<NormalSimpleModel>()
                                items.append(NormalSimpleModel(id: 1, name: "全部用户参与"))
                                items.append(NormalSimpleModel(id: 2, name: "仅限年度会员参与"))
                                items.append(NormalSimpleModel(id: 3, name: "仅限运动营成员参与"))
        items.append(NormalSimpleModel(id: 4, name: "仅限队伍报名"))
                                courseSubTypeView = CourseSubTypeView.show(inView: self.view, afterView: btn_joinCondition, items: items,selectModel: selectSignupConditionModel) { [weak self] m in
                                                sender.setTitle(m.name, for: .normal)
                                                sender.isSelected = false
                                                self?.selectSignupConditionModel = m
                                                self?.viewModel.registerCondition.accept(RegisterAcitivyType(rawValue: m.id))
                                                self?.viewModel.beginRefresh()
                                } closeClouse: {
                                                sender.isSelected = false
                                }
                }
 
                @IBAction func hotFliterAction(_ sender: UIButton) {
                                view.endEditing(true)
                                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) {
                                view.endEditing(true)
                                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 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
                                cell.label_state.isHidden = true
                                return cell
                }
 
                func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
                                return viewModel.dataSource.value.count
                }
}
 
extension ActivityListVC:QMUITextFieldDelegate{
                func textFieldShouldReturn(_ textField: UITextField) -> Bool {
                                textField.resignFirstResponder()
                                viewModel.beginRefresh()
                                return true
                }
}