From 7015287a6feb148cafa05482ca5e2be265bf2bb9 Mon Sep 17 00:00:00 2001 From: xingyu Date: Thu, 19 Oct 2023 17:01:49 +0800 Subject: [PATCH] feat: add pinia persist plugin --- package.json | 1 + pnpm-lock.yaml | 11 ++++++ src/components/Loading/src/createLoading.ts | 1 - src/store/index.ts | 2 ++ src/store/plugin/persist.ts | 38 +++++++++++++++++++++ 5 files changed, 52 insertions(+), 1 deletion(-) create mode 100644 src/store/plugin/persist.ts diff --git a/package.json b/package.json index 9021003..fba4abc 100644 --- a/package.json +++ b/package.json @@ -66,6 +66,7 @@ "nprogress": "^0.2.0", "path-to-regexp": "^6.2.1", "pinia": "^2.1.7", + "pinia-plugin-persistedstate": "^3.2.0", "print-js": "^1.6.0", "qs": "^6.11.2", "resize-observer-polyfill": "^1.5.1", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 88ead73..a989cd2 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -65,6 +65,9 @@ dependencies: pinia: specifier: ^2.1.7 version: 2.1.7(typescript@5.2.2)(vue@3.3.4) + pinia-plugin-persistedstate: + specifier: ^3.2.0 + version: 3.2.0(pinia@2.1.7) print-js: specifier: ^1.6.0 version: 1.6.0 @@ -7847,6 +7850,14 @@ packages: dev: true optional: true + /pinia-plugin-persistedstate@3.2.0(pinia@2.1.7): + resolution: {integrity: sha512-tZbNGf2vjAQcIm7alK40sE51Qu/m9oWr+rEgNm/2AWr1huFxj72CjvpQcIQzMknDBJEkQznCLAGtJTIcLKrKdw==} + peerDependencies: + pinia: ^2.0.0 + dependencies: + pinia: 2.1.7(typescript@5.2.2)(vue@3.3.4) + dev: false + /pinia@2.1.7(typescript@5.2.2)(vue@3.3.4): resolution: {integrity: sha512-+C2AHFtcFqjPih0zpYuvof37SFxMQ7OEG2zV9jRI12i9BOy3YQVAHwdKtyyc8pDcDyIc33WCIsZaCFWU7WWxGQ==} peerDependencies: diff --git a/src/components/Loading/src/createLoading.ts b/src/components/Loading/src/createLoading.ts index 72ba497..8aed9cc 100644 --- a/src/components/Loading/src/createLoading.ts +++ b/src/components/Loading/src/createLoading.ts @@ -21,7 +21,6 @@ export function createLoading(props?: Partial, target?: HTMLElemen vm = createVNode(LoadingWrap) if (wait) { - // TODO fix https://gitee.com/xingyuv/issues/438 setTimeout(() => { render(vm, document.createElement('div')) }, 0) diff --git a/src/store/index.ts b/src/store/index.ts index 4d393cb..abeb5fa 100644 --- a/src/store/index.ts +++ b/src/store/index.ts @@ -1,7 +1,9 @@ import type { App } from 'vue' import { createPinia } from 'pinia' +import { registerPiniaPersistPlugin } from '@/store/plugin/persist' const store = createPinia() +registerPiniaPersistPlugin(store) export function setupStore(app: App) { app.use(store) diff --git a/src/store/plugin/persist.ts b/src/store/plugin/persist.ts new file mode 100644 index 0000000..25be1ae --- /dev/null +++ b/src/store/plugin/persist.ts @@ -0,0 +1,38 @@ +/** + * Pinia Persist Plugin + * Pinia 持久化插件 + * @link https://prazdevs.github.io/pinia-plugin-persistedstate/zh/guide/ + * + */ +import type { Pinia } from 'pinia' +import { createPersistedState } from 'pinia-plugin-persistedstate' +import type { PersistedStateFactoryOptions } from 'pinia-plugin-persistedstate' +import { getCommonStoragePrefix } from '@/utils/env' + +export const PERSIST_KEY_PREFIX = getCommonStoragePrefix() + +// TODO customSerializer + +/** + * Register Pinia Persist Plugin + * 注册 Pinia 持久化插件 + * + * @param pinia Pinia instance Pinia 实例 + */ +export function registerPiniaPersistPlugin(pinia: Pinia) { + pinia.use(createPersistedState(createPersistedStateOptions(PERSIST_KEY_PREFIX))) +} + +/** + * Create Persisted State Options + * 创建持久化状态选项 + * + * @param keyPrefix prefix for storage key 储存键前缀 + * @returns persisted state factory options + */ +export function createPersistedStateOptions(keyPrefix: string): PersistedStateFactoryOptions { + return { + storage: localStorage, + key: id => `${keyPrefix}__${id}`, + } +}