Newer
Older
smartwell_app_front / src / page / mine / modules / ResetPwd.vue
StephanieGitHub on 6 Aug 2019 4 KB first commit
<template>
  <transition name="slide">
    <div class="index-container">
      <!--标题-->
      <mt-header class="header" title="修改密码">
        <div slot="left">
          <mt-button icon="back" @click="$router.back(-1)"></mt-button>
        </div>
      </mt-header>
      <div class="listbody">
        <mt-field label="原密码" placeholder="请输入原密码" type="password" v-model="oldPassword" :state="oldPasswordValidate" @change="validateOldPass"></mt-field>
        <mt-field label="新密码" placeholder="不少于8位的数字与字母或特殊符号组合" type="password" v-model="newPassword" :state="newPasswordValidate" @change="validateNewPass"></mt-field>
        <mt-field label="重复密码" placeholder="请再次输入密码" type="password" v-model="rePassword" :state="rePasswordValidate" @change="validateRePass"></mt-field>
      </div>
      <div class="logout-div">
        <mt-button type="primary" @click="resetPassword">提交</mt-button>
      </div>
    </div>
  </transition>
</template>

<script>
  import { MyLocalStorage } from 'assets/js/utils'
  import { TOKEN, LOGIN_FLAG, AD_FLAG, SLIDER_FLAG, USER_ACCOUNT, USER_PWD } from 'assets/js/storageConst'
  import { Toast } from 'mint-ui'
  import {changePwd} from '@/api/user'
  import { RSAencrypt } from '@/utils/security'

  export default {
    name: "ResetPwd",
    data(){
      return {
        oldPassword:'',
        newPassword:'',
        rePassword:'',
        oldPasswordValidate:'',
        newPasswordValidate:'',
        rePasswordValidate:'',
      }
    },
    methods:{
      //验证原密码
      validateOldPass(){
        const oldPassword = this.oldPassword
        if(oldPassword==''){
          this.oldPasswordValidate = 'error'
          return false
        }else{
          this.oldPasswordValidate = 'success'
          return true
        }
      },
      //验证新密码
      validateNewPass(){
        const value = this.newPassword
        if(value==''){
          this.newPasswordValidate = 'error'
          return false
        }else{
          if(value.length<8||value.length>16){
            this.newPasswordValidate = 'error'
            return false
          }else{
            var reg = /^(?![a-zA-z]+$)(?!\d+$)(?![!@#$%^&*]+$)[a-zA-Z\d!@#$%^&*]+$/
            if(value.match(reg)){
              this.newPasswordValidate = 'success'
              return true
            }else{
              this.newPasswordValidate = 'error'
              return false
            }
          }
        }
      },
      //验证重复密码
      validateRePass(){
        const rePassword = this.rePassword
        const newPassword = this.newPassword
        if(newPassword!=''){
          if(newPassword!=rePassword){
            this.rePasswordValidate = 'error'
            return false
          }else{
            this.rePasswordValidate = 'success'
            return true
          }
        }
      },
      //重置密码
      resetPassword () {
        if(this.validateOldPass()==false){
          Toast('原密码不得为空')
          return
        }
        if(this.validateNewPass()==false){
          Toast('密码必须8到16位数字、字母组合,或数字、字符组合,或字母、字符组合')
          return
        }
        if(this.validateRePass()==false){
          Toast('两次密码输入不一致')
          return
        }
        const oldPwd = RSAencrypt(this.oldPassword)
        const newPwd = RSAencrypt(this.newPassword)
        changePwd(oldPwd, newPwd).then(response => {
          if(response.code=200){
            Toast('重置密码成功,请重新登录')
            MyLocalStorage.Cache.remove(TOKEN)
            MyLocalStorage.Cache.remove(USER_ACCOUNT)
            MyLocalStorage.Cache.remove(USER_PWD)
            MyLocalStorage.Cache.remove(AD_FLAG)
            MyLocalStorage.Cache.remove(LOGIN_FLAG)
            MyLocalStorage.Cache.remove(SLIDER_FLAG)
            this.$router.push({name: 'login'})
          }
        })
      }
    }
  }
</script>

<style lang="stylus" rel="stylesheet/stylus" scoped>
  .mint-cell-title {
    margin-left: 5px !important
  }
  .logout-div{
    position: fixed
    bottom:5px
    .mint-button{
      width 98vw
      margin:1vw
      background-color #1d55c6
    }
  }
</style>