|
@@ -1,38 +1,53 @@
|
|
|
-import { TagView, RouteRecordNormalized, RouteLocationNormalized } from 'vue-router';
|
|
|
+import { RouteLocationNormalized } from 'vue-router';
|
|
|
|
|
|
export const useTagsViewStore = defineStore('tagsView', () => {
|
|
|
- const visitedViews = ref<TagView[]>([]);
|
|
|
+ const visitedViews = ref<RouteLocationNormalized[]>([]);
|
|
|
const cachedViews = ref<string[]>([]);
|
|
|
- const iframeViews = ref<TagView[]>([]);
|
|
|
+ const iframeViews = ref<RouteLocationNormalized[]>([]);
|
|
|
|
|
|
- const addView = (view: TagView) => {
|
|
|
+ const getVisitedViews = (): RouteLocationNormalized[] => {
|
|
|
+ return visitedViews.value;
|
|
|
+ };
|
|
|
+ const getIframeViews = (): RouteLocationNormalized[] => {
|
|
|
+ return iframeViews.value;
|
|
|
+ };
|
|
|
+ const getCachedViews = (): string[] => {
|
|
|
+ return cachedViews.value;
|
|
|
+ };
|
|
|
+
|
|
|
+ const addView = (view: RouteLocationNormalized) => {
|
|
|
addVisitedView(view);
|
|
|
addCachedView(view);
|
|
|
};
|
|
|
|
|
|
- const addIframeView = (view: TagView): void => {
|
|
|
- if (iframeViews.value.some((v: TagView) => v.path === view.path)) return;
|
|
|
+ const addIframeView = (view: RouteLocationNormalized): void => {
|
|
|
+ if (iframeViews.value.some((v: RouteLocationNormalized) => v.path === view.path)) return;
|
|
|
iframeViews.value.push(
|
|
|
Object.assign({}, view, {
|
|
|
title: view.meta?.title || 'no-name'
|
|
|
})
|
|
|
);
|
|
|
};
|
|
|
- const delIframeView = (view: TagView): Promise<TagView[]> => {
|
|
|
+ const delIframeView = (view: RouteLocationNormalized): Promise<RouteLocationNormalized[]> => {
|
|
|
return new Promise((resolve) => {
|
|
|
- iframeViews.value = iframeViews.value.filter((item: TagView) => item.path !== view.path);
|
|
|
+ iframeViews.value = iframeViews.value.filter((item: RouteLocationNormalized) => item.path !== view.path);
|
|
|
resolve([...iframeViews.value]);
|
|
|
});
|
|
|
};
|
|
|
- const addVisitedView = (view: TagView): void => {
|
|
|
- if (visitedViews.value.some((v: TagView) => v.path === view.path)) return;
|
|
|
+ const addVisitedView = (view: RouteLocationNormalized): void => {
|
|
|
+ if (visitedViews.value.some((v: RouteLocationNormalized) => v.path === view.path)) return;
|
|
|
visitedViews.value.push(
|
|
|
Object.assign({}, view, {
|
|
|
title: view.meta?.title || 'no-name'
|
|
|
})
|
|
|
);
|
|
|
};
|
|
|
- const delView = (view: TagView): Promise<{ visitedViews: TagView[]; cachedViews: string[] }> => {
|
|
|
+ const delView = (
|
|
|
+ view: RouteLocationNormalized
|
|
|
+ ): Promise<{
|
|
|
+ visitedViews: RouteLocationNormalized[];
|
|
|
+ cachedViews: string[];
|
|
|
+ }> => {
|
|
|
return new Promise((resolve) => {
|
|
|
delVisitedView(view);
|
|
|
if (!isDynamicRoute(view)) {
|
|
@@ -45,7 +60,7 @@ export const useTagsViewStore = defineStore('tagsView', () => {
|
|
|
});
|
|
|
};
|
|
|
|
|
|
- const delVisitedView = (view: TagView): Promise<TagView[]> => {
|
|
|
+ const delVisitedView = (view: RouteLocationNormalized): Promise<RouteLocationNormalized[]> => {
|
|
|
return new Promise((resolve) => {
|
|
|
for (const [i, v] of visitedViews.value.entries()) {
|
|
|
if (v.path === view.path) {
|
|
@@ -56,7 +71,7 @@ export const useTagsViewStore = defineStore('tagsView', () => {
|
|
|
resolve([...visitedViews.value]);
|
|
|
});
|
|
|
};
|
|
|
- const delCachedView = (view?: TagView): Promise<string[]> => {
|
|
|
+ const delCachedView = (view?: RouteLocationNormalized): Promise<string[]> => {
|
|
|
let viewName = '';
|
|
|
if (view) {
|
|
|
viewName = view.name as string;
|
|
@@ -67,7 +82,12 @@ export const useTagsViewStore = defineStore('tagsView', () => {
|
|
|
resolve([...cachedViews.value]);
|
|
|
});
|
|
|
};
|
|
|
- const delOthersViews = (view: TagView): Promise<{ visitedViews: TagView[]; cachedViews: string[] }> => {
|
|
|
+ const delOthersViews = (
|
|
|
+ view: RouteLocationNormalized
|
|
|
+ ): Promise<{
|
|
|
+ visitedViews: RouteLocationNormalized[];
|
|
|
+ cachedViews: string[];
|
|
|
+ }> => {
|
|
|
return new Promise((resolve) => {
|
|
|
delOthersVisitedViews(view);
|
|
|
delOthersCachedViews(view);
|
|
@@ -78,15 +98,15 @@ export const useTagsViewStore = defineStore('tagsView', () => {
|
|
|
});
|
|
|
};
|
|
|
|
|
|
- const delOthersVisitedViews = (view: TagView): Promise<TagView[]> => {
|
|
|
+ const delOthersVisitedViews = (view: RouteLocationNormalized): Promise<RouteLocationNormalized[]> => {
|
|
|
return new Promise((resolve) => {
|
|
|
- visitedViews.value = visitedViews.value.filter((v: TagView) => {
|
|
|
+ visitedViews.value = visitedViews.value.filter((v: RouteLocationNormalized) => {
|
|
|
return v.meta?.affix || v.path === view.path;
|
|
|
});
|
|
|
resolve([...visitedViews.value]);
|
|
|
});
|
|
|
};
|
|
|
- const delOthersCachedViews = (view: TagView): Promise<string[]> => {
|
|
|
+ const delOthersCachedViews = (view: RouteLocationNormalized): Promise<string[]> => {
|
|
|
const viewName = view.name as string;
|
|
|
return new Promise((resolve) => {
|
|
|
const index = cachedViews.value.indexOf(viewName);
|
|
@@ -99,7 +119,7 @@ export const useTagsViewStore = defineStore('tagsView', () => {
|
|
|
});
|
|
|
};
|
|
|
|
|
|
- const delAllViews = (): Promise<{ visitedViews: TagView[]; cachedViews: string[] }> => {
|
|
|
+ const delAllViews = (): Promise<{ visitedViews: RouteLocationNormalized[]; cachedViews: string[] }> => {
|
|
|
return new Promise((resolve) => {
|
|
|
delAllVisitedViews();
|
|
|
delAllCachedViews();
|
|
@@ -109,9 +129,9 @@ export const useTagsViewStore = defineStore('tagsView', () => {
|
|
|
});
|
|
|
});
|
|
|
};
|
|
|
- const delAllVisitedViews = (): Promise<TagView[]> => {
|
|
|
+ const delAllVisitedViews = (): Promise<RouteLocationNormalized[]> => {
|
|
|
return new Promise((resolve) => {
|
|
|
- visitedViews.value = visitedViews.value.filter((tag: TagView) => tag.meta?.affix);
|
|
|
+ visitedViews.value = visitedViews.value.filter((tag: RouteLocationNormalized) => tag.meta?.affix);
|
|
|
resolve([...visitedViews.value]);
|
|
|
});
|
|
|
};
|
|
@@ -123,7 +143,7 @@ export const useTagsViewStore = defineStore('tagsView', () => {
|
|
|
});
|
|
|
};
|
|
|
|
|
|
- const updateVisitedView = (view: TagView): void => {
|
|
|
+ const updateVisitedView = (view: RouteLocationNormalized): void => {
|
|
|
for (let v of visitedViews.value) {
|
|
|
if (v.path === view.path) {
|
|
|
v = Object.assign(v, view);
|
|
@@ -131,13 +151,13 @@ export const useTagsViewStore = defineStore('tagsView', () => {
|
|
|
}
|
|
|
}
|
|
|
};
|
|
|
- const delRightTags = (view: TagView): Promise<TagView[]> => {
|
|
|
+ const delRightTags = (view: RouteLocationNormalized): Promise<RouteLocationNormalized[]> => {
|
|
|
return new Promise((resolve) => {
|
|
|
- const index = visitedViews.value.findIndex((v: TagView) => v.path === view.path);
|
|
|
+ const index = visitedViews.value.findIndex((v: RouteLocationNormalized) => v.path === view.path);
|
|
|
if (index === -1) {
|
|
|
return;
|
|
|
}
|
|
|
- visitedViews.value = visitedViews.value.filter((item: TagView, idx: number) => {
|
|
|
+ visitedViews.value = visitedViews.value.filter((item: RouteLocationNormalized, idx: number) => {
|
|
|
if (idx <= index || (item.meta && item.meta.affix)) {
|
|
|
return true;
|
|
|
}
|
|
@@ -150,13 +170,13 @@ export const useTagsViewStore = defineStore('tagsView', () => {
|
|
|
resolve([...visitedViews.value]);
|
|
|
});
|
|
|
};
|
|
|
- const delLeftTags = (view: TagView): Promise<TagView[]> => {
|
|
|
+ const delLeftTags = (view: RouteLocationNormalized): Promise<RouteLocationNormalized[]> => {
|
|
|
return new Promise((resolve) => {
|
|
|
- const index = visitedViews.value.findIndex((v: TagView) => v.path === view.path);
|
|
|
+ const index = visitedViews.value.findIndex((v: RouteLocationNormalized) => v.path === view.path);
|
|
|
if (index === -1) {
|
|
|
return;
|
|
|
}
|
|
|
- visitedViews.value = visitedViews.value.filter((item: TagView, idx: number) => {
|
|
|
+ visitedViews.value = visitedViews.value.filter((item: RouteLocationNormalized, idx: number) => {
|
|
|
if (idx >= index || (item.meta && item.meta.affix)) {
|
|
|
return true;
|
|
|
}
|
|
@@ -170,7 +190,7 @@ export const useTagsViewStore = defineStore('tagsView', () => {
|
|
|
});
|
|
|
};
|
|
|
|
|
|
- const addCachedView = (view: TagView): void => {
|
|
|
+ const addCachedView = (view: RouteLocationNormalized): void => {
|
|
|
const viewName = view.name as string;
|
|
|
if (!viewName) return;
|
|
|
if (cachedViews.value.includes(viewName)) return;
|
|
@@ -179,15 +199,20 @@ export const useTagsViewStore = defineStore('tagsView', () => {
|
|
|
}
|
|
|
};
|
|
|
|
|
|
- const isDynamicRoute = (view: any): boolean => {
|
|
|
+ const isDynamicRoute = (view: RouteLocationNormalized): boolean => {
|
|
|
// 检查匹配的路由记录中是否有动态段
|
|
|
- return view.matched.some((m: RouteRecordNormalized) => m.path.includes(':'));
|
|
|
+ return view.matched.some((m) => m.path.includes(':'));
|
|
|
};
|
|
|
|
|
|
return {
|
|
|
visitedViews,
|
|
|
cachedViews,
|
|
|
iframeViews,
|
|
|
+
|
|
|
+ getVisitedViews,
|
|
|
+ getIframeViews,
|
|
|
+ getCachedViews,
|
|
|
+
|
|
|
addVisitedView,
|
|
|
addCachedView,
|
|
|
delVisitedView,
|
|
@@ -205,5 +230,4 @@ export const useTagsViewStore = defineStore('tagsView', () => {
|
|
|
delIframeView
|
|
|
};
|
|
|
});
|
|
|
-
|
|
|
export default useTagsViewStore;
|