//
|
// YardListVC.swift
|
// WanPai
|
//
|
// Created by 无故事王国 on 2023/6/19.
|
//
|
|
import UIKit
|
import QMUIKit
|
import RxRelay
|
import RxSwift
|
|
class YardListViewModel:RefreshModel<SiteItemModel>{
|
var search = BehaviorRelay<String?>(value:nil)
|
var startDate = BehaviorRelay<String?>(value:nil)
|
var endDate = BehaviorRelay<String?>(value:nil)
|
var siteType = BehaviorRelay<NormalSimpleModel?>(value:nil)
|
var selectStore = BehaviorRelay<NormalSimpleModel?>(value:nil)
|
var city = BehaviorRelay<CityProfileModel?>(value:nil)
|
|
|
override func api() -> (Observable<BaseResponse<[SiteItemModel]>>)? {
|
return Services.querySiteList(pageNum: page, pageSize: pageSize, siteTypeId: siteType.value?.id, cityCode: city.value?.code, storeId: selectStore.value?.id, startTime: startDate.value, endTime: endDate.value,search: search.value)
|
}
|
}
|
|
class YardListVC: BaseVC {
|
|
@IBOutlet weak var btn_bookingTime: QMUIButton!
|
@IBOutlet weak var btn_yardType: QMUIButton!
|
@IBOutlet weak var btn_city: QMUIButton!
|
@IBOutlet weak var btn_stores: QMUIButton!
|
@IBOutlet weak var tableView: BaseTableView!
|
@IBOutlet weak var view_top: UIView!
|
@IBOutlet weak var tf_search: QMUITextField!
|
|
private var yardBookingTimeView:YardBookingTimeView?
|
private var yardTypeView:CourseSubTypeView?
|
private var cityChooseSubTypeView:CityChooseSubTypeView?
|
private var inStoreView:CourseSubTypeView?
|
private var yardTypeItems = [NormalSimpleModel]()
|
private var storeItems = [NormalSimpleModel]()
|
private var selectStoreModel:NormalSimpleModel?
|
|
private let viewModel = YardListViewModel()
|
|
init(selectStore:NormalSimpleModel? = nil) {
|
super.init(nibName: nil, bundle: nil)
|
if selectStore != nil{
|
viewModel.selectStore.accept(selectStore)
|
}
|
}
|
|
override func viewDidLoad() {
|
super.viewDidLoad()
|
title = "预约场地"
|
|
Services.querySiteType().subscribe(onNext: {data in
|
if let models = data.data{
|
self.yardTypeItems.append(NormalSimpleModel(id: 0, name: "全部"))
|
self.yardTypeItems.append(contentsOf: models)
|
}
|
}).disposed(by: disposeBag)
|
|
|
getStoreList()
|
viewModel.configure(tableView)
|
viewModel.beginRefresh()
|
|
}
|
|
override func setUI() {
|
btn_bookingTime.imagePosition = .right
|
btn_yardType.imagePosition = .right
|
btn_city.imagePosition = .right
|
btn_stores.imagePosition = .right
|
|
btn_bookingTime.spacingBetweenImageAndTitle = 5
|
btn_yardType.spacingBetweenImageAndTitle = 5
|
btn_city.spacingBetweenImageAndTitle = 5
|
btn_stores.spacingBetweenImageAndTitle = 5
|
|
tf_search.delegate = self
|
tableView.delegate = self
|
tableView.dataSource = self
|
tableView.separatorStyle = .none
|
tableView.register(UINib(nibName: "YardTCell", bundle: nil), forCellReuseIdentifier: "_YardTCell")
|
// tableView.jq_setEmptyView()
|
btn_stores.setTitle(viewModel.selectStore.value?.name ?? "所在门店", for: .normal)
|
}
|
|
|
private func getStoreList(){
|
Services.queryStoreList(cityCode: viewModel.city.value?.code).subscribe(onNext: {data in
|
if let models = data.data{
|
self.storeItems.removeAll()
|
self.storeItems.append(NormalSimpleModel(id: 0, name: "全部"))
|
self.storeItems.append(contentsOf: models)
|
}
|
}).disposed(by: disposeBag)
|
}
|
|
override func setRx() {
|
tf_search.rx.text.orEmpty.bind(to: viewModel.search).disposed(by: disposeBag)
|
}
|
|
@IBAction func searchAction(_ sender: UIButton) {
|
tf_search.resignFirstResponder()
|
viewModel.beginRefresh()
|
}
|
|
@IBAction func myBookingAction(_ sender: Any) {
|
let vc = YardBookingListVC()
|
push(vc: vc)
|
}
|
|
|
@IBAction func bookingTimeAction(_ sender: UIButton) {
|
guard !sender.isSelected else {return}
|
closeAction()
|
sender.isSelected = true
|
yardBookingTimeView = YardBookingTimeView.show(inView: self.view, afterView: view_top,defaultStarTime: viewModel.startDate.value,defaultEndTime: viewModel.endDate.value) { [weak self] t1, t2 in
|
self?.viewModel.startDate.accept(t1)
|
self?.viewModel.endDate.accept(t2)
|
self?.viewModel.beginRefresh()
|
sender.isSelected = false
|
}
|
}
|
|
@IBAction func yardTypeAction(_ sender: QMUIButton) {
|
guard !sender.isSelected else {return}
|
closeAction()
|
sender.isSelected = true
|
yardTypeView = CourseSubTypeView.show(inView: self.view, afterView: view_top, items: yardTypeItems, selectModel: viewModel.siteType.value) { [weak self] m in
|
sender.isSelected = false
|
if m.id == 0{
|
self?.viewModel.siteType.accept(nil)
|
sender.setTitle("场地类型", for: .normal)
|
}else{
|
self?.viewModel.siteType.accept(m)
|
sender.setTitle(m.name, for: .normal)
|
}
|
|
self?.viewModel.beginRefresh()
|
} closeClouse: {
|
sender.isSelected = false
|
}
|
}
|
|
@IBAction func inCityAction(_ sender: QMUIButton) {
|
guard !sender.isSelected else {return}
|
closeAction()
|
sender.isSelected = true
|
cityChooseSubTypeView = CityChooseSubTypeView.show(inView: self.view, afterView: view_top) { [weak self] model in
|
self?.viewModel.city.accept(model)
|
sender.setTitle(model.name, for: .normal)
|
sender.isSelected = false
|
self?.viewModel.siteType.accept(nil)
|
self?.viewModel.selectStore.accept(nil)
|
self?.btn_stores.setTitle("所在门店", for: .normal)
|
self?.getStoreList()
|
self?.viewModel.beginRefresh()
|
} closeClouse: {
|
sender.isSelected = false
|
}
|
}
|
|
@IBAction func inStoreAction(_ sender: QMUIButton) {
|
guard !sender.isSelected else {return}
|
closeAction()
|
sender.isSelected = true
|
inStoreView = CourseSubTypeView.show(inView: self.view, afterView: view_top, items: storeItems,selectModel: viewModel.selectStore.value) { [weak self] m in
|
sender.isSelected = false
|
if m.id == 0{
|
sender.setTitle("所在门店", for: .normal)
|
self?.viewModel.selectStore.accept(nil)
|
}else{
|
sender.setTitle(m.name, for: .normal)
|
self?.viewModel.selectStore.accept(m)
|
}
|
self?.viewModel.beginRefresh()
|
} closeClouse: {
|
sender.isSelected = false
|
}
|
}
|
|
private func closeAction(){
|
btn_bookingTime.isSelected = false
|
btn_yardType.isSelected = false
|
btn_city.isSelected = false
|
btn_stores.isSelected = false
|
yardBookingTimeView?.removeFromSuperview()
|
yardTypeView?.removeFromSuperview()
|
cityChooseSubTypeView?.removeFromSuperview()
|
inStoreView?.removeFromSuperview()
|
}
|
|
required init?(coder: NSCoder) {
|
fatalError("init(coder:) has not been implemented")
|
}
|
}
|
|
extension YardListVC:UITableViewDelegate{
|
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
|
let model = viewModel.dataSource.value[indexPath.row]
|
let vc = YardDetailVC(id: model.id)
|
push(vc: vc)
|
}
|
}
|
|
extension YardListVC:UITableViewDataSource{
|
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
|
let model = viewModel.dataSource.value[indexPath.row]
|
let cell = tableView.dequeueReusableCell(withIdentifier: "_YardTCell") as! YardTCell
|
cell.siteItemModel = model
|
return cell
|
}
|
|
func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
|
return 136
|
}
|
|
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
|
return viewModel.dataSource.value.count
|
}
|
}
|
|
|
extension YardListVC:QMUITextFieldDelegate{
|
func textFieldShouldReturn(_ textField: UITextField) -> Bool {
|
textField.resignFirstResponder()
|
viewModel.beginRefresh()
|
return true
|
}
|
}
|