From 0a48616045ddce1562584543a0e89e5144051fde Mon Sep 17 00:00:00 2001
From: Codex Assistant <codex@example.com>
Date: 星期日, 05 十月 2025 14:52:44 +0800
Subject: [PATCH] 报名审核

---
 wx/app.js |  240 ++++++++++++++++++++++++++++++++++++++++++++++-------------
 1 files changed, 186 insertions(+), 54 deletions(-)

diff --git a/wx/app.js b/wx/app.js
index 574b272..57d5a4b 100644
--- a/wx/app.js
+++ b/wx/app.js
@@ -134,38 +134,18 @@
     }
     
     console.log('=== 鍑嗗璋冪敤鍚庣wxLogin鎺ュ彛 ===')
-    console.log('璇锋眰URL:', this.globalData.baseUrl)
+    console.log('璇锋眰URL:', 'http://localhost:8080/api/auth/wx-login')
     console.log('璁惧淇℃伅:', deviceInfo)
     console.log('璇锋眰鍙傛暟:', requestData)
     console.log('璇锋眰寮�濮嬫椂闂�:', new Date().toISOString())
     
     wx.request({
-      url: this.globalData.baseUrl,
+      url: 'http://localhost:8080/api/auth/wx-login',
       method: 'POST',
       header: {
         'Content-Type': 'application/json'
       },
-      data: {
-        query: `
-          mutation wxLogin($input: WxLoginRequest!) {
-            wxLogin(input: $input) {
-              token
-              userInfo {
-                userId
-                name
-                phone
-                wxOpenid
-              }
-              isNewUser
-              loginRecordId
-              sessionKey
-            }
-          }
-        `,
-        variables: {
-          input: requestData
-        }
-      },
+      data: requestData,
       success: (res) => {
         console.log('=== 鍚庣wxLogin鎺ュ彛鍝嶅簲 ===')
         console.log('鍝嶅簲鏃堕棿:', new Date().toISOString())
@@ -182,17 +162,28 @@
           return
         }
         
-        if (res.data.errors) {
-          console.error('鉂� GraphQL閿欒:', res.data.errors)
+        // 妫�鏌ユ槸鍚︽湁閿欒淇℃伅锛堥�傞厤涓嶅悓鐨勯敊璇搷搴旀牸寮忥級
+        if (res.data.error || res.data.message || res.data.success === false) {
+          const errorMsg = res.data.error || res.data.message || '鐧诲綍澶辫触'
+          console.error('鉂� 鐧诲綍澶辫触:', errorMsg)
           wx.showToast({
-            title: '鐧诲綍澶辫触',
+            title: errorMsg,
             icon: 'error'
           })
           return
         }
         
-        if (res.data.data && res.data.data.wxLogin) {
-          const loginResult = res.data.data.wxLogin
+        // 妫�鏌ュ搷搴旀暟鎹牸寮忥細鏀寔鐩存帴杩斿洖WxLoginResponse鎴栧寘瑁呮牸寮�
+        let loginResult = null
+        if (res.data.token && res.data.userInfo) {
+          // 鐩存帴杩斿洖WxLoginResponse鏍煎紡
+          loginResult = res.data
+        } else if (res.data.success && res.data.data) {
+          // 鍖呰鏍煎紡 {success: true, data: WxLoginResponse}
+          loginResult = res.data.data
+        }
+        
+        if (loginResult) {
           
           console.log('鉁� 鐧诲綍鎴愬姛!')
           console.log('鐢ㄦ埛ID:', loginResult.userInfo.userId)
@@ -227,10 +218,10 @@
             console.log('鈩癸笍 鑰佺敤鎴锋垨宸叉嫆缁濇墜鏈哄彿鎺堟潈锛岃烦杩囨巿鏉冨脊绐�')
           }
         } else {
-          console.error('鉂� 鍝嶅簲鏁版嵁鏍煎紡閿欒锛岀己灏憌xLogin瀛楁')
+          console.error('鉂� 鍝嶅簲鏁版嵁鏍煎紡閿欒锛岀己灏戝繀瑕佸瓧娈�(token鎴杣serInfo)')
           console.error('瀹為檯鍝嶅簲:', res.data)
           wx.showToast({
-            title: '鐧诲綍澶辫触',
+            title: '鐧诲綍鏁版嵁鏍煎紡閿欒',
             icon: 'error'
           })
         }
@@ -285,33 +276,174 @@
   // GraphQL璇锋眰灏佽
   graphqlRequest(query, variables = {}) {
     return new Promise((resolve, reject) => {
-      wx.request({
-        url: this.globalData.baseUrl,
-        method: 'POST',
-        header: {
-          'Content-Type': 'application/json',
-          'Authorization': this.globalData.token ? `Bearer ${this.globalData.token}` : ''
-        },
-        data: {
-          query: query,
-          variables: variables
-        },
-        success: (res) => {
-          console.log('GraphQL鍝嶅簲:', res.data)
-          if (res.data.errors) {
-            console.error('GraphQL閿欒:', res.data.errors)
-            reject(res.data.errors)
-          } else if (res.data.data) {
-            resolve(res.data.data)
+      this._makeGraphQLRequest(query, variables, resolve, reject, false)
+    })
+  },
+
+  // 鍐呴儴GraphQL璇锋眰鏂规硶锛屾敮鎸侀噸璇曟満鍒�
+  _makeGraphQLRequest(query, variables, resolve, reject, isRetry = false) {
+    // 纭繚token鐨勪竴鑷存�э細浼樺厛浣跨敤globalData涓殑token锛屽鏋滄病鏈夊垯浠巗torage鑾峰彇
+    let token = this.globalData.token
+    if (!token) {
+      token = wx.getStorageSync('token')
+      if (token) {
+        this.globalData.token = token // 鍚屾鍒癵lobalData
+      }
+    }
+
+    wx.request({
+      url: this.globalData.baseUrl,
+      method: 'POST',
+      header: {
+        'Content-Type': 'application/json',
+        'Authorization': token ? `Bearer ${token}` : ''
+      },
+      data: {
+        query: query,
+        variables: variables
+      },
+      success: (res) => {
+        console.log('GraphQL鍝嶅簲:', res.data)
+        
+        // 妫�鏌TTP鐘舵�佺爜
+        if (res.statusCode !== 200) {
+          // 瀵逛簬401鐘舵�佺爜锛屽彲鑳芥槸璁よ瘉閿欒锛岄渶瑕佹鏌ュ搷搴斿唴瀹�
+          if (res.statusCode === 401 && res.data && res.data.errors) {
+            console.log('鏀跺埌401鐘舵�佺爜锛屾鏌ユ槸鍚︿负璁よ瘉閿欒')
+            // 缁х画澶勭悊锛岃涓嬮潰鐨凣raphQL閿欒妫�鏌ラ�昏緫澶勭悊璁よ瘉閿欒
           } else {
-            console.error('GraphQL鍝嶅簲寮傚父:', res.data)
-            reject('璇锋眰澶辫触')
+            console.error('GraphQL HTTP閿欒:', res.statusCode)
+            reject(new Error(`HTTP閿欒: ${res.statusCode}`))
+            return
           }
-        },
-        fail: (err) => {
-          reject(err)
         }
-      })
+
+        // 妫�鏌raphQL閿欒
+        if (res.data && res.data.errors) {
+          console.error('GraphQL閿欒:', res.data.errors)
+          
+          // 妫�鏌ユ槸鍚︽槸璁よ瘉閿欒锛坱oken杩囨湡鎴栨棤鏁堬級
+          const authErrors = res.data.errors.filter(error => 
+            error.message && (
+              error.message.includes('娌℃湁鏉冮檺璁块棶') ||
+              error.message.includes('璇峰厛鐧诲綍') ||
+              error.message.includes('UNAUTHORIZED') ||
+              error.extensions?.code === 'UNAUTHORIZED'
+            )
+          )
+          
+          if (authErrors.length > 0 && !isRetry) {
+            console.log('馃攧 妫�娴嬪埌璁よ瘉閿欒锛屽皾璇曢噸鏂扮櫥褰�...')
+            // 娓呴櫎杩囨湡鐨勮璇佷俊鎭�
+            this.globalData.token = null
+            this.globalData.userInfo = null
+            this.globalData.sessionKey = null
+            wx.removeStorageSync('token')
+            wx.removeStorageSync('userInfo')
+            wx.removeStorageSync('sessionKey')
+            
+            // 閲嶆柊鐧诲綍
+            wx.login({
+              success: (loginRes) => {
+                if (loginRes.code) {
+                  console.log('馃攧 閲嶆柊鑾峰彇寰俊code鎴愬姛锛岃皟鐢ㄥ悗绔櫥褰�...')
+                  this._retryAfterLogin(loginRes.code, query, variables, resolve, reject)
+                } else {
+                  console.error('鉂� 閲嶆柊鑾峰彇寰俊code澶辫触')
+                  reject(new Error('閲嶆柊鐧诲綍澶辫触'))
+                }
+              },
+              fail: (err) => {
+                console.error('鉂� 閲嶆柊鐧诲綍澶辫触:', err)
+                reject(new Error('閲嶆柊鐧诲綍澶辫触'))
+              }
+            })
+            return
+          }
+          
+          reject(new Error(res.data.errors[0]?.message || 'GraphQL璇锋眰閿欒'))
+          return
+        }
+
+        // 妫�鏌ユ暟鎹�
+        if (res.data.data !== undefined) {
+          resolve(res.data.data)
+        } else {
+          console.error('GraphQL鍝嶅簲寮傚父:', res.data)
+          reject(new Error('GraphQL鍝嶅簲鏁版嵁寮傚父'))
+        }
+      },
+      fail: (err) => {
+        console.error('GraphQL缃戠粶璇锋眰澶辫触:', err)
+        reject(new Error('缃戠粶璇锋眰澶辫触'))
+      }
+    })
+  },
+
+  // 閲嶆柊鐧诲綍鍚庨噸璇旼raphQL璇锋眰
+  _retryAfterLogin(code, query, variables, resolve, reject) {
+    const that = this
+    const deviceInfo = this.getDeviceInfo()
+    const requestData = {
+      code: code,
+      loginIp: '127.0.0.1', // 灏忕▼搴忔棤娉曡幏鍙栫湡瀹濱P锛屼娇鐢ㄩ粯璁ゅ��
+      deviceInfo: deviceInfo
+    }
+    
+    wx.request({
+      url: 'http://localhost:8080/api/auth/wx-login',
+      method: 'POST',
+      header: {
+        'Content-Type': 'application/json'
+      },
+      data: requestData,
+      success: (res) => {
+        console.log('馃攧 閲嶆柊鐧诲綍鍝嶅簲:', res.data)
+        
+        if (res.statusCode !== 200 || res.data.error) {
+          console.error('鉂� 閲嶆柊鐧诲綍澶辫触:', res.data.error || res.data.message)
+          reject(new Error('閲嶆柊鐧诲綍澶辫触'))
+          return
+        }
+        
+        // 妫�鏌ュ搷搴旀暟鎹牸寮�
+        let loginResult = null
+        if (res.data.token && res.data.userInfo) {
+          loginResult = res.data
+        } else if (res.data.success && res.data.data) {
+          loginResult = res.data.data
+        }
+        
+        if (loginResult && loginResult.token) {
+          console.log('鉁� 閲嶆柊鐧诲綍鎴愬姛锛屾洿鏂皌oken')
+          
+          // 淇濆瓨鏂扮殑鐧诲綍淇℃伅
+          try {
+            wx.setStorageSync('token', loginResult.token)
+            wx.setStorageSync('userInfo', loginResult.userInfo)
+            if (loginResult.sessionKey) {
+              wx.setStorageSync('sessionKey', loginResult.sessionKey)
+            }
+          } catch (storageErr) {
+            console.error('鉂� 淇濆瓨閲嶆柊鐧诲綍淇℃伅澶辫触:', storageErr)
+          }
+          
+          that.globalData.token = loginResult.token
+          that.globalData.userInfo = loginResult.userInfo
+          that.globalData.sessionKey = loginResult.sessionKey
+          
+          // 浣跨敤鏂皌oken閲嶈瘯鍘熷璇锋眰
+          console.log('馃攧 浣跨敤鏂皌oken閲嶈瘯GraphQL璇锋眰...')
+          that._makeGraphQLRequest(query, variables, resolve, reject, true)
+        } else {
+          console.error('鉂� 閲嶆柊鐧诲綍鍝嶅簲鏍煎紡閿欒')
+          reject(new Error('閲嶆柊鐧诲綍鍝嶅簲鏍煎紡閿欒'))
+        }
+      },
+      fail: (err) => {
+        console.error('鉂� 閲嶆柊鐧诲綍缃戠粶璇锋眰澶辫触:', err)
+        reject(new Error('閲嶆柊鐧诲綍缃戠粶璇锋眰澶辫触'))
+      }
     })
   }
 })
\ No newline at end of file

--
Gitblit v1.8.0