0.0.5.1
This commit is contained in:
File diff suppressed because one or more lines are too long
@@ -10,6 +10,7 @@
|
||||
"/api/user/profile/route": "app/api/user/profile/route.js",
|
||||
"/auth/signin/page": "app/auth/signin/page.js",
|
||||
"/members/[id]/page": "app/members/[id]/page.js",
|
||||
"/members/new/page": "app/members/new/page.js",
|
||||
"/members/page": "app/members/page.js",
|
||||
"/page": "app/page.js",
|
||||
"/relationship-test/page": "app/relationship-test/page.js",
|
||||
|
||||
File diff suppressed because one or more lines are too long
@@ -0,0 +1,15 @@
|
||||
var R=require("../../../chunks/ssr/[turbopack]_runtime.js")("server/app/members/new/page.js")
|
||||
R.c("server/chunks/ssr/4e98a_next_dist_03c86f03._.js")
|
||||
R.c("server/chunks/ssr/[root-of-the-server]__ebcf4d5f._.js")
|
||||
R.c("server/chunks/ssr/4e98a_next_dist_0643e073._.js")
|
||||
R.c("server/chunks/ssr/[root-of-the-server]__7f148858._.js")
|
||||
R.c("server/chunks/ssr/4e98a_next_dist_client_components_builtin_global-error_196f2367.js")
|
||||
R.c("server/chunks/ssr/[root-of-the-server]__b37c7274._.js")
|
||||
R.c("server/chunks/ssr/Documents_go-new_chinese-family-tree_app_loading_tsx_b1f283e0._.js")
|
||||
R.c("server/chunks/ssr/4e98a_next_dist_client_components_1ee43648._.js")
|
||||
R.c("server/chunks/ssr/4e98a_next_dist_client_components_builtin_forbidden_243a9611.js")
|
||||
R.c("server/chunks/ssr/4e98a_next_dist_client_components_builtin_unauthorized_719c1458.js")
|
||||
R.c("server/chunks/ssr/Documents_go-new_chinese-family-tree_app_members_loading_tsx_ed6b6dde._.js")
|
||||
R.c("server/chunks/ssr/fb354_chinese-family-tree__next-internal_server_app_members_new_page_actions_269eb31e.js")
|
||||
R.m("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/esm/build/templates/app-page.js?page=/members/new/page { GLOBAL_ERROR_MODULE => \"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/client/components/builtin/global-error.js [app-rsc] (ecmascript, Next.js Server Component)\", MODULE_0 => \"[project]/Documents/go-new/chinese-family-tree/app/layout.tsx [app-rsc] (ecmascript, Next.js Server Component)\", MODULE_1 => \"[project]/Documents/go-new/chinese-family-tree/app/loading.tsx [app-rsc] (ecmascript, Next.js Server Component)\", MODULE_2 => \"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/client/components/builtin/not-found.js [app-rsc] (ecmascript, Next.js Server Component)\", MODULE_3 => \"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/client/components/builtin/forbidden.js [app-rsc] (ecmascript, Next.js Server Component)\", MODULE_4 => \"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/client/components/builtin/unauthorized.js [app-rsc] (ecmascript, Next.js Server Component)\", MODULE_5 => \"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/client/components/builtin/global-error.js [app-rsc] (ecmascript, Next.js Server Component)\", MODULE_6 => \"[project]/Documents/go-new/chinese-family-tree/app/members/loading.tsx [app-rsc] (ecmascript, Next.js Server Component)\", MODULE_7 => \"[project]/Documents/go-new/chinese-family-tree/app/members/new/page.tsx [app-rsc] (ecmascript, Next.js Server Component)\" } [app-rsc] (ecmascript)")
|
||||
module.exports=R.m("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/esm/build/templates/app-page.js?page=/members/new/page { GLOBAL_ERROR_MODULE => \"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/client/components/builtin/global-error.js [app-rsc] (ecmascript, Next.js Server Component)\", MODULE_0 => \"[project]/Documents/go-new/chinese-family-tree/app/layout.tsx [app-rsc] (ecmascript, Next.js Server Component)\", MODULE_1 => \"[project]/Documents/go-new/chinese-family-tree/app/loading.tsx [app-rsc] (ecmascript, Next.js Server Component)\", MODULE_2 => \"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/client/components/builtin/not-found.js [app-rsc] (ecmascript, Next.js Server Component)\", MODULE_3 => \"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/client/components/builtin/forbidden.js [app-rsc] (ecmascript, Next.js Server Component)\", MODULE_4 => \"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/client/components/builtin/unauthorized.js [app-rsc] (ecmascript, Next.js Server Component)\", MODULE_5 => \"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/client/components/builtin/global-error.js [app-rsc] (ecmascript, Next.js Server Component)\", MODULE_6 => \"[project]/Documents/go-new/chinese-family-tree/app/members/loading.tsx [app-rsc] (ecmascript, Next.js Server Component)\", MODULE_7 => \"[project]/Documents/go-new/chinese-family-tree/app/members/new/page.tsx [app-rsc] (ecmascript, Next.js Server Component)\" } [app-rsc] (ecmascript)").exports
|
||||
@@ -0,0 +1,5 @@
|
||||
{
|
||||
"version": 3,
|
||||
"sources": [],
|
||||
"sections": []
|
||||
}
|
||||
@@ -0,0 +1,3 @@
|
||||
{
|
||||
"/members/new/page": "app/members/new/page.js"
|
||||
}
|
||||
@@ -0,0 +1,22 @@
|
||||
{
|
||||
"devFiles": [],
|
||||
"ampDevFiles": [],
|
||||
"polyfillFiles": [
|
||||
"static/chunks/4e98a_next_dist_build_polyfills_polyfill-nomodule.js"
|
||||
],
|
||||
"lowPriorityFiles": [],
|
||||
"rootMainFiles": [
|
||||
"static/chunks/[turbopack]_browser_dev_hmr-client_hmr-client_ts_67e3ae72._.js",
|
||||
"static/chunks/4e98a_next_dist_compiled_react-dom_da552622._.js",
|
||||
"static/chunks/4e98a_next_dist_compiled_react-server-dom-turbopack_c5146742._.js",
|
||||
"static/chunks/4e98a_next_dist_compiled_next-devtools_index_59922e46.js",
|
||||
"static/chunks/4e98a_next_dist_compiled_21c48460._.js",
|
||||
"static/chunks/4e98a_next_dist_client_d594727a._.js",
|
||||
"static/chunks/4e98a_next_dist_24912bf1._.js",
|
||||
"static/chunks/6704b_@swc_helpers_cjs_8771abe4._.js",
|
||||
"static/chunks/Documents_go-new_chinese-family-tree_a0ff3932._.js",
|
||||
"static/chunks/turbopack-Documents_go-new_chinese-family-tree_b39b5e67._.js"
|
||||
],
|
||||
"pages": {},
|
||||
"ampFirstPages": []
|
||||
}
|
||||
@@ -0,0 +1,11 @@
|
||||
{
|
||||
"pages": {},
|
||||
"app": {
|
||||
"[project]/Documents/go-new/chinese-family-tree/app/members/new/page": [
|
||||
"static/media/caa3a2e1cccd8315-s.p.853070df.woff2",
|
||||
"static/media/797e433ab948586e-s.p.dbea232f.woff2"
|
||||
]
|
||||
},
|
||||
"appUsingSizeAdjust": true,
|
||||
"pagesUsingSizeAdjust": false
|
||||
}
|
||||
@@ -0,0 +1 @@
|
||||
{}
|
||||
@@ -0,0 +1,4 @@
|
||||
{
|
||||
"node": {},
|
||||
"edge": {}
|
||||
}
|
||||
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@@ -280,11 +280,32 @@ const createMemberSchema = __TURBOPACK__imported__module__$5b$project$5d2f$Docum
|
||||
fullName: __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$zod$40$3$2e$25$2e$76$2f$node_modules$2f$zod$2f$v3$2f$external$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__$3c$export__$2a$__as__z$3e$__["z"].string().min(1),
|
||||
gender: __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$zod$40$3$2e$25$2e$76$2f$node_modules$2f$zod$2f$v3$2f$external$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__$3c$export__$2a$__as__z$3e$__["z"].nativeEnum(__TURBOPACK__imported__module__$5b$externals$5d2f40$prisma$2f$client__$5b$external$5d$__$2840$prisma$2f$client$2c$__cjs$29$__["Gender"]),
|
||||
generation: __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$zod$40$3$2e$25$2e$76$2f$node_modules$2f$zod$2f$v3$2f$external$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__$3c$export__$2a$__as__z$3e$__["z"].number().int().positive(),
|
||||
generationName: __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$zod$40$3$2e$25$2e$76$2f$node_modules$2f$zod$2f$v3$2f$external$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__$3c$export__$2a$__as__z$3e$__["z"].string().optional(),
|
||||
courtesyName: __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$zod$40$3$2e$25$2e$76$2f$node_modules$2f$zod$2f$v3$2f$external$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__$3c$export__$2a$__as__z$3e$__["z"].string().optional(),
|
||||
artName: __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$zod$40$3$2e$25$2e$76$2f$node_modules$2f$zod$2f$v3$2f$external$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__$3c$export__$2a$__as__z$3e$__["z"].string().optional(),
|
||||
posthumousName: __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$zod$40$3$2e$25$2e$76$2f$node_modules$2f$zod$2f$v3$2f$external$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__$3c$export__$2a$__as__z$3e$__["z"].string().optional(),
|
||||
rank: __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$zod$40$3$2e$25$2e$76$2f$node_modules$2f$zod$2f$v3$2f$external$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__$3c$export__$2a$__as__z$3e$__["z"].number().optional(),
|
||||
birthDate: __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$zod$40$3$2e$25$2e$76$2f$node_modules$2f$zod$2f$v3$2f$external$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__$3c$export__$2a$__as__z$3e$__["z"].string().optional(),
|
||||
deathDate: __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$zod$40$3$2e$25$2e$76$2f$node_modules$2f$zod$2f$v3$2f$external$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__$3c$export__$2a$__as__z$3e$__["z"].string().optional(),
|
||||
isLunarDate: __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$zod$40$3$2e$25$2e$76$2f$node_modules$2f$zod$2f$v3$2f$external$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__$3c$export__$2a$__as__z$3e$__["z"].boolean().optional(),
|
||||
ancestralHome: __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$zod$40$3$2e$25$2e$76$2f$node_modules$2f$zod$2f$v3$2f$external$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__$3c$export__$2a$__as__z$3e$__["z"].string().optional(),
|
||||
birthPlace: __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$zod$40$3$2e$25$2e$76$2f$node_modules$2f$zod$2f$v3$2f$external$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__$3c$export__$2a$__as__z$3e$__["z"].string().optional(),
|
||||
burialPlace: __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$zod$40$3$2e$25$2e$76$2f$node_modules$2f$zod$2f$v3$2f$external$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__$3c$export__$2a$__as__z$3e$__["z"].string().optional(),
|
||||
phone: __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$zod$40$3$2e$25$2e$76$2f$node_modules$2f$zod$2f$v3$2f$external$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__$3c$export__$2a$__as__z$3e$__["z"].string().optional(),
|
||||
telephone: __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$zod$40$3$2e$25$2e$76$2f$node_modules$2f$zod$2f$v3$2f$external$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__$3c$export__$2a$__as__z$3e$__["z"].string().optional(),
|
||||
email: __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$zod$40$3$2e$25$2e$76$2f$node_modules$2f$zod$2f$v3$2f$external$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__$3c$export__$2a$__as__z$3e$__["z"].string().optional(),
|
||||
address: __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$zod$40$3$2e$25$2e$76$2f$node_modules$2f$zod$2f$v3$2f$external$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__$3c$export__$2a$__as__z$3e$__["z"].string().optional(),
|
||||
fatherId: __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$zod$40$3$2e$25$2e$76$2f$node_modules$2f$zod$2f$v3$2f$external$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__$3c$export__$2a$__as__z$3e$__["z"].string().optional(),
|
||||
motherId: __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$zod$40$3$2e$25$2e$76$2f$node_modules$2f$zod$2f$v3$2f$external$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__$3c$export__$2a$__as__z$3e$__["z"].string().optional(),
|
||||
spouseIds: __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$zod$40$3$2e$25$2e$76$2f$node_modules$2f$zod$2f$v3$2f$external$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__$3c$export__$2a$__as__z$3e$__["z"].array(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$zod$40$3$2e$25$2e$76$2f$node_modules$2f$zod$2f$v3$2f$external$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__$3c$export__$2a$__as__z$3e$__["z"].string()).optional()
|
||||
spouseIds: __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$zod$40$3$2e$25$2e$76$2f$node_modules$2f$zod$2f$v3$2f$external$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__$3c$export__$2a$__as__z$3e$__["z"].array(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$zod$40$3$2e$25$2e$76$2f$node_modules$2f$zod$2f$v3$2f$external$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__$3c$export__$2a$__as__z$3e$__["z"].string()).optional(),
|
||||
childrenIds: __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$zod$40$3$2e$25$2e$76$2f$node_modules$2f$zod$2f$v3$2f$external$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__$3c$export__$2a$__as__z$3e$__["z"].array(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$zod$40$3$2e$25$2e$76$2f$node_modules$2f$zod$2f$v3$2f$external$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__$3c$export__$2a$__as__z$3e$__["z"].string()).optional(),
|
||||
spouseFatherName: __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$zod$40$3$2e$25$2e$76$2f$node_modules$2f$zod$2f$v3$2f$external$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__$3c$export__$2a$__as__z$3e$__["z"].string().optional(),
|
||||
spouseMotherName: __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$zod$40$3$2e$25$2e$76$2f$node_modules$2f$zod$2f$v3$2f$external$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__$3c$export__$2a$__as__z$3e$__["z"].string().optional(),
|
||||
bio: __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$zod$40$3$2e$25$2e$76$2f$node_modules$2f$zod$2f$v3$2f$external$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__$3c$export__$2a$__as__z$3e$__["z"].string().optional(),
|
||||
tags: __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$zod$40$3$2e$25$2e$76$2f$node_modules$2f$zod$2f$v3$2f$external$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__$3c$export__$2a$__as__z$3e$__["z"].array(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$zod$40$3$2e$25$2e$76$2f$node_modules$2f$zod$2f$v3$2f$external$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__$3c$export__$2a$__as__z$3e$__["z"].string()).optional(),
|
||||
avatarUrl: __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$zod$40$3$2e$25$2e$76$2f$node_modules$2f$zod$2f$v3$2f$external$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__$3c$export__$2a$__as__z$3e$__["z"].string().optional(),
|
||||
avatarImageId: __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$zod$40$3$2e$25$2e$76$2f$node_modules$2f$zod$2f$v3$2f$external$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__$3c$export__$2a$__as__z$3e$__["z"].string().optional(),
|
||||
photoIds: __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$zod$40$3$2e$25$2e$76$2f$node_modules$2f$zod$2f$v3$2f$external$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__$3c$export__$2a$__as__z$3e$__["z"].array(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$zod$40$3$2e$25$2e$76$2f$node_modules$2f$zod$2f$v3$2f$external$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__$3c$export__$2a$__as__z$3e$__["z"].string()).optional()
|
||||
});
|
||||
async function GET(req, { params }) {
|
||||
try {
|
||||
@@ -397,6 +418,104 @@ async function POST(req, { params }) {
|
||||
treeId
|
||||
}
|
||||
});
|
||||
// 维护配偶双向关系
|
||||
if (data.spouseIds && data.spouseIds.length > 0) {
|
||||
for (const spouseId of data.spouseIds){
|
||||
const spouse = await __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$lib$2f$prisma$2e$ts__$5b$app$2d$route$5d$__$28$ecmascript$29$__["prisma"].familyMember.findUnique({
|
||||
where: {
|
||||
id: spouseId
|
||||
}
|
||||
});
|
||||
if (spouse && !spouse.spouseIds.includes(member.id)) {
|
||||
await __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$lib$2f$prisma$2e$ts__$5b$app$2d$route$5d$__$28$ecmascript$29$__["prisma"].familyMember.update({
|
||||
where: {
|
||||
id: spouseId
|
||||
},
|
||||
data: {
|
||||
spouseIds: [
|
||||
...spouse.spouseIds,
|
||||
member.id
|
||||
]
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
// 维护父母-子女双向关系
|
||||
// 1. 如果设置了父亲,将当前成员添加到父亲的子女列表
|
||||
if (data.fatherId) {
|
||||
const father = await __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$lib$2f$prisma$2e$ts__$5b$app$2d$route$5d$__$28$ecmascript$29$__["prisma"].familyMember.findUnique({
|
||||
where: {
|
||||
id: data.fatherId
|
||||
}
|
||||
});
|
||||
if (father && !father.childrenIds.includes(member.id)) {
|
||||
await __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$lib$2f$prisma$2e$ts__$5b$app$2d$route$5d$__$28$ecmascript$29$__["prisma"].familyMember.update({
|
||||
where: {
|
||||
id: data.fatherId
|
||||
},
|
||||
data: {
|
||||
childrenIds: [
|
||||
...father.childrenIds,
|
||||
member.id
|
||||
]
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
// 2. 如果设置了母亲,将当前成员添加到母亲的子女列表
|
||||
if (data.motherId) {
|
||||
const mother = await __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$lib$2f$prisma$2e$ts__$5b$app$2d$route$5d$__$28$ecmascript$29$__["prisma"].familyMember.findUnique({
|
||||
where: {
|
||||
id: data.motherId
|
||||
}
|
||||
});
|
||||
if (mother && !mother.childrenIds.includes(member.id)) {
|
||||
await __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$lib$2f$prisma$2e$ts__$5b$app$2d$route$5d$__$28$ecmascript$29$__["prisma"].familyMember.update({
|
||||
where: {
|
||||
id: data.motherId
|
||||
},
|
||||
data: {
|
||||
childrenIds: [
|
||||
...mother.childrenIds,
|
||||
member.id
|
||||
]
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
// 3. 如果设置了子女,将当前成员设置为子女的父亲或母亲
|
||||
if (data.childrenIds && data.childrenIds.length > 0) {
|
||||
for (const childId of data.childrenIds){
|
||||
const child = await __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$lib$2f$prisma$2e$ts__$5b$app$2d$route$5d$__$28$ecmascript$29$__["prisma"].familyMember.findUnique({
|
||||
where: {
|
||||
id: childId
|
||||
}
|
||||
});
|
||||
if (child) {
|
||||
// 根据当前成员的性别设置为父亲或母亲
|
||||
if (data.gender === 'MALE' && !child.fatherId) {
|
||||
await __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$lib$2f$prisma$2e$ts__$5b$app$2d$route$5d$__$28$ecmascript$29$__["prisma"].familyMember.update({
|
||||
where: {
|
||||
id: childId
|
||||
},
|
||||
data: {
|
||||
fatherId: member.id
|
||||
}
|
||||
});
|
||||
} else if (data.gender === 'FEMALE' && !child.motherId) {
|
||||
await __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$lib$2f$prisma$2e$ts__$5b$app$2d$route$5d$__$28$ecmascript$29$__["prisma"].familyMember.update({
|
||||
where: {
|
||||
id: childId
|
||||
},
|
||||
data: {
|
||||
motherId: member.id
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
// 记录操作日志
|
||||
await __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$lib$2f$prisma$2e$ts__$5b$app$2d$route$5d$__$28$ecmascript$29$__["prisma"].activityLog.create({
|
||||
data: {
|
||||
|
||||
File diff suppressed because one or more lines are too long
@@ -363,6 +363,212 @@ async function PATCH(req, { params }) {
|
||||
updatedAt: new Date()
|
||||
}
|
||||
});
|
||||
// 维护配偶双向关系
|
||||
if (body.spouseIds !== undefined) {
|
||||
const newSpouseIds = body.spouseIds || [];
|
||||
const oldSpouseIds = existingMember.spouseIds || [];
|
||||
// 添加新配偶的反向关系
|
||||
for (const spouseId of newSpouseIds){
|
||||
if (!oldSpouseIds.includes(spouseId)) {
|
||||
const spouse = await __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$lib$2f$prisma$2e$ts__$5b$app$2d$route$5d$__$28$ecmascript$29$__["prisma"].familyMember.findUnique({
|
||||
where: {
|
||||
id: spouseId
|
||||
}
|
||||
});
|
||||
if (spouse && !spouse.spouseIds.includes(memberId)) {
|
||||
await __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$lib$2f$prisma$2e$ts__$5b$app$2d$route$5d$__$28$ecmascript$29$__["prisma"].familyMember.update({
|
||||
where: {
|
||||
id: spouseId
|
||||
},
|
||||
data: {
|
||||
spouseIds: [
|
||||
...spouse.spouseIds,
|
||||
memberId
|
||||
]
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
// 移除旧配偶的反向关系
|
||||
for (const oldSpouseId of oldSpouseIds){
|
||||
if (!newSpouseIds.includes(oldSpouseId)) {
|
||||
const spouse = await __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$lib$2f$prisma$2e$ts__$5b$app$2d$route$5d$__$28$ecmascript$29$__["prisma"].familyMember.findUnique({
|
||||
where: {
|
||||
id: oldSpouseId
|
||||
}
|
||||
});
|
||||
if (spouse && spouse.spouseIds.includes(memberId)) {
|
||||
await __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$lib$2f$prisma$2e$ts__$5b$app$2d$route$5d$__$28$ecmascript$29$__["prisma"].familyMember.update({
|
||||
where: {
|
||||
id: oldSpouseId
|
||||
},
|
||||
data: {
|
||||
spouseIds: spouse.spouseIds.filter((id)=>id !== memberId)
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
// 维护父母-子女双向关系
|
||||
// 1. 处理父亲关系变化
|
||||
if (body.fatherId !== undefined) {
|
||||
const oldFatherId = existingMember.fatherId;
|
||||
const newFatherId = body.fatherId;
|
||||
// 从旧父亲的子女列表中移除
|
||||
if (oldFatherId && oldFatherId !== newFatherId) {
|
||||
const oldFather = await __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$lib$2f$prisma$2e$ts__$5b$app$2d$route$5d$__$28$ecmascript$29$__["prisma"].familyMember.findUnique({
|
||||
where: {
|
||||
id: oldFatherId
|
||||
}
|
||||
});
|
||||
if (oldFather && oldFather.childrenIds.includes(memberId)) {
|
||||
await __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$lib$2f$prisma$2e$ts__$5b$app$2d$route$5d$__$28$ecmascript$29$__["prisma"].familyMember.update({
|
||||
where: {
|
||||
id: oldFatherId
|
||||
},
|
||||
data: {
|
||||
childrenIds: oldFather.childrenIds.filter((id)=>id !== memberId)
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
// 添加到新父亲的子女列表
|
||||
if (newFatherId && newFatherId !== oldFatherId) {
|
||||
const newFather = await __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$lib$2f$prisma$2e$ts__$5b$app$2d$route$5d$__$28$ecmascript$29$__["prisma"].familyMember.findUnique({
|
||||
where: {
|
||||
id: newFatherId
|
||||
}
|
||||
});
|
||||
if (newFather && !newFather.childrenIds.includes(memberId)) {
|
||||
await __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$lib$2f$prisma$2e$ts__$5b$app$2d$route$5d$__$28$ecmascript$29$__["prisma"].familyMember.update({
|
||||
where: {
|
||||
id: newFatherId
|
||||
},
|
||||
data: {
|
||||
childrenIds: [
|
||||
...newFather.childrenIds,
|
||||
memberId
|
||||
]
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
// 2. 处理母亲关系变化
|
||||
if (body.motherId !== undefined) {
|
||||
const oldMotherId = existingMember.motherId;
|
||||
const newMotherId = body.motherId;
|
||||
// 从旧母亲的子女列表中移除
|
||||
if (oldMotherId && oldMotherId !== newMotherId) {
|
||||
const oldMother = await __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$lib$2f$prisma$2e$ts__$5b$app$2d$route$5d$__$28$ecmascript$29$__["prisma"].familyMember.findUnique({
|
||||
where: {
|
||||
id: oldMotherId
|
||||
}
|
||||
});
|
||||
if (oldMother && oldMother.childrenIds.includes(memberId)) {
|
||||
await __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$lib$2f$prisma$2e$ts__$5b$app$2d$route$5d$__$28$ecmascript$29$__["prisma"].familyMember.update({
|
||||
where: {
|
||||
id: oldMotherId
|
||||
},
|
||||
data: {
|
||||
childrenIds: oldMother.childrenIds.filter((id)=>id !== memberId)
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
// 添加到新母亲的子女列表
|
||||
if (newMotherId && newMotherId !== oldMotherId) {
|
||||
const newMother = await __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$lib$2f$prisma$2e$ts__$5b$app$2d$route$5d$__$28$ecmascript$29$__["prisma"].familyMember.findUnique({
|
||||
where: {
|
||||
id: newMotherId
|
||||
}
|
||||
});
|
||||
if (newMother && !newMother.childrenIds.includes(memberId)) {
|
||||
await __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$lib$2f$prisma$2e$ts__$5b$app$2d$route$5d$__$28$ecmascript$29$__["prisma"].familyMember.update({
|
||||
where: {
|
||||
id: newMotherId
|
||||
},
|
||||
data: {
|
||||
childrenIds: [
|
||||
...newMother.childrenIds,
|
||||
memberId
|
||||
]
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
// 3. 处理子女关系变化
|
||||
if (body.childrenIds !== undefined) {
|
||||
const newChildrenIds = body.childrenIds || [];
|
||||
const oldChildrenIds = existingMember.childrenIds || [];
|
||||
// 添加新子女的父母关系
|
||||
for (const childId of newChildrenIds){
|
||||
if (!oldChildrenIds.includes(childId)) {
|
||||
const child = await __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$lib$2f$prisma$2e$ts__$5b$app$2d$route$5d$__$28$ecmascript$29$__["prisma"].familyMember.findUnique({
|
||||
where: {
|
||||
id: childId
|
||||
}
|
||||
});
|
||||
if (child) {
|
||||
// 根据当前成员的性别设置为父亲或母亲
|
||||
if (member.gender === 'MALE' && !child.fatherId) {
|
||||
await __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$lib$2f$prisma$2e$ts__$5b$app$2d$route$5d$__$28$ecmascript$29$__["prisma"].familyMember.update({
|
||||
where: {
|
||||
id: childId
|
||||
},
|
||||
data: {
|
||||
fatherId: memberId
|
||||
}
|
||||
});
|
||||
} else if (member.gender === 'FEMALE' && !child.motherId) {
|
||||
await __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$lib$2f$prisma$2e$ts__$5b$app$2d$route$5d$__$28$ecmascript$29$__["prisma"].familyMember.update({
|
||||
where: {
|
||||
id: childId
|
||||
},
|
||||
data: {
|
||||
motherId: memberId
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
// 移除旧子女的父母关系
|
||||
for (const oldChildId of oldChildrenIds){
|
||||
if (!newChildrenIds.includes(oldChildId)) {
|
||||
const child = await __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$lib$2f$prisma$2e$ts__$5b$app$2d$route$5d$__$28$ecmascript$29$__["prisma"].familyMember.findUnique({
|
||||
where: {
|
||||
id: oldChildId
|
||||
}
|
||||
});
|
||||
if (child) {
|
||||
// 根据当前成员的性别移除父亲或母亲
|
||||
if (member.gender === 'MALE' && child.fatherId === memberId) {
|
||||
await __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$lib$2f$prisma$2e$ts__$5b$app$2d$route$5d$__$28$ecmascript$29$__["prisma"].familyMember.update({
|
||||
where: {
|
||||
id: oldChildId
|
||||
},
|
||||
data: {
|
||||
fatherId: null
|
||||
}
|
||||
});
|
||||
} else if (member.gender === 'FEMALE' && child.motherId === memberId) {
|
||||
await __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$lib$2f$prisma$2e$ts__$5b$app$2d$route$5d$__$28$ecmascript$29$__["prisma"].familyMember.update({
|
||||
where: {
|
||||
id: oldChildId
|
||||
},
|
||||
data: {
|
||||
motherId: null
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
// 记录操作日志
|
||||
await __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$lib$2f$prisma$2e$ts__$5b$app$2d$route$5d$__$28$ecmascript$29$__["prisma"].activityLog.create({
|
||||
data: {
|
||||
|
||||
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because it is too large
Load Diff
File diff suppressed because one or more lines are too long
@@ -1380,9 +1380,9 @@ function StatisticsCharts({ members }) {
|
||||
// 性别分布饼图
|
||||
const genderChart = __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$echarts$40$6$2e$0$2e$0$2f$node_modules$2f$echarts$2f$lib$2f$core$2f$echarts$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__$3c$locals$3e$__["init"](genderChartRef.current);
|
||||
const genderData = {
|
||||
male: members.filter((m)=>m.gender === 'male').length,
|
||||
female: members.filter((m)=>m.gender === 'female').length,
|
||||
other: members.filter((m)=>m.gender === 'other').length
|
||||
male: members.filter((m)=>m.gender === 'MALE').length,
|
||||
female: members.filter((m)=>m.gender === 'FEMALE').length,
|
||||
other: members.filter((m)=>m.gender === 'OTHER').length
|
||||
};
|
||||
genderChart.setOption({
|
||||
title: {
|
||||
@@ -2892,6 +2892,7 @@ var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$ch
|
||||
var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$lucide$2d$react$40$0$2e$454$2e$0_react$40$19$2e$2$2e$0$2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$users$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__$3c$export__default__as__Users$3e$__ = __turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/lucide-react@0.454.0_react@19.2.0/node_modules/lucide-react/dist/esm/icons/users.js [app-ssr] (ecmascript) <export default as Users>");
|
||||
var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$lucide$2d$react$40$0$2e$454$2e$0_react$40$19$2e$2$2e$0$2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$arrow$2d$right$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__$3c$export__default__as__ArrowRight$3e$__ = __turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/lucide-react@0.454.0_react@19.2.0/node_modules/lucide-react/dist/esm/icons/arrow-right.js [app-ssr] (ecmascript) <export default as ArrowRight>");
|
||||
var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$lucide$2d$react$40$0$2e$454$2e$0_react$40$19$2e$2$2e$0$2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$clock$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__$3c$export__default__as__Clock$3e$__ = __turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/lucide-react@0.454.0_react@19.2.0/node_modules/lucide-react/dist/esm/icons/clock.js [app-ssr] (ecmascript) <export default as Clock>");
|
||||
var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$lucide$2d$react$40$0$2e$454$2e$0_react$40$19$2e$2$2e$0$2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$calculator$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__$3c$export__default__as__Calculator$3e$__ = __turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/lucide-react@0.454.0_react@19.2.0/node_modules/lucide-react/dist/esm/icons/calculator.js [app-ssr] (ecmascript) <export default as Calculator>");
|
||||
var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$context$2f$family$2d$context$2e$tsx__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/context/family-context.tsx [app-ssr] (ecmascript)");
|
||||
var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/server/route-modules/app-page/vendored/ssr/react.js [app-ssr] (ecmascript)");
|
||||
var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$components$2f$dashboard$2f$statistics$2d$charts$2e$tsx__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/components/dashboard/statistics-charts.tsx [app-ssr] (ecmascript)");
|
||||
@@ -3071,19 +3072,19 @@ function DashboardPage() {
|
||||
columnNumber: 15
|
||||
}, this),
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$client$2f$app$2d$dir$2f$link$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["default"], {
|
||||
href: "/tree",
|
||||
href: "/relationship",
|
||||
children: /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$components$2f$ui$2f$button$2e$tsx__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["Button"], {
|
||||
variant: "outline",
|
||||
className: "gap-2 bg-transparent",
|
||||
children: [
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$lucide$2d$react$40$0$2e$454$2e$0_react$40$19$2e$2$2e$0$2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$network$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__$3c$export__default__as__Network$3e$__["Network"], {
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$lucide$2d$react$40$0$2e$454$2e$0_react$40$19$2e$2$2e$0$2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$calculator$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__$3c$export__default__as__Calculator$3e$__["Calculator"], {
|
||||
className: "h-4 w-4"
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/Documents/go-new/chinese-family-tree/app/page.tsx",
|
||||
lineNumber: 172,
|
||||
columnNumber: 17
|
||||
}, this),
|
||||
"查看世系图"
|
||||
"计算器"
|
||||
]
|
||||
}, void 0, true, {
|
||||
fileName: "[project]/Documents/go-new/chinese-family-tree/app/page.tsx",
|
||||
|
||||
File diff suppressed because one or more lines are too long
File diff suppressed because it is too large
Load Diff
File diff suppressed because one or more lines are too long
File diff suppressed because it is too large
Load Diff
File diff suppressed because one or more lines are too long
@@ -1366,7 +1366,7 @@ function PersonCard({ member, isRoot, isSpouse, onSelect, isHighlighted, relatio
|
||||
]
|
||||
}, void 0, true, {
|
||||
fileName: "[project]/Documents/go-new/chinese-family-tree/components/tree/family-node.tsx",
|
||||
lineNumber: 79,
|
||||
lineNumber: 80,
|
||||
columnNumber: 7
|
||||
}, this),
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
|
||||
@@ -1377,24 +1377,24 @@ function PersonCard({ member, isRoot, isSpouse, onSelect, isHighlighted, relatio
|
||||
className: "h-full w-full object-cover"
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/Documents/go-new/chinese-family-tree/components/tree/family-node.tsx",
|
||||
lineNumber: 85,
|
||||
lineNumber: 86,
|
||||
columnNumber: 11
|
||||
}, this) : member.gender === 'female' ? /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$lucide$2d$react$40$0$2e$454$2e$0_react$40$19$2e$2$2e$0$2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$circle$2d$user$2d$round$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__$3c$export__default__as__CircleUserRound$3e$__["CircleUserRound"], {
|
||||
}, this) : member.gender === 'FEMALE' ? /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$lucide$2d$react$40$0$2e$454$2e$0_react$40$19$2e$2$2e$0$2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$circle$2d$user$2d$round$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__$3c$export__default__as__CircleUserRound$3e$__["CircleUserRound"], {
|
||||
className: "h-8 w-8 text-pink-400"
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/Documents/go-new/chinese-family-tree/components/tree/family-node.tsx",
|
||||
lineNumber: 92,
|
||||
lineNumber: 93,
|
||||
columnNumber: 13
|
||||
}, this) : /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$lucide$2d$react$40$0$2e$454$2e$0_react$40$19$2e$2$2e$0$2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$circle$2d$user$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__$3c$export__default__as__CircleUser$3e$__["CircleUser"], {
|
||||
className: "h-8 w-8 text-blue-400"
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/Documents/go-new/chinese-family-tree/components/tree/family-node.tsx",
|
||||
lineNumber: 94,
|
||||
lineNumber: 95,
|
||||
columnNumber: 13
|
||||
}, this)
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/Documents/go-new/chinese-family-tree/components/tree/family-node.tsx",
|
||||
lineNumber: 83,
|
||||
lineNumber: 84,
|
||||
columnNumber: 7
|
||||
}, this),
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
|
||||
@@ -1409,7 +1409,7 @@ function PersonCard({ member, isRoot, isSpouse, onSelect, isHighlighted, relatio
|
||||
]
|
||||
}, void 0, true, {
|
||||
fileName: "[project]/Documents/go-new/chinese-family-tree/components/tree/family-node.tsx",
|
||||
lineNumber: 100,
|
||||
lineNumber: 101,
|
||||
columnNumber: 9
|
||||
}, this),
|
||||
member.courtesyName && /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
|
||||
@@ -1420,7 +1420,7 @@ function PersonCard({ member, isRoot, isSpouse, onSelect, isHighlighted, relatio
|
||||
]
|
||||
}, void 0, true, {
|
||||
fileName: "[project]/Documents/go-new/chinese-family-tree/components/tree/family-node.tsx",
|
||||
lineNumber: 102,
|
||||
lineNumber: 103,
|
||||
columnNumber: 11
|
||||
}, this),
|
||||
lifeSpan && /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
|
||||
@@ -1428,7 +1428,7 @@ function PersonCard({ member, isRoot, isSpouse, onSelect, isHighlighted, relatio
|
||||
children: lifeSpan
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/Documents/go-new/chinese-family-tree/components/tree/family-node.tsx",
|
||||
lineNumber: 105,
|
||||
lineNumber: 106,
|
||||
columnNumber: 11
|
||||
}, this),
|
||||
ageText && /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
|
||||
@@ -1436,7 +1436,7 @@ function PersonCard({ member, isRoot, isSpouse, onSelect, isHighlighted, relatio
|
||||
children: ageText
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/Documents/go-new/chinese-family-tree/components/tree/family-node.tsx",
|
||||
lineNumber: 110,
|
||||
lineNumber: 111,
|
||||
columnNumber: 11
|
||||
}, this),
|
||||
member.phone && /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
|
||||
@@ -1447,31 +1447,35 @@ function PersonCard({ member, isRoot, isSpouse, onSelect, isHighlighted, relatio
|
||||
]
|
||||
}, void 0, true, {
|
||||
fileName: "[project]/Documents/go-new/chinese-family-tree/components/tree/family-node.tsx",
|
||||
lineNumber: 115,
|
||||
lineNumber: 116,
|
||||
columnNumber: 11
|
||||
}, this)
|
||||
]
|
||||
}, void 0, true, {
|
||||
fileName: "[project]/Documents/go-new/chinese-family-tree/components/tree/family-node.tsx",
|
||||
lineNumber: 99,
|
||||
lineNumber: 100,
|
||||
columnNumber: 7
|
||||
}, this),
|
||||
member.deathDate && /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
|
||||
className: "absolute -top-1 -right-1 h-2 w-2 rounded-full bg-neutral-400 ring-2 ring-background"
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/Documents/go-new/chinese-family-tree/components/tree/family-node.tsx",
|
||||
lineNumber: 122,
|
||||
lineNumber: 123,
|
||||
columnNumber: 9
|
||||
}, this)
|
||||
]
|
||||
}, void 0, true, {
|
||||
fileName: "[project]/Documents/go-new/chinese-family-tree/components/tree/family-node.tsx",
|
||||
lineNumber: 63,
|
||||
lineNumber: 64,
|
||||
columnNumber: 5
|
||||
}, this);
|
||||
}
|
||||
function FamilyNode({ member, spouse, isRoot, onSelect, isHighlighted, relationMode, isSelected }) {
|
||||
if (!spouse) {
|
||||
function FamilyNode({ member, spouse, spouses, isRoot, onSelect, isHighlighted, relationMode, isSelected }) {
|
||||
// 优先使用 spouses 数组,如果没有则使用单个 spouse
|
||||
const spouseList = spouses || (spouse ? [
|
||||
spouse
|
||||
] : []);
|
||||
if (spouseList.length === 0) {
|
||||
return /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])(PersonCard, {
|
||||
member: member,
|
||||
isRoot: isRoot,
|
||||
@@ -1481,11 +1485,11 @@ function FamilyNode({ member, spouse, isRoot, onSelect, isHighlighted, relationM
|
||||
isSelected: isSelected
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/Documents/go-new/chinese-family-tree/components/tree/family-node.tsx",
|
||||
lineNumber: 130,
|
||||
lineNumber: 134,
|
||||
columnNumber: 12
|
||||
}, this);
|
||||
}
|
||||
// 有配偶时,并排显示
|
||||
// 有配偶时,并排显示所有配偶
|
||||
return /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
|
||||
className: "flex items-center gap-2",
|
||||
children: [
|
||||
@@ -1498,30 +1502,39 @@ function FamilyNode({ member, spouse, isRoot, onSelect, isHighlighted, relationM
|
||||
isSelected: isSelected
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/Documents/go-new/chinese-family-tree/components/tree/family-node.tsx",
|
||||
lineNumber: 136,
|
||||
lineNumber: 140,
|
||||
columnNumber: 7
|
||||
}, this),
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$lucide$2d$react$40$0$2e$454$2e$0_react$40$19$2e$2$2e$0$2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$heart$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__$3c$export__default__as__Heart$3e$__["Heart"], {
|
||||
className: "h-4 w-4 text-red-400 flex-shrink-0"
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/Documents/go-new/chinese-family-tree/components/tree/family-node.tsx",
|
||||
lineNumber: 137,
|
||||
columnNumber: 7
|
||||
}, this),
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])(PersonCard, {
|
||||
member: spouse,
|
||||
isSpouse: true,
|
||||
onSelect: onSelect,
|
||||
relationMode: relationMode
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/Documents/go-new/chinese-family-tree/components/tree/family-node.tsx",
|
||||
lineNumber: 138,
|
||||
columnNumber: 7
|
||||
}, this)
|
||||
spouseList.map((spouseMember, index)=>/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
|
||||
className: "flex items-center gap-2",
|
||||
children: [
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$lucide$2d$react$40$0$2e$454$2e$0_react$40$19$2e$2$2e$0$2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$heart$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__$3c$export__default__as__Heart$3e$__["Heart"], {
|
||||
className: "h-4 w-4 text-red-400 flex-shrink-0"
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/Documents/go-new/chinese-family-tree/components/tree/family-node.tsx",
|
||||
lineNumber: 143,
|
||||
columnNumber: 11
|
||||
}, this),
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])(PersonCard, {
|
||||
member: spouseMember,
|
||||
isSpouse: true,
|
||||
onSelect: onSelect,
|
||||
relationMode: relationMode
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/Documents/go-new/chinese-family-tree/components/tree/family-node.tsx",
|
||||
lineNumber: 144,
|
||||
columnNumber: 11
|
||||
}, this)
|
||||
]
|
||||
}, spouseMember.id, true, {
|
||||
fileName: "[project]/Documents/go-new/chinese-family-tree/components/tree/family-node.tsx",
|
||||
lineNumber: 142,
|
||||
columnNumber: 9
|
||||
}, this))
|
||||
]
|
||||
}, void 0, true, {
|
||||
fileName: "[project]/Documents/go-new/chinese-family-tree/components/tree/family-node.tsx",
|
||||
lineNumber: 135,
|
||||
lineNumber: 139,
|
||||
columnNumber: 5
|
||||
}, this);
|
||||
}
|
||||
@@ -1666,8 +1679,8 @@ function TreeLayout({ rootId, onSelectMember, relationMode = false, selectedMemb
|
||||
const member = getMember(memberId);
|
||||
if (!member) return null;
|
||||
const hasChildren = member.childrenIds && member.childrenIds.length > 0;
|
||||
// 获取配偶(取第一个配偶)
|
||||
const spouse = member.spouseIds && member.spouseIds.length > 0 ? getMember(member.spouseIds[0]) : undefined;
|
||||
// 获取所有配偶
|
||||
const spouses = member.spouseIds && member.spouseIds.length > 0 ? member.spouseIds.map((id)=>getMember(id)).filter(Boolean) : [];
|
||||
return /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
|
||||
className: "flex flex-col items-center",
|
||||
children: [
|
||||
@@ -1682,7 +1695,7 @@ function TreeLayout({ rootId, onSelectMember, relationMode = false, selectedMemb
|
||||
className: "relative z-10",
|
||||
children: /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$components$2f$tree$2f$family$2d$node$2e$tsx__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["FamilyNode"], {
|
||||
member: member,
|
||||
spouse: spouse,
|
||||
spouses: spouses,
|
||||
onSelect: handleNodeClick,
|
||||
isRoot: isRoot,
|
||||
isHighlighted: member.id === highlightedMemberId,
|
||||
@@ -1704,13 +1717,30 @@ function TreeLayout({ rootId, onSelectMember, relationMode = false, selectedMemb
|
||||
marginTop: `${VERTICAL_GAP}px`,
|
||||
gap: `${HORIZONTAL_GAP}px`
|
||||
},
|
||||
children: member.childrenIds.map((childId)=>/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])(TreeNode, {
|
||||
memberId: childId
|
||||
}, childId, false, {
|
||||
fileName: "[project]/Documents/go-new/chinese-family-tree/components/tree/tree-layout.tsx",
|
||||
lineNumber: 181,
|
||||
columnNumber: 15
|
||||
}, this))
|
||||
children: (()=>{
|
||||
// 对子节点进行排序:始祖排最左边,其他按出生日期排序
|
||||
const sortedChildren = [
|
||||
...member.childrenIds
|
||||
].sort((aId, bId)=>{
|
||||
const a = getMember(aId);
|
||||
const b = getMember(bId);
|
||||
if (!a || !b) return 0;
|
||||
// 始祖永远排最左边
|
||||
const aIsFounder = a.tags?.includes('始祖') || a.generation === 1;
|
||||
const bIsFounder = b.tags?.includes('始祖') || b.generation === 1;
|
||||
if (aIsFounder && !bIsFounder) return -1;
|
||||
if (!aIsFounder && bIsFounder) return 1;
|
||||
// 其他按出生日期排序
|
||||
return (a.birthDate || "").localeCompare(b.birthDate || "");
|
||||
});
|
||||
return sortedChildren.map((childId)=>/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])(TreeNode, {
|
||||
memberId: childId
|
||||
}, childId, false, {
|
||||
fileName: "[project]/Documents/go-new/chinese-family-tree/components/tree/tree-layout.tsx",
|
||||
lineNumber: 198,
|
||||
columnNumber: 17
|
||||
}, this));
|
||||
})()
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/Documents/go-new/chinese-family-tree/components/tree/tree-layout.tsx",
|
||||
lineNumber: 173,
|
||||
@@ -1747,24 +1777,24 @@ function TreeLayout({ rootId, onSelectMember, relationMode = false, selectedMemb
|
||||
// 跳过无效的连线(宽度或高度为0)
|
||||
if (width <= 0 || height <= 0) return null;
|
||||
return /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
|
||||
className: "absolute bg-foreground/25",
|
||||
className: "absolute bg-black",
|
||||
style: {
|
||||
left: `${left}px`,
|
||||
top: `${top}px`,
|
||||
width: `${width}px`,
|
||||
height: `${height}px`,
|
||||
transform: isHorizontal ? 'scaleY(0.3)' : 'scaleX(0.3)',
|
||||
transform: isHorizontal ? 'scaleY(0.5)' : 'scaleX(0.5)',
|
||||
transformOrigin: 'top left'
|
||||
}
|
||||
}, index, false, {
|
||||
fileName: "[project]/Documents/go-new/chinese-family-tree/components/tree/tree-layout.tsx",
|
||||
lineNumber: 206,
|
||||
lineNumber: 224,
|
||||
columnNumber: 15
|
||||
}, this);
|
||||
})
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/Documents/go-new/chinese-family-tree/components/tree/tree-layout.tsx",
|
||||
lineNumber: 193,
|
||||
lineNumber: 211,
|
||||
columnNumber: 9
|
||||
}, this),
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
|
||||
@@ -1777,23 +1807,23 @@ function TreeLayout({ rootId, onSelectMember, relationMode = false, selectedMemb
|
||||
isRoot: true
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/Documents/go-new/chinese-family-tree/components/tree/tree-layout.tsx",
|
||||
lineNumber: 224,
|
||||
lineNumber: 242,
|
||||
columnNumber: 11
|
||||
}, this)
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/Documents/go-new/chinese-family-tree/components/tree/tree-layout.tsx",
|
||||
lineNumber: 223,
|
||||
lineNumber: 241,
|
||||
columnNumber: 9
|
||||
}, this)
|
||||
]
|
||||
}, void 0, true, {
|
||||
fileName: "[project]/Documents/go-new/chinese-family-tree/components/tree/tree-layout.tsx",
|
||||
lineNumber: 191,
|
||||
lineNumber: 209,
|
||||
columnNumber: 7
|
||||
}, this)
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/Documents/go-new/chinese-family-tree/components/tree/tree-layout.tsx",
|
||||
lineNumber: 190,
|
||||
lineNumber: 208,
|
||||
columnNumber: 5
|
||||
}, this);
|
||||
}
|
||||
@@ -1873,11 +1903,8 @@ const D3OrgChartFlowComponent = /*#__PURE__*/ (0, __TURBOPACK__imported__module_
|
||||
visited.add(currentId);
|
||||
const member = members[currentId];
|
||||
if (!member) continue;
|
||||
// 获取配偶信息,确保配偶存在于members中
|
||||
let spouse = null;
|
||||
if (member.spouseIds?.[0] && members[member.spouseIds[0]]) {
|
||||
spouse = members[member.spouseIds[0]];
|
||||
}
|
||||
// 获取所有配偶信息,确保配偶存在于members中
|
||||
const spouses = member.spouseIds?.map((id)=>members[id]).filter(Boolean) || [];
|
||||
// 确定父节点ID - 只有根节点的parentId为null
|
||||
let parentId = null;
|
||||
if (currentId !== rootId) {
|
||||
@@ -1911,8 +1938,8 @@ const D3OrgChartFlowComponent = /*#__PURE__*/ (0, __TURBOPACK__imported__module_
|
||||
birthPlace: member.birthPlace || '',
|
||||
gender: member.gender === 'MALE' ? '男' : '女',
|
||||
avatarImageId: member.avatarImageId,
|
||||
spouseName: spouse?.fullName || '',
|
||||
spouseId: spouse?.id || null,
|
||||
spouseName: spouses.length > 0 ? spouses.map((s)=>s.fullName).join(', ') : '',
|
||||
spouseId: spouses.length > 0 ? spouses[0].id : null,
|
||||
hasChildren: Object.values(members).some((m)=>m.fatherId === member.id || m.motherId === member.id),
|
||||
ageText: ageText
|
||||
});
|
||||
@@ -2181,12 +2208,12 @@ const D3OrgChartFlowComponent = /*#__PURE__*/ (0, __TURBOPACK__imported__module_
|
||||
}
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/Documents/go-new/chinese-family-tree/components/tree/d3-org-chart-flow.tsx",
|
||||
lineNumber: 446,
|
||||
lineNumber: 445,
|
||||
columnNumber: 7
|
||||
}, ("TURBOPACK compile-time value", void 0))
|
||||
}, `d3-chart-${rootId}`, false, {
|
||||
fileName: "[project]/Documents/go-new/chinese-family-tree/components/tree/d3-org-chart-flow.tsx",
|
||||
lineNumber: 444,
|
||||
lineNumber: 443,
|
||||
columnNumber: 5
|
||||
}, ("TURBOPACK compile-time value", void 0));
|
||||
});
|
||||
|
||||
File diff suppressed because one or more lines are too long
@@ -0,0 +1,62 @@
|
||||
module.exports = [
|
||||
"[externals]/next/dist/shared/lib/no-fallback-error.external.js [external] (next/dist/shared/lib/no-fallback-error.external.js, cjs)", ((__turbopack_context__, module, exports) => {
|
||||
|
||||
const mod = __turbopack_context__.x("next/dist/shared/lib/no-fallback-error.external.js", () => require("next/dist/shared/lib/no-fallback-error.external.js"));
|
||||
|
||||
module.exports = mod;
|
||||
}),
|
||||
"[project]/Documents/go-new/chinese-family-tree/app/layout.tsx [app-rsc] (ecmascript, Next.js Server Component)", ((__turbopack_context__) => {
|
||||
|
||||
__turbopack_context__.n(__turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/app/layout.tsx [app-rsc] (ecmascript)"));
|
||||
}),
|
||||
"[project]/Documents/go-new/chinese-family-tree/app/loading.tsx [app-rsc] (ecmascript, Next.js Server Component)", ((__turbopack_context__) => {
|
||||
|
||||
__turbopack_context__.n(__turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/app/loading.tsx [app-rsc] (ecmascript)"));
|
||||
}),
|
||||
"[project]/Documents/go-new/chinese-family-tree/app/members/loading.tsx [app-rsc] (ecmascript, Next.js Server Component)", ((__turbopack_context__) => {
|
||||
|
||||
__turbopack_context__.n(__turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/app/members/loading.tsx [app-rsc] (ecmascript)"));
|
||||
}),
|
||||
"[project]/Documents/go-new/chinese-family-tree/app/members/new/page.tsx [app-rsc] (client reference proxy) <module evaluation>", ((__turbopack_context__) => {
|
||||
"use strict";
|
||||
|
||||
// This file is generated by next-core EcmascriptClientReferenceModule.
|
||||
__turbopack_context__.s([
|
||||
"default",
|
||||
()=>__TURBOPACK__default__export__
|
||||
]);
|
||||
var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$rsc$2f$react$2d$server$2d$dom$2d$turbopack$2d$server$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/server/route-modules/app-page/vendored/rsc/react-server-dom-turbopack-server.js [app-rsc] (ecmascript)");
|
||||
;
|
||||
const __TURBOPACK__default__export__ = (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$rsc$2f$react$2d$server$2d$dom$2d$turbopack$2d$server$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["registerClientReference"])(function() {
|
||||
throw new Error("Attempted to call the default export of [project]/Documents/go-new/chinese-family-tree/app/members/new/page.tsx <module evaluation> from the server, but it's on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.");
|
||||
}, "[project]/Documents/go-new/chinese-family-tree/app/members/new/page.tsx <module evaluation>", "default");
|
||||
}),
|
||||
"[project]/Documents/go-new/chinese-family-tree/app/members/new/page.tsx [app-rsc] (client reference proxy)", ((__turbopack_context__) => {
|
||||
"use strict";
|
||||
|
||||
// This file is generated by next-core EcmascriptClientReferenceModule.
|
||||
__turbopack_context__.s([
|
||||
"default",
|
||||
()=>__TURBOPACK__default__export__
|
||||
]);
|
||||
var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$rsc$2f$react$2d$server$2d$dom$2d$turbopack$2d$server$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/server/route-modules/app-page/vendored/rsc/react-server-dom-turbopack-server.js [app-rsc] (ecmascript)");
|
||||
;
|
||||
const __TURBOPACK__default__export__ = (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$rsc$2f$react$2d$server$2d$dom$2d$turbopack$2d$server$2e$js__$5b$app$2d$rsc$5d$__$28$ecmascript$29$__["registerClientReference"])(function() {
|
||||
throw new Error("Attempted to call the default export of [project]/Documents/go-new/chinese-family-tree/app/members/new/page.tsx from the server, but it's on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.");
|
||||
}, "[project]/Documents/go-new/chinese-family-tree/app/members/new/page.tsx", "default");
|
||||
}),
|
||||
"[project]/Documents/go-new/chinese-family-tree/app/members/new/page.tsx [app-rsc] (ecmascript)", ((__turbopack_context__) => {
|
||||
"use strict";
|
||||
|
||||
var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$app$2f$members$2f$new$2f$page$2e$tsx__$5b$app$2d$rsc$5d$__$28$client__reference__proxy$29$__$3c$module__evaluation$3e$__ = __turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/app/members/new/page.tsx [app-rsc] (client reference proxy) <module evaluation>");
|
||||
var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$app$2f$members$2f$new$2f$page$2e$tsx__$5b$app$2d$rsc$5d$__$28$client__reference__proxy$29$__ = __turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/app/members/new/page.tsx [app-rsc] (client reference proxy)");
|
||||
;
|
||||
__turbopack_context__.n(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$app$2f$members$2f$new$2f$page$2e$tsx__$5b$app$2d$rsc$5d$__$28$client__reference__proxy$29$__);
|
||||
}),
|
||||
"[project]/Documents/go-new/chinese-family-tree/app/members/new/page.tsx [app-rsc] (ecmascript, Next.js Server Component)", ((__turbopack_context__) => {
|
||||
|
||||
__turbopack_context__.n(__turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/app/members/new/page.tsx [app-rsc] (ecmascript)"));
|
||||
}),
|
||||
];
|
||||
|
||||
//# sourceMappingURL=%5Broot-of-the-server%5D__ebcf4d5f._.js.map
|
||||
@@ -0,0 +1,8 @@
|
||||
{
|
||||
"version": 3,
|
||||
"sources": [],
|
||||
"sections": [
|
||||
{"offset": {"line": 22, "column": 0}, "map": {"version":3,"sources":["file:///Users/freedak/Documents/go-new/chinese-family-tree/app/members/new/page.tsx/__nextjs-internal-proxy.mjs"],"sourcesContent":["// This file is generated by next-core EcmascriptClientReferenceModule.\nimport { registerClientReference } from \"react-server-dom-turbopack/server\";\nexport default registerClientReference(\n function() { throw new Error(\"Attempted to call the default export of [project]/Documents/go-new/chinese-family-tree/app/members/new/page.tsx <module evaluation> from the server, but it's on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.\"); },\n \"[project]/Documents/go-new/chinese-family-tree/app/members/new/page.tsx <module evaluation>\",\n \"default\",\n);\n"],"names":[],"mappings":"AAAA,uEAAuE;;;;;AACvE;;uCACe,IAAA,8bAAuB,EAClC;IAAa,MAAM,IAAI,MAAM;AAAiU,GAC9V,+FACA","ignoreList":[0]}},
|
||||
{"offset": {"line": 36, "column": 0}, "map": {"version":3,"sources":["file:///Users/freedak/Documents/go-new/chinese-family-tree/app/members/new/page.tsx/__nextjs-internal-proxy.mjs"],"sourcesContent":["// This file is generated by next-core EcmascriptClientReferenceModule.\nimport { registerClientReference } from \"react-server-dom-turbopack/server\";\nexport default registerClientReference(\n function() { throw new Error(\"Attempted to call the default export of [project]/Documents/go-new/chinese-family-tree/app/members/new/page.tsx from the server, but it's on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.\"); },\n \"[project]/Documents/go-new/chinese-family-tree/app/members/new/page.tsx\",\n \"default\",\n);\n"],"names":[],"mappings":"AAAA,uEAAuE;;;;;AACvE;;uCACe,IAAA,8bAAuB,EAClC;IAAa,MAAM,IAAI,MAAM;AAA6S,GAC1U,2EACA","ignoreList":[0]}},
|
||||
{"offset": {"line": 50, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":""}}]
|
||||
}
|
||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because one or more lines are too long
File diff suppressed because it is too large
Load Diff
File diff suppressed because one or more lines are too long
File diff suppressed because it is too large
Load Diff
File diff suppressed because one or more lines are too long
+7
@@ -0,0 +1,7 @@
|
||||
module.exports = [
|
||||
"[project]/Documents/go-new/chinese-family-tree/.next-internal/server/app/members/new/page/actions.js [app-rsc] (server actions loader, ecmascript)", ((__turbopack_context__, module, exports) => {
|
||||
|
||||
}),
|
||||
];
|
||||
|
||||
//# sourceMappingURL=fb354_chinese-family-tree__next-internal_server_app_members_new_page_actions_269eb31e.js.map
|
||||
+6
@@ -0,0 +1,6 @@
|
||||
{
|
||||
"version": 3,
|
||||
"sources": [],
|
||||
"sections": [
|
||||
{"offset": {"line": 3, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":""}}]
|
||||
}
|
||||
@@ -1 +1 @@
|
||||
self.__NEXT_FONT_MANIFEST="{\n \"app\": {\n \"[project]/Documents/go-new/chinese-family-tree/app/_not-found/page\": [\n \"static/media/caa3a2e1cccd8315-s.p.853070df.woff2\",\n \"static/media/797e433ab948586e-s.p.dbea232f.woff2\"\n ],\n \"[project]/Documents/go-new/chinese-family-tree/app/auth/signin/page\": [\n \"static/media/caa3a2e1cccd8315-s.p.853070df.woff2\",\n \"static/media/797e433ab948586e-s.p.dbea232f.woff2\"\n ],\n \"[project]/Documents/go-new/chinese-family-tree/app/members/[id]/page\": [\n \"static/media/caa3a2e1cccd8315-s.p.853070df.woff2\",\n \"static/media/797e433ab948586e-s.p.dbea232f.woff2\"\n ],\n \"[project]/Documents/go-new/chinese-family-tree/app/members/page\": [\n \"static/media/caa3a2e1cccd8315-s.p.853070df.woff2\",\n \"static/media/797e433ab948586e-s.p.dbea232f.woff2\"\n ],\n \"[project]/Documents/go-new/chinese-family-tree/app/page\": [\n \"static/media/caa3a2e1cccd8315-s.p.853070df.woff2\",\n \"static/media/797e433ab948586e-s.p.dbea232f.woff2\"\n ],\n \"[project]/Documents/go-new/chinese-family-tree/app/relationship-test/page\": [\n \"static/media/caa3a2e1cccd8315-s.p.853070df.woff2\",\n \"static/media/797e433ab948586e-s.p.dbea232f.woff2\"\n ],\n \"[project]/Documents/go-new/chinese-family-tree/app/relationship/page\": [\n \"static/media/caa3a2e1cccd8315-s.p.853070df.woff2\",\n \"static/media/797e433ab948586e-s.p.dbea232f.woff2\"\n ],\n \"[project]/Documents/go-new/chinese-family-tree/app/settings/page\": [\n \"static/media/caa3a2e1cccd8315-s.p.853070df.woff2\",\n \"static/media/797e433ab948586e-s.p.dbea232f.woff2\"\n ],\n \"[project]/Documents/go-new/chinese-family-tree/app/timeline/page\": [\n \"static/media/caa3a2e1cccd8315-s.p.853070df.woff2\",\n \"static/media/797e433ab948586e-s.p.dbea232f.woff2\"\n ],\n \"[project]/Documents/go-new/chinese-family-tree/app/tree/page\": [\n \"static/media/caa3a2e1cccd8315-s.p.853070df.woff2\",\n \"static/media/797e433ab948586e-s.p.dbea232f.woff2\"\n ]\n },\n \"appUsingSizeAdjust\": true,\n \"pages\": {},\n \"pagesUsingSizeAdjust\": false\n}"
|
||||
self.__NEXT_FONT_MANIFEST="{\n \"app\": {\n \"[project]/Documents/go-new/chinese-family-tree/app/_not-found/page\": [\n \"static/media/caa3a2e1cccd8315-s.p.853070df.woff2\",\n \"static/media/797e433ab948586e-s.p.dbea232f.woff2\"\n ],\n \"[project]/Documents/go-new/chinese-family-tree/app/auth/signin/page\": [\n \"static/media/caa3a2e1cccd8315-s.p.853070df.woff2\",\n \"static/media/797e433ab948586e-s.p.dbea232f.woff2\"\n ],\n \"[project]/Documents/go-new/chinese-family-tree/app/members/[id]/page\": [\n \"static/media/caa3a2e1cccd8315-s.p.853070df.woff2\",\n \"static/media/797e433ab948586e-s.p.dbea232f.woff2\"\n ],\n \"[project]/Documents/go-new/chinese-family-tree/app/members/new/page\": [\n \"static/media/caa3a2e1cccd8315-s.p.853070df.woff2\",\n \"static/media/797e433ab948586e-s.p.dbea232f.woff2\"\n ],\n \"[project]/Documents/go-new/chinese-family-tree/app/members/page\": [\n \"static/media/caa3a2e1cccd8315-s.p.853070df.woff2\",\n \"static/media/797e433ab948586e-s.p.dbea232f.woff2\"\n ],\n \"[project]/Documents/go-new/chinese-family-tree/app/page\": [\n \"static/media/caa3a2e1cccd8315-s.p.853070df.woff2\",\n \"static/media/797e433ab948586e-s.p.dbea232f.woff2\"\n ],\n \"[project]/Documents/go-new/chinese-family-tree/app/relationship-test/page\": [\n \"static/media/caa3a2e1cccd8315-s.p.853070df.woff2\",\n \"static/media/797e433ab948586e-s.p.dbea232f.woff2\"\n ],\n \"[project]/Documents/go-new/chinese-family-tree/app/relationship/page\": [\n \"static/media/caa3a2e1cccd8315-s.p.853070df.woff2\",\n \"static/media/797e433ab948586e-s.p.dbea232f.woff2\"\n ],\n \"[project]/Documents/go-new/chinese-family-tree/app/settings/page\": [\n \"static/media/caa3a2e1cccd8315-s.p.853070df.woff2\",\n \"static/media/797e433ab948586e-s.p.dbea232f.woff2\"\n ],\n \"[project]/Documents/go-new/chinese-family-tree/app/timeline/page\": [\n \"static/media/caa3a2e1cccd8315-s.p.853070df.woff2\",\n \"static/media/797e433ab948586e-s.p.dbea232f.woff2\"\n ],\n \"[project]/Documents/go-new/chinese-family-tree/app/tree/page\": [\n \"static/media/caa3a2e1cccd8315-s.p.853070df.woff2\",\n \"static/media/797e433ab948586e-s.p.dbea232f.woff2\"\n ]\n },\n \"appUsingSizeAdjust\": true,\n \"pages\": {},\n \"pagesUsingSizeAdjust\": false\n}"
|
||||
@@ -12,6 +12,10 @@
|
||||
"static/media/caa3a2e1cccd8315-s.p.853070df.woff2",
|
||||
"static/media/797e433ab948586e-s.p.dbea232f.woff2"
|
||||
],
|
||||
"[project]/Documents/go-new/chinese-family-tree/app/members/new/page": [
|
||||
"static/media/caa3a2e1cccd8315-s.p.853070df.woff2",
|
||||
"static/media/797e433ab948586e-s.p.dbea232f.woff2"
|
||||
],
|
||||
"[project]/Documents/go-new/chinese-family-tree/app/members/page": [
|
||||
"static/media/caa3a2e1cccd8315-s.p.853070df.woff2",
|
||||
"static/media/797e433ab948586e-s.p.dbea232f.woff2"
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because one or more lines are too long
@@ -1473,7 +1473,7 @@ function PersonCard({ member, isRoot, isSpouse, onSelect, isHighlighted, relatio
|
||||
]
|
||||
}, void 0, true, {
|
||||
fileName: "[project]/Documents/go-new/chinese-family-tree/components/tree/family-node.tsx",
|
||||
lineNumber: 79,
|
||||
lineNumber: 80,
|
||||
columnNumber: 7
|
||||
}, this),
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
|
||||
@@ -1484,24 +1484,24 @@ function PersonCard({ member, isRoot, isSpouse, onSelect, isHighlighted, relatio
|
||||
className: "h-full w-full object-cover"
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/Documents/go-new/chinese-family-tree/components/tree/family-node.tsx",
|
||||
lineNumber: 85,
|
||||
lineNumber: 86,
|
||||
columnNumber: 11
|
||||
}, this) : member.gender === 'female' ? /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$lucide$2d$react$40$0$2e$454$2e$0_react$40$19$2e$2$2e$0$2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$circle$2d$user$2d$round$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$export__default__as__CircleUserRound$3e$__["CircleUserRound"], {
|
||||
}, this) : member.gender === 'FEMALE' ? /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$lucide$2d$react$40$0$2e$454$2e$0_react$40$19$2e$2$2e$0$2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$circle$2d$user$2d$round$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$export__default__as__CircleUserRound$3e$__["CircleUserRound"], {
|
||||
className: "h-8 w-8 text-pink-400"
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/Documents/go-new/chinese-family-tree/components/tree/family-node.tsx",
|
||||
lineNumber: 92,
|
||||
lineNumber: 93,
|
||||
columnNumber: 13
|
||||
}, this) : /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$lucide$2d$react$40$0$2e$454$2e$0_react$40$19$2e$2$2e$0$2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$circle$2d$user$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$export__default__as__CircleUser$3e$__["CircleUser"], {
|
||||
className: "h-8 w-8 text-blue-400"
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/Documents/go-new/chinese-family-tree/components/tree/family-node.tsx",
|
||||
lineNumber: 94,
|
||||
lineNumber: 95,
|
||||
columnNumber: 13
|
||||
}, this)
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/Documents/go-new/chinese-family-tree/components/tree/family-node.tsx",
|
||||
lineNumber: 83,
|
||||
lineNumber: 84,
|
||||
columnNumber: 7
|
||||
}, this),
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
|
||||
@@ -1516,7 +1516,7 @@ function PersonCard({ member, isRoot, isSpouse, onSelect, isHighlighted, relatio
|
||||
]
|
||||
}, void 0, true, {
|
||||
fileName: "[project]/Documents/go-new/chinese-family-tree/components/tree/family-node.tsx",
|
||||
lineNumber: 100,
|
||||
lineNumber: 101,
|
||||
columnNumber: 9
|
||||
}, this),
|
||||
member.courtesyName && /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
|
||||
@@ -1527,7 +1527,7 @@ function PersonCard({ member, isRoot, isSpouse, onSelect, isHighlighted, relatio
|
||||
]
|
||||
}, void 0, true, {
|
||||
fileName: "[project]/Documents/go-new/chinese-family-tree/components/tree/family-node.tsx",
|
||||
lineNumber: 102,
|
||||
lineNumber: 103,
|
||||
columnNumber: 11
|
||||
}, this),
|
||||
lifeSpan && /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
|
||||
@@ -1535,7 +1535,7 @@ function PersonCard({ member, isRoot, isSpouse, onSelect, isHighlighted, relatio
|
||||
children: lifeSpan
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/Documents/go-new/chinese-family-tree/components/tree/family-node.tsx",
|
||||
lineNumber: 105,
|
||||
lineNumber: 106,
|
||||
columnNumber: 11
|
||||
}, this),
|
||||
ageText && /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
|
||||
@@ -1543,7 +1543,7 @@ function PersonCard({ member, isRoot, isSpouse, onSelect, isHighlighted, relatio
|
||||
children: ageText
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/Documents/go-new/chinese-family-tree/components/tree/family-node.tsx",
|
||||
lineNumber: 110,
|
||||
lineNumber: 111,
|
||||
columnNumber: 11
|
||||
}, this),
|
||||
member.phone && /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
|
||||
@@ -1554,26 +1554,26 @@ function PersonCard({ member, isRoot, isSpouse, onSelect, isHighlighted, relatio
|
||||
]
|
||||
}, void 0, true, {
|
||||
fileName: "[project]/Documents/go-new/chinese-family-tree/components/tree/family-node.tsx",
|
||||
lineNumber: 115,
|
||||
lineNumber: 116,
|
||||
columnNumber: 11
|
||||
}, this)
|
||||
]
|
||||
}, void 0, true, {
|
||||
fileName: "[project]/Documents/go-new/chinese-family-tree/components/tree/family-node.tsx",
|
||||
lineNumber: 99,
|
||||
lineNumber: 100,
|
||||
columnNumber: 7
|
||||
}, this),
|
||||
member.deathDate && /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
|
||||
className: "absolute -top-1 -right-1 h-2 w-2 rounded-full bg-neutral-400 ring-2 ring-background"
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/Documents/go-new/chinese-family-tree/components/tree/family-node.tsx",
|
||||
lineNumber: 122,
|
||||
lineNumber: 123,
|
||||
columnNumber: 9
|
||||
}, this)
|
||||
]
|
||||
}, void 0, true, {
|
||||
fileName: "[project]/Documents/go-new/chinese-family-tree/components/tree/family-node.tsx",
|
||||
lineNumber: 63,
|
||||
lineNumber: 64,
|
||||
columnNumber: 5
|
||||
}, this);
|
||||
}
|
||||
@@ -1583,8 +1583,12 @@ _s(PersonCard, "mCFltYeNkLzEOmjvYZZEXyelwbw=", false, function() {
|
||||
];
|
||||
});
|
||||
_c = PersonCard;
|
||||
function FamilyNode({ member, spouse, isRoot, onSelect, isHighlighted, relationMode, isSelected }) {
|
||||
if (!spouse) {
|
||||
function FamilyNode({ member, spouse, spouses, isRoot, onSelect, isHighlighted, relationMode, isSelected }) {
|
||||
// 优先使用 spouses 数组,如果没有则使用单个 spouse
|
||||
const spouseList = spouses || (spouse ? [
|
||||
spouse
|
||||
] : []);
|
||||
if (spouseList.length === 0) {
|
||||
return /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])(PersonCard, {
|
||||
member: member,
|
||||
isRoot: isRoot,
|
||||
@@ -1594,11 +1598,11 @@ function FamilyNode({ member, spouse, isRoot, onSelect, isHighlighted, relationM
|
||||
isSelected: isSelected
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/Documents/go-new/chinese-family-tree/components/tree/family-node.tsx",
|
||||
lineNumber: 130,
|
||||
lineNumber: 134,
|
||||
columnNumber: 12
|
||||
}, this);
|
||||
}
|
||||
// 有配偶时,并排显示
|
||||
// 有配偶时,并排显示所有配偶
|
||||
return /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
|
||||
className: "flex items-center gap-2",
|
||||
children: [
|
||||
@@ -1611,30 +1615,39 @@ function FamilyNode({ member, spouse, isRoot, onSelect, isHighlighted, relationM
|
||||
isSelected: isSelected
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/Documents/go-new/chinese-family-tree/components/tree/family-node.tsx",
|
||||
lineNumber: 136,
|
||||
lineNumber: 140,
|
||||
columnNumber: 7
|
||||
}, this),
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$lucide$2d$react$40$0$2e$454$2e$0_react$40$19$2e$2$2e$0$2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$heart$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$export__default__as__Heart$3e$__["Heart"], {
|
||||
className: "h-4 w-4 text-red-400 flex-shrink-0"
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/Documents/go-new/chinese-family-tree/components/tree/family-node.tsx",
|
||||
lineNumber: 137,
|
||||
columnNumber: 7
|
||||
}, this),
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])(PersonCard, {
|
||||
member: spouse,
|
||||
isSpouse: true,
|
||||
onSelect: onSelect,
|
||||
relationMode: relationMode
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/Documents/go-new/chinese-family-tree/components/tree/family-node.tsx",
|
||||
lineNumber: 138,
|
||||
columnNumber: 7
|
||||
}, this)
|
||||
spouseList.map((spouseMember, index)=>/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
|
||||
className: "flex items-center gap-2",
|
||||
children: [
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$lucide$2d$react$40$0$2e$454$2e$0_react$40$19$2e$2$2e$0$2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$heart$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$export__default__as__Heart$3e$__["Heart"], {
|
||||
className: "h-4 w-4 text-red-400 flex-shrink-0"
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/Documents/go-new/chinese-family-tree/components/tree/family-node.tsx",
|
||||
lineNumber: 143,
|
||||
columnNumber: 11
|
||||
}, this),
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])(PersonCard, {
|
||||
member: spouseMember,
|
||||
isSpouse: true,
|
||||
onSelect: onSelect,
|
||||
relationMode: relationMode
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/Documents/go-new/chinese-family-tree/components/tree/family-node.tsx",
|
||||
lineNumber: 144,
|
||||
columnNumber: 11
|
||||
}, this)
|
||||
]
|
||||
}, spouseMember.id, true, {
|
||||
fileName: "[project]/Documents/go-new/chinese-family-tree/components/tree/family-node.tsx",
|
||||
lineNumber: 142,
|
||||
columnNumber: 9
|
||||
}, this))
|
||||
]
|
||||
}, void 0, true, {
|
||||
fileName: "[project]/Documents/go-new/chinese-family-tree/components/tree/family-node.tsx",
|
||||
lineNumber: 135,
|
||||
lineNumber: 139,
|
||||
columnNumber: 5
|
||||
}, this);
|
||||
}
|
||||
@@ -1808,8 +1821,8 @@ function TreeLayout({ rootId, onSelectMember, relationMode = false, selectedMemb
|
||||
const member = getMember(memberId);
|
||||
if (!member) return null;
|
||||
const hasChildren = member.childrenIds && member.childrenIds.length > 0;
|
||||
// 获取配偶(取第一个配偶)
|
||||
const spouse = member.spouseIds && member.spouseIds.length > 0 ? getMember(member.spouseIds[0]) : undefined;
|
||||
// 获取所有配偶
|
||||
const spouses = member.spouseIds && member.spouseIds.length > 0 ? member.spouseIds.map((id)=>getMember(id)).filter(Boolean) : [];
|
||||
return /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
|
||||
className: "flex flex-col items-center",
|
||||
children: [
|
||||
@@ -1824,7 +1837,7 @@ function TreeLayout({ rootId, onSelectMember, relationMode = false, selectedMemb
|
||||
className: "relative z-10",
|
||||
children: /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$components$2f$tree$2f$family$2d$node$2e$tsx__$5b$app$2d$client$5d$__$28$ecmascript$29$__["FamilyNode"], {
|
||||
member: member,
|
||||
spouse: spouse,
|
||||
spouses: spouses,
|
||||
onSelect: handleNodeClick,
|
||||
isRoot: isRoot,
|
||||
isHighlighted: member.id === highlightedMemberId,
|
||||
@@ -1846,13 +1859,30 @@ function TreeLayout({ rootId, onSelectMember, relationMode = false, selectedMemb
|
||||
marginTop: `${VERTICAL_GAP}px`,
|
||||
gap: `${HORIZONTAL_GAP}px`
|
||||
},
|
||||
children: member.childrenIds.map((childId)=>/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])(TreeNode, {
|
||||
memberId: childId
|
||||
}, childId, false, {
|
||||
fileName: "[project]/Documents/go-new/chinese-family-tree/components/tree/tree-layout.tsx",
|
||||
lineNumber: 181,
|
||||
columnNumber: 15
|
||||
}, this))
|
||||
children: (()=>{
|
||||
// 对子节点进行排序:始祖排最左边,其他按出生日期排序
|
||||
const sortedChildren = [
|
||||
...member.childrenIds
|
||||
].sort((aId, bId)=>{
|
||||
const a = getMember(aId);
|
||||
const b = getMember(bId);
|
||||
if (!a || !b) return 0;
|
||||
// 始祖永远排最左边
|
||||
const aIsFounder = a.tags?.includes('始祖') || a.generation === 1;
|
||||
const bIsFounder = b.tags?.includes('始祖') || b.generation === 1;
|
||||
if (aIsFounder && !bIsFounder) return -1;
|
||||
if (!aIsFounder && bIsFounder) return 1;
|
||||
// 其他按出生日期排序
|
||||
return (a.birthDate || "").localeCompare(b.birthDate || "");
|
||||
});
|
||||
return sortedChildren.map((childId)=>/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])(TreeNode, {
|
||||
memberId: childId
|
||||
}, childId, false, {
|
||||
fileName: "[project]/Documents/go-new/chinese-family-tree/components/tree/tree-layout.tsx",
|
||||
lineNumber: 198,
|
||||
columnNumber: 17
|
||||
}, this));
|
||||
})()
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/Documents/go-new/chinese-family-tree/components/tree/tree-layout.tsx",
|
||||
lineNumber: 173,
|
||||
@@ -1889,24 +1919,24 @@ function TreeLayout({ rootId, onSelectMember, relationMode = false, selectedMemb
|
||||
// 跳过无效的连线(宽度或高度为0)
|
||||
if (width <= 0 || height <= 0) return null;
|
||||
return /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
|
||||
className: "absolute bg-foreground/25",
|
||||
className: "absolute bg-black",
|
||||
style: {
|
||||
left: `${left}px`,
|
||||
top: `${top}px`,
|
||||
width: `${width}px`,
|
||||
height: `${height}px`,
|
||||
transform: isHorizontal ? 'scaleY(0.3)' : 'scaleX(0.3)',
|
||||
transform: isHorizontal ? 'scaleY(0.5)' : 'scaleX(0.5)',
|
||||
transformOrigin: 'top left'
|
||||
}
|
||||
}, index, false, {
|
||||
fileName: "[project]/Documents/go-new/chinese-family-tree/components/tree/tree-layout.tsx",
|
||||
lineNumber: 206,
|
||||
lineNumber: 224,
|
||||
columnNumber: 15
|
||||
}, this);
|
||||
})
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/Documents/go-new/chinese-family-tree/components/tree/tree-layout.tsx",
|
||||
lineNumber: 193,
|
||||
lineNumber: 211,
|
||||
columnNumber: 9
|
||||
}, this),
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
|
||||
@@ -1919,23 +1949,23 @@ function TreeLayout({ rootId, onSelectMember, relationMode = false, selectedMemb
|
||||
isRoot: true
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/Documents/go-new/chinese-family-tree/components/tree/tree-layout.tsx",
|
||||
lineNumber: 224,
|
||||
lineNumber: 242,
|
||||
columnNumber: 11
|
||||
}, this)
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/Documents/go-new/chinese-family-tree/components/tree/tree-layout.tsx",
|
||||
lineNumber: 223,
|
||||
lineNumber: 241,
|
||||
columnNumber: 9
|
||||
}, this)
|
||||
]
|
||||
}, void 0, true, {
|
||||
fileName: "[project]/Documents/go-new/chinese-family-tree/components/tree/tree-layout.tsx",
|
||||
lineNumber: 191,
|
||||
lineNumber: 209,
|
||||
columnNumber: 7
|
||||
}, this)
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/Documents/go-new/chinese-family-tree/components/tree/tree-layout.tsx",
|
||||
lineNumber: 190,
|
||||
lineNumber: 208,
|
||||
columnNumber: 5
|
||||
}, this);
|
||||
}
|
||||
@@ -2011,11 +2041,8 @@ const D3OrgChartFlowComponent = /*#__PURE__*/ _s((0, __TURBOPACK__imported__modu
|
||||
visited.add(currentId);
|
||||
const member = members[currentId];
|
||||
if (!member) continue;
|
||||
// 获取配偶信息,确保配偶存在于members中
|
||||
let spouse = null;
|
||||
if (member.spouseIds?.[0] && members[member.spouseIds[0]]) {
|
||||
spouse = members[member.spouseIds[0]];
|
||||
}
|
||||
// 获取所有配偶信息,确保配偶存在于members中
|
||||
const spouses = member.spouseIds?.map((id)=>members[id]).filter(Boolean) || [];
|
||||
// 确定父节点ID - 只有根节点的parentId为null
|
||||
let parentId = null;
|
||||
if (currentId !== rootId) {
|
||||
@@ -2049,8 +2076,8 @@ const D3OrgChartFlowComponent = /*#__PURE__*/ _s((0, __TURBOPACK__imported__modu
|
||||
birthPlace: member.birthPlace || '',
|
||||
gender: member.gender === 'MALE' ? '男' : '女',
|
||||
avatarImageId: member.avatarImageId,
|
||||
spouseName: spouse?.fullName || '',
|
||||
spouseId: spouse?.id || null,
|
||||
spouseName: spouses.length > 0 ? spouses.map((s)=>s.fullName).join(', ') : '',
|
||||
spouseId: spouses.length > 0 ? spouses[0].id : null,
|
||||
hasChildren: Object.values(members).some((m)=>m.fatherId === member.id || m.motherId === member.id),
|
||||
ageText: ageText
|
||||
});
|
||||
@@ -2361,12 +2388,12 @@ const D3OrgChartFlowComponent = /*#__PURE__*/ _s((0, __TURBOPACK__imported__modu
|
||||
}
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/Documents/go-new/chinese-family-tree/components/tree/d3-org-chart-flow.tsx",
|
||||
lineNumber: 446,
|
||||
lineNumber: 445,
|
||||
columnNumber: 7
|
||||
}, ("TURBOPACK compile-time value", void 0))
|
||||
}, `d3-chart-${rootId}`, false, {
|
||||
fileName: "[project]/Documents/go-new/chinese-family-tree/components/tree/d3-org-chart-flow.tsx",
|
||||
lineNumber: 444,
|
||||
lineNumber: 443,
|
||||
columnNumber: 5
|
||||
}, ("TURBOPACK compile-time value", void 0));
|
||||
}, "N7AMngIl448vBHbvNE5UjiukdtI=")), "N7AMngIl448vBHbvNE5UjiukdtI=");
|
||||
|
||||
File diff suppressed because one or more lines are too long
+24
@@ -2217,6 +2217,10 @@
|
||||
}
|
||||
}
|
||||
|
||||
.bg-black {
|
||||
background-color: var(--color-black);
|
||||
}
|
||||
|
||||
.bg-black\/50 {
|
||||
background-color: #00000080;
|
||||
}
|
||||
@@ -2295,6 +2299,26 @@
|
||||
}
|
||||
}
|
||||
|
||||
.bg-foreground\/50 {
|
||||
background-color: var(--foreground);
|
||||
}
|
||||
|
||||
@supports (color: color-mix(in lab, red, red)) {
|
||||
.bg-foreground\/50 {
|
||||
background-color: color-mix(in oklab, var(--foreground) 50%, transparent);
|
||||
}
|
||||
}
|
||||
|
||||
.bg-foreground\/60 {
|
||||
background-color: var(--foreground);
|
||||
}
|
||||
|
||||
@supports (color: color-mix(in lab, red, red)) {
|
||||
.bg-foreground\/60 {
|
||||
background-color: color-mix(in oklab, var(--foreground) 60%, transparent);
|
||||
}
|
||||
}
|
||||
|
||||
.bg-gray-50 {
|
||||
background-color: var(--color-gray-50);
|
||||
}
|
||||
|
||||
+1
-1
File diff suppressed because one or more lines are too long
+1
-1
@@ -2,7 +2,7 @@
|
||||
script: typeof document === "object" ? document.currentScript : undefined,
|
||||
chunks: [
|
||||
"static/chunks/Documents_go-new_chinese-family-tree_fa7c1a71._.js",
|
||||
"static/chunks/a0629__pnpm_a5fa0ed9._.js",
|
||||
"static/chunks/a0629__pnpm_98cfd81b._.js",
|
||||
"static/chunks/4c051_react-image-crop_dist_ReactCrop_bde06fd8.css"
|
||||
],
|
||||
source: "dynamic"
|
||||
|
||||
+9
@@ -0,0 +1,9 @@
|
||||
(globalThis.TURBOPACK_CHUNK_LISTS || (globalThis.TURBOPACK_CHUNK_LISTS = [])).push({
|
||||
script: typeof document === "object" ? document.currentScript : undefined,
|
||||
chunks: [
|
||||
"static/chunks/Documents_go-new_chinese-family-tree_5461dd2a._.js",
|
||||
"static/chunks/a0629__pnpm_1cbf85e1._.js",
|
||||
"static/chunks/4c051_react-image-crop_dist_ReactCrop_bde06fd8.css"
|
||||
],
|
||||
source: "dynamic"
|
||||
});
|
||||
+1
-1
@@ -2,7 +2,7 @@
|
||||
script: typeof document === "object" ? document.currentScript : undefined,
|
||||
chunks: [
|
||||
"static/chunks/Documents_go-new_chinese-family-tree_c5040fe9._.js",
|
||||
"static/chunks/a0629__pnpm_67be5524._.js"
|
||||
"static/chunks/a0629__pnpm_7e21e42e._.js"
|
||||
],
|
||||
source: "dynamic"
|
||||
});
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because one or more lines are too long
@@ -1490,13 +1490,13 @@ function StatisticsCharts({ members }) {
|
||||
const genderChart = __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$echarts$40$6$2e$0$2e$0$2f$node_modules$2f$echarts$2f$lib$2f$core$2f$echarts$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$locals$3e$__["init"](genderChartRef.current);
|
||||
const genderData = {
|
||||
male: members.filter({
|
||||
"StatisticsCharts.useEffect": (m)=>m.gender === 'male'
|
||||
"StatisticsCharts.useEffect": (m)=>m.gender === 'MALE'
|
||||
}["StatisticsCharts.useEffect"]).length,
|
||||
female: members.filter({
|
||||
"StatisticsCharts.useEffect": (m)=>m.gender === 'female'
|
||||
"StatisticsCharts.useEffect": (m)=>m.gender === 'FEMALE'
|
||||
}["StatisticsCharts.useEffect"]).length,
|
||||
other: members.filter({
|
||||
"StatisticsCharts.useEffect": (m)=>m.gender === 'other'
|
||||
"StatisticsCharts.useEffect": (m)=>m.gender === 'OTHER'
|
||||
}["StatisticsCharts.useEffect"]).length
|
||||
};
|
||||
genderChart.setOption({
|
||||
@@ -3116,6 +3116,7 @@ var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$ch
|
||||
var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$lucide$2d$react$40$0$2e$454$2e$0_react$40$19$2e$2$2e$0$2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$users$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$export__default__as__Users$3e$__ = __turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/lucide-react@0.454.0_react@19.2.0/node_modules/lucide-react/dist/esm/icons/users.js [app-client] (ecmascript) <export default as Users>");
|
||||
var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$lucide$2d$react$40$0$2e$454$2e$0_react$40$19$2e$2$2e$0$2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$arrow$2d$right$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$export__default__as__ArrowRight$3e$__ = __turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/lucide-react@0.454.0_react@19.2.0/node_modules/lucide-react/dist/esm/icons/arrow-right.js [app-client] (ecmascript) <export default as ArrowRight>");
|
||||
var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$lucide$2d$react$40$0$2e$454$2e$0_react$40$19$2e$2$2e$0$2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$clock$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$export__default__as__Clock$3e$__ = __turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/lucide-react@0.454.0_react@19.2.0/node_modules/lucide-react/dist/esm/icons/clock.js [app-client] (ecmascript) <export default as Clock>");
|
||||
var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$lucide$2d$react$40$0$2e$454$2e$0_react$40$19$2e$2$2e$0$2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$calculator$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$export__default__as__Calculator$3e$__ = __turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/lucide-react@0.454.0_react@19.2.0/node_modules/lucide-react/dist/esm/icons/calculator.js [app-client] (ecmascript) <export default as Calculator>");
|
||||
var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$context$2f$family$2d$context$2e$tsx__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/context/family-context.tsx [app-client] (ecmascript)");
|
||||
var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$index$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/compiled/react/index.js [app-client] (ecmascript)");
|
||||
var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$components$2f$dashboard$2f$statistics$2d$charts$2e$tsx__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/components/dashboard/statistics-charts.tsx [app-client] (ecmascript)");
|
||||
@@ -3323,19 +3324,19 @@ function DashboardPage() {
|
||||
columnNumber: 15
|
||||
}, this),
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$client$2f$app$2d$dir$2f$link$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["default"], {
|
||||
href: "/tree",
|
||||
href: "/relationship",
|
||||
children: /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$components$2f$ui$2f$button$2e$tsx__$5b$app$2d$client$5d$__$28$ecmascript$29$__["Button"], {
|
||||
variant: "outline",
|
||||
className: "gap-2 bg-transparent",
|
||||
children: [
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$lucide$2d$react$40$0$2e$454$2e$0_react$40$19$2e$2$2e$0$2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$network$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$export__default__as__Network$3e$__["Network"], {
|
||||
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$lucide$2d$react$40$0$2e$454$2e$0_react$40$19$2e$2$2e$0$2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$calculator$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$export__default__as__Calculator$3e$__["Calculator"], {
|
||||
className: "h-4 w-4"
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/Documents/go-new/chinese-family-tree/app/page.tsx",
|
||||
lineNumber: 172,
|
||||
columnNumber: 17
|
||||
}, this),
|
||||
"查看世系图"
|
||||
"计算器"
|
||||
]
|
||||
}, void 0, true, {
|
||||
fileName: "[project]/Documents/go-new/chinese-family-tree/app/page.tsx",
|
||||
|
||||
File diff suppressed because one or more lines are too long
File diff suppressed because it is too large
Load Diff
File diff suppressed because one or more lines are too long
@@ -2301,6 +2301,10 @@
|
||||
}
|
||||
}
|
||||
|
||||
.bg-black {
|
||||
background-color: var(--color-black);
|
||||
}
|
||||
|
||||
.bg-black\/50 {
|
||||
background-color: #00000080;
|
||||
}
|
||||
@@ -2379,6 +2383,26 @@
|
||||
}
|
||||
}
|
||||
|
||||
.bg-foreground\/50 {
|
||||
background-color: var(--foreground);
|
||||
}
|
||||
|
||||
@supports (color: color-mix(in lab, red, red)) {
|
||||
.bg-foreground\/50 {
|
||||
background-color: color-mix(in oklab, var(--foreground) 50%, transparent);
|
||||
}
|
||||
}
|
||||
|
||||
.bg-foreground\/60 {
|
||||
background-color: var(--foreground);
|
||||
}
|
||||
|
||||
@supports (color: color-mix(in lab, red, red)) {
|
||||
.bg-foreground\/60 {
|
||||
background-color: color-mix(in oklab, var(--foreground) 60%, transparent);
|
||||
}
|
||||
}
|
||||
|
||||
.bg-gray-50 {
|
||||
background-color: var(--color-gray-50);
|
||||
}
|
||||
|
||||
File diff suppressed because one or more lines are too long
File diff suppressed because it is too large
Load Diff
File diff suppressed because one or more lines are too long
File diff suppressed because it is too large
Load Diff
File diff suppressed because one or more lines are too long
File diff suppressed because it is too large
Load Diff
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@@ -88,6 +88,175 @@ export async function PATCH(
|
||||
}
|
||||
})
|
||||
|
||||
// 维护配偶双向关系
|
||||
if (body.spouseIds !== undefined) {
|
||||
const newSpouseIds = body.spouseIds || []
|
||||
const oldSpouseIds = existingMember.spouseIds || []
|
||||
|
||||
// 添加新配偶的反向关系
|
||||
for (const spouseId of newSpouseIds) {
|
||||
if (!oldSpouseIds.includes(spouseId)) {
|
||||
const spouse = await prisma.familyMember.findUnique({
|
||||
where: { id: spouseId }
|
||||
})
|
||||
|
||||
if (spouse && !spouse.spouseIds.includes(memberId)) {
|
||||
await prisma.familyMember.update({
|
||||
where: { id: spouseId },
|
||||
data: {
|
||||
spouseIds: [...spouse.spouseIds, memberId]
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// 移除旧配偶的反向关系
|
||||
for (const oldSpouseId of oldSpouseIds) {
|
||||
if (!newSpouseIds.includes(oldSpouseId)) {
|
||||
const spouse = await prisma.familyMember.findUnique({
|
||||
where: { id: oldSpouseId }
|
||||
})
|
||||
|
||||
if (spouse && spouse.spouseIds.includes(memberId)) {
|
||||
await prisma.familyMember.update({
|
||||
where: { id: oldSpouseId },
|
||||
data: {
|
||||
spouseIds: spouse.spouseIds.filter(id => id !== memberId)
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// 维护父母-子女双向关系
|
||||
// 1. 处理父亲关系变化
|
||||
if (body.fatherId !== undefined) {
|
||||
const oldFatherId = existingMember.fatherId
|
||||
const newFatherId = body.fatherId
|
||||
|
||||
// 从旧父亲的子女列表中移除
|
||||
if (oldFatherId && oldFatherId !== newFatherId) {
|
||||
const oldFather = await prisma.familyMember.findUnique({
|
||||
where: { id: oldFatherId }
|
||||
})
|
||||
if (oldFather && oldFather.childrenIds.includes(memberId)) {
|
||||
await prisma.familyMember.update({
|
||||
where: { id: oldFatherId },
|
||||
data: {
|
||||
childrenIds: oldFather.childrenIds.filter(id => id !== memberId)
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
// 添加到新父亲的子女列表
|
||||
if (newFatherId && newFatherId !== oldFatherId) {
|
||||
const newFather = await prisma.familyMember.findUnique({
|
||||
where: { id: newFatherId }
|
||||
})
|
||||
if (newFather && !newFather.childrenIds.includes(memberId)) {
|
||||
await prisma.familyMember.update({
|
||||
where: { id: newFatherId },
|
||||
data: {
|
||||
childrenIds: [...newFather.childrenIds, memberId]
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// 2. 处理母亲关系变化
|
||||
if (body.motherId !== undefined) {
|
||||
const oldMotherId = existingMember.motherId
|
||||
const newMotherId = body.motherId
|
||||
|
||||
// 从旧母亲的子女列表中移除
|
||||
if (oldMotherId && oldMotherId !== newMotherId) {
|
||||
const oldMother = await prisma.familyMember.findUnique({
|
||||
where: { id: oldMotherId }
|
||||
})
|
||||
if (oldMother && oldMother.childrenIds.includes(memberId)) {
|
||||
await prisma.familyMember.update({
|
||||
where: { id: oldMotherId },
|
||||
data: {
|
||||
childrenIds: oldMother.childrenIds.filter(id => id !== memberId)
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
// 添加到新母亲的子女列表
|
||||
if (newMotherId && newMotherId !== oldMotherId) {
|
||||
const newMother = await prisma.familyMember.findUnique({
|
||||
where: { id: newMotherId }
|
||||
})
|
||||
if (newMother && !newMother.childrenIds.includes(memberId)) {
|
||||
await prisma.familyMember.update({
|
||||
where: { id: newMotherId },
|
||||
data: {
|
||||
childrenIds: [...newMother.childrenIds, memberId]
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// 3. 处理子女关系变化
|
||||
if (body.childrenIds !== undefined) {
|
||||
const newChildrenIds = body.childrenIds || []
|
||||
const oldChildrenIds = existingMember.childrenIds || []
|
||||
|
||||
// 添加新子女的父母关系
|
||||
for (const childId of newChildrenIds) {
|
||||
if (!oldChildrenIds.includes(childId)) {
|
||||
const child = await prisma.familyMember.findUnique({
|
||||
where: { id: childId }
|
||||
})
|
||||
|
||||
if (child) {
|
||||
// 根据当前成员的性别设置为父亲或母亲
|
||||
if (member.gender === 'MALE' && !child.fatherId) {
|
||||
await prisma.familyMember.update({
|
||||
where: { id: childId },
|
||||
data: { fatherId: memberId }
|
||||
})
|
||||
} else if (member.gender === 'FEMALE' && !child.motherId) {
|
||||
await prisma.familyMember.update({
|
||||
where: { id: childId },
|
||||
data: { motherId: memberId }
|
||||
})
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// 移除旧子女的父母关系
|
||||
for (const oldChildId of oldChildrenIds) {
|
||||
if (!newChildrenIds.includes(oldChildId)) {
|
||||
const child = await prisma.familyMember.findUnique({
|
||||
where: { id: oldChildId }
|
||||
})
|
||||
|
||||
if (child) {
|
||||
// 根据当前成员的性别移除父亲或母亲
|
||||
if (member.gender === 'MALE' && child.fatherId === memberId) {
|
||||
await prisma.familyMember.update({
|
||||
where: { id: oldChildId },
|
||||
data: { fatherId: null }
|
||||
})
|
||||
} else if (member.gender === 'FEMALE' && child.motherId === memberId) {
|
||||
await prisma.familyMember.update({
|
||||
where: { id: oldChildId },
|
||||
data: { motherId: null }
|
||||
})
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// 记录操作日志
|
||||
await prisma.activityLog.create({
|
||||
data: {
|
||||
|
||||
@@ -12,12 +12,32 @@ const createMemberSchema = z.object({
|
||||
fullName: z.string().min(1),
|
||||
gender: z.nativeEnum(Gender),
|
||||
generation: z.number().int().positive(),
|
||||
generationName: z.string().optional(),
|
||||
courtesyName: z.string().optional(),
|
||||
artName: z.string().optional(),
|
||||
posthumousName: z.string().optional(),
|
||||
rank: z.number().optional(),
|
||||
birthDate: z.string().optional(),
|
||||
deathDate: z.string().optional(),
|
||||
isLunarDate: z.boolean().optional(),
|
||||
ancestralHome: z.string().optional(),
|
||||
birthPlace: z.string().optional(),
|
||||
burialPlace: z.string().optional(),
|
||||
phone: z.string().optional(),
|
||||
telephone: z.string().optional(),
|
||||
email: z.string().optional(),
|
||||
address: z.string().optional(),
|
||||
fatherId: z.string().optional(),
|
||||
motherId: z.string().optional(),
|
||||
spouseIds: z.array(z.string()).optional(),
|
||||
// ... 其他字段
|
||||
childrenIds: z.array(z.string()).optional(),
|
||||
spouseFatherName: z.string().optional(),
|
||||
spouseMotherName: z.string().optional(),
|
||||
bio: z.string().optional(),
|
||||
tags: z.array(z.string()).optional(),
|
||||
avatarUrl: z.string().optional(),
|
||||
avatarImageId: z.string().optional(),
|
||||
photoIds: z.array(z.string()).optional(),
|
||||
})
|
||||
|
||||
// 获取家族树的所有成员
|
||||
@@ -116,6 +136,81 @@ export async function POST(
|
||||
}
|
||||
})
|
||||
|
||||
// 维护配偶双向关系
|
||||
if (data.spouseIds && data.spouseIds.length > 0) {
|
||||
for (const spouseId of data.spouseIds) {
|
||||
const spouse = await prisma.familyMember.findUnique({
|
||||
where: { id: spouseId }
|
||||
})
|
||||
|
||||
if (spouse && !spouse.spouseIds.includes(member.id)) {
|
||||
await prisma.familyMember.update({
|
||||
where: { id: spouseId },
|
||||
data: {
|
||||
spouseIds: [...spouse.spouseIds, member.id]
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// 维护父母-子女双向关系
|
||||
// 1. 如果设置了父亲,将当前成员添加到父亲的子女列表
|
||||
if (data.fatherId) {
|
||||
const father = await prisma.familyMember.findUnique({
|
||||
where: { id: data.fatherId }
|
||||
})
|
||||
|
||||
if (father && !father.childrenIds.includes(member.id)) {
|
||||
await prisma.familyMember.update({
|
||||
where: { id: data.fatherId },
|
||||
data: {
|
||||
childrenIds: [...father.childrenIds, member.id]
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
// 2. 如果设置了母亲,将当前成员添加到母亲的子女列表
|
||||
if (data.motherId) {
|
||||
const mother = await prisma.familyMember.findUnique({
|
||||
where: { id: data.motherId }
|
||||
})
|
||||
|
||||
if (mother && !mother.childrenIds.includes(member.id)) {
|
||||
await prisma.familyMember.update({
|
||||
where: { id: data.motherId },
|
||||
data: {
|
||||
childrenIds: [...mother.childrenIds, member.id]
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
// 3. 如果设置了子女,将当前成员设置为子女的父亲或母亲
|
||||
if (data.childrenIds && data.childrenIds.length > 0) {
|
||||
for (const childId of data.childrenIds) {
|
||||
const child = await prisma.familyMember.findUnique({
|
||||
where: { id: childId }
|
||||
})
|
||||
|
||||
if (child) {
|
||||
// 根据当前成员的性别设置为父亲或母亲
|
||||
if (data.gender === 'MALE' && !child.fatherId) {
|
||||
await prisma.familyMember.update({
|
||||
where: { id: childId },
|
||||
data: { fatherId: member.id }
|
||||
})
|
||||
} else if (data.gender === 'FEMALE' && !child.motherId) {
|
||||
await prisma.familyMember.update({
|
||||
where: { id: childId },
|
||||
data: { motherId: member.id }
|
||||
})
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// 记录操作日志
|
||||
await prisma.activityLog.create({
|
||||
data: {
|
||||
|
||||
@@ -17,13 +17,14 @@ import { useDialog } from "@/components/ui/alert-dialog-custom"
|
||||
|
||||
export default function MemberProfilePage() {
|
||||
const { id } = useParams()
|
||||
const { getMember, updateMember, deleteMember } = useFamily()
|
||||
const { getMember, updateMember, deleteMember, treeData } = useFamily()
|
||||
const { showConfirm } = useDialog()
|
||||
const router = useRouter()
|
||||
const [isEditing, setIsEditing] = useState(false)
|
||||
const [avatarBlobUrl, setAvatarBlobUrl] = useState<string | undefined>(undefined)
|
||||
|
||||
const member = getMember(id as string)
|
||||
const allMembers = Object.values(treeData.members)
|
||||
|
||||
// Load avatar blob if exists
|
||||
useEffect(() => {
|
||||
@@ -76,7 +77,12 @@ export default function MemberProfilePage() {
|
||||
</Button>
|
||||
<h1 className="text-2xl font-bold font-serif">编辑成员: {member.fullName}</h1>
|
||||
</div>
|
||||
<MemberForm initialData={member} onSubmit={handleSave} onCancel={() => setIsEditing(false)} />
|
||||
<MemberForm
|
||||
initialData={member}
|
||||
existingMembers={allMembers}
|
||||
onSubmit={handleSave}
|
||||
onCancel={() => setIsEditing(false)}
|
||||
/>
|
||||
</div>
|
||||
</div>
|
||||
)
|
||||
|
||||
@@ -21,7 +21,8 @@ export default function NewMemberPage() {
|
||||
createdAt: new Date().toISOString(),
|
||||
updatedAt: new Date().toISOString(),
|
||||
})
|
||||
router.push(`/members/${newMember.id}`)
|
||||
// 跳转到成员列表页
|
||||
router.push('/members')
|
||||
} catch (error) {
|
||||
console.error('添加成员失败:', error)
|
||||
alert('添加成员失败: ' + (error as Error).message)
|
||||
|
||||
+41
-5
@@ -112,7 +112,7 @@ export default function MembersPage() {
|
||||
return result.sort((a, b) => a.generation - b.generation || (a.birthDate || "").localeCompare(b.birthDate || ""))
|
||||
}, [allMembers, query, selectedSurname, selectedHome, statusFilter, generationRange])
|
||||
|
||||
// 按世代分组
|
||||
// 按世代分组并排序
|
||||
const membersByGeneration = useMemo(() => {
|
||||
const groups = new Map<number, typeof filteredMembers>()
|
||||
|
||||
@@ -127,10 +127,46 @@ export default function MembersPage() {
|
||||
// 转换为数组并排序
|
||||
return Array.from(groups.entries())
|
||||
.sort((a, b) => a[0] - b[0])
|
||||
.map(([generation, members]) => ({
|
||||
generation,
|
||||
members
|
||||
}))
|
||||
.map(([generation, members]) => {
|
||||
// 对每个世代的成员进行排序
|
||||
const sortedMembers = [...members].sort((a, b) => {
|
||||
// 1. 始祖永远排第一
|
||||
const aIsFounder = a.tags?.includes('始祖') || a.generation === 1
|
||||
const bIsFounder = b.tags?.includes('始祖') || b.generation === 1
|
||||
if (aIsFounder && !bIsFounder) return -1
|
||||
if (!aIsFounder && bIsFounder) return 1
|
||||
|
||||
// 2. 按出生日期排序
|
||||
return (a.birthDate || "").localeCompare(b.birthDate || "")
|
||||
})
|
||||
|
||||
// 3. 将配偶插入到主成员后面
|
||||
const result: typeof members = []
|
||||
const processedSpouses = new Set<string>()
|
||||
|
||||
sortedMembers.forEach(member => {
|
||||
// 跳过已经作为配偶处理过的成员
|
||||
if (processedSpouses.has(member.id)) return
|
||||
|
||||
result.push(member)
|
||||
|
||||
// 如果有配偶,将配偶紧跟在后面
|
||||
if (member.spouseIds && member.spouseIds.length > 0) {
|
||||
member.spouseIds.forEach(spouseId => {
|
||||
const spouse = members.find(m => m.id === spouseId)
|
||||
if (spouse && !processedSpouses.has(spouseId)) {
|
||||
result.push(spouse)
|
||||
processedSpouses.add(spouseId)
|
||||
}
|
||||
})
|
||||
}
|
||||
})
|
||||
|
||||
return {
|
||||
generation,
|
||||
members: result
|
||||
}
|
||||
})
|
||||
}, [filteredMembers])
|
||||
|
||||
const clearFilters = () => {
|
||||
|
||||
@@ -21,9 +21,9 @@ export function StatisticsCharts({ members }: StatisticsChartsProps) {
|
||||
// 性别分布饼图
|
||||
const genderChart = echarts.init(genderChartRef.current)
|
||||
const genderData = {
|
||||
male: members.filter(m => m.gender === 'male').length,
|
||||
female: members.filter(m => m.gender === 'female').length,
|
||||
other: members.filter(m => m.gender === 'other').length,
|
||||
male: members.filter(m => m.gender === 'MALE').length,
|
||||
female: members.filter(m => m.gender === 'FEMALE').length,
|
||||
other: members.filter(m => m.gender === 'OTHER').length,
|
||||
}
|
||||
|
||||
genderChart.setOption({
|
||||
|
||||
@@ -28,20 +28,35 @@ export function MemberForm({ initialData, existingMembers = [], onSubmit, onCanc
|
||||
? Math.max(...existingMembers.map(m => m.generation || 1))
|
||||
: 1
|
||||
|
||||
// 获取始祖的姓氏(第1世成员)
|
||||
const ancestorSurname = existingMembers.find(m => m.generation === 1)?.surname || ""
|
||||
|
||||
// Initialize state with default values or initialData
|
||||
const [formData, setFormData] = useState<Partial<FamilyMember>>({
|
||||
id: initialData?.id || crypto.randomUUID(),
|
||||
surname: initialData?.surname || "李",
|
||||
givenName: initialData?.givenName || "",
|
||||
fullName: initialData?.fullName || "",
|
||||
gender: (initialData?.gender || "MALE").toUpperCase() as "MALE" | "FEMALE",
|
||||
generation: initialData?.generation || maxGeneration,
|
||||
spouseIds: initialData?.spouseIds || [],
|
||||
childrenIds: initialData?.childrenIds || [],
|
||||
tags: initialData?.tags || [],
|
||||
fatherId: initialData?.fatherId,
|
||||
motherId: initialData?.motherId,
|
||||
...initialData,
|
||||
const [formData, setFormData] = useState<Partial<FamilyMember>>(() => {
|
||||
const defaults = {
|
||||
id: crypto.randomUUID(),
|
||||
surname: ancestorSurname,
|
||||
givenName: "",
|
||||
fullName: "",
|
||||
gender: "MALE" as "MALE" | "FEMALE",
|
||||
generation: maxGeneration,
|
||||
spouseIds: [],
|
||||
childrenIds: [],
|
||||
tags: [],
|
||||
}
|
||||
|
||||
if (!initialData) return defaults
|
||||
|
||||
return {
|
||||
...defaults,
|
||||
...initialData,
|
||||
gender: (initialData.gender || "MALE").toUpperCase() as "MALE" | "FEMALE",
|
||||
spouseIds: initialData.spouseIds || [],
|
||||
childrenIds: initialData.childrenIds || [],
|
||||
tags: initialData.tags || [],
|
||||
fatherId: initialData.fatherId || undefined,
|
||||
motherId: initialData.motherId || undefined,
|
||||
}
|
||||
})
|
||||
|
||||
const [errors, setErrors] = useState<string[]>([])
|
||||
@@ -81,14 +96,48 @@ export function MemberForm({ initialData, existingMembers = [], onSubmit, onCanc
|
||||
if (errors.length > 0) setErrors([])
|
||||
}
|
||||
|
||||
const handleSpouseChange = (spouseId: string) => {
|
||||
// If selecting "none" (empty string), clear spouses
|
||||
if (!spouseId) {
|
||||
setFormData((prev) => ({ ...prev, spouseIds: [] }))
|
||||
return
|
||||
}
|
||||
// Otherwise set as single spouse (logic can be expanded for multiple later)
|
||||
setFormData((prev) => ({ ...prev, spouseIds: [spouseId] }))
|
||||
const handleSpouseAdd = (spouseId: string) => {
|
||||
if (!spouseId || spouseId === "none") return
|
||||
|
||||
setFormData((prev) => {
|
||||
const currentSpouses = prev.spouseIds || []
|
||||
// 避免重复添加
|
||||
if (currentSpouses.includes(spouseId)) return prev
|
||||
|
||||
return {
|
||||
...prev,
|
||||
spouseIds: [...currentSpouses, spouseId]
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
const handleSpouseRemove = (spouseId: string) => {
|
||||
setFormData((prev) => ({
|
||||
...prev,
|
||||
spouseIds: (prev.spouseIds || []).filter(id => id !== spouseId)
|
||||
}))
|
||||
}
|
||||
|
||||
const handleChildAdd = (childId: string) => {
|
||||
if (!childId || childId === "none") return
|
||||
|
||||
setFormData((prev) => {
|
||||
const currentChildren = prev.childrenIds || []
|
||||
// 避免重复添加
|
||||
if (currentChildren.includes(childId)) return prev
|
||||
|
||||
return {
|
||||
...prev,
|
||||
childrenIds: [...currentChildren, childId]
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
const handleChildRemove = (childId: string) => {
|
||||
setFormData((prev) => ({
|
||||
...prev,
|
||||
childrenIds: (prev.childrenIds || []).filter(id => id !== childId)
|
||||
}))
|
||||
}
|
||||
|
||||
const validate = (): boolean => {
|
||||
@@ -341,17 +390,30 @@ export function MemberForm({ initialData, existingMembers = [], onSubmit, onCanc
|
||||
|
||||
<div className="space-y-2">
|
||||
<Label htmlFor="spouseId">配偶 (Spouse)</Label>
|
||||
<Select value={formData.spouseIds?.[0] || "none"} onValueChange={handleSpouseChange}>
|
||||
<Select value="none" onValueChange={handleSpouseAdd}>
|
||||
<SelectTrigger>
|
||||
<SelectValue placeholder="选择配偶 Select Spouse" />
|
||||
<SelectValue placeholder="添加配偶..." />
|
||||
</SelectTrigger>
|
||||
<SelectContent>
|
||||
<SelectItem value="none">无 (None)</SelectItem>
|
||||
<SelectItem value="none">选择配偶</SelectItem>
|
||||
{potentialRelatives
|
||||
.filter((m) => {
|
||||
// 必须是同世系
|
||||
if (m.generation !== formData.generation) return false
|
||||
|
||||
// 通常配偶应该是异性
|
||||
if (m.gender === formData.gender) return false
|
||||
|
||||
// 排除已选的配偶
|
||||
if (formData.spouseIds?.includes(m.id)) return false
|
||||
|
||||
// 一夫多妻:女性可以选择已有配偶的男性,男性只能选择未婚女性
|
||||
if (formData.gender === 'MALE') {
|
||||
// 男性:排除已有配偶的女性
|
||||
if (m.spouseIds && m.spouseIds.length > 0) return false
|
||||
}
|
||||
// 女性:可以选择已有配偶的男性(一夫多妻)
|
||||
|
||||
// 排除直系亲属
|
||||
// 1. 排除父母
|
||||
if (m.id === formData.fatherId || m.id === formData.motherId) return false
|
||||
@@ -372,6 +434,103 @@ export function MemberForm({ initialData, existingMembers = [], onSubmit, onCanc
|
||||
))}
|
||||
</SelectContent>
|
||||
</Select>
|
||||
|
||||
{/* 已选配偶列表 */}
|
||||
{formData.spouseIds && formData.spouseIds.length > 0 && (
|
||||
<div className="mt-2 space-y-2">
|
||||
{formData.spouseIds.map((spouseId, index) => {
|
||||
const spouse = existingMembers.find(m => m.id === spouseId)
|
||||
if (!spouse) return null
|
||||
|
||||
return (
|
||||
<div key={spouseId} className="flex items-center justify-between p-2 bg-muted rounded">
|
||||
<span className="text-sm">
|
||||
{index + 1}. {spouse.fullName} (第{spouse.generation}世)
|
||||
</span>
|
||||
<Button
|
||||
type="button"
|
||||
variant="ghost"
|
||||
size="sm"
|
||||
onClick={() => handleSpouseRemove(spouseId)}
|
||||
className="h-6 w-6 p-0 hover:bg-destructive hover:text-destructive-foreground"
|
||||
>
|
||||
×
|
||||
</Button>
|
||||
</div>
|
||||
)
|
||||
})}
|
||||
</div>
|
||||
)}
|
||||
</div>
|
||||
|
||||
<div className="space-y-2">
|
||||
<Label htmlFor="childId">子女 (Children)</Label>
|
||||
<Select value="none" onValueChange={handleChildAdd}>
|
||||
<SelectTrigger>
|
||||
<SelectValue placeholder="添加子女..." />
|
||||
</SelectTrigger>
|
||||
<SelectContent>
|
||||
<SelectItem value="none">选择子女</SelectItem>
|
||||
{potentialRelatives
|
||||
.filter((m) => {
|
||||
// 必须是下一世系
|
||||
if (m.generation !== (formData.generation || 1) + 1) return false
|
||||
|
||||
// 排除已选的子女
|
||||
if (formData.childrenIds?.includes(m.id)) return false
|
||||
|
||||
// 排除配偶
|
||||
if (formData.spouseIds?.includes(m.id)) return false
|
||||
|
||||
// 排除配偶身份的成员(没有父母但有配偶的)
|
||||
const isSpouse = !m.fatherId && !m.motherId && m.spouseIds && m.spouseIds.length > 0
|
||||
if (isSpouse) return false
|
||||
|
||||
// 根据当前成员性别,排除已有对应父母的子女
|
||||
if (formData.gender === 'MALE') {
|
||||
// 男性:排除已有父亲的子女
|
||||
if (m.fatherId) return false
|
||||
} else if (formData.gender === 'FEMALE') {
|
||||
// 女性:排除已有母亲的子女
|
||||
if (m.motherId) return false
|
||||
}
|
||||
|
||||
return true
|
||||
})
|
||||
.map((m) => (
|
||||
<SelectItem key={m.id} value={m.id}>
|
||||
{m.fullName} ({m.generation}世)
|
||||
</SelectItem>
|
||||
))}
|
||||
</SelectContent>
|
||||
</Select>
|
||||
|
||||
{/* 已选子女列表 */}
|
||||
{formData.childrenIds && formData.childrenIds.length > 0 && (
|
||||
<div className="mt-2 space-y-2">
|
||||
{formData.childrenIds.map((childId, index) => {
|
||||
const child = existingMembers.find(m => m.id === childId)
|
||||
if (!child) return null
|
||||
|
||||
return (
|
||||
<div key={childId} className="flex items-center justify-between p-2 bg-muted rounded">
|
||||
<span className="text-sm">
|
||||
{index + 1}. {child.fullName} (第{child.generation}世)
|
||||
</span>
|
||||
<Button
|
||||
type="button"
|
||||
variant="ghost"
|
||||
size="sm"
|
||||
onClick={() => handleChildRemove(childId)}
|
||||
className="h-6 w-6 p-0 hover:bg-destructive hover:text-destructive-foreground"
|
||||
>
|
||||
×
|
||||
</Button>
|
||||
</div>
|
||||
)
|
||||
})}
|
||||
</div>
|
||||
)}
|
||||
</div>
|
||||
</CardContent>
|
||||
</Card>
|
||||
|
||||
@@ -88,11 +88,10 @@ const D3OrgChartFlowComponent = forwardRef<D3OrgChartRef, D3OrgChartFlowProps>(
|
||||
const member = members[currentId]
|
||||
if (!member) continue
|
||||
|
||||
// 获取配偶信息,确保配偶存在于members中
|
||||
let spouse = null
|
||||
if (member.spouseIds?.[0] && members[member.spouseIds[0]]) {
|
||||
spouse = members[member.spouseIds[0]]
|
||||
}
|
||||
// 获取所有配偶信息,确保配偶存在于members中
|
||||
const spouses = member.spouseIds
|
||||
?.map(id => members[id])
|
||||
.filter(Boolean) || []
|
||||
|
||||
// 确定父节点ID - 只有根节点的parentId为null
|
||||
let parentId: string | null = null
|
||||
@@ -135,8 +134,8 @@ const D3OrgChartFlowComponent = forwardRef<D3OrgChartRef, D3OrgChartFlowProps>(
|
||||
birthPlace: member.birthPlace || '',
|
||||
gender: member.gender === 'MALE' ? '男' : '女',
|
||||
avatarImageId: member.avatarImageId,
|
||||
spouseName: spouse?.fullName || '',
|
||||
spouseId: spouse?.id || null,
|
||||
spouseName: spouses.length > 0 ? spouses.map(s => s.fullName).join(', ') : '',
|
||||
spouseId: spouses.length > 0 ? spouses[0].id : null,
|
||||
hasChildren: Object.values(members).some(m => m.fatherId === member.id || m.motherId === member.id),
|
||||
ageText: ageText
|
||||
})
|
||||
|
||||
@@ -8,6 +8,7 @@ import { CircleUser, CircleUserRound, Heart } from "lucide-react"
|
||||
interface FamilyNodeProps {
|
||||
member: FamilyMember
|
||||
spouse?: FamilyMember
|
||||
spouses?: FamilyMember[]
|
||||
isRoot?: boolean
|
||||
onSelect?: (member: FamilyMember) => void
|
||||
isHighlighted?: boolean
|
||||
@@ -88,7 +89,7 @@ function PersonCard({ member, isRoot, isSpouse, onSelect, isHighlighted, relatio
|
||||
className="h-full w-full object-cover"
|
||||
/>
|
||||
) : (
|
||||
member.gender === 'female' ? (
|
||||
member.gender === 'FEMALE' ? (
|
||||
<CircleUserRound className="h-8 w-8 text-pink-400" />
|
||||
) : (
|
||||
<CircleUser className="h-8 w-8 text-blue-400" />
|
||||
@@ -125,17 +126,24 @@ function PersonCard({ member, isRoot, isSpouse, onSelect, isHighlighted, relatio
|
||||
)
|
||||
}
|
||||
|
||||
export function FamilyNode({ member, spouse, isRoot, onSelect, isHighlighted, relationMode, isSelected }: FamilyNodeProps) {
|
||||
if (!spouse) {
|
||||
export function FamilyNode({ member, spouse, spouses, isRoot, onSelect, isHighlighted, relationMode, isSelected }: FamilyNodeProps) {
|
||||
// 优先使用 spouses 数组,如果没有则使用单个 spouse
|
||||
const spouseList = spouses || (spouse ? [spouse] : [])
|
||||
|
||||
if (spouseList.length === 0) {
|
||||
return <PersonCard member={member} isRoot={isRoot} onSelect={onSelect} isHighlighted={isHighlighted} relationMode={relationMode} isSelected={isSelected} />
|
||||
}
|
||||
|
||||
// 有配偶时,并排显示
|
||||
// 有配偶时,并排显示所有配偶
|
||||
return (
|
||||
<div className="flex items-center gap-2">
|
||||
<PersonCard member={member} isRoot={isRoot} onSelect={onSelect} isHighlighted={isHighlighted} relationMode={relationMode} isSelected={isSelected} />
|
||||
<Heart className="h-4 w-4 text-red-400 flex-shrink-0" />
|
||||
<PersonCard member={spouse} isSpouse={true} onSelect={onSelect} relationMode={relationMode} />
|
||||
{spouseList.map((spouseMember, index) => (
|
||||
<div key={spouseMember.id} className="flex items-center gap-2">
|
||||
<Heart className="h-4 w-4 text-red-400 flex-shrink-0" />
|
||||
<PersonCard member={spouseMember} isSpouse={true} onSelect={onSelect} relationMode={relationMode} />
|
||||
</div>
|
||||
))}
|
||||
</div>
|
||||
)
|
||||
}
|
||||
|
||||
@@ -139,10 +139,10 @@ export function TreeLayout({
|
||||
|
||||
const hasChildren = member.childrenIds && member.childrenIds.length > 0
|
||||
|
||||
// 获取配偶(取第一个配偶)
|
||||
const spouse = member.spouseIds && member.spouseIds.length > 0
|
||||
? getMember(member.spouseIds[0])
|
||||
: undefined
|
||||
// 获取所有配偶
|
||||
const spouses = member.spouseIds && member.spouseIds.length > 0
|
||||
? member.spouseIds.map(id => getMember(id)).filter(Boolean) as FamilyMember[]
|
||||
: []
|
||||
|
||||
return (
|
||||
<div className="flex flex-col items-center">
|
||||
@@ -159,7 +159,7 @@ export function TreeLayout({
|
||||
>
|
||||
<FamilyNode
|
||||
member={member}
|
||||
spouse={spouse}
|
||||
spouses={spouses}
|
||||
onSelect={handleNodeClick}
|
||||
isRoot={isRoot}
|
||||
isHighlighted={member.id === highlightedMemberId}
|
||||
@@ -177,9 +177,27 @@ export function TreeLayout({
|
||||
gap: `${HORIZONTAL_GAP}px`
|
||||
}}
|
||||
>
|
||||
{member.childrenIds.map((childId) => (
|
||||
<TreeNode key={childId} memberId={childId} />
|
||||
))}
|
||||
{(() => {
|
||||
// 对子节点进行排序:始祖排最左边,其他按出生日期排序
|
||||
const sortedChildren = [...member.childrenIds].sort((aId, bId) => {
|
||||
const a = getMember(aId)
|
||||
const b = getMember(bId)
|
||||
if (!a || !b) return 0
|
||||
|
||||
// 始祖永远排最左边
|
||||
const aIsFounder = a.tags?.includes('始祖') || a.generation === 1
|
||||
const bIsFounder = b.tags?.includes('始祖') || b.generation === 1
|
||||
if (aIsFounder && !bIsFounder) return -1
|
||||
if (!aIsFounder && bIsFounder) return 1
|
||||
|
||||
// 其他按出生日期排序
|
||||
return (a.birthDate || "").localeCompare(b.birthDate || "")
|
||||
})
|
||||
|
||||
return sortedChildren.map((childId) => (
|
||||
<TreeNode key={childId} memberId={childId} />
|
||||
))
|
||||
})()}
|
||||
</div>
|
||||
)}
|
||||
</div>
|
||||
@@ -205,13 +223,13 @@ export function TreeLayout({
|
||||
return (
|
||||
<div
|
||||
key={index}
|
||||
className="absolute bg-foreground/25"
|
||||
className="absolute bg-black"
|
||||
style={{
|
||||
left: `${left}px`,
|
||||
top: `${top}px`,
|
||||
width: `${width}px`,
|
||||
height: `${height}px`,
|
||||
transform: isHorizontal ? 'scaleY(0.3)' : 'scaleX(0.3)',
|
||||
transform: isHorizontal ? 'scaleY(0.5)' : 'scaleX(0.5)',
|
||||
transformOrigin: 'top left',
|
||||
}}
|
||||
/>
|
||||
|
||||
Reference in New Issue
Block a user