| | |
| | | } |
| | | |
| | | .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 { |
| | |
| | | |
| | | <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> |
| | |
| | | <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> |
| | |
| | | <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", |
| | |
| | | "common.profile": "基本资料", |
| | | "common.logout": "退出登录", |
| | | "common.closeOtherTabs": "关闭其他页签", |
| | | "common.backHome": "返回控制中心", |
| | | "common.backHome": "返回仪表盘", |
| | | "common.aiAssistant": "AI助手", |
| | | "common.workPage": "工作页面", |
| | | "common.businessPage": "业务页面", |
| | |
| | | "index.fakeRunning": "仿真运行中", |
| | | "index.fakeStopped": "仿真未运行", |
| | | "index.licenseExpiring": "许可证即将过期", |
| | | "index.homeTab": "控制中心", |
| | | "index.homeGroup": "实时监控", |
| | | "index.homeTab": "系统仪表盘", |
| | | "index.homeGroup": "系统概览", |
| | | "index.profileGroup": "账户中心", |
| | | "index.versionLoading": "Version loading...", |
| | | "index.licenseExpireAt": "许可证将于 {0} 过期,剩余有效期:{1} 天。", |
| | |
| | | return this.tl(title); |
| | | }, |
| | | findMenuMeta: function (tab) { |
| | | var normalizedUrl; |
| | | var menuEntry; |
| | | var i; |
| | | var j; |
| | | var group; |
| | |
| | | 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; |
| | |
| | | }; |
| | | }, |
| | | 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; |
| | |
| | | } |
| | | } |
| | | active = parsed ? parsed.activeTab : ""; |
| | | if (this.resolveViewSrc(active) === this.resolveViewSrc(LEGACY_HOME_TAB_URL)) { |
| | | active = homeTab.name; |
| | | } |
| | | } catch (e) { |
| | | tabs = []; |
| | | active = ""; |
| | |
| | | }); |
| | | }, |
| | | 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 = []; |
| | |
| | | }); |
| | | } |
| | | |
| | | return result; |
| | | return this.injectDashboardMenu(result); |
| | | }, |
| | | buildMenuSrc: function (code, resourceId) { |
| | | var normalized = code || ""; |
| | |
| | | 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; |
| | |
| | | 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) |
| | | }); |
| | | }; |
| | | |