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.

recharge.vue 4.6KB

2 years ago
1 year ago
2 years ago
1 year ago
1 year ago
2 years ago
1 year ago
2 years ago
1 year ago
2 years ago
1 year ago
1 year ago
2 years ago
1 year ago
2 years ago
1 year ago
2 years ago
2 years ago
1 year ago
2 years ago
1 year ago
1 year ago
1 year ago
2 years ago
1 year ago
1 year ago
2 years ago
1 year ago
2 years ago
1 year ago
2 years ago
1 year ago
2 years ago
1 year ago
2 years ago
1 year ago
2 years ago
1 year ago
2 years ago
1 year ago
2 years ago
1 year ago
2 years ago
1 year ago
2 years ago
1 year ago
2 years ago
1 year ago
2 years ago
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166
  1. <template>
  2. <view class='wrap'>
  3. <u-form :model="form" ref="form1" label-width=160 border-bottom=false>
  4. <u-form-item label="用户名" border-bottom=true>
  5. <u-input placeholder='请输入用户名' type="text" v-model="state.form.name" />
  6. </u-form-item>
  7. <u-form-item label="充值金额">
  8. <u-input placeholder='请输入充值金额' type="text" v-model="state.form.fee" @input="checkNum" />
  9. </u-form-item>
  10. <u-form-item label="银行卡">
  11. <view class='card' @click='goBank()'>
  12. <u-input placeholder='请输入银行卡号' v-model="state.form.cardNumber" type="text" disabled />
  13. <u-icon name="arrow-right" color='#ccc'></u-icon>
  14. </view>
  15. </u-form-item>
  16. <u-form-item label="充值凭证">
  17. <view class='item' @click="cardDbImageOcr(1)">
  18. <image v-if="!state.form.url" class="icon" :src="`${$imgUrl}applyCard/renxiang.png`">
  19. </image>
  20. <image v-else class="icon" :src="state.form.url"></image>
  21. </view>
  22. </u-form-item>
  23. <button @click='goRecharge()'>充值</button>
  24. </u-form>
  25. </view>
  26. </template>
  27. <script setup lang="ts">
  28. import { reactive } from "vue";
  29. import { etcOcrCard, queryRecharge } from "@/utils/network/api.js";
  30. import { request } from "@/utils/network/request.js";
  31. import { stringToJson } from "@/utils/network/encryption.js";
  32. import { navTo, uploadFile, msg } from "@/utils/utils";
  33. import { onLoad } from "@dcloudio/uni-app";
  34. const state = reactive({
  35. form: {
  36. name: '',//对公用户登录名
  37. fee: '',
  38. cardNumber: '',
  39. url: '',
  40. }
  41. })
  42. onLoad((option : any) => {
  43. console.log("option", option.cardNumber)
  44. if (option.value) {
  45. state.form = JSON.parse(decodeURIComponent(option.value))
  46. }
  47. if (option.cardNumber) {
  48. state.form.cardNumber = option.cardNumber;
  49. }
  50. if (option.name) {
  51. state.form.name = option.name
  52. }
  53. });
  54. const goRecharge = () => {
  55. for (var i in state.form) {
  56. if (!state.form[i]) {
  57. msg('请把信息填写完整!')
  58. return;
  59. }
  60. }
  61. const options = {
  62. type: 2,
  63. data: {
  64. 'accountId': state.form.name, //账户编号
  65. 'fee': state.form.fee * 100, //公司营业执照统一社会信用代码
  66. 'bankCardId': state.form.cardNumber, //对公名称
  67. 'imageUrl': state.form.url, //密码
  68. },
  69. method: "POST",
  70. showLoading: true,
  71. };
  72. request(queryRecharge, options)
  73. .then((res) => {
  74. let data = stringToJson(res.bizContent)
  75. msg("充值成功")
  76. setTimeout(() => {
  77. if (data.status == 1) {
  78. uni.navigateBack({
  79. delta: 1
  80. })
  81. }
  82. }, 1500)
  83. console.log("充值成功", data)
  84. })
  85. .catch((err) => {
  86. console.log(err);
  87. });
  88. }
  89. const goBank = () => {
  90. const params = encodeURIComponent(JSON.stringify(state.form));
  91. uni.redirectTo({
  92. //关闭当前页面,跳转到应用内的某个页面。
  93. url: `/subpackage/personal-center/setting/bank-card/bank-card?choiceCard=1&value=${params}`
  94. });
  95. }
  96. const cardDbImageOcr = (val : any) => {
  97. var imageType = val;
  98. uni.chooseImage({
  99. count: 1, //只能选取一张照片
  100. sizeType: ["original", "compressed"], //可以指定是原图还是压缩图,默认二者都有
  101. sourceType: ["camera", "album"], //从相册选择
  102. success: function (res) {
  103. uploadFile(res.tempFilePaths[0], "", "").then((data) => {
  104. state.form.url = data;
  105. })
  106. },
  107. });
  108. };
  109. // 校验金额输入框
  110. const checkNum = (event) => {
  111. let sNum = event.target.value.toString(); //先转换成字符串类
  112. if (sNum.indexOf('.') == 0) {//第一位就是 .
  113. console.log('first str is .')
  114. sNum = '0' + sNum
  115. }
  116. sNum = sNum.replace(/[^\d.]/g, ""); //清除“数字”和“.”以外的字符
  117. sNum = sNum.replace(/\.{2,}/g, "."); //只保留第一个. 清除多余的
  118. sNum = sNum.replace(".", "$#$").replace(/\./g, "").replace("$#$", ".");
  119. sNum = sNum.replace(/^(\-)*(\d+)\.(\d\d).*$/, '$1$2.$3');//只能输入两个小数
  120. //以上已经过滤,此处控制的是如果没有小数点,首位不能为类似于 01、02的金额
  121. if (sNum.indexOf(".") < 0 && sNum != "") {
  122. sNum = parseFloat(sNum);
  123. }
  124. console.log('输入的值1', sNum)
  125. setTimeout(() => {
  126. state.form.fee = sNum
  127. }, 20)
  128. }
  129. </script>
  130. <style scoped>
  131. .wrap {
  132. padding: 0 30rpx;
  133. }
  134. /deep/.u-form-item--right__content__slot {
  135. display: flex;
  136. justify-content: space-between;
  137. }
  138. image {
  139. width: 200rpx;
  140. height: 200rpx;
  141. }
  142. button {
  143. width: 75%;
  144. height: 80rpx;
  145. margin-top: 450rpx;
  146. background: linear-gradient(-90deg, #43a1e0 0%, #13e7c1 100%);
  147. border-radius: 40rpx;
  148. font-size: 32rpx;
  149. font-weight: 400;
  150. color: #ffffff;
  151. line-height: 80rpx;
  152. }
  153. .card {
  154. width: 100%;
  155. display: flex;
  156. justify-content: space-between;
  157. }
  158. </style>