From 555aa000436733794593cd7384bbd04204a74d3d Mon Sep 17 00:00:00 2001 From: rain Date: Fri, 31 Jul 2026 11:27:15 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E5=AE=8C=E6=88=9070%=E5=85=A8=E5=B1=80?= =?UTF-8?q?=E6=A0=B7=E5=BC=8F=E4=B8=8E=E5=8F=AF=E8=AF=BB=E6=80=A7=E4=BC=98?= =?UTF-8?q?=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- components/AppAvatar.vue | 31 +++ components/AppButton.vue | 16 +- components/AppDialog.vue | 14 +- components/AppLoading.vue | 8 +- components/AppTabbar.vue | 7 +- components/AppToast.vue | 6 +- components/AuthPageShell.vue | 40 +++- components/GenealogyCard.vue | 169 ++++++++-------- components/GenealogyPageBackground.vue | 1 + components/PageHeader.vue | 66 +++++- docs/迭代进度记录-2026-07-31-完成70%.md | 33 +++ pages/auth/a01-entry.vue | 58 ++++-- pages/auth/a04-register.vue | 47 +++-- pages/auth/a05-reset-password.vue | 28 +-- pages/auth/a06-auth-status.vue | 32 +-- pages/family/f01-family-feed.vue | 29 +-- pages/family/f02-publish-feed.vue | 30 +-- pages/family/f03-feed-detail.vue | 28 +-- pages/family/f04-article-list.vue | 38 ++-- pages/family/f05-article-detail.vue | 20 +- pages/family/f06-article-editor.vue | 34 ++-- pages/family/f07-album-list.vue | 24 +-- pages/family/f08-album-detail.vue | 12 +- pages/family/f09-media-upload.vue | 28 +-- pages/family/f10-video-list.vue | 18 +- pages/genealogy/g01-my-genealogies.vue | 129 +++++++----- pages/genealogy/g03-create-genealogy.vue | 49 ++--- pages/genealogy/g05-genealogy-overview.vue | 63 +++--- pages/genealogy/g06-search-genealogies.vue | 18 +- pages/genealogy/g08-join-application.vue | 18 +- pages/genealogy/g09-my-applications.vue | 8 +- pages/genealogy/g10-application-review.vue | 8 +- pages/genealogy/g11-genealogy-settings.vue | 49 ++--- pages/genealogy/g12-generation-poems.vue | 40 ++-- pages/notification/n01-message-center.vue | 89 +++++++- pages/notification/n02-message-detail.vue | 29 ++- pages/profile/m01-profile-home.vue | 191 +++++++++++++----- pages/profile/m02-edit-profile.vue | 86 ++++++-- pages/profile/m03-security-settings.vue | 20 +- pages/profile/m04-change-password.vue | 21 +- pages/profile/m05-change-phone.vue | 63 ++++-- pages/profile/m06-help-center.vue | 71 +++++-- pages/profile/m07-feedback.vue | 26 +-- pages/profile/m08-promotion.vue | 16 +- pages/profile/m09-vip-orders.vue | 48 ++--- pages/profile/m10-about-settings.vue | 16 +- pages/records/r01-people-list.vue | 20 +- pages/records/r02-person-detail.vue | 26 +-- pages/records/r03-gift-list.vue | 12 +- pages/records/r04-gift-editor.vue | 30 +-- pages/records/r05-ritual-list.vue | 20 +- pages/records/r06-ritual-detail.vue | 21 +- pages/records/r07-ritual-editor.vue | 32 +-- pages/records/r08-growth-journal.vue | 53 +++-- pages/records/r09-life-events.vue | 8 +- pages/records/r10-memo-list.vue | 44 ++-- pages/records/r11-merit-records.vue | 30 +-- pages/tree/t01-tree-overview.vue | 110 +++++----- pages/tree/t02-pedigree-overview.vue | 26 ++- pages/tree/t03-member-profile.vue | 79 ++++---- pages/tree/t04-add-relative.vue | 38 ++-- pages/tree/t05-edit-member.vue | 43 ++-- pages/tree/t06-edit-relationship.vue | 18 +- pages/tree/t07-member-directory.vue | 49 +++-- pages/tree/t08-member-states.vue | 26 +-- ...7cb98a9-ec37-4620-a032-ebe511fa93b5@2x.png | Bin 0 -> 38629 bytes ...n_of_a_boy_wearing_a_red_Chinese__0@2x.png | Bin 0 -> 43055 bytes styles/global.scss | 32 ++- tests/a04-registration-contract.ps1 | 10 +- tests/app-button-compact-contract.ps1 | 6 +- ...app-dialog-responsive-content-contract.ps1 | 2 +- tests/app-loading-contract.ps1 | 8 +- tests/default-avatar-contract.ps1 | 34 ++++ tests/f-series-all-states-visual-contract.ps1 | 4 +- tests/f01-document-flow-contract.ps1 | 6 +- tests/f02-document-flow-contract.ps1 | 4 +- tests/f06-article-editor-contract.ps1 | 4 +- tests/f10-video-status-contract.ps1 | 2 +- .../family-editors-document-flow-contract.ps1 | 4 +- tests/g01-document-flow-contract.ps1 | 6 +- tests/g01-empty-state-contract.ps1 | 12 +- tests/g01-error-state-contract.ps1 | 4 +- tests/g01-visual-contract.ps1 | 44 ++-- tests/g03-document-flow-contract.ps1 | 2 +- tests/g03-visual-states-contract.ps1 | 6 +- tests/g05-document-flow-contract.ps1 | 4 +- tests/g06-document-flow-contract.ps1 | 6 +- tests/g08-document-flow-contract.ps1 | 4 +- tests/g09-all-states-visual-contract.ps1 | 14 +- tests/g09-document-flow-contract.ps1 | 2 +- tests/g10-all-states-visual-contract.ps1 | 10 +- tests/g10-document-flow-contract.ps1 | 6 +- tests/g11-document-flow-contract.ps1 | 4 +- tests/g11-g12-all-states-visual-contract.ps1 | 20 +- tests/g12-document-flow-contract.ps1 | 4 +- tests/global-text-flow-contract.ps1 | 78 +++++++ tests/lineage-write-apifox-contract.ps1 | 2 +- tests/m-series-all-states-visual-contract.ps1 | 6 +- tests/member-app-user-visibility-contract.ps1 | 14 ++ ...ternal-identifiers-visibility-contract.ps1 | 15 ++ tests/mumu-page-visual-audit.js | 14 +- tests/n01-module-baseline-contract.ps1 | 6 +- tests/r01-document-flow-contract.ps1 | 4 +- tests/r02-person-detail-contract.ps1 | 2 +- tests/readable-font-contract.ps1 | 28 +++ tests/responsive-layout-allowlist.json | 1 + tests/responsive-layout-coverage.json | 1 + tests/root-pages-visual-contract.ps1 | 8 +- tests/t01-all-states-visual-contract.ps1 | 2 +- tests/t01-person-action-panel-contract.ps1 | 5 +- tests/t01-tree-state-contract.ps1 | 32 ++- tests/t03-document-flow-contract.ps1 | 8 +- tests/t03-t06-all-states-visual-contract.ps1 | 10 +- tests/t07-t08-all-states-visual-contract.ps1 | 20 +- utils/api.js | 7 + utils/avatar.js | 10 + 116 files changed, 1928 insertions(+), 1169 deletions(-) create mode 100644 components/AppAvatar.vue create mode 100644 docs/迭代进度记录-2026-07-31-完成70%.md create mode 100644 static/assets/foundation/transparent/loyel003_Ancient_Beauty_Wearing_Tang_Dynasty_ClothingLooking_to_07cb98a9-ec37-4620-a032-ebe511fa93b5@2x.png create mode 100644 static/assets/foundation/transparent/mjpc0703_A_cartoon_illustration_of_a_boy_wearing_a_red_Chinese__0@2x.png create mode 100644 tests/default-avatar-contract.ps1 create mode 100644 tests/global-text-flow-contract.ps1 create mode 100644 tests/member-app-user-visibility-contract.ps1 create mode 100644 tests/member-internal-identifiers-visibility-contract.ps1 create mode 100644 tests/readable-font-contract.ps1 create mode 100644 utils/avatar.js diff --git a/components/AppAvatar.vue b/components/AppAvatar.vue new file mode 100644 index 0000000..4d66b37 --- /dev/null +++ b/components/AppAvatar.vue @@ -0,0 +1,31 @@ + + + + + diff --git a/components/AppButton.vue b/components/AppButton.vue index 73c770c..3fd0052 100644 --- a/components/AppButton.vue +++ b/components/AppButton.vue @@ -15,7 +15,7 @@ @click="handleClick" > - {{ label }} @@ -45,7 +45,7 @@ const handleClick = (event) => { diff --git a/components/GenealogyCard.vue b/components/GenealogyCard.vue index ee2d638..8ab8152 100644 --- a/components/GenealogyCard.vue +++ b/components/GenealogyCard.vue @@ -27,36 +27,34 @@ {{ genealogy.name }} - - {{ role }} - - + - - 更新于 {{ genealogy.updatedAt }} + + + {{ genealogy.location }} - - - - {{ genealogy.location }} - - - - {{ genealogy.memberCount }} 位成员 - + + + {{ genealogy.memberCount }} 位成员 + + + {{ role }} + 更新于 {{ genealogy.updatedAt }} @@ -82,13 +80,13 @@ const accessibleLabel = computed( diff --git a/components/PageHeader.vue b/components/PageHeader.vue index 9739712..b304984 100644 --- a/components/PageHeader.vue +++ b/components/PageHeader.vue @@ -46,7 +46,20 @@ - {{ title }} + + + 代代相传 + + {{ title }} - { .header-side { display: flex; + flex: 0 0 120rpx; width: 120rpx; min-height: 88rpx; align-items: center; @@ -179,6 +193,10 @@ const handleBack = () => { .header-side--right { justify-content: flex-end; } +.page-header:not(.page-header--root) .header-side--right { + flex-basis: 152rpx; + width: 152rpx; +} .header-icon-button { display: grid; @@ -246,9 +264,12 @@ const handleBack = () => { border: 0; background: transparent; color: #ffe3a7; - font-size: 27rpx; + font-size: clamp(16px, 27rpx, 20px); line-height: normal; text-align: right; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; } .header-action-placeholder { width: 100%; @@ -280,12 +301,45 @@ const handleBack = () => { .header-back--pressed { opacity: 0.62; } +.header-project-lockup { + position: absolute; + top: calc(var(--status-bar-height, 0px) + 52rpx); + left: 112rpx; + z-index: 3; + display: flex; + align-items: center; + gap: 7rpx; + transform: translateY(-50%); + pointer-events: none; +} + +.header-project-lockup--root { + top: calc(var(--status-bar-height, 0px) + 62rpx); + left: 116rpx; +} + +.header-project-lockup__logo { + width: 34rpx; + height: 34rpx; + flex: 0 0 auto; +} + +.header-project-name { + color: #ffe3a7; + font-family: "STKaiti", "KaiTi", serif; + font-size: clamp(11px, 19rpx, 14px); + font-weight: 700; + letter-spacing: 3rpx; + line-height: 1; + white-space: nowrap; +} .header-title { + min-width: 0; flex: 1; overflow: hidden; color: #fff9ed; font-family: serif; - font-size: 35rpx; + font-size: clamp(19px, 35rpx, 24px); font-weight: 700; letter-spacing: 4rpx; text-align: center; @@ -296,7 +350,7 @@ const handleBack = () => { .page-header--root .header-title { color: #ffe3a7; font-family: "STKaiti", "KaiTi", serif; - font-size: 48rpx; + font-size: clamp(24px, 48rpx, 30px); letter-spacing: 5rpx; transform: translateY(2rpx); } diff --git a/docs/迭代进度记录-2026-07-31-完成70%.md b/docs/迭代进度记录-2026-07-31-完成70%.md new file mode 100644 index 0000000..ae0c14a --- /dev/null +++ b/docs/迭代进度记录-2026-07-31-完成70%.md @@ -0,0 +1,33 @@ +# 家谱 App 迭代进度记录(完成 70%) + +日期:2026-07-31 +当前分支:`main` + +## 本轮已完成 + +- 完成全项目字体可读性与长文本换行治理,优先保证手机端、长辈用户的阅读体验。 +- 调整公共页头:项目名称“代代相传”以“Logo + 名称”组合呈现,页面功能标题保持居中;认证页与“我的”页同步使用该品牌组合。 +- 接入默认头像:男性使用男童国风头像,女性使用唐装女性头像;未选择性别时默认使用男性头像。 +- 完善成员资料展示,隐藏不应面向普通用户展示的业务用户与内部人物编号信息。 +- 修复“我的”、家谱、家族、人物录、通知等模块中已发现的文字截断、状态提示与空/错误态表达问题。 +- 保留 T02 世系谱的参考项目结构,仅做兼容性和可读性处理,未改变其核心展示逻辑。 +- 新增并通过默认头像、个人资料、消息中心等重点契约检查。 + +## 当前状态 + +- 整体功能与视觉治理进度:约 70%。 +- 页面入口已完成全局品牌标识覆盖;业务页面仍可继续在真机/模拟器逐页复核细节。 +- 相册图片是否能展示取决于接口是否返回可访问的图片地址;当前不伪造图片链接。 + +## 在另一台电脑运行 + +1. 拉取 `main` 分支的最新代码。 +2. 使用 HBuilderX 导入项目根目录 `jiapuapp`。 +3. 等待 HBuilderX 完成编译后,选择“运行到 Android App 基座”并连接 MuMu 或真机。 +4. 项目所需头像和页面静态资源已随代码提交,不需要单独拷贝资源文件。 + +## 后续建议 + +- 在目标设备尺寸上复核页头品牌组合、表单按钮与底部导航的间距。 +- 继续覆盖未登录、空数据、接口异常和超长文本等状态。 +- 按接口返回能力补充相册图片的真实访问地址或签名 URL。 diff --git a/pages/auth/a01-entry.vue b/pages/auth/a01-entry.vue index 2b440f7..bbac8dc 100644 --- a/pages/auth/a01-entry.vue +++ b/pages/auth/a01-entry.vue @@ -188,9 +188,10 @@ -