完成50%
This commit is contained in:
@@ -220,23 +220,25 @@ $smsCodeCopy = ConvertFrom-Utf8Base64 '55+t5L+h6aqM6K+B56CB'
|
||||
Assert-Contains -Content $entry -Expected $smsCodeCopy -Message 'A01 SMS state must use the full SMS code field label.'
|
||||
|
||||
foreach ($contract in @(
|
||||
'const activeLoginMethod = ref("password")',
|
||||
'const activeLoginMethod = ref("sms")',
|
||||
'const passwordVisible = ref(false)',
|
||||
'const LOGIN_METHOD_STORAGE_KEY = "a01:last-login-method"',
|
||||
'uni.getStorageSync(LOGIN_METHOD_STORAGE_KEY)',
|
||||
'uni.setStorageSync(LOGIN_METHOD_STORAGE_KEY, method)',
|
||||
'login-tab--unavailable',
|
||||
'aria-disabled="true"',
|
||||
'const switchLoginMethod = (method) =>',
|
||||
'const togglePasswordVisibility = () =>',
|
||||
'/pages/auth/a04-register',
|
||||
'/pages/auth/a05-reset-password',
|
||||
'class="feedback-toast"',
|
||||
'class="verification-layer"',
|
||||
'class="login-submit"',
|
||||
'<AppToast :visible="feedbackVisible" :message="feedbackMessage" />',
|
||||
'<TacVerification',
|
||||
'AUTH_TAC_SCENE.SMS_LOGIN',
|
||||
'normalizeTacSuccess',
|
||||
'appApi.loginWithSms',
|
||||
'PASSWORD_TAC_BLOCKED_MESSAGE',
|
||||
'login-submit',
|
||||
'class="agreement-error"',
|
||||
'const agreementError = ref(false)'
|
||||
)) {
|
||||
Assert-Contains -Content $entry -Expected $contract -Message "A01 is missing state or interaction contract: $contract"
|
||||
}
|
||||
Assert-NotContains -Content $entry -Unexpected 'a01:last-login-method' -Message '密码登录后端未闭环前不得恢复为首屏或记忆入口。'
|
||||
|
||||
foreach ($nativeUi in @('uni.showToast', 'uni.showModal', 'uni.showLoading', 'uni.showActionSheet')) {
|
||||
Assert-NotContains -Content $entry -Unexpected $nativeUi -Message "A01 must not use native UniApp feedback: $nativeUi"
|
||||
@@ -251,11 +253,6 @@ Assert-NotContains -Content $entry -Unexpected 'a01-icon-eye-closed-v1.png' -Mes
|
||||
Assert-NotContains -Content $entry -Unexpected 'a01-icon-verification-v1.png' -Message 'A01 SMS field must use a message-code icon instead of a success-state checkmark.'
|
||||
Assert-NotContains -Content $entry -Unexpected 'a01-icon-sms-code-v1.svg' -Message 'A01 SMS field must use the custom generated icon instead of the temporary third-party SVG.'
|
||||
Assert-NotContains -Content $entry -Unexpected '@media (max-height:' -Message 'A01 must scroll naturally on short screens instead of compressing the selected design with height breakpoints.'
|
||||
Assert-NotContains -Content $entry -Unexpected 'feedback-toast__skin' -Message 'A01 feedback Toast must use the dedicated nine-slice border asset instead of an absolutely stretched image.'
|
||||
|
||||
$feedbackToastRule = [regex]::Match($entry, '(?ms)^\.feedback-toast\s*\{(?<Body>.*?)^\}')
|
||||
if (-not $feedbackToastRule.Success) {
|
||||
throw 'A01 is missing the custom feedback Toast style rule.'
|
||||
}
|
||||
Assert-Contains -Content $feedbackToastRule.Groups['Body'].Value -Expected '@include adaptive.adaptive-feedback-toast;' -Message 'A01 feedback Toast must consume the approved shared nine-slice profile.'
|
||||
Assert-Contains -Content $entry -Expected 'import AppToast from "@/components/AppToast.vue";' -Message 'A01 feedback must consume the shared live-region Toast owner.'
|
||||
Assert-NotContains -Content $entry -Unexpected 'class="feedback-toast"' -Message 'A01 must not duplicate the shared Toast implementation.'
|
||||
Write-Output 'A01-LOGIN-MERGE-CONTRACT PASS'
|
||||
|
||||
Reference in New Issue
Block a user