//
|
// SearchStoreListVC.swift
|
// WanPai
|
//
|
// Created by 无故事王国 on 2023/6/30.
|
//
|
|
import UIKit
|
import QMUIKit
|
import JQTools
|
import RxRelay
|
import RxSwift
|
|
|
class SearchStoreViewModel:RefreshModel<SearchStoreListModel>{
|
|
let search = BehaviorRelay<String?>(value:nil)
|
let space = BehaviorRelay<Int?>(value:nil) // 1=升序/2=降序
|
var cityCode = BehaviorRelay<Int?>(value:nil)
|
|
override func api() -> (Observable<BaseResponse<[SearchStoreListModel]>>)? {
|
return Services.exploreStoreList(search: search.value, space: space.value, cityCode: cityCode.value)
|
}
|
}
|
|
|
class SearchStoreListVC: BaseVC {
|
|
@IBOutlet weak var btn_city: QMUIButton!
|
@IBOutlet weak var btn_distance: QMUIButton!
|
@IBOutlet weak var btn_limits: QMUIButton!
|
@IBOutlet weak var tableView: UITableView!
|
@IBOutlet weak var stackView: UIStackView!
|
@IBOutlet weak var view_localtion: UIView!
|
@IBOutlet weak var tf_searchStore: UITextField!
|
private var cityChooseSubTypeView:CityChooseSubTypeView?
|
private var viewModel = SearchStoreViewModel()
|
|
override func viewDidLoad() {
|
super.viewDidLoad()
|
title = "门店列表"
|
|
viewModel.configure(tableView,needMore: false)
|
viewModel.beginRefresh()
|
|
let currentStatus = CLLocationManager.authorizationStatus()
|
switch currentStatus {
|
case .authorizedAlways,.authorizedWhenInUse:
|
view_localtion.isHidden = true
|
viewModel.beginRefresh()
|
case .restricted,.denied:
|
view_localtion.isHidden = false
|
case .notDetermined:
|
view_localtion.isHidden = true
|
locationTool.startLocation { [weak self] local in
|
self?.viewModel.beginRefresh()
|
locationTool.stopLocation()
|
} errorClouse: { error in
|
alertError(msg: "定位获取失败")
|
}
|
default:break
|
}
|
}
|
|
override func setUI() {
|
btn_city.imagePosition = .right
|
btn_city.spacingBetweenImageAndTitle = 10
|
|
btn_distance.imagePosition = .right
|
btn_distance.spacingBetweenImageAndTitle = 6
|
|
btn_limits.imagePosition = .left
|
btn_limits.spacingBetweenImageAndTitle = 2
|
|
stackView.jq_addShadows(shadowColor: UIColor(hexStr: "#DFDFDF").withAlphaComponent(0.5), corner: 0, radius: 4, offset: CGSize(width: 4, height: 0), opacity: 1)
|
|
tableView.delegate = self
|
tableView.dataSource = self
|
tableView.separatorStyle = .none
|
tableView.register(UINib(nibName: "SearchStoreTCell", bundle: nil), forCellReuseIdentifier: "_SearchStoreTCell")
|
|
tf_searchStore.delegate = self
|
tf_searchStore.returnKeyType = .search
|
}
|
|
override func setRx() {
|
tf_searchStore.rx.text.orEmpty.bind(to: viewModel.search).disposed(by: disposeBag)
|
}
|
|
@IBAction func gotoSettingAction(_ sender: QMUIButton) {
|
JQ_AuthorizesTool.default.openURL(.location)
|
}
|
|
@IBAction func cityAction(_ sender: QMUIButton) {
|
guard !sender.isSelected else {return}
|
sender.isSelected = true
|
cityChooseSubTypeView = CityChooseSubTypeView.show(inView: self.view, afterView: stackView) { [weak self] m in
|
self?.viewModel.space.accept(nil)
|
self?.btn_distance.setImage(UIImage(named: "icon_sort_normal"), for: .normal)
|
sender.setTitle(m.name, for: .normal)
|
self?.viewModel.cityCode.accept(m.code)
|
self?.viewModel.beginRefresh()
|
sender.isSelected = false
|
} closeClouse: {
|
sender.isSelected = false
|
}
|
}
|
|
@IBAction func distanceAction(_ sender: QMUIButton) {
|
view.endEditing(true)
|
sender.isSelected = !sender.isSelected
|
let sortType = sender.isSelected ? 1:2
|
viewModel.space.accept(sortType)
|
sender.setImage(sortType == 1 ? UIImage(named: "icon_asc"):UIImage(named: "icon_desc"), for: .normal)
|
viewModel.beginRefresh()
|
}
|
|
@IBAction func searchAction(_ sender: Any) {
|
view.endEditing(true)
|
viewModel.beginRefresh()
|
}
|
}
|
|
extension SearchStoreListVC:UITextFieldDelegate{
|
func textFieldShouldReturn(_ textField: UITextField) -> Bool {
|
view.endEditing(true)
|
viewModel.beginRefresh()
|
return true
|
}
|
}
|
|
extension SearchStoreListVC:UITableViewDelegate{
|
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
|
let model = viewModel.dataSource.value[indexPath.row]
|
let vc = SearchStoreDetailVC(id: model.storeId)
|
push(vc: vc)
|
}
|
}
|
|
extension SearchStoreListVC:UITableViewDataSource{
|
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
|
let model = viewModel.dataSource.value[indexPath.row]
|
let cell = tableView.dequeueReusableCell(withIdentifier: "_SearchStoreTCell", for: indexPath) as! SearchStoreTCell
|
cell.searchStoreListModel = model
|
return cell
|
}
|
|
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
|
return viewModel.dataSource.value.count
|
}
|
}
|