无故事王国
2023-10-18 e86e19e5e5909f46e09adec1df430e0214a81590
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
//
//  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?
    
    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.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: "仅限运动营成员参与"))
        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
    }
}