選択できるのは25トピックまでです。 トピックは、先頭が英数字で、英数字とダッシュ('-')を使用した35文字以内のものにしてください。

activate.vue 22KB

5ヶ月前
5ヶ月前
11ヶ月前
5ヶ月前
9ヶ月前
9ヶ月前
1年前
1年前
5ヶ月前
1年前
11ヶ月前
11ヶ月前
11ヶ月前
9ヶ月前
11ヶ月前
11ヶ月前
11ヶ月前
9ヶ月前
11ヶ月前
9ヶ月前
11ヶ月前
11ヶ月前
11ヶ月前
11ヶ月前
11ヶ月前
11ヶ月前
11ヶ月前
9ヶ月前
11ヶ月前
9ヶ月前
11ヶ月前
11ヶ月前
2ヶ月前
2ヶ月前
11ヶ月前
1年前
11ヶ月前
1年前
11ヶ月前
8ヶ月前
11ヶ月前
9ヶ月前
1年前
9ヶ月前
1年前
1年前
1年前
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818
  1. <template>
  2. <view class="containers">
  3. <view class="sec_info">
  4. <view class="info_txt">信息确认</view>
  5. <view class="info_plate">
  6. <text>车牌号码</text>
  7. <text>{{ fileDataStrings.vehiclePlate }}</text>
  8. </view>
  9. <view class="info_plate">
  10. <text>车牌颜色</text>
  11. <text>{{ fileDataStrings.vehiclePlateColorStr }}</text>
  12. </view>
  13. <view class="info_plate">
  14. <text>手机号码</text>
  15. <text>{{ fileDataStrings.customerTel }}</text>
  16. </view>
  17. <view class="info_plate" style="border: none" v-if="fileDataStrings.cardId">
  18. <text>卡号</text>
  19. <text>{{ fileDataStrings.cardId }}</text>
  20. </view>
  21. <view class="info_plate" v-if="fileDataStrings.obuId">
  22. <text>OBU号</text>
  23. <text>{{ fileDataStrings.obuId }}</text>
  24. </view>
  25. <view class="info_plate">
  26. <text>收费车型</text>
  27. <text>{{ fileDataStrings.vehicleClassStr }}</text>
  28. </view>
  29. </view>
  30. <view class="up_btn" v-if="state.showBtn">
  31. <button aria-disabled="true" @click="btn" v-if="!state.isSuccess" :class="state.disabled?'button':'hui'">
  32. 点击开始激活
  33. </button>
  34. <button aria-disabled="true" @click="back" v-else>
  35. 点击返回首页
  36. </button>
  37. </view>
  38. </view>
  39. <!-- 激活成功popup -->
  40. <view v-if="state.showPopup" class="mask">
  41. <piaoyi-progress-bar canvasId="progressCanvas4" :progress="state.progressNum"
  42. progressBackgroundColor="#07C160" :showText="true" textColor="#fff" :textSize="28" :height="22"
  43. :isCircular="true" :diameter="300"></piaoyi-progress-bar>
  44. </view>
  45. </template>
  46. <script setup>
  47. import {
  48. reactive,
  49. ref
  50. } from "vue";
  51. import {
  52. formatTime,
  53. formatTime2,
  54. expireDate,
  55. expireDate2,
  56. getFormatDate,
  57. msg,
  58. navTo
  59. } from "@/utils/utils";
  60. import {
  61. onLoad
  62. } from '@dcloudio/uni-app'
  63. import {
  64. getItem
  65. } from "@/utils/storage";
  66. import {requestNew} from "@/utils/network/request.js";
  67. import {
  68. IntegerToHexString,
  69. } from "@/utils/util/fileData.js";
  70. import {
  71. issueApply,issueCallback,orderDetailQuery,errorLogAdd,cardObuQuery,cardObuQueryinLog,obuFileDataDecrypt
  72. } from "@/utils/network/api";
  73. import {
  74. agentId
  75. } from "@/utils/network/difference";
  76. const cmd = require("../../../static/etcUtil/cmdConfig.js");
  77. const tools = require("../../../static/etcUtil/tools.js");
  78. const bluetoothUtil = require("../../../static/etcUtil/index.js");
  79. import activeSuccess from "./components/popup-device-active-success";
  80. const datas = require("../../../static/etcUtil/datas.js");
  81. import {
  82. getVehicleType
  83. } from "@/subpackage/after-sale/js/vehicleType.js"
  84. import {
  85. getVehiclePlateColor
  86. } from "@/datas/vehiclePlateColor";
  87. import {
  88. searchVehicleInfoQuery
  89. } from "@/subpackage/after-sale/js/publicRequest";
  90. import {
  91. decryptCardVehicleInformation
  92. } from "@/datas/publicRequest";
  93. import {
  94. channelId
  95. } from "@/utils/network/difference";
  96. const state = reactive({
  97. orderId: "",
  98. id: "",
  99. cardStatus: "",
  100. obuStatus: "",
  101. isSuccess: false, //是否激活成功
  102. showPopup: false,
  103. transfer: 0, //0 是原来的激活 1 是过户激活
  104. showBtn: true,
  105. disabled: true,
  106. progressNum:0
  107. })
  108. onLoad((option) => {
  109. //读取传入 存储的数据orderInfo
  110. let orderData = getItem("orderInfo");
  111. state.id = orderData.id;
  112. console.log(state);
  113. state.transfer = Number(option.transfer)
  114. //获取订单详情
  115. getOrderDetails(state.id);
  116. console.log("state.transfer", state.transfer, state.transfer == 0, state.transfer == 1,getItem("orderInfo"))
  117. })
  118. const card = reactive({
  119. cardId: "",
  120. cardNo: "",
  121. startTime: "",
  122. endTime: "",
  123. userName: "",
  124. userNameStr:"",
  125. idNum: "",
  126. idNumStr:"",
  127. vehiclePlate: "",
  128. vehiclePlateColor: "",
  129. color: "",
  130. colorStr:"",
  131. version: "",
  132. type: "",
  133. typeStr:"",
  134. favourable: "",
  135. favourableStr:"",
  136. money: "",
  137. v_userType: ""
  138. });
  139. const obu = reactive({
  140. obuId: "",
  141. num: "",
  142. startTime: "",
  143. endTime: "",
  144. version: "",
  145. approvedCount: "",
  146. axleCount: "",
  147. axleDistance: "",
  148. engineNum: "",
  149. type: "",
  150. typeStr:"",
  151. userType: "",
  152. userTypeStr:"",
  153. vehiclePlate: "",
  154. vehiclePlateColor: "",
  155. vehiclePlateColorStr:"",
  156. vin: "",
  157. wheelCount: "",
  158. isJH: "",
  159. isJHStr: "",
  160. outsideDimensions: "",
  161. loadStatus:""
  162. });
  163. let cmdRandNum = '';
  164. let orderInfo = {};
  165. const fileDataStrings = reactive({
  166. approvedCount: 0, //核载人数
  167. cardId: "", //卡号
  168. obuId: "", //obu号
  169. packageNum: "", //套餐编号
  170. axleCount: 0, //轴数
  171. axleDistance: "", //轴距
  172. engineNum: "", //发动机
  173. vehicleVin: "",
  174. vehicleEngineNum: "",
  175. cardStatus: "",
  176. obuStatus: "",
  177. type: 0, //类型
  178. userType: 0, //用户类型
  179. vehiclePlate: "", //车牌
  180. vehiclePlateColor: 0, //车牌颜色
  181. vehicleDimensions: "",
  182. wheelCount: 0, //车轮数
  183. vehicleIdNo: "", //车牌号
  184. vehiclePlateColorStr: "",
  185. customerTel: "",
  186. customerId: "",
  187. orderId: "",
  188. vehicleClassStr: ""
  189. });
  190. function cmdResult1() {
  191. // tools.showLoadingAlert('正在激活,请等待')
  192. state.progressNum=10
  193. const options = {
  194. type: 2, //type: 2,JSON格式提交数据(默认表单形式提交)
  195. showLoading: false,
  196. data: {
  197. orderId: orderInfo.orderNo,
  198. issueType: state.transfer ? 2 : 1, //1正常激活 2 过户激活
  199. cardId:card.cardId,
  200. obuId:obu.obuId
  201. }, //请求参数
  202. method: "POST", //提交方式(默认POST)
  203. };
  204. console.log("options==", options)
  205. //BDS-二发指令申请
  206. requestNew(issueApply, options)
  207. .then((res) => {
  208. console.log("在线激活 请求");
  209. console.log(res);
  210. const datas =res;
  211. bluetoothUtil.transCmd(datas.cmd.split(','), datas.cmdType == 'CARD' ? '10' : '20', function(res) {
  212. implementCmd(datas.transOrderId, datas.cmd, res.toString(), datas.stepNo)
  213. }, (err) => {
  214. showModals('在线激活异常')
  215. console.log("err",err)
  216. errorLog(datas.cmd,JSON.stringify(err),datas.stepNo)
  217. tools.hideLoadingAlert();
  218. state.showPopup=false
  219. state.disabled = true
  220. });
  221. })
  222. .catch((err) => {
  223. console.log(err);
  224. tools.hideLoadingAlert();
  225. state.showPopup=false
  226. state.disabled = true
  227. });
  228. }
  229. function implementCmd(transOrderId, cmd, cmdResult, stepNo) {
  230. console.log("datas.stepNo1",stepNo)
  231. state.progressNum=Number(stepNo)*10+10
  232. const options = {
  233. type: 2, //type: 2,JSON格式提交数据(默认表单形式提交)
  234. showLoading: false,
  235. data: {
  236. transOrderId, //步骤号
  237. cmd,
  238. cmdResult,
  239. stepNo,
  240. mpOpenId:getItem('mpOpenId')//公众号openid
  241. }, //请求参数
  242. method: "POST", //提交方式(默认POST)
  243. };
  244. console.log("options2222", options)
  245. //BDS-二发指令回传
  246. requestNew(issueCallback, options)
  247. .then((res) => {
  248. console.log("BDS-二发指令回传 ",res);
  249. const datas = res;
  250. console.log("在线激活 请求", datas);
  251. if (datas.stepNo == 100) {
  252. state.disabled = true
  253. tools.hideLoadingAlert();
  254. state.progressNum=100
  255. setTimeout(() => {
  256. state.showPopup=false
  257. },1000)
  258. setTimeout(() => {
  259. msg("激活成功", {
  260. 'icon': 'success',
  261. 'duration': 3000
  262. })
  263. },2000)
  264. setTimeout(() => {
  265. getCardIdCommit()
  266. },5000)
  267. } else {
  268. console.log("datas.stepNo", datas.stepNo)
  269. bluetoothUtil.transCmd(datas.cmd.split(','), datas.cmdType == 'CARD' ? '10' : '20', function(res) {
  270. implementCmd(transOrderId, datas.cmd, res.toString(), datas.stepNo)
  271. }, (err) => {
  272. console.log("err",err)
  273. state.showPopup=false
  274. state.disabled = true
  275. errorLog(datas.cmd,JSON.stringify(err),datas.stepNo)
  276. showModals('在线激活异常')
  277. });
  278. }
  279. })
  280. .catch((err) => {
  281. console.log(err);
  282. tools.hideLoadingAlert();
  283. state.showPopup=false
  284. state.disabled = true
  285. });
  286. }
  287. //开始激活 按钮事件
  288. const btn = () => {
  289. state.disabled = false
  290. state.showPopup=true
  291. console.log('orderInfo参数', orderInfo, state.disabled)
  292. cmdResult1()
  293. };
  294. //获取订单详情
  295. const getOrderDetails = (id) => {
  296. console.log('======获取订单信息======')
  297. const options = {
  298. type: 2,
  299. data: {
  300. id: id,
  301. },
  302. method: "POST",
  303. showLoading: false,
  304. };
  305. state.disabled = false
  306. requestNew(orderDetailQuery, options).then((res) => {
  307. console.log("orderInfo", res);
  308. orderInfo = res.data;
  309. console.log("orderInfores", res);
  310. if (orderInfo) {
  311. fileDataStrings.userType = orderInfo.userType; //用户类型
  312. fileDataStrings.cardId = orderInfo.cardId;
  313. fileDataStrings.packageNum = orderInfo.packageNum;
  314. fileDataStrings.obuId = orderInfo.obuId;
  315. fileDataStrings.customerTel = orderInfo.customerTel;
  316. fileDataStrings.customerId = orderInfo.customerId;
  317. fileDataStrings.orderId = orderInfo.orderNo;
  318. fileDataStrings.vehiclePlateColorStr = getVehiclePlateColor(orderInfo
  319. .vehiclePlateColor);
  320. fileDataStrings.vehiclePlate = orderInfo.vehiclePlate; //车牌
  321. fileDataStrings.vehicleClassStr = orderInfo.vehicleClassStr;
  322. }
  323. });
  324. getObuId();
  325. };
  326. /**
  327. * 获取OBU号 读OBU
  328. */
  329. const getObuId = () => {
  330. console.log('======获取OBU号======')
  331. let cmdArray = [cmd.HOME_DIRECTORY, cmd.OBU_SYSTEM_FILE, cmd.RANDOM_NUMBER];
  332. bluetoothUtil.transCmd(cmdArray, "20", function(res) {
  333. var status = res[1].substring(res[1].length - 4, res[1].length);
  334. console.log('获取OBU号执行结果' + status, res)
  335. //第一次获取随机数
  336. if (status == "9000") {
  337. state.disabled = true
  338. obu.obuId = res[1].substring(20, 36);
  339. obu.vin = res[1].substring(18, 20);
  340. obu.version = res[1].substring(18, 19) >= 4 ? "4x" : "2x";
  341. cmdRandNum = res[2].substring(0, res[2].length - 4);
  342. getCardId()
  343. } else {
  344. showModals('获取设备信息错误!')
  345. }
  346. }, () => {
  347. showModals('获取设备信息错误')
  348. });
  349. };
  350. function showModals(msg) {
  351. uni.showModal({
  352. title: '提示',
  353. content: msg,
  354. showCancel: false,
  355. success: function(res) {
  356. if (res.confirm) {
  357. uni.navigateBack()
  358. console.log('用户点击确定1');
  359. } else if (res.cancel) {
  360. console.log('用户点击取消1');
  361. }
  362. }
  363. });
  364. }
  365. const back = () => {
  366. uni.switchTab({
  367. url: "/pages/index/index"
  368. });
  369. }
  370. const getCardId = () => {
  371. //执行0015文件
  372. tools.showLoadingAlert("执行指令");
  373. let cmdArr = [cmd.HOME_DIRECTORY, cmd.APPLICATION_DIRECTORY, cmd.CMD_READBINARY, cmd.CMD_GETBALANCE];
  374. console.log(cmdArr);
  375. console.log(bluetoothUtil);
  376. bluetoothUtil.transCmd(cmdArr, '10', function(res) { //10:写卡 20:写OBU
  377. console.log("5201",res)
  378. let str = res[2].substring(res[2].length - 4, res[2].length); //判断是否为9000
  379. let str3 = res[3].substring(res[3].length - 4, res[3].length); //判断是否为9000
  380. if (str == "9000" || str3 == "9000") {
  381. if (res[2].length > 86 || res[3] >= 12) {
  382. card.cardId = res[2].substring(20, 40);
  383. tools.hideLoadingAlert();
  384. state.showBtn = true
  385. } else {
  386. alertF("CMD_READBINARY指令长度不符" + res[2]);
  387. }
  388. return;
  389. }
  390. alertF("CMD_READBINARY指令长度不符" + res[2]);
  391. })
  392. };
  393. const errorLog = (cmd,error,step) => {
  394. console.log('激活异常提交')
  395. const options = {
  396. type: 2,
  397. data: {
  398. cardId:card.cardId,
  399. obuId:obu.obuId,
  400. orderType:"1",
  401. factory:datas.getData("deviceName")+"_"+datas.getData("deviceNameZW"),
  402. orderNo:orderInfo.orderNo,
  403. cmd,
  404. error,
  405. step
  406. },
  407. method: "POST",
  408. showLoading: false,
  409. };
  410. requestNew(errorLogAdd, options).then((res) => {
  411. console.log("错误提交成功", res);
  412. });
  413. };
  414. /**
  415. * 获取卡号
  416. */
  417. const getCardIdCommit = () => {
  418. //执行0015文件
  419. tools.showLoadingAlert("执行指令");
  420. let cmdArr = [cmd.HOME_DIRECTORY, cmd.APPLICATION_DIRECTORY, cmd.CMD_READBINARY, cmd.CMD_GETBALANCE];
  421. console.log(cmdArr);
  422. console.log(bluetoothUtil);
  423. bluetoothUtil.transCmd(cmdArr, '10', function(res) { //10:写卡 20:写OBU
  424. console.log("5201",res)
  425. let str = res[2].substring(res[2].length - 4, res[2].length); //判断是否为9000
  426. let str3 = res[3].substring(res[3].length - 4, res[3].length); //判断是否为9000
  427. if (str == "9000" || str3 == "9000") {
  428. if (res[2].length > 86 || res[3] >= 12) {
  429. console.log("res[2]", res[2].substring(84, 86), getVehiclePlateColor(parseInt(res[2]
  430. .substring(82, 84), 16)), res[2].substring(18, 19))
  431. card.cardNo = res[2].substring(20, 40);
  432. card.startTime = res[2].substring(40, 48);
  433. card.endTime = res[2].substring(48, 56);
  434. card.version = res[2].substring(18, 20);
  435. card.money = res[3].substring(0, 8);
  436. card.v_userType = parseInt(res[2].substring(80, 82), 16);
  437. console.log("card.v_userType", card.v_userType)
  438. decryptCardVehicleInformation(res[2].substring(56, 80), function (res) {
  439. card.vehiclePlate =res;
  440. });
  441. console.log("res[2].substring(18, 19)",res[2].substring(18, 20))
  442. if (res[2].substring(18, 19) >= 4) {
  443. //4x卡
  444. card.type = parseInt(res[2].substring(84, 86), 16);
  445. card.typeStr = getVehicleType(parseInt(res[2].substring(84, 86), 16));
  446. card.color = parseInt(res[2].substring(82, 84), 16)
  447. card.colorStr = getVehiclePlateColor(parseInt(res[2].substring(82, 84), 16))
  448. } else {
  449. //2x卡--获取车牌颜色
  450. card.type = "--";
  451. card.color =parseInt(res[2].substring(82, 84), 16)
  452. card.colorStr = getVehiclePlateColor(parseInt(res[2].substring(82, 84), 16))
  453. card.typeStr = getVehicleType(parseInt(res[2].substring(84, 86), 16));
  454. }
  455. state.vehicleId = card.vehiclePlate + "_" + parseInt(res[2].substring(82, 84), 16)
  456. // 读卡信息
  457. //执行0016文件
  458. let arr = [cmd.HOME_DIRECTORY, cmd.PERSONAL_INFORMATION]
  459. bluetoothUtil.transCmd(arr, '10', function(res) {
  460. let str2 = res[1].substring(res[1].length - 4, res[1].length);
  461. if (str2 == "9000") {
  462. if (res[1].length > 108) {
  463. console.log("res====",res)
  464. decryptCardVehicleInformation(res[1].substring(4, 44), function (res) {
  465. card.userName = res; //姓名
  466. card.userNameStr = card.userName[0] + '*'.repeat(card.userName.length - 1)
  467. });
  468. decryptCardVehicleInformation(res[1].substring(44, 108), function (res) {
  469. card.idNum = res; //身份证号码
  470. card.idNumStr=res.replace(/^\d{14}/,'**************')
  471. });
  472. //获取是否有优惠
  473. let cmdArr3 = [cmd.HOME_DIRECTORY, cmd.APPLICATION_DIRECTORY, cmd
  474. .CMD_00B08E0000
  475. ];
  476. bluetoothUtil.transCmd(cmdArr3, '10', function(res) {
  477. let str3 = res[2].substring(res[2].length - 4, res[2]
  478. .length);
  479. if (str3 == "9000") {
  480. if (res[2].length > 131) {
  481. let _str = parseInt(res[2].substring(129, 130),
  482. 16);
  483. card.favourable=_str
  484. switch (_str) {
  485. case 0:
  486. card.favourableStr = "否";
  487. break;
  488. case 1:
  489. card.favourableStr = "是";
  490. break;
  491. default:
  492. card.favourableStr = '未知' + "_" + _str;
  493. break;
  494. }
  495. //回调读取OBU指令
  496. getObuIdCommit()
  497. tools.hideLoadingAlert();
  498. } else {
  499. alertF("CMD_00B08E0000指令长度不符" + res[2]);
  500. }
  501. return;
  502. }
  503. alertF(cmd.PERSONAL_INFORMATION + "_" + str);
  504. })
  505. } else {
  506. alertF("PERSONAL_INFORMATION指令长度不符" + res[1]);
  507. }
  508. return;
  509. }
  510. alertF("PERSONAL_INFORMATION指令长度不符" + res[1]);
  511. })
  512. } else {
  513. alertF("CMD_READBINARY指令长度不符" + res[2]);
  514. }
  515. return;
  516. }
  517. alertF("CMD_READBINARY指令长度不符" + res[2]);
  518. })
  519. };
  520. /**
  521. * 获取OBU号
  522. */
  523. const getObuIdCommit = () => {
  524. tools.showLoadingAlert("执行指令");
  525. let cmdArr = [cmd.HOME_DIRECTORY, cmd.OBU_SYSTEM_FILE];
  526. bluetoothUtil.transCmd(cmdArr, '20', function(res) {
  527. let str = res[1].substring(res[1].length - 4, res[1].length);
  528. if (str == "9000") {
  529. if (res[1].length > 52) {
  530. obu.num = res[1].substring(20, 36);
  531. obu.startTime = res[1].substring(36, 44);
  532. obu.endTime = res[1].substring(44, 52);
  533. obu.version = res[1].substring(18, 20);
  534. obu.isJH = res[1].substring(53, 54)
  535. obu.isJHStr = res[1].substring(53, 54) == "1" ? "是" : res[1].substring(53, 54) == "0" ?
  536. "否" : "其他:" + res[1].substring(53, 54);
  537. obu.loadStatus=res[1].substring(52, 54)=='01'?'正常':'已拆卸',
  538. console.log("开始执行车辆信息识读");
  539. let rand = res[1].substring(18, 20) >= 50?'40':'00';
  540. var arr = [cmd.OBU_DF01, '00B400000A000000000000000045'+ rand];
  541. bluetoothUtil.transCmd(arr, '20', function(res) {
  542. console.log(res);
  543. console.log("开始执行车辆信息识读成功");
  544. let str2 = res[1].substring(res[1].length - 4, res[1].length);
  545. let obuVersion = res[1].substring(18, 20);
  546. let keyIndex = obuVersion > 50 ? '40' : '00';
  547. let reqType = '00';
  548. let proviceCode = '5201';
  549. if (str2 == "9000") {
  550. console.log("===========", obu.num, res[1].substring(0, res[1].length - 4))
  551. decryptObuVehicleInfo(obu.num, res[1].substring(0, res[1].length - 4),
  552. obuVersion, rand, reqType, proviceCode,
  553. function(res) {
  554. obu.approvedCount = res.approvedCount;
  555. obu.axleCount = res.axleCount;
  556. obu.axleDistance = res.axleDistance;
  557. obu.engineNum = res.engineNumber.replace(/\u0000/g, '');
  558. obu.type = res.collectionType;
  559. obu.typeStr = getVehicleType(res.collectionType);
  560. obu.userType = res.userType;
  561. if(res.userType == 0){
  562. obu.userTypeStr = "普通车" ;
  563. }else if(res.userType == 6){
  564. obu.userTypeStr = "公务车" ;
  565. }
  566. obu.vehiclePlate = res.vehiclePlate.replace(/\u0000/g, '');
  567. //获取车牌颜色
  568. obu.vehiclePlateColor = res.vehiclePlateColor;
  569. obu.vehiclePlateColorStr = getVehiclePlateColor(res.vehiclePlateColor);
  570. obu.vin = res.vin.replace(/\u0000/g, '');
  571. obu.wheelCount = res.wheelsCount;
  572. obu.outsideDimensions = res.carLong + "x" + res.carWidth + "x" + res.carHeight
  573. getObuList();
  574. tools.hideLoadingAlert();
  575. });
  576. //断开蓝牙
  577. bluetoothUtil.disconnectDevice();
  578. tools.showToastAlert("蓝牙已断开");
  579. console.log('蓝牙已断开=========')
  580. return;
  581. }
  582. alertF("OBU_00B400000A+rand+OBU_4F00指令长度不符" + res[1]);
  583. })
  584. } else {
  585. alertF("OBU_SYSTEM_FILE指令长度不符" + res[1]);
  586. }
  587. return;
  588. }
  589. alertF("OBU_SYSTEM_FILE指令长度不符" + res[1]);
  590. })
  591. };
  592. const getObuList = () => {
  593. var data = {
  594. obuId: obu.num,
  595. cardId:card.cardNo,
  596. };
  597. const options = {
  598. type: 2,
  599. data: data,
  600. method: "POST",
  601. showLoading: true,
  602. };
  603. requestNew(cardObuQuery, options).then((res) => {
  604. tools.hideLoadingAlert();
  605. let result = res;
  606. state.obuStatus = result.obuStatus?result.obuStatus:""
  607. state.cardStatus = result.cardStatus
  608. if (result.cardType == 1 && result.debitType == 1) {
  609. state.cardTypeName = "预存卡"
  610. card['cardTypeName']=3
  611. } else if (result.cardType == 2) {
  612. state.cardTypeName = "储值卡"
  613. card['cardTypeName']=2
  614. } else {
  615. state.cardTypeName = "记账卡"
  616. card['cardTypeName']=1
  617. }
  618. // 卡签提交得信息
  619. card['cardStatus']=result.cardStatus
  620. obu['obuStatus']=result.obuStatus?result.obuStatus:""
  621. cardObuMsgUp()
  622. })
  623. }
  624. // 签信息提交日志记录
  625. const cardObuMsgUp = () => {
  626. var data = {
  627. cardLogInfo: card,
  628. obuLogInfo:obu,
  629. type:"active"
  630. };
  631. const options = {
  632. type: 2,
  633. data: data,
  634. method: "POST",
  635. showLoading: true,
  636. };
  637. requestNew(cardObuQueryinLog, options).then((res) => {
  638. tools.hideLoadingAlert();
  639. navTo(`/subpackage/after-sale/activation/result`)
  640. console.log("提交成功")
  641. })
  642. }
  643. /**
  644. * 解密OBU车辆信息
  645. */
  646. const decryptObuVehicleInfo = (num, data,obuVersion, keyIndex, reqType, proviceCode, func) => {
  647. const options = {
  648. type: 2,
  649. data: {
  650. contractSN: num,
  651. cipherData: data,
  652. reqType: reqType,
  653. keyIndex: keyIndex,
  654. proviceCode: proviceCode
  655. },
  656. method: "POST",
  657. showLoading: true,
  658. };
  659. requestNew(obuFileDataDecrypt, options).then((res) => {
  660. console.log("obuFileDataDecrypt",res)
  661. const data =res
  662. func(data)
  663. });
  664. };
  665. </script>
  666. <style>
  667. .containers {
  668. height: 100%;
  669. display: flex;
  670. flex-direction: column;
  671. align-items: center;
  672. justify-content: space-between;
  673. box-sizing: border-box;
  674. }
  675. .sec_info {
  676. width: 90%;
  677. height: auto;
  678. margin: 0 auto;
  679. box-shadow: 0rpx 6rpx 25rpx 0rpx rgba(0, 0, 0, 0.2);
  680. margin-top: 50rpx;
  681. border-radius: 20rpx;
  682. }
  683. .info_txt {
  684. width: 100%;
  685. height: 120rpx;
  686. line-height: 120rpx;
  687. text-align: center;
  688. color: #000;
  689. font-size: 36rpx;
  690. margin-bottom: 20rpx;
  691. }
  692. .info_plate {
  693. display: flex;
  694. flex-direction: row;
  695. width: 94%;
  696. height: 100rpx;
  697. margin: 0 auto;
  698. border-bottom: 2rpx solid #f2f2f2;
  699. }
  700. .info_plate text:nth-child(1) {
  701. height: 100rpx;
  702. text-align: left;
  703. line-height: 100rpx;
  704. font-size: 32rpx;
  705. color: #999;
  706. }
  707. .info_plate text:nth-child(2) {
  708. flex: 1;
  709. height: 100rpx;
  710. line-height: 100rpx;
  711. font-size: 32rpx;
  712. color: #333;
  713. margin-left: 50rpx;
  714. text-align: right;
  715. }
  716. /*提交按钮样式*/
  717. .up_btn {
  718. width: 85%;
  719. height: 100rpx;
  720. margin: 0 auto;
  721. margin-top: 50rpx;
  722. margin-bottom: 100rpx;
  723. }
  724. .up_btn button {
  725. width: 100%;
  726. height: 80rpx;
  727. line-height: 80rpx;
  728. color: white;
  729. font-size: 32rpx;
  730. text-align: center;
  731. background: linear-gradient(to right,#01243A,#004576);
  732. border-radius: 40rpx;
  733. outline: none;
  734. border: #4cd95f;
  735. }
  736. .button {
  737. width: 100%;
  738. height: 80rpx;
  739. line-height: 80rpx;
  740. color: white;
  741. font-size: 32rpx;
  742. text-align: center;
  743. background: linear-gradient(to left, #43a1e0 0%, #13e7c1 100%);
  744. border-radius: 40rpx;
  745. outline: none;
  746. border: #4cd95f;
  747. }
  748. .hui {
  749. width: 100%;
  750. height: 80rpx;
  751. line-height: 80rpx;
  752. color: white;
  753. font-size: 32rpx;
  754. text-align: center;
  755. background: linear-gradient(to left, #b9b9b9 0%, #e7e7e7 100%) !important;
  756. border-radius: 40rpx;
  757. outline: none;
  758. border: #4cd95f;
  759. }
  760. .up_btn button[disabled] {
  761. background-color: rgba(0, 191, 112, 0.5);
  762. color: white;
  763. font-size: 34rpx;
  764. border-radius: 20rpx;
  765. }
  766. .mask{
  767. width: 100%;
  768. height:100vh;
  769. background:rgba(0,0,0,0.63);
  770. position: fixed;
  771. left: 0;
  772. top: 0;
  773. right: 0;
  774. bottom: 0;
  775. z-index: 999;
  776. display: flex;
  777. align-items: center;
  778. justify-content: center;
  779. }
  780. </style>