Przeglądaj źródła

读取设备信息

yxb
不甘寂寞 2 lat temu
rodzic
commit
a249e16ac7

+ 241
- 25
after-sale/deviceInfo/deviceInfo.vue Wyświetl plik

@@ -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>

+ 4
- 4
datas/vehiclePlateColor.js Wyświetl plik

@@ -41,7 +41,7 @@ export const vehiclePlateColor = [{
]

//获取车牌颜色
// export const getVehiclePlateColor = (id) => {
// let colors = vehiclePlateColor.filter(item => item.id == id);
// return colors[0].color
// }
export const getVehiclePlateColor = (id) => {
let colors = vehiclePlateColor.filter(item => item.id == id);
return colors[0].color
}

+ 12
- 0
pages/service/service.vue Wyświetl plik

@@ -20,6 +20,10 @@
<view :class="activeTab === '查询服务' ?'border on':'border'"></view>
<view class="menu-text">查询服务</view>
</view>
<view :class="activeTab === '信息管理' ? 'menu active' : 'menu'" @click="tabHandle('信息管理')">
<view :class="activeTab === '信息管理' ?'border on':'border'"></view>
<view class="menu-text">信息管理</view>
</view>
<view :class="activeTab === '其他服务' ? 'menu active' : 'menu'" @click="tabHandle('其他服务')">
<view :class="activeTab === '其他服务' ?'border on':'border'"></view>
<view class="menu-text">其他服务</view>
@@ -191,6 +195,14 @@
<view class="text">ETC通行流水记录</view>
</view>
</view>
<view class="right-content" v-if="activeTab === '信息管理'">
<view class="item-box" @click="$util.navTo('/pages/bluetooth/bluetooth?routeType=4',true)">
<view class="item bg-blue" :style="{'--background':bgBlue}">
<image :src="`${$imgUrl}service/imgs/pj.png`" />
</view>
<view class="text">卡签信息</view>
</view>
</view>
<view class="right-content" v-if="activeTab === '其他服务'">
<view class="item-box" @click="$util.navTo('/service/remind/satisfaction-evaluate',true)">
<view class="item bg-blue" :style="{'--background':bgBlue}">

+ 2
- 2
utils/network/request.js Wyświetl plik

@@ -35,8 +35,8 @@ export function request(code, options = {}) {
}
//Url 地址
//options.url = envs[process.env.NODE_ENV].baseUrl || '' + options.url
options.url = 'http://192.168.100.63:8087/ifzt/api/interfaceMidGroundIn'
// options.url = 'http://222.85.144.89:19002/ifzt/api/interfaceMidGroundIn'
// options.url = 'http://192.168.100.63:8087/ifzt/api/interfaceMidGroundIn'
options.url = 'http://222.85.144.89:19002/ifzt/api/interfaceMidGroundIn'
//判断baseUri是否为空
if (options.baseUrl) {
options.url = options.baseUrl

+ 57
- 0
utils/util/fileData.js Wyświetl plik

@@ -54,3 +54,60 @@ export function HexToString(inHex) {
}
return strResult;
}

/**
* 十六进制转汉字
*
* @param {string} data
* @returns {string}
*/
export function HexToStrig(data) {
let str = data.substring(data.length - 2);
while (str === "00") {
data = data.substring(0, data.length - 2);
if (data.length === 0) {
return "";
}
str = data.substring(data.length - 2);
}
const asd = hexStringToByteArray(data);
try {
str = new TextDecoder("gbk").decode(asd);
} catch (e) {
console.error(e);
}
return str;
}

/**
* 十六进制字符串转字节数组
*
* @param {string} str
* @returns {Uint8Array}
*/
export function hexStringToByteArray(str) {
if (!str) {
return new Uint8Array();
}
const result = new Uint8Array(str.length / 2);
for (let i = 0; i < str.length; i += 2) {
result[i / 2] = parseInt(str.substr(i, 2), 16);
}
return result;
}

/**
* 十六进制转十进制
*
* @param {string} data
* @returns {string}
*/
export function HexToInt(data) {
let num = -1;
try {
num = parseInt(data, 16);
} catch (e) {
console.error(e);
}
return num.toString();
}

Ładowanie…
Anuluj
Zapisz