zhaoxiaoqiang1
2026-01-04 f1d30d03186c79ca2cbcfe60d6d2ce7d73fba97b
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
<template>
  <div>
    <el-dialog 
      title="银行卡绑定"
      @close="close"
      :visible.sync="dialogVisible" 
      :close-on-click-modal='false'
      center
      width="380px"
    >
       <el-form :model="form" :rules="rules" ref="form" label-width="120px" size="small">
        <el-form-item label="还款银行户名" prop="name">
          <el-input v-model="form.name"></el-input>
        </el-form-item>
        <el-form-item label="银行卡号" prop="bankno">
          <el-input v-model="form.bankno"></el-input>
        </el-form-item>
        <el-form-item label="预留手机号" prop="bankPhone">
          <el-input v-model="form.bankPhone" maxlength=11></el-input>
        </el-form-item>
        <el-form-item label="短信验证码" prop="smsCode">
          <el-input v-model="form.smsCode" maxlength=6></el-input>
        </el-form-item>
       </el-form>
      <span slot="footer" class="dialog-footer">
        <el-button plain @click="handleBindBankSMS(form)" v-if="total === 60">发送验证码</el-button>
        <el-button plain @click="handleBindBankSMS(form)" v-else disabled>重新发送({{total}}s)</el-button>
        <el-button type="primary" @click="submit(form, 'form')">确定</el-button>
      </span>
    </el-dialog>
  </div>
</template>
 
<style lang="stylus" scoped>
div
  &>>>.el-dialog
    width auto
    max-width calc(100% - 180px)
    min-width 500px
    max-height 100%
    overflow hidden
    margin 0 !important
    position absolute
    left 50%
    top 50%
    transform translate(-50%,-50%)
    .el-dialog__body
      padding 20px
      max-height 576px
      overflow auto
    .el-dialog__header
     padding 20px 0 0
    .el-dialog__footer
      padding 0 0 20px
      .el-button
        width: 120px
        font-size: 14px
        line-height: 20px
        padding: 5px 0
        &:nth-child(1)
          margin-right: 30px
</style>
 
<script>
 
import common from "@/utils/common";
import { getBindBankSMS, verifyBindBankSMS } from "@/api/product";
export default {
  props:['visible', 'loanInfo'],
  data(){
    return {
      form: {
        name: '',
        bankno: '',
        bankPhone: '',
        smsCode: ''
      },
      rules:{
        name:[
          { required: true, message: '请输入客户姓名', trigger: 'blur' },
          common.validate("bankName")
        ],
        bankno:[
          { required: true, message: '请输入银行卡号', trigger: 'blur' },
          common.validate("number")
        ],
        bankPhone:[
          { required: true, message: '请输入银行预留手机号', trigger: 'blur' },
          common.validate("phone") 
        ],
        smsCode:[{ required: true, message: '请输入短信验证码', trigger: 'blur' }]
      },
      timer:'', // 定时器
      total: 60,
      messageNo: '',
      isSendMsgFlag: false
    }
  },
  computed: {
    dialogVisible:{
      get(){
        return this.visible
      },
      set(){}
    }
  },
  watch: {
    visible(newV) {
      if(newV) {
        this.messageNo = ''
        this.total = 60
        this.isSendMsgFlag = false
        const { loanInfo } = this
        this.form.name = loanInfo.repaymentbankname
        if(loanInfo.repaymentcardno) {
          this.form.bankno = loanInfo.repaymentcardno
        }
      } else {
        // 每次离开当前界面时,清除定时器
        clearInterval(this.timer)
        this.$refs.form.resetFields()
      }
    }
  },
  methods:{
    // 发送验证码
    async handleBindBankSMS(form) {
      console.log('loanInfo:', this.loanInfo)
      const { loanInfo } = this
      if(!form.name){
        this.$message.warning('请输入客户姓名')
        return
      }
      if(!form.bankno){
        this.$message.warning('请输入银行卡号')
        return
      }
      const reg = /^[1][3,4,5,7,8,9][0-9]{9}$/
      if(!form.bankPhone || !reg.test(form.bankPhone)){
        this.$message.warning('请输入银行预留手机号')
        return
      }
      if(form.bankPhone){
        console.log('发送验证码')
        this.total--
        this.timer = setInterval(() => {
          if(this.total>=1){
            this.total--
          }
          if(this.total <= 0) {
            clearInterval(this.timer)
            this.total = 60
          }
        },1000)
        let res = await getBindBankSMS({
          applySerialNo: loanInfo.serialno, // loanInfo.serialno, // 申请流水号
          customerId: loanInfo.customerid, // 用户id
          customerName: form.name, // 姓名
          certId: loanInfo.certId, // 证件账号
          idType: loanInfo.certType, // 证件类型
          bankNo: form.bankno, // 银行卡号
          bankId: loanInfo.repaymentbankno,// 绑卡银行ID
          bankPhone: form.bankPhone, // 预留手机号
          scene: "03", // 01授信绑卡、02用信绑卡、03还款绑卡、04 前置绑卡
        })
        if(res.code && res.code === '00') {
          this.messageNo = res.result.messageNo
          this.isSendMsgFlag = true
          this.$message.success(res.msg)
        } else {
          this.total = 60
          this.isSendMsgFlag = false
          clearInterval(this.timer)
        }
      }
    },
    submit(){
      const { form } = this
      this.$refs.form.validate(async (valid) => {
        if (valid) {
          if(!this.isSendMsgFlag){
            this.$message.warning('请输入正确的验证码!')
            return
          }
          const res = await verifyBindBankSMS({
            messageNo: this.messageNo,
            smsCode: form.smsCode
          })
          if(res.code === '00'){
            this.$message.success(res.msg)
            this.$emit('success', form.bankno)
          }
        } else {
          return false;
        }
      });
    },
    close(){
      this.$emit('close')
    }
  }
}
</script>