import { defineStore } from 'pinia' import { ref } from 'vue' import router from '@/router' export const useTabsStore = defineStore('tabs', () => { const defaultTabs = [{ title: '首页', path: '/home', name: 'home', fixed: true }] const tabs = ref(JSON.parse(sessionStorage.getItem('tabs')) || defaultTabs) const activeTab = ref(sessionStorage.getItem('activeTab') || '/home') // 添加标签页 const addTab = (route) => { if (route.meta?.noTab || route.meta?.hidden) { return } const isExist = tabs.value.some(tab => tab.path === route.path) if (!isExist) { tabs.value.push({ title: route.meta.title, path: route.path, name: route.name, fixed: false }) } activeTab.value = route.path saveToStorage() } // 移除标签页 const removeTab = (targetPath) => { const targetIndex = tabs.value.findIndex(tab => tab.path === targetPath) if (targetIndex === -1 || tabs.value[targetIndex].fixed) return if (activeTab.value === targetPath) { const nextTab = tabs.value[targetIndex + 1] || tabs.value[targetIndex - 1] if (nextTab) { activeTab.value = nextTab.path router.push(nextTab.path) } } tabs.value.splice(targetIndex, 1) saveToStorage() } // 切换标签页 const switchTab = (path) => { activeTab.value = path router.push(path) saveToStorage() } // 保存到sessionStorage const saveToStorage = () => { sessionStorage.setItem('tabs', JSON.stringify(tabs.value)) sessionStorage.setItem('activeTab', activeTab.value) } // 清空标签页 const clearTabs = () => { tabs.value = [...defaultTabs] activeTab.value = '/home' sessionStorage.removeItem('tabs') sessionStorage.removeItem('activeTab') } return { tabs, activeTab, addTab, removeTab, switchTab, clearTabs } })