element修改密码页面 包含 新密码,旧密码,确认密码

8 篇文章 0 订阅
6 篇文章 0 订阅

elementPlus写法

<template>
  <div class="container change-password">
    <el-card class="box-card">
      <div class="back-text">
        <el-link type="primary" :underline="false" @click="goBack"><el-icon><ArrowLeft /></el-icon>返回</el-link>
      </div>
      <el-form ref="ruleFormRef" :model="ruleFormData" status-icon :rules="rules" label-width="100px"
        class="change-pass-form">
        <el-form-item label="旧密码" prop="oldPass">
          <el-input v-model="ruleFormData.oldPass" type="password" autocomplete="off" />
        </el-form-item>
        <el-form-item label="新密码" prop="pass">
          <el-input v-model="ruleFormData.pass" type="password" autocomplete="off" />
        </el-form-item>
        <el-form-item label="确认密码" prop="checkPass">
          <el-input v-model="ruleFormData.checkPass" type="password" autocomplete="off" />
        </el-form-item>
        <el-form-item>
          <el-button @click="resetForm('ruleFormRef')">重置</el-button>
          <el-button type="primary" @click="submitForm('ruleFormRef')">提交</el-button>
        </el-form-item>
      </el-form>
    </el-card>

  </div>
</template>
<script setup>
import { computed, onMounted, ref, watch, reactive } from 'vue'
import { ElMessage, ElMessageBox } from 'element-plus'
import { useRouter } from 'vue-router';
const router = useRouter()



const ruleFormRef = ref() // dom
const ruleFormData = ref({
  pass: '', // 密码
  checkPass: '', // 确认密码
  oldPass: '' // 旧密码
}) // 数据

const validateOldPass = (rule, value, callback) => {
  if (value === '') {
    callback(new Error('请输入旧密码'))
  } else {
    callback()
  }
}
const validatePass = (rule, value, callback) => {
  if (value === '' || value.length < 6) {
    callback(new Error('请输入不少于6位的密码'))
  } else {
    if (ruleFormData.value.checkPass !== '') {
      ruleFormRef.value.validateField('checkPass')
    }
    callback()
  }
}
const validateCheckPass = (rule, value, callback) => {
  if (value === '') {
    callback(new Error('请再次输入密码'))
  } else if (value !== ruleFormData.value.pass) {
    callback(new Error('两次输入密码不一致!'))
  } else {
    callback()
  }
}

const rules = ref({
  oldPass: [
    { required: true,validator: validateOldPass, trigger: 'blur' }
  ],
  pass: [
    { required: true,validator: validatePass, trigger: 'blur' }
  ],
  checkPass: [
    { required: true, validator: validateCheckPass, trigger: 'blur' }
  ]
})

const goBack = ()=> {
  router.go(-1)
}
const submitForm = async (formEl)=> {
  // console.log(formEl,'formEl')
  // if (!formEl) return
  // await formEl.validate((valid) => { // 我这样写不对然后就改用了下面这种
  await ruleFormRef.value.validate((valid) => {
  console.log(valid,'valid')

    if (valid) {
      const data = {
        oldPassword: ruleFormData.value.oldPass,
        newPassword: ruleFormData.value.pass
      }
      ResetPassword(data).then(res => {//修改密码接口
        removeLoginID()//退出接口
        ElMessageBox.alert('密码已修改,将重新登录', '提示', { 
          confirmButtonText: '确定',
          showCancelButton: false,
          closeOnClickModal: false,
          closeOnPressEscape: false,
          showClose: false,
          type: 'warning'
        }).then(action => {
          if (action === 'confirm') {
            router.replace('/login')
          }
        })
      })
    } else {
      return false
    }
  })
}
const resetForm = (formEl)=> {
  console.log(formEl,'formEl')
  if (!formEl) return
  formEl.resetFields()
}


</script>
<style>

</style>

在router/index,js 页面写上路由
在这里插入图片描述

<!-- 头像组件 -->
<template>
  <div class="demo-type">
    <el-dropdown>
      <span>
        <el-avatar> {{user}} </el-avatar>
        <el-icon class="el-icon--right">
          <arrow-down />
        </el-icon>
      </span>
      
      <template #dropdown>
        <el-dropdown-menu>
          <el-dropdown-item divided @click.native="logout">退出登录</el-dropdown-item>
          <el-dropdown-item divided @click.native="goEditPassword">修改密码</el-dropdown-item>
        </el-dropdown-menu>
      </template>
  </el-dropdown>
  </div>
</template>

<script setup>
import { getItem,setItem } from '@/utils/storage'
import { computed } from 'vue'
import { useRouter } from 'vue-router';
import { loginout } from '@/api/user'

const router = useRouter()

const user = computed(() => {
  const result = getItem('userInfo')
  console.log(result,'result')
  if(!result){
    router.push({path:'/login'})
    return
  }else if(result.length!=0 && result[0].name){
    return result[0].name || ''
  }
})
// 退出登录
const logout = async ()=> {
  setItem('userInfo',null)
  setItem('_userID',null)
  await loginout() // 删除cookiesToken
  router.push({path:'/login'})
}
const goEditPassword = async ()=> {
  router.push({path:'/userSetting/index'})
}
</script>

<style scoped>
.demo-type {
  display: flex;
}
.demo-type > div {
  flex: 1;
  text-align: center;
}

.demo-type > div:not(:last-child) {
  border-right: 1px solid var(--el-border-color);
}
</style>

elementui写法

<template>
  <div class="container change-password">
    <el-card class="box-card">
      <div class="back-text">
        <el-link type="primary" :underline="false" @click="goBack"><i class="el-icon-arrow-left" />返回</el-link>
      </div>
      <el-form ref="ruleForm" :model="ruleForm" status-icon :rules="rules" label-width="100px" class="change-pass-form">
        <el-form-item label="旧密码" prop="oldPass">
          <el-input v-model="ruleForm.oldPass" type="password" autocomplete="off" />
        </el-form-item>
        <el-form-item label="新密码" prop="pass">
          <el-input v-model="ruleForm.pass" type="password" autocomplete="off" />
        </el-form-item>
        <el-form-item label="确认密码" prop="checkPass">
          <el-input v-model="ruleForm.checkPass" type="password" autocomplete="off" />
        </el-form-item>
        <el-form-item>
          <el-button @click="resetForm('ruleForm')">重置</el-button>
          <el-button type="primary" @click="submitForm('ruleForm')">提交</el-button>
        </el-form-item>
      </el-form>
    </el-card>

  </div>
</template>
<script>
  import { ResetPassword } from '@/api/user'
  import { removeLoginID } from '@/utils/auth'
  export default {
    name: 'ChangePassword',
    data() {
      var validateOldPass = (rule, value, callback) => {
        if (value === '') {
          callback(new Error('请输入旧密码'))
        } else {
          callback()
        }
      }
      var validatePass = (rule, value, callback) => {
        if (value === '' || value.length < 6) {
          callback(new Error('请输入不少于6位的密码'))
        } else {
          if (this.ruleForm.checkPass !== '') {
            this.$refs.ruleForm.validateField('checkPass')
          }
          callback()
        }
      }
      var validateCheckPass = (rule, value, callback) => {
        if (value === '') {
          callback(new Error('请再次输入密码'))
        } else if (value !== this.ruleForm.pass) {
          callback(new Error('两次输入密码不一致!'))
        } else {
          callback()
        }
      }
      return {
        ruleForm: {
          pass: '', // 密码
          checkPass: '', // 确认密码
          oldPass: '' // 旧密码
        },
        rules: {
          oldPass: [
            { validator: validateOldPass, trigger: 'blur' }
          ],
          pass: [
            { validator: validatePass, trigger: 'blur' }
          ],
          checkPass: [
            { validator: validateCheckPass, trigger: 'blur' }
          ]
        },
        input1: '',
        input2: '',
        input3: '',
        select: ''
      }
    },
    methods: {
      goBack() {
        this.$router.go(-1)
      },
      submitForm(formName) {
        this.$refs[formName].validate((valid) => {
          if (valid) {
            const data = {
              oldPassword: this.ruleForm.oldPass,
              newPassword: this.ruleForm.pass
            }
            ResetPassword(data).then(res => {
              removeLoginID()
              this.$confirm('密码已修改,将重新登录', '提示', {
                confirmButtonText: '确定',
                showCancelButton: false,
                closeOnClickModal: false,
                closeOnPressEscape: false,
                showClose: false,
                type: 'warning'
              }).then(action => {
                if (action === 'confirm') {
                  this.$router.replace('/login')
                }
              })
            })
          } else {
            return false
          }
        })
      },
      resetForm(formName) {
        this.$refs[formName].resetFields()
      }
    }
  }
</script>
<style lang="scss" scoped>
  .box-card {
    width: 60%;
    margin: 0 auto;
  }

  .change-pass-form {
    padding: 30px 0;
  }

  .back-text {
    text-align: right;
    margin-bottom: 20px;
  }

  .el-select .el-input {
    width: 130px;
  }

  .input-with-select .el-input-group__prepend {
    background-color: #fff;
  }
</style>

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值