//
|
// TravelServiceVC.swift
|
// OKProject
|
//
|
// Created by alvin_y on 2020/6/6.
|
// Copyright © 2020 yangwang. All rights reserved.
|
//
|
|
import UIKit
|
import RxCocoa
|
import RxSwift
|
import SwiftDate
|
import AMapSearchKit
|
import HCSStarRatingView
|
|
/// 出行服务
|
class TravelServiceVC: YYViewController {
|
|
/// 投诉司机
|
@IBOutlet weak var complan_driverBt: UIButton!
|
/// 若您已付款,请忽略!
|
@IBOutlet weak var bottom_prompt: UILabel!
|
/// 跨城
|
@IBOutlet weak var travel_view: UIView!
|
@IBOutlet weak var travelInfo_lb: UILabel!
|
|
@IBOutlet weak var button_costDetail: UIButton!
|
|
/// 我已付款
|
@IBOutlet weak var button_paymented: UIButton!
|
|
/// 分享按钮
|
@IBOutlet weak var button_share: YYButton!
|
|
/// 取消支付
|
@IBOutlet weak var button_cancelPay: YYButton!
|
|
/// 开始位置处是否已取消提示
|
@IBOutlet weak var label_startAddressCancel: UILabel!
|
|
/// 开始地址顶部线条
|
@IBOutlet weak var view_line2: UIView!
|
|
/// 结束地址顶部线条
|
@IBOutlet weak var view_line1: UIView!
|
|
/// 无司机接单
|
@IBOutlet weak var view_noDriver: UIView!
|
|
/// 评价高度约束
|
@IBOutlet weak var evaluationConstraint: NSLayoutConstraint!
|
|
/// 评价右边约束
|
@IBOutlet weak var evaluationRightContraint: NSLayoutConstraint!
|
|
/// 评价左边约束
|
@IBOutlet weak var evaluationLeftContraint: NSLayoutConstraint!
|
|
/// 请支付
|
@IBOutlet weak var label_pleasePay: UILabel!
|
|
/// 评价按钮
|
@IBOutlet weak var button_evaluation: YYButton!
|
|
/// 标签
|
@IBOutlet weak var tagsView: HXTagsView!
|
|
/// 评分
|
@IBOutlet weak var starView: HCSStarRatingView!
|
|
/// 匿名评价司机
|
@IBOutlet weak var label_evaluation: UILabel!
|
|
/// 支付按钮
|
@IBOutlet weak var button_pay: YYButton!
|
|
/// 支付小费
|
@IBOutlet weak var label_tips: UILabel!
|
|
/// 支付金额
|
@IBOutlet weak var label_payMoney: UILabel!
|
|
/// 完成界面
|
@IBOutlet weak var view_complete: UIView!
|
|
///搜索类
|
private let search = AMapSearchAPI()
|
|
/// 取消的View
|
@IBOutlet weak var view_cancel: UIView!
|
|
/// 取消金额
|
@IBOutlet weak var label_cancelMoney: UILabel!
|
|
/// 行程信息
|
@IBOutlet weak var view_tripInfo: YYView!
|
|
/// 行程信息
|
@IBOutlet weak var label_tripInfo: UILabel!
|
|
/// 地图
|
@IBOutlet weak var mapView: MAMapView!
|
|
/// 取消订单
|
@IBOutlet weak var button_cancelOrder: UIButton!
|
|
/// 司机信息
|
@IBOutlet weak var view_driverInfo: UIView!
|
|
/// 拨打手机
|
@IBOutlet weak var button_phone: UIButton!
|
|
/// 结束位置
|
@IBOutlet weak var label_endAddress: UILabel!
|
|
/// 开始位置
|
@IBOutlet weak var label_startAddress: UILabel!
|
|
/// 乘车日期
|
@IBOutlet weak var label_date: UILabel!
|
|
/// 订单数量
|
@IBOutlet weak var label_orderNum: UILabel!
|
|
/// 评分
|
@IBOutlet weak var label_score: UILabel!
|
|
/// 品牌
|
@IBOutlet weak var label_brand: UILabel!
|
|
/// 车牌
|
@IBOutlet weak var label_licensePlate: UILabel!
|
|
/// 名字
|
@IBOutlet weak var label_name: UILabel!
|
|
/// 取消描述
|
@IBOutlet weak var label_cancelDesc: UILabel!
|
|
@IBOutlet weak var adTableView: UITableView!
|
@IBOutlet weak var adTableViewHeiCons: NSLayoutConstraint!
|
|
@IBOutlet weak var view_container: UIView!
|
|
@IBOutlet weak var view_topInfo: UIView!
|
|
let homeViewModel = HomeViewModel()
|
|
/// 接单后
|
private let edgeInsetsTop = navH + 213
|
|
/// 报警等信息
|
lazy var view_safeInfo: TripInfoView = {
|
let view = TripInfoView.instance()
|
view.view_notice.isHidden = true
|
view.image_inform.isHidden = true
|
return view
|
}()
|
|
/// 一键叫滴
|
@IBOutlet weak var akeyView: UIView!
|
|
/// 无人接单提示
|
weak var popupView: YYPopupView?
|
|
/// 头像
|
@IBOutlet weak var image_avatar: YYImageView!
|
|
/// 用户点数据
|
private var pointArray: [PointAnnotation] = []
|
|
/// 司机点数据
|
private var driverPointArray: [PointAnnotation] = []
|
|
/// 用户位置
|
private var userLocationView: LocationAnnotationView?
|
|
/// 开始位置
|
private var originInfoView: UserAnnotationView?
|
|
/// viewModel
|
let viewModel = TravelServiceViewModel()
|
|
/// phoneViewModel
|
let phoneViewModel = TravelViewModel()
|
|
/// 等待车辆时定时器
|
var waitTimeDisposeBag = DisposeBag()
|
|
/// 路线数据
|
private var pathPolylines: [MAOverlay] = []
|
|
/// 评价数组
|
private var evaluationArray: [String] = []
|
|
/// 数据源
|
private var dataSource: TravelServiceModel?
|
|
var adItems = [AdvertisingModel]()
|
|
var intervalDisposeBag = DisposeBag()
|
|
/// Self
|
/// - Parameter orderId: 订单Id
|
init(orderId: Int,orderType: OrderType) {
|
super.init(nibName: String.init(describing: TravelServiceVC.self), bundle: Bundle.main)
|
viewModel.orderId.accept(orderId)
|
viewModel.orderType.accept(orderType)
|
// viewModel.payway.accept(payway)
|
|
}
|
|
required init?(coder: NSCoder) {
|
fatalError("init(coder:) has not been implemented")
|
}
|
|
//MARK: - 请求数据
|
func request() {
|
viewModel.queryOrderInfo()
|
}
|
|
override func viewDidLoad() {
|
super.viewDidLoad()
|
travel_view.isHidden = true
|
|
// Do any additional setup after loading the view.
|
|
self.request()
|
viewModel.queryOrderServer()
|
phoneViewModel.queryPhones()
|
yy_popBlock = { [unowned self] in
|
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()
|
}
|
}
|
|
|
override func viewWillAppear(_ animated: Bool) {
|
super.viewWillAppear(animated)
|
intervalDisposeBag = DisposeBag()
|
// 定时获取订单信息
|
Observable<Int>.interval(RxTimeInterval.seconds(6), scheduler: MainScheduler.instance)
|
.subscribe(onNext: { [unowned self](_) in
|
if !YYSocketManager.shared().isRunning(){
|
self.viewModel.queryOrderServer()
|
self.viewModel.queryEndPush()
|
}
|
}).disposed(by: intervalDisposeBag)
|
}
|
|
override func viewWillDisappear(_ animated: Bool) {
|
super.viewWillDisappear(animated)
|
intervalDisposeBag = DisposeBag()
|
}
|
|
deinit {
|
loggerswift.log(s: "deinitTravelServiceVC")
|
}
|
|
//MARK: - UI
|
override func setupViews() {
|
super.setupViews()
|
navigationItem.title = "等待应答"
|
|
let attributed = AttributedStringbuilder.build()
|
.add(string: "查看收费明细", withFont: UIFont.systemFont(ofSize: 12, weight: .medium), withColor: #colorLiteral(red: 0.2, green: 0.2, blue: 0.2, alpha: 1))
|
.underLine()
|
.mutableAttributedString
|
button_costDetail.setAttributedTitle(attributed, for: .normal)
|
|
mapView.showsUserLocation = true // YES 为打开定位,NO为关闭定位
|
mapView.isRotateEnabled = false
|
mapView.isRotateCameraEnabled = false
|
mapView.showsCompass = false
|
mapView.showsScale = false
|
mapView.delegate = self
|
mapView.zoomLevel = 17
|
mapView.mapType = .standard
|
search?.delegate = self
|
view.addSubview(view_safeInfo)
|
self.view.bringSubviewToFront(button_share)
|
image_avatar.isUserInteractionEnabled = true
|
image_avatar.addGestureRecognizer(UITapGestureRecognizer.init(target: self, action: #selector(driverInfo)))
|
starView.addTarget(self, action: #selector(starRatingChanged), for: .valueChanged)
|
tagsView.layout.scrollDirection = .vertical
|
tagsView.backgroundColor = UIColor.clear
|
tagsView.tagAttribute.selectedBackgroundColor = UIColor.white
|
tagsView.tagAttribute.borderColor = UIColor.color(hexString: "#CCCCCC")
|
tagsView.tagAttribute.selectedBorderColor = UIColor.clear
|
tagsView.tagAttribute.selectedTextColor = UIColor.white
|
tagsView.tagAttribute.textColor = UIColor.color(hexString: "#27282D",0.6)
|
tagsView.tagAttribute.titleSize = 10
|
tagsView.tagAttribute.tagSpace = 12
|
tagsView.tagAttribute.cornerRadius = 2
|
let size = CGSize(width: 50, height: 27)
|
tagsView.layout.itemSize = size
|
tagsView.isMultiSelect = true
|
tagsView.layout.sectionInset = UIEdgeInsets.init(top: 6, left: 14, bottom: 6, right: 14)
|
tagsView.completion = { [unowned self] (selectTags, index) in
|
self.evaluationArray = selectTags as? [String] ?? []
|
}
|
|
|
adTableView.delegate = self
|
adTableView.dataSource = self
|
adTableView.separatorStyle = .none
|
adTableView.register(cellName: "AdvertCell", identifier: "item")
|
adTableViewHeiCons.constant = 0
|
adTableView.isHidden = true
|
|
complan_driverBt.rx.tap.subscribe(onNext: {[unowned self] (_) in
|
self.complaintsActtion()
|
}).disposed(by: disposeBag)
|
}
|
|
//MARK: - Rx
|
override func bindRx() {
|
super.bindRx()
|
|
NotificationCenter.default
|
.rx.notification(Notification.Name(rawValue: YYRefreshInfo), object: nil)
|
.subscribe(onNext: {[unowned self] (_) in
|
self.request()
|
}).disposed(by: disposeBag)
|
|
|
viewModel.shareRedEnvelopeSubject
|
.subscribeOn(MainScheduler.instance)
|
.subscribe(onNext: { (status) in
|
switch status{
|
case .loading:
|
break
|
case .success(_):
|
alert(popup: .single, title: "提示", text: "您收到一个\(String(format: "%.2f", self.viewModel.shareRedEnvelopeAmount.value))元的打车红包,已经放入钱包,下次打车可抵扣金额", submitTitle: "确定", cancelTitle: nil, submitClick: {
|
}) {}
|
break
|
case .error(_):
|
break
|
}
|
}).disposed(by: disposeBag)
|
|
|
viewModel.completeOrderSubject
|
.subscribeOn(MainScheduler.instance)
|
.subscribe(onNext: { [unowned self](status) in
|
switch status{
|
case .loading:
|
self.show()
|
break
|
case .success(_ ):
|
self.hide()
|
self.request()
|
break
|
case .error(let error):
|
self.hide()
|
alert(text: error.localizedDescription)
|
break
|
}
|
}).disposed(by: disposeBag)
|
|
|
button_paymented.rx.tap
|
.subscribe(onNext: {[unowned self] (_) in
|
alert(popup: .double, title: "提示", text: "是否确认已线下支付费用?", submitTitle: "确认", cancelTitle: "否", submitClick: { [unowned self] in
|
self.viewModel.completeOrder()
|
}) {}
|
})
|
.disposed(by: disposeBag)
|
|
button_costDetail.rx.tap
|
.subscribe(onNext: {[unowned self] (_) in
|
let vc = YYCostDetailViewController.init(orderId: self.viewModel.orderId.value, orderType: self.viewModel.orderType.value)
|
self.yy_push(vc: vc)
|
})
|
.disposed(by: disposeBag)
|
|
/// 获取没有司机接单的提醒数据
|
viewModel.queryEndPushSubject
|
.subscribeOn(MainScheduler.instance)
|
.subscribe(onNext: { [unowned self](status) in
|
switch status{
|
case .loading:
|
break
|
case .success(let model):
|
guard let data = model as? SocketInfoModel else{return}
|
if self.viewModel.orderId.value == data.orderId{
|
if data.state == 2{
|
|
if self.popupView == nil{
|
// 需要弹框
|
self.popupView = YYPopupView.instance(type: .double)
|
self.popupView?.label_title.text = "通知"
|
self.popupView?.label_content.text = "附近暂无司机接单,您是否继续等待?"
|
self.popupView?.button_cancel.setTitle("取消订单", for: .normal)
|
self.popupView?.button_submit.setTitle("继续等待", for: .normal)
|
self.popupView?.button_close.isHidden = false
|
self.popupView?.pressSubmitBlock = {
|
self.viewModel.pushOrderTaxi()
|
}
|
self.popupView?.pressCancelBlock = {
|
self.viewModel.queryCancleAmount()
|
}
|
app.window?.addSubview(self.popupView!)
|
self.popupView?.show()
|
}
|
}
|
}
|
break
|
case .error(let error):
|
alert(text: error.localizedDescription)
|
break
|
}
|
}).disposed(by: disposeBag)
|
|
/// 取消需要支付金额
|
self.viewModel.amount.map{value in
|
return "¥\(value)"
|
}.bind(to: label_cancelMoney.rx.text).disposed(by: disposeBag)
|
|
/// 更新司机位置
|
viewModel.driverInfo.subscribe(onNext: {[unowned self] (r) in
|
guard let data = r else {return}
|
if data.state < 7{
|
guard let model = self.dataSource else{return}
|
if model.driverId == 0{
|
self.request()
|
}
|
if data.state == 4{
|
if self.viewModel.data.value?.arriveTime == ""{
|
self.request()
|
}
|
}
|
model.state = data.state
|
self.viewModel.state.accept(data.state)
|
self.updateState()
|
}else{
|
self.request()
|
}
|
self.updateDriverLocation(data: data)
|
}) { error in
|
|
}.disposed(by: disposeBag)
|
|
|
/// 更新司机位置
|
YYSocketManager.shared().position
|
.subscribe(onNext: {[unowned self] (r) in
|
guard let data = r.data else{return}
|
if data.orderId == self.viewModel.orderId.value && data.orderType == self.viewModel.orderType.value.rawValue{
|
self.updateDriverLocation(data: data)
|
}
|
}).disposed(by: rx.disposeBag)
|
|
|
// 获取订单信息
|
YYSocketManager.shared()
|
.orderInfosubject
|
.subscribe(onNext: {[unowned self] (r) in
|
guard let data = r.data else{return}
|
// 改派
|
if r.method == "REASSIGN"{
|
self.getDataInfo()
|
return
|
}
|
|
|
if data.orderId == self.viewModel.orderId.value && data.orderType == self.viewModel.orderType.value.rawValue{
|
guard let model = self.dataSource else{return}
|
if data.state < 7{
|
if data.state == 4{
|
if self.viewModel.data.value?.arriveTime == ""{
|
self.request()
|
}
|
}
|
if model.driverId == 0{
|
self.request()
|
}
|
model.state = data.state
|
self.viewModel.state.accept(data.state)
|
self.updateState()
|
self.viewModel.queryOrderServer()
|
}else{
|
self.request()
|
self.viewModel.queryOrderServer()
|
}
|
}
|
}).disposed(by: disposeBag)
|
|
/// 复位等操作
|
view_safeInfo.complete.delegate(on: self) { (self, row) in
|
if row == 1{ // 复位
|
guard let startLat = self.viewModel.data.value?.startLat,let startLon = self.viewModel.data.value?.startLon else{return}
|
self.mapView.setCenter(CLLocationCoordinate2D.init(latitude: startLat, longitude: startLon), animated: true)
|
}else if row == 2{ // 客服
|
call(number: self.phoneViewModel.policeNumber.value)
|
}else{ // 报警
|
call(number: self.phoneViewModel.complaintsNumber.value)
|
}
|
}
|
|
/// 评价按钮
|
button_evaluation.rx.tap.subscribe(onNext: {[unowned self] (_) in
|
if self.evaluationArray.count != 0{
|
let content = (self.evaluationArray as NSArray).componentsJoined(by: ",")
|
self.viewModel.content.accept(content)
|
}
|
self.viewModel.fraction.accept(Int(self.starView.value))
|
self.viewModel.orderEvaluate()
|
}).disposed(by: disposeBag)
|
|
/// 立即支付
|
button_pay.rx.tap.subscribe(onNext: {[unowned self] (_) in
|
let vc = TravelServicePayVC.init(orderId: self.viewModel.orderId.value, money: self.label_payMoney.text?.substring(from: 1).wy_toDouble() ?? 0, orderType: self.viewModel.orderType.value,payway: self.dataSource?.payWay ?? 1)
|
let nav = YYNavigationController.init(rootViewController: vc)
|
self.yy_presentFullScreen(vc: nav)
|
vc.refresh.delegate(on: self) { (self, _) in
|
self.request()
|
}
|
|
vc.jumpBlock.delegate(on: self) { (self, _) in
|
let vc = MineCouponsVC()
|
vc.selectIndex = 1
|
self.yy_push(vc: vc)
|
}
|
}).disposed(by: disposeBag)
|
|
/// 取消待支付
|
button_cancelPay.rx.tap.subscribe(onNext: {[unowned self] (_) in
|
self.cancelPay()
|
}).disposed(by: disposeBag)
|
|
/// 拨打电话
|
button_phone.rx.tap.subscribe(onNext: {[unowned self] (_) in
|
guard let phone = self.viewModel.data.value?.driverPhone else {return}
|
call(number: phone)
|
}).disposed(by: disposeBag)
|
|
/// 分享
|
button_share.rx.tap.subscribe(onNext: { (_) in
|
// 弹出分享框
|
ShareView.share(controller: self, title: "分享行程", content: "你的好友(\(app.userInfo.phone))正在使用宽窄优行出租车(\(self.dataSource?.licensePlate ?? ""))。", url: "\(share_url)/orderShare/index.html?orderId=\(self.viewModel.orderId.value)&orderType=\(self.viewModel.orderType.value.rawValue)",hiddenMessage: false).show(success: {
|
|
})
|
}).disposed(by: disposeBag)
|
|
self.getDataInfo()
|
|
// 取消订单
|
button_cancelOrder.rx.tap.subscribe(onNext: {[unowned self] (_) in
|
alert(popup: .double, title: "提示", text: "您确定要取消该订单吗?", submitTitle: "确定取消", cancelTitle: "不取消", submitClick: { [weak self] in
|
guard let self = self else{return}
|
if self.viewModel.state.value == 1{ // 司机未接单 直接取消
|
self.viewModel.queryCancleAmount()
|
}else{ // 司机已接单 判断需不需要付费
|
let vc = storyBoard(name: "Home", identifier: "TravelServiceCancelVC") as! TravelServiceCancelVC
|
vc.orderId = self.viewModel.orderId.value
|
vc.didPressPay.delegate(on: self) { (self,arge) in
|
let (money,cancleId) = arge
|
self.navigationItem.rightBarButtonItem?.customView?.isHidden = true
|
self.request()
|
self.viewModel.amount.accept(money)
|
self.viewModel.cancelId.accept(cancleId)
|
}
|
self.yy_push(vc: vc)
|
}
|
}) {}
|
}).disposed(by: disposeBag)
|
|
// 评价订单
|
viewModel.evaluateSubject
|
.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)
|
self.request()
|
// 查询是否有红包
|
self.viewModel.queryRedMoney()
|
break
|
case .error(let error):
|
self.hide()
|
alert(text: error.localizedDescription)
|
break
|
}
|
}).disposed(by: disposeBag)
|
|
// 查询是否有红包
|
viewModel.queryRedMoneySubject
|
.subscribeOn(MainScheduler.instance)
|
.subscribe(onNext: { [unowned self](status) in
|
switch status{
|
case .loading:
|
self.show()
|
break
|
case .success(let model):
|
self.hide()
|
if let data = model as? CancleAmountModel{
|
if data.amount != 0{
|
self.viewModel.shareRedEnvelopeAmount.accept(data.amount)
|
alert(popup: .double, title: "提示", text: "分享APP给好友可以获得\(data.amount)元打车红包", submitTitle: "去分享", cancelTitle: "不分享", submitClick: { [unowned self] in
|
// 弹出分享框
|
ShareView.share(controller: self, title: nil, content: "新版“宽窄优行”隆重上线,下载注册即送打车券。", url: "\(share_url)/share/shareIndex.html?uid=\(app.userInfo.id)&type=1").show(success: {
|
self.viewModel.shareRedEnvelope()
|
})
|
}) {}
|
}
|
}
|
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: "取消成功")
|
self.yy_pop()
|
NotificationCenter.default.post(name: NSNotification.Name.init(YYOrderListRefresh), object: nil)
|
}else{
|
self.viewModel.cancleOrderTaxi()
|
}
|
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: "取消成功")
|
self.yy_pop()
|
NotificationCenter.default.post(name: NSNotification.Name.init(YYOrderListRefresh), object: nil)
|
break
|
case .error(let error):
|
self.hide()
|
alert(text: error.localizedDescription)
|
break
|
}
|
}).disposed(by: disposeBag)
|
|
|
|
/// 查询取消金额
|
viewModel.queryCancleAmountSubject
|
.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{
|
self.viewModel.addCancle()
|
}else{
|
let vc = storyBoard(name: "Home", identifier: "TravelServiceCancelVC") as! TravelServiceCancelVC
|
vc.orderId = self.viewModel.orderId.value
|
vc.didPressPay.delegate(on: self) { (self,arge) in
|
let (money,cancleId) = arge
|
self.navigationItem.rightBarButtonItem?.customView?.isHidden = true
|
self.request()
|
self.viewModel.amount.accept(money)
|
self.viewModel.cancelId.accept(cancleId)
|
}
|
self.yy_push(vc: vc)
|
}
|
break
|
case .error(let error):
|
self.hide()
|
alert(text: error.localizedDescription)
|
break
|
}
|
}).disposed(by: disposeBag)
|
}
|
|
func getAdvertising() {
|
homeViewModel.advertType.accept(3)
|
homeViewModel.getAdvertising()
|
homeViewModel.requestSubject.subscribe(onNext: {status in
|
switch status {
|
case .success(let model):
|
if let m = model as? [AdvertisingModel]{
|
|
if m.count > 0{
|
self.adTableViewHeiCons.constant = Double(m.count) * 120.0
|
self.adTableView.isHidden = false
|
self.adItems = m
|
self.adTableView.reloadData()
|
}
|
}
|
break
|
case .loading:break
|
case .error(_):break
|
}
|
}).disposed(by: disposeBag)
|
}
|
|
func getDataInfo(){
|
/// 更新行程信息
|
viewModel.data
|
.subscribeOn(MainScheduler.instance)
|
.subscribe(onNext: {[unowned self] (r) in
|
guard let model = r else {return}
|
self.dataSource = model
|
|
self.label_date.text = model.travelTime
|
self.label_startAddress.text = model.startAddress
|
self.label_endAddress.text = model.endAddress
|
if model.endAddress == ""{
|
self.label_endAddress.text = "--"
|
}
|
self.image_avatar.load(url: model.driverAvatar)
|
self.label_name.text = model.driverName
|
self.label_licensePlate.text = model.licensePlate
|
self.label_brand.text = "\(model.brand) \(model.carColor)"
|
self.label_score.text = "\(model.score.remain1Digits())"
|
self.label_orderNum.text = "\(model.orderNum)单"
|
if model.state == 9 || model.state == 8{
|
|
self.label_payMoney.text = "¥\(max(0, model.payMoney).remain2Digits())"
|
// self.label_payMoney.isHidden = model.payMoney == 0
|
}else{
|
self.label_payMoney.text = "¥\(max(0, model.orderMoney).remain2Digits())"
|
// self.label_payMoney.isHidden = model.orderMoney == 0
|
}
|
self.label_tips.attributedText = AttributedStringbuilder.build()
|
.add(string: "其中含小费:", withFont: UIFont.init(name: Medium, size: 12)!, withColor: UIColor.color(hexString: "#000000"))
|
.add(string: "\(model.tipMoney)", withFont: UIFont.init(name: Medium, size: 12)!, withColor: ThemeColor).mutableAttributedString
|
self.label_tips.isHidden = model.tipMoney == 0
|
self.starView.value = model.orderScore.remain1Digits().wy_toFloat()
|
if model.state == 9{
|
let selectedArray = model.evaluate.components(separatedBy: ",")
|
if model.evaluate != ""{
|
self.tagsView.clearSelectedTags()
|
let array = self.getEvaluatContent(value: Int(model.orderScore))
|
self.tagsView.tags = array
|
self.tagsView.reloadData()
|
self.tagsView.reloadSelectedTags(selectedArray)
|
let height = HXTagsView.getEqualSpaceFlowLayoutHeight(withTags: array, layout: self.tagsView.layout, tagAttribute: self.tagsView.tagAttribute, width: screenW - (self.evaluationLeftContraint.constant + self.evaluationRightContraint.constant))
|
self.evaluationConstraint.constant = height
|
}else{
|
self.tagsView.isHidden = true
|
}
|
}
|
self.updateState()
|
}).disposed(by: disposeBag)
|
}
|
//MARK: - 行程状态操作
|
/// 更新状态
|
/// - Parameter state: 状态
|
/// - Returns:
|
func updateState() {
|
self.bottom_prompt.isHidden = true
|
guard let model = self.dataSource else{return}
|
complan_driverBt.isHidden = true
|
button_share.isHidden = !(model.state == 5)
|
//订单状态(1=待接单,2=待出发,3=待到达预约地点,4=待乘客上车,5=服务中,6=完成服务,7=待支付,8=待评价,9=已完成,10=已取消,11=改派中,12取消待支付)
|
if model.endLat == 0.0 || model.endLon == 0.0{
|
self.akeyView.isHidden = false
|
}
|
|
|
if model.auditStatus == .reject{
|
self.navigationItem.title = "审核被拒"
|
self.view_container.backgroundColor = UIColor(hexString: "#F3F4F5")
|
self.mapView.isHidden = true
|
self.button_cancelOrder.isHidden = false
|
self.createAuditView(title: "审核被拒绝\n", subTitle: model.auditRemark)
|
return
|
}
|
|
if model.auditStatus == .review{
|
self.navigationItem.title = "等待审核"
|
self.view_container.backgroundColor = UIColor(hexString: "#F3F4F5")
|
self.mapView.isHidden = true
|
self.button_cancelOrder.isHidden = false
|
self.createAuditView(title: "部门审核中\n", subTitle: "超出30分钟未审核完成请联系部门负责人")
|
return
|
}
|
|
switch model.state{
|
case 1:
|
self.navigationItem.title = "等待应答"
|
self.button_cancelOrder.isHidden = false
|
/// 加入起点 判断这个点是否已经加入过了
|
if self.originInfoView != nil{
|
self.mapView.showAnnotations(pointArray, edgePadding: UIEdgeInsets(top: navH + 125, left: 10, bottom: 100, right: 10), animated: false)
|
}else{
|
removeAnnotations()
|
let startPointAnnotation = PointAnnotation()
|
startPointAnnotation.coordinate = CLLocationCoordinate2DMake(model.startLat, model.startLon)
|
startPointAnnotation.title = nil
|
startPointAnnotation.type = 1
|
pointArray.append(startPointAnnotation)
|
self.mapView.addAnnotations(pointArray)
|
self.mapView.showAnnotations(pointArray, edgePadding: UIEdgeInsets(top: navH + 125, left: 10, bottom: 100, right: 10), animated: false)
|
view_safeInfo.snp.remakeConstraints { (make) in
|
make.left.right.equalToSuperview()
|
make.height.equalTo(138)
|
make.bottom.equalTo(self.button_cancelOrder.snp.top).offset(-12)
|
}
|
// 计算时间
|
self.waitTime()
|
}
|
break
|
case 2...3:
|
self.navigationItem.title = "等待接驾"
|
// 清除定时器
|
self.waitTimeDisposeBag = DisposeBag()
|
removeAnnotations()
|
self.navigationItem.rightBarButtonItem = UIBarButtonItem.yy_creat(title: "取消订单", target: self, action: #selector(rightActtion)).item
|
self.button_cancelOrder.isHidden = true
|
self.view_driverInfo.isHidden = false
|
self.view_tripInfo.isHidden = false
|
view_safeInfo.snp.remakeConstraints { (make) in
|
make.left.right.equalToSuperview()
|
make.height.equalTo(138)
|
make.bottom.equalTo(self.view_tripInfo.snp.top).offset(-12)
|
}
|
/// 加入起点
|
let startPointAnnotation = PointAnnotation()
|
startPointAnnotation.coordinate = CLLocationCoordinate2DMake(model.startLat, model.startLon)
|
startPointAnnotation.title = model.startAddress
|
startPointAnnotation.type = 5
|
pointArray.append(startPointAnnotation)
|
self.mapView.addAnnotations(pointArray + driverPointArray)
|
self.mapView.showAnnotations(pointArray + driverPointArray, edgePadding: UIEdgeInsets(top: self.edgeInsetsTop, left: 10, bottom: 100, right: 10), animated: false)
|
break
|
case 4:
|
self.navigationItem.title = "司机已到达"
|
removeAnnotations()
|
removeOverlays()
|
self.button_cancelOrder.isHidden = true
|
self.view_driverInfo.isHidden = false
|
self.view_tripInfo.isHidden = false
|
self.navigationItem.rightBarButtonItem = UIBarButtonItem.yy_creat(title: "取消订单", target: self, action: #selector(rightActtion)).item
|
view_safeInfo.snp.remakeConstraints { (make) in
|
make.left.right.equalToSuperview()
|
make.height.equalTo(138)
|
make.bottom.equalTo(self.view_tripInfo.snp.top).offset(-12)
|
}
|
/// 加入起点
|
let startPointAnnotation = PointAnnotation()
|
startPointAnnotation.coordinate = CLLocationCoordinate2DMake(model.startLat, model.startLon)
|
startPointAnnotation.title = model.startAddress
|
startPointAnnotation.type = 5
|
pointArray.append(startPointAnnotation)
|
self.mapView.addAnnotations(pointArray + driverPointArray)
|
self.mapView.showAnnotations(pointArray + driverPointArray, edgePadding: UIEdgeInsets(top: self.edgeInsetsTop, left: 10, bottom: 100, right: 10), animated: false)
|
// 计算时间
|
self.waitTime()
|
break
|
case 5...6:
|
// 清除定时器
|
|
self.waitTimeDisposeBag = DisposeBag()
|
removeAnnotations()
|
self.navigationItem.title = "服务中"
|
|
self.button_cancelOrder.isHidden = true
|
self.view_driverInfo.isHidden = false
|
self.view_tripInfo.isHidden = false
|
view_safeInfo.snp.remakeConstraints { (make) in
|
make.left.right.equalToSuperview()
|
make.height.equalTo(138)
|
make.bottom.equalTo(self.view_tripInfo.snp.top).offset(-12)
|
}
|
/// 加入起点
|
let startPointAnnotation = PointAnnotation()
|
startPointAnnotation.coordinate = CLLocationCoordinate2DMake(model.startLat, model.startLon)
|
startPointAnnotation.title = nil
|
startPointAnnotation.type = 3
|
pointArray.append(startPointAnnotation)
|
|
/// 加入终点
|
let destinationAnnotation = PointAnnotation()
|
destinationAnnotation.coordinate = CLLocationCoordinate2DMake(model.endLat, model.endLon)
|
destinationAnnotation.title = nil
|
destinationAnnotation.type = 4
|
pointArray.append(destinationAnnotation)
|
self.mapView.addAnnotations(pointArray)
|
self.mapView.showAnnotations(pointArray, edgePadding: UIEdgeInsets(top: self.edgeInsetsTop, left: 10, bottom: 100, right: 10), animated: true)
|
if model.state == 5 {
|
complan_driverBt.isHidden = false
|
self.navigationItem.rightBarButtonItem = nil
|
// self.navigationItem.rightBarButtonItem = UIBarButtonItem.yy_creat(title: "取消订单", target: self, action: #selector(rightActtion)).item
|
}else{
|
self.navigationItem.rightBarButtonItem = UIBarButtonItem.yy_creat(title: "投诉司机", target: self, action: #selector(complaintsActtion)).item
|
}
|
|
break
|
case 7:
|
self.navigationItem.title = "支付费用"
|
self.button_costDetail.isHidden = true
|
self.button_cancelOrder.isHidden = true
|
self.view_driverInfo.isHidden = false
|
self.view_tripInfo.isHidden = true
|
self.view_safeInfo.isHidden = true
|
self.navigationItem.rightBarButtonItem?.customView?.isHidden = true
|
self.view_complete.isHidden = false
|
// self.button_paymented.isHidden = self.viewModel.data.value?.device == 1
|
self.button_paymented.isHidden = true
|
self.bottom_prompt.isHidden = false
|
self.navigationItem.rightBarButtonItem = UIBarButtonItem.yy_creat(title: "投诉司机", target: self, action: #selector(complaintsActtion)).item
|
break
|
case 8:
|
self.navigationItem.title = "行程结束"
|
self.button_costDetail.isHidden = false
|
self.button_cancelOrder.isHidden = true
|
self.view_driverInfo.isHidden = false
|
self.view_tripInfo.isHidden = true
|
self.view_safeInfo.isHidden = true
|
self.view_complete.isHidden = false
|
self.navigationItem.rightBarButtonItem = UIBarButtonItem.yy_creat(title: "投诉司机", target: self, action: #selector(complaintsActtion)).item
|
self.label_evaluation.isHidden = false
|
self.starView.isHidden = false
|
self.button_pay.isHidden = true
|
self.label_pleasePay.text = nil
|
self.button_paymented.isHidden = true
|
self.getAdvertising()
|
break
|
case 9:
|
self.navigationItem.title = "行程结束"
|
self.button_costDetail.isHidden = false
|
self.button_cancelOrder.isHidden = true
|
self.view_driverInfo.isHidden = false
|
self.view_tripInfo.isHidden = true
|
self.view_safeInfo.isHidden = true
|
self.view_complete.isHidden = false
|
self.navigationItem.rightBarButtonItem = UIBarButtonItem.yy_creat(title: "投诉司机", target: self, action: #selector(complaintsActtion)).item
|
self.label_evaluation.isHidden = false
|
self.label_evaluation.text = "评价详情"
|
self.starView.isHidden = false
|
self.starView.isUserInteractionEnabled = false
|
self.tagsView.isHidden = false
|
self.tagsView.isUserInteractionEnabled = false
|
self.button_evaluation.isHidden = true
|
self.button_pay.isHidden = true
|
self.label_pleasePay.text = nil
|
self.button_paymented.isHidden = true
|
break
|
case 10:
|
self.navigationItem.title = (self.viewModel.data.value?.driverId == 0) ? "订单详情" : "已取消"
|
self.view_safeInfo.isHidden = true
|
self.button_cancelPay.isHidden = true
|
self.view_cancel.isHidden = false
|
self.view_driverInfo.isHidden = self.viewModel.data.value?.driverId == 0
|
self.label_cancelMoney.text = "¥\(self.viewModel.data.value?.cancelPayMoney ?? 0)"
|
self.label_cancelMoney.isHidden = (self.viewModel.data.value?.cancelPayMoney ?? 0) == 0
|
self.label_cancelDesc.isHidden = (self.viewModel.data.value?.cancelPayMoney ?? 0) == 0
|
self.view_noDriver.isHidden = !(self.viewModel.data.value?.driverId == 0)
|
self.view_line1.isHidden = (self.viewModel.data.value?.driverId == 0)
|
self.view_line2.isHidden = (self.viewModel.data.value?.driverId == 0)
|
self.label_startAddressCancel.isHidden = !(self.viewModel.data.value?.driverId == 0)
|
self.button_paymented.isHidden = true
|
break
|
case 11: //不用处理
|
self.navigationItem.title = "改派中"
|
self.button_paymented.isHidden = true
|
break
|
case 12: //取消待支付
|
self.navigationItem.title = "支付费用"
|
self.view_tripInfo.isHidden = true
|
self.view_safeInfo.isHidden = true
|
self.view_driverInfo.isHidden = self.viewModel.data.value?.driverId == 0
|
guard let data = self.viewModel.data.value else{return}
|
self.viewModel.amount.accept(data.cancelPayMoney)
|
self.viewModel.cancelId.accept(data.cancelId)
|
self.view_cancel.isHidden = false
|
self.button_paymented.isHidden = true
|
break
|
default:
|
break
|
}
|
if model.endLat == 0.0 || model.endLon == 0.0{
|
self.view_tripInfo.isHidden = true
|
}
|
}
|
|
|
/// 寻找车辆等待时间
|
func waitTime() {
|
waitTimeDisposeBag = DisposeBag()
|
Observable<Int>.interval(RxTimeInterval.seconds(1), scheduler: MainScheduler.instance)
|
.subscribe(onNext: {[unowned self] (_) in
|
if self.viewModel.state.value == 1{
|
let insertTime = self.viewModel.data.value?.insertTime.toDate(fromFormat: "yyyy-MM-dd HH:mm:ss")
|
guard let date = insertTime else{return}
|
let text = calculateWaitTime(time: date.timeIntervalSince1970)
|
self.originInfoView?.title = "正为您寻找车辆 等待\(text)"
|
}else if self.viewModel.state.value == 4{
|
let arriveTime = self.viewModel.data.value?.arriveTime.toDate(fromFormat: "yyyy-MM-dd HH:mm:ss")
|
guard let date = arriveTime else{return}
|
let text = calculateWaitTime(time: date.timeIntervalSince1970)
|
self.label_tripInfo.textAlignment = .center
|
self.label_tripInfo.attributedText = AttributedStringbuilder.build().add(string: "司机到达预约地点,已等您", withFont: UIFont.init(name: Medium, size: 14)!, withColor: UIColor.color(hexString: "#333333"))
|
.add(string: text, withFont: UIFont.init(name: Medium, size: 14)!, withColor: ThemeColor)
|
.mutableAttributedString
|
}
|
}).disposed(by: waitTimeDisposeBag)
|
}
|
|
/// 清除点标记
|
func removeAnnotations() {
|
if pointArray.count > 0{
|
self.mapView.removeAnnotations(pointArray)
|
pointArray.removeAll()
|
}
|
}
|
|
func createAuditView(title:String,subTitle:String){
|
let attributeStringbuilder = AttributedStringbuilder()
|
attributeStringbuilder.add(string: title, withFont: UIFont.systemFont(ofSize: 16,weight: .medium), withColor: UIColor(hexString: "#50638A")!, lineSpace: 5)
|
attributeStringbuilder.add(string: subTitle, withFont: UIFont.systemFont(ofSize: 12), withColor: UIColor(hexString: "#50638A")!, lineSpace: 5)
|
|
let auditL = UILabel()
|
auditL.attributedText = attributeStringbuilder.mutableAttributedString
|
auditL.numberOfLines = 0
|
auditL.textAlignment = .center
|
view_container.addSubview(auditL)
|
auditL.snp.makeConstraints { make in
|
make.top.equalTo(view_topInfo.snp.bottom).offset(73)
|
make.centerX.equalToSuperview()
|
}
|
}
|
|
/// 清除点标记
|
func removeDriverAnnotations() {
|
if driverPointArray.count > 0{
|
self.mapView.removeAnnotations(driverPointArray)
|
driverPointArray.removeAll()
|
}
|
}
|
|
/// 清除路线
|
func removeOverlays() {
|
if pathPolylines.count > 0{
|
mapView.removeOverlays(pathPolylines)
|
pathPolylines.removeAll()
|
}
|
}
|
|
//MARK: - Acttion
|
/// 司机信息
|
@objc func driverInfo(){
|
guard let driverId = self.viewModel.data.value?.driverId else{return}
|
let vc = DriverInfoVC(driverId: driverId)
|
self.yy_push(vc: vc)
|
}
|
|
@objc func rightActtion()
|
{
|
let vc = storyBoard(name: "Home", identifier: "TravelServiceCancelVC") as! TravelServiceCancelVC
|
vc.orderType = self.viewModel.orderType.value
|
vc.orderId = self.viewModel.orderId.value
|
vc.didPressPay.delegate(on: self) { (self,arge) in
|
let (money,cancleId) = arge
|
self.navigationItem.rightBarButtonItem?.customView?.isHidden = true
|
self.request()
|
self.viewModel.amount.accept(money)
|
self.viewModel.cancelId.accept(cancleId)
|
}
|
self.yy_push(vc: vc)
|
}
|
|
|
/// 投诉司机
|
@objc func complaintsActtion(){
|
guard let driverId = self.viewModel.data.value?.driverId else{return}
|
let vc = storyBoard(name: "Home", identifier: "TravelServiceCancelVC") as! TravelServiceCancelVC
|
vc.orderId = self.viewModel.orderId.value
|
vc.driverId = driverId
|
vc.state.accept(.complaints)
|
self.yy_push(vc: vc)
|
}
|
|
/// 评分
|
@objc func starRatingChanged() {
|
if starView.value < 5{
|
self.evaluationLeftContraint.constant = 10
|
self.evaluationRightContraint.constant = 10
|
}else{
|
self.evaluationLeftContraint.constant = 50
|
self.evaluationRightContraint.constant = 50
|
}
|
tagsView.clearSelectedTags()
|
tagsView.isHidden = false
|
button_evaluation.isHidden = false
|
let array = getEvaluatContent(value: Int(starView.value))
|
tagsView.tags = array
|
tagsView.reloadData()
|
let height = HXTagsView.getEqualSpaceFlowLayoutHeight(withTags: array, layout: tagsView.layout, tagAttribute: tagsView.tagAttribute, width: screenW - (self.evaluationLeftContraint.constant + self.evaluationRightContraint.constant))
|
self.evaluationConstraint.constant = height
|
}
|
|
|
/// 获取评价内容
|
/// - Parameter value: 评分
|
/// - Returns: 内容
|
func getEvaluatContent(value: Int) -> [String] {
|
if value < 5{
|
return ["道路不熟","服务态度恶劣","车辆肮脏","车内有异味","车牌号不符","司机吸烟","打电话玩手机","未坐好就开车","未提醒系安全带","未提醒开门注意","过路口不减速","索要好评"]
|
}else{
|
return ["车内整洁","活地图认路准","驾驶平稳","态度好服务棒"]
|
}
|
}
|
|
|
/// 更新司机位置
|
/// - Parameter data: 数据
|
func updateDriverLocation(data: SocketInfoModel) {
|
if self.viewModel.state.value == 2 || self.viewModel.state.value == 3{
|
self.label_tripInfo.attributedText = self.viewModel.attributedString(state: self.viewModel.state.value, data: data)
|
self.removeDriverAnnotations()
|
/// 加入司机位置
|
let driverPointAnnotation = PointAnnotation()
|
driverPointAnnotation.coordinate = CLLocationCoordinate2DMake(data.lat, data.lon)
|
driverPointAnnotation.title = nil
|
driverPointAnnotation.type = 2
|
self.driverPointArray.append(driverPointAnnotation)
|
self.mapView.addAnnotations(self.pointArray + self.driverPointArray)
|
self.mapView.showAnnotations(self.pointArray + self.driverPointArray, edgePadding: UIEdgeInsets(top: self.edgeInsetsTop, left: 10, bottom: 100, right: 10), animated: false)
|
if self.viewModel.state.value == 3{
|
// 路径规划
|
guard let startLat = self.viewModel.data.value?.startLat,let startLon = self.viewModel.data.value?.startLon else{return}
|
let startCoordinate = CLLocationCoordinate2DMake(data.lat, data.lon)
|
let destinationCoordinate = CLLocationCoordinate2DMake(startLat, startLon)
|
self.search?.aMapDrivingRouteSearch(self.viewModel.routeSearchRequest(startCoordinate: startCoordinate, destinationCoordinate: destinationCoordinate))
|
}
|
}else if self.viewModel.state.value == 4{
|
self.removeDriverAnnotations()
|
/// 加入司机位置
|
let driverPointAnnotation = PointAnnotation()
|
driverPointAnnotation.coordinate = CLLocationCoordinate2DMake(data.lat, data.lon)
|
driverPointAnnotation.title = nil
|
driverPointAnnotation.type = 2
|
self.driverPointArray.append(driverPointAnnotation)
|
self.mapView.addAnnotations(self.pointArray + self.driverPointArray)
|
self.mapView.showAnnotations(self.pointArray + self.driverPointArray, edgePadding: UIEdgeInsets(top: self.edgeInsetsTop, left: 10, bottom: 100, right: 10), animated: false)
|
}else if self.viewModel.state.value == 5 || self.viewModel.state.value == 6{
|
self.removeDriverAnnotations()
|
self.label_tripInfo.textAlignment = .center
|
self.label_tripInfo.attributedText = self.viewModel.attributedString(state: self.viewModel.state.value, data: data)
|
|
/// 加入司机位置
|
let driverPointAnnotation = PointAnnotation()
|
driverPointAnnotation.coordinate = CLLocationCoordinate2DMake(data.lat, data.lon)
|
driverPointAnnotation.title = nil
|
driverPointAnnotation.type = 2
|
self.driverPointArray.append(driverPointAnnotation)
|
self.mapView.addAnnotations(self.pointArray + self.driverPointArray)
|
// 路线规划
|
guard let endLat = self.viewModel.data.value?.endLat,let endLon = self.viewModel.data.value?.endLon else{return}
|
let endPointAnnotation = PointAnnotation()
|
endPointAnnotation.coordinate = CLLocationCoordinate2DMake(endLat, endLon)
|
endPointAnnotation.title = nil
|
endPointAnnotation.type = 2
|
self.mapView.showAnnotations(self.driverPointArray + [endPointAnnotation], edgePadding: UIEdgeInsets(top: self.edgeInsetsTop, left: 10, bottom: 100, right: 10), animated: true)
|
|
let startCoordinate = CLLocationCoordinate2DMake(data.lat, data.lon)
|
let destinationCoordinate = CLLocationCoordinate2DMake(endLat, endLon)
|
self.search?.aMapDrivingRouteSearch(self.viewModel.routeSearchRequest(startCoordinate: startCoordinate, destinationCoordinate: destinationCoordinate))
|
}
|
}
|
|
/// 取消订单支付
|
func cancelPay() {
|
self.navigationItem.title = "支付费用"
|
self.navigationItem.rightBarButtonItem?.customView?.isHidden = true
|
self.view_cancel.isHidden = false
|
self.view_safeInfo.isHidden = true
|
let cancelServicePayView = TravelCancelServicePayView.instance(money: self.viewModel.amount.value, orderId: self.viewModel.orderId.value, cancelId: self.viewModel.cancelId.value, orderType: self.viewModel.orderType.value.rawValue)
|
cancelServicePayView.show()
|
cancelServicePayView.didPressClose.delegate(on: self) { (self, _) in
|
}
|
cancelServicePayView.refresh.delegate(on: self) { (self, _) in
|
NotificationCenter.default.post(name: NSNotification.Name.init(YYOrderListRefresh), object: nil)
|
self.request()
|
}
|
}
|
}
|
|
//MARK: - MAMapViewDelegate
|
extension TravelServiceVC: MAMapViewDelegate
|
{
|
func mapView(_ mapView: MAMapView!, regionDidChangeAnimated animated: Bool) {
|
|
}
|
|
func mapView(_ mapView: MAMapView!, mapDidMoveByUser wasUserAction: Bool) {
|
|
}
|
|
func mapView(_ mapView: MAMapView!, viewFor annotation: MAAnnotation!) -> MAAnnotationView! {
|
if annotation.isKind(of: MAUserLocation.classForCoder()){
|
let userLocationStyleReuseIndetifier = "userLocationStyleReuseIndetifier"
|
|
var annotationView:MAAnnotationView! = mapView.dequeueReusableAnnotationView(withIdentifier: userLocationStyleReuseIndetifier)
|
|
if annotationView == nil {
|
annotationView = LocationAnnotationView(annotation: annotation, reuseIdentifier: userLocationStyleReuseIndetifier)
|
annotationView.canShowCallout = true
|
}
|
|
userLocationView = annotationView as? LocationAnnotationView
|
userLocationView?.updateImage(image: UIImage(named: "start"))
|
|
return annotationView
|
}else if annotation.isKind(of: PointAnnotation.classForCoder()) {
|
let annotation = annotation as! PointAnnotation
|
var imageName: String = ""
|
if annotation.pointType == .bubbles{
|
let identifier = "startAnnotation"
|
var annotationView = mapView.dequeueReusableAnnotationView(withIdentifier: identifier) as? StartAnnotationView
|
if annotationView == nil{
|
annotationView = StartAnnotationView(annotation: annotation, reuseIdentifier: identifier)
|
}
|
if annotation.title != nil{
|
annotationView?.title = annotation.title
|
}
|
return annotationView
|
}else{
|
let identifier = "annotation"
|
var annotationView = mapView.dequeueReusableAnnotationView(withIdentifier: identifier) as? UserAnnotationView
|
if annotationView == nil{
|
annotationView = UserAnnotationView(annotation: annotation, reuseIdentifier: identifier)
|
}
|
switch annotation.type {
|
// 开始位置
|
case 1:
|
imageName = "icon_location"
|
annotationView?.yy_tintColor = UIColor.color(hexString: "#E30B0B")
|
annotationView?.yy_isTintColor = true
|
annotationView?.yy_font = UIFont.init(name: Medium, size: 14)!
|
self.originInfoView = annotationView
|
case 2:// 车辆位置
|
imageName = "car"
|
case 3:// 起点位置
|
imageName = "starting_point"
|
case 4:// 终点位置
|
imageName = "end_point"
|
case 5: // 修改起点位置
|
imageName = "starting_point"
|
annotationView?.yy_font = UIFont.init(name: Medium, size: 14)!
|
case 6://司机位置
|
imageName = "bus_location"
|
default:
|
return nil
|
}
|
let image = UIImage(named: imageName)
|
annotationView?.image = image
|
if annotation.title != nil{
|
annotationView?.title = annotation.title
|
}
|
return annotationView
|
}
|
|
|
}
|
return nil
|
}
|
|
func mapView(_ mapView: MAMapView!, rendererFor overlay: MAOverlay!) -> MAOverlayRenderer! {
|
let renderer: MAPolylineRenderer = MAPolylineRenderer(overlay: overlay)
|
renderer.lineWidth = 6.0
|
renderer.strokeColor = UIColor.color(hexString: "#00C47A")
|
return renderer
|
}
|
|
func mapView(_ mapView: MAMapView!, didUpdate userLocation: MAUserLocation!, updatingLocation: Bool) {
|
if !updatingLocation && userLocation != nil {
|
self.userLocationView?.rotateDegree = CGFloat(userLocation.heading.trueHeading) - mapView.rotationDegree
|
}
|
}
|
}
|
// MARK: - AMapSearchDelegate
|
extension TravelServiceVC:AMapSearchDelegate{
|
func onRouteSearchDone(_ request: AMapRouteSearchBaseRequest!, response: AMapRouteSearchResponse!) {
|
if response.count > 0 {
|
//解析response获取路径信息
|
let path = response.route.paths[0].coverToPilyline()
|
guard let polylines = path else {
|
return
|
}
|
removeOverlays()
|
pathPolylines.append(polylines)
|
mapView.addOverlays(pathPolylines)
|
}
|
}
|
func aMapSearchRequest(_ request: Any!, didFailWithError error: Error!) {
|
print("Error:\(String(describing: error))")
|
}
|
}
|
|
extension TravelServiceVC: UITableViewDataSource {
|
|
func numberOfSections(in tableView: UITableView) -> Int {
|
return 1
|
}
|
|
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
|
return adItems.count
|
}
|
|
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
|
let cell = tableView.dequeueReusableCell(withIdentifier: "item", for: indexPath) as! AdvertCell
|
cell.selectionStyle = .none
|
cell.image_cover.load(url: adItems[indexPath.row].imgUrl)
|
return cell
|
}
|
}
|
|
extension TravelServiceVC: UITableViewDelegate {
|
|
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
|
|
// if indexPath.row == 0{return}
|
let data = adItems[indexPath.row]
|
// guard indexPath.row > 0,data.isJump == 1 else {return}
|
if data.isJump == 1{
|
switch data.jumpType {
|
case 1:// 外部
|
openURL(url: data.jumpUrl)
|
break
|
case 2:// 内部
|
let vc = YYWebView()
|
vc.name = data.name
|
vc.url = data.content
|
UIViewController.base()?.navigationController?.pushViewController(vc)
|
break
|
default:
|
break
|
}
|
}
|
}
|
|
func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
|
return 120
|
}
|
}
|