//
|
// TravelServiceCancelVC.swift
|
// OKProject
|
//
|
// Created by alvin_y on 2020/6/9.
|
// Copyright © 2020 yangwang. All rights reserved.
|
//
|
|
import UIKit
|
import IQKeyboardManager
|
import RxCocoa
|
import RxSwift
|
|
|
class TravelServiceCancelModel {
|
var name = ""
|
var select = false
|
}
|
|
|
enum TravelServiceCancelType {
|
|
/// 取消
|
case cancel
|
|
/// 投诉
|
case complaints
|
|
}
|
|
class TravelServiceCancelVC: YYViewController {
|
|
/// 类型
|
let state = BehaviorRelay<TravelServiceCancelType>(value: .cancel)
|
|
/// 标题
|
@IBOutlet weak var label_title: UILabel!
|
|
/// 反馈内容
|
@IBOutlet weak var textView: IQTextView!
|
|
/// 列表
|
@IBOutlet weak var tableView: UITableView!
|
|
/// viewModel
|
let viewModel = TravelServiceViewModel()
|
|
|
/// 协议
|
let agreement = AgreementViewModel()
|
|
/// 订单Id
|
var orderId = 0
|
|
/// 司机Id
|
var driverId = 0
|
|
/// 订单类型
|
var orderType = OrderType.taxi
|
|
/// 数据源
|
private var dataSoucre = [TravelServiceCancelModel]()
|
|
/// 内容
|
let content = BehaviorRelay<String?>(value: nil)
|
|
/// 描述
|
let desc = BehaviorRelay<String?>(value: nil)
|
|
/// 取消订单支付
|
let didPressPay = Delegate<(Double,Int),Void>()
|
|
|
|
override func viewDidLoad() {
|
super.viewDidLoad()
|
|
// Do any additional setup after loading the view.
|
viewModel.orderId.accept(orderId)
|
viewModel.driverId.accept(driverId)
|
viewModel.orderType.accept(orderType)
|
agreement.type.accept(.cancel)
|
}
|
//MARK: - UI
|
override func setupViews() {
|
super.setupViews()
|
|
switch state.value {
|
case .cancel:
|
self.navigationItem.title = "取消订单"
|
self.navigationItem.rightBarButtonItem = UIBarButtonItem.yy_creat(title: "取消订单说明", UIFont.systemFont(ofSize: 14), UIColor.color(hexString: "#666666"), target: self, action: #selector(cancelInstructions)).item
|
self.label_title.text = "您为什么取消行程?"
|
let array = ["行程有变,暂时不需要用车","赶时间,换用其他交通工具","平台派单太远","司机以各种理由不来接我","联系不上司机","司机要求加价或现金交易","司机迟到","其他"]
|
for item in array {
|
let model = TravelServiceCancelModel()
|
model.name = item
|
dataSoucre.append(model)
|
}
|
break
|
case .complaints:
|
self.navigationItem.title = "投诉"
|
self.label_title.text = "您为什么要投诉司机?"
|
let array = ["司机态度不好","车主拒绝来接","无故取消订单","额外收取费用","车主迟到","未送达目的地","车辆信息不符","其他"]
|
for item in array {
|
let model = TravelServiceCancelModel()
|
model.name = item
|
dataSoucre.append(model)
|
}
|
break
|
}
|
if state.value == .cancel{
|
|
}
|
|
|
tableView.separatorColor = #colorLiteral(red: 0, green: 0, blue: 0, alpha: 0.1)
|
tableView.dataSource = self
|
tableView.delegate = self
|
tableView.register(cellName: "TravelServiceCancelCell", identifier: "item")
|
}
|
|
//MARK: - Rx
|
override func bindRx() {
|
super.bindRx()
|
|
textView.rx.text.bind(to: self.desc).disposed(by: disposeBag)
|
|
agreement.requestSubject
|
.subscribe(onNext: { (status) in
|
switch status{
|
case .loading:
|
self.show()
|
break
|
case .success(let model):
|
self.hide()
|
guard let data: SwitchCityModel = model as? SwitchCityModel else {return}
|
let vc = YYWebView()
|
vc.name = self.agreement.type.value.title()
|
vc.url = data.content
|
self.yy_push(vc: vc)
|
break
|
case .error(let error):
|
self.hide()
|
alert(text: error.localizedDescription)
|
break
|
}
|
}).disposed(by: rx.disposeBag)
|
|
// 取消订单获取金额
|
viewModel.queryCancleAmountSubject
|
.subscribeOn(MainScheduler.instance)
|
.subscribe(onNext: { [unowned self](status) in
|
switch status{
|
case .loading:
|
self.show()
|
break
|
case .success(let model):
|
self.hide()
|
if let model = model as? CancleAmountModel{
|
if self.viewModel.amount.value == 0{ // 直接取消
|
self.viewModel.addCancle()
|
}else{
|
alert(popup: .double, title: "提示", text: "司机接单以后取消订单将收取您\(model.amount)元服务费", submitTitle: "确定取消", cancelTitle: "不取消", submitClick: {[unowned self] in
|
self.viewModel.addCancle()
|
}) {}
|
}
|
}
|
break
|
case .error(let error):
|
self.hide()
|
alert(text: error.localizedDescription)
|
break
|
}
|
}).disposed(by: disposeBag)
|
|
// 添加取消记录
|
viewModel.addCancleSubject
|
.subscribeOn(MainScheduler.instance)
|
.subscribe(onNext: { [unowned self](status) in
|
switch status{
|
case .loading:
|
self.show()
|
break
|
case .success(_ ):
|
self.hide()
|
// 判断是否需要付费
|
if self.viewModel.amount.value == 0{
|
alert(text: "取消成功")
|
NotificationCenter.default.post(name: NSNotification.Name.init(YYOrderListRefresh), object: nil)
|
// for item in (self.navigationController?.viewControllers)! {
|
// if item.isKind(of: YYSpecialCarViewController.classForCoder()){
|
// let owr = item
|
// self.navigationController?.popToViewController(owr, animated: true)
|
// return
|
// }
|
// }
|
for item in (self.navigationController?.viewControllers)! {
|
if item.isKind(of: MyOrderListVC.classForCoder()){
|
let owr = item
|
self.navigationController?.popToViewController(owr, animated: true)
|
return
|
}
|
}
|
self.yy_popToRoot()
|
}else{
|
self.yy_pop()
|
self.didPressPay.call((self.viewModel.amount.value,self.viewModel.cancelId.value))
|
}
|
break
|
case .error(let error):
|
self.hide()
|
alert(text: error.localizedDescription)
|
break
|
}
|
}).disposed(by: disposeBag)
|
|
/// 取消订单
|
viewModel.cancleOrderTaxiSubject
|
.subscribeOn(MainScheduler.instance)
|
.subscribe(onNext: { [unowned self](status) in
|
switch status{
|
case .loading:
|
self.show()
|
break
|
case .success(_ ):
|
self.hide()
|
alert(text: "取消成功")
|
NotificationCenter.default.post(name: NSNotification.Name.init(YYOrderListRefresh), object: nil)
|
// for item in (self.navigationController?.viewControllers)! {
|
// if item.isKind(of: YYSpecialCarViewController.classForCoder()){
|
// let owr = item
|
// self.navigationController?.popToViewController(owr, animated: true)
|
// return
|
// }
|
// }
|
for item in (self.navigationController?.viewControllers)! {
|
if item.isKind(of: MyOrderListVC.classForCoder()){
|
let owr = item
|
self.navigationController?.popToViewController(owr, animated: true)
|
return
|
}
|
}
|
self.yy_popToRoot()
|
break
|
case .error(let error):
|
self.hide()
|
alert(text: error.localizedDescription)
|
break
|
}
|
}).disposed(by: disposeBag)
|
|
viewModel.complaintSubject
|
.subscribeOn(MainScheduler.instance)
|
.subscribe(onNext: { [unowned self](status) in
|
switch status{
|
case .loading:
|
self.show()
|
break
|
case .success(_ ):
|
self.hide()
|
alert(popup: .single, title: "提示", text: "我们已收到您的投诉,我们会尽快安排处理,感谢您的投诉与建议!", submitTitle: "确定", cancelTitle: nil, submitClick: {
|
self.yy_pop()
|
}) {}
|
break
|
case .error(let error):
|
self.hide()
|
alert(text: error.localizedDescription)
|
break
|
}
|
}).disposed(by: disposeBag)
|
}
|
|
/// 提交
|
///
|
/// - Parameter sender: 按钮
|
@IBAction func submit(_ sender: UIButton) {
|
|
let select = dataSoucre.filter { (model) -> Bool in
|
return model.select
|
}
|
if select.count == 0{
|
switch state.value {
|
case .cancel:
|
alert(text: "请选择取消原因")
|
break
|
default:
|
alert(text: "请选择投诉司机原因")
|
break
|
}
|
return
|
}
|
if select.first?.name == "其他" && textView.text == ""{
|
alert(text: "请输入详细描述")
|
return
|
}
|
|
var text = "您确定要投诉该司机吗?"
|
var cancelTitle = "不取消"
|
var doneTitle = "确定取消"
|
switch state.value {
|
case .cancel:
|
text = "您确定要取消该订单吗?"
|
cancelTitle = "不取消"
|
doneTitle = "确定取消"
|
break
|
default:
|
text = "您确定要该投诉该司机吗?"
|
cancelTitle = "取消"
|
doneTitle = "投诉"
|
break
|
}
|
|
YYAlertViewController.display(title: "提示", text: text, cancelTitle: cancelTitle, doneTitle: doneTitle) { [unowned self] in
|
|
if state.value == .cancel{
|
self.content.accept(select.first?.name)
|
self.viewModel.reason.accept(select.first?.name)
|
self.viewModel.remark.accept(textView.text)
|
// if viewModel.orderType.value == .travel {
|
// viewModel.addCancle()
|
// }
|
// 判断需不需要付费 付费要弹窗
|
viewModel.queryCancleAmount()
|
}else if state.value == .complaints{
|
viewModel.reason.accept(select.first?.name)
|
viewModel.remark.accept(textView.text)
|
viewModel.complaintService()
|
}
|
|
}
|
|
}
|
|
/// 取消订单说明
|
@objc func cancelInstructions()
|
{
|
agreement.agreement()
|
}
|
}
|
// MARK: - UITableViewDelegate
|
extension TravelServiceCancelVC:UITableViewDelegate{
|
func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
|
return 48
|
}
|
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
|
tableView.deselectRow(at: indexPath, animated: true)
|
dataSoucre = dataSoucre.map({ (model) -> TravelServiceCancelModel in
|
let model = model
|
model.select = false
|
return model
|
})
|
dataSoucre[indexPath.row].select = true
|
self.tableView.reloadData()
|
}
|
}
|
|
// MARK: - UITableViewDelegate
|
extension TravelServiceCancelVC:UITableViewDataSource{
|
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
|
return dataSoucre.count
|
}
|
|
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
|
let cell = tableView.dequeueReusableCell(withIdentifier: "item", for: indexPath) as! TravelServiceCancelCell
|
cell.configure(model: dataSoucre[indexPath.row])
|
return cell
|
}
|
|
}
|