| | |
| | | |
| | | 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! |
| | |
| | | @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 |
| | |
| | | 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 |
| | | } |
| | | } |