Files
JRedisDesktop/src/stores/app.ts
T
Jokul bdcf4fe299 refactor: restructure project layout
- Move main process to electron/main/
- Move preload to electron/preload/
- Add shared types in electron/shared/
- Split redis-service into modular redis/ directory
- Flatten renderer to src/ (remove src/renderer/ nesting)
- Update electron.vite.config.ts paths
- Update tsconfig paths
- Output to electron-dist/
2026-07-04 21:12:50 +08:00

50 lines
1.5 KiB
TypeScript

// src/renderer/src/stores/app.ts
import { defineStore } from 'pinia'
import { ref } from 'vue'
export type ThemeMode = 'system' | 'dark' | 'light'
export const useAppStore = defineStore('app', () => {
const theme = ref<ThemeMode>((localStorage.getItem('theme') as ThemeMode) || 'system')
const isDark = ref(true)
const fontSize = ref<number>(Number(localStorage.getItem('fontSize')) || 13)
const scanCount = ref<number>(Number(localStorage.getItem('scanCount')) || 100)
function applyTheme(mode: ThemeMode, osDark?: boolean) {
theme.value = mode
const dark = mode === 'system' ? (osDark ?? true) : mode === 'dark'
isDark.value = dark
document.documentElement.classList.toggle('light', !dark)
}
if (window.electronAPI) {
window.electronAPI.theme.onOsUpdated((osDark: boolean) => {
if (theme.value === 'system') {
applyTheme('system', osDark)
}
})
}
window.electronAPI?.theme.get().then((osDark: boolean) => {
applyTheme(theme.value, osDark)
})
function setTheme(mode: ThemeMode) {
applyTheme(mode)
localStorage.setItem('theme', mode)
window.electronAPI?.theme.set(mode)
}
function setFontSize(size: number) {
fontSize.value = size
localStorage.setItem('fontSize', String(size))
}
function setScanCount(count: number) {
scanCount.value = count
localStorage.setItem('scanCount', String(count))
}
return { theme, isDark, fontSize, scanCount, setTheme, setFontSize, setScanCount }
})