younger_times
2023-07-14 ca2a4ce89064be715e90ae60dc305c26e7dd5719
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
    }
}