From b13d74547445d362ad3d2b4c29e2db747c987cd2 Mon Sep 17 00:00:00 2001 From: otis <33190365+o-cc@users.noreply.github.com> Date: Mon, 22 Jan 2024 11:10:36 +0800 Subject: [PATCH] =?UTF-8?q?=E5=86=85=E5=B5=8C`iframe`=E9=A1=B5=E6=94=AF?= =?UTF-8?q?=E6=8C=81=E8=AE=BE=E7=BD=AE`keepAlive`=EF=BC=8C=E4=BF=9D?= =?UTF-8?q?=E6=8C=81=E9=A1=B5=E9=9D=A2=E7=8A=B6=E6=80=81=20(#873)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * pref: keep alive iframe * pref: default maxCount is 10 item * pref: 渲染iframe时,移除默认的slot渲染frameView组件 * perf: fix frame reload error after hmr * perf: 通过路由配置keepAlive frame * perf: refresh keep alive iframe --- mock/asyncRoutes.ts | 6 + src/layout/components/appMain.vue | 120 ++++++++++-------- .../components/keepAliveFrame/index.vue | 79 ++++++++++++ .../keepAliveFrame/useMultiFrame.ts | 25 ++++ src/layout/frameView.vue | 24 +++- 5 files changed, 198 insertions(+), 56 deletions(-) create mode 100644 src/layout/components/keepAliveFrame/index.vue create mode 100644 src/layout/components/keepAliveFrame/useMultiFrame.ts diff --git a/mock/asyncRoutes.ts b/mock/asyncRoutes.ts index ca7514a52..af626514a 100644 --- a/mock/asyncRoutes.ts +++ b/mock/asyncRoutes.ts @@ -118,6 +118,7 @@ const frameRouter = { meta: { title: "menus.hsEpDocument", frameSrc: "https://element-plus.org/zh-CN/", + keepAlive: true, roles: ["admin", "common"] } }, @@ -127,6 +128,7 @@ const frameRouter = { meta: { title: "menus.hsTailwindcssDocument", frameSrc: "https://tailwindcss.com/docs/installation", + keepAlive: true, roles: ["admin", "common"] } }, @@ -136,6 +138,7 @@ const frameRouter = { meta: { title: "menus.hsVueDocument", frameSrc: "https://cn.vuejs.org/", + keepAlive: true, roles: ["admin", "common"] } }, @@ -145,6 +148,7 @@ const frameRouter = { meta: { title: "menus.hsViteDocument", frameSrc: "https://cn.vitejs.dev/", + keepAlive: true, roles: ["admin", "common"] } }, @@ -154,6 +158,7 @@ const frameRouter = { meta: { title: "menus.hsPiniaDocument", frameSrc: "https://pinia.vuejs.org/zh/index.html", + keepAlive: true, roles: ["admin", "common"] } }, @@ -163,6 +168,7 @@ const frameRouter = { meta: { title: "menus.hsRouterDocument", frameSrc: "https://router.vuejs.org/zh/", + keepAlive: true, roles: ["admin", "common"] } } diff --git a/src/layout/components/appMain.vue b/src/layout/components/appMain.vue index b3564cd7d..0e7927dd3 100644 --- a/src/layout/components/appMain.vue +++ b/src/layout/components/appMain.vue @@ -1,6 +1,7 @@ + diff --git a/src/layout/components/keepAliveFrame/useMultiFrame.ts b/src/layout/components/keepAliveFrame/useMultiFrame.ts new file mode 100644 index 000000000..73a779d2e --- /dev/null +++ b/src/layout/components/keepAliveFrame/useMultiFrame.ts @@ -0,0 +1,25 @@ +const MAP = new Map(); + +export const useMultiFrame = () => { + function setMap(path, Comp) { + MAP.set(path, Comp); + } + + function getMap(path?) { + if (path) { + return MAP.get(path); + } + return [...MAP.entries()]; + } + + function delMap(path) { + MAP.delete(path); + } + + return { + setMap, + getMap, + delMap, + MAP + }; +}; diff --git a/src/layout/frameView.vue b/src/layout/frameView.vue index 35660488e..c7c9719d8 100644 --- a/src/layout/frameView.vue +++ b/src/layout/frameView.vue @@ -1,18 +1,24 @@