Files
ai-agent-admin/web/packages/stores/src/setup.ts
T

54 lines
1.4 KiB
TypeScript

import type { Pinia } from 'pinia';
import type { App } from 'vue';
import { createPinia } from 'pinia';
let pinia: Pinia;
export interface InitStoreOptions {
/**
* @zh_CN 应用名,由于 @vben/stores 是公用的,后续可能有多个app,为了防止多个app缓存冲突,可在这里配置应用名,应用名将被用于持久化的前缀
*/
namespace: string;
}
/**
* @zh_CN 初始化pinia
*/
export async function initStores(app: App, options: InitStoreOptions) {
const { createPersistedState } = await import('pinia-plugin-persistedstate');
pinia = createPinia();
const { namespace } = options;
pinia.use(
createPersistedState({
// key $appName-$store.id
key: (storeKey) => `${namespace}-${storeKey}`,
storage: localStorage,
}),
);
app.use(pinia);
return pinia;
}
export function resetAllStores() {
if (!pinia) {
console.error('Pinia is not installed');
return;
}
const allStores = (pinia as any)._s;
for (const [_key, store] of allStores) {
try {
// 检查 store 是否有 $reset 方法
if (typeof store.$reset === 'function') {
store.$reset();
} else {
// 对于使用 setup 语法的 store,手动清理状态
console.warn(`Store ${_key} does not implement $reset(), skipping...`);
}
} catch (error) {
console.error(`Failed to reset store ${_key}:`, error);
}
}
}