diff --git a/pages/genealogy/g03-create-genealogy.vue b/pages/genealogy/g03-create-genealogy.vue index 2bc757d..f37cadc 100644 --- a/pages/genealogy/g03-create-genealogy.vue +++ b/pages/genealogy/g03-create-genealogy.vue @@ -3,21 +3,11 @@ - - - - - - {{ - isAncestorStep ? "录入首代人物" : "创建家谱" - }} - - - + @@ -248,6 +238,7 @@ import { computed, onMounted, onUnmounted, reactive, ref } from "vue"; import { onLoad, onShow } from "@dcloudio/uni-app"; import GenealogyPageBackground from "@/components/GenealogyPageBackground.vue"; +import PageHeader from "@/components/PageHeader.vue"; const currentStep = ref("create"); const genealogyId = ref(""); @@ -423,47 +414,6 @@ const enterOverview = () => background: #f9f6ef; } -.flow-header { - z-index: 3; - height: 112rpx; - overflow: hidden; - background: url("/static/assets/foundation/opaque/root-header-cinnabar.jpg") - center / 100% 100% no-repeat; -} - -.flow-header__content { - z-index: 1; - display: flex; - height: 100%; - align-items: center; - justify-content: space-between; - padding: 0 26rpx; - box-sizing: border-box; -} - -.flow-header__back, -.flow-header__side { - display: flex; - width: 72rpx; - align-items: center; -} - -.flow-header__back-icon { - width: 34rpx; - height: 34rpx; - transform: rotate(180deg); -} - -.flow-header__title { - flex: 1; - color: #ffe4a7; - font-family: "STKaiti", "KaiTi", serif; - font-size: 39rpx; - font-weight: 700; - letter-spacing: 4rpx; - text-align: center; -} - .flow-content { z-index: 2; padding: 24rpx 32rpx 48rpx; diff --git a/tests/g03-create-flow-contract.ps1 b/tests/g03-create-flow-contract.ps1 index 4accfd6..89923c2 100644 --- a/tests/g03-create-flow-contract.ps1 +++ b/tests/g03-create-flow-contract.ps1 @@ -37,15 +37,18 @@ foreach ($required in @( 'if (isSubmitting.value) return;', '/pages/genealogy/g05-genealogy-overview?genealogyId=', 'g01-empty-panel-frame.png', - 'root-header-cinnabar.jpg', 'a01-scroll-primary-v3.png', 'create-flow-panel', - 'flow-primary-action' + 'flow-primary-action', + 'import PageHeader from "@/components/PageHeader.vue";', + '返回') { throw 'G03 header must use only the approved image back arrow' } -Assert-Match -Content $g03 -Pattern '(?s)\.flow-header__back,\s*\.flow-header__side\s*\{[^}]*width:\s*72rpx;' -Message 'G03 header side slots must preserve centered title after removing back text' -Assert-Match -Content $g03 -Pattern '(?s)\.flow-header__back-icon\s*\{[^}]*width:\s*34rpx;[^}]*height:\s*34rpx;' -Message 'G03 back arrow must use the approved visible size' +Assert-Match -Content $g03 -Pattern '(?s)' -Message 'G03 must use PageHeader with its dynamic title and custom back handler' +if ($g03 -match 'flow-header|flow-header__back|flow-header__title') { throw 'G03 must not retain a private header implementation' } Assert-Match -Content $g03 -Pattern '(?s)\.flow-note,\s*\.flow-rule__note\s*\{[^}]*font-size:\s*25rpx;' -Message 'G03 guidance copy must use the approved readable size' Assert-Match -Content $g03 -Pattern '(?s)\.flow-rule__option\s*\{[^}]*font-size:\s*23rpx;' -Message 'G03 visibility options must use the approved readable size' Assert-Match -Content $g03 -Pattern '(?s)\.field-error\s*\{[^}]*font-size:\s*24rpx;[^}]*line-height:\s*34rpx;' -Message 'G03 field errors must use the approved readable size'