detail.vue 2.52 KB
<script setup lang="ts">
import { reactive, ref, onMounted, getCurrentInstance,defineExpose } from "vue";
import type { ElForm } from "element-plus";
import { insertOrUpdate } from "@/api/notify/maintain.ts";

const ruleFormRef = ref<InstanceType<typeof ElForm>>();
let instance: ComponentInternalInstance | null = getCurrentInstance(); //获取app实例
// 声明props
const props = defineProps({
  formObj: {
    type: Object,
    default: {
      name: null,
      status: null,
    },
  },
});

let loading = ref(false);

// 表单验证
const rules = reactive({
  name: [
    {
      required: true,
      message: "请输入项目名称",
      trigger: "blur",
    },
    { whitespace: true, message: "请输入正确的项目名称", trigger: "blur" },
  ],
  status: [
    {
      required: true,
      message: "请选择状态",
      trigger: "blur",
    },
  ],
});
/**
 * 重置
 */
let resetForm = () => {
  ruleFormRef.value.resetFields();
};
const emit = defineEmits<{
  (e: "cancel"): void;
  (e: "success"): void;
}>();

/**
 * 表单提交
 * @param {ElForm | undefined} formEl 表单对象
 */
let submitForm = (formEl: InstanceType<typeof ElForm> | undefined) => {
  loading.value = true;
  if (!formEl) return;
  formEl.validate((valid) => {
    if (valid) {
      insertOrUpdate(props.formObj)
        .then((res) => {
          loading.value = false;
          emit("success");
        })
        .catch((err) => {
          loading.value = false;
        });
    } else {
      instance?.proxy?.$message.error("请完善信息"); //调用
      loading.value = false;
      return false;
    }
  });
};

defineExpose({
  resetForm,
});
/**
 * 取消提交
 */
const cancel: void = () => {
  emit("cancel");
};
</script>

<template>
  <el-form
    ref="ruleFormRef"
    :model="props.formObj"
    :rules="rules"
    label-width="100px"
  >
    <el-form-item label="项目名称:" prop="name">
      <el-input
        v-model="props.formObj.name"
        placeholder="请输入名称"
        maxlength="30"
      ></el-input>
    </el-form-item>
    <el-form-item label="启用状态:" prop="status">
      <el-radio-group v-model="props.formObj.status">
        <el-radio :label="0">停用</el-radio>
        <el-radio :label="1">启用</el-radio>
      </el-radio-group>
    </el-form-item>
    <el-form-item>
      <el-button
        type="primary"
        @click="submitForm(ruleFormRef)"
        :loading="loading"
        >保存</el-button
      >
      <el-button @click="cancel">取消</el-button>
    </el-form-item>
  </el-form>
</template>