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 () => {