Você não pode selecionar mais de 25 tópicos Os tópicos devem começar com uma letra ou um número, podem incluir traços ('-') e podem ter até 35 caracteres.

1 ano atrás
1 ano atrás
1 ano atrás
1 ano atrás
1 ano atrás
1 ano atrás
1 ano atrás
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173
  1. <!--设备选择 -->
  2. <template>
  3. <view class="devices">
  4. <view class="hint">
  5. <view class="orange-txt as-layout-horizontal as-gravity-center-start tishi">
  6. <image :src="`${$imgUrl}common/icon-hint.png`" mode="aspectFill"></image>
  7. <view>温馨提示:</view>
  8. </view>
  9. <view>1、请在手机设置中打开NFC功能。</view>
  10. <view>2、请将ETC储值卡对准手机NFC天线位置(手机背部顶端),不灵敏或无响应时,请及时调整卡片位置。</view>
  11. <view>3、充值过程请保证卡片在手机背部,请勿移开。</view>
  12. </view>
  13. <view class="btn">
  14. <submit-button title="点击重新扫描NFC标签" @submit="load"></submit-button>
  15. </view>
  16. </view>
  17. </template>
  18. <script setup lang='ts'>
  19. import {
  20. onLoad,
  21. onReady
  22. } from "@dcloudio/uni-app";
  23. import {
  24. ref,
  25. reactive
  26. } from "vue";
  27. import {
  28. login
  29. } from "../../utils/network/api";
  30. const tools = require("../../static/etcUtil/tools.js");
  31. const NFCAPI = require('../../static/nfc/NFCAPI.js');
  32. const cmd = require("../../static/etcUtil/cmdConfig.js");
  33. const routeType = ref(null); //来源 1激活 2圈存 3信息重写 4信息读取
  34. const state = reactive({
  35. fee: "",
  36. cardId: ""
  37. });
  38. onLoad((option) => {
  39. routeType.value = option.routeType ? option.routeType : "1";
  40. state.cardId = option.cardId;
  41. if (option.fee) {
  42. state.fee = option.fee;
  43. }
  44. console.log("传过来的参数", option)
  45. });
  46. //已准备
  47. onReady(() => {
  48. scanNfc();
  49. })
  50. function load() {
  51. scanNfc();
  52. }
  53. function scanNfc() {
  54. tools.showLoadingAlert("扫描NFC中");
  55. //先断开所有设备
  56. NFCAPI.remove(() => {
  57. //开始扫描设备
  58. NFCAPI.startScanDevice((res) => {
  59. tools.hideLoadingAlert();
  60. if (res.code != 0) {
  61. if (res.code == 1203) {
  62. tools.showModalAlert("扫描超时请重新扫描NFC标签", function(res) {
  63. if (res.confirm) {
  64. scanNfc();
  65. }
  66. }, null, "", true)
  67. } else {
  68. tools.showToastAlert(res.msg);
  69. }
  70. return;
  71. } else {
  72. NFCAPI.connectDevice(function() {
  73. if (res.code != 0) {
  74. tools.showToastAlert(res.msg);
  75. return;
  76. }
  77. //获取卡信息
  78. transCmd(function() {
  79. getCardId(res, function() {
  80. if (routeType.value == "2") {
  81. tools.toUrl(
  82. `/pages/recharge/recharge?connectSuccess=1&&cardId=${state.cardId}&&fee=${state.fee}`
  83. ); //跳转到圈存界面
  84. }
  85. })
  86. })
  87. });
  88. }
  89. })
  90. })
  91. }
  92. function getCardId(resultCmdArr: any, callback: any) {
  93. var that = this;
  94. console.log(resultCmdArr, '==============')
  95. if (resultCmdArr.length == 4) {
  96. var str = resultCmdArr[2].substring(resultCmdArr[2].length - 4, resultCmdArr[2].length); //判断是否为9000
  97. var str3 = resultCmdArr[3].substring(resultCmdArr[3].length - 4, resultCmdArr[3].length); //判断是否为9000
  98. if (str == "9000" || str3 == "9000") {
  99. if (resultCmdArr[2].length > 86 || resultCmdArr[3] >= 12) {
  100. var card = {
  101. cardNo: resultCmdArr[2].substring(20, 40),
  102. startTime: resultCmdArr[2].substring(40, 48),
  103. endTime: resultCmdArr[2].substring(48, 56),
  104. version: resultCmdArr[2].substring(18, 19) >= 4 ? "4x" : "2x",
  105. money: that.hex2int(resultCmdArr[3].substring(0, 8)),
  106. v_userType: parseInt(resultCmdArr[2].substring(80, 82), 16)
  107. };
  108. console.log("写命令拿到卡号:" + JSON.stringify(card))
  109. var jizhangka = card.cardNo.substring(8, 10);
  110. if (jizhangka == '23') {
  111. console.log('记账卡');
  112. tools.alertFback("不支持记账卡圈存", function() {
  113. //返回首页
  114. uni.reLaunch({
  115. url: 'pages/index/index'
  116. })
  117. })
  118. return;
  119. }
  120. that.setData({
  121. cardNo: card.cardNo,
  122. cardMoney: card.money > 0 ? card.money : 0,
  123. })
  124. callback(card.cardNo);
  125. } else {
  126. tools.showToastAlert("CMD_READBINARY指令长度不符" + resultCmdArr[2]);
  127. }
  128. return;
  129. }
  130. } else {
  131. tools.showToastAlert("回包长度不符");
  132. }
  133. }
  134. function transCmd(callback: any) {
  135. tools.showLoadingAlert('透传指令中');
  136. var cmdArr = [cmd.HOME_DIRECTORY, cmd.APPLICATION_DIRECTORY, cmd.CMD_READBINARY, cmd.CMD_GETBALANCE];
  137. NFCAPI.transCmd(cmdArr, function(res) {
  138. tools.hideLoadingAlert();
  139. console.log(res);
  140. if (res.code == 0) {
  141. callback(res.data);
  142. } else {
  143. tools.showToastAlert(res.msg);
  144. }
  145. });
  146. }
  147. </script>
  148. <style lang='scss' scoped>
  149. image {
  150. width: 40rpx;
  151. height: 40rpx;
  152. margin-right: 20rpx;
  153. }
  154. .devices {
  155. padding: 30rpx;
  156. }
  157. .btn {
  158. margin-top: 30rpx;
  159. }
  160. .tishi {
  161. margin-bottom: 20rpx;
  162. }
  163. </style>