info.vue 3.69 KB
<script setup lang="ts">
import { reactive, ref, getCurrentInstance } from "vue";
// import * as store from "@/pinia/index";
import { useLoginStore } from '@/pinia/login';
import { userPwdChange } from "@/api/user/user";
import type { ElForm } from "element-plus";

const ruleFormRef = ref<InstanceType<typeof ElForm>>();
let instance: ComponentInternalInstance | null = getCurrentInstance();
let form = reactive({
  data: {
    // userId: store?.family?.loginStore()?.id,
    userId: useLoginStore()?.getId,
    oldPassword: "",
    newPassword: "",
    surePwd: "",
  },
  loading: false,
});
/**
 * 验证两次输入密码一致
 * @param {object} rules 验证规则
 * @param {string} value 确认密码文本
 * @callback checkPwd~checkDoublePwdCallback
 */
const checkPwd = (rules, value, callback) => {
  if (value === form.data.newPassword) {
    callback();
  } else {
    callback(new Error("请确认密码和新密码一致"));
  }
};
/**
 * 表单验证规则
 */
const rules = reactive({
  oldPassword: [
    {
      required: true,
      message: "请填写旧密码",
      trigger: "blur",
    },
  ],
  newPassword: [
    {
      required: true,
      message: "请填写新密码",
      trigger: "blur",
    },
  ],
  surePwd: [
    {
      required: true,
      message: "请确认密码和新密码一致",
      trigger: "blur",
      validator: checkPwd,
    },
  ],
});
/**
 * 表单重置
 */
const resetForm = (formEl: InstanceType<typeof ElForm> | undefined) => {
  if (!formEl) return;
  formEl.resetFields();
};
/**
 * 表单提交
 */
const submitForm = (formEl: InstanceType<typeof ElForm> | undefined) => {
  form.loading = true;
  if (!formEl) return;
  formEl.validate((valid) => {
    if (valid) {
      userPwdChange(form.data)
        .then((res) => {
          if (res) {
            instance?.proxy?.$message.success("修改成功,请重新登录");
            // store.family.loginStore().removeToken();
            useLoginStore()?.removeToken();
          }
        })
        .catch((error) => {
          console.log(error);
        })
        .finally(() => {
          form.loading = false;
        });
    } else {
      instance?.proxy?.$message.error("请检查表单内容");
      form.loading = false;
      return false;
    }
  });
};
</script>

<template>
  <div class="page-container">
    <el-card class="form_card" style="max-width: 1303px">
      <h1>基本信息</h1>
      <el-form
        :inline="true"
        :model="form.data"
        :rules="rules"
        ref="ruleFormRef"
        label-width="120px"
        class="card-form"
      >
        <el-form-item label="旧密码" prop="oldPassword" style="width: 100%">
          <el-input
            v-model.trim="form.data.oldPassword"
            placeholder="请填写旧密码"
            maxlength="15"
          />
        </el-form-item>
        <el-form-item label="新密码" prop="newPassword" style="width: 100%">
          <el-input
            v-model.trim="form.data.newPassword"
            placeholder="请填写新密码"
            maxlength="15"
          />
        </el-form-item>
        <el-form-item label="确认密码" prop="surePwd" style="width: 100%">
          <el-input
            v-model.trim="form.data.surePwd"
            placeholder="请确认密码"
            maxlength="15"
          />
        </el-form-item>
        <el-form-item style="width: 100%">
          <el-button
            type="primary"
            @click.prevent="submitForm(ruleFormRef)"
            :loading="form.loading"
            >提交</el-button
          >
          <el-button type="info" @click="resetForm(ruleFormRef)"
            >取消</el-button
          >
        </el-form-item>
      </el-form>
    </el-card>
  </div>
</template>