【从0到1打造vue element-ui管理后台 】第二十五课 编写后台管理修改密码

435 阅读1分钟

第二十五课 编写后台管理修改密码

一、编写验证旧密码后台接口

server-api/mocks/userpwd.js

/**
 * 后台登录接口
 *
 * @url user/pwd
 *
 */
 
 module.exports = function (req) {
    return {
      code: 200,
      flag:true,
      message:"旧密码正确",
    }
  };

二、编写封装请求地址api

src/api/password.js

import myaxios from '@/utils/myaxios'

export default{
    checkPwd(userId,oldPassword){
        return myaxios({
            url:"/user/pwd",
            method:"post",
            data:{
                userId,
                oldPassword
            }
        })
    },
    updaePwd(userId,newPassword){
        return myaxios({
            url:"/user/pwd",
            method:"post",
            data:{
                userId,
                newPassword
            }
        })
    }
}

三、src/components/AppHeeader/index.vue编写布局

 <el-dialog title="修改密码" :visible.sync="dialogFormVisible" width="500px">
      <el-form :model="ruleForm" status-icon ref="ruleForm" label-width="100px" :rules="rules">
        <el-form-item label="旧密码" prop="oldpass">
            <el-input type="password" v-model="ruleForm.oldpass"></el-input>
        </el-form-item>
         <el-form-item label="新密码" prop="newpass">
            <el-input type="password" v-model="ruleForm.newpass"></el-input>
        </el-form-item>
          <el-form-item label="确认密码" prop="checkPass">
            <el-input type="password" v-model="ruleForm.checkPass"></el-input>
        </el-form-item>
         <el-form-item>
           <el-button type="primary" @click="submitForm('ruleForm')">提交</el-button>
           <el-button  @click="resetForm('ruleForm')">重置</el-button>
         </el-form-item>
      </el-form>
    </el-dialog>

四、表单校验

data() {
    const validateoldPass =(rule,value,callback)=>{
      passwordApi.checkPwd(this.userData.id,value).then(response=>{
        const resp = response.data;
        if(resp.flag){
          callback()
        }else{
          callback(new Error(resp.message))
        }
      })
    }
    const validateCheckPass =(rule,value,callback)=>{
        if(value!==this.ruleForm.newpass){
           callback(new Error('两次密码输入不一致'))
        }else{
          callback()
        }
    }
    return {
      rules:{
          oldpass:[{
            required:true,message:'旧密码不能为空',trigger:'blur'
          },{
            validator:validateoldPass,trigger:'blur'
          }],
           newpass:[{
            required:true,message:'新密码不能为空',trigger:'blur'
          }],
          checkPass:[{
            required:true,message:'确认密码不能为空',trigger:'blur'
          },{
            validator:validateCheckPass,trigger:'blur'
          }]
      },
      userData: [],
      dialogFormVisible:false,
      ruleForm:{
        oldpass:'',
        newpass:'',
        checkPass:"",
      }
    };
  },

五、退出的方法提出来放在函数里

logoutSystem(){
          const token = localStorage.getItem("manager-token");
          logout().then((response) => {
            const resp = response.data;
            if (resp) {
              localStorage.removeItem("manager-user");
              localStorage.removeItem("manager-token");
              this.$router.push("/login");
            } else {
              this.$message({
                message: resp.message,
                type: "warning",
                duration: 1000,
              });
            }
          });
          this.$message("退出登录");
    },

六、重置表单

resetForm(formName){
      this.$refs[formName].resetFields();
    },

七、修改密码

submitForm(formName){
      this.$refs[formName].validate(valid=>{
        if(valid){
          passwordApi.updaePwd(this.userData.id,this.ruleForm.newpass).then(response=>{
            const resp = response.data
            this.$message({
              message:resp.message,
              type:resp.flag ? "success" : "warning"
            })
            if(resp.flag){
              this.logoutSystem();
              this.dialogFormVisible = false
            }
          })
        }else{
          
        }
      })
    },

八、抽取后handleCommand的函数

 handleCommand(command) {
      switch (command) {
        case "EditPassword":
          // this.$message("修改密码");
          this.updatePwd()
          break;
        case "exit":
          this.logoutSystem();
          break;
            default:
          break;
      }
    },
    
     updatePwd(){
      this.dialogFormVisible = true
      this.$nextTick(()=>{
        this.$refs["ruleForm"].resetFilelds();
      })
    }

image.png