//
|
// CarSaleListVC.swift
|
// OKProject
|
//
|
// Created by 无故事王国 on 2022/5/9.
|
// Copyright © 2022 yangwang. All rights reserved.
|
//
|
|
import UIKit
|
import QMUIKit
|
import RxCocoa
|
|
fileprivate enum CarSaleSeletType {
|
case brand
|
case price
|
case more
|
case distance
|
case inital
|
}
|
|
/// 车辆售卖
|
class CarSaleListVC: YYViewController {
|
|
let viewModel = CarContractViewModel()
|
|
@IBOutlet weak var searchBtn: QMUIButton!
|
@IBOutlet weak var searchTextField: UITextField!
|
@IBOutlet weak var tableView: BaseTableView!
|
@IBOutlet weak var brandBtn: QMUIButton!
|
@IBOutlet weak var priceBtn: QMUIButton!
|
@IBOutlet weak var moreBtn: QMUIButton!
|
@IBOutlet weak var distanceBtn: QMUIButton!
|
@IBOutlet weak var stackView: UIStackView!
|
@IBOutlet weak var stackViewHeiCons: NSLayoutConstraint!
|
|
private var selectType = BehaviorRelay<CarSaleSeletType>(value: .inital)
|
private var carBrandListView:CarBrandListView?
|
private var carPriceListView:CarPriceListView?
|
private var carMoreListView:CarMoreListView?
|
private var distanceView:DistanceView?
|
|
private var brandModels = [BrandModel]()
|
private var carMoreListSelectIndex:Array<[Int]>?
|
private var distanceSelectIndex:Int = 0
|
private var brandSelectIndex:Int = 0
|
private var carPriceListIndex:Int = 0
|
private var isSearch:Bool!
|
|
init(isSearch:Bool = false) {
|
self.isSearch = isSearch
|
super.init(nibName: nil, bundle: nil)
|
}
|
|
required init?(coder: NSCoder) {
|
fatalError("init(coder:) has not been implemented")
|
}
|
|
override func viewDidLoad() {
|
super.viewDidLoad()
|
viewModel.configure(tableView: tableView)
|
if isSearch{
|
//73540 【我要买车】搜索,需要跳个新的页面
|
navigationItem.title = "搜索"
|
}else{
|
navigationItem.title = "车辆售卖"
|
tableView.mj_header?.beginRefreshing()
|
}
|
tableView.emptyType = .empty(image: nil, title: "暂无数据")
|
}
|
|
override func setupViews() {
|
super.setupViews()
|
view.backgroundColor = UIColor(hexString: "#F3F4F5")
|
|
brandBtn.isHidden = isSearch
|
priceBtn.isHidden = isSearch
|
moreBtn.isHidden = isSearch
|
stackView.isHidden = isSearch
|
stackViewHeiCons.constant = isSearch ? 0:40
|
|
searchBtn.spacingBetweenImageAndTitle = 7
|
brandBtn.spacingBetweenImageAndTitle = 4
|
priceBtn.spacingBetweenImageAndTitle = 4
|
moreBtn.spacingBetweenImageAndTitle = 4
|
distanceBtn.spacingBetweenImageAndTitle = 4
|
|
brandBtn.imagePosition = .right
|
priceBtn.imagePosition = .right
|
moreBtn.imagePosition = .right
|
distanceBtn.imagePosition = .right
|
|
searchTextField.delegate = self
|
searchTextField.clearButtonMode = .whileEditing
|
searchTextField.returnKeyType = .search
|
tableView.delegate = self
|
tableView.dataSource = self
|
tableView.separatorStyle = .none
|
tableView.backgroundColor = .clear
|
tableView.register(UINib(nibName: "HireCarTCell", bundle: nil), forCellReuseIdentifier: "_HireCarTCell")
|
|
brandBtn.setTitleColor(UIColor(hexString: "#00BF30"), for: .selected)
|
priceBtn.setTitleColor(UIColor(hexString: "#00BF30"), for: .selected)
|
moreBtn.setTitleColor(UIColor(hexString: "#00BF30"), for: .selected)
|
}
|
|
override func defineLayouts() {
|
super.defineLayouts()
|
|
}
|
|
|
override func bindRx() {
|
selectType.subscribe(onNext: {[weak self] type in
|
guard let weakSelf = self else { return }
|
|
weakSelf.brandBtn.isSelected = false
|
weakSelf.priceBtn.isSelected = false
|
weakSelf.moreBtn.isSelected = false
|
weakSelf.distanceBtn.isSelected = false
|
|
switch type {
|
case .brand:
|
weakSelf.carPriceListView?.hidden()
|
weakSelf.carMoreListView?.hidden()
|
weakSelf.distanceView?.hidden()
|
weakSelf.brandBtn.isSelected = true
|
let names = weakSelf.brandModels.map({$0.name})
|
|
weakSelf.carBrandListView = CarBrandListView.show(weakSelf, offsetTop: 85, items: names,selectIndex: weakSelf.brandSelectIndex) { index in
|
let brandM = weakSelf.brandModels[index]
|
weakSelf.brandSelectIndex = index
|
|
if brandM.id != 0{
|
weakSelf.viewModel.brandId.accept("\(brandM.id)")
|
weakSelf.brandBtn.setTitle(brandM.name, for: .normal)
|
}else{
|
weakSelf.viewModel.brandId.accept(nil)
|
weakSelf.brandBtn.setTitle("车辆品牌", for: .normal)
|
}
|
|
weakSelf.brandBtn.isSelected = false
|
weakSelf.carBrandListView = nil
|
weakSelf.tableView.mj_header?.beginRefreshing()
|
} hiddenClouse: {
|
weakSelf.brandBtn.isSelected = false
|
weakSelf.carBrandListView = nil
|
}
|
case .price:
|
weakSelf.carMoreListView?.hidden()
|
weakSelf.carBrandListView?.hidden()
|
weakSelf.distanceView?.hidden()
|
weakSelf.priceBtn.isSelected = true
|
|
weakSelf.carPriceListView = CarPriceListView.show(weakSelf, offsetTop: 85,selectIndex: weakSelf.carPriceListIndex, selectClouse: {selectIndex,min,max in
|
weakSelf.carPriceListIndex = selectIndex
|
weakSelf.viewModel.startTransferPrice.accept(min)
|
weakSelf.viewModel.endTransferPrice.accept(max)
|
weakSelf.priceBtn.isSelected = false
|
weakSelf.carPriceListView = nil
|
weakSelf.tableView.mj_header?.beginRefreshing()
|
},hiddenClouse: {
|
weakSelf.priceBtn.isSelected = false
|
weakSelf.carPriceListView = nil
|
})
|
case .more:
|
weakSelf.carBrandListView?.hidden()
|
weakSelf.carPriceListView?.hidden()
|
weakSelf.distanceView?.hidden()
|
weakSelf.moreBtn.isSelected = true
|
|
weakSelf.carMoreListView = CarMoreListView.show(weakSelf, offsetTop: 85,selectIndex: weakSelf.carMoreListSelectIndex,selectClouse: {fromType, startCarYear, endCarYear, startMileage, endMileage, startDisplacement, endDisplacement, transmissionCase in
|
weakSelf.viewModel.type.accept(fromType)
|
weakSelf.viewModel.startLicensingTime.accept(startCarYear?.string)
|
weakSelf.viewModel.endLicensingTime.accept(endCarYear?.string)
|
weakSelf.viewModel.startMileage.accept(startMileage)
|
weakSelf.viewModel.endMileage.accept(endMileage)
|
weakSelf.viewModel.startDisplacement.accept(startDisplacement)
|
weakSelf.viewModel.endDisplacement.accept(endDisplacement)
|
weakSelf.viewModel.transmissionCase.accept(transmissionCase)
|
weakSelf.carMoreListView = nil
|
weakSelf.tableView.mj_header?.beginRefreshing()
|
},hiddenClouse: {
|
weakSelf.moreBtn.isSelected = false
|
weakSelf.carMoreListView = nil
|
}, selectIndexClouse: { selectIndex in
|
weakSelf.carMoreListSelectIndex = selectIndex
|
})
|
|
case .distance:
|
|
weakSelf.carBrandListView?.hidden()
|
weakSelf.carPriceListView?.hidden()
|
weakSelf.carMoreListView?.hidden()
|
weakSelf.distanceBtn.isSelected = true
|
|
weakSelf.distanceView = DistanceView.show(weakSelf, offsetTop: 85, selectIndex:weakSelf.distanceSelectIndex)
|
weakSelf.distanceView?.completeClouse = {code,name,index in
|
if code == -1{
|
weakSelf.distanceBtn.setTitle("地区", for: .normal)
|
weakSelf.viewModel.cityCode.accept(nil)
|
}else{
|
weakSelf.distanceBtn.setTitle(name, for: .normal)
|
weakSelf.viewModel.cityCode.accept("\(code)")
|
}
|
weakSelf.distanceSelectIndex = index
|
weakSelf.tableView.mj_header?.beginRefreshing()
|
}
|
weakSelf.distanceView?.cancelClouse = {
|
weakSelf.moreBtn.isSelected = false
|
weakSelf.carMoreListView = nil
|
}
|
case .inital:
|
weakSelf.carBrandListView?.hidden()
|
weakSelf.carPriceListView?.hidden()
|
weakSelf.carMoreListView?.hidden()
|
weakSelf.distanceView?.hidden()
|
}
|
}).disposed(by: rx.disposeBag)
|
|
searchTextField.rx.text.orEmpty.subscribe(onNext: {[weak self] text in
|
self?.viewModel.searchname.accept(text)
|
}).disposed(by: disposeBag)
|
|
|
APIManager.shared.provider.rx.request(.queryAllBrand).map(YYModel<[BrandModel]>.self).validate().subscribe(onSuccess: {[weak self] state in
|
self?.brandModels = state.data ?? []
|
var m = BrandModel()
|
m.name = "全部"
|
self?.brandModels.insert(m, at: 0)
|
}) { error in
|
|
}.disposed(by: disposeBag)
|
}
|
|
@IBAction func brandAction(_ sender: UIButton) {
|
sender.isEnabled = false
|
perform(#selector(btnDone), with: nil, afterDelay: 0.5)
|
if selectType.value == .brand{selectType.accept(.inital);return}
|
selectType.accept(.brand)
|
|
}
|
|
@IBAction func priceAction(_ sender: UIButton) {
|
sender.isEnabled = false
|
perform(#selector(btnDone), with: nil, afterDelay: 0.5)
|
if selectType.value == .price{selectType.accept(.inital);return}
|
selectType.accept(.price)
|
}
|
|
@IBAction func moreAction(_ sender: UIButton) {
|
sender.isEnabled = false
|
perform(#selector(btnDone), with: nil, afterDelay: 0.5)
|
if selectType.value == .more{selectType.accept(.inital);return}
|
selectType.accept(.more)
|
}
|
|
@IBAction func distanceAction(_ sender: UIButton) {
|
sender.isEnabled = false
|
perform(#selector(btnDone), with: nil, afterDelay: 0.5)
|
if selectType.value == .distance{selectType.accept(.inital);return}
|
selectType.accept(.distance)
|
}
|
|
@objc private func btnDone(){
|
brandBtn.isEnabled = true
|
priceBtn.isEnabled = true
|
moreBtn.isEnabled = true
|
distanceBtn.isEnabled = true
|
}
|
}
|
|
extension CarSaleListVC:UITableViewDelegate{
|
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
|
let m = viewModel.dataSource.value[indexPath.row]
|
let detailVC = CarDetailVC(type: .sell)
|
detailVC.id = m.id
|
self.yy_push(vc: detailVC)
|
}
|
|
}
|
|
extension CarSaleListVC:UITableViewDataSource{
|
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
|
let m = viewModel.dataSource.value[indexPath.row]
|
let cell = tableView.dequeueReusableCell(withIdentifier: "_HireCarTCell") as! HireCarTCell
|
cell.backgroundColor = .clear
|
cell.setCarSellModel(m)
|
cell.saleStateL.isHidden = true
|
cell.topTypeL.backgroundColor = UIColor(hexString: "#00BF30")?.withAlphaComponent(0.79)
|
return cell
|
}
|
|
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
|
if isSearch && searchTextField.text!.isEmpty{
|
return 0
|
}
|
return viewModel.dataSource.value.count
|
}
|
}
|
|
extension CarSaleListVC:UITextFieldDelegate{
|
|
func textFieldShouldBeginEditing(_ textField: UITextField) -> Bool {
|
if !isSearch{
|
let vc = CarSaleListVC(isSearch: true)
|
yy_push(vc: vc)
|
return false
|
}
|
|
return true
|
}
|
|
func textFieldDidBeginEditing(_ textField: UITextField) {
|
UIView.animate(withDuration: 0.3) {
|
self.searchBtn.alpha = 0
|
}
|
}
|
|
func textFieldDidEndEditing(_ textField: UITextField) {
|
if textField.text!.isEmpty{
|
UIView.animate(withDuration: 0.3) {
|
self.searchBtn.alpha = 1
|
}
|
}
|
}
|
|
func textFieldShouldReturn(_ textField: UITextField) -> Bool {
|
textField.resignFirstResponder()
|
tableView.mj_header?.beginRefreshing()
|
return true
|
}
|
}
|