You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135
  1. <template>
  2. <div></div>
  3. </template>
  4. <script setup lang='ts'>
  5. import {
  6. onLoad,
  7. onReady
  8. } from "@dcloudio/uni-app";
  9. import {
  10. ref,
  11. reactive
  12. } from "vue";
  13. const tools = require("../../static/etcUtil/tools.js");
  14. const NFCAPI = require('../../utils/nfc/NFCAPI.js');
  15. const cmd = require("../../static/etcUtil/cmdConfig.js");
  16. const routeType = ref(null); //来源 1激活 2圈存 3信息重写 4信息读取
  17. const state = reactive({
  18. fee: "",
  19. cardId: ""
  20. });
  21. onLoad((option) => {
  22. routeType.value = option.routeType ? option.routeType : "1";
  23. state.cardId = option.cardId;
  24. if (option.fee) {
  25. state.fee = option.fee;
  26. }
  27. console.log("传过来的参数", option)
  28. });
  29. //已准备
  30. onReady(() => {
  31. scanNfc();
  32. })
  33. function scanNfc() {
  34. tools.showLoadingAlert("扫描蓝牙中");
  35. //先断开所有设备
  36. NFCAPI.remove(() => {
  37. //开始扫描设备
  38. NFCAPI.startScanDevice((res) => {
  39. tools.hideLoadingAlert();
  40. if (res.code != 0) {
  41. if (res.code == 1203) {
  42. tools.showModalAlert("扫描超时请重新扫描NFC标签", function(res) {
  43. if (res.confirm) {
  44. scanNfc();
  45. }
  46. }, null, "", true)
  47. } else {
  48. tools.showToastAlert(res.msg);
  49. }
  50. return;
  51. } else {
  52. NFCAPI.connectDevice(function() {
  53. if (res.code != 0) {
  54. tools.showToastAlert(res.msg);
  55. return;
  56. }
  57. //获取卡信息
  58. transCmd(function() {
  59. getCardId(res, function() {
  60. if (routeType.value == "2") {
  61. tools.toUrl(
  62. `/pages/recharge/recharge?connectSuccess=1&&cardId=${state.cardId}&&fee=${state.fee}`
  63. ); //跳转到圈存界面
  64. }
  65. })
  66. })
  67. });
  68. }
  69. })
  70. })
  71. }
  72. function getCardId(resultCmdArr: any, callback: any) {
  73. var that = this;
  74. if (resultCmdArr.length == 4) {
  75. var str = resultCmdArr[2].substring(resultCmdArr[2].length - 4, resultCmdArr[2].length); //判断是否为9000
  76. var str3 = resultCmdArr[3].substring(resultCmdArr[3].length - 4, resultCmdArr[3].length); //判断是否为9000
  77. if (str == "9000" || str3 == "9000") {
  78. if (resultCmdArr[2].length > 86 || resultCmdArr[3] >= 12) {
  79. var card = {
  80. cardNo: resultCmdArr[2].substring(20, 40),
  81. startTime: resultCmdArr[2].substring(40, 48),
  82. endTime: resultCmdArr[2].substring(48, 56),
  83. version: resultCmdArr[2].substring(18, 19) >= 4 ? "4x" : "2x",
  84. money: that.hex2int(resultCmdArr[3].substring(0, 8)),
  85. v_userType: parseInt(resultCmdArr[2].substring(80, 82), 16)
  86. };
  87. console.log("写命令拿到卡号:" + JSON.stringify(card))
  88. var jizhangka = card.cardNo.substring(8, 10);
  89. if (jizhangka == '23') {
  90. console.log('记账卡');
  91. tools.alertFback("不支持记账卡圈存", function() {
  92. //返回首页
  93. uni.reLaunch({
  94. url: 'pages/index/index'
  95. })
  96. })
  97. return;
  98. }
  99. that.setData({
  100. cardNo: card.cardNo,
  101. cardMoney: card.money > 0 ? card.money : 0,
  102. })
  103. callback(card.cardNo);
  104. } else {
  105. tools.showToastAlert("CMD_READBINARY指令长度不符" + resultCmdArr[2]);
  106. }
  107. return;
  108. }
  109. } else {
  110. tools.showToastAlert("回包长度不符");
  111. }
  112. }
  113. function transCmd(callback: any) {
  114. tools.showLoadingAlert('透传指令中');
  115. var cmdArr = [cmd.HOME_DIRECTORY, cmd.APPLICATION_DIRECTORY, cmd.CMD_READBINARY, cmd.CMD_GETBALANCE];
  116. NFCAPI.transCmd(cmdArr, function(res) {
  117. tools.hideLoadingAlert();
  118. console.log(res);
  119. if (res.code == 0) {
  120. callback(res.data);
  121. } else {
  122. tools.showToastAlert(res.msg);
  123. }
  124. });
  125. }
  126. </script>
  127. <style lang='scss' scoped>
  128. </style>