From bd999ecc09fcacf4016edcba85caf9b9696d2140 Mon Sep 17 00:00:00 2001
From: lrj <owen.stl@gmail.com>
Date: 星期六, 04 十月 2025 18:40:31 +0800
Subject: [PATCH] feat: 同步本地改动(认证/评审/用户/选手模块更新;新增/调整 GraphQL schema;小程序个人信息与评审相关页面、配置与资源等)

---
 web/src/views/login/index.vue |   80 +++++++++++++++++++++++++++++++++++----
 1 files changed, 71 insertions(+), 9 deletions(-)

diff --git a/web/src/views/login/index.vue b/web/src/views/login/index.vue
index 995bd4f..a714cc8 100644
--- a/web/src/views/login/index.vue
+++ b/web/src/views/login/index.vue
@@ -2,6 +2,7 @@
   <div class="login-container">
     <div class="login-box">
       <div class="login-header">
+        <img src="/logo.jpg" alt="钃夋槗鍒汱ogo" class="logo" />
         <h2>钃夋槗鍒涚鐞嗙郴缁�</h2>
         <p>姣旇禌绠$悊骞冲彴</p>
       </div>
@@ -62,6 +63,8 @@
 import { useRouter } from 'vue-router'
 import { ElMessage } from 'element-plus'
 import type { FormInstance, FormRules } from 'element-plus'
+// import { loginApi } from '@/utils/graphql'
+import { setToken, setUserInfo } from '@/utils/auth'
 
 const router = useRouter()
 const loginFormRef = ref<FormInstance>()
@@ -93,17 +96,68 @@
     await loginFormRef.value.validate()
     loading.value = true
     
-    // TODO: 璋冪敤鐧诲綍API
-    // 妯℃嫙鐧诲綍
-    setTimeout(() => {
-      localStorage.setItem('token', 'mock-token-' + Date.now())
-      ElMessage.success('鐧诲綍鎴愬姛')
-      router.push('/')
-      loading.value = false
-    }, 1000)
+    // 璋冪敤RESTful鐧诲綍API
+    const response = await fetch('/api/auth/web-login', {
+      method: 'POST',
+      headers: {
+        'Content-Type': 'application/json'
+      },
+      body: JSON.stringify({
+        phone: loginForm.phone,
+        password: loginForm.password
+      })
+    })
     
-  } catch (error) {
+    console.log('Response status:', response.status)
+    console.log('Response headers:', response.headers)
+    
+    // 妫�鏌ュ搷搴旀槸鍚︿负绌�
+    const responseText = await response.text()
+    console.log('Response text:', responseText)
+    
+    if (!responseText) {
+      throw new Error('鏈嶅姟鍣ㄨ繑鍥炵┖鍝嶅簲')
+    }
+    
+    let result
+    try {
+      result = JSON.parse(responseText)
+    } catch (jsonError) {
+      console.error('JSON瑙f瀽閿欒:', jsonError)
+      console.error('鍝嶅簲鍐呭:', responseText)
+      throw new Error('鏈嶅姟鍣ㄥ搷搴旀牸寮忛敊璇�')
+    }
+    
+    if (!response.ok) {
+      throw new Error(result.message || '鐧诲綍澶辫触')
+    }
+    
+    // 淇濆瓨token鍜岀敤鎴蜂俊鎭�
+    setToken(result.token)
+    setUserInfo(result.userInfo)
+    
+    ElMessage.success('鐧诲綍鎴愬姛')
+    router.push('/')
+    
+  } catch (error: any) {
     console.error('鐧诲綍澶辫触:', error)
+    
+    // 鏄剧ず閿欒淇℃伅
+    let errorMessage = '鐧诲綍澶辫触'
+    if (error.message) {
+      if (error.message.includes('鐢ㄦ埛涓嶅瓨鍦�')) {
+        errorMessage = '鐢ㄦ埛涓嶅瓨鍦紝璇锋鏌ユ墜鏈哄彿'
+      } else if (error.message.includes('瀵嗙爜涓嶆纭�')) {
+        errorMessage = '瀵嗙爜涓嶆纭紝璇烽噸鏂拌緭鍏�'
+      } else if (error.message.includes('娌℃湁鏉冮檺')) {
+        errorMessage = '鎮ㄦ病鏈夎闂潈闄愶紝璇疯仈绯荤鐞嗗憳'
+      } else {
+        errorMessage = error.message
+      }
+    }
+    
+    ElMessage.error(errorMessage)
+  } finally {
     loading.value = false
   }
 }
@@ -130,6 +184,14 @@
   text-align: center;
   margin-bottom: 30px;
   
+  .logo {
+    width: 80px;
+    height: 80px;
+    object-fit: contain;
+    margin-bottom: 20px;
+    border-radius: 8px;
+  }
+  
   h2 {
     color: #303133;
     font-size: 24px;

--
Gitblit v1.8.0