36 lines
953 B
TypeScript
36 lines
953 B
TypeScript
import { defineStore } from 'pinia';
|
|
import { computed } from 'vue';
|
|
import { SystemThemeType } from '@/../bindings/voidraft/internal/models/models';
|
|
import { useConfigStore } from './configStore';
|
|
|
|
/**
|
|
* 主题管理 Store
|
|
* 职责:
|
|
*/
|
|
export const useThemeStore = defineStore('theme', () => {
|
|
const configStore = useConfigStore();
|
|
|
|
const currentTheme = computed(() =>
|
|
configStore.config?.appearance?.systemTheme || SystemThemeType.SystemThemeAuto
|
|
);
|
|
|
|
|
|
// 应用主题到 DOM
|
|
const applyThemeToDOM = (theme: SystemThemeType) => {
|
|
document.documentElement.setAttribute('data-theme',
|
|
theme === SystemThemeType.SystemThemeAuto ? 'auto' :
|
|
theme === SystemThemeType.SystemThemeDark ? 'dark' : 'light'
|
|
);
|
|
};
|
|
|
|
// 设置主题
|
|
const setTheme = async (theme: SystemThemeType) => {
|
|
await configStore.setSystemTheme(theme);
|
|
applyThemeToDOM(theme);
|
|
};
|
|
|
|
return {
|
|
currentTheme,
|
|
setTheme,
|
|
};
|
|
});
|