From bc4061c8dc7729e96a62697382bf70802b3948e7 Mon Sep 17 00:00:00 2001 From: rain Date: Tue, 21 Jul 2026 11:13:26 +0800 Subject: [PATCH] =?UTF-8?q?=E8=B0=83=E6=95=B4A01=E5=AE=89=E5=8D=93?= =?UTF-8?q?=E8=A7=86=E8=A7=89=E6=AF=94=E4=BE=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pages/auth/a01-entry.vue | 38 ++++++++++++++++++----------------- tests/a01-a02-ui-contract.ps1 | 9 ++++++--- 2 files changed, 26 insertions(+), 21 deletions(-) diff --git a/pages/auth/a01-entry.vue b/pages/auth/a01-entry.vue index 90b9faa..c8fe3e9 100644 --- a/pages/auth/a01-entry.vue +++ b/pages/auth/a01-entry.vue @@ -391,6 +391,8 @@ const prepareAgreement = () => showFeedback("协议页面准备中"); flex: 0 0 auto; box-sizing: border-box; width: 100%; + height: calc(var(--app-safe-top) + min(36.5vw, 175px)); + overflow: hidden; padding-top: var(--app-safe-top); background: #940400; } @@ -404,10 +406,10 @@ const prepareAgreement = () => showFeedback("协议页面准备中"); .brand-seal { position: absolute; - top: calc(var(--app-safe-top) + clamp(8px, 2vw, 14px)); + top: calc(var(--app-safe-top) + clamp(46px, 11.5vw, 58px)); left: 50%; - width: clamp(60px, 19vw, 86px); - height: clamp(72px, 23vw, 104px); + width: clamp(56px, 17vw, 78px); + height: clamp(67px, 20.4vw, 94px); transform: translateX(-50%); pointer-events: none; } @@ -439,21 +441,21 @@ const prepareAgreement = () => showFeedback("协议页面准备中"); flex-direction: column; align-items: center; justify-content: center; - min-height: 56px; + min-height: 50px; } .login-title { color: #9f170f; - font-size: 82rpx; + font-size: 58rpx; font-weight: 700; - letter-spacing: 8rpx; + letter-spacing: 5rpx; line-height: 1; } .title-divider { flex: none; - width: 360rpx; - height: 60rpx; + width: 280rpx; + height: 46rpx; filter: brightness(0.68) saturate(1.5) contrast(1.2); } @@ -470,7 +472,7 @@ const prepareAgreement = () => showFeedback("协议页面准备中"); justify-content: center; min-height: 88rpx; color: #80684f; - font-size: 40rpx; + font-size: 34rpx; letter-spacing: 2rpx; } @@ -522,7 +524,7 @@ const prepareAgreement = () => showFeedback("协议页面准备中"); min-width: 0; min-height: var(--app-touch-min); color: #493323; - font-size: 40rpx; + font-size: 30rpx; } .input-placeholder { @@ -551,7 +553,7 @@ const prepareAgreement = () => showFeedback("协议页面准备中"); min-width: 142rpx; min-height: var(--app-touch-min); color: #a9160d; - font-size: 32rpx; + font-size: 28rpx; } .form-secondary-row { @@ -566,7 +568,7 @@ const prepareAgreement = () => showFeedback("协议页面准备中"); align-items: center; min-height: var(--app-touch-min); color: #a9160d; - font-size: 34rpx; + font-size: 28rpx; } .login-submit, @@ -591,8 +593,8 @@ const prepareAgreement = () => showFeedback("协议页面准备中"); z-index: 1; grid-area: 1 / 1; color: #fffaf1; - font-size: 52rpx; - letter-spacing: 8rpx; + font-size: 36rpx; + letter-spacing: 5rpx; } .other-login-divider { @@ -600,7 +602,7 @@ const prepareAgreement = () => showFeedback("协议页面准备中"); align-items: center; min-height: 30px; color: #9f6a27; - font-size: 32rpx; + font-size: 28rpx; white-space: nowrap; } @@ -626,8 +628,8 @@ const prepareAgreement = () => showFeedback("协议页面准备中"); min-height: var(--app-touch-min); height: var(--app-touch-min); color: #493323; - font-size: 40rpx; - letter-spacing: 3rpx; + font-size: 30rpx; + letter-spacing: 2rpx; } .wechat-login__content { @@ -651,7 +653,7 @@ const prepareAgreement = () => showFeedback("协议页面准备中"); justify-content: center; min-height: var(--app-touch-min); color: #493323; - font-size: 31rpx; + font-size: 28rpx; } .register-link { diff --git a/tests/a01-a02-ui-contract.ps1 b/tests/a01-a02-ui-contract.ps1 index bedb761..fe5a2b2 100644 --- a/tests/a01-a02-ui-contract.ps1 +++ b/tests/a01-a02-ui-contract.ps1 @@ -80,9 +80,10 @@ foreach ($forbidden in @( } $pageRule = [regex]::Match($entry, '(?ms)^\.auth-page\s*\{(?.*?)^\}') +$headerRule = [regex]::Match($entry, '(?ms)^\.auth-header\s*\{(?.*?)^\}') $paperRule = [regex]::Match($entry, '(?ms)^\.auth-paper\s*\{(?.*?)^\}') $contentRule = [regex]::Match($entry, '(?ms)^\.login-content\s*\{(?.*?)^\}') -foreach ($rule in @($pageRule, $paperRule, $contentRule)) { +foreach ($rule in @($pageRule, $headerRule, $paperRule, $contentRule)) { if (-not $rule.Success) { throw 'A01 adaptive layout rule is missing.' } } Assert-Contains -Content $pageRule.Groups['Body'].Value -Expected 'display: flex;' -Message 'A01 root must use flex flow.' @@ -91,6 +92,8 @@ Assert-Contains -Content $pageRule.Groups['Body'].Value -Expected 'min-height: v if ($pageRule.Groups['Body'].Value -match '(?m)^\s*height:\s*var\(--app-viewport-height\);') { throw 'A01 root must not lock content to the viewport.' } +Assert-Contains -Content $headerRule.Groups['Body'].Value -Expected 'height: calc(var(--app-safe-top) + min(36.5vw, 175px));' -Message 'A01 header must use the approved compact visible slot without distorting its image.' +Assert-Contains -Content $headerRule.Groups['Body'].Value -Expected 'overflow: hidden;' -Message 'A01 header must crop only the excess lower doorway inside its decorative slot.' Assert-Contains -Content $paperRule.Groups['Body'].Value -Expected 'flex: 1;' -Message 'A01 paper must receive remaining viewport space.' Assert-Contains -Content $contentRule.Groups['Body'].Value -Expected 'justify-content: space-between;' -Message 'A01 must distribute spare height in normal flow.' Assert-NotContains -Content $contentRule.Groups['Body'].Value -Unexpected 'grid-area:' -Message 'A01 interactive content must not overlap page artwork.' @@ -119,8 +122,8 @@ if (-not $dividerRule.Success) { foreach ($positioning in @('position: absolute', 'left: 50%', 'translateX(')) { Assert-NotContains -Content $dividerRule.Groups['Body'].Value -Unexpected $positioning -Message "A01 title divider must not use manual positioning: $positioning" } -Assert-Contains -Content $dividerRule.Groups['Body'].Value -Expected 'width: 360rpx;' -Message 'A01 title divider must be wide enough to remain visible on paper.' -Assert-Contains -Content $dividerRule.Groups['Body'].Value -Expected 'height: 60rpx;' -Message 'A01 title divider must retain a legible knot and line weight.' +Assert-Contains -Content $dividerRule.Groups['Body'].Value -Expected 'width: 280rpx;' -Message 'A01 compact title divider must remain visible on paper.' +Assert-Contains -Content $dividerRule.Groups['Body'].Value -Expected 'height: 46rpx;' -Message 'A01 compact title divider must retain a legible knot and line weight.' Assert-Contains -Content $dividerRule.Groups['Body'].Value -Expected 'filter: brightness(0.68) saturate(1.5) contrast(1.2);' -Message 'A01 title divider must keep sufficient contrast against the paper background.' $brandSealRule = [regex]::Match($entry, '(?ms)^\.brand-seal\s*\{(?.*?)^\}')