修复路由和主题
This commit is contained in:
+48
-4
@@ -39,10 +39,42 @@ import { ref as vueRef } from 'vue';
|
||||
export const useTabsStore = defineTabsStore('tabs', () => {
|
||||
// 固定首页tab
|
||||
const defaultDashboardPath = '/dashboard';
|
||||
const tabList = vueRef([
|
||||
{ title: '首页', fullPath: defaultDashboardPath, name: 'Dashboard' },
|
||||
]);
|
||||
const activeTab = vueRef(defaultDashboardPath);
|
||||
|
||||
// 从 localStorage 恢复 tabs 状态
|
||||
function loadTabsFromStorage() {
|
||||
try {
|
||||
const savedTabs = localStorage.getItem('tabs_list');
|
||||
const savedActiveTab = localStorage.getItem('active_tab');
|
||||
if (savedTabs) {
|
||||
const tabs = JSON.parse(savedTabs);
|
||||
// 确保至少包含首页
|
||||
const hasDashboard = tabs.some(t => t.fullPath === defaultDashboardPath);
|
||||
if (!hasDashboard) {
|
||||
tabs.unshift({ title: '首页', fullPath: defaultDashboardPath, name: 'Dashboard' });
|
||||
}
|
||||
return tabs;
|
||||
}
|
||||
} catch (e) {
|
||||
console.warn('恢复 tabs 失败:', e);
|
||||
}
|
||||
return [{ title: '首页', fullPath: defaultDashboardPath, name: 'Dashboard' }];
|
||||
}
|
||||
|
||||
// 保存 tabs 到 localStorage
|
||||
function saveTabsToStorage(tabs, active) {
|
||||
try {
|
||||
localStorage.setItem('tabs_list', JSON.stringify(tabs));
|
||||
if (active) {
|
||||
localStorage.setItem('active_tab', active);
|
||||
}
|
||||
} catch (e) {
|
||||
console.warn('保存 tabs 失败:', e);
|
||||
}
|
||||
}
|
||||
|
||||
const tabList = vueRef(loadTabsFromStorage());
|
||||
const savedActiveTab = localStorage.getItem('active_tab');
|
||||
const activeTab = vueRef(savedActiveTab || defaultDashboardPath);
|
||||
|
||||
// 添加tab,若已存在则激活
|
||||
function addTab(tab) {
|
||||
@@ -51,6 +83,7 @@ export const useTabsStore = defineTabsStore('tabs', () => {
|
||||
tabList.value.push(tab);
|
||||
}
|
||||
activeTab.value = tab.fullPath;
|
||||
saveTabsToStorage(tabList.value, activeTab.value);
|
||||
}
|
||||
|
||||
// 删除指定tab并切换激活tab
|
||||
@@ -69,6 +102,7 @@ export const useTabsStore = defineTabsStore('tabs', () => {
|
||||
activeTab.value = defaultDashboardPath;
|
||||
}
|
||||
}
|
||||
saveTabsToStorage(tabList.value, activeTab.value);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -77,12 +111,20 @@ export const useTabsStore = defineTabsStore('tabs', () => {
|
||||
tabList.value = tabList.value.filter(
|
||||
(t) => t.fullPath === defaultDashboardPath || t.fullPath === activeTab.value
|
||||
);
|
||||
saveTabsToStorage(tabList.value, activeTab.value);
|
||||
}
|
||||
|
||||
// 关闭全部,只留首页
|
||||
function closeAll() {
|
||||
tabList.value = tabList.value.filter((t) => t.fullPath === defaultDashboardPath);
|
||||
activeTab.value = defaultDashboardPath;
|
||||
saveTabsToStorage(tabList.value, activeTab.value);
|
||||
}
|
||||
|
||||
// 设置激活tab(不触发路由跳转,仅用于更新状态)
|
||||
function setActiveTab(fullPath) {
|
||||
activeTab.value = fullPath;
|
||||
saveTabsToStorage(tabList.value, activeTab.value);
|
||||
}
|
||||
|
||||
return {
|
||||
@@ -92,5 +134,7 @@ export const useTabsStore = defineTabsStore('tabs', () => {
|
||||
removeTab,
|
||||
closeOthers,
|
||||
closeAll,
|
||||
setActiveTab,
|
||||
saveTabsToStorage,
|
||||
};
|
||||
});
|
||||
Reference in New Issue
Block a user