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 @@