This commit is contained in:
itcsx committed 2026-09-15 16:25:06 +08:00
1 parent fcbeba7287
commit f2f5807372
33 files changed
+1399 -1444

No files matched your search

@@ -587,6 +587,9 @@ const handleChange = (bindValue: string, value: string) => {
const onReset = () => {
bindOptions.value.forEach((element: BindOption) => {
// 只读(disabled)的查询条件属于固定约束,重置时保留其值
if (element.disabled) return;
element.Value = "";
element.Value1 = "";
element.Values = [];
@@ -56,6 +56,36 @@ class FamilyTreeService{
)
};
async RequestFamilyTreePermission(data: any) {
return request<any>(
{
url: "/FamilyTree/RequestFamilyTreePermission",
method: "post",
data,
}
)
};
async ApproveFamilyTreePermission(data: any) {
return request<any>(
{
url: "/FamilyTree/ApproveFamilyTreePermission",
method: "post",
data,
}
)
};
async RejectFamilyTreePermission(data: any) {
return request<any>(
{
url: "/FamilyTree/RejectFamilyTreePermission",
method: "post",
data,
}
)
};
async Update(data: FamilyTreeData) {
return request<FamilyTreeData>(
{
@@ -396,6 +396,15 @@ const initBindOption = async () => {
bindOption.lg = 10;
bindOptions.value.push(bindOption);
bindOption = ubo.getBindOption(
FamilyPersonEntity.DB_TREE_ID,
"族谱编号",
SearchFilterTypePolicy.TEXT,
SearchFilterOperatorPolicy.CONTAIN,
);
bindOption.lg = 10;
bindOptions.value.push(bindOption);
initBindOptions.value.forEach((element) => {
setBindOptionValue(
element.BindValue,
@@ -405,15 +414,6 @@ const initBindOption = async () => {
element.disabled,
);
});
bindOption = ubo.getBindOption(
FamilyPersonEntity.DB_CREATED_DATETIME,
"创建日期",
SearchFilterTypePolicy.DATE,
SearchFilterOperatorPolicy.DATE_BETWEEN,
);
bindOption.lg = 10;
bindOptions.value.push(bindOption);
};
//table from-----------------------------------------------------------------------------------------------------------------------------------
+95 -332
View File
@@ -7,47 +7,26 @@
<a-row :wrap="false">
<a-col flex="none">
<div style="padding: 0">
<a-input
flex="none"
readonly
value="族员编号"
class="site-input-split"
style="
<a-input flex="none" readonly value="族员编号" class="site-input-split" style="
width: 160px;
border-radius: 0;
border-top-left-radius: 5pt 5pt;
border-bottom-left-radius: 5pt 5pt;
pointer-events: none;
"
/>
" />
</div>
</a-col>
<a-col flex="auto">
<a-input-search
:disabled="isEdit"
v-model:value="personId"
flex="auto"
@search="onModalSearch"
/>
<a-input-search :disabled="isEdit" v-model:value="personId" flex="auto" @search="onModalSearch" />
</a-col>
</a-row>
</a-col>
<a-col :lg="12" :sm="24">
<a-space>
<a-button
type="primary"
:disabled="isEdit"
:icon="h(FileSearchOutlined)"
@click.prevent="onSearch"
>查询</a-button
>
<a-button
type="primary"
:disabled="isEdit"
:icon="h(ClearOutlined)"
@click.prevent="onReset"
>重置</a-button
>
<a-button type="primary" :disabled="isEdit" :icon="h(FileSearchOutlined)"
@click.prevent="onSearch">查询</a-button>
<a-button type="primary" :disabled="isEdit" :icon="h(ClearOutlined)"
@click.prevent="onReset">重置</a-button>
<!-- <a-button
type="primary"
:disabled="isEdit"
@@ -59,27 +38,13 @@
</a-col>
</a-row>
</div>
<div
class="page-main"
:class="{ 'fp-readonly': !isEdit }"
:style="{ height: resultH }"
>
<div class="page-main" :class="{ 'fp-readonly': !isEdit }" :style="{ height: resultH }">
<!-- 顶部:头像 / 姓名 / 编号 -->
<div class="fp-hero">
<FileUpload
class="fp-hero-upload"
accept="image/*"
file-path="FamilyPersonAvatar"
:disabled="!isEdit || avatarUploading"
@start="onAvatarUploadStart"
@progress="onAvatarUploadProgress"
@success="onAvatarUploadSuccess"
@error="onAvatarUploadError"
>
<div
class="fp-hero-avatar-wrap"
:class="{ 'is-editing': isEdit }"
>
<FileUpload class="fp-hero-upload" accept="image/*" file-path="FamilyPersonAvatar"
:disabled="!isEdit || avatarUploading" @start="onAvatarUploadStart" @progress="onAvatarUploadProgress"
@success="onAvatarUploadSuccess" @error="onAvatarUploadError">
<div class="fp-hero-avatar-wrap" :class="{ 'is-editing': isEdit }">
<a-avatar class="fp-hero-avatar" :size="72" :src="avatarSrc">
<template #icon>
<UserOutlined />
@@ -95,26 +60,20 @@
<div class="fp-hero-name">
{{
(data.FamilyPerson.Surname || "") +
(data.FamilyPerson.GenealogyName || "") || "未填写姓名"
(data.FamilyPerson.GenealogyName || "") || "未填写姓名"
}}
</div>
<div class="fp-hero-meta">
<span class="fp-chip"
>编号 {{ data.FamilyPerson.PersonId || "-" }}</span
>
<span class="fp-chip">编号 {{ data.FamilyPerson.PersonId || "-" }}</span>
</div>
<div class="fp-hero-meta">
<span class="fp-chip">族谱编号 {{ data.FamilyPerson.TreeId || "-" }}</span>
</div>
</div>
<a-button
v-if="
isEdit &&
(data.FamilyPerson.AvatarUrl || data.FamilyPerson.AvatarFilename)
"
class="fp-hero-clear"
type="text"
size="small"
@click.prevent="onClearAvatar"
>清除头像</a-button
>
<a-button v-if="
isEdit &&
(data.FamilyPerson.AvatarUrl || data.FamilyPerson.AvatarFilename)
" class="fp-hero-clear" type="text" size="small" @click.prevent="onClearAvatar">清除头像</a-button>
</div>
<!-- 基本资料 -->
<div class="fp-card">
@@ -122,84 +81,43 @@
<div class="fp-grid">
<div class="fp-field">
<div class="fp-label">姓氏<span class="fp-required">*</span></div>
<a-input
size="large"
:maxlength="100"
:readonly="!isEdit"
v-model:value="data.FamilyPerson.Surname"
placeholder="请输入姓氏"
/>
<a-input size="large" :maxlength="100" :readonly="!isEdit" v-model:value="data.FamilyPerson.Surname"
placeholder="请输入姓氏" />
</div>
<div class="fp-field">
<div class="fp-label">谱名<span class="fp-required">*</span></div>
<a-input
size="large"
:maxlength="100"
:readonly="!isEdit"
v-model:value="data.FamilyPerson.GenealogyName"
placeholder="请输入谱名"
/>
<a-input size="large" :maxlength="100" :readonly="!isEdit" v-model:value="data.FamilyPerson.GenealogyName"
placeholder="请输入谱名" />
</div>
<div class="fp-field">
<div class="fp-label">常用名</div>
<a-input
size="large"
:maxlength="100"
:readonly="!isEdit"
v-model:value="data.FamilyPerson.CommonName"
placeholder="请输入常用名"
/>
<a-input size="large" :maxlength="100" :readonly="!isEdit" v-model:value="data.FamilyPerson.CommonName"
placeholder="请输入常用名" />
</div>
<div class="fp-field">
<div class="fp-label">别名</div>
<a-input
size="large"
:maxlength="100"
:readonly="!isEdit"
v-model:value="data.FamilyPerson.Alias"
placeholder="请输入别名"
/>
<a-input size="large" :maxlength="100" :readonly="!isEdit" v-model:value="data.FamilyPerson.Alias"
placeholder="请输入别名" />
</div>
<div class="fp-field">
<div class="fp-label">字</div>
<a-input
size="large"
:maxlength="100"
:readonly="!isEdit"
v-model:value="data.FamilyPerson.Zi"
placeholder="请输入字"
/>
<a-input size="large" :maxlength="100" :readonly="!isEdit" v-model:value="data.FamilyPerson.Zi"
placeholder="请输入字" />
</div>
<div class="fp-field">
<div class="fp-label">号</div>
<a-input
size="large"
:maxlength="100"
:readonly="!isEdit"
v-model:value="data.FamilyPerson.Hao"
placeholder="请输入号"
/>
<a-input size="large" :maxlength="100" :readonly="!isEdit" v-model:value="data.FamilyPerson.Hao"
placeholder="请输入号" />
</div>
<div class="fp-field">
<div class="fp-label">行第</div>
<a-input
size="large"
:maxlength="32"
:readonly="!isEdit"
v-model:value="data.FamilyPerson.BirthOrder"
placeholder="如:三"
/>
<a-input size="large" :maxlength="32" :readonly="!isEdit" v-model:value="data.FamilyPerson.BirthOrder"
placeholder="如:三" />
</div>
<div class="fp-field">
<div class="fp-label">性别</div>
<a-select
size="large"
v-model:value="data.FamilyPerson.Gender"
:disabled="!isEdit"
style="width: 100%"
placeholder="请选择性别"
:options="genderSelectOptions"
>
<a-select size="large" v-model:value="data.FamilyPerson.Gender" :disabled="!isEdit" style="width: 100%"
placeholder="请选择性别" :options="genderSelectOptions">
</a-select>
</div>
</div>
@@ -210,95 +128,47 @@
<div class="fp-grid">
<div class="fp-field">
<div class="fp-label">婚姻</div>
<a-select
size="large"
v-model:value="data.FamilyPerson.MaritalStatus"
:disabled="!isEdit"
style="width: 100%"
placeholder="请选择"
>
<a-select-option
v-for="o in yesNoPolicy"
:value="o.BindValue"
>{{ o.DisplayName }}</a-select-option
>
<a-select size="large" v-model:value="data.FamilyPerson.MaritalStatus" :disabled="!isEdit"
style="width: 100%" placeholder="请选择">
<a-select-option v-for="o in yesNoPolicy" :value="o.BindValue">{{ o.DisplayName }}</a-select-option>
</a-select>
</div>
<div class="fp-field">
<div class="fp-label">父亲姓名</div>
<a-input
size="large"
:maxlength="50"
:readonly="!isEdit"
v-model:value="data.FamilyPerson.FatherId"
placeholder="请输入父亲姓名"
/>
<a-input size="large" :maxlength="50" :readonly="!isEdit" v-model:value="data.FamilyPerson.FatherId"
placeholder="请输入父亲姓名" />
</div>
<div class="fp-field">
<div class="fp-label">母亲姓名</div>
<a-input
size="large"
:maxlength="100"
:readonly="!isEdit"
v-model:value="data.FamilyPerson.MotherName"
placeholder="请输入母亲姓名"
/>
<a-input size="large" :maxlength="100" :readonly="!isEdit" v-model:value="data.FamilyPerson.MotherName"
placeholder="请输入母亲姓名" />
</div>
<div class="fp-field">
<div class="fp-label">学校</div>
<a-input
size="large"
:maxlength="256"
:readonly="!isEdit"
v-model:value="data.FamilyPerson.School"
placeholder="请输入毕业学校"
/>
<a-input size="large" :maxlength="256" :readonly="!isEdit" v-model:value="data.FamilyPerson.School"
placeholder="请输入毕业学校" />
</div>
<div class="fp-field">
<div class="fp-label">专业</div>
<a-input
size="large"
:maxlength="256"
:readonly="!isEdit"
v-model:value="data.FamilyPerson.Major"
placeholder="请输入所学专业"
/>
<a-input size="large" :maxlength="256" :readonly="!isEdit" v-model:value="data.FamilyPerson.Major"
placeholder="请输入所学专业" />
</div>
<div class="fp-field">
<div class="fp-label">学历</div>
<a-input
size="large"
:maxlength="128"
:readonly="!isEdit"
v-model:value="data.FamilyPerson.Education"
placeholder="请输入学历"
/>
<a-input size="large" :maxlength="128" :readonly="!isEdit" v-model:value="data.FamilyPerson.Education"
placeholder="请输入学历" />
</div>
<div class="fp-field">
<div class="fp-label">毕业</div>
<a-select
size="large"
v-model:value="data.FamilyPerson.GraduationStatus"
:disabled="!isEdit"
style="width: 100%"
placeholder="请选择"
>
<a-select-option
v-for="o in yesNoPolicy"
:value="o.BindValue"
>{{ o.DisplayName }}</a-select-option
>
<a-select size="large" v-model:value="data.FamilyPerson.GraduationStatus" :disabled="!isEdit"
style="width: 100%" placeholder="请选择">
<a-select-option v-for="o in yesNoPolicy" :value="o.BindValue">{{ o.DisplayName }}</a-select-option>
</a-select>
</div>
<div class="fp-field">
<div class="fp-label">职务</div>
<a-input
size="large"
:maxlength="256"
:readonly="!isEdit"
v-model:value="data.FamilyPerson.Duty"
placeholder="请输入职务"
/>
<a-input size="large" :maxlength="256" :readonly="!isEdit" v-model:value="data.FamilyPerson.Duty"
placeholder="请输入职务" />
</div>
</div>
</div>
@@ -308,68 +178,33 @@
<div class="fp-grid">
<div class="fp-field">
<div class="fp-label">头衔</div>
<a-input
size="large"
:maxlength="256"
:readonly="!isEdit"
v-model:value="data.FamilyPerson.Title"
placeholder="请输入头衔"
/>
<a-input size="large" :maxlength="256" :readonly="!isEdit" v-model:value="data.FamilyPerson.Title"
placeholder="请输入头衔" />
</div>
<div class="fp-field">
<div class="fp-label">公开</div>
<a-select
size="large"
v-model:value="data.FamilyPerson.Privacy"
:disabled="!isEdit"
style="width: 100%"
placeholder="请选择"
>
<a-select-option
v-for="o in yesNoPolicy"
:value="o.BindValue"
>{{ o.DisplayName }}</a-select-option
>
<a-select size="large" v-model:value="data.FamilyPerson.Privacy" :disabled="!isEdit" style="width: 100%"
placeholder="请选择">
<a-select-option v-for="o in yesNoPolicy" :value="o.BindValue">{{ o.DisplayName }}</a-select-option>
</a-select>
</div>
<div class="fp-field">
<div class="fp-label">状态</div>
<a-select
size="large"
v-model:value="data.FamilyPerson.LiveStatus"
:disabled="!isEdit"
style="width: 100%"
placeholder="请选择"
>
<a-select-option
v-for="o in yesNoPolicy"
:value="o.BindValue"
>{{ o.DisplayName }}</a-select-option
>
<a-select size="large" v-model:value="data.FamilyPerson.LiveStatus" :disabled="!isEdit"
style="width: 100%" placeholder="请选择">
<a-select-option v-for="o in yesNoPolicy" :value="o.BindValue">{{ o.DisplayName }}</a-select-option>
</a-select>
</div>
<div class="fp-field">
<div class="fp-label">绑定用户ID</div>
<div class="fp-inline">
<a-input
class="fp-inline-main"
size="large"
:maxlength="50"
:readonly="!isEdit"
v-model:value="data.FamilyPerson.BindUserId"
placeholder="请输入用户ID"
/>
<a-button
class="fp-inline-btn"
size="large"
type="primary"
ghost
:disabled="data.FamilyPerson.IsBindUser === 'Y'"
@click.prevent="
<a-input class="fp-inline-main" size="large" :maxlength="50" :readonly="!isEdit"
v-model:value="data.FamilyPerson.BindUserId" placeholder="请输入用户ID" />
<a-button class="fp-inline-btn" size="large" type="primary" ghost
:disabled="data.FamilyPerson.IsBindUser === 'Y'" @click.prevent="
data.FamilyPerson.IsBindUser =
data.FamilyPerson.IsBindUser === 'Y' ? 'N' : 'Y'
"
>
data.FamilyPerson.IsBindUser === 'Y' ? 'N' : 'Y'
">
{{
data.FamilyPerson.IsBindUser === "Y" ? "已绑定" : "绑定用户"
}}
@@ -379,41 +214,19 @@
<div class="fp-field">
<div class="fp-label">生于</div>
<div class="fp-inline">
<a-input
class="fp-inline-main"
size="large"
:maxlength="128"
:readonly="!isEdit"
v-model:value="data.FamilyPerson.BirthText"
placeholder="如:乙丑年正月初一"
/>
<a-date-picker
class="fp-inline-date"
size="large"
:disabled="!isEdit"
v-model:value="birthDate"
placeholder="选择日期"
/>
<a-input class="fp-inline-main" size="large" :maxlength="128" :readonly="!isEdit"
v-model:value="data.FamilyPerson.BirthText" placeholder="如:乙丑年正月初一" />
<a-date-picker class="fp-inline-date" size="large" :disabled="!isEdit" v-model:value="birthDate"
placeholder="选择日期" />
</div>
</div>
<div class="fp-field">
<div class="fp-label">离世</div>
<div class="fp-inline">
<a-input
class="fp-inline-main"
size="large"
:maxlength="128"
:readonly="!isEdit"
v-model:value="data.FamilyPerson.DeathText"
placeholder="如:戊辰年八月十五"
/>
<a-date-picker
class="fp-inline-date"
size="large"
:disabled="!isEdit"
v-model:value="deathDate"
placeholder="选择日期"
/>
<a-input class="fp-inline-main" size="large" :maxlength="128" :readonly="!isEdit"
v-model:value="data.FamilyPerson.DeathText" placeholder="如:戊辰年八月十五" />
<a-date-picker class="fp-inline-date" size="large" :disabled="!isEdit" v-model:value="deathDate"
placeholder="选择日期" />
</div>
</div>
</div>
@@ -423,14 +236,8 @@
<div class="fp-card-title">生平简介</div>
<div class="fp-field">
<div class="fp-label">简介</div>
<a-textarea
size="large"
:auto-size="{ minRows: 4, maxRows: 8 }"
:maxlength="3000"
:readonly="!isEdit"
v-model:value="data.FamilyPerson.Introduction"
placeholder="请输入生平简介"
/>
<a-textarea size="large" :auto-size="{ minRows: 4, maxRows: 8 }" :maxlength="3000" :readonly="!isEdit"
v-model:value="data.FamilyPerson.Introduction" placeholder="请输入生平简介" />
</div>
</div>
</div>
@@ -441,60 +248,24 @@
<div>
<a-row v-if="isEdit" :gutter="[16, 8]">
<a-space>
<a-popconfirm
v-if="data.FamilyPerson.CreatedBy"
title="确定是否取消修改?"
ok-text="是"
cancel-text="否"
@confirm="onCancel"
>
<a-button type="primary" ghost :icon="h(UndoOutlined)"
>取消</a-button
>
<a-popconfirm v-if="data.FamilyPerson.CreatedBy" title="确定是否取消修改?" ok-text="是" cancel-text="否"
@confirm="onCancel">
<a-button type="primary" ghost :icon="h(UndoOutlined)">取消</a-button>
</a-popconfirm>
<a-button
v-if="!data.FamilyPerson.CreatedBy"
type="primary"
ghost
:icon="h(UndoOutlined)"
@click.prevent="onCancel"
>取消</a-button
>
<a-button
type="primary"
ghost
:icon="h(SaveOutlined)"
@click.prevent="onSave"
>保存</a-button
>
<a-button v-if="!data.FamilyPerson.CreatedBy" type="primary" ghost :icon="h(UndoOutlined)"
@click.prevent="onCancel">取消</a-button>
<a-button type="primary" ghost :icon="h(SaveOutlined)" @click.prevent="onSave">保存</a-button>
</a-space>
</a-row>
<a-row v-else :gutter="[16, 8]">
<a-space>
<a-button
type="primary"
v-if="canAmend"
:icon="h(EditOutlined)"
:disabled="!hasData"
@click.prevent="onAmend"
>修改</a-button
>
<!-- <a-popconfirm
:disabled="!hasData"
title="确定是否删除这条记录?"
ok-text="是"
cancel-text="否"
@confirm="onDelete"
>
<a-button
type="primary"
danger
:icon="h(DeleteOutlined)"
:disabled="!hasData"
v-if="canDelete"
>删除</a-button
>
</a-popconfirm> -->
<a-button type="primary" v-if="canAmend" :icon="h(EditOutlined)" :disabled="!hasData"
@click.prevent="onAmend">修改</a-button>
<a-popconfirm :disabled="!hasData" title="确定是否删除这条记录?" ok-text="是" cancel-text="否"
@confirm="onDelete">
<a-button type="primary" danger :icon="h(DeleteOutlined)" :disabled="!hasData"
v-if="canDelete && data.FamilyPerson && data.FamilyPerson.TreeId.length == 0">删除</a-button>
</a-popconfirm>
</a-space>
</a-row>
</div>
@@ -503,17 +274,9 @@
</div>
</div>
</div>
<dragModal
v-model:open="modelOption.isModalPerson"
title="人员查询"
:mask-closable="false"
:fullscreen="width < 640"
@ok="handleSelect"
>
<FamilyPersonEnquiry
ref="enquiry"
@on-row-dblclick="handleSelect"
></FamilyPersonEnquiry>
<dragModal v-model:open="modelOption.isModalPerson" title="人员查询" :mask-closable="false" :fullscreen="width < 640"
@ok="handleSelect">
<FamilyPersonEnquiry ref="enquiry" @on-row-dblclick="handleSelect"></FamilyPersonEnquiry>
</dragModal>
</a-spin>
</template>
@@ -0,0 +1,212 @@
<template>
<dragModal
v-model:open="visible"
:title="title || '新增家族成员'"
:fullscreen="width < 640"
:mask-closable="false"
:ok-button-props="{ loading: saving }"
cancel-text="取消"
ok-text="确定"
@ok="handleOk"
>
<div class="fpcq-form">
<div class="fpcq-field">
<div class="fpcq-label">
姓<span class="fpcq-required">*</span>
</div>
<a-input
ref="surnameInputRef"
size="large"
v-model:value="form.Surname"
placeholder="请输入姓氏"
:maxlength="100"
allow-clear
/>
</div>
<div class="fpcq-field">
<div class="fpcq-label">
名<span class="fpcq-required">*</span>
</div>
<a-input
size="large"
v-model:value="form.GenealogyName"
placeholder="请输入谱名/名字"
:maxlength="100"
allow-clear
/>
</div>
<div class="fpcq-field">
<div class="fpcq-label">
性别<span class="fpcq-required">*</span>
</div>
<a-select
size="large"
style="width: 100%"
v-model:value="form.Gender"
placeholder="请选择性别"
>
<a-select-option
v-for="o in genderOptions"
:key="o.BindValue"
:value="o.BindValue"
>{{ o.DisplayName }}</a-select-option
>
</a-select>
</div>
</div>
</dragModal>
</template>
<script lang="ts" setup>
import { ref, watch, computed, nextTick } from "vue";
import { notification } from "ant-design-vue";
import dragModal from "@/components/basic/DragModal.vue";
import FamilyPersonService from "@/service/master/familyPersonService";
import { FamilyPersonData } from "@/data/auto/familyPersonData";
import { FamilyPersonDisplayData } from "@/data/auto/familyPersonDisplayData";
import { useLocalePolicy } from "@/hooks/useLocalePolicy";
import { SelectOption } from "@/data/auto/selectOption";
import { useWindowSize } from "@vueuse/core";
interface Props {
open: boolean;
treeId?: string;
title?: string;
}
const props = withDefaults(defineProps<Props>(), {
treeId: "",
title: "",
});
const emit = defineEmits<{
(e: "update:open", value: boolean): void;
(e: "created", person: FamilyPersonDisplayData): void;
}>();
const visible = computed<boolean>({
get: () => props.open,
set: (v) => emit("update:open", v),
});
const { width } = useWindowSize();
const { getPolicyOptionsComputed } = useLocalePolicy();
const genderOptions = getPolicyOptionsComputed("GenderPolicy") as SelectOption[];
const surnameInputRef = ref<any>(null);
const saving = ref<boolean>(false);
const form = ref<{
Surname: string;
GenealogyName: string;
Gender: string;
}>({
Surname: "",
GenealogyName: "",
Gender: "",
});
const resetForm = () => {
form.value.Surname = "";
form.value.GenealogyName = "";
form.value.Gender = "";
};
watch(
() => props.open,
(open) => {
if (open) {
resetForm();
nextTick(() => {
try {
surnameInputRef.value?.focus?.();
} catch (e) {
/* noop */
}
});
}
},
);
const handleOk = async () => {
if (!form.value.Surname.trim()) {
notification.info({
message: "系统提示:",
description: "请输入姓",
placement: "topRight",
});
return;
}
if (!form.value.GenealogyName.trim()) {
notification.info({
message: "系统提示:",
description: "请输入名",
placement: "topRight",
});
return;
}
if (!form.value.Gender.trim()) {
notification.info({
message: "系统提示:",
description: "请选择性别",
placement: "topRight",
});
return;
}
const payload = new FamilyPersonData();
payload.FamilyPerson = new FamilyPersonDisplayData();
payload.FamilyPerson.Surname = form.value.Surname.trim();
payload.FamilyPerson.GenealogyName = form.value.GenealogyName.trim();
payload.FamilyPerson.Gender = form.value.Gender;
payload.FamilyPerson.TreeId = props.treeId || "";
try {
saving.value = true;
const result: FamilyPersonData = await FamilyPersonService.Insert(payload);
saving.value = false;
const created = result?.FamilyPerson || payload.FamilyPerson;
// notification.success({
// message: "系统提示:",
// description: "新增成功",
// placement: "topRight",
// });
emit("created", created);
visible.value = false;
} catch (error) {
saving.value = false;
console.log(error);
notification.error({
message: "系统提示:",
description: "新增失败,请稍后再试",
placement: "topRight",
});
}
};
</script>
<style lang="less" scoped>
.fpcq-form {
display: flex;
flex-direction: column;
gap: 14px;
padding: 4px 4px 8px;
}
.fpcq-field {
min-width: 0;
}
.fpcq-label {
margin-bottom: 4px;
font-size: 13px;
line-height: 20px;
color: #646a73;
}
.fpcq-required {
margin-left: 2px;
color: #ff4d4f;
}
</style>
File diff suppressed because it is too large. Load diff