无故事王国
2023-11-20 76e22221a628f7df62fb7b6ebaaf9315fa04e7ba
WanPai/Root/Search/VC/SearchStoreListVC.swift
@@ -8,6 +8,21 @@
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 {
@@ -16,11 +31,35 @@
    @IBOutlet weak var btn_limits: QMUIButton!
    @IBOutlet weak var tableView: UITableView!
    @IBOutlet weak var stackView: UIStackView!
   private var id:Int!
   @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() {
@@ -28,7 +67,7 @@
        btn_city.spacingBetweenImageAndTitle = 10
        btn_distance.imagePosition = .right
        btn_distance.spacingBetweenImageAndTitle = -5
        btn_distance.spacingBetweenImageAndTitle = 6
        btn_limits.imagePosition = .left
        btn_limits.spacingBetweenImageAndTitle = 2
@@ -39,50 +78,74 @@
        tableView.dataSource = self
        tableView.separatorStyle = .none
        tableView.register(UINib(nibName: "SearchStoreTCell", bundle: nil), forCellReuseIdentifier: "_SearchStoreTCell")
      tf_searchStore.delegate = self
      tf_searchStore.returnKeyType = .search
    }
   init(id:Int) {
      super.init(nibName: nil, bundle: nil)
      self.id = id
   override func setRx() {
      tf_searchStore.rx.text.orEmpty.bind(to: viewModel.search).disposed(by: disposeBag)
   }
   required init?(coder: NSCoder) {
      fatalError("init(coder:) has not been implemented")
   @IBAction func gotoSettingAction(_ sender: QMUIButton) {
      JQ_AuthorizesTool.default.openURL(.location)
   }
   
    @IBAction func cityAction(_ sender: QMUIButton) {
        guard !sender.isSelected else {return}
        sender.isSelected = true
        let items = Array<NormalSimpleModel>()
        CourseSubTypeView.show(inView: self.view, afterView: stackView, items:items) { m in
            sender.isSelected = false
        } closeClouse: {
            sender.isSelected = false
        }
      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 vc = SearchStoreDetailVC(id: 0)
      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 10
      return viewModel.dataSource.value.count
    }
}