index.vue 7.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241
  1. <template>
  2. <div class="app-container" v-loading="loading">
  3. <el-form :model="form" :rules="rules" ref="form" label-width="140px">
  4. <el-form-item label="姓名:" prop="userName">
  5. <el-input
  6. v-model.trim="form.userName"
  7. placeholder="请输入姓名"
  8. clearable
  9. :readonly=true
  10. />
  11. </el-form-item>
  12. <el-form-item label="手机号码:" prop="userPhone">
  13. <el-input
  14. v-model.trim="form.userPhone"
  15. placeholder="请输入手机号码"
  16. clearable
  17. maxlength="11"
  18. minlength="11"
  19. type="text"
  20. onkeyup="value=value.replace(/^(0+)|[^\d]+/g,'')"
  21. />
  22. </el-form-item>
  23. <el-form-item label="充值金额:" prop="money">
  24. <el-input v-model.trim="form.money" placeholder="请输入充值金额" type="tel" @input="inputMoney" min="0.10" />
  25. <!-- <el-input
  26. v-model.trim="form.money"
  27. placeholder="请输入充值金额"
  28. clearable
  29. onkeyup="value=value.replace(/^(0+)|[^\d]+/g,'')"
  30. /> -->
  31. </el-form-item>
  32. <el-form-item label="充值到账比例:" prop="proportion">
  33. <el-input
  34. v-model.trim="form.proportion"
  35. placeholder="充值到账比例"
  36. clearable
  37. :disabled="true"
  38. />
  39. </el-form-item>
  40. <el-form-item label-width="0" style="margin-top:50px;" class="payTypeClass" prop="payType">
  41. <img src="../../../assets/images/xj.png" alt="" @click="form.payType = 1" v-if="form.payType !== 1">
  42. <img src="../../../assets/images/xj-c.png" alt="" v-if="form.payType === 1">
  43. <img src="../../../assets/images/wx.png" alt="" @click="form.payType = 2" v-if="form.payType !== 2">
  44. <img src="../../../assets/images/wx-c.png" alt="" v-if="form.payType === 2">
  45. <img src="../../../assets/images/zfb.png" alt="" @click="form.payType = 3" v-if="form.payType !== 3">
  46. <img src="../../../assets/images/zfb-c.png" alt="" v-if="form.payType === 3">
  47. </el-form-item>
  48. <el-form-item label-width="0" style="margin-top:50px;">
  49. <el-button type="primary" @click="submitForm" style="width:100%">充值</el-button>
  50. </el-form-item>
  51. </el-form>
  52. <div class="qrcode" ref="qrCodeUrl"></div>
  53. <img :src="codeUrl" alt="请扫描二维码支付" v-if="codeUrl" title="请扫描二维码支付">
  54. </div>
  55. </template>
  56. <script>
  57. import QRCode from 'qrcodejs2'
  58. import { order, topScanPayApi } from "@/api/recharge/userRecharge";
  59. import { validatePhone } from "@/utils/validate2";
  60. export default {
  61. name: "admin",
  62. data() {
  63. return {
  64. loading:true,
  65. // 表单参数
  66. form: {
  67. userPhone:'',
  68. userName:'',
  69. money:'',
  70. proportion:'',
  71. payType:0,
  72. userId:undefined,
  73. scene:1
  74. },
  75. formSubmit:{
  76. userPhone:'',
  77. userName:'',
  78. money:'',
  79. payType:0,
  80. userId:undefined,
  81. scene:1
  82. },
  83. codeUrl:null,
  84. // 表单校验
  85. rules: {
  86. userPhone: [
  87. { required: true, message: "手机号码不能为空", trigger: "blur", },
  88. { validator: validatePhone, trigger: "blur" },
  89. ],
  90. userName: [
  91. { required: true, message: "姓名不能为空", trigger: "blur" }
  92. ],
  93. money: [
  94. { required: true, message: "充值金额不能为空", trigger: "blur" },
  95. ],
  96. // proportion: [
  97. // { required: true, message: "充值到账比例不能为空,请返回页面绑定比例关系", trigger: "blur" }
  98. // ],
  99. payType: [
  100. { required: true, message: "请选择支付方式", trigger: "blur" }
  101. ],
  102. }
  103. };
  104. },
  105. created(){
  106. if(localStorage.getItem("chongzhi")){
  107. this.loading = false
  108. let obj = JSON.parse(localStorage.getItem("chongzhi"))
  109. this.form.userName = obj.name
  110. this.form.proportion = obj.proportion
  111. this.form.userId = obj.sid
  112. this.form.userPhone = obj.contacts
  113. localStorage.removeItem('chongzhi')
  114. }else{
  115. this.$message.error('请从人员信息充值入口进入该页面')
  116. setTimeout(() =>{
  117. this.$router.push({path:'personnel'})
  118. },1500)
  119. }
  120. },
  121. methods: {
  122. creatQrCode(url) {
  123. var qrcode = new QRCode(this.$refs.qrCodeUrl, {
  124. text: url, // 需要转换为二维码的内容
  125. width: 250,
  126. height: 250,
  127. colorDark: '#000000',
  128. colorLight: '#ffffff',
  129. correctLevel: QRCode.CorrectLevel.H
  130. })
  131. this.msgSuccess("已生成支付二维码,请扫描二维码进行支付。");
  132. this.loading = false
  133. },
  134. inputMoney(e){ //金额充值效验
  135. var val = e.replace(/(^\s*)|(\s*$)/g, "")
  136. if (!val) {
  137. this.form.money = '';
  138. return
  139. }
  140. var reg = /[^\d.]/g
  141. // 只能是数字和小数点,不能是其他输入
  142. val = val.replace(reg, "")
  143. // // 保证第一位只能是数字,不能是点
  144. val = val.replace(/^\./g, "");
  145. // // 小数只能出现1位
  146. val = val.replace(".", "$#$").replace(/\./g, "").replace("$#$", ".");
  147. // // 小数点后面保留2位
  148. val = val.replace(/^(\-)*(\d+)\.(\d\d).*$/, '$1$2.$3');
  149. if(val.indexOf("0") == 0){
  150. if(val.length == 2){
  151. val = "0."
  152. }
  153. }
  154. this.$nextTick(() => {
  155. this.form.money = val;
  156. })
  157. },
  158. forceUpdate(){ //重置form
  159. this.form = JSON.parse(JSON.stringify(this.form));
  160. },
  161. /** 提交按钮 */
  162. submitForm(row) {
  163. if(this.form.money == 0){
  164. this.msgError("充值金额不能为0元")
  165. }else{
  166. this.$refs["form"].validate(valid => {
  167. if (valid) {
  168. if(!this.form.payType) return this.msgError("请选择支付方式");
  169. this.loading = true
  170. this.formSubmit.userPhone = this.form.userPhone
  171. this.formSubmit.userName = this.form.userName
  172. this.formSubmit.money = Number(this.form.money).toFixed(2)
  173. this.formSubmit.payType = this.form.payType
  174. this.formSubmit.userId = this.form.userId
  175. this.formSubmit.userId = this.form.userId
  176. if (this.form.payType === 1) { //后台现金
  177. order(this.formSubmit).then(response => {
  178. this.msgSuccess("已生成支付订单");
  179. this.codeUrl = '';
  180. this.loading = false
  181. });
  182. } else {
  183. //移除二维码
  184. var div = document.getElementsByClassName("qrcode")[0];
  185. // 获取 div 标签下的所有子节点
  186. var pObjs = div.childNodes;
  187. for (var i = pObjs.length - 1; i >= 0; i--) { // 一定要倒序,正序是删不干净的,可自行尝试
  188. div.removeChild(pObjs[i]);
  189. }
  190. topScanPayApi(this.formSubmit).then(response => {
  191. this.creatQrCode(response.data)
  192. })
  193. // scanPayQr(this.form).then(response => {
  194. // this.codeUrl = "data:image/gif;base64," + response.msg;
  195. // this.msgSuccess("已生成支付二维码,请扫描二维码进行支付。");
  196. // this.loading = false
  197. // });
  198. }
  199. this.reset()
  200. }
  201. })
  202. }
  203. },
  204. // 表单重置
  205. reset() {
  206. this.form = {
  207. userPhone:'',
  208. userName:'',
  209. money:'',
  210. payType:0,
  211. };
  212. this.resetForm("form");
  213. },
  214. },
  215. }
  216. </script>
  217. <style lang="scss" scoped>
  218. .app-container{
  219. padding-top: 50px;
  220. display: flex;
  221. flex-direction: column;
  222. align-items: center;
  223. justify-content: center;
  224. }
  225. .payTypeClass{
  226. img{
  227. width: 120px;
  228. height: 90px;
  229. margin: 0 10px;
  230. }
  231. }
  232. </style>