| import { defineStore } from 'pinia' |
| import { ref } from 'vue' |
| import { adminAPI } from '@/api' |
| import type { CustomMenuItem } from '@/types' |
|
|
| export const useAdminSettingsStore = defineStore('adminSettings', () => { |
| const loaded = ref(false) |
| const loading = ref(false) |
|
|
| const readCachedBool = (key: string, defaultValue: boolean): boolean => { |
| try { |
| const raw = localStorage.getItem(key) |
| if (raw === 'true') return true |
| if (raw === 'false') return false |
| } catch { |
| |
| } |
| return defaultValue |
| } |
|
|
| const writeCachedBool = (key: string, value: boolean) => { |
| try { |
| localStorage.setItem(key, value ? 'true' : 'false') |
| } catch { |
| |
| } |
| } |
|
|
| const readCachedString = (key: string, defaultValue: string): string => { |
| try { |
| const raw = localStorage.getItem(key) |
| if (typeof raw === 'string' && raw.length > 0) return raw |
| } catch { |
| |
| } |
| return defaultValue |
| } |
|
|
| const writeCachedString = (key: string, value: string) => { |
| try { |
| localStorage.setItem(key, value) |
| } catch { |
| |
| } |
| } |
|
|
| |
| const opsMonitoringEnabled = ref(readCachedBool('ops_monitoring_enabled_cached', true)) |
| const opsRealtimeMonitoringEnabled = ref(readCachedBool('ops_realtime_monitoring_enabled_cached', true)) |
| const opsQueryModeDefault = ref(readCachedString('ops_query_mode_default_cached', 'auto')) |
| const customMenuItems = ref<CustomMenuItem[]>([]) |
|
|
| async function fetch(force = false): Promise<void> { |
| if (loaded.value && !force) return |
| if (loading.value) return |
|
|
| loading.value = true |
| try { |
| const settings = await adminAPI.settings.getSettings() |
| opsMonitoringEnabled.value = settings.ops_monitoring_enabled ?? true |
| writeCachedBool('ops_monitoring_enabled_cached', opsMonitoringEnabled.value) |
|
|
| opsRealtimeMonitoringEnabled.value = settings.ops_realtime_monitoring_enabled ?? true |
| writeCachedBool('ops_realtime_monitoring_enabled_cached', opsRealtimeMonitoringEnabled.value) |
|
|
| opsQueryModeDefault.value = settings.ops_query_mode_default || 'auto' |
| writeCachedString('ops_query_mode_default_cached', opsQueryModeDefault.value) |
|
|
| customMenuItems.value = Array.isArray(settings.custom_menu_items) ? settings.custom_menu_items : [] |
|
|
| loaded.value = true |
| } catch (err) { |
| |
| loaded.value = true |
| console.error('[adminSettings] Failed to fetch settings:', err) |
| } finally { |
| loading.value = false |
| } |
| } |
|
|
| function setOpsMonitoringEnabledLocal(value: boolean) { |
| opsMonitoringEnabled.value = value |
| writeCachedBool('ops_monitoring_enabled_cached', value) |
| loaded.value = true |
| } |
|
|
| function setOpsRealtimeMonitoringEnabledLocal(value: boolean) { |
| opsRealtimeMonitoringEnabled.value = value |
| writeCachedBool('ops_realtime_monitoring_enabled_cached', value) |
| loaded.value = true |
| } |
|
|
| function setOpsQueryModeDefaultLocal(value: string) { |
| opsQueryModeDefault.value = value || 'auto' |
| writeCachedString('ops_query_mode_default_cached', opsQueryModeDefault.value) |
| loaded.value = true |
| } |
|
|
| |
| |
| let eventHandlerCleanup: (() => void) | null = null |
|
|
| function initializeEventListeners() { |
| if (eventHandlerCleanup) return |
|
|
| try { |
| const handler = () => { |
| setOpsMonitoringEnabledLocal(false) |
| } |
| window.addEventListener('ops-monitoring-disabled', handler) |
| eventHandlerCleanup = () => { |
| window.removeEventListener('ops-monitoring-disabled', handler) |
| } |
| } catch { |
| |
| } |
| } |
|
|
| if (typeof window !== 'undefined') { |
| initializeEventListeners() |
| } |
|
|
| return { |
| loaded, |
| loading, |
| opsMonitoringEnabled, |
| opsRealtimeMonitoringEnabled, |
| opsQueryModeDefault, |
| customMenuItems, |
| fetch, |
| setOpsMonitoringEnabledLocal, |
| setOpsRealtimeMonitoringEnabledLocal, |
| setOpsQueryModeDefaultLocal |
| } |
| }) |
|
|