| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859 |
- import type { Preference } from '@vben-core/typings';
- class PreferenceCache {
- cachePrefix: string;
- constructor(cachePrefix: string) {
- this.cachePrefix = cachePrefix;
- }
- /**
- * 从 localStorage 中获取偏好设置
- * @returns 返回从 localStorage 中获取的偏好设置,如果没有获取到,则返回默认偏好设置。
- */
- get(defaultValue: Preference): Preference {
- let cache = defaultValue;
- try {
- cache = JSON.parse(localStorage.getItem(this.getCacheKey()) || '');
- } catch {
- return defaultValue;
- }
- return cache;
- }
- /**
- * 获取偏好设置的缓存键
- */
- getCacheKey(name: string = 'preference') {
- return `__${this.cachePrefix}-${name}__`;
- }
- /**
- * 从 localStorage 中移除偏好设置
- */
- remove() {
- localStorage.removeItem(this.getCacheKey());
- localStorage.removeItem(this.getCacheKey('locale'));
- localStorage.removeItem(this.getCacheKey('theme'));
- }
- /**
- * 将当前偏好设置持久化到 localStorage
- */
- set(preference: Preference) {
- localStorage.setItem(this.getCacheKey(), JSON.stringify(preference));
- // 额外存储一份主题、语言
- localStorage.setItem(this.getCacheKey('locale'), preference.locale);
- localStorage.setItem(this.getCacheKey('theme'), preference.theme);
- }
- /**
- * 设置偏好设置的缓存前缀
- * @param prefix - 前缀
- */
- setCachePrefix(prefix: string) {
- this.cachePrefix = prefix;
- }
- }
- export type PreferenceCacheType = PreferenceCache;
- export { PreferenceCache };
|