detail.vue 6.26 KB
<script setup lang="ts">
import { reactive, onMounted, watchEffect, defineEmits } from "vue";
import { getResidentById, update } from "@/api/ownerManagement/owner.ts";

// 声明props
const props = defineProps({
  id: {
    type: Number,
    default: null,
  },
  isEdit: {
    type: Boolean,
    default: false,
  },
});
const data = reactive({
  formObj: {},
  genderList: [
    { label: "男", value: 1 },
    { label: "女", value: 0 },
  ],
  isMarriedList: [
    { label: "未婚", value: 0 },
    { label: "已婚", value: 1 },
    { label: "离异", value: 2 },
    { label: "丧偶", value: 3 },
  ],
  politicalList: [
    { label: "群众", value: 0 },
    { label: "党员", value: 1 },
    { label: "团员", value: 2 },
  ],
  censusList: [
    { label: "非城镇户口", value: 0 },
    { label: "城镇户口", value: 1 },
    { label: "外阜", value: 2 },
  ],
  livingList: [{ label: "自住" }, { label: "暂住" }, { label: "外租" }],
});
const emit = defineEmits<{
  (e: "cancel"): void;
  (e: "success"): void;
}>();
/**
 * 获取详情
 * @param { number } id 住户id
 *
 */
const getData = (id: number) => {
  getResidentById({ id: id }).then((res) => {
    data.formObj = res.data.data[0];
  });
};

/**
 *
 * 数据提交
 */
const submit = () => {
  update(data.formObj).then((res) => {
    emit("success");
  });
};
/**
 * 取消提交
 */
const cancel: void = () => {
  emit("cancel");
};
/**
 * 监听改变
 */
watchEffect((newValue, oldVlaue) => {
  if (props.id) {
    getData(props.id);
  }
});
</script>

<template>
  <el-form :model="data.formObj" label-width="120px" :inline="true">
    <el-form-item label="所属小区:" prop="neighborhoodName">
      <el-input
        v-model="data.formObj.neighborhoodName"
        disabled
        suffix-icon="el-icon-date"
      ></el-input>
    </el-form-item>
    <el-form-item label="楼宇名称:" prop="buildingName">
      <el-input
        v-model="data.formObj.buildingName"
        disabled
        suffix-icon="el-icon-date"
      ></el-input>
    </el-form-item>
    <el-form-item label="姓名:" prop="name">
      <el-input
        v-model="data.formObj.name"
        :disabled="props.isEdit"
        suffix-icon="el-icon-date"
      ></el-input>
    </el-form-item>
    <el-form-item label="房间号:" prop="houseName">
      <el-input
        v-model="data.formObj.houseName"
        disabled
        suffix-icon="el-icon-date"
      ></el-input>
    </el-form-item>
    <el-form-item label="身份证号:" prop="idcard">
      <el-input
        maxlength="18"
        onkeyup="value=value.replace(/[^\d]/g,'')"
        v-model="data.formObj.idcard"
        :disabled="props.isEdit"
        suffix-icon="el-icon-date"
      ></el-input>
    </el-form-item>

    <el-form-item label="手机号:" prop="mobile">
      <el-input
        maxlength="11"
        onkeyup="value=value.replace(/[^\d]/g,'')"
        v-model="data.formObj.mobile"
        disabled
        suffix-icon="el-icon-date"
      ></el-input>
    </el-form-item>
    <el-form-item label="性别:" prop="gender">
      <el-select disabled v-model="data.formObj.gender" placeholder="请选择">
        <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="nationality">
      <el-input
        v-model="data.formObj.nationality"
        disabled
        suffix-icon="el-icon-date"
      ></el-input>
    </el-form-item>
    <el-form-item label="户籍所在地:" prop="censusRegister">
      <el-input
        suffix-icon="el-icon-date"
        v-model="data.formObj.censusRegister"
        :disabled="props.isEdit"
      ></el-input>
    </el-form-item>
    <el-form-item label="婚姻状态:" prop="isMarried">
      <el-select
        :disabled="props.isEdit"
        v-model="data.formObj.isMarried"
        placeholder="请选择"
      >
        <el-option
          v-for="item in data.isMarriedList"
          :key="item.value"
          :label="item.label"
          :value="item.value"
        >
        </el-option>
      </el-select>
    </el-form-item>
    <el-form-item label="政治面貌:" prop="politicalStatus">
      <el-select
        v-model="data.formObj.politicalStatus"
        placeholder="请选择"
        :disabled="props.isEdit"
      >
        <el-option
          v-for="item in data.politicalList"
          :key="item.value"
          :label="item.label"
          :value="item.value"
        >
        </el-option>
      </el-select>
    </el-form-item>
    <el-form-item label="户口类型:" prop="censusType">
      <el-select
        v-model="data.formObj.censusType"
        placeholder="请选择"
        :disabled="props.isEdit"
      >
        <el-option
          v-for="item in data.censusList"
          :key="item.value"
          :label="item.label"
          :value="item.value"
        >
        </el-option>
      </el-select>
    </el-form-item>
    <el-form-item label="居住类型:" prop="isLiving">
      <el-select
        v-model="data.formObj.isLiving"
        placeholder="请选择"
        :disabled="props.isEdit"
      >
        <el-option
          v-for="item in data.livingList"
          :key="item.label"
          :label="item.label"
          :value="item.label"
        >
        </el-option>
      </el-select>
    </el-form-item>
    <el-form-item label="现住地址:" prop="location">
      <el-input
        v-model="data.formObj.location"
        :disabled="props.isEdit"
        suffix-icon="el-icon-date"
      ></el-input>
    </el-form-item>
    <el-form-item label="暂住证号:" prop="residencePermit">
      <el-input
        v-model="data.formObj.residencePermit"
        :disabled="props.isEdit"
        suffix-icon="el-icon-date"
      ></el-input>
    </el-form-item>
     <el-form-item label="出生日期:" prop="birthdate">
      <el-date-picker
        :disabled="props.isEdit"
        v-model="data.formObj.birthdate"
        type="date"
        placeholder="Select date and time"
      >
      </el-date-picker>
    </el-form-item>
    <el-row>
      <el-form-item>
        <el-button type="primary" @click="submit">保存</el-button>
        <el-button @click="cancel">取消</el-button>
      </el-form-item>
    </el-row>
  </el-form>
</template>