|
|
@@ -97,6 +97,10 @@ |
|
|
|
<view class="cell-left">轴距</view> |
|
|
|
<view class="cell-right">{{ obu.axleDistance }}</view> |
|
|
|
</view> |
|
|
|
<view class="cell"> |
|
|
|
<view class="cell-left">外廓尺寸</view> |
|
|
|
<view class="cell-right">{{ obu.outsideDimensions }}</view> |
|
|
|
</view> |
|
|
|
<view class="cell"> |
|
|
|
<view class="cell-left">启用时间</view> |
|
|
|
<view class="cell-right">{{ obu.startTime }}</view> |
|
|
@@ -118,14 +122,36 @@ |
|
|
|
</view> |
|
|
|
</template> |
|
|
|
|
|
|
|
<script lang="ts" setup> |
|
|
|
<script setup> |
|
|
|
import { |
|
|
|
reactive |
|
|
|
} from "vue"; |
|
|
|
import {onLoad,onUnload} from "@dcloudio/uni-app"; |
|
|
|
import {request} from "@/utils/network/request"; |
|
|
|
import {orderDetail} from "@/utils/network/api"; |
|
|
|
import {stringToJson} from "@/utils/network/encryption"; |
|
|
|
import { |
|
|
|
onLoad, |
|
|
|
onUnload |
|
|
|
} from "@dcloudio/uni-app"; |
|
|
|
import { |
|
|
|
request |
|
|
|
} from "@/utils/network/request"; |
|
|
|
import { |
|
|
|
obuDecrypt, |
|
|
|
orderDetail |
|
|
|
} from "@/utils/network/api"; |
|
|
|
import { |
|
|
|
stringToJson |
|
|
|
} from "@/utils/network/encryption"; |
|
|
|
import { |
|
|
|
HexToStrig, |
|
|
|
hexStringToByteArray, |
|
|
|
HexToInt |
|
|
|
} from "../../utils/util/fileData.js"; |
|
|
|
import { |
|
|
|
getVehicleType |
|
|
|
} from "../../datas/vehicleType.js" |
|
|
|
import { |
|
|
|
getVehiclePlateColor |
|
|
|
} from "../../datas/vehiclePlateColor.js" |
|
|
|
|
|
|
|
const cmd = require("../../static/etcUtil/cmdConfig.js"); |
|
|
|
const tools = require("../../static/etcUtil/tools.js"); |
|
|
|
const datas = require("../../static/etcUtil/datas.js"); |
|
|
@@ -161,15 +187,19 @@ |
|
|
|
vin: "", |
|
|
|
wheelCount: "", |
|
|
|
isJH: "", |
|
|
|
outsideDimensions: "", |
|
|
|
}) |
|
|
|
onLoad((option)=>{ |
|
|
|
onLoad((option) => { |
|
|
|
// getOrderDetails("f04b28632a2b4dd5959752d0eb2cdb6e") |
|
|
|
getCardId(getObuId()) |
|
|
|
}) |
|
|
|
//获取订单详情 |
|
|
|
const getOrderDetails = (id:string) => { |
|
|
|
const getOrderDetails = (id) => { |
|
|
|
const options = { |
|
|
|
type: 2, |
|
|
|
data: {"id": id}, |
|
|
|
data: { |
|
|
|
"id": id |
|
|
|
}, |
|
|
|
method: 'POST', |
|
|
|
showLoading: true, |
|
|
|
} |
|
|
@@ -181,35 +211,220 @@ |
|
|
|
card.idNum = result.ownerIdnum; |
|
|
|
card.v_userType = result.vehicleClass; |
|
|
|
card.vehiclePlate = result.vehiclePlate, |
|
|
|
card.vehiclePlateColor =result.vehiclePlateColor; |
|
|
|
card.vehiclePlateColor = result.vehiclePlateColor; |
|
|
|
card.startTime = result.cardEnableTime; |
|
|
|
card.endTime = ""; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
obu.num = result.obuId; |
|
|
|
obu.startTime = result.obuEnableTime; |
|
|
|
obu.approvedCount= result.vehicleApprovedCount; |
|
|
|
obu.axleCount= result.vehicleAxleCount; |
|
|
|
obu.engineNum= result.vehicleEngineNum; |
|
|
|
obu.vehiclePlate= result.vehiclePlate; |
|
|
|
obu.vehiclePlateColor= result.vehiclePlateColor; |
|
|
|
|
|
|
|
obu.approvedCount = result.vehicleApprovedCount; |
|
|
|
obu.axleCount = result.vehicleAxleCount; |
|
|
|
obu.engineNum = result.vehicleEngineNum; |
|
|
|
obu.vehiclePlate = result.vehiclePlate; |
|
|
|
obu.vehiclePlateColor = result.vehiclePlateColor; |
|
|
|
|
|
|
|
//测试 |
|
|
|
// state.orderInfo.orderStep = OrderStatus.待激活; |
|
|
|
}) |
|
|
|
}; |
|
|
|
const back = ()=>{ |
|
|
|
/** |
|
|
|
* 获取卡号 |
|
|
|
*/ |
|
|
|
const getCardId = (func) => { |
|
|
|
//执行0015文件 |
|
|
|
tools.showLoadingAlert("执行指令"); |
|
|
|
let cmdArr = [cmd.HOME_DIRECTORY, cmd.APPLICATION_DIRECTORY, cmd.CMD_READBINARY, cmd.CMD_GETBALANCE]; |
|
|
|
bluetoothUtil.transCmd(cmdArr, '10', function(res) { //10:写卡 20:写OBU |
|
|
|
let str = res[2].substring(res[2].length - 4, res[2].length); //判断是否为9000 |
|
|
|
let str3 = res[3].substring(res[3].length - 4, res[3].length); //判断是否为9000 |
|
|
|
if (str == "9000" || str3 == "9000") { |
|
|
|
if (res[2].length > 86 || res[3] >= 12) { |
|
|
|
|
|
|
|
card.cardNo = res[2].substring(20, 40); |
|
|
|
card.startTime = res[2].substring(40, 48); |
|
|
|
card.endTime = res[2].substring(48, 56); |
|
|
|
card.version = res[2].substring(18, 19) >= 4 ? "4x" : "2x"; |
|
|
|
card.money = res[3].substring(0, 8); |
|
|
|
card.v_userType = parseInt(res[2].substring(80, 82), 16); |
|
|
|
card.vehiclePlate = HexToStrig(res[2].substring(56, 80)); |
|
|
|
if (res[2].substring(18, 19) >= 4) { |
|
|
|
card.type = getVehicleType(parseInt(res[2].substring(84, 86), 16)); |
|
|
|
// card.vehiclePlateColor = parseInt(res[2].substring(82, 84), 16); |
|
|
|
card.color = getVehiclePlateColor(parseInt(res[2].substring(82, 84), 16)) |
|
|
|
} else { |
|
|
|
card.type = "--"; |
|
|
|
// card.vehiclePlateColor = parseInt(res[2].substring(82, 84), 16); |
|
|
|
card.color = getVehiclePlateColor(parseInt(res[2].substring(82, 84), 16)) |
|
|
|
} |
|
|
|
|
|
|
|
//执行0016文件 |
|
|
|
let arr = [cmd.HOME_DIRECTORY, cmd.PERSONAL_INFORMATION] |
|
|
|
bluetoothUtil.transCmd(arr, '10', function(res) { |
|
|
|
let str2 = res[1].substring(res[1].length - 4, res[1].length); |
|
|
|
if (str2 == "9000") { |
|
|
|
if (res[1].length > 108) { |
|
|
|
card.userName = HexToStrig(res[1].substring(4, 44)); //姓名 |
|
|
|
card.idNum = HexToStrig(res[1].substring(44, 108)); //身份证号码 |
|
|
|
|
|
|
|
|
|
|
|
//获取是否有优惠 |
|
|
|
let cmdArr3 = [cmd.HOME_DIRECTORY, cmd.APPLICATION_DIRECTORY, cmd |
|
|
|
.CMD_00B08E0000 |
|
|
|
]; |
|
|
|
bluetoothUtil.transCmd(cmdArr3, '10', function(res) { |
|
|
|
let str3 = res[2].substring(res[2].length - 4, res[2] |
|
|
|
.length); |
|
|
|
if (str3 == "9000") { |
|
|
|
if (res[2].length > 131) { |
|
|
|
let _str = parseInt(res[2].substring(129, 130), |
|
|
|
16); |
|
|
|
switch (_str) { |
|
|
|
case 0: |
|
|
|
card.favourable = "否"; |
|
|
|
break; |
|
|
|
case 1: |
|
|
|
card.favourable = "是"; |
|
|
|
break; |
|
|
|
default: |
|
|
|
card.favourable = '未知' + "_" + _str; |
|
|
|
break; |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
//回调读取OBU指令 |
|
|
|
tools.hideLoadingAlert(); |
|
|
|
func(); |
|
|
|
} else { |
|
|
|
alertF("CMD_00B08E0000指令长度不符" + res[2]); |
|
|
|
} |
|
|
|
return; |
|
|
|
} |
|
|
|
alertF(cmd.PERSONAL_INFORMATION + "_" + str); |
|
|
|
}) |
|
|
|
} else { |
|
|
|
alertF("PERSONAL_INFORMATION指令长度不符" + res[1]); |
|
|
|
} |
|
|
|
return; |
|
|
|
} |
|
|
|
alertF("PERSONAL_INFORMATION指令长度不符" + res[1]); |
|
|
|
}) |
|
|
|
} else { |
|
|
|
alertF("CMD_READBINARY指令长度不符" + res[2]); |
|
|
|
} |
|
|
|
return; |
|
|
|
} |
|
|
|
alertF("CMD_READBINARY指令长度不符" + res[2]); |
|
|
|
|
|
|
|
}) |
|
|
|
}; |
|
|
|
/** |
|
|
|
* 获取OBU号 |
|
|
|
*/ |
|
|
|
const getObuId = () => { |
|
|
|
tools.showLoadingAlert("执行指令"); |
|
|
|
let cmdArr = [cmd.HOME_DIRECTORY, cmd.OBU_SYSTEM_FILE]; |
|
|
|
bluetoothUtil.transCmd(cmdArr, '20', function(res) { |
|
|
|
let str = res[1].substring(res[1].length - 4, res[1].length); |
|
|
|
if (str == "9000") { |
|
|
|
if (res[1].length > 52) { |
|
|
|
|
|
|
|
obu.num = res[1].substring(20, 36); |
|
|
|
obu.startTime = res[1].substring(36, 44); |
|
|
|
obu.endTime = res[1].substring(44, 52); |
|
|
|
obu.version = res[1].substring(18, 19) >= 4 ? "4x" : "2x"; |
|
|
|
obu.isJH = res[1].substring(53, 54) == "1" ? "是" : res[1].substring(53, 54) == "0" ? |
|
|
|
"否" : "其他:" + res[1].substring(53, 54); |
|
|
|
|
|
|
|
|
|
|
|
let rand = datas.generateMixed(16); |
|
|
|
let arr = [cmd.OBU_DF01, cmd.OBU_00B400000A + rand + cmd.OBU_4F00]; |
|
|
|
bluetoothUtil.transCmd(arr, '20', function(res) { |
|
|
|
console.log(res); |
|
|
|
let str2 = res[1].substring(res[1].length - 4, res[1].length); |
|
|
|
if (str2 == "9000") { |
|
|
|
decryptObuVehicleInfo(obu.num, res[1].substring(0, res[1].length - 4), |
|
|
|
function(res) { |
|
|
|
|
|
|
|
obu.approvedCount = HexToInt(res.substring(48, 54)); |
|
|
|
obu.axleCount = HexToInt(res.substring(44, 48)); |
|
|
|
obu.axleDistance = HexToInt(res.substring(44, 48)); |
|
|
|
obu.engineNum = HexToStrig(res.substring(86, 118)); |
|
|
|
obu.type = HexToInt(res.substring(28, 30)); |
|
|
|
obu.userType = HexToInt(res.substring(30, 32)); |
|
|
|
obu.vehiclePlate = HexToStrig(res.substring(0, 24)); |
|
|
|
//获取车牌颜色 |
|
|
|
obu.vehiclePlateColor = HexToInt(res.substring(24, 28)) |
|
|
|
obu.vin = HexToStrig(res.substring(54, 86)); |
|
|
|
obu.wheelCount = HexToInt(res.substring(40, 42)); |
|
|
|
obu.outsideDimensions = HexToInt(res.substring(32, 36)) + "x" + |
|
|
|
HexToInt(res.substring(36, 38)) + "x" + HexToInt(res |
|
|
|
.substring(38, 40)) |
|
|
|
|
|
|
|
|
|
|
|
tools.hideLoadingAlert(); |
|
|
|
//提交设备信息 |
|
|
|
// that.submitDeviceInfo(); |
|
|
|
}); |
|
|
|
//断开蓝牙 |
|
|
|
bluetoothUtil.disconnectDevice(); |
|
|
|
return; |
|
|
|
} |
|
|
|
alertF("OBU_00B400000A+rand+OBU_4F00指令长度不符" + res[1]); |
|
|
|
}) |
|
|
|
|
|
|
|
} else { |
|
|
|
alertF("OBU_SYSTEM_FILE指令长度不符" + res[1]); |
|
|
|
} |
|
|
|
return; |
|
|
|
} |
|
|
|
alertF("OBU_SYSTEM_FILE指令长度不符" + res[1]); |
|
|
|
}) |
|
|
|
}; |
|
|
|
|
|
|
|
|
|
|
|
/** |
|
|
|
* 解密OBU车辆信息 |
|
|
|
*/ |
|
|
|
function decryptObuVehicleInfo(num, data, func) { |
|
|
|
const options = { |
|
|
|
type: 2, |
|
|
|
data: { |
|
|
|
obuSerailNo: num, |
|
|
|
fileData: data |
|
|
|
}, |
|
|
|
method: "POST", |
|
|
|
showLoading: true, |
|
|
|
}; |
|
|
|
request(obuDecrypt, options).then((res) => { |
|
|
|
func(stringToJson(res.bizContent)) |
|
|
|
}); |
|
|
|
|
|
|
|
|
|
|
|
}; |
|
|
|
|
|
|
|
|
|
|
|
const back = () => { |
|
|
|
uni.$emit("refreshOrder"); |
|
|
|
uni.switchTab({ |
|
|
|
url:"/pages/order/order" |
|
|
|
url: "/pages/order/order" |
|
|
|
}) |
|
|
|
} |
|
|
|
const alertF = (msg) => { |
|
|
|
|
|
|
|
//隐藏加载框 |
|
|
|
tools.hideLoadingAlert(); |
|
|
|
|
|
|
|
//提示对话框 |
|
|
|
tools.showModalAlert(msg); |
|
|
|
} |
|
|
|
</script> |
|
|
|
|
|
|
|
<style scoped> |
|
|
|
.wrapper{ |
|
|
|
.wrapper { |
|
|
|
padding-bottom: 50rpx; |
|
|
|
} |
|
|
|
|
|
|
|
.info-card { |
|
|
|
margin: 30rpx; |
|
|
|
border-radius: 16rpx; |
|
|
@@ -228,7 +443,7 @@ |
|
|
|
display: flex; |
|
|
|
flex-direction: row; |
|
|
|
padding: 15rpx 40rpx; |
|
|
|
font-size:30rpx; |
|
|
|
font-size: 30rpx; |
|
|
|
} |
|
|
|
|
|
|
|
.cell-left { |
|
|
@@ -243,17 +458,18 @@ |
|
|
|
color: #333; |
|
|
|
overflow: hidden; |
|
|
|
} |
|
|
|
.btn{ |
|
|
|
background: linear-gradient(to right,#13E7C1,#43A1E0); |
|
|
|
|
|
|
|
.btn { |
|
|
|
background: linear-gradient(to right, #13E7C1, #43A1E0); |
|
|
|
opacity: 1; |
|
|
|
border-radius: 100rpx; |
|
|
|
color: #fff; |
|
|
|
font-size: 30rpx; |
|
|
|
height: 80rpx; |
|
|
|
line-height: 80rpx; |
|
|
|
box-shadow: 0rpx 4rpx 11rpx 1rpx rgba(223,223,223,0.5); |
|
|
|
box-shadow: 0rpx 4rpx 11rpx 1rpx rgba(223, 223, 223, 0.5); |
|
|
|
width: 670rpx; |
|
|
|
margin:40rpx; |
|
|
|
margin: 40rpx; |
|
|
|
text-align: center; |
|
|
|
} |
|
|
|
</style> |