From e1a4fa02542415974e4d3584deeb97969d04d094 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E4=B9=98=E9=A3=8E?= Date: Tue, 13 Jan 2026 14:47:07 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BC=98=E5=8C=96=E7=94=A8=E6=88=B7=E4=BF=A1?= =?UTF-8?q?=E6=81=AF=E5=88=9D=E5=A7=8B=E5=8C=96=E5=92=8C=E6=95=B0=E6=8D=AE?= =?UTF-8?q?=E5=BA=93=E7=AE=A1=E7=90=86=EF=BC=8C=E7=A1=AE=E4=BF=9D=E5=BA=94?= =?UTF-8?q?=E7=94=A8=E5=90=AF=E5=8A=A8=E6=97=B6=E4=B8=8D=E9=98=BB=E5=A1=9E?= =?UTF-8?q?=EF=BC=8C=E5=B9=B6=E5=9C=A8=E7=94=A8=E6=88=B7=E7=99=BB=E5=BD=95?= =?UTF-8?q?=E5=90=8E=E5=BC=82=E6=AD=A5=E5=88=9D=E5=A7=8B=E5=8C=96=E6=95=B0?= =?UTF-8?q?=E6=8D=AE=E5=BA=93=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- TouchVueThree/src/main.ts | 5 +++- TouchVueThree/src/stores/modules/user.ts | 13 +++++++++- .../stores/modules/wechat/useSessionStore.ts | 26 ++++++++++++++++--- 3 files changed, 39 insertions(+), 5 deletions(-) diff --git a/TouchVueThree/src/main.ts b/TouchVueThree/src/main.ts index bba8b86..c1ee226 100644 --- a/TouchVueThree/src/main.ts +++ b/TouchVueThree/src/main.ts @@ -21,7 +21,10 @@ app.use(pinia) // ==================== 初始化用户信息 ==================== const userStore = useUserStore() -userStore.initUser() +// 异步初始化用户信息和数据库(不阻塞应用启动) +userStore.initUser().catch((error) => { + console.error('初始化用户信息失败:', error) +}) // ==================== 配置 Element Plus ==================== app.use(ElementPlus, { diff --git a/TouchVueThree/src/stores/modules/user.ts b/TouchVueThree/src/stores/modules/user.ts index 60eb64f..19fec5a 100644 --- a/TouchVueThree/src/stores/modules/user.ts +++ b/TouchVueThree/src/stores/modules/user.ts @@ -181,7 +181,7 @@ export const useUserStore = defineStore('user', () => { /** * 初始化用户信息(从本地存储恢复) */ - const initUser = () => { + const initUser = async () => { const savedToken = localStorage.getItem('token') const savedToken2 = localStorage.getItem('token2') const savedUser = localStorage.getItem('user-store') @@ -199,6 +199,17 @@ export const useUserStore = defineStore('user', () => { const parsed = JSON.parse(savedUser) if (parsed.state?.user) { user.value = parsed.state.user + + // ⭐ 如果用户已登录,初始化数据库 + if (user.value?.id) { + try { + await databaseManager.ensureDatabase(user.value.id) + console.log('✅ 数据库已初始化(从本地存储恢复)') + } catch (error) { + console.error('初始化数据库失败:', error) + // 不阻断用户使用,降级到纯API模式 + } + } } } catch (error) { console.warn('恢复用户信息失败:', error) diff --git a/TouchVueThree/src/stores/modules/wechat/useSessionStore.ts b/TouchVueThree/src/stores/modules/wechat/useSessionStore.ts index 2d15226..b56da91 100644 --- a/TouchVueThree/src/stores/modules/wechat/useSessionStore.ts +++ b/TouchVueThree/src/stores/modules/wechat/useSessionStore.ts @@ -15,7 +15,9 @@ import { defineStore } from 'pinia' import { ref, computed, onUnmounted } from 'vue' import type { ChatSession } from '@/utils/db' import { SessionManager } from '@/utils/dbManagers/SessionManager' +import { databaseManager } from '@/utils/db' import { getSessionList, clearUnread as clearUnreadAPI } from '@/api' +import { useUserStore } from '@/stores/modules/user' import { ElMessage } from 'element-plus' // ==================== 辅助类型 ==================== @@ -78,9 +80,10 @@ export const useSessionStore = defineStore('wechat-session', () => { * @param accountId 账号ID(可选,0表示全部) * * 执行流程: - * 1. 从 IndexedDB 读取缓存(立即显示) - * 2. 订阅数据库变更(自动更新 UI) - * 3. 后台同步服务器数据(分页加载) + * 1. 确保数据库已初始化 + * 2. 从 IndexedDB 读取缓存(立即显示) + * 3. 订阅数据库变更(自动更新 UI) + * 4. 后台同步服务器数据(分页加载) */ const init = async (accountId: number = 0) => { try { @@ -88,6 +91,23 @@ export const useSessionStore = defineStore('wechat-session', () => { currentAccountId.value = accountId + // ⭐ 步骤0:确保数据库已初始化 + const userStore = useUserStore() + const userId = userStore.userId + + if (!userId) { + console.warn('⚠️ 用户未登录,无法初始化数据库') + ElMessage.warning('请先登录') + return + } + + // 检查数据库是否已初始化 + if (!databaseManager.isInitialized()) { + console.log('📗 数据库未初始化,正在初始化...') + await databaseManager.ensureDatabase(userId) + console.log('✅ 数据库初始化完成') + } + // ⭐ 步骤1:从 IndexedDB 读取缓存(立即显示) sessions.value = await SessionManager.getUserSessions(accountId) console.log(`✅ 缓存读取完成,共 ${sessions.value.length} 个会话`)