Преглед на файлове

启用/停用 卡签续期 卡Pin码解锁 脱落激活

yxb
不甘寂寞 преди 2 години
родител
ревизия
04965b1295

+ 569
- 0
after-sale/activation-once-again/activation-once-again.vue Целия файл

@@ -0,0 +1,569 @@
<template>
<view class="selectCar-box">
<view class="details">
<view class="title"> 基础信息 </view>
<view class="details-item">
<view> 订单编号: </view>
<text>{{ orderInfos.orderId }}</text>
</view>
<view class="details-item">
<view> 用户名称: </view>
<text>{{ orderInfos.ownerName }}</text>
</view>
<view class="details-item">
<view> 用户证件类型: </view>
<text>{{ getCredentialType(orderInfos.ownerIdtype) }}</text>
</view>
<view class="details-item">
<view> 用户证件号: </view>
<text>{{ orderInfos.ownerIdnum }}</text>
</view>
<view class="details-item">
<view> 订单车牌号: </view>
<text style="color: #00b38b">{{ orderInfos.vehiclePlate }}</text>
</view>
<view class="details-item">
<view> 车牌颜色: </view>
<text style="color: #00b38b">{{
orderInfos.vehiclePlateColorStr
}}</text>
</view>
<view class="details-item">
<view> 收费车型: </view>
<text>{{ orderInfos.vehicleType }}</text>
</view>
</view>
<view class="title"> 卡信息 </view>
<view class="card">
<view class="card-left">
<image :src="`${$imgUrl}card2.png`" mode=""></image>
<view class="card-center">
<view class="card-center-head"> {{orderInfos.cardId}} </view>
<view class="tips">
<text>储蓄卡</text>
<text class="tips-card">{{getEtcCardStatus(orderInfos.cardStatus)}}</text>
</view>
<view class="choose-item"> 有效期:xxxx-xx-xx </view>
</view>
</view>

</view>
<view class="title"> OBU设备信息 </view>
<view class="card">
<view class="card-left">
<image :src="`${$imgUrl}card1.png`" mode=""></image>
<view class="card-center">
<view class="card-center-head"> {{orderInfos.obuId}} </view>
<view class="tips">
<!-- <text>储蓄卡</text> -->
<text class="tips-card">{{getObuStatus(orderInfos.obuStatus)}}</text>
</view>
<view class="choose-item"> 有效期:xxxx-xx-xx </view>
</view>
</view>
</view>
<button class="submit" @click="toPage">再次激活</button>
<view class="mask" v-show="state.showPopup">
<view class="main">
<view class="top">
<image class="icon-close" :src="`${$imgUrl}common/icon-close.png`" @click="cancel"></image>
</view>
<image class="icon-success" :src="`${$imgUrl}bluetooth/device-active-success.png`"></image>
<view class="title">设备激活成功!</view>
</view>
</view>
</view>
</template>

<script lang="ts" setup>
import {
reactive,
ref
} from "vue";
import {
formatTime,
expireDate,
expireDate2,
getFormatDate,
msg,
navTo
} from "../../utils/utils";
import {
onLoad,onShow
} from '@dcloudio/uni-app'
// import {
// getItem
// } from "../../utils/storage";
import {
request
} from "../../utils/network/request.js";
// import {
// IntegerToHexString,
// AsciToHexString,
// } from "../../utils/util/fileData.js";
import {
stringToJson
} from "../../utils/network/encryption.js";
import activeSuccess from "./components/popup-device-active-success";
import * as IFCODE from "../../utils/network/api.js";
const cmd = require("../../static/etcUtil/cmdConfig.js");
const tools = require("../../static/etcUtil/tools.js");
const bluetoothUtil = require("../../static/etcUtil/index.js");
import {
getCredentialType
} from "@/datas/credentialType.js";
import {
getEtcCardStatus
} from "@/datas/etcCardStatus.js";
import {
getObuStatus
} from "@/datas/obuStatus.js";
const state = reactive({
showPopup:false
})
//订单
const orderInfos = reactive({
orderId: "",
ownerName: "",
ownerIdtype: "",
ownerIdnum: "",
vehiclePlate: "",
vehiclePlateColorStr: "",
vehiclePlateColor:"",
vehicleType: "",
cardId: "",
cardStatus: "",
obuId: "",
obuStatus: "",
outlineL:0,
outlineW:0,
outlineH:0,
type:0,
axleCount:0,
approvedCount:0,
vehicleVin:"",
vehicleEngineNum:"",
});
//OBU
const obu = reactive({
obuId: "",
startTime: "",
endTime: "",
version: "",
approvedCount: "",
axleCount: "",
axleDistance: "",
engineNum: "",
type: "",
userType: "",
contractNo: "",
vehiclePlate: "",
vehiclePlateColor: "",
vin: "",
wheelCount: "",
isJH: ""
});

onLoad((option) => {
//请求订单详情
queryOrderDetail(option.id);
});

onShow((option) => {
uni.$on('bluetoothLink', res => {
console.log(res);
if (res.status) {
// getCardRenewal()
getObuId()
}
//移除监听
uni.$off('bluetoothLink')
})

})
const cancel = ()=>{
state.showPopup = false;
navTo("/pages/service/service")
};

const toPage = () => {
navTo("/pages/bluetooth/bluetooth?routeType=5");
};

//获取订单详情
const queryOrderDetail = (id: string) => {
const options = {
type: 2,
data: {
id: id,
},
method: "POST",
showLoading: true,
};
request(IFCODE.orderDetail, options).then((res) => {
let orderInfo = JSON.parse(res.bizContent);
console.log(orderInfo);
orderInfos.orderId = orderInfo.orderId;
orderInfos.ownerName = orderInfo.ownerName;
orderInfos.ownerIdtype = orderInfo.ownerIdtype;
orderInfos.ownerIdnum = orderInfo.ownerIdnum;
orderInfos.vehiclePlate = orderInfo.vehiclePlate;
orderInfos.vehiclePlateColorStr = orderInfo.vehiclePlateColorStr;
orderInfos.vehiclePlateColor = orderInfo.vehiclePlateColor;
orderInfos.vehicleType = orderInfo.vehicleType;
orderInfos.cardId = orderInfo.cardId;
orderInfos.cardStatus = orderInfo.cardStatus;
orderInfos.obuId = orderInfo.obuId;
orderInfos.obuStatus = orderInfo.obuStatus;
let arr = orderInfo.vehicleDimensions.split("x");
orderInfos.outlineL = parseInt(arr[0]); //外廓 长
orderInfos.outlineW = parseInt(arr[1]); //外廓 宽
orderInfos.outlineH = parseInt(arr[2].substring(0, arr[2].length - 2)); //外廓 高

orderInfos.type=orderInfo.type;
orderInfos.axleCount=orderInfo.vehicleAxleCount;
orderInfos.approvedCount=orderInfo.vehicleApprovedCount;
orderInfos.vehicleVin=orderInfo.vehicleVin;
orderInfos.vehicleEngineNum=orderInfo.vehicleEngineNum;
});
};

/**
* 获取OBU号 读OBU
*/
const getObuId = () => {
console.log('======获取OBU号======')
let cmdArray = [cmd.HOME_DIRECTORY, cmd.OBU_SYSTEM_FILE, cmd.RANDOM_NUMBER];
tools.showLoadingAlert("正在执行指令");
bluetoothUtil.transCmd(cmdArray, "20", function(res) {
tools.hideLoadingAlert();
var status = res[1].substring(res[1].length - 4, res[1].length);
console.log('获取OBU号执行结果' + status)
//第一次获取随机数
if (status == "9000") {
obu.obuId = res[1].substring(20, 36);
obu.vin = res[1].substring(18, 20);
obu.version = res[1].substring(18, 19) >= 4 ? "4x" : "2x";
getInstallApply()
// cmdRandNum = res[2].substring(0, res[2].length - 4);
}
});
};

/**
* BDS-安装申请 请求
*/
const getInstallApply = () => {
console.log('======安装申请======')
tools.showLoadingAlert("加载中");
let options = {
type: 2, //type: 2,JSON格式提交数据(默认表单形式提交)
data: {
obuId: obu.obuId,
vehicleId: orderInfos.vehiclePlate + "_" + orderInfos.vehiclePlateColor,
orderId: orderInfos.orderId,
agentId: "52010106004",
channelId: "5201010200601130001",
channelType: "1",
staffId: "opId",
terminalId: "999999999",
}, //请求参数
method: "POST", //提交方式(默认POST)
showLoading: true, //是否显示加载中(默认显示)
};
//调用方式
request(IFCODE.installApply, options)
.then(() => {
tools.hideLoadingAlert();
// //再次获取随机数
// let cmdArr = [cmd.HOME_DIRECTORY, cmd.RANDOM_NUMBER];
// bluetoothUtil.transCmd(cmdArr, '20', function(res) {
// var str = res[1].substring(res[1].length - 4, res[1].length);
// if (str == "9000") {
// cmdRandNum = res[1].substring(0, res[1].length - 4);
// getObuActivation(cmdRandNum);
// } else {
// tools.alertF("RANDOM_NUMBER指令长度不符" + res[1]);
// }
// })
//再次获取随机数
let cmdArr = [cmd.HOME_DIRECTORY, cmd.RANDOM_NUMBER];
bluetoothUtil.transCmd(cmdArr, '20', function(res) {
var str = res[1].substring(res[1].length - 4, res[1].length);
if (str == "9000") {
let cmdRandNum = res[1].substring(0, res[1].length - 4);
getObuActivation(cmdRandNum);
} else {
tools.alertF("RANDOM_NUMBER指令长度不符" + res[1]);
}
})
})
};
/**
* VFJ-OBU在线激活 请求
*/
const getObuActivation = (cmdRandNum:string) => {
console.log('======VFJ-OBU在线激活======')
tools.showLoadingAlert("加载中");
let options = {
type: 2, //type: 2,JSON格式提交数据(默认表单形式提交)
data: {
random: cmdRandNum,
obuSerailNo: obu.obuId,
orderId: orderInfos.orderId,
}, //请求参数
method: "POST", //提交方式(默认POST)
showLoading: true, //是否显示加载中(默认显示)
};
//调用方式
request(IFCODE.obuActivation, options)
.then((res) => {
tools.hideLoadingAlert();
console.log("在线激活 请求");
console.log(stringToJson(res.bizContent));
const datas = stringToJson(res.bizContent);
tools.showLoadingAlert("执行指令");
bluetoothUtil.transCmd([datas.data.APDU], "20", function(res) {
tools.hideLoadingAlert();
console.log(res);
if (res[0] == "9000") {
console.log("在线激活执行指令88888 请求", res);
getObuInstall(0, ""); //status 0 - 安装成功 || 1 - 安装失败
}
});
})
.catch((err) => {
console.log(err);
});
};
/**
* BDS-安装确认 请求
*/
const getObuInstall = (status:number, reason:string) => {
console.log('======OBU安装确认======')
tools.showLoadingAlert("加载中");
let options = {
type: 2, //type: 2,JSON格式提交数据(默认表单形式提交)
data: {
installStatus: status,
failReason: reason,
installType: "1",
installChannelId: "5201010200601130001",
obuId: obu.obuId,
orderId: orderInfos.orderId
}, //请求参数
method: "POST", //提交方式(默认POST)
showLoading: true, //是否显示加载中(默认显示)
};
//调用方式
request(IFCODE.obuInstall, options)
.then(() => {
tools.hideLoadingAlert();
state.showPopup = true;
// uni.navigateTo({
// url: "/orders/order-details-new?id=" +
// state.id +
// "&orderId=" +
// state.orderId,
// });
// uni.navigateTo({
// url: "/after-sale/deviceInfo/deviceInfo",
// });
});
};

</script>

<style>
page {
width: 100%;
height: 100%;
background-color: #fff;
}
</style>
<style lang="scss" scoped>
.mask{
background: rgba(0, 0, 0, .35);
position: fixed;
left: 0;
top: 0;
bottom: 0;
right: 0;
}
.main{
width: 560rpx;
padding: 25rpx 20rpx 55rpx;
text-align: center;
background: #fff;
position: absolute;
left: 50%;
top: 50%;
transform: translate(-50%,-50%);
border-radius: 20rpx;
.top{
text-align: right;
.icon-close{
width: 48rpx;
height: 48rpx;
}
}
.icon-success{
width: 500rpx;
height: 320rpx;
margin-top: 22rpx;
}
.title{
color: #333333;
font-size: 40rpx;
font-weight: 600;
text-align: center;
margin-top: 55rpx;
}
}
.selectCar-box {
// width: 100%;
// height: 100%;
padding: 30rpx;

.title {
font-size: 30rpx;
font-family: Microsoft YaHei UI;
font-weight: 400;
color: #333333;
margin-bottom: 30rpx;
}

.details {
.title {
font-size: 30rpx;
font-family: Microsoft YaHei UI;
font-weight: 400;
color: #333333;
margin-bottom: 30rpx;
}

.details-item {
display: flex;
font-size: 26rpx;
font-family: Noto Sans S Chinese;
font-weight: 400;
color: #999999;
margin-bottom: 30rpx;

text {
font-size: 26rpx;
font-family: Noto Sans S Chinese;
font-weight: 400;
color: #333333;
}
}
}

.card {
height: 150rpx;
background: #ffffff;
box-shadow: 0rpx 4rpx 13rpx 3rpx rgba(223, 223, 223, 0.8);
border-radius: 20rpx;
padding: 30rpx;
display: flex;
justify-content: space-between;
align-items: center;
margin-bottom: 60rpx;

.card-left {
display: flex;
align-items: center;

image {
width: 100rpx;
height: 90rpx;
}

.card-center {
margin-left: 30rpx;

.card-center-head {
font-size: 32rpx;
font-family: Noto Sans S Chinese;
font-weight: 400;
color: #333333;
}

.tips {
font-size: 26rpx;
font-family: Noto Sans S Chinese;
font-weight: 400;
color: #666666;

.tips-card {
width: 70rpx;
height: 40rpx;
background: #d3f2ef;
border-radius: 6rpx;
font-size: 20rpx;
font-family: Noto Sans S Chinese;
font-weight: 400;
color: #0a8f8a;
padding: 5rpx 10rpx;
margin-left: 20rpx;
}
}
}
}

.choose-item {
margin-right: 20rpx;
/* width: 50rpx; */
// height: 50rpx;
/* border: 1rpx solid #00B38B; */
border-radius: 50%;
// display: flex;
// justify-content: center;
// align-items: center;
font-size: 25rpx;
// align-self: end;

.active {
width: 38rpx;
height: 38rpx;
background: #00b38b;
border-radius: 50%;
}
}
}

.remark {
font-size: 26rpx;
font-family: Microsoft YaHei UI;
font-weight: 400;
color: #666666;
text-indent: 30rpx;
margin-bottom: 30rpx;
}

.submit {
margin-top: 100rpx;
width: 670rpx;
height: 80rpx;
background: linear-gradient(-90deg, #43a1e0 0%, #13e7c1 100%);
border-radius: 40rpx;
font-size: 32rpx;
font-family: Noto Sans S Chinese;
font-weight: 400;
color: #ffffff;
line-height: 80rpx;
}
}
</style>

+ 40
- 0
after-sale/activation-once-again/components/popup-device-active-success.vue Целия файл

@@ -0,0 +1,40 @@
<template>
<view class="main">
<view class="top">
<image class="icon-close" :src="`${$imgUrl}common/icon-close.png`" @click="emit('cancel')"></image>
</view>
<image class="icon-success" :src="`${$imgUrl}bluetooth/device-active-success.png`"></image>
<view class="title">设备激活成功!</view>
</view>
</template>

<script setup lang="ts">
const emit = defineEmits(['cancel'])
</script>

<style lang="scss" scoped>
.main{
width: 560rpx;
padding: 25rpx 20rpx 55rpx;
text-align: center;
.top{
text-align: right;
.icon-close{
width: 48rpx;
height: 48rpx;
}
}
.icon-success{
width: 500rpx;
height: 320rpx;
margin-top: 22rpx;
}
.title{
color: #333333;
font-size: 40rpx;
font-weight: 600;
text-align: center;
margin-top: 55rpx;
}
}
</style>

+ 171
- 0
after-sale/activation-once-again/select-car.vue Целия файл

@@ -0,0 +1,171 @@
<template>
<view class="selectCar-box">
<view v-if="state.list.length>0" @click="choose(i,item)" class="item" v-for="(item,i) in state.list" :key="i">
<view class="iten-left">
<image :src="`${$imgUrl}che.png`" mode=""></image>
<text>{{item.vehiclePlate}}</text>
</view>
<view class="choose-item">
<view class="active" v-if="flag==i">
</view>
</view>
</view>
<view v-else class="flex">
暂无车辆订单信息
</view>
</view>
</template>

<script lang="ts" setup>
import {
reactive,
ref
} from "vue"
import {
navTo
} from "@/utils/utils"
import {
onLoad,
onShow
} from "@dcloudio/uni-app";
import {
orderList
} from "@/utils/network/api.js";
import {
request
} from "@/utils/network/request.js";
import {
msg
} from "@/utils/utils";
import {
getItem,
StorageKeys,
setItem
} from "@/utils/storage";
import {
stringToJson
} from "@/utils/network/encryption";

const state = reactive({
list: []
});
onLoad(() => {
quanCheckActionTrue().then((item: any) => {
state.list = item.data
console.log(item)
})
});

const quanCheckActionTrue = () => {
var data = {
opId: getItem(StorageKeys.OpenId),
source: 'WECHAT',
tabIndex: '0',
orderStep: '11',
isValueCard: '2'
};
const options = {
type: 2,
data: data,
method: "POST",
showLoading: true,
};
return new Promise(async (resolve, reject) => {
const res = await request(orderList, options);
const data = stringToJson(res.bizContent);
resolve(data);
}).catch((error) => {
reject(error);
});
}
const list = reactive([{
name: "A12345"
},
{
name: "B12345"
},
{
name: "C12345"
},
])
const flag = ref('0')

const choose = (i, item) => {
console.log(item.cardId)
navTo(`/after-sale/activation-once-again/activation-once-again?id=${item.id}`)
}
</script>

<style>
page {
width: 100%;
height: 100%;
background-color: #EEF7F7;
}
</style>
<style lang="scss" scoped>
.flex {
display: flex;
justify-content: center;
}

.selectCar-box {
// width: 100%;
height: 100%;
padding: 30rpx;

.item {
padding: 20rpx;
display: flex;
justify-content: space-between;
align-items: center;
height: 130rpx;
background: #FFFFFF;
box-shadow: 0rpx 2rpx 6rpx 0rpx rgba(223, 223, 223, 0.8);
border-radius: 20rpx;
margin-bottom: 30rpx;

.iten-left {
display: flex;
align-items: center;

image {
width: 150rpx;
height: 90rpx;

}

text {
margin-left: 20rpx;
font-size: 32rpx;
font-family: Noto Sans S Chinese;
font-weight: 400;
color: #333333;
}
}

.choose-item {
width: 44rpx;
height: 44rpx;
background: #FFFFFF;
border: 2rpx solid #00B38B;
border-radius: 50%;
margin-right: 20rpx;
display: flex;
justify-content: center;
align-items: center;
box-sizing: content-box;
}

.active {
width: 34rpx;
height: 34rpx;
background: #00B38B;
border-radius: 50%;
}

}


}
</style>

+ 419
- 238
after-sale/card-Renewal/renewal-confirm.vue Целия файл

@@ -1,248 +1,429 @@
<template>
<view class="selectCar-box">
<view class="details">
<view class="title"> 基础信息 </view>
<view class="details-item">
<view> 订单编号: </view>
<text>123234350000001</text>
</view>
<view class="details-item">
<view> 用户名称: </view>
<text>xxxxx</text>
</view>
<view class="details-item">
<view> 用户证件类型: </view>
<text>居民身份证</text>
</view>
<view class="details-item">
<view> 用户证件号: </view>
<text>44504049343434001</text>
</view>
<view class="details-item">
<view> 订单车牌号: </view>
<text style="color: #00b38b ;">贵A12345</text>
</view>
<view class="details-item">
<view> 收费车型: </view>
<text>客车</text>
</view>
</view>
<view class="title"> 卡信号 </view>
<view class="card">
<view class="card-left">
<image :src="`${$imgUrl}card2.png`" mode=""></image>
<view class="card-center">
<view class="card-center-head"> 2023022700012 </view>
<view class="tips">
<text>储蓄卡</text>
<text class="tips-card">正常</text>
</view>
</view>
</view>
<view class="choose-item"> 有效期:xxxx-xx-xx </view>
</view>
<view class="title"> OBU设备信息 </view>
<view class="card">
<view class="card-left">
<image :src="`${$imgUrl}card1.png`" mode=""></image>
<view class="card-center">
<view class="card-center-head"> 2023022700012 </view>
<view class="tips">
<!-- <text>储蓄卡</text> -->
<text class="tips-card">正常</text>
</view>
</view>
</view>
<view class="choose-item"> 有效期:xxxx-xx-xx </view>
</view>
<view class="title"> 注意事项 </view>
<view class="remark">
<view> 1.xxxxxxxx </view>
<view> 2.xxxxxxxx </view>
<view> 3.xxxxxxxx </view>
<view> 4.xxxxxxxx </view>
</view>
<button class="submit" @click="toPage">下一步</button>
</view>
<view class="selectCar-box">
<view class="details">
<view class="title"> 基础信息 </view>
<view class="details-item">
<view> 订单编号: </view>
<text>{{ orderInfos.orderId }}</text>
</view>
<view class="details-item">
<view> 用户名称: </view>
<text>{{ orderInfos.ownerName }}</text>
</view>
<view class="details-item">
<view> 用户证件类型: </view>
<text>{{ getCredentialType(orderInfos.ownerIdtype) }}</text>
</view>
<view class="details-item">
<view> 用户证件号: </view>
<text>{{ orderInfos.ownerIdnum }}</text>
</view>
<view class="details-item">
<view> 订单车牌号: </view>
<text style="color: #00b38b">{{ orderInfos.vehiclePlate }}</text>
</view>
<view class="details-item">
<view> 车牌颜色: </view>
<text style="color: #00b38b">{{
orderInfos.vehiclePlateColorStr
}}</text>
</view>
<view class="details-item">
<view> 收费车型: </view>
<text>{{ orderInfos.vehicleType }}</text>
</view>
</view>
<view class="title"> 卡信息 </view>
<view class="card">
<view class="card-left">
<image :src="`${$imgUrl}card2.png`" mode=""></image>
<view class="card-center">
<view class="card-center-head"> {{orderInfos.cardId}} </view>
<view class="tips">
<text>储蓄卡</text>
<text class="tips-card">{{getEtcCardStatus(orderInfos.cardStatus)}}</text>
</view>
<view class="choose-item"> 有效期:xxxx-xx-xx </view>
</view>
</view>

</view>
<view class="title"> OBU设备信息 </view>
<view class="card">
<view class="card-left">
<image :src="`${$imgUrl}card1.png`" mode=""></image>
<view class="card-center">
<view class="card-center-head"> {{orderInfos.obuId}} </view>
<view class="tips">
<!-- <text>储蓄卡</text> -->
<text class="tips-card">{{getObuStatus(orderInfos.obuStatus)}}</text>
</view>
<view class="choose-item"> 有效期:xxxx-xx-xx </view>
</view>
</view>
</view>
<view class="title"> 注意事项 </view>
<view class="remark">
<view> 1.xxxxxxxx </view>
<view> 2.xxxxxxxx </view>
<view> 3.xxxxxxxx </view>
<view> 4.xxxxxxxx </view>
</view>
<button class="submit" @click="toPage">下一步</button>
</view>
</template>

<script lang="ts" setup>
import { reactive, ref } from "vue";
import { navTo } from "@/utils/utils";
const toPage = () => {
navTo("/pages/bluetooth/bluetooth");
// if (flag.length == 0) {
// uni.showToast({
// title: '请至少勾选一项',
// });
// } else {
// // wx.showModal({
// // title: '设备挂失',
// // content: '请确认是否执行挂失操作',
// // success: function(res) {
// // if (res.confirm) {
// // console.log('用户点击确定');
// // navTo('/after-sale/card-loss-reporting/cardloss')
// // } else if (res.cancel) {
// // console.log('用户点击取消');
// // }
// // }
// // });
// }
};

const flag = reactive([]);
const choose = (data) => {
if (!flag.includes(data)) {
flag.push(data);
console.log(flag);
} else {
flag.splice(flag.indexOf(data), 1);
console.log(flag);
}
};
import {
reactive,
ref
} from "vue";
import {
navTo,msg
} from "@/utils/utils";
import {
onLoad,
onUnload,
onShow
} from "@dcloudio/uni-app";
import {
request
} from "@/utils/network/request.js";
import {
orderDetail,
cardRenewal,
cardStopOrStart,
deviceUpgrade
} from "@/utils/network/api.js";

import {
getCredentialType
} from "@/datas/credentialType.js";
import {
getEtcCardStatus
} from "@/datas/etcCardStatus.js";
import {
getObuStatus
} from "@/datas/obuStatus.js";

import {
stringToJson
} from "@/utils/network/encryption";
const tools = require("../../static/etcUtil/tools.js");
const bluetoothUtil = require("../../static/etcUtil/index.js");

const orderInfos = reactive({
orderId: "",
ownerName: "",
ownerIdtype: "",
ownerIdnum: "",
vehiclePlate: "",
vehiclePlateColorStr: "",
vehiclePlateColor:"",
vehicleType: "",
cardId: "",
cardStatus: "",
obuId: "",
obuStatus: "",
});

onLoad((option) => {
//请求订单详情
queryOrderDetail(option.id);
});

onShow((option) => {
uni.$on('bluetoothLink', res => {
console.log(res);
if (res.status) {
getCardRenewal()
}
//移除监听
uni.$off('bluetoothLink')
})

})

const toPage = () => {
// getCardStopOrStart()
getDeviceUpgrade()
//
// navTo("/pages/bluetooth/bluetooth?routeType=5");
// if (flag.length == 0) {
// uni.showToast({
// title: '请至少勾选一项',
// });
// } else {
// // wx.showModal({
// // title: '设备挂失',
// // content: '请确认是否执行挂失操作',
// // success: function(res) {
// // if (res.confirm) {
// // console.log('用户点击确定');
// // navTo('/after-sale/card-loss-reporting/cardloss')
// // } else if (res.cancel) {
// // console.log('用户点击取消');
// // }
// // }
// // });
// }
};

const flag = reactive([]);
//选择按钮
const choose = (data) => {
if (!flag.includes(data)) {
flag.push(data);
console.log(flag);
} else {
flag.splice(flag.indexOf(data), 1);
console.log(flag);
}
};

//获取订单详情
const queryOrderDetail = (id: string) => {
const options = {
type: 2,
data: {
id: id,
},
method: "POST",
showLoading: true,
};
request(orderDetail, options).then((res) => {
let orderInfo = JSON.parse(res.bizContent);
console.log(orderInfo);
orderInfos.orderId = orderInfo.orderId;
orderInfos.ownerName = orderInfo.ownerName;
orderInfos.ownerIdtype = orderInfo.ownerIdtype;
orderInfos.ownerIdnum = orderInfo.ownerIdnum;
orderInfos.vehiclePlate = orderInfo.vehiclePlate;
orderInfos.vehiclePlateColorStr = orderInfo.vehiclePlateColorStr;
orderInfos.vehiclePlateColor = orderInfo.vehiclePlateColor;
orderInfos.vehicleType = orderInfo.vehicleType;
orderInfos.cardId = orderInfo.cardId;
orderInfos.cardStatus = orderInfo.cardStatus;
orderInfos.obuId = orderInfo.obuId;
orderInfos.obuStatus = orderInfo.obuStatus;
});
};

//卡签续期 请求
const getCardRenewal = () => {
const options = {
type: 2,
data: {
cardId: orderInfos.cardId,
},
method: "POST",
showLoading: true,
};
request(cardRenewal, options).then((res) => {
let result = stringToJson(res.bizContent);
console.log(result);
let cmdArray = [];
tools.showLoadingAlert("正在执行指令");
bluetoothUtil.transCmd(cmdArray, "10", function(res: any) {
tools.hideLoadingAlert();
console.log(res);

})
})
}
//卡停用/启用 请求
const getCardStopOrStart = () => {
const options = {
type: 2,
data: {
cardId: orderInfos.cardId,
operation: 1,//1停用2启用
},
method: "POST",
showLoading: true,
};
request(cardStopOrStart, options).then((res) => {
let result = stringToJson(res.bizContent);
console.log(result);
// let cmdArray = [];
// tools.showLoadingAlert("正在执行指令");
// bluetoothUtil.transCmd(cmdArray, "10", function(res: any) {
// tools.hideLoadingAlert();
// console.log(res);

// })
})
};
//设备升级 请求
const getDeviceUpgrade = () => {
const options = {
type: 2,
data: {
cardId: orderInfos.cardId,
vehiclePlate: orderInfos.vehiclePlate,
expireTime:"",
customerName:orderInfos.ownerName,
customerIdNum:orderInfos.ownerIdnum,
vehiclePlateColor:orderInfos.vehiclePlateColor,
},
method: "POST",
showLoading: true,
};
request(deviceUpgrade, options).then((res) => {
let result = stringToJson(res.bizContent);
console.log(result);
// let cmdArray = [];
// tools.showLoadingAlert("正在执行指令");
// bluetoothUtil.transCmd(cmdArray, "10", function(res: any) {
// tools.hideLoadingAlert();
// console.log(res);
// })
})
}
</script>

<style>
page {
width: 100%;
height: 100%;
background-color: #fff;
}
page {
width: 100%;
height: 100%;
background-color: #fff;
}
</style>
<style lang="scss" scoped>
.selectCar-box {
// width: 100%;
// height: 100%;
padding: 30rpx;

.title {
font-size: 30rpx;
font-family: Microsoft YaHei UI;
font-weight: 400;
color: #333333;
margin-bottom: 30rpx;
}

.details {
.title {
font-size: 30rpx;
font-family: Microsoft YaHei UI;
font-weight: 400;
color: #333333;
margin-bottom: 30rpx;
}

.details-item {
display: flex;
font-size: 26rpx;
font-family: Noto Sans S Chinese;
font-weight: 400;
color: #999999;
margin-bottom: 30rpx;

text {
font-size: 26rpx;
font-family: Noto Sans S Chinese;
font-weight: 400;
color: #333333;
}
}
}

.card {
height: 150rpx;
background: #ffffff;
box-shadow: 0rpx 4rpx 13rpx 3rpx rgba(223, 223, 223, 0.8);
border-radius: 20rpx;
padding: 30rpx;
display: flex;
justify-content: space-between;
align-items: center;
margin-bottom: 60rpx;

.card-left {
display: flex;
align-items: center;

image {
width: 100rpx;
height: 90rpx;
}

.card-center {
margin-left: 30rpx;

.card-center-head {
font-size: 32rpx;
font-family: Noto Sans S Chinese;
font-weight: 400;
color: #333333;
}

.tips {
font-size: 26rpx;
font-family: Noto Sans S Chinese;
font-weight: 400;
color: #666666;

.tips-card {
width: 70rpx;
height: 40rpx;
background: #d3f2ef;
border-radius: 6rpx;
font-size: 20rpx;
font-family: Noto Sans S Chinese;
font-weight: 400;
color: #0a8f8a;
padding: 5rpx 10rpx;
margin-left: 20rpx;
}
}
}
}

.choose-item {
margin-right: 20rpx;
/* width: 50rpx; */
height: 50rpx;
/* border: 1rpx solid #00B38B; */
border-radius: 50%;
display: flex;
justify-content: center;
align-items: center;
font-size: 25rpx;
align-self: end;

.active {
width: 38rpx;
height: 38rpx;
background: #00b38b;
border-radius: 50%;
}
}
}

.remark {
font-size: 26rpx;
font-family: Microsoft YaHei UI;
font-weight: 400;
color: #666666;
text-indent: 30rpx;
margin-bottom: 30rpx;
}

.submit {
margin-top: 100rpx;
width: 670rpx;
height: 80rpx;
background: linear-gradient(-90deg, #43a1e0 0%, #13e7c1 100%);
border-radius: 40rpx;
font-size: 32rpx;
font-family: Noto Sans S Chinese;
font-weight: 400;
color: #ffffff;
line-height: 80rpx;
}
}
.selectCar-box {
// width: 100%;
// height: 100%;
padding: 30rpx;
.title {
font-size: 30rpx;
font-family: Microsoft YaHei UI;
font-weight: 400;
color: #333333;
margin-bottom: 30rpx;
}
.details {
.title {
font-size: 30rpx;
font-family: Microsoft YaHei UI;
font-weight: 400;
color: #333333;
margin-bottom: 30rpx;
}
.details-item {
display: flex;
font-size: 26rpx;
font-family: Noto Sans S Chinese;
font-weight: 400;
color: #999999;
margin-bottom: 30rpx;
text {
font-size: 26rpx;
font-family: Noto Sans S Chinese;
font-weight: 400;
color: #333333;
}
}
}
.card {
height: 150rpx;
background: #ffffff;
box-shadow: 0rpx 4rpx 13rpx 3rpx rgba(223, 223, 223, 0.8);
border-radius: 20rpx;
padding: 30rpx;
display: flex;
justify-content: space-between;
align-items: center;
margin-bottom: 60rpx;
.card-left {
display: flex;
align-items: center;
image {
width: 100rpx;
height: 90rpx;
}
.card-center {
margin-left: 30rpx;
.card-center-head {
font-size: 32rpx;
font-family: Noto Sans S Chinese;
font-weight: 400;
color: #333333;
}
.tips {
font-size: 26rpx;
font-family: Noto Sans S Chinese;
font-weight: 400;
color: #666666;
.tips-card {
width: 70rpx;
height: 40rpx;
background: #d3f2ef;
border-radius: 6rpx;
font-size: 20rpx;
font-family: Noto Sans S Chinese;
font-weight: 400;
color: #0a8f8a;
padding: 5rpx 10rpx;
margin-left: 20rpx;
}
}
}
}
.choose-item {
margin-right: 20rpx;
/* width: 50rpx; */
// height: 50rpx;
/* border: 1rpx solid #00B38B; */
border-radius: 50%;
// display: flex;
// justify-content: center;
// align-items: center;
font-size: 25rpx;
// align-self: end;
.active {
width: 38rpx;
height: 38rpx;
background: #00b38b;
border-radius: 50%;
}
}
}
.remark {
font-size: 26rpx;
font-family: Microsoft YaHei UI;
font-weight: 400;
color: #666666;
text-indent: 30rpx;
margin-bottom: 30rpx;
}
.submit {
margin-top: 100rpx;
width: 670rpx;
height: 80rpx;
background: linear-gradient(-90deg, #43a1e0 0%, #13e7c1 100%);
border-radius: 40rpx;
font-size: 32rpx;
font-family: Noto Sans S Chinese;
font-weight: 400;
color: #ffffff;
line-height: 80rpx;
}
}
</style>

+ 1
- 1
after-sale/equipment-upgrade/upgrade-confirm.vue Целия файл

@@ -85,7 +85,7 @@ import { reactive, ref } from "vue";
import { navTo } from "@/utils/utils";
const toPage = () => {
console.log(11);
navTo("/pages/bluetooth/bluetooth");
navTo("/pages/bluetooth/bluetooth?routeType=5");
// wx.showModal({
// title: '提示',
// content: '检测到当前只有ETC卡,需要办理obu设备才可以通行,是否前往办理,无需办理点击继续注销',

+ 25
- 19
datas/credentialType.js Целия файл

@@ -1,75 +1,81 @@
export const credentialType = [{
id: 101,
type: '身份证(含临时身份证)'
title: '身份证(含临时身份证)'
},
{
id: 102,
type: '护照(限外籍人士)'
title: '护照(限外籍人士)'
},
{
id: 103,
type: '港澳居民来往内地通行证'
title: '港澳居民来往内地通行证'
},
{
id: 104,
type: '台湾居民来往大陆通行证'
title: '台湾居民来往大陆通行证'
},
{
id: 105,
type: '军官证'
title: '军官证'
},
{
id: 106,
type: '武警警察身份证'
title: '武警警察身份证'
},
{
id: 113,
type: '澳门永久/非永久居民身份证'
title: '澳门永久/非永久居民身份证'
},
{
id: 114,
type: '香港永久/非永久居民身份证'
title: '香港永久/非永久居民身份证'
},
{
id: 201,
type: '统一社会信用代码证书'
title: '统一社会信用代码证书'
},
{
id: 202,
type: '组织机构代码证'
title: '组织机构代码证'
},
{
id: 203,
type: '营业执照'
title: '营业执照'
},
{
id: 204,
type: '事业单位法人证书'
title: '事业单位法人证书'
},
{
id: 205,
type: '社会团体法人登记证书'
title: '社会团体法人登记证书'
},
{
id: 206,
type: '律师事务所执业许可证'
title: '律师事务所执业许可证'
},
{
id: 217,
type: '公司商业登记副本(3个月内)'
title: '公司商业登记副本(3个月内)'
},
{
id: 218,
type: '公司营业税单M8副本'
title: '公司营业税单M8副本'
},
{
id: 219,
type: '公司营业税开业/更改M1副本'
title: '公司营业税开业/更改M1副本'
}
];

//获取证件类型名称
export const getCredentialType = (id) => {
export const getCredentialType = (id=101) => {
let types = credentialType.filter(item => item.id == id);
return types[0].type
console.log(types);
if(types.length>0){
return types[0].title
}else{
return ""
}
}

+ 1
- 1
datas/vehiclePlateColor.js Целия файл

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

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

+ 1
- 1
datas/vehicleType.js Целия файл

@@ -42,7 +42,7 @@ export const vehicleType = [
}
];
//获取车辆类型
export const getVehicleType = (id) => {
export const getVehicleType = (id=1) => {
let types = vehicleType.filter(item => item.id == id);
return types[0].title
}

+ 12
- 0
pages.json Целия файл

@@ -94,6 +94,18 @@
"navigationBarTitleText": "操作提示"
}
},
{
"path": "activation-once-again/activation-once-again",
"style": {
"navigationBarTitleText": "OBU重新激活"
}
},
{
"path": "activation-once-again/select-car",
"style": {
"navigationBarTitleText": "选择车辆"
}
},
{
"path": "reportLossCard",
"style": {

+ 7
- 3
pages/bluetooth/bluetooth.vue Целия файл

@@ -517,9 +517,13 @@ const connectSuccess = (res) => {
});
}
else if(routeType.value == "5"){
uni.navigateTo({
url: "/after-sale/card-Renewal/renewal-confirm",
});
// uni.navigateTo({
// url: "/after-sale/card-Renewal/renewal-confirm",
// });
uni.$emit('bluetoothLink',{status:true})
uni.navigateBack({
delta:1
})
}else {
return;
}

+ 1
- 1
pages/service/service.vue Целия файл

@@ -122,7 +122,7 @@
</view>
<view class="text">卡签解除挂起</view>
</view>
<view class="item-box">
<view class="item-box" @click="toNext('/after-sale/activation-once-again/select-car')">
<view class="item bg-blue" :style="{'--background':bgBlue}">
<image :src="`${$imgUrl}service/imgs/obucxjh.png`" />
</view>

+ 3
- 2
utils/network/api.js Целия файл

@@ -105,6 +105,7 @@ export const quanXf = "71"; //圈存修复V (写指令)
export const quanConfirm = "72"; //圈存确认
//卡操作
//卡操作
export const cardRenewal = "891" //ASS-卡续期
export const cardStopOrStart ="892" //ASS-卡停/启用
export const cardStopOrStart ="892" //ASS-卡停/启用
export const deviceUpgrade = "893"//BDS-设备升级接口

Loading…
Отказ
Запис