Parcourir la source

优化激活内容

腾讯ocr渠道不签约
yangteng il y a 4 semaines
Parent
révision
481021c514

+ 7
- 0
pages.json Voir le fichier

@@ -404,6 +404,13 @@
"enablePullDownRefresh": false
}
},
{
"path": "activation/result",
"style": {
"navigationBarTitleText": "激活成功",
"enablePullDownRefresh": false
}
},
{
"path": "activation/operation-upload",
"style": {

+ 288
- 12
subpackage/after-sale/activation/activate.vue Voir le fichier

@@ -56,7 +56,8 @@
expireDate,
expireDate2,
getFormatDate,
msg
msg,
navTo
} from "@/utils/utils";
import {
onLoad
@@ -69,7 +70,7 @@
IntegerToHexString,
} from "@/utils/util/fileData.js";
import {
issueApply,issueCallback,orderDetailQuery,errorLogAdd
issueApply,issueCallback,orderDetailQuery,errorLogAdd,cardObuQuery,cardObuQueryinLog,obuFileDataDecrypt
} from "@/utils/network/api";
import {
agentId
@@ -79,12 +80,18 @@
const bluetoothUtil = require("../../../static/etcUtil/index.js");
import activeSuccess from "./components/popup-device-active-success";
const datas = require("../../../static/etcUtil/datas.js");
import {
getVehicleType
} from "@/subpackage/after-sale/js/vehicleType.js"
import {
getVehiclePlateColor
} from "@/datas/vehiclePlateColor";
import {
searchVehicleInfoQuery
} from "@/subpackage/after-sale/js/publicRequest";
import {
decryptCardVehicleInformation
} from "@/datas/publicRequest";
import {
channelId
} from "@/utils/network/difference";
@@ -115,23 +122,28 @@

const card = reactive({
cardId: "",
netId: "",
cardType: "",
cardNo: "",
startTime: "",
endTime: "",
userName: "",
userNameStr:"",
idNum: "",
idNumStr:"",
vehiclePlate: "",
vehiclePlateColor: "",
color: "",
colorStr:"",
version: "",
type: "",
typeStr:"",
favourable: "",
favourableStr:"",
money: "",
v_userType: "",
v_userType: ""
});
const obu = reactive({
obuId: "",
num: "",
startTime: "",
endTime: "",
version: "",
@@ -140,13 +152,18 @@
axleDistance: "",
engineNum: "",
type: "",
typeStr:"",
userType: "",
contractNo: "",
userTypeStr:"",
vehiclePlate: "",
vehiclePlateColor: "",
vehiclePlateColorStr:"",
vin: "",
wheelCount: 0,
isJH: ""
wheelCount: "",
isJH: "",
isJHStr: "",
outsideDimensions: "",
loadStatus:""
});
let cmdRandNum = '';
let orderInfo = {};
@@ -155,7 +172,6 @@
approvedCount: 0, //核载人数
cardId: "", //卡号
obuId: "", //obu号
obuId: "", //obu号
packageNum: "", //套餐编号
axleCount: 0, //轴数
axleDistance: "", //轴距
@@ -254,9 +270,7 @@
})
},2000)
setTimeout(() => {
uni.navigateTo({
url: "/subpackage/after-sale/deviceInfo/deviceInfo",
});
getCardIdCommit()
},5000)
} else {
console.log("datas.stepNo", datas.stepNo)
@@ -412,6 +426,268 @@
});
};
/**
* 获取卡号
*/
const getCardIdCommit = () => {
//执行0015文件
tools.showLoadingAlert("执行指令");
let cmdArr = [cmd.HOME_DIRECTORY, cmd.APPLICATION_DIRECTORY, cmd.CMD_READBINARY, cmd.CMD_GETBALANCE];
console.log(cmdArr);
console.log(bluetoothUtil);
bluetoothUtil.transCmd(cmdArr, '10', function(res) { //10:写卡 20:写OBU
console.log("5201",res)
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) {
console.log("res[2]", res[2].substring(84, 86), getVehiclePlateColor(parseInt(res[2]
.substring(82, 84), 16)), res[2].substring(18, 19))
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, 20);
card.money = res[3].substring(0, 8);
card.v_userType = parseInt(res[2].substring(80, 82), 16);
console.log("card.v_userType", card.v_userType)
decryptCardVehicleInformation(res[2].substring(56, 80), function (res) {
card.vehiclePlate =res;
});
console.log("res[2].substring(18, 19)",res[2].substring(18, 20))
if (res[2].substring(18, 19) >= 4) {
//4x卡
card.type = parseInt(res[2].substring(84, 86), 16);
card.typeStr = getVehicleType(parseInt(res[2].substring(84, 86), 16));
card.color = parseInt(res[2].substring(82, 84), 16)
card.colorStr = getVehiclePlateColor(parseInt(res[2].substring(82, 84), 16))
} else {
//2x卡--获取车牌颜色
card.type = "--";
card.color =parseInt(res[2].substring(82, 84), 16)
card.colorStr = getVehiclePlateColor(parseInt(res[2].substring(82, 84), 16))
card.typeStr = getVehicleType(parseInt(res[2].substring(84, 86), 16));
}
state.vehicleId = card.vehiclePlate + "_" + 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) {
console.log("res====",res)
decryptCardVehicleInformation(res[1].substring(4, 44), function (res) {
card.userName = res; //姓名
card.userNameStr = card.userName[0] + '*'.repeat(card.userName.length - 1)
});
decryptCardVehicleInformation(res[1].substring(44, 108), function (res) {
card.idNum = res; //身份证号码
card.idNumStr=res.replace(/^\d{14}/,'**************')
});
//获取是否有优惠
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);
card.favourable=_str
switch (_str) {
case 0:
card.favourableStr = "否";
break;
case 1:
card.favourableStr = "是";
break;
default:
card.favourableStr = '未知' + "_" + _str;
break;
}
//回调读取OBU指令
getObuIdCommit()
tools.hideLoadingAlert();
} 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 getObuIdCommit = () => {
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, 20);
obu.isJH = res[1].substring(53, 54)
obu.isJHStr = res[1].substring(53, 54) == "1" ? "是" : res[1].substring(53, 54) == "0" ?
"否" : "其他:" + res[1].substring(53, 54);
obu.loadStatus=res[1].substring(52, 54)=='01'?'正常':'已拆卸',
console.log("开始执行车辆信息识读");
let rand = res[1].substring(18, 20) >= 50?'40':'00';
var arr = [cmd.OBU_DF01, '00B400000A000000000000000045'+ rand];
bluetoothUtil.transCmd(arr, '20', function(res) {
console.log(res);
console.log("开始执行车辆信息识读成功");
let str2 = res[1].substring(res[1].length - 4, res[1].length);
let obuVersion = res[1].substring(18, 20);
let keyIndex = obuVersion > 50 ? '40' : '00';
let reqType = '00';
let proviceCode = '5201';
if (str2 == "9000") {
console.log("===========", obu.num, res[1].substring(0, res[1].length - 4))
decryptObuVehicleInfo(obu.num, res[1].substring(0, res[1].length - 4),
obuVersion, rand, reqType, proviceCode,
function(res) {
obu.approvedCount = res.approvedCount;
obu.axleCount = res.axleCount;
obu.axleDistance = res.axleDistance;
obu.engineNum = res.engineNumber.replace(/\u0000/g, '');
obu.type = res.collectionType;
obu.typeStr = getVehicleType(res.collectionType);
obu.userType = res.userType;
if(res.userType == 0){
obu.userTypeStr = "普通车" ;
}else if(res.userType == 6){
obu.userTypeStr = "公务车" ;
}
obu.vehiclePlate = res.vehiclePlate.replace(/\u0000/g, '');
//获取车牌颜色
obu.vehiclePlateColor = res.vehiclePlateColor;
obu.vehiclePlateColorStr = getVehiclePlateColor(res.vehiclePlateColor);
obu.vin = res.vin.replace(/\u0000/g, '');
obu.wheelCount = res.wheelsCount;
obu.outsideDimensions = res.carLong + "x" + res.carWidth + "x" + res.carHeight
getObuList();
tools.hideLoadingAlert();
});
//断开蓝牙
bluetoothUtil.disconnectDevice();
tools.showToastAlert("蓝牙已断开");
console.log('蓝牙已断开=========')
return;
}
alertF("OBU_00B400000A+rand+OBU_4F00指令长度不符" + res[1]);
})
} else {
alertF("OBU_SYSTEM_FILE指令长度不符" + res[1]);
}
return;
}
alertF("OBU_SYSTEM_FILE指令长度不符" + res[1]);
})
};
const getObuList = () => {
var data = {
obuId: obu.num,
cardId:card.cardNo,
};
const options = {
type: 2,
data: data,
method: "POST",
showLoading: true,
};
requestNew(cardObuQuery, options).then((res) => {
tools.hideLoadingAlert();
let result = res;
state.obuStatus = result.obuStatus?result.obuStatus:""
state.cardStatus = result.cardStatus
if (result.cardType == 1 && result.debitType == 1) {
state.cardTypeName = "预存卡"
card['cardTypeName']=3
} else if (result.cardType == 2) {
state.cardTypeName = "储值卡"
card['cardTypeName']=2
} else {
state.cardTypeName = "记账卡"
card['cardTypeName']=1
}
// 卡签提交得信息
card['cardStatus']=result.cardStatus
obu['obuStatus']=result.obuStatus?result.obuStatus:""
cardObuMsgUp()
})
}
// 签信息提交日志记录
const cardObuMsgUp = () => {
var data = {
cardLogInfo: card,
obuLogInfo:obu,
type:"active"
};
const options = {
type: 2,
data: data,
method: "POST",
showLoading: true,
};
requestNew(cardObuQueryinLog, options).then((res) => {
tools.hideLoadingAlert();
navTo(`/subpackage/after-sale/activation/result`)
console.log("提交成功")
})
}
/**
* 解密OBU车辆信息
*/
const decryptObuVehicleInfo = (num, data,obuVersion, keyIndex, reqType, proviceCode, func) => {
const options = {
type: 2,
data: {
contractSN: num,
cipherData: data,
reqType: reqType,
keyIndex: keyIndex,
proviceCode: proviceCode
},
method: "POST",
showLoading: true,
};
requestNew(obuFileDataDecrypt, options).then((res) => {
console.log("obuFileDataDecrypt",res)
const data =res
func(data)
});
};
</script>

<style>

+ 21
- 59
subpackage/after-sale/activation/operation-upload.vue Voir le fichier

@@ -8,22 +8,12 @@
<view class="desc">上传汽车的45度车身照片</view>
<view class="flag"><text>拍摄示例</text> </view>
</view>
<view class="item-right" @click="chooseImage(1)">
<view class="item-right">
<image :src="state.headstockImg ?state.headstockImg: defHeadstockImg"
:data-url="state.headstockImg ?state.headstockImg: defHeadstockImg">
</image>
</view>
</view>
<!-- <view class="item-row">
<view class="item-left">
<view class="title">安装照</view>
<view class="desc">上传安装照片</view>
<view class="flag"><text>拍摄示例</text> </view>
</view>
<view class="item-right" @click="chooseImage(2)">
<image :src="state.installImg ?state.installImg: defInstallImg"></image>
</view>
</view> -->
<view class="hint" style="margin-top: 40rpx;">
<image :src="`${$imgUrl}common/icon-hint.png`" class="icon"></image>
<view>请打开手机蓝牙后再进行下一步操作。</view>
@@ -84,12 +74,8 @@
import {
requestNew
} from "@/utils/network/request.js";

import {
stringToJson
} from "@/utils/network/encryption.js";
import {
activeImgUpload
activeImgUpload,orderDetailQuery
} from "@/utils/network/api.js";
import {
onLoad
@@ -97,11 +83,9 @@
const height = uni.getSystemInfoSync().windowHeight

const defHeadstockImg = imgURL + "issuance/chetou.png";
const defInstallImg = imgURL + "issuance/shebei.png";

const state = reactive({
headstockImg: null, //车头照
installImg: null, //安装照
id: null,
orderId: null,
openId: null,
@@ -111,40 +95,34 @@
onLoad((option) => {
//读取传入 存储的数据orderInfo
let orderData = getItem("orderInfo");
state.id = orderData.id;
state.orderId = orderData.orderId;
state.openId = getItem("openId");
state.transfer = option.transfer
state.isAfter = option.isAfter
console.log(state);
getOrderDetails(orderData.id)
})

//选择图片
const chooseImage = (type) => {
uni.chooseImage({
count: 1,
sizeType: ['original', 'compressed'], //可以指定是原图还是压缩图,默认二者都有
sourceType: ['camera'],
success: function(res) {
console.log(res.tempFilePaths);
uploadFile(res.tempFilePaths[0], "", "").then((data) => {
if (type === 1) { //车头照
state.headstockImg = data;
} else { //安装照
state.installImg = data;
}
})

}
//获取订单详情
const getOrderDetails = (id) => {
console.log('======获取订单信息======')
const options = {
type: 2,
data: {
id
},
method: "POST",
showLoading: false,
};
state.disabled = false
requestNew(orderDetailQuery, options).then((res) => {
console.log("orderInfo", res.data);
state.headstockImg=res.data['orderInfoExt']['vehBodyUrl']
});
}
};

//下一步
const gotoNextStep = () => {
if (!state.headstockImg || !state.installImg) {
msg('请按照要求上传图片!');
return;
}
uni.openBluetoothAdapter()
/* 判断是否打开蓝牙 */
uni.getBluetoothAdapterState({
@@ -158,23 +136,7 @@
})
return
} else {
// const options = {
// type: 2,
// data: {
// orderId: state.orderId,
// vehicleBodyImgUrl: state.headstockImg,
// installImgUrl: state.installImg,
// orderSource: "WECHAT",
// openId: state.openId,
// },
// method: "POST",
// showLoading: true,
// };

// requestNew(activeImgUpload, options).then((res) => {
navTo(`/pages/bluetooth/bluetooth?routeType=1&transfer=${state.transfer}&isAfter=${state.isAfter}`)
// });

navTo(`/pages/bluetooth/bluetooth?routeType=1&transfer=${state.transfer}&isAfter=${state.isAfter}`)
}
}
})

+ 60
- 0
subpackage/after-sale/activation/result.vue Voir le fichier

@@ -0,0 +1,60 @@
<template>
<view class="content">
<image :src="`${$imgUrl}ETCcancellation/bgNew.png`" mode=""></image>
<view class="title">
激活成功
</view>
<!-- <view class="">
预计1-3日完成资料审核
</view> -->
</view>
<button class="ui-btn" @click="submit">返回首页</button>
</template>

<script setup lang="ts">
const submit = () => {
console.log(11);
uni.switchTab({
url: '/pages/index/index'
})
}
</script>


<style>
page {
width: 100%;
height: 100%;
display: flex;
flex-direction: column;
background-color: white;
}
</style>
<style lang="scss" scoped>
.content {
display: flex;
flex-direction: column;
justify-content: center;
align-items: center;
padding: 80rpx;

image {
width: 390rpx;
height: 307rpx;
margin-bottom: 20rpx;
}

.title {
font-weight: 400;
font-size: 40rpx;
color: #01243A;
margin: 20rpx 0 30rpx 0;
}

view {
font-weight: 400;
font-size: 28rpx;
color: #999999;
}
}
</style>

+ 1
- 0
subpackage/after-sale/deviceInfo/deviceInfo.vue Voir le fichier

@@ -493,6 +493,7 @@
var data = {
cardLogInfo: card,
obuLogInfo:obu,
type:"normal"
};
const options = {
type: 2,

Chargement…
Annuler
Enregistrer