| | |
| | | </div> |
| | | <div class="vol-menu"> |
| | | <el-scrollbar style="height: 100%"> |
| | | <VolMenu :currentMenuId="currentMenuId" :on-select="onSelect" :enable="true" :open-select="false" |
| | | :isCollapse="isCollapse" :list="menuOptions"></VolMenu> |
| | | <VolMenu |
| | | :currentMenuId="currentMenuId" |
| | | :on-select="onSelect" |
| | | :enable="true" |
| | | :open-select="false" |
| | | :isCollapse="isCollapse" |
| | | :list="menuOptions" |
| | | ></VolMenu> |
| | | </el-scrollbar> |
| | | </div> |
| | | </div> |
| | |
| | | <span v-if="!item.icon"> {{ item.text }}</span> |
| | | <i v-else :class="item.icon"></i> |
| | | </a> |
| | | </div> --> |
| | | </div>--> |
| | | </div> |
| | | <div class="header-info"> |
| | | <div class="h-link"> |
| | | <a href="javascript:void(0)" @click="to(item)" v-for="(item, index) in links.filter((c) => { |
| | | <a |
| | | href="javascript:void(0)" |
| | | @click="to(item)" |
| | | v-for="(item, index) in links.filter((c) => { |
| | | return c.icon; |
| | | })" :key="index"> |
| | | <span> {{ item.text }}</span> |
| | | })" |
| | | :key="index" |
| | | > |
| | | <span>{{ item.text }}</span> |
| | | </a> |
| | | |
| | | </div> |
| | | <div> |
| | | <img class="user-header" :src="userImg" :onerror="errorImg" /> |
| | |
| | | </div> |
| | | </div> |
| | | <div class="vol-path"> |
| | | <el-tabs @tab-click="selectNav" @tab-remove="removeNav" @contextmenu.prevent="bindRightClickMenu(false)" |
| | | type="border-card" class="header-navigation" v-model="selectId" :strtch="false"> |
| | | <el-tab-pane v-for="(item, navIndex) in navigation" type="card" :name="navIndex + ''" :closable="navIndex > 0" |
| | | :key="navIndex" :label="item.name"> |
| | | <el-tabs |
| | | @tab-click="selectNav" |
| | | @tab-remove="removeNav" |
| | | @contextmenu.prevent="bindRightClickMenu(false)" |
| | | type="border-card" |
| | | class="header-navigation" |
| | | v-model="selectId" |
| | | :strtch="false" |
| | | > |
| | | <el-tab-pane |
| | | v-for="(item, navIndex) in navigation" |
| | | type="card" |
| | | :name="navIndex + ''" |
| | | :closable="navIndex > 0" |
| | | :key="navIndex" |
| | | :label="item.name" |
| | | > |
| | | <span style="display: none">{{ navIndex }}</span> |
| | | </el-tab-pane> |
| | | </el-tabs> |
| | |
| | | <el-button link @click="closeTabs()"> |
| | | <i class="el-icon-close"></i> |
| | | {{ |
| | | navigation.length == 2 ? "å
³éèå" : "å
³éææ" |
| | | }}</el-button> |
| | | navigation.length == 2 ? "å
³éèå" : "å
³éææ" |
| | | }} |
| | | </el-button> |
| | | </li> |
| | | <li v-show="visibleItem.left"> |
| | | <el-button link @click="closeTabs('left')"><i class="el-icon-back"></i>å
³é左边</el-button> |
| | | <el-button link @click="closeTabs('left')"> |
| | | <i class="el-icon-back"></i>å
³é左边 |
| | | </el-button> |
| | | </li> |
| | | <li v-show="visibleItem.right"> |
| | | <el-button link @click="closeTabs('right')"> |
| | | <i class="el-icon-right"></i>å
³éå³è¾¹</el-button> |
| | | <i class="el-icon-right"></i>å
³éå³è¾¹ |
| | | </el-button> |
| | | </li> |
| | | <li v-show="visibleItem.other"> |
| | | <el-button link @click="closeTabs('other')"><i class="el-icon-right"></i>å
³éå
¶ä» |
| | | <el-button link @click="closeTabs('other')"> |
| | | <i class="el-icon-right"></i>å
³éå
¶ä» |
| | | </el-button> |
| | | </li> |
| | | </ul> |
| | |
| | | <loading v-show="$store.getters.isLoading()"></loading> |
| | | <router-view v-slot="{ Component }"> |
| | | <keep-alive> |
| | | <component :is="Component" :key="$route.name" |
| | | v-if="!$route.meta || ($route.meta && !$route.meta.hasOwnProperty('keepAlive'))" /> |
| | | <component |
| | | :is="Component" |
| | | :key="$route.name" |
| | | v-if="!$route.meta || ($route.meta && !$route.meta.hasOwnProperty('keepAlive'))" |
| | | /> |
| | | </keep-alive> |
| | | <component :is="Component" :key="$route.name" v-if="$route.meta && $route.meta.hasOwnProperty('keepAlive')" /> |
| | | <component |
| | | :is="Component" |
| | | :key="$route.name" |
| | | v-if="$route.meta && $route.meta.hasOwnProperty('keepAlive')" |
| | | /> |
| | | </router-view> |
| | | </el-scrollbar> |
| | | </div> |
| | | </div> |
| | | <el-drawer title="鿩䏻é¢" v-model="drawer_model" direction="rtl" destroy-on-close> |
| | | <div class="theme-selector"> |
| | | <div @click="changeTheme(item.name)" class="item" v-for="(item, index) in theme_color" :key="index" |
| | | :style="{ background: item.color }"> |
| | | <div v-show="item.leftColor" :style="{ background: item.leftColor }" style="height: 100%; width: 20px" |
| | | class="t-left"></div> |
| | | <div |
| | | @click="changeTheme(item.name)" |
| | | class="item" |
| | | v-for="(item, index) in theme_color" |
| | | :key="index" |
| | | :style="{ background: item.color }" |
| | | > |
| | | <div |
| | | v-show="item.leftColor" |
| | | :style="{ background: item.leftColor }" |
| | | style="height: 100%; width: 20px" |
| | | class="t-left" |
| | | ></div> |
| | | <div class="t-right"></div> |
| | | </div> |
| | | </div> |
| | |
| | | import VolMenu from "@/components/basic/VolElementMenu.vue"; |
| | | import Message from "./index/Message.vue"; |
| | | import MessageConfig from "./index/MessageConfig.js"; |
| | | var imgUrl = require("@/assets/imgs/wms_x.png"); |
| | | var imgUrl = require("@/assets/imgs/wcs_logo.png"); |
| | | var $this; |
| | | var $interval; |
| | | var $indexDate; |
| | |
| | | ref, |
| | | watch, |
| | | onMounted, |
| | | getCurrentInstance, |
| | | getCurrentInstance |
| | | } from "vue"; |
| | | import { useRouter, useRoute } from "vue-router"; |
| | | import store from "../store/index"; |
| | |
| | | components: { |
| | | VolMenu, |
| | | loading, |
| | | Message, |
| | | Message |
| | | }, |
| | | |
| | | data() { |
| | |
| | | rightTabs: true, |
| | | otherTabs: true, |
| | | menuLeft: 0, |
| | | menuTop: 0, |
| | | menuTop: 0 |
| | | // contextMenuVisible: false, // å³é®å
³éæ¾/é |
| | | }; |
| | | }, |
| | | setup(props, context) { |
| | | let client = ref(null); |
| | | |
| | | // è·åå
¨å±å±æ§åæ¹æ³ |
| | | const { proxy } = getCurrentInstance(); |
| | | |
| | |
| | | { name: "orange2", color: "#ff9900", leftColor: "rgb(232 141 5)" }, |
| | | { name: "green", color: "rgb(25, 190, 107)" }, |
| | | { name: "green2", color: "rgb(25, 190, 107)", leftColor: "#019e4f" }, |
| | | { name: "white", color: "#fff" }, |
| | | { name: "white", color: "#fff" } |
| | | ]); |
| | | const links = ref([ |
| | | // { |
| | | // text: "æ¡æ¶è§é¢", |
| | | // path: "https://www.cctalk.com/m/group/90268531", |
| | | // id: -3, |
| | | // }, |
| | | // { text: "大屿°æ®", path: "/bigdata", id: -3 }, |
| | | // { |
| | | // text: "æ¡æ¶ææ¡£", |
| | | // path: "http://v2.volcore.xyz/document/guide", |
| | | // id: -2, |
| | | // }, { |
| | | // text: "æ¡æ¶ä¼ä¸ç", |
| | | // path: "http://pro.volcore.xyz/", |
| | | // id: 10, |
| | | // }, |
| | | { |
| | | text: "大屿°æ®", |
| | | path: "/temppage", |
| | | id: -2, |
| | | icon: "el-icon-switch-button" |
| | | }, |
| | | { text: "个人ä¸å¿", path: "/UserInfo", id: -1, icon: "el-icon-s-custom" }, |
| | | { |
| | | text: "å®å
¨éåº", |
| | | path: "/login", |
| | | id: -4, |
| | | icon: "el-icon-switch-button", |
| | | }, |
| | | id: -1, |
| | | icon: "el-icon-switch-button" |
| | | } |
| | | ]); |
| | | const errorImg = ref( |
| | | 'this.src="' + require("@/assets/imgs/error-img.png") + '"' |
| | |
| | | left: false, |
| | | right: false, |
| | | all: false, |
| | | other: false, |
| | | other: false |
| | | }); |
| | | const userImg = ref(""); |
| | | const navigation = reactive([ |
| | | { orderNo: "0", id: "1", name: "é¦é¡µ", path: "/home" }, |
| | | { orderNo: "0", id: "1", name: "é¦é¡µ", path: "/home" } |
| | | ]); |
| | | const logo = ref(imgUrl); |
| | | const theme = ref("blue2"); |
| | |
| | | }, |
| | | hide() { |
| | | toggleLeft(); |
| | | }, |
| | | } |
| | | }; |
| | | const changeTheme = (name) => { |
| | | |
| | | const createSocket = url => { |
| | | // å建WebSocketè¿æ¥ |
| | | //"ws://127.0.0.1:9295/admin" |
| | | client = new WebSocket(url); |
| | | |
| | | client.onopen = function() { |
| | | //client.onmessage = handleMessage; |
| | | store.commit("setWebsocket", client); |
| | | console.log("WebSocket è¿æ¥æå"); |
| | | }; |
| | | |
| | | client.onclose = function() { |
| | | console.log("WebSocket è¿æ¥å
³é"); |
| | | setTimeout(createSocket, 10000); |
| | | }; |
| | | |
| | | client.onerror = function() {}; |
| | | }; |
| | | |
| | | const changeTheme = name => { |
| | | if (theme.value != name) { |
| | | theme.value = name; |
| | | } |
| | | localStorage.setItem("vol3_theme", name); |
| | | }; |
| | | const to = (item) => { |
| | | const to = item => { |
| | | /* 2020.07.31å¢å æå¨æå¼tabs*/ |
| | | if (item.path.indexOf("http") != -1) { |
| | | window.open(item.path); |
| | |
| | | }; |
| | | const open = (item, useRoute) => { |
| | | /* 2020.07.31å¢å æå¨æå¼tabs*/ |
| | | let _index = navigation.findIndex((x) => { |
| | | let _index = navigation.findIndex(x => { |
| | | return x.path == item.path; |
| | | }); |
| | | if (_index == -1) { |
| | |
| | | id: item.id + "", |
| | | name: item.name || item.text || "æ æ é¢", |
| | | path: item.path, |
| | | query: item.query, //2021.03.20ä¿®å¤èªå®ä¹äºæ¬¡æå¼$tabsæ¶åæ°ä¸¢å¤±çé®é¢ |
| | | query: item.query //2021.03.20ä¿®å¤èªå®ä¹äºæ¬¡æå¼$tabsæ¶åæ°ä¸¢å¤±çé®é¢ |
| | | }); |
| | | //æ°æå¼çtabç§»è³æåä¸ä¸ªé项 |
| | | selectId.value = navigation.length - 1 + ""; |
| | |
| | | } |
| | | currentMenuId.value = item.id * 1; |
| | | // tabèåç»å®å³é®äºä»¶ |
| | | proxy.$nextTick(function (e) { |
| | | proxy.$nextTick(function(e) { |
| | | proxy.bindRightClickMenu(true); |
| | | }); |
| | | }; |
| | | const close = (path) => { |
| | | const close = path => { |
| | | /* 2020.07.31å¢å æå¨æå¼tabs*/ |
| | | let index = navigation.findIndex((x) => { |
| | | let index = navigation.findIndex(x => { |
| | | return x.path == path; |
| | | }); |
| | | if (index == -1) { |
| | |
| | | } |
| | | removeNav(index); |
| | | }; |
| | | const setItem = (item) => { |
| | | const setItem = item => { |
| | | /* 2020.07.31å¢å æå¨æå¼tabs*/ |
| | | localStorage.setItem( |
| | | window.location.origin + "_tabs", |
| | |
| | | let nav = localStorage.getItem(window.location.origin + "_tabs"); |
| | | return nav ? JSON.parse(nav) : null; |
| | | }; |
| | | const selectNav = (item) => { |
| | | const selectNav = item => { |
| | | //å级elementæ£å¼çä¿®æ¹ |
| | | selectId.value = item.props.name; |
| | | let _path = navigation[item.index].path; |
| | | currentMenuId.value = ( |
| | | menuOptions.value.find((c) => { |
| | | menuOptions.value.find(c => { |
| | | return c.path == _path; |
| | | }) || { id: 0 } |
| | | ).id; |
| | | |
| | | router.push({ |
| | | path: navigation[item.index].path, |
| | | query: navigation[item.index].query, |
| | | query: navigation[item.index].query |
| | | }); |
| | | }; |
| | | |
| | | const removeNav = (_index) => { |
| | | const removeNav = _index => { |
| | | return new Promise(() => { |
| | | //å
³éçå½å项,跳转å°åä¸ä¸ªé¡µé¢ |
| | | if (selectId.value == _index + "") { |
| | |
| | | router.push({ |
| | | path: navigation[_index - 1].path, |
| | | //2022.06.27ä¿®å¤tabsäºæ¬¡åæ¢å忰䏢失çé®é¢ |
| | | query: navigation[_index - 1].query, |
| | | query: navigation[_index - 1].query |
| | | }); |
| | | navigation.splice(_index, 1); |
| | | selectId.value = selectId.value - 1 + ""; |
| | |
| | | } |
| | | navigation.splice(_index, 1); |
| | | currentMenuId.value = ( |
| | | menuOptions.value.find((c) => { |
| | | menuOptions.value.find(c => { |
| | | return c.path == navigation[selectId.value * 1].path; |
| | | }) || { id: 0 } |
| | | ).id; |
| | | }); |
| | | }; |
| | | |
| | | const getSelectMenuName = (id) => { |
| | | return menuOptions.value.find(function (x) { |
| | | const getSelectMenuName = id => { |
| | | return menuOptions.value.find(function(x) { |
| | | return x.id == id; |
| | | }); |
| | | }; |
| | | const onSelect = (treeId) => { |
| | | const onSelect = treeId => { |
| | | /* 2020.07.31å¢å æå¨æå¼tabs*/ |
| | | var item = getSelectMenuName(treeId); |
| | | open(item, false); |
| | |
| | | * æ¾ç¤ºå³é®èå |
| | | * @param {*} e äºä»¶å¯¹è±¡ |
| | | */ |
| | | const openTabsMenu = function (e) { |
| | | const openTabsMenu = function(e) { |
| | | e.preventDefault(); // 鲿¢é»è®¤èåå¼¹åº |
| | | let tabId = e.target.id.split("-")[1] * 1; |
| | | |
| | |
| | | const toHome = () => { |
| | | open({ |
| | | text: navigation[0].name, |
| | | path: navigation[0].path, |
| | | path: navigation[0].path |
| | | }); |
| | | }; |
| | | /** |
| | | * å
³éå
¶å®æ ç¾é¡µ |
| | | * @param {*} par å
³éç±»å(left,right,other) |
| | | */ |
| | | const closeTabs = (value) => { |
| | | const closeTabs = value => { |
| | | let _menuId = navigation[selectId.value * 1].id; |
| | | let currnetIndex = selectId.value * 1; // navigation.findIndex(c => { return c.id == selectId.value }); |
| | | switch (value) { |
| | |
| | | } |
| | | } |
| | | selectId.value = |
| | | navigation.findIndex((c) => { |
| | | navigation.findIndex(c => { |
| | | return c.id == _menuId; |
| | | }) + ""; |
| | | closeTabsMenu(); |
| | |
| | | } |
| | | Object.assign(_config.$tabs, { open: open, close: close }); |
| | | |
| | | http.get("api/Sys_Menu/getTreeMenu", {}, true).then((data) => { |
| | | // createSocket(window.webConfig.webSocketUrl); |
| | | |
| | | http.get("api/Sys_Menu/getTreeMenu", {}, true).then(data => { |
| | | data.push({ id: "1", name: "é¦é¡µ", url: "/home" }); // 为äºè·åéä¸idä½¿ç¨ |
| | | data.forEach((d) => { |
| | | data.forEach(d => { |
| | | d.path = (d.url || "").replace("/Manager", ""); |
| | | d.to = (d.url || "").replace("/Manager", ""); |
| | | if (!d.icon || d.icon.substring(0, 3) != "el-") { |
| | |
| | | |
| | | //å¼å¯æ¶æ¯æ¨éï¼main.jsä¸è®¾ç½®æ¯å¦å¼å¯signalRï¼2022.05.05 |
| | | if (_config.$global.signalR) { |
| | | MessageConfig(http, (result) => { |
| | | MessageConfig(http, result => { |
| | | messageList.unshift(result); |
| | | // console.log(result) |
| | | }); |
| | |
| | | //å½åå·æ°æ¯ä¸æ¯é¦é¡µ |
| | | if (router.currentRoute.value.path != navigation[0].path) { |
| | | //æ¥æ¾ç³»ç»èå |
| | | let item = menuOptions.value.find((x) => { |
| | | let item = menuOptions.value.find(x => { |
| | | return x.path == router.currentRoute.value.path; //this.$route.path; |
| | | }); |
| | | if (item) return onSelect(item.id); |
| | | //æ¥æ¾é¡¶é¨å¿«æ·è¿æ¥ |
| | | item = links.value.find((x) => { |
| | | item = links.value.find(x => { |
| | | return x.path == router.currentRoute.value.path; //this.$route.path; |
| | | }); |
| | | //æ¥æ¾æå䏿¬¡è·³è½¬çé¡µé¢ |
| | |
| | | visibleItem, |
| | | closeTabsMenu, |
| | | closeTabs, |
| | | currentMenuId, |
| | | currentMenuId |
| | | }; |
| | | }, |
| | | /** |
| | |
| | | let _date = showTime(); |
| | | $indexDate = document.getElementById("index-date"); |
| | | $indexDate.innerText = _date; |
| | | $interval = setInterval(function () { |
| | | $interval = setInterval(function() { |
| | | $indexDate.innerText = showTime(); |
| | | }, 1000); |
| | | |
| | |
| | | item.oncontextmenu = that.openTabsMenu; |
| | | }); |
| | | }); |
| | | }, |
| | | } |
| | | }, |
| | | |
| | | /** |
| | |
| | | destroyed() { |
| | | $this = null; |
| | | clearInterval($interval); |
| | | }, |
| | | } |
| | | }); |
| | | const week = new Array( |
| | | "ææä¸", |
| | |
| | | letter-spacing: 1px; |
| | | } |
| | | |
| | | .el-tabs.el-tabs--top.el-tabs--border-card.header-navigation>.el-tabs__header .el-tabs__item:last-child, |
| | | .el-tabs--top.el-tabs--border-card.header-navigation>.el-tabs__header .el-tabs__item:nth-child(2) { |
| | | .el-tabs.el-tabs--top.el-tabs--border-card.header-navigation |
| | | > .el-tabs__header |
| | | .el-tabs__item:last-child, |
| | | .el-tabs--top.el-tabs--border-card.header-navigation |
| | | > .el-tabs__header |
| | | .el-tabs__item:nth-child(2) { |
| | | padding: 0; |
| | | } |
| | | |