diff --git a/web/src/components/Login.vue b/web/src/components/Login.vue index ab716a4..363aa11 100644 --- a/web/src/components/Login.vue +++ b/web/src/components/Login.vue @@ -27,6 +27,7 @@ let pageState = usePageState(); let router = useRouter(); let account = ref(""); let password = ref(""); +let loading = ref(false); // 站点演示模式 const demoSiteSet = () => { @@ -89,13 +90,36 @@ onMounted(async () => { // 登录 let clickLogin = async () => { - const rspe = await request.post('/auth', { username: account.value, passwd: password.value }); - const rsp = rspe.data; - if (rsp.code != 200) { - toast(rsp.msg); - } else { - pageState.setToken(rsp.data.token); - router.push('/'); + // 防止重复提交 + if (loading.value) { + return; + } + + // 验证输入 + if (!account.value.trim() || !password.value.trim()) { + toast.error('请输入账号和密码'); + return; + } + + loading.value = true; + + try { + const rspe = await request.post('/auth', { username: account.value, passwd: password.value }); + const rsp = rspe.data; + if (rsp.code != 200) { + toast.error(rsp.msg); + } else { + pageState.setToken(rsp.data.token); + toast.success('登录成功'); + // 延迟一下再跳转,让用户看到成功提示 + setTimeout(() => { + router.push('/'); + }, 500); + } + } catch (error) { + toast.error('登录失败,请检查网络连接'); + } finally { + loading.value = false; } }; @@ -134,8 +158,12 @@ let clickLogin = async () => {