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

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

let loading = ref(false);

const data = reactive({
  options: [
    { label: "选举", value: 0 },
    { label: "派驻", value: 1 },
  ],
  genderList: [
    { label: "男", value: 1 },
    { label: "女", value: 0 },
  ],
});

// 表单验证
const rules = reactive({
  name: [
    {
      required: true,
      message: "请输入姓名",
      trigger: "blur",
    },
  ],
  mobile: [
    {
      required: true,
      message: "请输入手机号",
      trigger: "blur",
    },
  ],
  idcard: [
    {
      required: true,
      message: "请输入身份证号",
      trigger: "blur",
    },
  ],
  type: [
    {
      required: true,
      message: "请选择类型",
      trigger: "change",
    },
  ],
  gender: [
    {
      required: true,
      message: "请输入选择性别",
      trigger: "change",
    },
  ],
});

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");
      });
    } else {
      instance?.proxy?.$message.error("请完善信息"); //调用
      loading.value = false;
      return false;
    }
  });
};
/**
 * 重置
 */
let resetForm = () => {
  ruleFormRef.value.resetFields();
};
/**
 * 取消提交
 */
const cancel: void = () => {
  emit("cancel");
};

defineExpose({
  resetForm
});
</script>

<template>
  <el-form
    ref="ruleFormRef"
    :model="props.formObj"
    :rules="rules"
    label-width="100px"
    :inline="true"
  >
    <el-form-item label="姓名:" prop="name">
      <el-input
        v-model="props.formObj.name"
        placeholder="请输入名称"
      ></el-input>
    </el-form-item>
    <el-form-item label="手机号:" prop="mobile">
      <el-input
        v-model="props.formObj.mobile"
        placeholder="请输入所在地区"
      ></el-input>
    </el-form-item>
    <el-form-item label="身份证号:" prop="idcard">
      <el-input
        v-model="props.formObj.idcard"
        placeholder="请输入详细地址"
      ></el-input>
    </el-form-item>
    <el-form-item label="类型:" prop="type">
      <el-select
        style="width: 200px"
        v-model="props.formObj.type"
        placeholder="请选择类型"
        clearable
      >
        <el-option
          v-for="item in data.options"
          :key="item.value"
          :label="item.label"
          :value="item.value"
        >
        </el-option>
      </el-select>
    </el-form-item>

    <el-form-item label="性别:" prop="gender">
      <el-select
        v-model="props.formObj.gender"
        placeholder="请选择"
        style="width: 200px"
      >
        <el-option
          v-for="item in data.genderList"
          :key="item.value"
          :label="item.label"
          :value="item.value"
        >
        </el-option>
      </el-select>
    </el-form-item>
    <el-form-item label="户籍所在地:" prop="censusRegister">
      <el-input
        v-model="props.formObj.censusRegister"
        placeholder="请输入车位数"
      ></el-input>
    </el-form-item>
    <el-form-item label="出生日期:" prop="birthdate">
      <el-date-picker
        style="width: 200px"
        v-model="props.formObj.birthdate"
        type="date"
        placeholder="选择时间"
      >
      </el-date-picker>
    </el-form-item>
    <el-form-item label="民族:" prop="nationality">
      <el-input
        v-model="props.formObj.nationality"
        placeholder="请输入车位数"
      ></el-input>
    </el-form-item>
    <el-row>
      <el-form-item>
        <el-button
          type="primary"
          @click="submitForm(ruleFormRef)"
          :loading="loading"
          >保存</el-button
        >
        <el-button @click="cancel">取消</el-button>
      </el-form-item>
    </el-row>
  </el-form>
</template>