feat: 完成前端业务闭环与后端联调

This commit is contained in:
2026-08-24 23:37:56 +08:00
parent c59e36f933
commit 9ad572907b
175 changed files with 10711 additions and 1740 deletions
+24 -4
View File
@@ -52,6 +52,9 @@
<view class="member-node__relation"><text>{{ memberRelation(member) }}</text></view>
<view
class="member-node__name"
:class="{
'member-node__name--horizontal': !isVerticalPedigreeText(member.name),
}"
role="button"
:aria-label="`查看${member.name}的资料`"
@click.stop="openMemberProfile(member)"
@@ -135,7 +138,7 @@
<script setup>
import { computed, ref } from "vue";
import { onLoad, onShow, onUnload } from "@dcloudio/uni-app";
import { onBackPress, onLoad, onShow, onUnload } from "@dcloudio/uni-app";
import AppDialog from "@/components/AppDialog.vue";
import AppLoading from "@/components/AppLoading.vue";
import ModulePageBackground from "@/components/ModulePageBackground.vue";
@@ -147,7 +150,7 @@ import {
import { lineageApi } from "@/services/api/lineage-service.js";
import { getRequestErrorMessage } from "@/services/api/request-error-message.js";
import { genealogyContext } from "@/utils/genealogy/context.js";
import { openPage, returnTo } from "@/utils/navigation/gateway.js";
import { handleBackPress, openPage, returnTo } from "@/utils/navigation/gateway.js";
const PEDIGREE_PAGE_SIZE = 5;
const genealogyId = ref("");
@@ -169,6 +172,10 @@ let skipNextShowRefresh = true;
const compareMembers = (left, right) =>
Number(left.generation) - Number(right.generation) ||
String(left.id).localeCompare(String(right.id));
const isVerticalPedigreeText = (value) =>
/^[\u3400-\u4dbf\u4e00-\u9fff\uf900-\ufaff·〇零一二三四五六七八九十百千万]+$/.test(
String(value || ""),
);
const generationRows = computed(() => {
const groups = new Map();
members.value.forEach((member) => {
@@ -283,6 +290,9 @@ const toTree = () => {
if (selectedId.value) params.selectedId = selectedId.value;
return returnTo("T01", params);
};
onBackPress((event) =>
detailVisible.value ? handleBackPress(event, closeMemberDetail) : false,
);
const handleStateAction = () => {
if (treeState.value === "empty") {
return openPage(
@@ -302,7 +312,7 @@ const loadPedigree = async (query = {}) => {
query.genealogyId || genealogyContext.getCurrentGenealogyId() || "",
);
selectedId.value = String(query.selectedId || "");
if (!genealogyId.value) {
if (!/^[1-9]\d*$/.test(genealogyId.value)) {
members.value = [];
treeState.value = "empty";
return;
@@ -361,6 +371,8 @@ onUnload(() => {
}
.pedigree-stage {
min-height: 0;
padding-bottom: env(safe-area-inset-bottom);
box-sizing: border-box;
}
.pedigree-layout {
display: grid;
@@ -428,6 +440,14 @@ onUnload(() => {
font-size: clamp(19px, 34rpx, 24px);
font-weight: 700;
}
.member-node__name--horizontal {
padding: 12rpx 8rpx;
line-height: 1.2;
overflow-wrap: anywhere;
text-align: center;
text-orientation: mixed;
writing-mode: horizontal-tb;
}
.pedigree-column__detail,
.member-node__copy {
align-items: flex-start;
@@ -550,7 +570,7 @@ onUnload(() => {
.pedigree-state-card__action {
display: grid;
width: 360rpx;
min-height: 70rpx;
min-height: var(--app-touch-min);
margin: 22rpx auto 0;
}
.pedigree-state-card__action image,