//
|
// CarContractVC.swift
|
// OKProject
|
//
|
// Created by 无故事王国 on 2022/5/11.
|
// Copyright © 2022 yangwang. All rights reserved.
|
//
|
|
import UIKit
|
import QMUIKit
|
import RxCocoa
|
|
fileprivate enum CarContractType {
|
case brand
|
case type
|
case more
|
case distance
|
case inital
|
}
|
|
class CarContractVC: YYViewController {
|
|
@IBOutlet weak var searchBtn: QMUIButton!
|
@IBOutlet weak var searchTextField: UITextField!
|
@IBOutlet weak var tableView: BaseTableView!
|
@IBOutlet weak var brandBtn: QMUIButton!
|
@IBOutlet weak var carTypeBtn: 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<CarContractType>(value: .inital)
|
private var carBrandListView:CarBrandListView?
|
private var carTypeListView:CarBrandListView?
|
private var carMoreListView:CarMoreListView?
|
//73814 【司机车辆承包】页面上缺少 地区搜索
|
private var distanceView:DistanceView?
|
private var brandModels = [BrandModel]()
|
private var selectIndex:Array<[Int]>?
|
private var distanceSelectIndex:Int = 0
|
|
let viewModel = CarRentViewModel()
|
|
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)
|
tableView.emptyType = .empty(image: nil, title: "暂无数据")
|
|
if isSearch{
|
navigationItem.title = "搜索"
|
}else{
|
navigationItem.title = "司机车辆承包"
|
}
|
tableView.beginRefreshing()
|
}
|
|
override func setupViews() {
|
super.setupViews()
|
view.backgroundColor = UIColor(hexString: "#F3F4F5")
|
|
brandBtn.isHidden = isSearch
|
carTypeBtn.isHidden = isSearch
|
moreBtn.isHidden = isSearch
|
stackView.isHidden = isSearch
|
stackViewHeiCons.constant = isSearch ? 0:40
|
|
searchBtn.spacingBetweenImageAndTitle = 7
|
brandBtn.spacingBetweenImageAndTitle = 4
|
carTypeBtn.spacingBetweenImageAndTitle = 4
|
moreBtn.spacingBetweenImageAndTitle = 4
|
distanceBtn.spacingBetweenImageAndTitle = 4
|
|
brandBtn.imagePosition = .right
|
carTypeBtn.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: "SaleCarTCell", bundle: nil), forCellReuseIdentifier: "_SaleCarTCell")
|
|
brandBtn.setTitleColor(UIColor(hexString: "#00BF30"), for: .selected)
|
carTypeBtn.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.carTypeBtn.isSelected = false
|
weakSelf.moreBtn.isSelected = false
|
|
switch type {
|
case .brand:
|
weakSelf.carTypeListView?.hidden()
|
weakSelf.carMoreListView?.hidden()
|
weakSelf.distanceView?.hidden()
|
weakSelf.brandBtn.isSelected = true
|
var names = weakSelf.brandModels.map({$0.name})
|
names.insert("不限", at: 0)
|
|
CarBrandListView.show(weakSelf, offsetTop: 85, items: names) { index in
|
if index == 0{
|
weakSelf.viewModel.brandId.accept(nil)
|
weakSelf.brandBtn.setTitle("车辆品牌", for: .normal)
|
}else{
|
let brandM = weakSelf.brandModels[index - 1]
|
weakSelf.viewModel.brandId.accept(brandM.id)
|
weakSelf.brandBtn.setTitle(brandM.name, for: .normal)
|
}
|
weakSelf.brandBtn.isSelected = false
|
weakSelf.carBrandListView = nil
|
weakSelf.tableView.beginRefreshing()
|
} hiddenClouse: {
|
weakSelf.brandBtn.isSelected = false
|
weakSelf.carBrandListView = nil
|
}
|
case .type:
|
weakSelf.carMoreListView?.hidden()
|
weakSelf.carBrandListView?.hidden()
|
weakSelf.distanceView?.hidden()
|
weakSelf.carTypeBtn.isSelected = true
|
|
weakSelf.carTypeListView = CarBrandListView.show(weakSelf, offsetTop: 85, items: ["不限","企业车辆","个人车辆"],selectClouse:{ index in
|
|
if index == 1{
|
weakSelf.carTypeBtn.setTitle("企业车辆", for: .normal)
|
weakSelf.viewModel.type.accept(2)
|
}else if index == 2{
|
weakSelf.carTypeBtn.setTitle("个人车辆", for: .normal)
|
weakSelf.viewModel.type.accept(1)
|
}else{
|
weakSelf.carTypeBtn.setTitle("车辆类型", for: .normal)
|
weakSelf.viewModel.type.accept(nil)
|
}
|
weakSelf.tableView.beginRefreshing()
|
},hiddenClouse: {
|
weakSelf.carTypeBtn.isSelected = false
|
weakSelf.carTypeListView = nil
|
})
|
case .more:
|
weakSelf.carBrandListView?.hidden()
|
weakSelf.carTypeListView?.hidden()
|
weakSelf.distanceView?.hidden()
|
weakSelf.moreBtn.isSelected = true
|
|
weakSelf.carMoreListView = CarMoreListView.showRent(weakSelf, offsetTop: 85, type: 1, selectIndex: weakSelf.selectIndex) { minPrice, maxPrice, takCar in
|
weakSelf.viewModel.startRentMoney.accept(minPrice)
|
weakSelf.viewModel.endRentMoney.accept(maxPrice)
|
weakSelf.viewModel.pickUpCarCarCertificates.accept(takCar)
|
weakSelf.tableView.beginRefreshing()
|
} hiddenClouse: {
|
weakSelf.moreBtn.isSelected = false
|
weakSelf.carMoreListView = nil
|
} selectIndexClouse: { selectIndex in
|
weakSelf.selectIndex = selectIndex
|
}
|
case .distance:
|
weakSelf.carBrandListView?.hidden()
|
weakSelf.carTypeListView?.hidden()
|
weakSelf.carMoreListView?.hidden()
|
|
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()
|
}
|
|
case .inital:
|
weakSelf.carBrandListView?.hidden()
|
weakSelf.carTypeListView?.hidden()
|
weakSelf.carMoreListView?.hidden()
|
weakSelf.distanceView?.hidden()
|
break
|
|
}
|
}).disposed(by: rx.disposeBag)
|
|
APIManager.shared.provider.rx.request(.queryAllBrand).map(YYModel<[BrandModel]>.self).validate().subscribe(onSuccess: {[weak self] state in
|
self?.brandModels = state.data ?? []
|
}) { error in
|
|
}.disposed(by: disposeBag)
|
}
|
|
@IBAction func brandAction(_ sender: UIButton) {
|
if selectType.value == .brand{selectType.accept(.inital);return}
|
selectType.accept(.brand)
|
}
|
|
@IBAction func typeAction(_ sender: UIButton) {
|
if selectType.value == .type{selectType.accept(.inital);return}
|
selectType.accept(.type)
|
}
|
|
@IBAction func moreAction(_ sender: UIButton) {
|
if selectType.value == .more{selectType.accept(.inital);return}
|
selectType.accept(.more)
|
}
|
|
@IBAction func distanceAction(_ sender: UIButton) {
|
if selectType.value == .distance{selectType.accept(.inital);return}
|
selectType.accept(.distance)
|
}
|
}
|
|
extension CarContractVC:UITableViewDelegate{
|
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
|
let m = viewModel.dataSource.value[indexPath.row]
|
let detailVC = CarDetailVC(type: .rent)
|
detailVC.id = m.id
|
self.yy_push(vc: detailVC)
|
}
|
}
|
|
extension CarContractVC:UITableViewDataSource{
|
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
|
let m = viewModel.dataSource.value[indexPath.row]
|
let cell = tableView.dequeueReusableCell(withIdentifier: "_SaleCarTCell") as! SaleCarTCell
|
cell.backgroundColor = .clear
|
cell.setRentalModel(m)
|
cell.saleStateL.isHidden = true
|
return cell
|
}
|
|
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
|
return viewModel.dataSource.value.count
|
}
|
|
func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
|
return 110
|
}
|
}
|
|
extension CarContractVC:UITextFieldDelegate{
|
|
func textFieldShouldBeginEditing(_ textField: UITextField) -> Bool {
|
if !isSearch{
|
let vc = CarContractVC(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()
|
viewModel.searchname.accept(textField.text)
|
tableView.beginRefreshing()
|
return true
|
}
|
}
|