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.

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148
  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. <button @click='goRecharge()'>充值</button>
  17. </u-form>
  18. </view>
  19. </template>
  20. <script setup lang="ts">
  21. import { reactive } from "vue";
  22. import { rechargeApi } from "@/utils/network/api.js";
  23. import { request } from "@/utils/network/request.js";
  24. import { stringToJson } from "@/utils/network/encryption.js";
  25. import { navTo, uploadFile, msg } from "@/utils/utils";
  26. import { onLoad } from "@dcloudio/uni-app";
  27. const state = reactive({
  28. form: {
  29. name: '',//对公用户登录名
  30. fee: '',
  31. cardNumber: '',
  32. },
  33. bankAddress: "" //银行卡名称
  34. })
  35. onLoad((option : any) => {
  36. if (option.value) {
  37. state.form = JSON.parse(decodeURIComponent(option.value))
  38. }
  39. if (option.cardNumber) {
  40. state.form.cardNumber = option.cardNumber;
  41. }
  42. if (option.name) {
  43. state.form.name = option.name
  44. }
  45. if (option.bankAddress) {
  46. state.bankAddress = option.bankAddress
  47. }
  48. console.log("option", option.cardNumber, state.form, option.bankAddress)
  49. });
  50. const goRecharge = () => {
  51. for (var i in state.form) {
  52. if (!state.form[i]) {
  53. msg('请把信息填写完整!')
  54. return;
  55. }
  56. }
  57. const options = {
  58. type: 2,
  59. data: {
  60. 'accountId': state.form.name, //账户编号
  61. 'incomeFee': state.form.fee * 100, //公司营业执照统一社会信用代码
  62. 'reciprocalAccount': state.form.cardNumber, //对公名称
  63. 'reciprocalBankName': state.bankAddress
  64. },
  65. method: "POST",
  66. showLoading: true,
  67. };
  68. request(rechargeApi, options)
  69. .then((res) => {
  70. let data = stringToJson(res.bizContent)
  71. msg("充值成功,待审核")
  72. setTimeout(() => {
  73. uni.navigateBack({
  74. delta: 1
  75. })
  76. }, 1500)
  77. console.log("充值成功", data)
  78. })
  79. .catch((err) => {
  80. console.log(err);
  81. });
  82. }
  83. const goBank = () => {
  84. const params = encodeURIComponent(JSON.stringify(state.form));
  85. uni.redirectTo({
  86. //关闭当前页面,跳转到应用内的某个页面。
  87. url: `/subpackage/personal-center/setting/bank-card/bank-card?choiceCard=1&value=${params}`
  88. });
  89. }
  90. // 校验金额输入框
  91. const checkNum = (event) => {
  92. let sNum = event.target.value.toString(); //先转换成字符串类
  93. if (sNum.indexOf('.') == 0) {//第一位就是 .
  94. console.log('first str is .')
  95. sNum = '0' + sNum
  96. }
  97. sNum = sNum.replace(/[^\d.]/g, ""); //清除“数字”和“.”以外的字符
  98. sNum = sNum.replace(/\.{2,}/g, "."); //只保留第一个. 清除多余的
  99. sNum = sNum.replace(".", "$#$").replace(/\./g, "").replace("$#$", ".");
  100. sNum = sNum.replace(/^(\-)*(\d+)\.(\d\d).*$/, '$1$2.$3');//只能输入两个小数
  101. //以上已经过滤,此处控制的是如果没有小数点,首位不能为类似于 01、02的金额
  102. if (sNum.indexOf(".") < 0 && sNum != "") {
  103. sNum = parseFloat(sNum);
  104. }
  105. console.log('输入的值1', sNum)
  106. setTimeout(() => {
  107. state.form.fee = sNum
  108. }, 20)
  109. }
  110. </script>
  111. <style scoped>
  112. .wrap {
  113. padding: 0 30rpx;
  114. }
  115. /deep/.u-form-item--right__content__slot {
  116. display: flex;
  117. justify-content: space-between;
  118. }
  119. image {
  120. width: 200rpx;
  121. height: 200rpx;
  122. }
  123. button {
  124. width: 75%;
  125. height: 80rpx;
  126. margin-top: 550rpx;
  127. background: linear-gradient(-90deg, #43a1e0 0%, #13e7c1 100%);
  128. border-radius: 40rpx;
  129. font-size: 32rpx;
  130. font-weight: 400;
  131. color: #ffffff;
  132. line-height: 80rpx;
  133. }
  134. .card {
  135. width: 100%;
  136. display: flex;
  137. justify-content: space-between;
  138. }
  139. </style>