element-ui的密码修改弹出框封装

1,109 阅读1分钟

最近实现了一个修改密码的弹出框:

技术和实现效果

是基于vue2+elementUI的修改密码弹出框,主要由旧密码,新密码,确认密码这三个字段组成。主要实现了表单效验和新密码和确认密码的效验

效果图如下:

image.png

代码如下:

DOM结构:

<el-dialog title="修改密码" :visible.sync="dialogVisible" width="50%">
  <el-form ref="form" :model="form" :rules="rules" label-width="100px">
    <el-form-item label="旧密码" prop="oldPwd" type="password">
      <el-input v-model="form.oldPwd" clearable></el-input>
    </el-form-item>
    <el-form-item label="新密码" prop="newPwd">
      <el-input v-model="form.newPwd" type="password" clearable></el-input>
    </el-form-item>
    <el-form-item label="确认密码" prop="surePwd">
    <--! **`@input` 是一个事件监听器,用于监听 `<el-input>` 组件的输入事件。当用户进行输入时会触发checkPasswordsMatch方法,进行新密码和确认密码的校验**-->
      <el-input
        v-model="form.surePwd"
        @input="checkPasswordsMatch"
        type="password"
        clearable
      ></el-input>
    </el-form-item>
    <el-button @click="dialogVisible = false">取 消</el-button>
    <el-button type="primary" @click="submitPwd">确 定</el-button>
  </el-form>
</el-dialog>

js代码:

import { updateUserPwd } from "xxxxxxx";
export default {
  name: "HeadTip",
  data() {
    return {
      form: {
        oldPwd: "",
        newPwd: "",
        surePwd: "",
      },
      // 表单效验规则
      rules: {
        oldPwd: [{ required: true, message: "请输入旧密码", trigger: "blur" }],
        newPwd: [{ required: true, message: "请输入新密码", trigger: "blur" }],
        surePwd: [
          { required: true, message: "请再次输入新密码", trigger: "blur" },
           //调用validateSurePwd方法,将新密码和确认密码进行效验
          { validator: this.validateSurePwd, trigger: "blur" },
        ],
      },
    };
  },

  methods: {
  // 修改个人密码
    editPWD() {
      this.dialogVisible = true;
      this.$nextTick(() => {
        if (this.$refs["form"] !== undefined) {
          this.$refs["form"].resetFields();
        }
      });
    },
    //确认密码和新密码的动态效验
    validateSurePwd(rule, value, callback) {
      if (value === "") {
        callback(new Error("请再次输入新密码"));
      } else if (value !== this.form.newPwd) {
        callback(new Error("两次输入的密码不一致"));
      } else {
        callback();
      }
    },
    checkPasswordsMatch() {
      this.$refs.form.validateField("surePwd");
    },
    //点击确定按钮提交
    submitPwd() {
      this.$refs.form.validate(async (valid) => {
        if (valid) {
          // 表单验证通过,可以进行提交操作
          await updateUserPwd(this.form.newPwd, this.form.surePwd).then(() => {
            console.log("密码修改成功");
            this.$refs["form"].resetFields();  // ===> 密码修改成功之后,就清除表单的缓存
          });
          this.dialogVisible = false;
          this.$refs["form"].resetFields();
        }
      });
    },
  },  
  }