fix: clamp sms code autofill length

master
weizong song 4 months ago
parent 2d875c9611
commit d813605272

@ -125,6 +125,20 @@ function clearHint() {
apiHintTone.value = 'neutral'
}
function normalizeSmsCode(value: string): string {
return value.replace(/\D/g, '').slice(0, 6)
}
function onCaptchaInput(event: Event) {
const input = event.target as HTMLInputElement | null
const next = normalizeSmsCode(input?.value ?? '')
captcha.value = next
if (input && input.value !== next) {
input.value = next
}
captchaFieldError.value = false
}
function parseJsonErrorPayload(data: unknown): string {
if (data == null || typeof data !== 'object') return '请求失败'
const d = data as Record<string, unknown>
@ -251,8 +265,9 @@ async function sendCode() {
async function onSubmit() {
const mobileOk = /^1[3-9]\d{9}$/.test(mobile.value.trim())
const codeTrimmed = captcha.value.trim()
const captchaOk = codeTrimmed.length > 0
const codeTrimmed = normalizeSmsCode(captcha.value)
captcha.value = codeTrimmed
const captchaOk = codeTrimmed.length === 6
mobileFieldError.value = !mobileOk
captchaFieldError.value = mobileOk && !captchaOk
if (!mobileOk) {
@ -260,7 +275,7 @@ async function onSubmit() {
return
}
if (!captchaOk) {
setHint('请输入验证码', 'error')
setHint('请输入 6 位验证码', 'error')
return
}
clearHint()
@ -430,15 +445,17 @@ onUnmounted(() => {
/>
<div class="login-page-wls__code-row">
<input
v-model.trim="captcha"
:value="captcha"
type="text"
class="login-page-wls__input login-page-wls__input-code"
:class="{ 'login-page-wls__input--error': captchaFieldError }"
name="captcha"
autocomplete="one-time-code"
inputmode="numeric"
pattern="[0-9]*"
maxlength="6"
placeholder="验证码"
@input="captchaFieldError = false"
@input="onCaptchaInput"
/>
<button type="button" class="login-page-wls__code-btn" :disabled="codeDisabled" @click="sendCode">
{{ codeLabel }}

Loading…
Cancel
Save