Du kan inte välja fler än 25 ämnen Ämnen måste starta med en bokstav eller siffra, kan innehålla bindestreck ('-') och vara max 35 tecken långa.

log-off-connect-etc.vue 5.7KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245
  1. <!-- 连接设备对设备进行注销 -->
  2. <template>
  3. <vehicleDetail ref="vehicleDetailRef" :vehicleId="state.vehicleId"></vehicleDetail>
  4. <view class="log-off-content" v-if="state.showProgress">
  5. <piaoyi-progress-bar
  6. canvasId="progressCanvas4"
  7. :progress="state.progressNum"
  8. progressBackgroundColor="#07C160"
  9. :showText="true"
  10. textColor="#fff"
  11. :textSize="28"
  12. :height="22"
  13. :isCircular="true"
  14. :diameter="300">
  15. </piaoyi-progress-bar>
  16. </view>
  17. </template>
  18. <script setup lang="ts">
  19. import { msg } from "@/utils/utils";
  20. import { reactive } from 'vue'
  21. import vehicleDetail from '@/components/vehicle-detail/vehicle-detail.vue'
  22. import { onLoad, onUnload } from '@dcloudio/uni-app'
  23. import { requestNew } from "@/utils/network/request.js";
  24. import { logOffInstAppy, logOffInstCallBack } from '@/utils/network/api.js'
  25. import { invokeCmd, getObuIdAfter, getCardIdAfter } from '@/static/etcUtil/command'
  26. import { startHeartbeat, stopHeartbeat } from "@/pages/bluetooth/heartbeatService"
  27. import { logOffOver } from './js/log-off.js'
  28. const cmd = require("../../../static/etcUtil/cmdConfig.js");
  29. const tools = require("../../../static/etcUtil/tools.js");
  30. const bluetoothUtil = require("../../../static/etcUtil/index.js");
  31. const state = reactive({
  32. vehicleId: '',
  33. progressNum: 0,
  34. isSuccess: false,
  35. showProgress: false
  36. })
  37. const card = reactive({
  38. cardId: "",
  39. cardNo: "",
  40. startTime: "",
  41. endTime: "",
  42. userName: "",
  43. userNameStr: "",
  44. idNum: "",
  45. idNumStr: "",
  46. vehiclePlate: "",
  47. vehiclePlateColor: "",
  48. color: "",
  49. colorStr: "",
  50. version: "",
  51. type: "",
  52. typeStr: "",
  53. favourable: "",
  54. favourableStr: "",
  55. money: "",
  56. v_userType: "",
  57. cardBalance: ""
  58. });
  59. // OBU
  60. const obu = reactive({
  61. obuId: "",
  62. startTime: "",
  63. endTime: "",
  64. version: "",
  65. approvedCount: "",
  66. axleCount: "",
  67. axleDistance: "",
  68. engineNum: "",
  69. type: "",
  70. userType: "",
  71. contractNo: "",
  72. vehiclePlate: "",
  73. vehiclePlateColor: "",
  74. vin: "",
  75. wheelCount: "",
  76. isJH: ""
  77. });
  78. let progressNumInter = null
  79. onLoad(({vehicleId}) => {
  80. if (vehicleId) state.vehicleId = vehicleId
  81. getObuId().then(res => {
  82. getCardId().then(res => {
  83. tools.hideLoadingAlert();
  84. getLogOffInstAppy()
  85. })
  86. })
  87. })
  88. /**
  89. * 获取OBU号 读OBU
  90. */
  91. const getObuId = () => {
  92. return new Promise(resolve => {
  93. console.log('======获取OBU号======')
  94. let cmdArray = [cmd.HOME_DIRECTORY, cmd.OBU_SYSTEM_FILE, cmd.RANDOM_NUMBER];
  95. tools.showLoadingAlert("正在执行指令");
  96. bluetoothUtil.transCmd(cmdArray, "20", function (res) {
  97. tools.hideLoadingAlert();
  98. var status = res[1].substring(res[1].length - 4, res[1].length);
  99. console.log('获取OBU号执行结果' + status)
  100. //第一次获取随机数
  101. if (status == "9000") {
  102. obu.obuId = res[1].substring(20, 36);
  103. obu.vin = res[1].substring(18, 20);
  104. obu.version = res[1].substring(18, 19) >= 4 ? "4x" : "2x";
  105. resolve(obu)
  106. return
  107. } else {
  108. alertF("CMD_READBINARY指令长度不符" + res[2]);
  109. tools.hideLoadingAlert()
  110. }
  111. alertF("CMD_READBINARY指令长度不符" + res[2]);
  112. tools.hideLoadingAlert()
  113. });
  114. })
  115. };
  116. const getCardId = () => {
  117. return new Promise(resolve => {
  118. //执行0015文件
  119. tools.showLoadingAlert("执行指令");
  120. let cmdArr = [cmd.HOME_DIRECTORY, cmd.APPLICATION_DIRECTORY, cmd.CMD_READBINARY, cmd.CMD_GETBALANCE];
  121. bluetoothUtil.transCmd(cmdArr, '10', function(res) { //10:写卡 20:写OBU
  122. console.log("5201", res)
  123. let str = res[2].substring(res[2].length - 4, res[2].length); //判断是否为9000
  124. let str3 = res[3].substring(res[3].length - 4, res[3].length); //判断是否为9000
  125. if (str == "9000" || str3 == "9000") {
  126. if (res[2].length > 86 || res[3] >= 12) {
  127. card.cardId = res[2].substring(20, 40);
  128. // startHeartbeat()
  129. resolve(card)
  130. } else {
  131. alertF("CMD_READBINARY指令长度不符" + res[2]);
  132. tools.hideLoadingAlert()
  133. }
  134. return;
  135. }
  136. alertF("CMD_READBINARY指令长度不符" + res[2]);
  137. tools.hideLoadingAlert()
  138. })
  139. })
  140. };
  141. //提示对话框
  142. const alertF = (msg) => {
  143. //隐藏加载框
  144. tools.hideLoadingAlert();
  145. //提示对话框
  146. tools.showModalAlert(msg);
  147. stopHeartbeat();
  148. }
  149. interface command {
  150. cmd: string,
  151. cmdType: string,
  152. stepNo: number,
  153. transOrderId: string
  154. }
  155. // 初始化指令
  156. const getLogOffInstAppy = () => {
  157. let options = {
  158. data: {
  159. cardId: card.cardId,
  160. obuId: obu.obuId,
  161. cancelOrRestore: '1' // 1 注销 2 恢复
  162. }
  163. }
  164. state.showProgress = true
  165. setProgressNum()
  166. requestNew(logOffInstAppy, options).then((res: command) => {
  167. const datas = res;
  168. invokeCmd(logOffInstCallBack, datas, bluetoothUtil, async (result) => {
  169. // 注销完成
  170. state.isSuccess = true
  171. clearProgressNum()
  172. state.progressNum = 100
  173. uni.showToast({
  174. title: '执行完成'
  175. })
  176. setTimeout(() => {
  177. logOffOver()
  178. }, 1500)
  179. })
  180. }).catch(() => {
  181. clearProgressNum()
  182. stopHeartbeat()
  183. state.showProgress = false
  184. })
  185. }
  186. const setProgressNum = () => {
  187. progressNumInter = setInterval(() => {
  188. if (state.isSuccess) {
  189. clearProgressNum()
  190. } else {
  191. if (state.progressNum < 90) {
  192. state.progressNum += 1
  193. } else {
  194. clearProgressNum()
  195. }
  196. }
  197. }, 1000)
  198. }
  199. const clearProgressNum = () => {
  200. clearInterval(progressNumInter)
  201. progressNumInter = null
  202. }
  203. const showModals = (msg) => {
  204. uni.showModal({
  205. title: '提示',
  206. content: msg,
  207. showCancel: false
  208. });
  209. }
  210. onUnload(() => {
  211. clearProgressNum()
  212. })
  213. </script>
  214. <style lang="scss" scoped>
  215. .log-off-content{
  216. position: fixed;
  217. top: 0;
  218. left: 0;
  219. right: 0;
  220. bottom: 0;
  221. background-color: rgba(0, 0, 0, 0.25);
  222. display: flex;
  223. align-items: center;
  224. justify-content: center;
  225. }
  226. </style>