| import type { RouteLocationNormalized } from 'vue-router'; | 
| import { defineStore } from 'pinia'; | 
| import { | 
|   DEFAULT_ROUTE, | 
|   DEFAULT_ROUTE_NAME, | 
|   REDIRECT_ROUTE_NAME, | 
| } from '@/router/constants'; | 
| import { isString } from '@/utils/is'; | 
| import { TabBarState, TagProps } from './types'; | 
|   | 
| const formatTag = (route: RouteLocationNormalized): TagProps => { | 
|   const { name, meta, fullPath, query } = route; | 
|   return { | 
|     title: meta.locale || '', | 
|     name: String(name), | 
|     fullPath, | 
|     query, | 
|     ignoreCache: meta.ignoreCache, | 
|   }; | 
| }; | 
|   | 
| const BAN_LIST = [REDIRECT_ROUTE_NAME]; | 
|   | 
| const useAppStore = defineStore('tabBar', { | 
|   state: (): TabBarState => ({ | 
|     cacheTabList: new Set([DEFAULT_ROUTE_NAME]), | 
|     tagList: [DEFAULT_ROUTE], | 
|   }), | 
|   | 
|   getters: { | 
|     getTabList(): TagProps[] { | 
|       return this.tagList; | 
|     }, | 
|     getCacheList(): string[] { | 
|       return Array.from(this.cacheTabList); | 
|     }, | 
|   }, | 
|   | 
|   actions: { | 
|     updateTabList(route: RouteLocationNormalized) { | 
|       if (BAN_LIST.includes(route.name as string)) return; | 
|       this.tagList.push(formatTag(route)); | 
|       if (!route.meta.ignoreCache) { | 
|         this.cacheTabList.add(route.name as string); | 
|       } | 
|     }, | 
|     deleteTag(idx: number, tag: TagProps) { | 
|       this.tagList.splice(idx, 1); | 
|       this.cacheTabList.delete(tag.name); | 
|     }, | 
|     addCache(name: string) { | 
|       if (isString(name) && name !== '') this.cacheTabList.add(name); | 
|     }, | 
|     deleteCache(tag: TagProps) { | 
|       this.cacheTabList.delete(tag.name); | 
|     }, | 
|     freshTabList(tags: TagProps[]) { | 
|       this.tagList = tags; | 
|       this.cacheTabList.clear(); | 
|       // 要先判断ignoreCache | 
|       this.tagList | 
|         .filter((el) => !el.ignoreCache) | 
|         .map((el) => el.name) | 
|         .forEach((x) => this.cacheTabList.add(x)); | 
|     }, | 
|     resetTabList() { | 
|       this.tagList = [DEFAULT_ROUTE]; | 
|       this.cacheTabList.clear(); | 
|       this.cacheTabList.add(DEFAULT_ROUTE_NAME); | 
|     }, | 
|   }, | 
| }); | 
|   | 
| export default useAppStore; |