案例 通过用户名和邮箱重置密码

通过用户名和邮箱重置密码

<template>
  <el-container>
    <el-main>
      <div style="margin:0px auto;">
        <el-col :span="6">
          <img class="logo_img" src="@/assets/images/beijing_logo.png" style="margin-top:-15px;margin-left:90px">
        </el-col>
        <el-col :span="3">
          <span class="span" style="margin-left: 30px;">重置密码</span>
        </el-col>
      </div>
      <div class="main" style="width:100%;height:500px">
        <div class="lanse" style="background:#3F72C8;width:100%;height:396px;margin-top:50px;margin-left:-20px;position:absolute;">
          <div class="baise" style="background:white;width:1128px;height:316px;position: relative;  left:50%; top:50%;transform: translate(-50%, -50%)">
            <div id="ul" style="text-align:center; position: relative; top: 10%;">
              <el-steps :active="active" align-center>
                <el-step title="确认账号" />
                <el-step title="验证邮箱" />
                <el-step title="重置密码" />
                <el-step title="重置成功" />
              </el-steps>
            </div>
            <!--步骤1-->
            <el-form v-show="emailNumberStep1" ref="emailNumberForm1" :model="emailNumberForm1" label-width="80px">
              <el-form-item>
                <span style="width: 250px; margin-left: 340px;">用户名:</span>
                <el-input v-model="emailNumberForm1.accounts" style="width: 250px; margin-top: 90px;" />
              </el-form-item>
              <el-form-item>
                <span style="width: 250px; margin-left: 340px; ">邮箱号:</span>
                <el-input v-model="emailNumberForm1.email" style="width: 250px; margin-top: 8px;" />
              </el-form-item>
            </el-form>
            <!--步骤2-->
            <el-form v-show="emailNumberStep2" ref="emailNumberForm2" :inline="true" :model="emailNumberForm2" label-width="80px" style="margin-left: 300px;margin-top: 50px">
              <el-form-item label="邮箱:">
                <span>{{ emailNumberForm2.email }}</span>
              </el-form-item><br>
              <el-form-item label="验证码:">
                <el-input v-model="emailNumberForm2.vertifyCode" placeholder="请输入验证码" style="width: 200px;padding-right: 5%" />
                <!--设置隐藏属性,:hidden,点击获取验证码后按钮禁用,倒计时展示:倒计时结束后隐藏,按钮可用-->
                <el-button type="primary" plain :disabled="isDisabled" @click="getVertifyCode">
                  <span ref="getVertifyCode" :hidden="isSpanHidden">({{ count }})s后重新获取</span>
                  <span :hidden="isButtonHidden">获取验证码</span>
                </el-button><br>
                <span :hidden="isSpanHidden">验证码短信已发出,({{ count }})s内有效,请及时查收</span>
              </el-form-item>
            </el-form>
            <!--步骤3-->
            <el-form v-show="emailNumberStep3" ref="emailNumberForm3" :inline="true" :model="emailNumberForm3" :rules="emailNumberForm3Rules" label-width="80px" style="margin-left: 320px;margin-top: 50px">
              <el-form-item prop="newPass" label="新密码">
                <el-input v-model="emailNumberForm3.newPass" type="text" placeholder="新密码(5-12大小写字母、数字)" style="width: 310px" />
              </el-form-item><br>
              <el-form-item prop="checkPass" label="确认密码">
                <el-input v-model="emailNumberForm3.checkPass" placeholder="确认密码(5-12大小写字母、数字)" style="width: 310px" show-password />
              </el-form-item>
            </el-form>
            <!--步骤4-->
            <el-container v-show="emailNumberStep4">
              <div class="steps-button">
                <i class="el-icon-success" style="margin-left: 430px;width: 20px;margin-top: 50px; margin-bottom: 50px" />
                <span>恭喜您,密码重置成功!</span>
              </div>
            </el-container>
            <div style="margin-left:460px;">
              <el-button type="primary" style="margin-left:30px;width:100px;" :disabled="isClickButton" @click="nextPage('emailNumberForm3')">{{ active == 4?'返回首页':'下一步' }}</el-button>
              <!--isClickButton-->
            </div>
          </div>
          <div>
            <div class="otherProduces">
              <ul>
                <li v-for="i in produces" :key="i" :label="i" @click="introduce">{{ i }}<hr class="iProduces"></li>
              </ul>
            </div>
            <div class="otherLinks">
              <ul>
                <li>友情链接:</li>
                <li v-for="i in links" :key="i" :label="i" @click="link">{{ i }}</li>
              </ul>
            </div>
            <img class="policeLogo" src="@/icons/login/police.png">
          </div>
        </div>
      </div>
      <hr style="height:2px;border:none;border-top:2px dotted #999999; margin-top: 60px; width: 100%">
      <el-footer style="text-align: center">
        <span class="footer">北京电力交易中心信息发布网站 国网安备1514A91lF号 ICP国网安备1514A91lF号 <br> Copyright @2010-2016 Stats Grid Corporation of China (SGCC).国家电网公司 版权所有</span><br>
      </el-footer>
    </el-main>
  </el-container>
</template>
<script>
import PxSysUserApi from '../../../../api/pxf-common-authority/PxSysUserApi.js'
import SmUtils from '../../../../utils/SmUtils'
export default {
  data() {
    const validatePass1 = (rule, value, callback) => {
      console.log(value)
      if (value === '') {
        callback(new Error('请输入密码'))
        // this.isClickButton = true
      } else {
        var reg = /^(?=.*[a-zA-Z])(?=.*\d)(?=.*[~!@#$%^&*()_+`\-={}:";'<>?,.\/]).{5,12}$/
        var flag = reg.test(value)
        if (!flag) {
          callback(new Error('请输入5-12位以上字母,数字,特殊字符组合密码'))
          // this.isClickButton = true
        }
        callback()
        this.isClickButton = false
      }
    }
    var validatePass2 = (rule, value, callback) => {
      if (value === '') {
        callback(new Error('请再次输入密码'))
        // this.isClickButton = true
      } else if (value !== this.emailNumberForm3.newPass) {
        callback(new Error('两次输入密码不一致!'))
        // this.isClickButton = true
      } else {
        callback()
        this.isClickButton = false
      }
    }
    return {
      emailNumberStep1: true,
      emailNumberStep2: false,
      emailNumberStep3: false,
      emailNumberStep4: false,
      checked: false,
      active: 0,
      produces: ['关于我们', '联系我们', '公式注册'],
      links: ['国家发改委', '国资委', '国家资源局', '电力企业委员会', '国家电网公司'],
      isDisabled: false,
      isSpanHidden: true,
      isButtonHidden: false,
      isClickButton: false,
      timer: null,
      count: '',
      emailNumberForm3Rules: {
        newPass: [
          { required: true, validator: validatePass1, trigger: 'blur' }
        ],
        checkPass: [
          { required: true, validator: validatePass2, trigger: 'blur' }
        ]
      },
      emailNumberForm1: {
        accounts: '',
        email: ''
      },
      emailNumberForm2: {
        username: '',
        email: '',
        vertifyCode: ''
      },
      emailNumberForm3: {
        newPass: '',
        checkPass: ''
      }
    }
  },
  methods: {
    nextPage(formName) {
      if (this.active === 0) {
        const objUser = {
          loginName: this.emailNumberForm1.accounts,
          email: this.emailNumberForm1.email
        }
        PxSysUserApi.queryEmail(objUser).then(res => {
          console.log('queryEmail', res)
          this.emailNumberForm2.username = this.emailNumberForm1.accounts
          this.emailNumberForm2.email = this.emailNumberForm1.email
          if (res.status === 0) {
            this.emailNumberStep1 = false
            this.emailNumberStep2 = true
            this.emailNumberStep3 = false
            this.emailNumberStep4 = false
            this.active++
          }
        }).catch(err => {
          console.error(err)
        })
      } else if (this.active === 1) {
        this.active++
        this.emailNumberStep1 = false
        this.emailNumberStep2 = false
        this.emailNumberStep3 = true
        this.emailNumberStep4 = false
      } else if (this.active === 2) {
        PxSysUserApi.getPublicKey().then(res => {
          console.log('getPublicKey', res)
          if (res.status === 0) {
            const obj = {
              publicKey: res.data,
              loginName: this.emailNumberForm1.accounts,
              newAuthKey: SmUtils.encryptSm2(this.emailNumberForm3.newPass, res.data)
            }
            PxSysUserApi.updatePsd(obj).then(res => {
              console.log('updatePsd', res)
              if (res.status === 0) {
                this.$message({
                  message: '更新成功',
                  type: 'success'
                })
                this.active++
                this.emailNumberStep1 = false
                this.emailNumberStep2 = false
                this.emailNumberStep3 = false
                this.emailNumberStep4 = true
              }
            }).catch(err => {
              console.error(err)
            })
          }
        })
      } else if (this.active === 3) {
        this.$refs[formName].validate((valid) => {
          if (valid) {
            this.emailNumberStep1 = false
            this.emailNumberStep2 = false
            this.emailNumberStep3 = false
            this.emailNumberStep4 = true
            this.active++
          }
        })
      } else if (this.active === 4) {
        this.emailNumberStep1 = false
        this.emailNumberStep2 = false
        this.emailNumberStep3 = false
        this.emailNumberStep4 = false
        this.$router.push({
          path: '/marketService/Login',
          query: {
            membersId: '1'
          }
        })
      }
    },
    // 点击获取验证码倒计时
    getVertifyCode() {
      this.isDisabled = true
      this.isButtonHidden = true
      this.isSpanHidden = false
      this.count = 60
      this.timer = setInterval(() => {
        this.isSpanHidden = false
        this.count--
        if (this.count <= 0) {
          this.isSpanHidden = true
          this.isButtonHidden = false
          this.isDisabled = false
          clearInterval(this.timer)
          this.timer = null
        }
      }, 1000)
    },
    introduce() {

    },
    link() {

    }
  }
}

</script>

<style scoped>
  .span {
    color: #5096C7;
    font-size: 14px;
    font-family: '宋体 Regular', '宋体';
    display: block;
    margin-top:7px;
    margin-left:15px
  }
  .otherProduces{
    float: left;
    height: 27px;
    margin-left: 35%;
    margin-top: 90px;
  }
  .otherProduces>ul>li{
    float: left;
    list-style: none;
    width: 30%;
    margin-right: 3%;
    margin-top: 10px;
    height: 27px;
    font-family: '黑体 Regular', '黑体';
    font-size: 13px;
    color: #5E5E5E;
    cursor: pointer;
  }
  .iProduces{
    float: left;
    margin-left: 75px;
    margin-top: -15px;
    width: 1px;
    height: 16px;
    border: 1px;
    border-left: 1px solid #797979;
  }
  .otherLinks{
    float: left;
    height: 27px;
    margin-left: 30%;
  }
  .otherLinks>ul{
    width: 200%;
  }
  .otherLinks>ul>li{
    float: left;
    list-style: none;
    width: 14%;
    margin-right: -3%;
    margin-top: 21px;
    height: 27px;
    font-family: '黑体 Regular', '黑体';
    font-size: 11px;
    color: #868686;
    cursor: pointer;
  }
  .otherLinks>ul>li:nth-child(4){
    margin-left: -3%;
  }
  .otherLinks>ul>li:last-child{
    margin-left: 3%;
  }
  .policeLogo{
    width: 145px;
    height: 101px;
    float: left;
    margin-left: 72%;
    margin-top: -54px;
  }
  .footer {
    margin-top: 20px;
    display: block;
    font-size: 12px;
    color: silver
  }
</style>
import request from '@/utils/request'

/**
 * Api
 * @author 李松涛
 */
export default class PxSysUserApi {
  /**
   * userId查询PxSysWhiteList
   * @param userId
   */
  static queryByUserId(userId) {
    return request({
      url: '/px-common-authority/pxSysWhiteList/queryByUserId',
      method: 'post',
      params: { 'userId': userId }
    })
  }
  /**
   * 保存更新
   * @param data
   */
  static saveWhiteList(data) {
    return request({
      url: '/px-common-authority/pxSysWhiteList/save',
      method: 'post',
      data: data
    })
  }
  /**
   * 获取公钥
   */
  static getPublicKey() {
    return request({
      url: '/px-common-authority/user/getPublicKey',
      method: 'post'
    })
  }
  /**
   * 批量插入
   * @param queryParam
   */
  static saveUserRole(queryParam) {
    return request({
      url: '/px-common-authority/pxSysUserRole/insertList',
      method: 'post',
      data: queryParam
    })
  }
  /**
   * 密码重置
   * @param data
   */
  static resetPwd(data) {
    return request({
      url: '/px-common-authority/pxSysUser/resetAuthKey',
      method: 'post',
      data: data
    })
  }
  /**
   * 修改user信息Type
   * @param data
   */
  static updateAuthKey(data) {
    return request({
      url: '/px-common-authority/pxSysUser/modifyAuthKey',
      method: 'post',
      data: data
    })
  }
  /**
   * 修改user信息Type
   * @param data
   */
  static updateEmailOrPhone(data) {
    return request({
      url: '/px-common-authority/pxSysUser/modifyEmailPhone',
      method: 'post',
      data: data
    })
  }
  /**
   * 保存更新
   * @param id
   */
  static queryById(id) {
    return request({
      url: '/px-common-authority/pxSysUser/queryById',
      method: 'post',
      params: { 'id': id }
    })
  }

  /**
   * 保存更新
   * @param data
   */
  static save(data) {
    return request({
      url: '/px-common-authority/pxSysUser/save',
      method: 'post',
      data: data
    })
  }

  /**
   * 分页查询
   * @param queryParam
   */
  static queryPage(queryParam) {
    return request({
      url: '/px-common-authority/pxSysUser/queryPage',
      method: 'post',
      data: queryParam
    })
  }

  /**
   * 根据ID删除
   * @param id
   */
  static deleteById(id) {
    return request({
      url: '/px-common-authority/pxSysUser/deleteById',
      method: 'post',
      params: { 'id': id }
    })
  }

  /**
   * 批量删除
   * @param data
   */
  static deleteList(data) {
    return request({
      url: '/px-common-authority/pxSysUser/deleteList',
      method: 'post',
      data: data
    })
  }

  /**
   * 查询用户名是否存在
   * @param data
   */
  static queryUsername(data) {
    return request({
      url: '/px-common-authority/pxSysUser/checkLoginNameMobile',
      method: 'post',
      data: data
    })
  }

  /**
   * 更改密码
   * @param data
   */
  static updatePsd(data) {
    return request({
      url: '/px-common-authority/pxSysUser/modifyAuthKeyByEmailMobile',
      method: 'post',
      data: data
    })
  }

  /**
   * 校验用户名和邮箱
   * @param data
   */
  static queryEmail(data) {
    return request({
      url: '/px-common-authority/pxSysUser/checkLoginNameEmail',
      method: 'post',
      data: data
    })
  }
}

猜你喜欢

转载自www.cnblogs.com/javascript9527/p/11864886.html