51 lines
1.8 KiB
TypeScript
51 lines
1.8 KiB
TypeScript
import router from "@/routers";
|
|
import { defineStore } from "pinia";
|
|
import { TabsState } from "@/stores/interface";
|
|
import piniaPersistConfig from "@/config/piniaPersist";
|
|
|
|
export const useTabsStore = defineStore({
|
|
id: "wms-tabs",
|
|
state: (): TabsState => ({
|
|
tabsMenuList: []
|
|
}),
|
|
actions: {
|
|
// Add Tabs
|
|
async addTabs(tabItem: any) {
|
|
if (this.tabsMenuList.every(item => item.path !== tabItem.path)) {
|
|
this.tabsMenuList.push(tabItem);
|
|
}
|
|
},
|
|
// Remove Tabs
|
|
async removeTabs(tabPath: string, isCurrent: boolean = true) {
|
|
const tabsMenuList = this.tabsMenuList;
|
|
if (isCurrent) {
|
|
tabsMenuList.forEach((item, index) => {
|
|
if (item.path !== tabPath) return;
|
|
const nextTab = tabsMenuList[index + 1] || tabsMenuList[index - 1];
|
|
if (!nextTab) return;
|
|
router.push(nextTab.path);
|
|
});
|
|
}
|
|
this.tabsMenuList = tabsMenuList.filter(item => item.path !== tabPath);
|
|
},
|
|
// Close MultipleTab
|
|
async closeMultipleTab(tabsMenuValue?: string) {
|
|
this.tabsMenuList = this.tabsMenuList.filter(item => {
|
|
return item.path === tabsMenuValue || !item.close;
|
|
});
|
|
},
|
|
// Set Tabs
|
|
async setTabs(tabsMenuList: any[]) {
|
|
this.tabsMenuList = tabsMenuList;
|
|
},
|
|
// Set Tabs Title
|
|
async setTabsTitle(title: string) {
|
|
const nowFullPath = location.hash.substring(1);
|
|
this.tabsMenuList.forEach(item => {
|
|
if (item.path == nowFullPath) item.title = title;
|
|
});
|
|
}
|
|
},
|
|
persist: piniaPersistConfig("wms-tabs")
|
|
});
|