From a53bbc3319c6774be0aa16351183ed827ed22b19 Mon Sep 17 00:00:00 2001 From: BuildingBlocksLin <835606593@qq.com> Date: Mon, 26 Jan 2026 10:26:06 +0800 Subject: [PATCH] =?UTF-8?q?feat=20=E9=A6=96=E9=A1=B5=E4=B8=8D=E7=99=BB?= =?UTF-8?q?=E9=99=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .trae/rules/project_rules.md | 4 +++ pages.json | 12 +++---- pages/index/index.vue | 15 ++++++-- pages/mine/mine.vue | 1 + utils/api.js | 68 ++++++++++++++++++++++-------------- 5 files changed, 66 insertions(+), 34 deletions(-) create mode 100644 .trae/rules/project_rules.md diff --git a/.trae/rules/project_rules.md b/.trae/rules/project_rules.md new file mode 100644 index 0000000..b35b1f2 --- /dev/null +++ b/.trae/rules/project_rules.md @@ -0,0 +1,4 @@ +1. 本项目是用Uni APP构建的 +2. 务必保证代码可维护性,做好模块划分 +3. 不要过度理解需求,尽量保持需求的简单性 +4. 保持最小修改,不要大刀阔斧的改动代码 \ No newline at end of file diff --git a/pages.json b/pages.json index 397d3c5..f4f3ad7 100644 --- a/pages.json +++ b/pages.json @@ -1,5 +1,11 @@ { "pages": [ + { + "path": "pages/gameplay/gameplay", + "style": { + "navigationBarTitleText": "玩法选择" + } + }, { "path": "pages/index/index", "style": { @@ -19,12 +25,6 @@ "navigationStyle": "custom" } }, - { - "path": "pages/gameplay/gameplay", - "style": { - "navigationBarTitleText": "玩法选择" - } - }, { "path": "pages/random/random", "style": { diff --git a/pages/index/index.vue b/pages/index/index.vue index 47498e8..30e2da0 100644 --- a/pages/index/index.vue +++ b/pages/index/index.vue @@ -13,7 +13,12 @@ - + + 🔐 + 需要登录 + 登录后才会记录答题记录 + + {{ record.category }} @@ -105,7 +110,8 @@ export default { isFirstLoad: true, showDetail: false, detailQuestion: null, - detailLoading: false + detailLoading: false, + isNotLoggedIn: false } }, @@ -168,6 +174,7 @@ export default { if (!isLoadMore) { this.currentPage = 1 this.hasMore = true + this.isNotLoggedIn = false } if (!this.hasMore) return @@ -198,6 +205,10 @@ export default { } } catch (error) { console.error('获取答题记录失败:', error) + // 检查是否是401错误 + if (error.message && error.message.includes('401')) { + this.isNotLoggedIn = true + } } finally { this.isLoading = false } diff --git a/pages/mine/mine.vue b/pages/mine/mine.vue index 1ea7fdd..11a595f 100644 --- a/pages/mine/mine.vue +++ b/pages/mine/mine.vue @@ -67,6 +67,7 @@ export default { success: (res) => { if (res.confirm) { storage.removeToken() + storage.removeRefreshToken() storage.removeUserInfo() storage.removeQuestion() storage.clearAnsweredQuestions() diff --git a/utils/api.js b/utils/api.js index bd8934f..0552dde 100644 --- a/utils/api.js +++ b/utils/api.js @@ -22,6 +22,7 @@ const request = (options) => { console.log('Data:', options.data) const token = storage.getToken() + const { noAuthModal = false } = options uni.request({ url: fullUrl, @@ -106,16 +107,24 @@ const request = (options) => { storage.removeRefreshToken() storage.removeUserInfo() - uni.showModal({ - title: '登录过期', - content: '请重新登录', - showCancel: false, - success: () => { - uni.reLaunch({ - url: '/pages/login/login' - }) - } - }) + if (!noAuthModal) { + uni.showModal({ + title: '登录过期', + content: '请重新登录', + showCancel: false, + success: () => { + uni.reLaunch({ + url: '/pages/login/login' + }) + } + }) + } else { + // 不弹出窗口,直接返回错误 + const error = new Error('401 Unauthorized') + error.statusCode = 401 + reject(error) + return + } reject(refreshError) } @@ -126,22 +135,26 @@ const request = (options) => { console.error('=== 业务错误 ===') console.error('Code:', data.code) console.error('Message:', data.message) - uni.showModal({ - title: '请求失败', - content: data.message || '服务器返回错误', - showCancel: false - }) + if (!noAuthModal) { + uni.showModal({ + title: '请求失败', + content: data.message || '服务器返回错误', + showCancel: false + }) + } reject(data) } } else { console.error('=== HTTP错误 ===') console.error('StatusCode:', statusCode) console.error('Response:', data) - uni.showModal({ - title: '网络错误', - content: `状态码: ${statusCode}`, - showCancel: false - }) + if (!noAuthModal) { + uni.showModal({ + title: '网络错误', + content: `状态码: ${statusCode}`, + showCancel: false + }) + } reject(res) } }, @@ -161,11 +174,13 @@ const request = (options) => { } } - uni.showModal({ - title: '错误', - content: errorMsg, - showCancel: false - }) + if (!noAuthModal) { + uni.showModal({ + title: '错误', + content: errorMsg, + showCancel: false + }) + } reject(err) } }) @@ -216,7 +231,8 @@ const api = { data: { page, page_size: pageSize - } + }, + noAuthModal: true }) },