|  | @@ -1,171 +1,172 @@
 | 
	
		
			
				|  |  | -<template>
 | 
	
		
			
				|  |  | -  <el-form class="mx-form" ref="form" :model="model" :rules="rules" label-width="80px" label-position="left">
 | 
	
		
			
				|  |  | -    <el-form-item prop="mobile" label="手机号码" required>
 | 
	
		
			
				|  |  | -      <div class="mx-mobile-send">
 | 
	
		
			
				|  |  | -        <el-input v-model="model.mobile" auto-complete="off" placeholder="请输入手机号码">
 | 
	
		
			
				|  |  | -        </el-input>
 | 
	
		
			
				|  |  | -        <el-button type="primary" class="mx-send" :class="{'inactive':countdown>0}" @click="sendValidateCode">{{countdown>0?`(${countdown})s`:'发送'}}</el-button>
 | 
	
		
			
				|  |  | -      </div>
 | 
	
		
			
				|  |  | -    </el-form-item>
 | 
	
		
			
				|  |  | -    <el-form-item prop="smsCode" label="验证码" required>
 | 
	
		
			
				|  |  | -      <el-input v-model="model.smsCode" auto-complete="off" placeholder="请输入验证码">
 | 
	
		
			
				|  |  | -      </el-input>
 | 
	
		
			
				|  |  | -    </el-form-item>
 | 
	
		
			
				|  |  | -    <el-form-item prop="newPassword" label="新密码" required>
 | 
	
		
			
				|  |  | -      <el-input type="password" v-model="model.newPassword" auto-complete="new-password" placeholder="请输入新密码">
 | 
	
		
			
				|  |  | -      </el-input>
 | 
	
		
			
				|  |  | -    </el-form-item>
 | 
	
		
			
				|  |  | -    <el-form-item prop="newPwdRepeat" label="确认密码" required>
 | 
	
		
			
				|  |  | -      <el-input type="password" v-model="model.newPwdRepeat" auto-complete="new-password" placeholder="请确认新密码">
 | 
	
		
			
				|  |  | -      </el-input>
 | 
	
		
			
				|  |  | -    </el-form-item>
 | 
	
		
			
				|  |  | -    <div class="mx-buttons">
 | 
	
		
			
				|  |  | -      <el-button type="primary" @click="submitAction">确认修改</el-button>
 | 
	
		
			
				|  |  | -    </div>
 | 
	
		
			
				|  |  | -  </el-form>
 | 
	
		
			
				|  |  | -</template>
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -<script>
 | 
	
		
			
				|  |  | -import {
 | 
	
		
			
				|  |  | -  sendSmsNoValidation,
 | 
	
		
			
				|  |  | -  resetCardPassword
 | 
	
		
			
				|  |  | -} from "@/api/login";
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -export default {
 | 
	
		
			
				|  |  | -  name: "forgetPassword",
 | 
	
		
			
				|  |  | -  data() {
 | 
	
		
			
				|  |  | -    return {
 | 
	
		
			
				|  |  | -      countdown: 0,
 | 
	
		
			
				|  |  | -      model: {
 | 
	
		
			
				|  |  | -        mobile: '',
 | 
	
		
			
				|  |  | -        smsCode: '',
 | 
	
		
			
				|  |  | -        newPassword: '',
 | 
	
		
			
				|  |  | -        newPwdRepeat: ''
 | 
	
		
			
				|  |  | -      },
 | 
	
		
			
				|  |  | -      rules: {
 | 
	
		
			
				|  |  | -        mobile: [{
 | 
	
		
			
				|  |  | -          required: true,
 | 
	
		
			
				|  |  | -          message: '手机号码必填',
 | 
	
		
			
				|  |  | -        }, {
 | 
	
		
			
				|  |  | -          pattern: /^1[3|4|5|6|7|8|9][0-9]\d{8}$/,
 | 
	
		
			
				|  |  | -          message: '手机号码格式不正确',
 | 
	
		
			
				|  |  | -        }],
 | 
	
		
			
				|  |  | -        smsCode: [{
 | 
	
		
			
				|  |  | -          required: true,
 | 
	
		
			
				|  |  | -          message: '验证码必填',
 | 
	
		
			
				|  |  | -        }],
 | 
	
		
			
				|  |  | -        newPassword: [{
 | 
	
		
			
				|  |  | -          required: true,
 | 
	
		
			
				|  |  | -          message: '新密码必填',
 | 
	
		
			
				|  |  | -        }, {
 | 
	
		
			
				|  |  | -          min: 6,
 | 
	
		
			
				|  |  | -          max: 20,
 | 
	
		
			
				|  |  | -          message: '新密码长度在6-20个字符之间',
 | 
	
		
			
				|  |  | -        }],
 | 
	
		
			
				|  |  | -        newPwdRepeat: [{
 | 
	
		
			
				|  |  | -          required: true,
 | 
	
		
			
				|  |  | -          message: '确认密码必填',
 | 
	
		
			
				|  |  | -        }, {
 | 
	
		
			
				|  |  | -          validator: (rule, value, callback) => {
 | 
	
		
			
				|  |  | -            const valid = value == this.model.newPassword
 | 
	
		
			
				|  |  | -            const params = valid ? undefined : new Error(rule.message)
 | 
	
		
			
				|  |  | -            callback(params)
 | 
	
		
			
				|  |  | -          },
 | 
	
		
			
				|  |  | -          message: '确认密码与新密码不一致',
 | 
	
		
			
				|  |  | -        }]
 | 
	
		
			
				|  |  | -      }
 | 
	
		
			
				|  |  | -    }
 | 
	
		
			
				|  |  | -  },
 | 
	
		
			
				|  |  | -  methods: {
 | 
	
		
			
				|  |  | -    sendValidateCode: function () {
 | 
	
		
			
				|  |  | -      if (this.countdown > 0) return
 | 
	
		
			
				|  |  | -      this.$refs.form.validateField('mobile', (error) => {
 | 
	
		
			
				|  |  | -        // validate success
 | 
	
		
			
				|  |  | -        if (!error) {
 | 
	
		
			
				|  |  | -          sendSmsNoValidation({
 | 
	
		
			
				|  |  | -            mobile: this.model.mobile,
 | 
	
		
			
				|  |  | -            smsType: 1
 | 
	
		
			
				|  |  | -          }).then(res => {
 | 
	
		
			
				|  |  | -            // send code success
 | 
	
		
			
				|  |  | -            this.msgSuccess('发送成功')
 | 
	
		
			
				|  |  | -            this.beginCountDown()
 | 
	
		
			
				|  |  | -          })
 | 
	
		
			
				|  |  | -        } else {
 | 
	
		
			
				|  |  | -          this.msgError(error)
 | 
	
		
			
				|  |  | -        }
 | 
	
		
			
				|  |  | -      })
 | 
	
		
			
				|  |  | -    },
 | 
	
		
			
				|  |  | -    submitAction: function () {
 | 
	
		
			
				|  |  | -      this.$refs.form.validate(valid => {
 | 
	
		
			
				|  |  | -        console.log('submitAction', valid)
 | 
	
		
			
				|  |  | -        if (valid) {
 | 
	
		
			
				|  |  | -          resetCardPassword(this.model).then(res => {
 | 
	
		
			
				|  |  | -            this.msgSuccess('新密码修改成功')
 | 
	
		
			
				|  |  | -            this.$emit('resetPwdSuccess')
 | 
	
		
			
				|  |  | -          })
 | 
	
		
			
				|  |  | -        }
 | 
	
		
			
				|  |  | -      })
 | 
	
		
			
				|  |  | -    },
 | 
	
		
			
				|  |  | -    goBack: function () {
 | 
	
		
			
				|  |  | -      uni.navigateBack({
 | 
	
		
			
				|  |  | -        delta: 1
 | 
	
		
			
				|  |  | -      })
 | 
	
		
			
				|  |  | -    },
 | 
	
		
			
				|  |  | -    beginCountDown() {
 | 
	
		
			
				|  |  | -      this.countdown = 90
 | 
	
		
			
				|  |  | -      const timer = setInterval(_ => {
 | 
	
		
			
				|  |  | -        if (this.countdown == 0) clearInterval(timer)
 | 
	
		
			
				|  |  | -        else this.countdown -= 1
 | 
	
		
			
				|  |  | -      }, 1000)
 | 
	
		
			
				|  |  | -    }
 | 
	
		
			
				|  |  | -  }
 | 
	
		
			
				|  |  | -}
 | 
	
		
			
				|  |  | -</script>
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -<style scoped>
 | 
	
		
			
				|  |  | -.mx-form {
 | 
	
		
			
				|  |  | -  padding: 40px 20px;
 | 
	
		
			
				|  |  | -  margin-left: 220px;
 | 
	
		
			
				|  |  | -  margin-right: 25px;
 | 
	
		
			
				|  |  | -  border-radius: 16px;
 | 
	
		
			
				|  |  | -}
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -.mx-back {
 | 
	
		
			
				|  |  | -  font-size: 24px;
 | 
	
		
			
				|  |  | -  margin-top: 20px;
 | 
	
		
			
				|  |  | -  width: 36px;
 | 
	
		
			
				|  |  | -  height: 36px;
 | 
	
		
			
				|  |  | -  border-radius: 18px;
 | 
	
		
			
				|  |  | -  border: 1px solid #999999;
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -  display: flex;
 | 
	
		
			
				|  |  | -  justify-content: center;
 | 
	
		
			
				|  |  | -  align-items: center;
 | 
	
		
			
				|  |  | -}
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -.mx-mobile-send {
 | 
	
		
			
				|  |  | -  display: flex;
 | 
	
		
			
				|  |  | -  justify-content: space-between;
 | 
	
		
			
				|  |  | -  align-items: center;
 | 
	
		
			
				|  |  | -}
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -.mx-send {
 | 
	
		
			
				|  |  | -  width: 60px;
 | 
	
		
			
				|  |  | -  margin-left: 10px;
 | 
	
		
			
				|  |  | -  display: flex;
 | 
	
		
			
				|  |  | -  justify-content: center;
 | 
	
		
			
				|  |  | -  align-items: center;
 | 
	
		
			
				|  |  | -}
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -.mx-send.inactive {
 | 
	
		
			
				|  |  | -  background-color: #aaaaaa;
 | 
	
		
			
				|  |  | -  border-color: #aaaaaa;
 | 
	
		
			
				|  |  | -}
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -.mx-buttons {
 | 
	
		
			
				|  |  | -  display: flex;
 | 
	
		
			
				|  |  | -  justify-content: center;
 | 
	
		
			
				|  |  | -  align-items: center;
 | 
	
		
			
				|  |  | -  margin-top: 40px;
 | 
	
		
			
				|  |  | -}
 | 
	
		
			
				|  |  | -</style>
 | 
	
		
			
				|  |  | +<template>
 | 
	
		
			
				|  |  | +  <el-form class="mx-form" ref="form" :model="model" :rules="rules" label-width="80px" label-position="left">
 | 
	
		
			
				|  |  | +    <el-form-item prop="mobile" label="手机号码" required>
 | 
	
		
			
				|  |  | +      <div class="mx-mobile-send">
 | 
	
		
			
				|  |  | +        <el-input v-model="model.mobile" auto-complete="off" placeholder="请输入手机号码">
 | 
	
		
			
				|  |  | +        </el-input>
 | 
	
		
			
				|  |  | +        <el-button type="primary" class="mx-send" :class="{'inactive':countdown>0}" @click="sendValidateCode">
 | 
	
		
			
				|  |  | +          {{ countdown > 0 ? `(${countdown})s` : '发送' }}
 | 
	
		
			
				|  |  | +        </el-button>
 | 
	
		
			
				|  |  | +      </div>
 | 
	
		
			
				|  |  | +    </el-form-item>
 | 
	
		
			
				|  |  | +    <el-form-item prop="smsCode" label="验证码" required>
 | 
	
		
			
				|  |  | +      <el-input v-model="model.smsCode" auto-complete="off" placeholder="请输入验证码">
 | 
	
		
			
				|  |  | +      </el-input>
 | 
	
		
			
				|  |  | +    </el-form-item>
 | 
	
		
			
				|  |  | +    <el-form-item prop="newPassword" label="新密码" required>
 | 
	
		
			
				|  |  | +      <el-input type="password" v-model="model.newPassword" auto-complete="new-password" placeholder="请输入新密码">
 | 
	
		
			
				|  |  | +      </el-input>
 | 
	
		
			
				|  |  | +    </el-form-item>
 | 
	
		
			
				|  |  | +    <el-form-item prop="newPwdRepeat" label="确认密码" required>
 | 
	
		
			
				|  |  | +      <el-input type="password" v-model="model.newPwdRepeat" auto-complete="new-password" placeholder="请确认新密码">
 | 
	
		
			
				|  |  | +      </el-input>
 | 
	
		
			
				|  |  | +    </el-form-item>
 | 
	
		
			
				|  |  | +    <div class="mx-buttons">
 | 
	
		
			
				|  |  | +      <el-button type="primary" @click="submitAction">确认修改</el-button>
 | 
	
		
			
				|  |  | +    </div>
 | 
	
		
			
				|  |  | +  </el-form>
 | 
	
		
			
				|  |  | +</template>
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +<script>
 | 
	
		
			
				|  |  | +import { resetCardPassword, sendSmsNoValidation } from '@/api/login'
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +export default {
 | 
	
		
			
				|  |  | +  name: 'forgetPassword',
 | 
	
		
			
				|  |  | +  data() {
 | 
	
		
			
				|  |  | +    return {
 | 
	
		
			
				|  |  | +      countdown: 0,
 | 
	
		
			
				|  |  | +      model: {
 | 
	
		
			
				|  |  | +        mobile: '',
 | 
	
		
			
				|  |  | +        smsCode: '',
 | 
	
		
			
				|  |  | +        newPassword: '',
 | 
	
		
			
				|  |  | +        newPwdRepeat: ''
 | 
	
		
			
				|  |  | +      },
 | 
	
		
			
				|  |  | +      rules: {
 | 
	
		
			
				|  |  | +        mobile: [{
 | 
	
		
			
				|  |  | +          required: true,
 | 
	
		
			
				|  |  | +          message: '手机号码必填'
 | 
	
		
			
				|  |  | +        }, {
 | 
	
		
			
				|  |  | +          pattern: /^1[3|4|5|6|7|8|9][0-9]\d{8}$/,
 | 
	
		
			
				|  |  | +          message: '手机号码格式不正确'
 | 
	
		
			
				|  |  | +        }],
 | 
	
		
			
				|  |  | +        smsCode: [{
 | 
	
		
			
				|  |  | +          required: true,
 | 
	
		
			
				|  |  | +          message: '验证码必填'
 | 
	
		
			
				|  |  | +        }],
 | 
	
		
			
				|  |  | +        newPassword: [{
 | 
	
		
			
				|  |  | +          required: true,
 | 
	
		
			
				|  |  | +          message: '新密码必填'
 | 
	
		
			
				|  |  | +        }, {
 | 
	
		
			
				|  |  | +          min: 6,
 | 
	
		
			
				|  |  | +          max: 20,
 | 
	
		
			
				|  |  | +          message: '新密码长度在6-20个字符之间'
 | 
	
		
			
				|  |  | +        }],
 | 
	
		
			
				|  |  | +        newPwdRepeat: [{
 | 
	
		
			
				|  |  | +          required: true,
 | 
	
		
			
				|  |  | +          message: '确认密码必填'
 | 
	
		
			
				|  |  | +        }, {
 | 
	
		
			
				|  |  | +          validator: (rule, value, callback) => {
 | 
	
		
			
				|  |  | +            const valid = value == this.model.newPassword
 | 
	
		
			
				|  |  | +            const params = valid ? undefined : new Error(rule.message)
 | 
	
		
			
				|  |  | +            callback(params)
 | 
	
		
			
				|  |  | +          },
 | 
	
		
			
				|  |  | +          message: '确认密码与新密码不一致'
 | 
	
		
			
				|  |  | +        }]
 | 
	
		
			
				|  |  | +      }
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +  },
 | 
	
		
			
				|  |  | +  methods: {
 | 
	
		
			
				|  |  | +    sendValidateCode: function() {
 | 
	
		
			
				|  |  | +      if (this.countdown > 0) return
 | 
	
		
			
				|  |  | +      this.$refs.form.validateField('mobile', (error) => {
 | 
	
		
			
				|  |  | +        // validate success
 | 
	
		
			
				|  |  | +        if (!error) {
 | 
	
		
			
				|  |  | +          sendSmsNoValidation({
 | 
	
		
			
				|  |  | +            mobile: this.model.mobile,
 | 
	
		
			
				|  |  | +            smsType: 1
 | 
	
		
			
				|  |  | +          }).then(res => {
 | 
	
		
			
				|  |  | +            // send code success
 | 
	
		
			
				|  |  | +            this.msgSuccess('发送成功')
 | 
	
		
			
				|  |  | +            this.beginCountDown()
 | 
	
		
			
				|  |  | +          })
 | 
	
		
			
				|  |  | +        } else {
 | 
	
		
			
				|  |  | +          this.msgError(error)
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +      })
 | 
	
		
			
				|  |  | +    },
 | 
	
		
			
				|  |  | +    submitAction: function() {
 | 
	
		
			
				|  |  | +      this.$refs.form.validate(valid => {
 | 
	
		
			
				|  |  | +        if (valid) {
 | 
	
		
			
				|  |  | +          resetCardPassword(this.model).then(res => {
 | 
	
		
			
				|  |  | +            this.msgSuccess('新密码修改成功')
 | 
	
		
			
				|  |  | +            this.$emit('resetPwdSuccess')
 | 
	
		
			
				|  |  | +          })
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +      })
 | 
	
		
			
				|  |  | +    },
 | 
	
		
			
				|  |  | +    goBack: function() {
 | 
	
		
			
				|  |  | +      uni.navigateBack({
 | 
	
		
			
				|  |  | +        delta: 1
 | 
	
		
			
				|  |  | +      })
 | 
	
		
			
				|  |  | +    },
 | 
	
		
			
				|  |  | +    beginCountDown() {
 | 
	
		
			
				|  |  | +      this.countdown = 90
 | 
	
		
			
				|  |  | +      const timer = setInterval(_ => {
 | 
	
		
			
				|  |  | +        if (this.countdown == 0) {
 | 
	
		
			
				|  |  | +          clearInterval(timer)
 | 
	
		
			
				|  |  | +        } else {
 | 
	
		
			
				|  |  | +          this.countdown -= 1
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +      }, 1000)
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +  }
 | 
	
		
			
				|  |  | +}
 | 
	
		
			
				|  |  | +</script>
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +<style scoped>
 | 
	
		
			
				|  |  | +.mx-form {
 | 
	
		
			
				|  |  | +  padding: 40px 20px;
 | 
	
		
			
				|  |  | +  margin-left: 220px;
 | 
	
		
			
				|  |  | +  margin-right: 25px;
 | 
	
		
			
				|  |  | +  border-radius: 16px;
 | 
	
		
			
				|  |  | +}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +.mx-back {
 | 
	
		
			
				|  |  | +  font-size: 24px;
 | 
	
		
			
				|  |  | +  margin-top: 20px;
 | 
	
		
			
				|  |  | +  width: 36px;
 | 
	
		
			
				|  |  | +  height: 36px;
 | 
	
		
			
				|  |  | +  border-radius: 18px;
 | 
	
		
			
				|  |  | +  border: 1px solid #999999;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +  display: flex;
 | 
	
		
			
				|  |  | +  justify-content: center;
 | 
	
		
			
				|  |  | +  align-items: center;
 | 
	
		
			
				|  |  | +}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +.mx-mobile-send {
 | 
	
		
			
				|  |  | +  display: flex;
 | 
	
		
			
				|  |  | +  justify-content: space-between;
 | 
	
		
			
				|  |  | +  align-items: center;
 | 
	
		
			
				|  |  | +}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +.mx-send {
 | 
	
		
			
				|  |  | +  width: 60px;
 | 
	
		
			
				|  |  | +  margin-left: 10px;
 | 
	
		
			
				|  |  | +  display: flex;
 | 
	
		
			
				|  |  | +  justify-content: center;
 | 
	
		
			
				|  |  | +  align-items: center;
 | 
	
		
			
				|  |  | +}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +.mx-send.inactive {
 | 
	
		
			
				|  |  | +  background-color: #aaaaaa;
 | 
	
		
			
				|  |  | +  border-color: #aaaaaa;
 | 
	
		
			
				|  |  | +}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +.mx-buttons {
 | 
	
		
			
				|  |  | +  display: flex;
 | 
	
		
			
				|  |  | +  justify-content: center;
 | 
	
		
			
				|  |  | +  align-items: center;
 | 
	
		
			
				|  |  | +  margin-top: 40px;
 | 
	
		
			
				|  |  | +}
 | 
	
		
			
				|  |  | +</style>
 |