communityDetail.vue 3.52 KB
<script setup lang="ts">
import { reactive, ref, onMounted,getCurrentInstance } from "vue";
import type { ElForm } from "element-plus";
import { addOrUpdate } from "@/api/community/residence.ts";

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

let loading = ref(false);

// 表单验证
const rules = reactive({
  name: [
    {
      required: true,
      message: "请输入小区名",
      trigger: "blur",
    },
  ],
  locality: [
    {
      required: true,
      message: "请输入所在地区",
      trigger: "blur",
    },
  ],
  address: [
    {
      required: true,
      message: "请输入地址",
      trigger: "blur",
    },
  ],
  buildingCount: [
    {
      required: true,
      message: "请输入楼座数",
      trigger: "blur",
    },
  ],
  storeroomCount: [
    {
      required: true,
      message: "请输入储藏室数",
      trigger: "blur",
    },
  ],
  truckSpaceCount: [
    {
      required: true,
      message: "请输入车位数",
      trigger: "blur",
    },
  ],
});

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) {
      addOrUpdate(props.formObj).then((res) => {
         loading.value = false;
         emit("success");
      });
    } else {
      instance?.proxy?.$message.error('请完善信息')//调用
      loading.value = false;
      return false;
    }
  });
};

/**
 * 取消提交
 */
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="请输入名称" :disabled="!!props.formObj.id"></el-input>
    </el-form-item>
    <el-form-item label="所在地区:" prop="locality">
      <el-input v-model="props.formObj.locality" placeholder="请输入所在地区"></el-input>
    </el-form-item>
    <el-form-item label="详细地址:" prop="address">
      <el-input v-model="props.formObj.address" placeholder="请输入详细地址"></el-input>
    </el-form-item>
    <el-form-item label="楼座数:" prop="buildingCount">
      <el-input v-model="props.formObj.buildingCount" onkeyup="value=value.replace(/[^\d]/g,'')" placeholder="请输入楼座数"></el-input>
    </el-form-item>
    <el-form-item label="储藏室数:" prop="storeroomCount">
      <el-input v-model="props.formObj.storeroomCount" onkeyup="value=value.replace(/[^\d]/g,'')" placeholder="请输入储藏室数"></el-input>
    </el-form-item>
    <el-form-item label="车位数:" prop="truckSpaceCount">
      <el-input v-model="props.formObj.truckSpaceCount" onkeyup="value=value.replace(/[^\d]/g,'')" placeholder="请输入车位数"></el-input>
    </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>