From bf3f3a3afe012551efec094610f8e37cee5d613b Mon Sep 17 00:00:00 2001 From: chenlimao Date: Thu, 14 May 2026 17:13:29 +0800 Subject: [PATCH 1/2] =?UTF-8?q?fix=EF=BC=9A=E5=AE=9E=E7=8E=B0pinia?= =?UTF-8?q?=E6=95=B0=E6=8D=AE=E6=8C=81=E4=B9=85=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- package.json | 1 + src/main.js | 2 ++ src/store.js | 16 ++++++++-------- yarn.lock | 12 ++++++++++++ 4 files changed, 23 insertions(+), 8 deletions(-) diff --git a/package.json b/package.json index 090bdd0..92163dc 100644 --- a/package.json +++ b/package.json @@ -25,6 +25,7 @@ "@dcloudio/uni-quickapp-webview": "3.0.0-4060620250520001", "@dcloudio/uni-ui": "^1.5.11", "pinia": "2.0.36", + "pinia-plugin-persistedstate": "^4.7.1", "vue": "^3.4.21", "vue-i18n": "^9.1.9" }, diff --git a/src/main.js b/src/main.js index 4501e2c..0a0dccb 100644 --- a/src/main.js +++ b/src/main.js @@ -1,10 +1,12 @@ import { createSSRApp } from 'vue' import { createPinia } from 'pinia' +import piniaPluginPersistedstate from 'pinia-plugin-persistedstate' import App from './App.vue' export function createApp() { const app = createSSRApp(App) const pinia = createPinia() + pinia.use(piniaPluginPersistedstate) app.use(pinia) return { app diff --git a/src/store.js b/src/store.js index 7549772..b1ae6a0 100644 --- a/src/store.js +++ b/src/store.js @@ -154,14 +154,14 @@ export default defineStore("store", { }, }, - // 开启数据持久化 + // 数据持久化(via pinia-plugin-persistedstate) + // 仅持久化 user 和 device:身份凭证需在冷启动时恢复(如从分享链接进入) + // config、game 等运行时状态不持久化,每次联网后重新拉取 persist: { - enabled: true, - strategies: [ - { - storage: uni.getStorageSync, - paths: ["user", "device", "config"], // 只持久化用户信息 - }, - ], + storage: { + getItem: (key) => uni.getStorageSync(key), + setItem: (key, value) => uni.setStorageSync(key, value), + }, + paths: ['user', 'device'], }, }); diff --git a/yarn.lock b/yarn.lock index 155f790..d2e4afd 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2565,6 +2565,11 @@ default-gateway@^6.0.3: dependencies: execa "^5.0.0" +defu@^6.1.4: + version "6.1.7" + resolved "https://registry.npmmirror.com/defu/-/defu-6.1.7.tgz#72543567c8e9f97ff13ce402b6dbe09ac5ae4d23" + integrity sha512-7z22QmUWiQ/2d0KkdYmANbRUVABpZ9SNYyH5vx6PZ+nE5bcC0l7uFvEfHlyld/HcGBFTL536ClDt3DEcSlEJAQ== + depd@2.0.0: version "2.0.0" resolved "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz" @@ -3468,6 +3473,13 @@ pify@^2.3.0: resolved "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz" integrity sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog== +pinia-plugin-persistedstate@^4.7.1: + version "4.7.1" + resolved "https://registry.npmmirror.com/pinia-plugin-persistedstate/-/pinia-plugin-persistedstate-4.7.1.tgz#d13880e0b7efdafd1b73fca3d73cd64ae34bde84" + integrity sha512-WHOqh2esDlR3eAaknPbqXrkkj0D24h8shrDPqysgCFR6ghqP/fpFfJmMPJp0gETHsvrh9YNNg6dQfo2OEtDnIQ== + dependencies: + defu "^6.1.4" + pinia@2.0.36: version "2.0.36" resolved "https://registry.npmjs.org/pinia/-/pinia-2.0.36.tgz" From fcf346905b0155e581be0d9297cbd9af0d379c48 Mon Sep 17 00:00:00 2001 From: chenlimao Date: Thu, 14 May 2026 17:15:01 +0800 Subject: [PATCH 2/2] =?UTF-8?q?fix=EF=BC=9A=E5=8E=BB=E6=8E=89=E5=AF=B9?= =?UTF-8?q?=E6=88=98=E6=88=BF=E9=97=B4=E5=85=BC=E5=AE=B9=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/pages/friend-battle.vue | 24 +++--------------------- 1 file changed, 3 insertions(+), 21 deletions(-) diff --git a/src/pages/friend-battle.vue b/src/pages/friend-battle.vue index 2cac674..698524a 100644 --- a/src/pages/friend-battle.vue +++ b/src/pages/friend-battle.vue @@ -9,7 +9,7 @@ import Signin from "@/components/Signin.vue"; import CreateRoom from "@/components/CreateRoom.vue"; import Avatar from "@/components/Avatar.vue"; -import { getRoomAPI, joinRoomAPI, getBattleDataAPI, getHomeData } from "@/apis"; +import { getRoomAPI, joinRoomAPI, getBattleDataAPI } from "@/apis"; import { debounce, canEenter } from "@/util"; import useStore from "@/store"; @@ -88,26 +88,8 @@ onShow(async () => { onLoad(async (options) => { if (options.roomID) { roomID.value = options.roomID; - if (user.value.id) { - // 内存中有用户状态,直接进房 - enterRoom(options.roomID); - } else { - // 冷启动(如分享链接进入)时 Pinia 状态已重置,尝试用已存储的 token 静默恢复用户信息 - const env = uni.getAccountInfoSync().miniProgram.envVersion; - const token = uni.getStorageSync(`${env}_token`); - if (token) { - try { - const homeData = await getHomeData(); - if (homeData?.user) { - store.updateUser(homeData.user); - enterRoom(options.roomID); - return; - } - } catch {} - } - // token 不存在或已失效,弹出授权登录弹窗 - showSignin.value = true; - } + if (user.value.id) enterRoom(options.roomID); + else showSignin.value = true; } });