From 7272158c8e133afcdf752ca09a70c0bd969d7393 Mon Sep 17 00:00:00 2001
From: Junjie <fallin.jie@qq.com>
Date: 星期三, 25 三月 2026 19:57:26 +0800
Subject: [PATCH] #
---
src/main/webapp/views/index.html | 191 ++++++++++++++++++++++++++++++++++-------------
1 files changed, 139 insertions(+), 52 deletions(-)
diff --git a/src/main/webapp/views/index.html b/src/main/webapp/views/index.html
index 37d8d39..7f4c3e4 100644
--- a/src/main/webapp/views/index.html
+++ b/src/main/webapp/views/index.html
@@ -474,11 +474,24 @@
}
.page-frame {
+ position: absolute;
+ inset: 0;
width: 100%;
height: 100%;
border: 0;
display: block;
background: #fff;
+ opacity: 0;
+ visibility: hidden;
+ pointer-events: none;
+ z-index: 0;
+ }
+
+ .page-frame.is-active {
+ opacity: 1;
+ visibility: visible;
+ pointer-events: auto;
+ z-index: 1;
}
.page-loading {
@@ -792,7 +805,7 @@
<el-main class="content-main">
<div class="frame-wrapper">
- <div class="page-loading" v-if="pageLoading">
+ <div key="page-loading" class="page-loading" v-show="pageLoading">
<i class="el-icon-loading"></i>
<span>{{ loadingText }}</span>
</div>
@@ -800,9 +813,8 @@
<iframe
v-for="tab in tabs"
:key="'frame-' + tab.name"
- class="page-frame"
+ :class="['page-frame', { 'is-active': activeTab === tab.name }]"
:data-tab-name="tab.name"
- v-show="activeTab === tab.name"
:src="tab.currentSrc"
@load="handleFrameLoad(tab.name)">
</iframe>
@@ -862,13 +874,15 @@
<script type="text/javascript" src="../static/vue/js/vue.min.js"></script>
<script type="text/javascript" src="../static/vue/element/element.js"></script>
<script>
+ var DASHBOARD_VIEW_VERSION = "20260317-dashboard-stop-password-mask";
var HOME_TAB_CONFIG = {
- title: "鎺у埗涓績",
- url: baseUrl + "/views/watch/console.html",
+ title: "绯荤粺浠〃鐩�",
+ url: baseUrl + "/views/dashboard/dashboard.html?layoutVersion=" + encodeURIComponent(DASHBOARD_VIEW_VERSION),
home: true,
- group: "瀹炴椂鐩戞帶",
+ group: "绯荤粺姒傝",
menuKey: ""
};
+ var LEGACY_HOME_TAB_URL = baseUrl + "/views/watch/console.html";
var PROFILE_TAB_CONFIG = {
title: "鍩烘湰璧勬枡",
url: baseUrl + "/views/detail.html?resourceId=8",
@@ -891,7 +905,7 @@
"common.profile": "鍩烘湰璧勬枡",
"common.logout": "閫�鍑虹櫥褰�",
"common.closeOtherTabs": "鍏抽棴鍏朵粬椤电",
- "common.backHome": "杩斿洖鎺у埗涓績",
+ "common.backHome": "杩斿洖浠〃鐩�",
"common.aiAssistant": "AI鍔╂墜",
"common.workPage": "宸ヤ綔椤甸潰",
"common.businessPage": "涓氬姟椤甸潰",
@@ -902,8 +916,8 @@
"index.fakeRunning": "浠跨湡杩愯涓�",
"index.fakeStopped": "浠跨湡鏈繍琛�",
"index.licenseExpiring": "璁稿彲璇佸嵆灏嗚繃鏈�",
- "index.homeTab": "鎺у埗涓績",
- "index.homeGroup": "瀹炴椂鐩戞帶",
+ "index.homeTab": "绯荤粺浠〃鐩�",
+ "index.homeGroup": "绯荤粺姒傝",
"index.profileGroup": "璐︽埛涓績",
"index.versionLoading": "Version loading...",
"index.licenseExpireAt": "璁稿彲璇佸皢浜� {0} 杩囨湡锛屽墿浣欐湁鏁堟湡锛歿1} 澶┿��",
@@ -1175,7 +1189,7 @@
return this.tl(title);
},
findMenuMeta: function (tab) {
- var normalizedUrl;
+ var menuEntry;
var i;
var j;
var group;
@@ -1183,20 +1197,69 @@
if (!tab) {
return null;
}
- normalizedUrl = this.resolveViewSrc(tab.url);
+ if (tab.menuKey) {
+ for (i = 0; i < this.menus.length; i++) {
+ group = this.menus[i];
+ for (j = 0; j < group.subMenu.length; j++) {
+ item = group.subMenu[j];
+ if (item.tabKey === tab.menuKey) {
+ return {
+ group: group,
+ item: item
+ };
+ }
+ }
+ }
+ }
+ menuEntry = this.findMenuEntryByUrl(tab.url);
+ if (menuEntry) {
+ return menuEntry;
+ }
+ return null;
+ },
+ normalizeMenuMatchUrl: function (url, stripQuery) {
+ var normalized = this.resolveViewSrc(url || "");
+ var hashIndex = normalized.indexOf("#");
+ var queryIndex;
+ if (hashIndex > -1) {
+ normalized = normalized.substring(0, hashIndex);
+ }
+ if (stripQuery) {
+ queryIndex = normalized.indexOf("?");
+ if (queryIndex > -1) {
+ normalized = normalized.substring(0, queryIndex);
+ }
+ }
+ return normalized;
+ },
+ findMenuEntryByUrl: function (url) {
+ var normalized = this.normalizeMenuMatchUrl(url, false);
+ var normalizedBase = this.normalizeMenuMatchUrl(url, true);
+ var fallback = null;
+ var i;
+ var j;
+ var group;
+ var item;
+
for (i = 0; i < this.menus.length; i++) {
group = this.menus[i];
for (j = 0; j < group.subMenu.length; j++) {
item = group.subMenu[j];
- if ((tab.menuKey && item.tabKey === tab.menuKey) || item.url === normalizedUrl) {
+ if (item.url === normalized) {
return {
+ group: group,
+ item: item
+ };
+ }
+ if (!fallback && this.normalizeMenuMatchUrl(item.url, true) === normalizedBase) {
+ fallback = {
group: group,
item: item
};
}
}
}
- return null;
+ return fallback;
},
syncTabMeta: function (tab, homeConfig, profileConfig) {
var menuMeta;
@@ -1257,12 +1320,16 @@
};
},
normalizeStoredTab: function (tab) {
+ var homeConfig = this.resolveHomeConfig();
+ var resolvedUrl = this.resolveViewSrc(tab.url);
+ var isLegacyHome = resolvedUrl === this.resolveViewSrc(LEGACY_HOME_TAB_URL);
+ var isHome = !!tab.home || isLegacyHome;
var created = this.createTab({
- title: this.translateTabTitle(tab.title),
- url: this.resolveViewSrc(tab.url),
- home: !!tab.home,
- group: this.tl(tab.group || ""),
- menuKey: tab.menuKey || ""
+ title: isHome ? homeConfig.title : this.translateTabTitle(tab.title),
+ url: isHome ? homeConfig.url : resolvedUrl,
+ home: isHome,
+ group: isHome ? homeConfig.group : this.tl(tab.group || ""),
+ menuKey: isHome ? homeConfig.menuKey : (tab.menuKey || "")
});
created.loaded = false;
return created;
@@ -1285,6 +1352,9 @@
}
}
active = parsed ? parsed.activeTab : "";
+ if (this.resolveViewSrc(active) === this.resolveViewSrc(LEGACY_HOME_TAB_URL)) {
+ active = homeTab.name;
+ }
} catch (e) {
tabs = [];
active = "";
@@ -1593,40 +1663,55 @@
});
},
findMenuKeyByUrl: function (url) {
- var normalized = this.resolveViewSrc(url);
- var i;
- var j;
- var group;
- var item;
-
- for (i = 0; i < this.menus.length; i++) {
- group = this.menus[i];
- for (j = 0; j < group.subMenu.length; j++) {
- item = group.subMenu[j];
- if (item.url === normalized) {
- return item.tabKey;
- }
- }
+ var entry = this.findMenuEntryByUrl(url);
+ if (entry && entry.item) {
+ return entry.item.tabKey || "";
}
return "";
},
findMenuGroupIndexByUrl: function (url) {
- var normalized = this.resolveViewSrc(url);
+ var entry = this.findMenuEntryByUrl(url);
+ if (entry && entry.group) {
+ return "group-" + entry.group.menuId;
+ }
+ return "";
+ },
+ injectDashboardMenu: function (menus) {
+ var homeConfig = this.resolveHomeConfig();
+ var dashboardUrl = this.resolveViewSrc(homeConfig.url);
var i;
var j;
var group;
var item;
- for (i = 0; i < this.menus.length; i++) {
- group = this.menus[i];
+ for (i = 0; i < menus.length; i++) {
+ group = menus[i];
for (j = 0; j < group.subMenu.length; j++) {
item = group.subMenu[j];
- if (item.url === normalized) {
- return "group-" + group.menuId;
+ if (item.url === dashboardUrl) {
+ item.name = homeConfig.title;
+ group.menu = homeConfig.group;
+ group.menuCode = group.menuCode || "index";
+ HOME_TAB_CONFIG.menuKey = item.tabKey || dashboardUrl;
+ return menus;
}
}
}
- return "";
+
+ HOME_TAB_CONFIG.menuKey = dashboardUrl;
+ menus.unshift({
+ menuId: "dashboard-home",
+ menu: homeConfig.group,
+ menuCode: "index",
+ subMenu: [{
+ id: "dashboard-home-tab",
+ name: homeConfig.title,
+ code: "dashboard/dashboard.html",
+ url: dashboardUrl,
+ tabKey: dashboardUrl
+ }]
+ });
+ return menus;
},
normalizeMenuData: function (data) {
var result = [];
@@ -1659,7 +1744,7 @@
});
}
- return result;
+ return this.injectDashboardMenu(result);
},
buildMenuSrc: function (code, resourceId) {
var normalized = code || "";
@@ -1720,11 +1805,9 @@
var syncVersion;
var applyMenuState;
- if (!this.isHomeTabUrl(targetUrl)) {
- activeMenuKey = this.findMenuKeyByUrl(targetUrl);
- if (activeMenuKey) {
- groupIndex = this.findMenuGroupIndexByUrl(targetUrl);
- }
+ activeMenuKey = this.findMenuKeyByUrl(targetUrl);
+ if (activeMenuKey) {
+ groupIndex = this.findMenuGroupIndexByUrl(targetUrl);
}
this.activeMenuKey = activeMenuKey;
@@ -1983,31 +2066,35 @@
window.index = window.index || {};
window.index.loadView = function (param) {
var url;
+ var menuEntry;
if (!param || !param.menuPath) {
return;
}
url = that.resolveViewSrc(param.menuPath);
+ menuEntry = that.findMenuEntryByUrl(url);
that.addOrActivateTab({
- title: that.stripTags(param.menuName) || that.t("common.workPage"),
- url: url,
+ title: that.stripTags(param.menuName) || (menuEntry && menuEntry.item ? menuEntry.item.name : that.t("common.workPage")),
+ url: menuEntry && menuEntry.item ? menuEntry.item.url : url,
home: false,
- group: that.t("common.businessPage"),
- menuKey: that.findMenuKeyByUrl(url)
+ group: menuEntry && menuEntry.group ? menuEntry.group.menu : that.t("common.businessPage"),
+ menuKey: menuEntry && menuEntry.item ? menuEntry.item.tabKey : that.findMenuKeyByUrl(url)
});
};
window.index.loadHome = function (param) {
var url;
+ var menuEntry;
if (!param || !param.menuPath) {
that.openHomeTab();
return;
}
url = that.resolveViewSrc(param.menuPath);
+ menuEntry = that.findMenuEntryByUrl(url);
that.addOrActivateTab({
- title: that.stripTags(param.menuName) || that.resolveHomeConfig().title,
- url: url,
+ title: that.stripTags(param.menuName) || (menuEntry && menuEntry.item ? menuEntry.item.name : that.resolveHomeConfig().title),
+ url: menuEntry && menuEntry.item ? menuEntry.item.url : url,
home: true,
- group: that.resolveHomeConfig().group,
- menuKey: that.findMenuKeyByUrl(url)
+ group: menuEntry && menuEntry.group ? menuEntry.group.menu : that.resolveHomeConfig().group,
+ menuKey: menuEntry && menuEntry.item ? menuEntry.item.tabKey : that.findMenuKeyByUrl(url)
});
};
--
Gitblit v1.9.1