From e3fda52801f03077c35923b395729e09890811e7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E4=B8=80=E4=B8=87?= <52823142+Ten-K@users.noreply.github.com> Date: Wed, 2 Mar 2022 11:15:51 +0800 Subject: [PATCH] feat: add iframe router --- mock/asyncRoutes.ts | 35 ++++++++++- .../ReIcon/src/iconifyIconOffline.ts | 2 + src/layout/frameView.vue | 58 +++++++++++++++++++ src/plugins/i18n/en/menus.ts | 5 +- src/plugins/i18n/zh-CN/menus.ts | 5 +- src/router/utils.ts | 3 + 6 files changed, 105 insertions(+), 3 deletions(-) create mode 100644 src/layout/frameView.vue diff --git a/mock/asyncRoutes.ts b/mock/asyncRoutes.ts index 68d45b28e..d9774c9fb 100644 --- a/mock/asyncRoutes.ts +++ b/mock/asyncRoutes.ts @@ -64,6 +64,38 @@ const permissionRouter = { ] }; +const frameRouter = { + path: "/iframe", + name: "reFrame", + redirect: "/iframe/pure", + meta: { + icon: "monitor", + title: "menus.hsExternalPage", + i18n: true, + rank: 10 + }, + children: [ + { + path: "/frame/pure", + name: "reFramePure", + meta: { + i18n: true, + title: "menus.hsPureDocument", + frameSrc: "https://pure-admin-doc.vercel.app" + } + }, + { + path: "/iframe/ep", + name: "reFrameEp", + meta: { + i18n: true, + title: "menus.hsEpDocument", + frameSrc: "https://element-plus.gitee.io/zh-CN/" + } + } + ] +}; + const tabsRouter = { path: "/tabs", name: "reTabs", @@ -72,7 +104,7 @@ const tabsRouter = { icon: "IF-team-icontabs", title: "menus.hstabs", i18n: true, - rank: 10 + rank: 11 }, children: [ { @@ -113,6 +145,7 @@ export default [ code: 0, info: [ tabsRouter, + frameRouter, systemRouter, setDifAuthority("v-admin", permissionRouter) ] diff --git a/src/components/ReIcon/src/iconifyIconOffline.ts b/src/components/ReIcon/src/iconifyIconOffline.ts index 158efbc9e..9b65caaa5 100644 --- a/src/components/ReIcon/src/iconifyIconOffline.ts +++ b/src/components/ReIcon/src/iconifyIconOffline.ts @@ -24,6 +24,7 @@ import Location from "@iconify-icons/ep/location"; import Tickets from "@iconify-icons/ep/tickets"; import OfficeBuilding from "@iconify-icons/ep/office-building"; import Notebook from "@iconify-icons/ep/notebook"; +import Monitor from "@iconify-icons/ep/monitor"; addIcon("check", Check); addIcon("menu", Menu); addIcon("home-filled", HomeFilled); @@ -46,6 +47,7 @@ addIcon("location", Location); addIcon("tickets", Tickets); addIcon("office-building", OfficeBuilding); addIcon("notebook", Notebook); +addIcon("monitor", Monitor); // remixicon import arrowRightSLine from "@iconify-icons/ri/arrow-right-s-line"; diff --git a/src/layout/frameView.vue b/src/layout/frameView.vue new file mode 100644 index 000000000..8c58ddce9 --- /dev/null +++ b/src/layout/frameView.vue @@ -0,0 +1,58 @@ + + + + diff --git a/src/plugins/i18n/en/menus.ts b/src/plugins/i18n/en/menus.ts index cc67c1483..b61a73e34 100644 --- a/src/plugins/i18n/en/menus.ts +++ b/src/plugins/i18n/en/menus.ts @@ -36,5 +36,8 @@ export default { externalLink: "External Link", hsAble: "Able", hsMenuTree: "Menu Tree", - hsWatermark: "Water Mark" + hsWatermark: "Water Mark", + hsExternalPage: "External Page", + hsPureDocument: "Pure Document", + hsEpDocument: "Element Plus Document" }; diff --git a/src/plugins/i18n/zh-CN/menus.ts b/src/plugins/i18n/zh-CN/menus.ts index 7451f9bb1..a0909e9e8 100644 --- a/src/plugins/i18n/zh-CN/menus.ts +++ b/src/plugins/i18n/zh-CN/menus.ts @@ -36,5 +36,8 @@ export default { externalLink: "外链", hsAble: "功能", hsMenuTree: "菜单树结构", - hsWatermark: "水印" + hsWatermark: "水印", + hsExternalPage: "外部页面", + hsPureDocument: "平台文档", + hsEpDocument: "Element Plus文档" }; diff --git a/src/router/utils.ts b/src/router/utils.ts index 9b2fc3a2d..3efda9374 100644 --- a/src/router/utils.ts +++ b/src/router/utils.ts @@ -13,6 +13,7 @@ import { RouteConfigs } from "/@/layout/types"; import { buildHierarchyTree } from "/@/utils/tree"; import { usePermissionStoreHook } from "/@/store/modules/permission"; const Layout = () => import("/@/layout/index.vue"); +const IFrame = () => import("/@/layout/frameView.vue"); // https://cn.vitejs.dev/guide/features.html#glob-import const modulesRoutes = import.meta.glob("/src/views/**/*.{vue,tsx}"); @@ -218,6 +219,8 @@ function addAsyncRoutes(arrRoutes: Array) { arrRoutes.forEach((v: RouteRecordRaw) => { if (v.redirect) { v.component = Layout; + } else if (v.meta?.frameSrc) { + v.component = IFrame; } else { const index = modulesRoutesKeys.findIndex(ev => ev.includes(v.path)); v.component = modulesRoutes[modulesRoutesKeys[index]];