//
|
// ScanVC.swift
|
// OKProject
|
//
|
// Created by alvin_y on 2020/6/15.
|
// Copyright © 2020 yangwang. All rights reserved.
|
//
|
|
import UIKit
|
import RxCocoa
|
import RxSwift
|
|
/// 扫码
|
class ScanVC: YYViewController {
|
/// 跨城扫码
|
var type:TravelOrderType?
|
let obtain = SGQRCodeObtain.init()
|
var scanView: SGQRCodeScanView = {
|
let v = SGQRCodeScanView.init()
|
v.backgroundAlpha = 0.5
|
v.borderColor = #colorLiteral(red: 1.0, green: 1.0, blue: 1.0, alpha: 1.0)
|
v.cornerColor = #colorLiteral(red: 1, green: 1, blue: 1, alpha: 1)
|
v.cornerWidth = 2
|
return v
|
}()
|
|
let viewModel = DriverInfoViewModel()
|
let couponViewModel = MerchantViewModel()
|
|
override func viewDidLoad() {
|
super.viewDidLoad()
|
|
// Do any additional setup after loading the view.
|
setupQRCodeScan()
|
}
|
|
override func viewWillAppear(_ animated: Bool) {
|
super.viewWillAppear(animated)
|
obtain.startRunningWith(before: nil, completion: nil)
|
}
|
override func viewDidAppear(_ animated: Bool) {
|
super.viewDidAppear(animated)
|
scanView.addTimer()
|
}
|
override func viewWillDisappear(_ animated: Bool) {
|
super.viewWillDisappear(animated)
|
scanView.removeTimer()
|
obtain.stopRunning()
|
}
|
|
deinit {
|
removeScanningView()
|
}
|
|
func removeScanningView() {
|
scanView.removeTimer()
|
scanView.removeFromSuperview()
|
}
|
|
//MARK: - UI
|
override func setupViews() {
|
super.setupViews()
|
navigationItem.title = "扫一扫"
|
navigationItem.rightBarButtonItem = UIBarButtonItem.yy_creat(title: "相册", target: self, action: #selector(album)).item
|
view.backgroundColor = UIColor.color(light: UIColor.color(hexString: "#7F7F7F"), dark: UIColor.color(hexString: "#7F7F7F"))
|
self.view.addSubview(scanView)
|
scanView.snp.makeConstraints { (make) in
|
make.edges.equalToSuperview()
|
}
|
obtain.setBlockWithQRCodeObtainAlbumResult {[weak self] (obtain, result) in
|
self?.qRCodeComplete(obtain: obtain, result: result)
|
}
|
}
|
|
//MARK: - Rx
|
override func bindRx() {
|
super.bindRx()
|
viewModel.queryDriverSubject
|
.subscribeOn(MainScheduler.instance)
|
.subscribe(onNext: {[unowned self] (state) in
|
switch state{
|
case .loading:
|
self.show()
|
break
|
case .success(let model):
|
self.hide()
|
guard let model: DriverDetailInfoModel = model as? DriverDetailInfoModel else {
|
alert(text: "司机不存在")
|
self.obtain.startRunningWith(before: nil, completion: nil)
|
return
|
}
|
// if self.type == .scan {
|
// let vc = SureTravelInfoController()
|
// vc.travelOrderType = .scan
|
// vc.model = self.setDriverModel(model: model)
|
// self.yy_push(vc: vc)
|
// }else {
|
let vc = ScanChooseTravelVC(model: model)
|
self.yy_push(vc: vc)
|
// }
|
break
|
case .error(let error):
|
self.hide()
|
self.obtain.startRunningWith(before: nil, completion: nil)
|
alert(text: error.localizedDescription)
|
break
|
}
|
}).disposed(by: disposeBag)
|
|
couponViewModel.queryVerifiCodeSubject.subscribe(onNext: {[unowned self] (state) in
|
switch state {
|
case .loading:
|
self.show()
|
break
|
case .success(let model):
|
self.hide()
|
if let m = model as? MerchantVerifiCouponModel{
|
let vc = VerifiCouponVC()
|
vc.merchantVerifiCouponModel = m
|
self.yy_push(vc: vc)
|
// self.obtain.startRunningWith(before: nil, completion: nil)
|
}else{
|
alert(text: "数据错误")
|
self.obtain.startRunningWith(before: nil, completion: nil)
|
}
|
break
|
case .error(let error):
|
self.hide()
|
self.obtain.startRunningWith(before: nil, completion: nil)
|
alert(text: error.localizedDescription)
|
break
|
}
|
|
}) { error in
|
|
}.disposed(by: disposeBag)
|
|
}
|
|
|
/// 相册
|
@objc func album(){
|
obtain.establishAuthorizationQRCodeObtainAlbum(with: self)
|
}
|
|
/// 二维码扫描结果
|
///
|
/// - Parameters:
|
/// - obtain: 扫描器
|
/// - result: 内容
|
func qRCodeComplete(obtain: SGQRCodeObtain?,result: String?) {
|
if result != nil{
|
guard let string:NSString = (result as NSString?) else{
|
alert(text: "二维码无效")
|
self.yy_pop()
|
return
|
}
|
if string.contains("driverId:"){
|
let id = string.substring(from: 9)
|
viewModel.driverId.accept(id.wy_toInt())
|
viewModel.queryDriverInfo()
|
obtain?.stopRunning()
|
}else if string.contains("merchantCoupon:"){
|
let id = string.substring(from: 15)
|
couponViewModel.verifiCode(code: id)
|
obtain?.stopRunning()
|
}else{
|
alert(text: "二维码无效")
|
}
|
}else{
|
alert(text: "二维码无效")
|
}
|
}
|
|
func setupQRCodeScan() {
|
|
let configure = SGQRCodeObtainConfigure.init()
|
configure.sampleBufferDelegate = true
|
obtain.establishQRCodeObtainScan(with: self, configure: configure)
|
obtain.setBlockWithQRCodeObtainScanResult {[weak self] (obtain, result) in
|
self?.qRCodeComplete(obtain: obtain, result: result)
|
}
|
obtain.setBlockWithQRCodeObtainScanBrightness { (obtain, brightness) in
|
|
}
|
}
|
}
|