兰宝车间质量管理系统-前端
ahao
2023-12-27 3922c16601266e78ee3b90936ba49305c6c8b09a
src/store/modules/tagsView.ts
@@ -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 @@
    });
  };
  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 @@
      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 @@
      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 @@
    });
  };
  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 @@
    });
  };
  const delAllViews = (): Promise<{ visitedViews: TagView[]; cachedViews: string[] }> => {
  const delAllViews = (): Promise<{ visitedViews: RouteLocationNormalized[]; cachedViews: string[] }> => {
    return new Promise((resolve) => {
      delAllVisitedViews();
      delAllCachedViews();
@@ -109,9 +129,9 @@
      });
    });
  };
  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 @@
    });
  };
  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 @@
      }
    }
  };
  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 @@
      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 @@
    });
  };
  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 @@
    }
  };
  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 @@
    delIframeView
  };
});
export default useTagsViewStore;