huangxw 1 kuukausi sitten
vanhempi
säilyke
5698d240ca
3 muutettua tiedostoa jossa 344 lisäystä ja 344 poistoa
  1. 43 43
      src/permission.ts
  2. 88 88
      src/plugins/tab.ts
  3. 213 213
      src/store/modules/tagsView.ts

+ 43 - 43
src/permission.ts

@@ -13,57 +13,57 @@ NProgress.configure({ showSpinner: false });
 const whiteList = ['/login', '/register', '/social-callback', '/register*', '/register/*'];
 
 const isWhiteList = (path: string) => {
-  return whiteList.some(pattern => isPathMatch(pattern, path))
-}
+    return whiteList.some((pattern) => isPathMatch(pattern, path));
+};
 
 router.beforeEach(async (to, from, next) => {
-  NProgress.start();
-  if (getToken()) {
-    to.meta.title && useSettingsStore().setTitle(to.meta.title);
-    /* has token*/
-    if (to.path === '/login') {
-      next({ path: '/' });
-      NProgress.done();
-    } else if (isWhiteList(to.path)) {
-      next();
-    } else {
-      if (useUserStore().roles.length === 0) {
-        isRelogin.show = true;
-        // 判断当前用户是否已拉取完user_info信息
-        const [err] = await tos(useUserStore().getInfo());
-        if (err) {
-          await useUserStore().logout();
-          ElMessage.error(err);
-          next({ path: '/' });
+    NProgress.start();
+    if (getToken()) {
+        to.meta.title && useSettingsStore().setTitle(to.meta.title);
+        /* has token*/
+        if (to.path === '/login') {
+            next({ path: '/' });
+            NProgress.done();
+        } else if (isWhiteList(to.path)) {
+            next();
         } else {
-          isRelogin.show = false;
-          const accessRoutes = await usePermissionStore().generateRoutes();
-          // 根据roles权限生成可访问的路由表
-          accessRoutes.forEach((route) => {
-            if (!isHttp(route.path)) {
-              router.addRoute(route); // 动态添加可访问路由表
+            if (useUserStore().roles.length === 0) {
+                isRelogin.show = true;
+                // 判断当前用户是否已拉取完user_info信息
+                const [err] = await tos(useUserStore().getInfo());
+                if (err) {
+                    await useUserStore().logout();
+                    ElMessage.error(err);
+                    next({ path: '/' });
+                } else {
+                    isRelogin.show = false;
+                    const accessRoutes = await usePermissionStore().generateRoutes();
+                    // 根据roles权限生成可访问的路由表
+                    accessRoutes.forEach((route) => {
+                        if (!isHttp(route.path)) {
+                            router.addRoute(route); // 动态添加可访问路由表
+                        }
+                    });
+                    // @ts-expect-error hack方法 确保addRoutes已完成
+                    next({ path: to.path, replace: true, params: to.params, query: to.query, hash: to.hash, name: to.name as string }); // hack方法 确保addRoutes已完成
+                }
+            } else {
+                next();
             }
-          });
-          // @ts-expect-error hack方法 确保addRoutes已完成
-          next({ path: to.path, replace: true, params: to.params, query: to.query, hash: to.hash, name: to.name as string }); // hack方法 确保addRoutes已完成
         }
-      } else {
-        next();
-      }
-    }
-  } else {
-    // 没有token
-    if (isWhiteList(to.path)) {
-      // 在免登录白名单,直接进入
-      next();
     } else {
-      const redirect = encodeURIComponent(to.fullPath || '/');
-      next(`/login?redirect=${redirect}`); // 否则全部重定向到登录页
-      NProgress.done();
+        // 没有token
+        if (isWhiteList(to.path)) {
+            // 在免登录白名单,直接进入
+            next();
+        } else {
+            const redirect = encodeURIComponent(to.fullPath || '/');
+            next(`/login?redirect=${redirect}`); // 否则全部重定向到登录页
+            NProgress.done();
+        }
     }
-  }
 });
 
 router.afterEach(() => {
-  NProgress.done();
+    NProgress.done();
 });

+ 88 - 88
src/plugins/tab.ts

@@ -3,94 +3,94 @@ import { RouteLocationMatched, RouteLocationNormalized, RouteLocationRaw } from
 import useTagsViewStore from '@/store/modules/tagsView';
 
 export default {
-  /**
-   * 刷新当前tab页签
-   * @param obj 标签对象
-   */
-  async refreshPage(obj?: RouteLocationNormalized): Promise<void> {
-    const { path, query, matched } = router.currentRoute.value;
-    if (obj === undefined) {
-      matched.forEach((m: RouteLocationMatched) => {
-        if (m.components && m.components.default && m.components.default.name) {
-          if (!['Layout', 'ParentView'].includes(m.components.default.name)) {
-            obj = {
-              name: m.components.default.name,
-              path: path,
-              query: query,
-              matched: undefined,
-              fullPath: undefined,
-              hash: undefined,
-              params: undefined,
-              redirectedFrom: undefined,
-              meta: undefined
-            };
-          }
+    /**
+     * 刷新当前tab页签
+     * @param obj 标签对象
+     */
+    async refreshPage(obj?: RouteLocationNormalized): Promise<void> {
+        const { path, query, matched } = router.currentRoute.value;
+        if (obj === undefined) {
+            matched.forEach((m: RouteLocationMatched) => {
+                if (m.components && m.components.default && m.components.default.name) {
+                    if (!['Layout', 'ParentView'].includes(m.components.default.name)) {
+                        obj = {
+                            name: m.components.default.name,
+                            path: path,
+                            query: query,
+                            matched: undefined,
+                            fullPath: undefined,
+                            hash: undefined,
+                            params: undefined,
+                            redirectedFrom: undefined,
+                            meta: undefined
+                        };
+                    }
+                }
+            });
         }
-      });
-    }
-    let query1: undefined | {} = {};
-    let path1: undefined | string = '';
-    if (obj) {
-      query1 = obj.query;
-      path1 = obj.path;
-    }
-    await useTagsViewStore().delCachedView(obj);
-    await router.replace({
-      path: '/redirect' + path1,
-      query: query1
-    });
-  },
-  // 关闭当前tab页签,打开新页签
-  closeOpenPage(obj: RouteLocationRaw): void {
-    useTagsViewStore().delView(router.currentRoute.value);
-    if (obj !== undefined) {
-      router.push(obj);
-    }
-  },
-  // 关闭指定tab页签
-  async closePage(obj?: RouteLocationNormalized): Promise<{ visitedViews: RouteLocationNormalized[]; cachedViews: string[] } | any> {
-    if (obj === undefined) {
-      // prettier-ignore
-      const { visitedViews } = await useTagsViewStore().delView(router.currentRoute.value)
-      const latestView = visitedViews.slice(-1)[0];
-      if (latestView) {
-        return router.push(latestView.fullPath);
-      }
-      return router.push('/');
+        let query1: undefined | {} = {};
+        let path1: undefined | string = '';
+        if (obj) {
+            query1 = obj.query;
+            path1 = obj.path;
+        }
+        await useTagsViewStore().delCachedView(obj);
+        await router.replace({
+            path: '/redirect' + path1,
+            query: query1
+        });
+    },
+    // 关闭当前tab页签,打开新页签
+    closeOpenPage(obj: RouteLocationRaw): void {
+        useTagsViewStore().delView(router.currentRoute.value);
+        if (obj !== undefined) {
+            router.push(obj);
+        }
+    },
+    // 关闭指定tab页签
+    async closePage(obj?: RouteLocationNormalized): Promise<{ visitedViews: RouteLocationNormalized[]; cachedViews: string[] } | any> {
+        if (obj === undefined) {
+            // prettier-ignore
+            const { visitedViews } = await useTagsViewStore().delView(router.currentRoute.value)
+            const latestView = visitedViews.slice(-1)[0];
+            if (latestView) {
+                return router.push(latestView.fullPath);
+            }
+            return router.push('/');
+        }
+        return useTagsViewStore().delView(obj);
+    },
+    // 关闭所有tab页签
+    closeAllPage() {
+        return useTagsViewStore().delAllViews();
+    },
+    // 关闭左侧tab页签
+    closeLeftPage(obj?: RouteLocationNormalized) {
+        return useTagsViewStore().delLeftTags(obj || router.currentRoute.value);
+    },
+    // 关闭右侧tab页签
+    closeRightPage(obj?: RouteLocationNormalized) {
+        return useTagsViewStore().delRightTags(obj || router.currentRoute.value);
+    },
+    // 关闭其他tab页签
+    closeOtherPage(obj?: RouteLocationNormalized) {
+        return useTagsViewStore().delOthersViews(obj || router.currentRoute.value);
+    },
+    /**
+     * 打开tab页签
+     * @param url 路由地址
+     * @param title 标题
+     * @param query 参数
+     */
+    openPage(url: string, title?: string, query?: any) {
+        const obj = { path: url, query: { ...query, title } };
+        return router.push(obj);
+    },
+    /**
+     * 修改tab页签
+     * @param obj 标签对象
+     */
+    updatePage(obj: RouteLocationNormalized) {
+        return useTagsViewStore().updateVisitedView(obj);
     }
-    return useTagsViewStore().delView(obj);
-  },
-  // 关闭所有tab页签
-  closeAllPage() {
-    return useTagsViewStore().delAllViews();
-  },
-  // 关闭左侧tab页签
-  closeLeftPage(obj?: RouteLocationNormalized) {
-    return useTagsViewStore().delLeftTags(obj || router.currentRoute.value);
-  },
-  // 关闭右侧tab页签
-  closeRightPage(obj?: RouteLocationNormalized) {
-    return useTagsViewStore().delRightTags(obj || router.currentRoute.value);
-  },
-  // 关闭其他tab页签
-  closeOtherPage(obj?: RouteLocationNormalized) {
-    return useTagsViewStore().delOthersViews(obj || router.currentRoute.value);
-  },
-  /**
-   * 打开tab页签
-   * @param url 路由地址
-   * @param title 标题
-   * @param query 参数
-   */
-  openPage(url: string, title?: string, query?: any) {
-    const obj = { path: url, query: { ...query, title } };
-    return router.push(obj);
-  },
-  /**
-   * 修改tab页签
-   * @param obj 标签对象
-   */
-  updatePage(obj: RouteLocationNormalized) {
-    return useTagsViewStore().updateVisitedView(obj);
-  }
 };

+ 213 - 213
src/store/modules/tagsView.ts

@@ -1,233 +1,233 @@
 import { RouteLocationNormalized } from 'vue-router';
 
 export const useTagsViewStore = defineStore('tagsView', () => {
-  const visitedViews = ref<RouteLocationNormalized[]>([]);
-  const cachedViews = ref<string[]>([]);
-  const iframeViews = ref<RouteLocationNormalized[]>([]);
+    const visitedViews = ref<RouteLocationNormalized[]>([]);
+    const cachedViews = ref<string[]>([]);
+    const iframeViews = ref<RouteLocationNormalized[]>([]);
 
-  const getVisitedViews = (): RouteLocationNormalized[] => {
-    return visitedViews.value as RouteLocationNormalized[];
-  };
-  const getIframeViews = (): RouteLocationNormalized[] => {
-    return iframeViews.value as RouteLocationNormalized[];
-  };
-  const getCachedViews = (): string[] => {
-    return cachedViews.value;
-  };
+    const getVisitedViews = (): RouteLocationNormalized[] => {
+        return visitedViews.value as RouteLocationNormalized[];
+    };
+    const getIframeViews = (): RouteLocationNormalized[] => {
+        return iframeViews.value as RouteLocationNormalized[];
+    };
+    const getCachedViews = (): string[] => {
+        return cachedViews.value;
+    };
 
-  const addView = (view: RouteLocationNormalized) => {
-    addVisitedView(view);
-    addCachedView(view);
-  };
+    const addView = (view: RouteLocationNormalized) => {
+        addVisitedView(view);
+        addCachedView(view);
+    };
 
-  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: RouteLocationNormalized): Promise<RouteLocationNormalized[]> => {
-    return new Promise((resolve) => {
-      iframeViews.value = iframeViews.value.filter((item: RouteLocationNormalized) => item.path !== view.path);
-      resolve([...(iframeViews.value as RouteLocationNormalized[])]);
-    });
-  };
-  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: RouteLocationNormalized
-  ): Promise<{
-    visitedViews: RouteLocationNormalized[];
-    cachedViews: string[];
-  }> => {
-    return new Promise((resolve) => {
-      delVisitedView(view);
-      if (!isDynamicRoute(view)) {
-        delCachedView(view);
-      }
-      resolve({
-        visitedViews: [...(visitedViews.value as RouteLocationNormalized[])],
-        cachedViews: [...cachedViews.value]
-      });
-    });
-  };
+    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: RouteLocationNormalized): Promise<RouteLocationNormalized[]> => {
+        return new Promise((resolve) => {
+            iframeViews.value = iframeViews.value.filter((item: RouteLocationNormalized) => item.path !== view.path);
+            resolve([...(iframeViews.value as RouteLocationNormalized[])]);
+        });
+    };
+    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: RouteLocationNormalized
+    ): Promise<{
+        visitedViews: RouteLocationNormalized[];
+        cachedViews: string[];
+    }> => {
+        return new Promise((resolve) => {
+            delVisitedView(view);
+            if (!isDynamicRoute(view)) {
+                delCachedView(view);
+            }
+            resolve({
+                visitedViews: [...(visitedViews.value as RouteLocationNormalized[])],
+                cachedViews: [...cachedViews.value]
+            });
+        });
+    };
 
-  const delVisitedView = (view: RouteLocationNormalized): Promise<RouteLocationNormalized[]> => {
-    return new Promise((resolve) => {
-      for (const [i, v] of visitedViews.value.entries()) {
-        if (v.path === view.path) {
-          visitedViews.value.splice(i, 1);
-          break;
+    const delVisitedView = (view: RouteLocationNormalized): Promise<RouteLocationNormalized[]> => {
+        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 as RouteLocationNormalized[])]);
+        });
+    };
+    const delCachedView = (view?: RouteLocationNormalized): Promise<string[]> => {
+        let viewName = '';
+        if (view) {
+            viewName = view.name as string;
         }
-      }
-      resolve([...(visitedViews.value as RouteLocationNormalized[])]);
-    });
-  };
-  const delCachedView = (view?: RouteLocationNormalized): Promise<string[]> => {
-    let viewName = '';
-    if (view) {
-      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: RouteLocationNormalized
-  ): Promise<{
-    visitedViews: RouteLocationNormalized[];
-    cachedViews: string[];
-  }> => {
-    return new Promise((resolve) => {
-      delOthersVisitedViews(view);
-      delOthersCachedViews(view);
-      resolve({
-        visitedViews: [...(visitedViews.value as RouteLocationNormalized[])],
-        cachedViews: [...cachedViews.value]
-      });
-    });
-  };
+        return new Promise((resolve) => {
+            const index = cachedViews.value.indexOf(viewName);
+            index > -1 && cachedViews.value.splice(index, 1);
+            resolve([...cachedViews.value]);
+        });
+    };
+    const delOthersViews = (
+        view: RouteLocationNormalized
+    ): Promise<{
+        visitedViews: RouteLocationNormalized[];
+        cachedViews: string[];
+    }> => {
+        return new Promise((resolve) => {
+            delOthersVisitedViews(view);
+            delOthersCachedViews(view);
+            resolve({
+                visitedViews: [...(visitedViews.value as RouteLocationNormalized[])],
+                cachedViews: [...cachedViews.value]
+            });
+        });
+    };
 
-  const delOthersVisitedViews = (view: RouteLocationNormalized): Promise<RouteLocationNormalized[]> => {
-    return new Promise((resolve) => {
-      visitedViews.value = visitedViews.value.filter((v: RouteLocationNormalized) => {
-        return v.meta?.affix || v.path === view.path;
-      });
-      resolve([...(visitedViews.value as RouteLocationNormalized[])]);
-    });
-  };
-  const delOthersCachedViews = (view: RouteLocationNormalized): 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: RouteLocationNormalized): Promise<RouteLocationNormalized[]> => {
+        return new Promise((resolve) => {
+            visitedViews.value = visitedViews.value.filter((v: RouteLocationNormalized) => {
+                return v.meta?.affix || v.path === view.path;
+            });
+            resolve([...(visitedViews.value as RouteLocationNormalized[])]);
+        });
+    };
+    const delOthersCachedViews = (view: RouteLocationNormalized): 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: RouteLocationNormalized[]; cachedViews: string[] }> => {
-    return new Promise((resolve) => {
-      delAllVisitedViews();
-      delAllCachedViews();
-      resolve({
-        visitedViews: [...(visitedViews.value as RouteLocationNormalized[])],
-        cachedViews: [...cachedViews.value]
-      });
-    });
-  };
-  const delAllVisitedViews = (): Promise<RouteLocationNormalized[]> => {
-    return new Promise((resolve) => {
-      visitedViews.value = visitedViews.value.filter((tag: RouteLocationNormalized) => tag.meta?.affix);
-      resolve([...(visitedViews.value as RouteLocationNormalized[])]);
-    });
-  };
+    const delAllViews = (): Promise<{ visitedViews: RouteLocationNormalized[]; cachedViews: string[] }> => {
+        return new Promise((resolve) => {
+            delAllVisitedViews();
+            delAllCachedViews();
+            resolve({
+                visitedViews: [...(visitedViews.value as RouteLocationNormalized[])],
+                cachedViews: [...cachedViews.value]
+            });
+        });
+    };
+    const delAllVisitedViews = (): Promise<RouteLocationNormalized[]> => {
+        return new Promise((resolve) => {
+            visitedViews.value = visitedViews.value.filter((tag: RouteLocationNormalized) => tag.meta?.affix);
+            resolve([...(visitedViews.value as RouteLocationNormalized[])]);
+        });
+    };
 
-  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: RouteLocationNormalized): void => {
-    for (let v of visitedViews.value) {
-      if (v.path === view.path) {
-        v = Object.assign(v, view);
-        break;
-      }
-    }
-  };
-  const delRightTags = (view: RouteLocationNormalized): Promise<RouteLocationNormalized[]> => {
-    return new Promise((resolve) => {
-      const index = visitedViews.value.findIndex((v: RouteLocationNormalized) => v.path === view.path);
-      if (index === -1) {
-        return;
-      }
-      visitedViews.value = visitedViews.value.filter((item: RouteLocationNormalized, idx: number) => {
-        if (idx <= index || (item.meta && item.meta.affix)) {
-          return true;
+    const updateVisitedView = (view: RouteLocationNormalized): void => {
+        for (let v of visitedViews.value) {
+            if (v.path === view.path) {
+                v = Object.assign(v, view);
+                break;
+            }
         }
-        const i = cachedViews.value.indexOf(item.name as string);
-        if (i > -1) {
-          cachedViews.value.splice(i, 1);
-        }
-        return false;
-      });
-      resolve([...(visitedViews.value as RouteLocationNormalized[])]);
-    });
-  };
-  const delLeftTags = (view: RouteLocationNormalized): Promise<RouteLocationNormalized[]> => {
-    return new Promise((resolve) => {
-      const index = visitedViews.value.findIndex((v: RouteLocationNormalized) => v.path === view.path);
-      if (index === -1) {
-        return;
-      }
-      visitedViews.value = visitedViews.value.filter((item: RouteLocationNormalized, idx: number) => {
-        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 as RouteLocationNormalized[])]);
-    });
-  };
+    };
+    const delRightTags = (view: RouteLocationNormalized): Promise<RouteLocationNormalized[]> => {
+        return new Promise((resolve) => {
+            const index = visitedViews.value.findIndex((v: RouteLocationNormalized) => v.path === view.path);
+            if (index === -1) {
+                return;
+            }
+            visitedViews.value = visitedViews.value.filter((item: RouteLocationNormalized, idx: number) => {
+                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 as RouteLocationNormalized[])]);
+        });
+    };
+    const delLeftTags = (view: RouteLocationNormalized): Promise<RouteLocationNormalized[]> => {
+        return new Promise((resolve) => {
+            const index = visitedViews.value.findIndex((v: RouteLocationNormalized) => v.path === view.path);
+            if (index === -1) {
+                return;
+            }
+            visitedViews.value = visitedViews.value.filter((item: RouteLocationNormalized, idx: number) => {
+                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 as RouteLocationNormalized[])]);
+        });
+    };
 
-  const addCachedView = (view: RouteLocationNormalized): void => {
-    const viewName = view.name as string;
-    if (!viewName) return;
-    if (cachedViews.value.includes(viewName)) return;
-    if (!view.meta?.noCache) {
-      cachedViews.value.push(viewName);
-    }
-  };
+    const addCachedView = (view: RouteLocationNormalized): void => {
+        const viewName = view.name as string;
+        if (!viewName) return;
+        if (cachedViews.value.includes(viewName)) return;
+        if (!view.meta?.noCache) {
+            cachedViews.value.push(viewName);
+        }
+    };
 
-  const isDynamicRoute = (view: RouteLocationNormalized): boolean => {
-    // 检查匹配的路由记录中是否有动态段
-    return view.matched.some((m) => m.path.includes(':'));
-  };
+    const isDynamicRoute = (view: RouteLocationNormalized): boolean => {
+        // 检查匹配的路由记录中是否有动态段
+        return view.matched.some((m) => m.path.includes(':'));
+    };
 
-  return {
-    visitedViews,
-    cachedViews,
-    iframeViews,
+    return {
+        visitedViews,
+        cachedViews,
+        iframeViews,
 
-    getVisitedViews,
-    getIframeViews,
-    getCachedViews,
+        getVisitedViews,
+        getIframeViews,
+        getCachedViews,
 
-    addVisitedView,
-    addCachedView,
-    delVisitedView,
-    delCachedView,
-    updateVisitedView,
-    addView,
-    delView,
-    delAllViews,
-    delAllVisitedViews,
-    delAllCachedViews,
-    delOthersViews,
-    delRightTags,
-    delLeftTags,
-    addIframeView,
-    delIframeView
-  };
+        addVisitedView,
+        addCachedView,
+        delVisitedView,
+        delCachedView,
+        updateVisitedView,
+        addView,
+        delView,
+        delAllViews,
+        delAllVisitedViews,
+        delAllCachedViews,
+        delOthersViews,
+        delRightTags,
+        delLeftTags,
+        addIframeView,
+        delIframeView
+    };
 });
 export default useTagsViewStore;