兰宝车间质量管理系统-前端
疯狂的狮子Li
2023-04-03 1595cb282aab5399862fac6406b5de550863e3b6
src/store/modules/tagsView.ts
@@ -1,198 +1,198 @@
import { TagView } from 'vue-router';
export const useTagsViewStore = defineStore('tagsView', () => {
   const visitedViews = ref<TagView[]>([]);
   const cachedViews = ref<string[]>([]);
   const iframeViews = ref<TagView[]>([]);
  const visitedViews = ref<TagView[]>([]);
  const cachedViews = ref<string[]>([]);
  const iframeViews = ref<TagView[]>([]);
   const addView = (view: TagView) => {
      addVisitedView(view);
      addCachedView(view);
   };
  const addView = (view: TagView) => {
    addVisitedView(view);
    addCachedView(view);
  };
   const addIframeView = (view: TagView): void => {
      if (iframeViews.value.some((v) => v.path === view.path)) return;
      iframeViews.value.push(
         Object.assign({}, view, {
            title: view.meta?.title || 'no-name'
         })
      );
   };
   const delIframeView = (view: TagView): Promise<TagView[]> => {
      return new Promise((resolve) => {
         iframeViews.value = iframeViews.value.filter((item) => item.path !== view.path);
         resolve([...iframeViews.value]);
      });
   };
   const addVisitedView = (view: TagView): void => {
      if (visitedViews.value.some((v) => 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[] }> => {
      return new Promise((resolve) => {
         delVisitedView(view);
         delCachedView(view);
         resolve({
            visitedViews: [...visitedViews.value],
            cachedViews: [...cachedViews.value]
         });
      });
   };
  const addIframeView = (view: TagView): void => {
    if (iframeViews.value.some((v) => v.path === view.path)) return;
    iframeViews.value.push(
      Object.assign({}, view, {
        title: view.meta?.title || 'no-name'
      })
    );
  };
  const delIframeView = (view: TagView): Promise<TagView[]> => {
    return new Promise((resolve) => {
      iframeViews.value = iframeViews.value.filter((item) => item.path !== view.path);
      resolve([...iframeViews.value]);
    });
  };
  const addVisitedView = (view: TagView): void => {
    if (visitedViews.value.some((v) => 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[] }> => {
    return new Promise((resolve) => {
      delVisitedView(view);
      delCachedView(view);
      resolve({
        visitedViews: [...visitedViews.value],
        cachedViews: [...cachedViews.value]
      });
    });
  };
   const delVisitedView = (view: TagView): Promise<TagView[]> => {
      return new Promise((resolve) => {
         for (const [i, v] of visitedViews.value.entries()) {
            if (v.path === view.path) {
               visitedViews.value.splice(i, 1);
               break;
            }
         }
         resolve([...visitedViews.value]);
      });
   };
   const delCachedView = (view: TagView): Promise<string[]> => {
      const viewName = view.name as string;
      return new Promise((resolve) => {
         const index = cachedViews.value.indexOf(viewName);
         index > -1 && cachedViews.value.splice(index, 1);
         resolve([...cachedViews.value]);
      });
   };
   const delOthersViews = (view: TagView): Promise<{ visitedViews: TagView[]; cachedViews: string[] }> => {
      return new Promise((resolve) => {
         delOthersVisitedViews(view);
         delOthersCachedViews(view);
         resolve({
            visitedViews: [...visitedViews.value],
            cachedViews: [...cachedViews.value]
         });
      });
   };
  const delVisitedView = (view: TagView): Promise<TagView[]> => {
    return new Promise((resolve) => {
      for (const [i, v] of visitedViews.value.entries()) {
        if (v.path === view.path) {
          visitedViews.value.splice(i, 1);
          break;
        }
      }
      resolve([...visitedViews.value]);
    });
  };
  const delCachedView = (view: TagView): Promise<string[]> => {
    const viewName = view.name as string;
    return new Promise((resolve) => {
      const index = cachedViews.value.indexOf(viewName);
      index > -1 && cachedViews.value.splice(index, 1);
      resolve([...cachedViews.value]);
    });
  };
  const delOthersViews = (view: TagView): Promise<{ visitedViews: TagView[]; cachedViews: string[] }> => {
    return new Promise((resolve) => {
      delOthersVisitedViews(view);
      delOthersCachedViews(view);
      resolve({
        visitedViews: [...visitedViews.value],
        cachedViews: [...cachedViews.value]
      });
    });
  };
   const delOthersVisitedViews = (view: TagView): Promise<TagView[]> => {
      return new Promise((resolve) => {
         visitedViews.value = visitedViews.value.filter((v) => {
            return v.meta?.affix || v.path === view.path;
         });
         resolve([...visitedViews.value]);
      });
   };
   const delOthersCachedViews = (view: TagView): Promise<string[]> => {
      const viewName = view.name as string;
      return new Promise((resolve) => {
         const index = cachedViews.value.indexOf(viewName);
         if (index > -1) {
            cachedViews.value = cachedViews.value.slice(index, index + 1);
         } else {
            cachedViews.value = [];
         }
         resolve([...cachedViews.value]);
      });
   };
  const delOthersVisitedViews = (view: TagView): Promise<TagView[]> => {
    return new Promise((resolve) => {
      visitedViews.value = visitedViews.value.filter((v) => {
        return v.meta?.affix || v.path === view.path;
      });
      resolve([...visitedViews.value]);
    });
  };
  const delOthersCachedViews = (view: TagView): Promise<string[]> => {
    const viewName = view.name as string;
    return new Promise((resolve) => {
      const index = cachedViews.value.indexOf(viewName);
      if (index > -1) {
        cachedViews.value = cachedViews.value.slice(index, index + 1);
      } else {
        cachedViews.value = [];
      }
      resolve([...cachedViews.value]);
    });
  };
   const delAllViews = (): Promise<{ visitedViews: TagView[]; cachedViews: string[] }> => {
      return new Promise((resolve) => {
         delAllVisitedViews();
         delAllCachedViews();
         resolve({
            visitedViews: [...visitedViews.value],
            cachedViews: [...cachedViews.value]
         });
      });
   };
   const delAllVisitedViews = (): Promise<TagView[]> => {
      return new Promise((resolve) => {
         visitedViews.value = visitedViews.value.filter((tag) => tag.meta?.affix);
         resolve([...visitedViews.value]);
      });
   };
  const delAllViews = (): Promise<{ visitedViews: TagView[]; cachedViews: string[] }> => {
    return new Promise((resolve) => {
      delAllVisitedViews();
      delAllCachedViews();
      resolve({
        visitedViews: [...visitedViews.value],
        cachedViews: [...cachedViews.value]
      });
    });
  };
  const delAllVisitedViews = (): Promise<TagView[]> => {
    return new Promise((resolve) => {
      visitedViews.value = visitedViews.value.filter((tag) => tag.meta?.affix);
      resolve([...visitedViews.value]);
    });
  };
   const delAllCachedViews = (): Promise<string[]> => {
      return new Promise((resolve) => {
         cachedViews.value = [];
         resolve([...cachedViews.value]);
      });
   };
  const delAllCachedViews = (): Promise<string[]> => {
    return new Promise((resolve) => {
      cachedViews.value = [];
      resolve([...cachedViews.value]);
    });
  };
   const updateVisitedView = (view: TagView): void => {
      for (let v of visitedViews.value) {
         if (v.path === view.path) {
            v = Object.assign(v, view);
            break;
         }
      }
   };
   const delRightTags = (view: TagView): Promise<TagView[]> => {
      return new Promise((resolve) => {
         const index = visitedViews.value.findIndex((v) => v.path === view.path);
         if (index === -1) {
            return;
         }
         visitedViews.value = visitedViews.value.filter((item, idx) => {
            if (idx <= index || (item.meta && item.meta.affix)) {
               return true;
            }
            const i = cachedViews.value.indexOf(item.name as string);
            if (i > -1) {
               cachedViews.value.splice(i, 1);
            }
            return false;
         });
         resolve([...visitedViews.value]);
      });
   };
   const delLeftTags = (view: TagView): Promise<TagView[]> => {
      return new Promise((resolve) => {
         const index = visitedViews.value.findIndex((v) => v.path === view.path);
         if (index === -1) {
            return;
         }
         visitedViews.value = visitedViews.value.filter((item, idx) => {
            if (idx >= index || (item.meta && item.meta.affix)) {
               return true;
            }
            const i = cachedViews.value.indexOf(item.name as string);
            if (i > -1) {
               cachedViews.value.splice(i, 1);
            }
            return false;
         });
         resolve([...visitedViews.value]);
      });
   };
  const updateVisitedView = (view: TagView): void => {
    for (let v of visitedViews.value) {
      if (v.path === view.path) {
        v = Object.assign(v, view);
        break;
      }
    }
  };
  const delRightTags = (view: TagView): Promise<TagView[]> => {
    return new Promise((resolve) => {
      const index = visitedViews.value.findIndex((v) => v.path === view.path);
      if (index === -1) {
        return;
      }
      visitedViews.value = visitedViews.value.filter((item, idx) => {
        if (idx <= index || (item.meta && item.meta.affix)) {
          return true;
        }
        const i = cachedViews.value.indexOf(item.name as string);
        if (i > -1) {
          cachedViews.value.splice(i, 1);
        }
        return false;
      });
      resolve([...visitedViews.value]);
    });
  };
  const delLeftTags = (view: TagView): Promise<TagView[]> => {
    return new Promise((resolve) => {
      const index = visitedViews.value.findIndex((v) => v.path === view.path);
      if (index === -1) {
        return;
      }
      visitedViews.value = visitedViews.value.filter((item, idx) => {
        if (idx >= index || (item.meta && item.meta.affix)) {
          return true;
        }
        const i = cachedViews.value.indexOf(item.name as string);
        if (i > -1) {
          cachedViews.value.splice(i, 1);
        }
        return false;
      });
      resolve([...visitedViews.value]);
    });
  };
   const addCachedView = (view: TagView): void => {
      const viewName = view.name as string;
      if (cachedViews.value.includes(viewName)) return;
      if (!view.meta?.noCache) {
         cachedViews.value.push(viewName);
      }
   };
  const addCachedView = (view: TagView): void => {
    const viewName = view.name as string;
    if (cachedViews.value.includes(viewName)) return;
    if (!view.meta?.noCache) {
      cachedViews.value.push(viewName);
    }
  };
   return {
      visitedViews,
      cachedViews,
      iframeViews,
      addVisitedView,
      addCachedView,
      delVisitedView,
      delCachedView,
      updateVisitedView,
      addView,
      delView,
      delAllViews,
      delAllVisitedViews,
      delAllCachedViews,
      delOthersViews,
      delRightTags,
      delLeftTags,
      addIframeView,
      delIframeView
   };
  return {
    visitedViews,
    cachedViews,
    iframeViews,
    addVisitedView,
    addCachedView,
    delVisitedView,
    delCachedView,
    updateVisitedView,
    addView,
    delView,
    delAllViews,
    delAllVisitedViews,
    delAllCachedViews,
    delOthersViews,
    delRightTags,
    delLeftTags,
    addIframeView,
    delIframeView
  };
});
export default useTagsViewStore;