| import { defineStore } from 'pinia'; | 
| import { Notification } from '@arco-design/web-vue'; | 
| import type { NotificationReturn } from '@arco-design/web-vue/es/notification/interface'; | 
| import type { RouteRecordNormalized } from 'vue-router'; | 
| import defaultSettings from '@/config/settings.json'; | 
| import { getMenuList } from '@/api/user'; | 
| import { AppState } from './types'; | 
|   | 
| const useAppStore = defineStore('app', { | 
|   state: (): AppState => ({ ...defaultSettings }), | 
|   | 
|   getters: { | 
|     appCurrentSetting(state: AppState): AppState { | 
|       return { ...state }; | 
|     }, | 
|     appDevice(state: AppState) { | 
|       return state.device; | 
|     }, | 
|     appAsyncMenus(state: AppState): RouteRecordNormalized[] { | 
|       return state.serverMenu as unknown as RouteRecordNormalized[]; | 
|     }, | 
|   }, | 
|   | 
|   actions: { | 
|     // Update app settings | 
|     updateSettings(partial: Partial<AppState>) { | 
|       // @ts-ignore-next-line | 
|       this.$patch(partial); | 
|     }, | 
|   | 
|     // Change theme color | 
|     toggleTheme(dark: boolean) { | 
|       if (dark) { | 
|         this.theme = 'dark'; | 
|         document.body.setAttribute('arco-theme', 'dark'); | 
|       } else { | 
|         this.theme = 'light'; | 
|         document.body.removeAttribute('arco-theme'); | 
|       } | 
|     }, | 
|     toggleDevice(device: string) { | 
|       this.device = device; | 
|     }, | 
|     toggleMenu(value: boolean) { | 
|       this.hideMenu = value; | 
|     }, | 
|     async fetchServerMenuConfig() { | 
|       let notifyInstance: NotificationReturn | null = null; | 
|       try { | 
|         notifyInstance = Notification.info({ | 
|           id: 'menuNotice', // Keep the instance id the same | 
|           content: 'loading', | 
|           closable: true, | 
|         }); | 
|         const { data } = await getMenuList(); | 
|         this.serverMenu = data; | 
|         notifyInstance = Notification.success({ | 
|           id: 'menuNotice', | 
|           content: 'success', | 
|           closable: true, | 
|         }); | 
|       } catch (error) { | 
|         // eslint-disable-next-line @typescript-eslint/no-unused-vars | 
|         notifyInstance = Notification.error({ | 
|           id: 'menuNotice', | 
|           content: 'error', | 
|           closable: true, | 
|         }); | 
|       } | 
|     }, | 
|     clearServerMenu() { | 
|       this.serverMenu = []; | 
|     }, | 
|   }, | 
| }); | 
|   | 
| export default useAppStore; |