Show dialog for user SMS login errors

This commit is contained in:
2026-07-09 12:12:15 +08:00
parent 34d6dd01c7
commit c56a4b49e1
2 changed files with 53 additions and 2 deletions

View File

@@ -15,6 +15,7 @@ const captchaImage = ref("");
const loading = ref(false);
const captchaLoading = ref(false);
const message = ref("请先完成图形验证码,再获取短信验证码。");
const errorDialog = ref("");
onMounted(() => {
void loadCaptcha();
@@ -36,7 +37,7 @@ async function loadCaptcha() {
async function sendCode() {
if (!captchaId.value || captchaCode.value.length < 4) {
message.value = "请先输入图形验证码";
showError("请先输入图形验证码");
return;
}
loading.value = true;
@@ -46,7 +47,7 @@ async function sendCode() {
message.value = "短信验证码已发送,请查收。";
await loadCaptcha();
} catch (error) {
message.value = error instanceof Error ? error.message : "发送失败";
showError(error instanceof Error ? error.message : "发送失败");
await loadCaptcha();
} finally {
loading.value = false;
@@ -66,6 +67,11 @@ async function login() {
loading.value = false;
}
}
function showError(text: string) {
message.value = text;
errorDialog.value = text;
}
</script>
<template>
@@ -109,5 +115,13 @@ async function login() {
{{ loading ? "处理中..." : "立即进入" }}
</button>
<div class="form-tip">{{ message }}</div>
<div v-if="errorDialog" class="dialog-mask" role="alertdialog" aria-modal="true" aria-labelledby="login-error-title">
<div class="dialog-box">
<strong id="login-error-title">无法发送验证码</strong>
<p>{{ errorDialog }}</p>
<button type="button" class="primary" @click="errorDialog = ''">知道了</button>
</div>
</div>
</section>
</template>

View File

@@ -177,6 +177,43 @@ button:disabled {
font-size: 13px;
}
.dialog-mask {
position: absolute;
inset: 0;
z-index: 20;
display: grid;
place-items: center;
padding: 24px;
background: rgba(12, 24, 20, 0.42);
}
.dialog-box {
width: min(100%, 320px);
padding: 22px;
border-radius: 18px;
background: #ffffff;
box-shadow: 0 18px 48px rgba(15, 31, 26, 0.22);
}
.dialog-box strong {
display: block;
color: #17211d;
font-size: 18px;
line-height: 1.35;
}
.dialog-box p {
margin: 10px 0 18px;
color: #51655d;
font-size: 14px;
line-height: 1.7;
}
.dialog-box .primary {
width: 100%;
margin-top: 0;
}
.topbar {
height: 72px;
display: grid;