Ви не можете вибрати більше 25 тем Теми мають розпочинатися з літери або цифри, можуть містити дефіси (-) і не повинні перевищувати 35 символів.

2 роки тому
11 місяці тому
11 місяці тому
2 роки тому
2 роки тому
2 роки тому
2 роки тому
2 роки тому
1 рік тому
2 роки тому
2 роки тому
2 роки тому
2 роки тому
2 роки тому
2 роки тому
2 роки тому
2 роки тому
2 роки тому
2 роки тому
1 рік тому
2 роки тому
1 рік тому
1 рік тому
11 місяці тому
11 місяці тому
2 роки тому
11 місяці тому
1 рік тому
2 роки тому
2 роки тому
1 рік тому
2 роки тому
1 рік тому
1 рік тому
2 роки тому
1 рік тому
2 роки тому
2 роки тому
2 роки тому
2 роки тому
2 роки тому
1 рік тому
2 роки тому
11 місяці тому
11 місяці тому
11 місяці тому
11 місяці тому
11 місяці тому
11 місяці тому
11 місяці тому
11 місяці тому
11 місяці тому
11 місяці тому
11 місяці тому
11 місяці тому
11 місяці тому
11 місяці тому
2 роки тому
11 місяці тому
11 місяці тому
1 рік тому
2 роки тому
11 місяці тому
2 роки тому
2 роки тому
1 рік тому
2 роки тому
11 місяці тому
11 місяці тому
1 рік тому
2 роки тому
11 місяці тому
2 роки тому
1 рік тому
2 роки тому
1 рік тому
2 роки тому
11 місяці тому
2 роки тому
11 місяці тому
2 роки тому
11 місяці тому
2 роки тому
11 місяці тому
2 роки тому
1 рік тому
11 місяці тому
11 місяці тому
1 рік тому
2 роки тому
11 місяці тому
2 роки тому
11 місяці тому
2 роки тому
1 рік тому
1 рік тому
2 роки тому
1 рік тому
2 роки тому
11 місяці тому
2 роки тому
11 місяці тому
2 роки тому
11 місяці тому
2 роки тому
2 роки тому
2 роки тому
11 місяці тому
2 роки тому
1 рік тому
2 роки тому
11 місяці тому
2 роки тому
1 рік тому
2 роки тому
1 рік тому
2 роки тому
1 рік тому
2 роки тому
11 місяці тому
2 роки тому
11 місяці тому
2 роки тому
1 рік тому
1 рік тому
2 роки тому
1 рік тому
2 роки тому
11 місяці тому
2 роки тому
11 місяці тому
2 роки тому
1 рік тому
2 роки тому
1 рік тому
2 роки тому
11 місяці тому
1 рік тому
2 роки тому
1 рік тому
1 рік тому
1 рік тому
1 рік тому
2 роки тому
11 місяці тому
2 роки тому
1 рік тому
2 роки тому
11 місяці тому
2 роки тому
11 місяці тому
2 роки тому
2 роки тому
1 рік тому
2 роки тому
1 рік тому
1 рік тому
1 рік тому
1 рік тому
1 рік тому
11 місяці тому
1 рік тому
1 рік тому
2 роки тому
1 рік тому
1 рік тому
1 рік тому
1 рік тому
11 місяці тому
1 рік тому
11 місяці тому
1 рік тому
1 рік тому
1 рік тому
1 рік тому
1 рік тому
1 рік тому
1 рік тому
1 рік тому
1 рік тому
1 рік тому
1 рік тому
1 рік тому
1 рік тому
11 місяці тому
1 рік тому
11 місяці тому
1 рік тому
2 роки тому
11 місяці тому
11 місяці тому
11 місяці тому
11 місяці тому
11 місяці тому
2 роки тому
1 рік тому
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314
  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">
  18. <text>卡号</text>
  19. <text>{{ fileDataStrings.cardId }}</text>
  20. </view>
  21. <view class="info_plate">
  22. <text>OBU号</text>
  23. <text>{{ fileDataStrings.obuId }}</text>
  24. </view>
  25. </view>
  26. <view class="up_btn" v-if="state.showBtn">
  27. <button aria-disabled="true" @click="btn" v-if="!state.isSuccess" :disabled="!state.disabled"
  28. :class="state.disabled?'button':'hui'">
  29. 点击开始激活
  30. </button>
  31. <button aria-disabled="true" @click="back" v-else>
  32. 点击返回首页
  33. </button>
  34. </view>
  35. </view>
  36. <!-- 激活成功popup -->
  37. <u-popup v-model="state.showPopup" mode="center">
  38. <active-success @cancel="state.showPopup = false"></active-success>
  39. </u-popup>
  40. </template>
  41. <script setup>
  42. import {
  43. reactive,
  44. ref
  45. } from "vue";
  46. import {
  47. formatTime,
  48. formatTime2,
  49. expireDate,
  50. expireDate2,
  51. getFormatDate,
  52. msg
  53. } from "@/utils/utils";
  54. import {
  55. onLoad
  56. } from '@dcloudio/uni-app'
  57. import {
  58. getItem
  59. } from "@/utils/storage";
  60. import {
  61. request
  62. } from "@/utils/network/request.js";
  63. import {
  64. IntegerToHexString,
  65. AsciToHexString,
  66. } from "@/utils/util/fileData.js";
  67. import {
  68. stringToJson
  69. } from "@/utils/network/encryption.js";
  70. import * as IFCODE from "@/utils/network/api.js";
  71. import {
  72. agentId
  73. } from "@/utils/network/difference";
  74. const cmd = require("../../../static/etcUtil/cmdConfig.js");
  75. const tools = require("../../../static/etcUtil/tools.js");
  76. const bluetoothUtil = require("../../../static/etcUtil/index.js");
  77. import activeSuccess from "./components/popup-device-active-success";
  78. import {
  79. getVehiclePlateColor
  80. } from "@/datas/vehiclePlateColor";
  81. import {
  82. searchVehicleInfoQuery
  83. } from "@/utils/publicRequest";
  84. import {
  85. channelId
  86. } from "@/utils/network/difference";
  87. const state = reactive({
  88. orderId: "",
  89. id: "",
  90. cardStatus: "",
  91. obuStatus: "",
  92. isSuccess: false, //是否激活成功
  93. showPopup: false,
  94. transfer: 0, //0 是原来的激活 1 是过户激活
  95. showBtn: true,
  96. disabled: true
  97. })
  98. let snums = 0
  99. onLoad((option) => {
  100. //读取传入 存储的数据orderInfo
  101. let orderData = getItem("orderInfo");
  102. state.id = orderData.id;
  103. state.orderId = orderData.orderId;
  104. console.log(state);
  105. state.transfer = Number(option.transfer)
  106. //获取订单详情
  107. getOrderDetails(state.id);
  108. console.log("state.transfer", state.transfer, state.transfer == 0, state.transfer == 1)
  109. })
  110. const card = reactive({
  111. cardId: "",
  112. netId: "",
  113. cardType: "",
  114. startTime: "",
  115. endTime: "",
  116. userName: "",
  117. idNum: "",
  118. vehiclePlate: "",
  119. vehiclePlateColor: "",
  120. color: "",
  121. version: "",
  122. type: "",
  123. favourable: "",
  124. money: "",
  125. v_userType: "",
  126. });
  127. const obu = reactive({
  128. obuId: "",
  129. startTime: "",
  130. endTime: "",
  131. version: "",
  132. approvedCount: "",
  133. axleCount: "",
  134. axleDistance: "",
  135. engineNum: "",
  136. type: "",
  137. userType: "",
  138. contractNo: "",
  139. vehiclePlate: "",
  140. vehiclePlateColor: "",
  141. vin: "",
  142. wheelCount: 0,
  143. isJH: ""
  144. });
  145. let cmdRandNum = '';
  146. let orderInfo = {};
  147. const fileDataStrings = reactive({
  148. approvedCount: 0, //核载人数
  149. cardId: "", //卡号
  150. obuId: "", //obu号
  151. obuId: "", //obu号
  152. packageNum: "", //套餐编号
  153. axleCount: 0, //轴数
  154. axleDistance: "", //轴距
  155. engineNum: "", //发动机
  156. vehicleVin: "",
  157. vehicleEngineNum: "",
  158. cardStatus: "",
  159. obuStatus: "",
  160. type: 0, //类型
  161. userType: 0, //用户类型
  162. vehiclePlate: "", //车牌
  163. vehiclePlateColor: 0, //车牌颜色
  164. vehicleDimensions: "",
  165. wheelCount: 0, //车轮数
  166. vehicleIdNo: "", //车牌号
  167. vehiclePlateColorStr: "",
  168. customerTel: "",
  169. customerId: "",
  170. orderId: ""
  171. });
  172. function cmdResult() {
  173. const options = {
  174. type: 2, //type: 2,JSON格式提交数据(默认表单形式提交)
  175. data: {
  176. orderId: orderInfo.orderId,
  177. issueType: state.transfer?2:1 //1正常激活 2 过户激活
  178. }, //请求参数
  179. method: "POST", //提交方式(默认POST)
  180. showLoading: true, //是否显示加载中(默认显示)
  181. };
  182. console.log("options==",options)
  183. //BDS-二发指令申请
  184. request('4b001421f5354c248a7759971881b52f', options)
  185. .then((res) => {
  186. tools.hideLoadingAlert();
  187. console.log("在线激活 请求");
  188. console.log(stringToJson(res.bizContent));
  189. const datas = stringToJson(res.bizContent).data;
  190. tools.showLoadingAlert("执行指令");
  191. console.log("datas===",datas)
  192. let cmdArray = datas.cmd.split(',');
  193. console.log("cmdArray",cmdArray)
  194. bluetoothUtil.transCmd(cmdArray, datas.cmdType=='CARD'?'10':'20', function(res) {
  195. console.log("res申请",res)
  196. implementCmd(datas.transOrderId,datas.cmd,res,datas.stepNo)
  197. }, () => {
  198. showModals('在线激活异常')
  199. });
  200. })
  201. .catch((err) => {
  202. console.log(err);
  203. });L
  204. }
  205. function implementCmd(transOrderId, cmd, cmdResult, stepNo) {
  206. const options = {
  207. type: 2, //type: 2,JSON格式提交数据(默认表单形式提交)
  208. data: {
  209. transOrderId, //步骤号
  210. cmd,
  211. cmdResult,
  212. stepNo
  213. }, //请求参数
  214. method: "POST", //提交方式(默认POST)
  215. showLoading: true, //是否显示加载中(默认显示)
  216. };
  217. console.log("options2222",options)
  218. //BDS-二发指令回传
  219. request('88d98f2db7df4f06b22d58b507db7854', options)
  220. .then((res) => {
  221. tools.hideLoadingAlert();
  222. console.log(stringToJson(res.bizContent));
  223. const datas = stringToJson(res.bizContent).data;
  224. console.log("在线激活 请求",datas);
  225. tools.showLoadingAlert("执行指令");
  226. if (datas.stepNo == 100) {
  227. msg("激活成功")
  228. setTimeout(() => {
  229. uni.navigateTo({
  230. url: "/subpackage/after-sale/deviceInfo/deviceInfo",
  231. });
  232. }, 2000)
  233. } else {
  234. let cmdArray1 = datas.cmd.split(',');
  235. bluetoothUtil.transCmd(cmdArray1, datas.cmdType=='CARD'?'10':'20', function(res) {
  236. implementCmd(transOrderId,datas.cmd,res,stepNo)
  237. }, () => {
  238. showModals('在线激活异常')
  239. });
  240. }
  241. })
  242. .catch((err) => {
  243. console.log(err);
  244. });
  245. }
  246. //开始激活 按钮事件
  247. const btn = () => {
  248. state.disabled = false
  249. console.log('orderInfo参数', orderInfo, state.disabled)
  250. cmdResult()
  251. // //0 是原来的激活 1 是过户激活
  252. // if (state.transfer) {
  253. // // 获取cardId
  254. // getCardId()
  255. // // 过户激活 1
  256. // // 1. 过户激活申请 2.设备升级 3.过户升级(跟过户升级一样) 4.79(BDS-安装申请)(后台数据)-
  257. // // >76(VFJ-OBU在线激活)(指令接口)->80(BDS-安装确认)->73(BDS-卡签绑定)(指令接口)->51(BDS-写卡指令返回)(指令接口)
  258. // } else {
  259. // console.log("=================================")
  260. // if (orderInfo) {
  261. // //根据订单详情走相应的断步功能
  262. // const cardId = orderInfo.cardId;
  263. // const cardStatus = orderInfo.cardStatus != null ? orderInfo.cardStatus : '0'
  264. // const obuId = orderInfo.obuId;
  265. // const obuStatus = orderInfo.obuStatus != null ? orderInfo.obuStatus : '9'
  266. // console.log('当前卡签状态', cardId, obuId, cardStatus, obuStatus)
  267. // console.log('输出内容', obu.obuId, '=======', fileDataStrings.obuId, obu.obuId != fileDataStrings.obuId)
  268. // if (fileDataStrings.obuId) {
  269. // if (obu.obuId + '' != fileDataStrings.obuId + '') {
  270. // tools.showModalAlert("订单设备号信息与当前设备号信息不符!");
  271. // return
  272. // }
  273. // }
  274. // if (!cardId) { //卡发行
  275. // getCardId()
  276. // } else if (cardId && cardStatus == '0') { //卡发行
  277. // getCardId()
  278. // } else if (!obuId) { //OBU发行
  279. // getObuApply();
  280. // } else if (obuId && obuStatus == '9') { //OBU发行
  281. // getObuApply();
  282. // } else if (cardId && obuId && (obuStatus == '1' || obuStatus == '11' || obuStatus == '0')) {
  283. // getInstallApply(); //激活
  284. // } else {
  285. // getCardId()
  286. // }
  287. // }
  288. // }
  289. };
  290. //获取订单详情
  291. const getOrderDetails = (id) => {
  292. console.log('======获取订单信息======')
  293. const options = {
  294. type: 2,
  295. data: {
  296. id: id,
  297. },
  298. method: "POST",
  299. showLoading: true,
  300. };
  301. state.disabled = false
  302. request(IFCODE.orderDetail, options).then((res) => {
  303. orderInfo = JSON.parse(res.bizContent);
  304. console.log("orderInfo", orderInfo);
  305. console.log("orderInfores", res);
  306. if (orderInfo) {
  307. fileDataStrings.userType = orderInfo.userType; //用户类型
  308. fileDataStrings.cardId = orderInfo.cardId;
  309. fileDataStrings.packageNum = orderInfo.packageNum;
  310. fileDataStrings.obuId = orderInfo.obuId;
  311. fileDataStrings.customerTel = orderInfo.customerTel;
  312. fileDataStrings.customerId = orderInfo.customerId;
  313. fileDataStrings.orderId = orderInfo.orderId;
  314. fileDataStrings.vehiclePlateColorStr = getVehiclePlateColor(orderInfo
  315. .vehiclePlateColor);
  316. fileDataStrings.vehiclePlate = orderInfo.vehiclePlate; //车牌
  317. // let vehicleId = orderInfo.vehiclePlate + "_" + orderInfo.vehiclePlateColor
  318. // searchVehicleInfoQuery(vehicleId).then((orderInfo) => {
  319. // console.log("orderInfo1111", orderInfo)
  320. // fileDataStrings.approvedCount = parseInt(orderInfo.approvedCount); //核载人数
  321. // fileDataStrings.vehicleVin = orderInfo.vin;
  322. // fileDataStrings.vehicleEngineNum = orderInfo.engineNum;
  323. // fileDataStrings.axleCount = parseInt(orderInfo.axleCount); //轴数
  324. // fileDataStrings.engineNum = orderInfo.engineNum; //发动机
  325. // fileDataStrings.type = parseInt(orderInfo.type); //类型
  326. // fileDataStrings.vehiclePlate = orderInfo.vehiclePlate; //车牌
  327. // fileDataStrings.vehiclePlateColor = orderInfo.vehiclePlateColor; //车牌颜色
  328. // console.log("车辆信息", orderInfo)
  329. // fileDataStrings.vehicleDimensions = orderInfo.vehicleDimensions;
  330. // fileDataStrings.vehicleIdNo = orderInfo.vehicleEngineNum; //车编号
  331. // fileDataStrings.vehiclePlateColorStr = getVehiclePlateColor(orderInfo
  332. // .vehiclePlateColor);
  333. // console.log("fileDataStrings", fileDataStrings);
  334. // })
  335. cancelOrderRequest(orderInfo.orderId)
  336. }
  337. });
  338. getObuId();
  339. };
  340. //更换设备 去注销前订单的 卡签
  341. const cancelOrderRequest = (orderId) => {
  342. console.log('======更换设备 去注销前订单的 卡签 ======')
  343. const options = {
  344. type: 2,
  345. data: {
  346. orderId: orderId,
  347. },
  348. method: "POST",
  349. showLoading: true,
  350. };
  351. request(IFCODE.cancelOrderApi, options).then((res) => {
  352. })
  353. }
  354. /**
  355. * 获取OBU号 读OBU
  356. */
  357. const getObuId = () => {
  358. console.log('======获取OBU号======')
  359. let cmdArray = [cmd.HOME_DIRECTORY, cmd.OBU_SYSTEM_FILE, cmd.RANDOM_NUMBER];
  360. tools.showLoadingAlert("正在执行指令");
  361. bluetoothUtil.transCmd(cmdArray, "20", function(res) {
  362. tools.hideLoadingAlert();
  363. var status = res[1].substring(res[1].length - 4, res[1].length);
  364. console.log('获取OBU号执行结果' + status, res)
  365. //第一次获取随机数
  366. if (status == "9000") {
  367. state.disabled = true
  368. obu.obuId = res[1].substring(20, 36);
  369. console.log(containsEnglishCharacters(card.obuId), '获取OBU号执行结果=========' + obu.obuId)
  370. obu.vin = res[1].substring(18, 20);
  371. obu.version = res[1].substring(18, 19) >= 4 ? "4x" : "2x";
  372. cmdRandNum = res[2].substring(0, res[2].length - 4);
  373. state.showBtn = true
  374. } else {
  375. showModals('获取设备信息错误!')
  376. }
  377. }, () => {
  378. showModals('获取设备信息错误')
  379. });
  380. };
  381. //获取fileData
  382. const getFileData = (fun) => {
  383. searchVehicleInfoQuery(orderInfo.vehiclePlate + "_" + orderInfo.vehiclePlateColor, cmdRandNum).then((
  384. orderInfo) => {
  385. console.log("orderInfo==", orderInfo, orderInfo.fileData)
  386. fun(orderInfo.fileData);
  387. })
  388. };
  389. function containsEnglishCharacters(str) {
  390. // // 使用正则表达式匹配英文字母
  391. // const regex = /[a-zA-Z]/;
  392. // return regex.test(str);
  393. // 使用正则表达式匹配纯数字
  394. const regex = /^\d+$/;
  395. return regex.test(str);
  396. }
  397. /**
  398. * 获取卡号 读卡
  399. */
  400. const getCardId = () => {
  401. console.log('======获取卡信息======')
  402. let cmdArr = [
  403. cmd.HOME_DIRECTORY,
  404. //选择主目
  405. cmd.APPLICATION_DIRECTORY,
  406. //选择文件1001--DF01联网收费应用目录
  407. cmd.CMD_READBINARY,
  408. //15文件--卡片发行基本数据文件
  409. cmd.CMD_GETBALANCE
  410. //钱包
  411. ];
  412. tools.showLoadingAlert("正在执行指令");
  413. bluetoothUtil.transCmd(cmdArr, "10", function(res) {
  414. tools.hideLoadingAlert();
  415. //10:写卡 20:写OBU
  416. let str = res[2].substring(res[2].length - 4, res[2].length);
  417. let str3 = res[3].substring(res[3].length - 4, res[3].length);
  418. if (str == "9000" || str3 == "9000") {
  419. if (res[2].length > 86 || res[3] >= 12) {
  420. card.cardId = res[2].substring(20, 40); //卡号
  421. if (!containsEnglishCharacters(card.cardId)) {
  422. if (snums > 2) {
  423. showModals('获取卡信息错误')
  424. return
  425. }
  426. snums++
  427. getCardId()
  428. return
  429. }
  430. card.startTime = res[2].substring(40, 48); //启用
  431. card.endTime = res[2].substring(48, 56);
  432. card.version = res[2].substring(18, 19) >= 4 ? "4x" : "2x";
  433. card.netId = res[2].substring(20, 24);
  434. card.cardType = res[2].substring(28, 30) == 23 ? 1 : 2; //23记账卡 非 23储值卡 1:记账卡 2:储值卡
  435. card.vehiclePlateColor = parseInt(res[2].substring(82, 84), 16);
  436. console.log('======卡信息======', card.cardId, fileDataStrings.cardId)
  437. if (fileDataStrings.cardId) {
  438. if (card.cardId != fileDataStrings.cardId) {
  439. tools.showModalAlert("订单卡号与当前设备卡号信息不符!");
  440. return
  441. }
  442. }
  443. if (!state.transfer) {
  444. console.log("正常", state.transfer)
  445. getCardApply()
  446. } else {
  447. console.log("过户", !state.transfer, state.transfer)
  448. transferApplyRequest()
  449. }
  450. } else {
  451. console.error("CMD_READBINARY指令长度不符" + res[2])
  452. tools.hideLoadingAlert();
  453. }
  454. } else {
  455. showModals('获取卡信息错误!')
  456. }
  457. console.error("CMD_READBINARY指令长度不符" + res[2])
  458. tools.hideLoadingAlert();
  459. }, () => {
  460. showModals('获取卡信息错误')
  461. });
  462. };
  463. function showModals(msg) {
  464. uni.showModal({
  465. title: '提示',
  466. content: msg,
  467. showCancel: false,
  468. success: function(res) {
  469. if (res.confirm) {
  470. uni.navigateBack()
  471. console.log('用户点击确定1');
  472. } else if (res.cancel) {
  473. console.log('用户点击取消1');
  474. }
  475. }
  476. });
  477. }
  478. // *------------------------------------*
  479. // OBU开卡模块
  480. // *------------------------------------*
  481. /**
  482. * 写卡指令申请 请求
  483. */
  484. const getCardApply = () => {
  485. console.log('======写卡指令申请======')
  486. tools.showLoadingAlert("加载中");
  487. let options = {
  488. type: 2, //type: 2,JSON格式提交数据(默认表单形式提交)
  489. data: {
  490. cardId: card.cardId,
  491. orderId: fileDataStrings.orderId,
  492. cardType: card.cardType,
  493. userId: fileDataStrings.customerId,
  494. vehicleId: fileDataStrings.vehiclePlate + "_" + fileDataStrings.vehiclePlateColor,
  495. cosProvider: "1",
  496. enableTime: getFormatDate(new Date(), "yyyyMMdd"),
  497. expireTime: expireDate2(new Date())
  498. }, //请求参数
  499. method: "POST", //提交方式(默认POST)
  500. showLoading: true, //是否显示加载中(默认显示)
  501. };
  502. //调用方式
  503. request(IFCODE.writeCardApply, options)
  504. .then((res) => {
  505. tools.hideLoadingAlert();
  506. let result = stringToJson(res.bizContent);
  507. tools.showLoadingAlert("执行指令中");
  508. console.log('写卡指令', result.command)
  509. bluetoothUtil.transCmd(result.command.split(","), "10", function(res) {
  510. tools.hideLoadingAlert();
  511. getCommandBack(result.command, result.cosRecordId, res.toString());
  512. }, () => {
  513. showModals('写卡指令信息错误!')
  514. });
  515. })
  516. };
  517. /**
  518. * 写卡指令返回 请求
  519. */
  520. const getCommandBack = (command, cosRecordId, response) => {
  521. console.log('======循环写卡指令中======')
  522. tools.showLoadingAlert("加载中");
  523. let options = {
  524. type: 2, //type: 2,JSON格式提交数据(默认表单形式提交)
  525. data: {
  526. cardId: card.cardId,
  527. orderId: fileDataStrings.orderId,
  528. command: command,
  529. response: response,
  530. cosRecordId: cosRecordId,
  531. cosType: "1"
  532. }, //请求参数
  533. method: "POST", //提交方式(默认POST)
  534. showLoading: true, //是否显示加载中(默认显示)
  535. };
  536. //调用方式
  537. request(IFCODE.writeCardBack, options)
  538. .then((res) => {
  539. tools.hideLoadingAlert();
  540. let result = JSON.parse(res.bizContent);
  541. console.log("写卡指令============", result)
  542. if (result.orderStatus == 1 || result.orderStatus == "1") {
  543. tools.showLoadingAlert("执行指令中");
  544. bluetoothUtil.transCmd(result.command.split(","), "10", function(res) {
  545. tools.hideLoadingAlert();
  546. let response = res.toString();
  547. getCommandBack(result.command, cosRecordId, response);
  548. }, () => {
  549. showModals('写卡指令返回错误!')
  550. })
  551. } else {
  552. getWriteCard();
  553. }
  554. })
  555. };
  556. /**
  557. * 写卡确认 请求
  558. */
  559. const getWriteCard = () => {
  560. tools.showLoadingAlert("请求中");
  561. console.log('======写卡确认======')
  562. let options = {
  563. type: 2, //type: 2,JSON格式提交数据(默认表单形式提交)
  564. data: {
  565. cardId: card.cardId,
  566. orderId: fileDataStrings.orderId,
  567. netId: card.netId,
  568. packageNum: fileDataStrings.packageNum,
  569. cardType: card.cardType == 1 ? "111" : "211",
  570. brand: "3",
  571. model: "0",
  572. enableTime: formatTime(new Date()),
  573. expireTime: formatTime2(new Date()),
  574. accountOrganization: "",
  575. accountCardNo: "",
  576. cosRecordId: "",
  577. openId: getItem('openId')
  578. }, //请求参数
  579. method: "POST", //提交方式(默认POST)
  580. showLoading: true, //是否显示加载中(默认显示)
  581. };
  582. //调用方式
  583. request(IFCODE.writeCardConfirm, options)
  584. .then((res) => {
  585. tools.hideLoadingAlert();
  586. console.log(stringToJson(res.bizContent));
  587. //OBU发行申请 请求
  588. // getObuApply()
  589. const cardId = orderInfo.cardId;
  590. const cardStatus = orderInfo.cardStatus != null ? orderInfo.cardStatus : '0'
  591. const obuId = orderInfo.obuId;
  592. const obuStatus = orderInfo.obuStatus != null ? orderInfo.obuStatus : '9'
  593. if (!obuId) { //OBU发行
  594. getObuApply();
  595. } else if (obuId && obuStatus == '9') { //OBU发行
  596. getObuApply();
  597. } else if (cardId && obuId && (obuStatus == '1' || obuStatus == '11' || obuStatus ==
  598. '0')) {
  599. getInstallApply(); //激活
  600. }
  601. })
  602. .catch((err) => {
  603. console.log(err);
  604. });
  605. };
  606. // *------------------------------------*
  607. // OBU 发行模块
  608. // *------------------------------------*
  609. /**
  610. * OBU发行申请 请求
  611. */
  612. const getObuApply = () => {
  613. console.log('======OBU发行申请======')
  614. tools.showLoadingAlert("加载中");
  615. console.log('获取OBU号执行结果=========' + obu.obuId)
  616. let options = {
  617. type: 2, //type: 2,JSON格式提交数据(默认表单形式提交)
  618. data: {
  619. obuId: obu.obuId,
  620. userId: fileDataStrings.customerId,
  621. vehicleId: fileDataStrings.vehiclePlate + "_" + fileDataStrings.vehiclePlateColor
  622. }, //请求参数
  623. method: "POST", //提交方式(默认POST)
  624. showLoading: true, //是否显示加载中(默认显示)
  625. };
  626. //调用方式
  627. request(IFCODE.writeObuApply, options)
  628. .then(() => {
  629. tools.hideLoadingAlert();
  630. modifyFileInfo()
  631. })
  632. };
  633. /**
  634. * 修改系统信息 请求
  635. */
  636. const modifyFileInfo = () => {
  637. console.log('======修改系统信息请求======')
  638. var datetime = new Date();
  639. var year = datetime.getFullYear();
  640. var year1 = datetime.getFullYear() + 10;
  641. var month = datetime.getMonth() + 1 < 10 ? "0" + (datetime.getMonth() + 1) : datetime.getMonth() + 1;
  642. var date = datetime.getDate() < 10 ? "0" + datetime.getDate() : datetime.getDate();
  643. tools.showLoadingAlert("加载中");
  644. let options = {
  645. type: 2, //type: 2,JSON格式提交数据(默认表单形式提交)
  646. data: {
  647. obuSerailNo: obu.obuId, //OBU号
  648. obuVersion: obu.vin, //OBU版本号
  649. effTime: year + "" + month + "" + date, //启用时间
  650. expIime: year1 + "" + month + "" + date, //结束时间
  651. plateNo: fileDataStrings.vehiclePlate,
  652. pColor: fileDataStrings.vehiclePlateColor,
  653. random: cmdRandNum
  654. }, //请求参数
  655. method: "POST", //提交方式(默认POST)
  656. showLoading: true, //是否显示加载中(默认显示)
  657. };
  658. //调用方式
  659. request(IFCODE.modifyObuSysInfo, options)
  660. .then((res) => {
  661. tools.hideLoadingAlert();
  662. const datas = stringToJson(res.bizContent);
  663. tools.showLoadingAlert("执行指令");
  664. //如果存在APDU->穿透指令
  665. if (datas.data.APDU) {
  666. bluetoothUtil.transCmd([datas.data.APDU], "20", function(res) {
  667. tools.hideLoadingAlert();
  668. if (res[0] == "9000") {
  669. tools.showLoadingAlert("执行指令");
  670. //再次获取随机数
  671. let cmdArr = [cmd.HOME_DIRECTORY, cmd.OBU_DF01, cmd.OBU_EF01, cmd
  672. .RANDOM_NUMBER
  673. ];
  674. bluetoothUtil.transCmd(cmdArr, '20', function(res) {
  675. var str = res[3].substring(res[3].length - 4, res[3].length);
  676. if (str == "9000") {
  677. cmdRandNum = res[3].substring(0, res[3].length - 4);
  678. getFileData((demos) => {
  679. modifyVehicle(demos);
  680. })
  681. } else {
  682. tools.alertF("RANDOM_NUMBER指令长度不符" + res[1]);
  683. }
  684. }, () => {
  685. showModals('修改系统信息错误')
  686. })
  687. }
  688. }, () => {
  689. showModals('修改系统信息错误!')
  690. });
  691. }
  692. })
  693. .catch((err) => {
  694. console.log(err);
  695. });
  696. };
  697. /**
  698. * 修改车辆信息 请求
  699. */
  700. const modifyVehicle = (ites) => {
  701. tools.showLoadingAlert("加载中");
  702. console.log('======修改车辆信息======', ites)
  703. let options = {
  704. type: 2, //type: 2,JSON格式提交数据(默认表单形式提交)
  705. data: {
  706. Status: "0",
  707. random: cmdRandNum,
  708. obuSerailNo: obu.obuId,
  709. fileData: ites,
  710. orderId: fileDataStrings.orderId,
  711. }, //请求参数
  712. method: "POST", //提交方式(默认POST)
  713. showLoading: true, //是否显示加载中(默认显示)
  714. };
  715. //调用方式
  716. request(IFCODE.modifyObuVehicleInfo, options)
  717. .then((res) => {
  718. tools.hideLoadingAlert();
  719. const datas = stringToJson(res.bizContent);
  720. tools.showLoadingAlert("正在执行指令");
  721. if (datas.data.APDU) {
  722. bluetoothUtil.transCmd([datas.data.APDU], "20", function(res) {
  723. console.log('执行指令结果', res)
  724. tools.hideLoadingAlert();
  725. if (res[0] == "9000") {
  726. if (!state.transfer) {
  727. // 正常激活 走obu发行
  728. getObuConfirm();
  729. } else {
  730. transferSureRequest();
  731. }
  732. }
  733. }, () => {
  734. showModals('修改车辆信息错误')
  735. });
  736. }
  737. })
  738. };
  739. /**
  740. * OBU确认发行 请求
  741. */
  742. const getObuConfirm = () => {
  743. console.log('======OBU确认发行======')
  744. tools.showLoadingAlert("加载中");
  745. let options = {
  746. type: 2, //type: 2,JSON格式提交数据(默认表单形式提交)
  747. data: {
  748. obuId: obu.obuId,
  749. orderId: fileDataStrings.orderId,
  750. netId: obu.obuId.substring(0, 4),
  751. brand: obu.brand,
  752. model: obu.version,
  753. enableTime: formatTime(new Date()),
  754. expireTime: expireDate(new Date())
  755. }, //请求参数
  756. method: "POST", //提交方式(默认POST)
  757. showLoading: true, //是否显示加载中(默认显示)
  758. };
  759. //调用方式
  760. request(IFCODE.obuConfirm, options)
  761. .then((res) => {
  762. tools.hideLoadingAlert();
  763. let datas = stringToJson(res.bizContent);
  764. if (datas.obuId) {
  765. getInstallApply()
  766. }
  767. })
  768. .catch((err) => {
  769. console.log(err);
  770. });
  771. };
  772. // *------------------------------------*
  773. // 设备发行模块
  774. // *------------------------------------*
  775. /**
  776. * BDS-安装申请 请求
  777. */
  778. const getInstallApply = () => {
  779. console.log('======安装申请======')
  780. tools.showLoadingAlert("加载中");
  781. let options = {
  782. type: 2, //type: 2,JSON格式提交数据(默认表单形式提交)
  783. data: {
  784. obuId: obu.obuId,
  785. vehicleId: fileDataStrings.vehiclePlate + "_" + fileDataStrings.vehiclePlateColor,
  786. orderId: fileDataStrings.orderId,
  787. agentId: agentId,
  788. channelId: channelId,
  789. channelType: "1",
  790. staffId: "opId",
  791. terminalId: "999999999",
  792. }, //请求参数
  793. method: "POST", //提交方式(默认POST)
  794. showLoading: true, //是否显示加载中(默认显示)
  795. };
  796. //调用方式
  797. request(IFCODE.installApply, options)
  798. .then(() => {
  799. tools.hideLoadingAlert();
  800. //再次获取随机数
  801. let cmdArr = [cmd.HOME_DIRECTORY, cmd.RANDOM_NUMBER];
  802. bluetoothUtil.transCmd(cmdArr, '20', function(res) {
  803. var str = res[1].substring(res[1].length - 4, res[1].length);
  804. if (str == "9000") {
  805. cmdRandNum = res[1].substring(0, res[1].length - 4);
  806. getObuActivation();
  807. } else {
  808. tools.alertF("RANDOM_NUMBER指令长度不符" + res[1]);
  809. }
  810. }, () => {
  811. showModals('安装申请异常')
  812. })
  813. })
  814. };
  815. /**
  816. * VFJ-OBU在线激活 请求
  817. */
  818. const getObuActivation = () => {
  819. console.log('======VFJ-OBU在线激活======')
  820. tools.showLoadingAlert("加载中");
  821. let options = {
  822. type: 2, //type: 2,JSON格式提交数据(默认表单形式提交)
  823. data: {
  824. random: cmdRandNum,
  825. obuSerailNo: obu.obuId,
  826. orderId: fileDataStrings.orderId,
  827. }, //请求参数
  828. method: "POST", //提交方式(默认POST)
  829. showLoading: true, //是否显示加载中(默认显示)
  830. };
  831. //调用方式
  832. request(IFCODE.obuActivation, options)
  833. .then((res) => {
  834. tools.hideLoadingAlert();
  835. console.log("在线激活 请求");
  836. console.log(stringToJson(res.bizContent));
  837. const datas = stringToJson(res.bizContent);
  838. tools.showLoadingAlert("执行指令");
  839. bluetoothUtil.transCmd([datas.data.APDU], "20", function(res) {
  840. tools.hideLoadingAlert();
  841. console.log(res);
  842. if (res[0] == "9000") {
  843. console.log("在线激活执行指令88888 请求", res);
  844. getObuInstall(0, ""); //status 0 - 安装成功 || 1 - 安装失败
  845. }
  846. }, () => {
  847. showModals('在线激活异常')
  848. });
  849. })
  850. .catch((err) => {
  851. console.log(err);
  852. });
  853. };
  854. /**
  855. * BDS-安装确认 请求
  856. */
  857. const getObuInstall = (status, reason) => {
  858. console.log('======OBU安装确认======')
  859. tools.showLoadingAlert("加载中");
  860. let options = {
  861. type: 2, //type: 2,JSON格式提交数据(默认表单形式提交)
  862. data: {
  863. installStatus: status,
  864. failReason: reason,
  865. installType: "1",
  866. installChannelId: channelId,
  867. obuId: obu.obuId,
  868. orderId: fileDataStrings.orderId,
  869. openId: getItem('openId')
  870. }, //请求参数
  871. method: "POST", //提交方式(默认POST)
  872. showLoading: true, //是否显示加载中(默认显示)
  873. };
  874. //调用方式
  875. request(IFCODE.obuInstall, options)
  876. .then(() => {
  877. tools.hideLoadingAlert();
  878. bindCardAndObu();
  879. });
  880. };
  881. /**
  882. * 卡签绑定 请求
  883. */
  884. const bindCardAndObu = () => {
  885. console.log('======卡签绑定======')
  886. tools.showLoadingAlert("加载中");
  887. let options = {
  888. type: 2, //type: 2,JSON格式提交数据(默认表单形式提交)
  889. data: {
  890. obuId: obu.obuId,
  891. cardId: card.cardId ? card.cardId : fileDataStrings.cardId,
  892. }, //请求参数
  893. method: "POST", //提交方式(默认POST)
  894. showLoading: true, //是否显示加载中(默认显示)
  895. };
  896. //调用方式
  897. request(IFCODE.bindCardAndObu, options)
  898. .then((res) => {
  899. tools.hideLoadingAlert();
  900. let result = JSON.parse(res.bizContent);
  901. console.log("写卡指令============", result)
  902. tools.showLoadingAlert("执行指令中");
  903. bluetoothUtil.transCmd(result.command.split(","), "10", function(res) {
  904. tools.hideLoadingAlert();
  905. let response = res.toString();
  906. getCommandBackEnd(result.command, result.cosRecordId, response);
  907. }, () => {
  908. showModals('卡签绑定异常!')
  909. });
  910. })
  911. .catch((err) => {
  912. console.log(err);
  913. });
  914. };
  915. /**
  916. * 卡签绑定写卡指令返回 请求
  917. */
  918. const getCommandBackEnd = (command, cosRecordId, response) => {
  919. console.log('======卡签绑定循环写卡指令中======')
  920. tools.showLoadingAlert("加载中");
  921. let options = {
  922. type: 2, //type: 2,JSON格式提交数据(默认表单形式提交)
  923. data: {
  924. cardId: card.cardId ? card.cardId : fileDataStrings.cardId,
  925. orderId: fileDataStrings.orderId,
  926. command: command,
  927. response: response,
  928. cosRecordId: cosRecordId,
  929. cosType: "4"
  930. }, //请求参数
  931. method: "POST", //提交方式(默认POST)
  932. showLoading: true, //是否显示加载中(默认显示)
  933. };
  934. //调用方式
  935. request(IFCODE.writeCardBack, options)
  936. .then((res) => {
  937. tools.hideLoadingAlert();
  938. let result = JSON.parse(res.bizContent);
  939. console.log("写卡指令============", result)
  940. if (result.orderStatus == 1 || result.orderStatus == "1") {
  941. tools.showLoadingAlert("执行指令中");
  942. bluetoothUtil.transCmd(result.command.split(","), "10", function(res) {
  943. tools.hideLoadingAlert();
  944. let response = res.toString();
  945. getCommandBackEnd(result.command, cosRecordId, response);
  946. }, () => {
  947. showModals('卡签绑定返回异常!')
  948. });
  949. } else {
  950. state.disabled = true
  951. // #ifdef MP-ALIPAY
  952. uni.closeBluetoothAdapter({
  953. success(res) {
  954. }
  955. })
  956. msg("激活成功")
  957. state.showPopup = true
  958. state.isSuccess = true
  959. // #endif
  960. DataSynchronizationRequest();
  961. // #ifdef MP-WEIXIN
  962. msg("激活成功")
  963. setTimeout(() => {
  964. uni.navigateTo({
  965. url: "/subpackage/after-sale/deviceInfo/deviceInfo",
  966. });
  967. }, 2000)
  968. // #endif
  969. }
  970. })
  971. };
  972. const DataSynchronizationRequest = () => {
  973. const options = {
  974. type: 2,
  975. data: {
  976. orderId: fileDataStrings.orderId
  977. },
  978. method: "POST",
  979. showLoading: false,
  980. };
  981. request(IFCODE.DataSynchronizationApi, options).then((res) => {
  982. })
  983. }
  984. const back = () => {
  985. uni.switchTab({
  986. url: "/pages/index/index"
  987. });
  988. }
  989. // 过户激活申请
  990. const transferApplyRequest = () => {
  991. const options = {
  992. type: 2,
  993. data: {
  994. orderId: fileDataStrings.orderId
  995. },
  996. method: "POST",
  997. showLoading: false,
  998. };
  999. request(IFCODE.transferApply, options).then((res) => {
  1000. // 设备升级
  1001. getDeviceUpgrade()
  1002. })
  1003. }
  1004. // 过户激活确认
  1005. const transferSureRequest = () => {
  1006. const options = {
  1007. type: 2,
  1008. data: {
  1009. orderId: fileDataStrings.orderId
  1010. },
  1011. method: "POST",
  1012. showLoading: false,
  1013. };
  1014. request(IFCODE.transferSure, options).then((res) => {
  1015. // 设备升级
  1016. getInstallApply()
  1017. })
  1018. }
  1019. //设备升级 请求
  1020. const getDeviceUpgrade = () => {
  1021. const options = {
  1022. type: 2,
  1023. data: {
  1024. cardId: fileDataStrings.cardId,
  1025. orderId: fileDataStrings.orderId,
  1026. isTransfer: state.transfer
  1027. },
  1028. method: "POST",
  1029. showLoading: true,
  1030. };
  1031. request(IFCODE.deviceUpgrade, options).then((res) => {
  1032. tools.hideLoadingAlert();
  1033. let result = stringToJson(res.bizContent);
  1034. console.log("&&&&&&&&&&&&", result);
  1035. let cmdArray = result.command ? result.command.split(",") : "";
  1036. if (cmdArray.length > 0) {
  1037. tools.showLoadingAlert("正在执行指令");
  1038. bluetoothUtil.transCmd(cmdArray, "10", function(res) {
  1039. tools.hideLoadingAlert();
  1040. let status = res[cmdArray.length - 1].substring(res[cmdArray.length - 1].length -
  1041. 4, res[cmdArray.length - 1].length);
  1042. if (status == "9000") {
  1043. getCommandBackUp(result.command, result.cosRecordId, res.toString());
  1044. }
  1045. }, () => {
  1046. showModals('设备升级异常!')
  1047. })
  1048. }
  1049. })
  1050. };
  1051. /**
  1052. * 写卡指令返回 请求
  1053. */
  1054. const getCommandBackUp = (command, cosRecordId, response) => {
  1055. console.log('======循环写卡指令中======')
  1056. tools.showLoadingAlert("加载中");
  1057. let options = {
  1058. type: 2, //type: 2,JSON格式提交数据(默认表单形式提交)
  1059. data: {
  1060. cardId: fileDataStrings.cardId,
  1061. orderId: fileDataStrings.orderId,
  1062. command: command,
  1063. response: response,
  1064. cosRecordId: cosRecordId,
  1065. cosType: 2
  1066. }, //请求参数
  1067. method: "POST", //提交方式(默认POST)
  1068. showLoading: true, //是否显示加载中(默认显示)
  1069. };
  1070. //调用方式
  1071. request(IFCODE.writeCardBack, options)
  1072. .then((res) => {
  1073. tools.hideLoadingAlert();
  1074. let result = JSON.parse(res.bizContent);
  1075. if (result.orderStatus == 1 || result.orderStatus == "1") {
  1076. tools.showLoadingAlert("执行指令中");
  1077. bluetoothUtil.transCmd(result.command.split(","), "10", function(res) {
  1078. tools.hideLoadingAlert();
  1079. let response = res.toString();
  1080. getCommandBackUp(result.command, cosRecordId, response);
  1081. }, () => {
  1082. showModals('写卡异常!')
  1083. });
  1084. } else {
  1085. obuWriteAgainRequest();
  1086. }
  1087. })
  1088. };
  1089. /**
  1090. * 修改系统信息 请求
  1091. */
  1092. const obuWriteAgainRequest = () => {
  1093. let cmdArray1 = [cmd.HOME_DIRECTORY, cmd.OBU_SYSTEM_FILE, cmd.RANDOM_NUMBER];
  1094. tools.showLoadingAlert("正在执行指令");
  1095. bluetoothUtil.transCmd(cmdArray1, "20", function(res) {
  1096. tools.hideLoadingAlert();
  1097. var str = res[2].substring(res[2].length - 4, res[2].length);
  1098. if (str == "9000") {
  1099. cmdRandNum = res[2].substring(0, res[2].length - 4);
  1100. const options = {
  1101. type: 2,
  1102. data: {
  1103. obuId: fileDataStrings.obuId,
  1104. random: cmdRandNum
  1105. },
  1106. method: "POST",
  1107. showLoading: true,
  1108. };
  1109. request(IFCODE.obuWriteAgain, options).then((res) => {
  1110. let datas = stringToJson(res.bizContent);
  1111. console.log("899", datas, datas.data.APDU);
  1112. if (datas.data.APDU) {
  1113. tools.showLoadingAlert("正在执行指令");
  1114. bluetoothUtil.transCmd([datas.data.APDU], "20", function(res) {
  1115. tools.hideLoadingAlert();
  1116. console.log("res=====", res, res[0])
  1117. let cmdArr = [cmd.HOME_DIRECTORY, cmd.OBU_DF01, cmd.OBU_EF01, cmd
  1118. .RANDOM_NUMBER
  1119. ];
  1120. bluetoothUtil.transCmd(cmdArr, "20", function(res) {
  1121. console.log("chelaing======", res)
  1122. var str = res[3].substring(res[3].length - 4, res[3]
  1123. .length);
  1124. if (str == "9000") {
  1125. cmdRandNum = res[3].substring(0, res[3].length -
  1126. 4);
  1127. console.log("0000000000000000000000000")
  1128. getFileData((demos) => {
  1129. modifyVehicle(demos);
  1130. })
  1131. } else {
  1132. tools.alertF("RANDOM_NUMBER指令长度不符" + res[1]);
  1133. }
  1134. })
  1135. })
  1136. }
  1137. })
  1138. } else {
  1139. tools.alertF("RANDOM_NUMBER指令长度不符" + res[1]);
  1140. }
  1141. })
  1142. };
  1143. </script>
  1144. <style>
  1145. .containers {
  1146. height: 100%;
  1147. display: flex;
  1148. flex-direction: column;
  1149. align-items: center;
  1150. justify-content: space-between;
  1151. box-sizing: border-box;
  1152. }
  1153. .sec_info {
  1154. width: 90%;
  1155. height: auto;
  1156. margin: 0 auto;
  1157. box-shadow: 0rpx 6rpx 25rpx 0rpx rgba(0, 0, 0, 0.2);
  1158. margin-top: 50rpx;
  1159. border-radius: 20rpx;
  1160. }
  1161. .info_txt {
  1162. width: 100%;
  1163. height: 120rpx;
  1164. line-height: 120rpx;
  1165. text-align: center;
  1166. color: #000;
  1167. font-size: 36rpx;
  1168. margin-bottom: 20rpx;
  1169. }
  1170. .info_plate {
  1171. display: flex;
  1172. flex-direction: row;
  1173. width: 94%;
  1174. height: 100rpx;
  1175. margin: 0 auto;
  1176. border-bottom: 2rpx solid #f2f2f2;
  1177. }
  1178. .info_plate text:nth-child(1) {
  1179. height: 100rpx;
  1180. text-align: left;
  1181. line-height: 100rpx;
  1182. font-size: 32rpx;
  1183. color: #999;
  1184. }
  1185. .info_plate text:nth-child(2) {
  1186. flex: 1;
  1187. height: 100rpx;
  1188. line-height: 100rpx;
  1189. font-size: 32rpx;
  1190. color: #333;
  1191. margin-left: 50rpx;
  1192. text-align: right;
  1193. }
  1194. /*提交按钮样式*/
  1195. .up_btn {
  1196. width: 85%;
  1197. height: 100rpx;
  1198. margin: 0 auto;
  1199. margin-top: 50rpx;
  1200. margin-bottom: 100rpx;
  1201. }
  1202. .up_btn button {
  1203. width: 100%;
  1204. height: 80rpx;
  1205. line-height: 80rpx;
  1206. color: white;
  1207. font-size: 32rpx;
  1208. text-align: center;
  1209. background: linear-gradient(to left, #43a1e0 0%, #13e7c1 100%);
  1210. border-radius: 40rpx;
  1211. outline: none;
  1212. border: #4cd95f;
  1213. }
  1214. .button {
  1215. width: 100%;
  1216. height: 80rpx;
  1217. line-height: 80rpx;
  1218. color: white;
  1219. font-size: 32rpx;
  1220. text-align: center;
  1221. background: linear-gradient(to left, #43a1e0 0%, #13e7c1 100%);
  1222. border-radius: 40rpx;
  1223. outline: none;
  1224. border: #4cd95f;
  1225. }
  1226. .hui {
  1227. width: 100%;
  1228. height: 80rpx;
  1229. line-height: 80rpx;
  1230. color: white;
  1231. font-size: 32rpx;
  1232. text-align: center;
  1233. background: linear-gradient(to left, #b9b9b9 0%, #e7e7e7 100%) !important;
  1234. border-radius: 40rpx;
  1235. outline: none;
  1236. border: #4cd95f;
  1237. }
  1238. .up_btn button[disabled] {
  1239. background-color: rgba(0, 191, 112, 0.5);
  1240. color: white;
  1241. font-size: 34rpx;
  1242. border-radius: 20rpx;
  1243. }
  1244. </style>