From 0967b9f3ddaaf901a68d78edb7a80df0245425bd Mon Sep 17 00:00:00 2001
From: 陶杰 <1378534974@qq.com>
Date: 星期四, 14 十一月 2024 09:52:36 +0800
Subject: [PATCH] 1.交换机引导页面
---
src/views/screen1/itm.vue | 77 ++++
src/views/area/server-info.vue | 622 +++++++++++++++++++++++++++++++++++++++++
src/views/area/switch-board.vue | 50 ++-
src/views/area/main-container.vue | 119 -------
4 files changed, 738 insertions(+), 130 deletions(-)
diff --git a/src/views/area/main-container.vue b/src/views/area/main-container.vue
index 4ea077f..0bcef3c 100644
--- a/src/views/area/main-container.vue
+++ b/src/views/area/main-container.vue
@@ -76,123 +76,21 @@
</div>
<equ-add-form ref="equAddForm" :code="code" :areas="areas" :init_device_list="device_list"
@update="update_map"></equ-add-form>
- <!-- 点击设备可以前往服务器详情页看看(debug) -->
- <div v-if="!hideServe" class="serve-item" @click="() => {
- // stopScrolling();
- //$nextTick(() => {
- // hideServe = !hideServe;
- //});
- }
- ">
- <div class="serve-img" v-if="serve_info.cabinetInfoStatic">
- <div class="each-item-container">
- <div v-for="(serve, itemindex) in serve_info.cabinetInfoStatic" @click="showServeInfo(serve)" :key="itemindex"
- class="each-item" :class="[
- serve.cabinetName == serve_select.switchName
- ? 'each-item-default'
- : '',
- ]">
- <div class="desc">
- <div class="title">{{ serve.cabinetName }}</div>
- <div class="value">设备数量: {{ serve.normal }}</div>
- <div class="tip-msg">
- <div class="title">{{ serve.cabinetName }}</div>
- <div class="desc">正常设备:<span class="f-n">{{ serve.normal || 0 }}</span></div>
- <div class="desc">黄色预警:<span class="f-y">{{ serve.waring || 0 }}</span></div>
- <div class="desc">红色预警:<span class="f-r">{{ serve.exception || 0 }}</span></div>
+ <server-info v-if="!hideServe"
+ :serve_info="serve_info"
+ :serve_select="serve_select"
+ :code="code"></server-info>
- <!-- <div class="desc">详细信息:一小时后磁盘满</div> -->
- </div>
- </div>
- </div>
- </div>
- </div>
- <div class="tj-item">
- <div class="tj-nums">
- <div class="title">{{ serve_info.cabinetName || "-" }}</div>
- <div class="flex">
- <div class="equ-num-item a">
- <div class="num g">{{ serve_info.terminalCount || 0 }}</div>
- <div class="desc2">正常设备</div>
- </div>
- <div class="equ-num-item">
- <div class="num y">{{ serve_info.seitchCount || 0 }}</div>
- <div class="desc2">黄色预警</div>
- </div>
- <div class="equ-num-item c">
- <div class="num r">{{ serve_info.exceptionCount || 0 }}</div>
- <div class="desc2">红色预警</div>
- </div>
- </div>
- </div>
- <div class="tj-line" v-if="false"></div>
- <div class="tj-list" v-if="false">
- <div class="service-list-arr" id="my_serve_info_list">
- <div class="service-list-arr-item" v-for="(item, index) of data_service_list" :key="index">
- <div class="time">{{ item.time }}</div>
- <div class="flex1 service-list-arr-item_content" v-html="item.desc"></div>
- <div class="dot" :class="item.status"></div>
- </div>
- </div>
- </div>
- </div>
- </div>
<div class="back-button-left-bottom" @click="backToTop">返回</div>
- <el-dialog :visible.sync="dialog_activateSwitchPorts" title="交换机端口情况" class="dialog_activateSwitchPorts">
- <div v-for="(infos, index2) of activateSwitchPorts" :key="index2" class="port-items">
- <div class="port-item" v-for="(item, index) of infos" :key="index">
- <div :key="index" class="space-text" :class="[
- (item.info && item.info.statusInt == 2) ||
- (item.info && item.info.statusInt == 3) ||
- (item.info && item.info.statusInt == 4)
- ? 'space-text-red'
- : '',
- item.info && item.info.statusInt == 1 ? 'space-text-yellow' : '',
- ]" v-if="item.info">
- {{ item.info.networkPort || "-" }}
- </div>
- <div class="port-tip">{{ item.index }}</div>
- </div>
- </div>
- <!-- 全部的信息 -->
- <el-table
- :data="switchAllDetialInfos"
- border
- style="width: 100%;max-height: 650px;overflow-y: scroll;">
- <el-table-column
- prop="deviceName"
- label="device name">
- </el-table-column>
- <el-table-column
- prop="deviceNameDNS"
- label="DNS">
- </el-table-column>
- <el-table-column
- prop="ipAddress"
- label="ip address">
- </el-table-column>
- <el-table-column
- width="180"
- prop="macAddress"
- label="mac address">
- </el-table-column>
- <el-table-column
- prop="nasPort"
- label="nas port">
- </el-table-column>
- <el-table-column
- prop="switchType"
- label="switch type">
- </el-table-column>
- </el-table>
-
- </el-dialog>
+
</div>
</template>
<script>
import tjContainer from "./tj-container";
import bridge from "@/components/bridge";
+import serverInfo from "./server-info";
import equAddForm from "@/components/equ-add-form.vue";
+
import {
getAreaServeInfo,
getFaultInfo,
@@ -208,7 +106,7 @@
import Bridge from "@/components/bridge.vue";
export default {
- components: {tjContainer, bridge, equAddForm, Bridge},
+ components: {tjContainer, bridge, equAddForm, Bridge,serverInfo},
props: {
item_show: false,
code: "",
@@ -430,6 +328,7 @@
this.$refs.equAddForm && this.$refs.equAddForm.openform(locInfo);
},
async showServeInfo(info) {
+ debugger;
//展示交换机全部端口
console.log("showServeInfo", info);
//弹出框展示全部端口,并且每个端口的情况
diff --git a/src/views/area/server-info.vue b/src/views/area/server-info.vue
new file mode 100644
index 0000000..e978738
--- /dev/null
+++ b/src/views/area/server-info.vue
@@ -0,0 +1,622 @@
+<template>
+ <div class="server-container">
+ <!-- 点击设备可以前往服务器详情页看看(debug) -->
+ <!-- <equ-add-form ref="equAddForm" :code="code" :areas="areas" :init_device_list="device_list" @update="update_map"></equ-add-form> -->
+ <div class="serve-item" @click="() => {
+ // stopScrolling();
+ //$nextTick(() => {
+ // hideServe = !hideServe;
+ //});
+ }
+ ">
+ <div class="serve-img" v-if="serve_info.cabinetInfoStatic">
+ <div class="each-item-container">
+ <div v-for="(serve, itemindex) in serve_info.cabinetInfoStatic" @click="showServeInfo(serve)" :key="itemindex"
+ class="each-item" :class="[
+ serve.cabinetName == serve_select.switchName
+ ? 'each-item-default'
+ : '',
+ ]">
+ <div class="desc">
+ <div class="title">{{ serve.cabinetName }}</div>
+ <div class="value">设备数量: {{ serve.normal }}</div>
+ <div class="tip-msg">
+ <div class="title">{{ serve.cabinetName }}</div>
+ <div class="desc">正常设备:<span class="f-n">{{ serve.normal || 0 }}</span></div>
+ <div class="desc">黄色预警:<span class="f-y">{{ serve.waring || 0 }}</span></div>
+ <div class="desc">红色预警:<span class="f-r">{{ serve.exception || 0 }}</span></div>
+
+ <!-- <div class="desc">详细信息:一小时后磁盘满</div> -->
+ </div>
+ </div>
+ </div>
+ </div>
+ </div>
+ <div class="tj-item">
+ <div class="tj-nums">
+ <div class="title">{{ serve_info.cabinetName || "-" }}</div>
+ <div class="flex">
+ <div class="equ-num-item a">
+ <div class="num g">{{ serve_info.terminalCount || 0 }}</div>
+ <div class="desc2">正常设备</div>
+ </div>
+ <div class="equ-num-item">
+ <div class="num y">{{ serve_info.seitchCount || 0 }}</div>
+ <div class="desc2">黄色预警</div>
+ </div>
+ <div class="equ-num-item c">
+ <div class="num r">{{ serve_info.exceptionCount || 0 }}</div>
+ <div class="desc2">红色预警</div>
+ </div>
+ </div>
+ </div>
+ <div class="tj-line" v-if="false"></div>
+ <div class="tj-list" v-if="false">
+ <div class="service-list-arr" id="my_serve_info_list">
+ <div class="service-list-arr-item" v-for="(item, index) of data_service_list" :key="index">
+ <div class="time">{{ item.time }}</div>
+ <div class="flex1 service-list-arr-item_content" v-html="item.desc"></div>
+ <div class="dot" :class="item.status"></div>
+ </div>
+ </div>
+ </div>
+ </div>
+ </div>
+
+ <el-dialog append-to-body :modal="false"
+ :visible.sync="dialog_activateSwitchPorts" title="交换机端口情况" class="dialog_activateSwitchPorts">
+ <div v-for="(infos, index2) of activateSwitchPorts" :key="index2" class="port-items">
+ <div class="port-item" v-for="(item, index) of infos" :key="index">
+ <div :key="index" class="space-text" :class="[
+ (item.info && item.info.statusInt == 2) ||
+ (item.info && item.info.statusInt == 3) ||
+ (item.info && item.info.statusInt == 4)
+ ? 'space-text-red'
+ : '',
+ item.info && item.info.statusInt == 1 ? 'space-text-yellow' : '',
+ ]" v-if="item.info">
+ {{ item.info.networkPort || "-" }}
+ </div>
+ <div class="port-tip">{{ item.index }}</div>
+ </div>
+ </div>
+ <!-- 全部的信息 -->
+ <el-table
+ :data="switchAllDetialInfos"
+ border
+ style="width: 100%;max-height: 650px;overflow-y: scroll;">
+ <el-table-column
+ prop="deviceName"
+ label="device name">
+ </el-table-column>
+ <el-table-column
+ prop="deviceNameDNS"
+ label="DNS">
+ </el-table-column>
+ <el-table-column
+ prop="ipAddress"
+ label="ip address">
+ </el-table-column>
+ <el-table-column
+ width="180"
+ prop="macAddress"
+ label="mac address">
+ </el-table-column>
+ <el-table-column
+ prop="nasPort"
+ label="nas port">
+ </el-table-column>
+ <el-table-column
+ prop="switchType"
+ label="switch type">
+ </el-table-column>
+ </el-table>
+
+ </el-dialog>
+
+ </div>
+</template>
+<script>
+
+
+import equAddForm from "@/components/equ-add-form.vue";
+import {
+ getAreaServeInfo,
+ getFaultInfo,
+ getDeviceList,
+ updateDevicePosition,
+ getBridgeInfos,
+ delport,
+ statusPort,
+} from "@/api/area";
+import {getAreaTjData} from "@/api/area";
+
+
+import Bridge from "@/components/bridge.vue";
+
+export default {
+
+ components: {equAddForm},
+ props: {
+ serve_info: {},
+ serve_select:{},
+ code:"",
+ },
+ //根据
+ //后端存储的是世界坐标,初次时候也是世界坐标,最小单位为0.01吧,这个间距或者大小,不考虑实际像素
+ //渲染时候,需要把 坐标,变为实际rem等像素坐标
+ //每个厂房大小不一样,先用一定的数代表吧.
+
+ data() {
+ return {
+ dialog_activateSwitchPorts: false,
+ activateSwitchPorts:{},
+ switchAllDetialInfos:[],
+ // serve_info: {},
+
+ };
+ },
+ created() {
+ console.log("serve_infoserve_infoserve_infoserve_info")
+ console.log("this.serve_info:",this.serve_info)
+ console.log("this.serve_select:",this.serve_select)
+ },
+ mounted() {
+
+ },
+ destroyed() {
+
+ },
+ methods: {
+ async showServeInfo(info) {
+ debugger;
+ //展示交换机全部端口
+ console.log("showServeInfo", info);
+ //弹出框展示全部端口,并且每个端口的情况
+ //获取一下信息
+ this.$modal.loading("加载中");
+ const res = await getDeviceList(this.code, info.cabinetName);
+ this.$modal.closeLoading();
+ console.log("serveinfo", res);
+ // this.activateSwitchPorts = res.switchDetialInfos || [];
+ this.activateSwitchPorts = {};
+ //分两行,每行24个
+ this.switchAllDetialInfos = res.switchAllDetialInfos || []
+ var activaePorts = {};
+ if (res.switchDetialInfos) {
+ for (var item of res.switchDetialInfos) {
+ if (item.port) activaePorts[item.port] = item;
+ }
+ }
+ console.log("activaePorts", activaePorts);
+ for (var i = 0; i <= 47; i++) {
+ var level = "" + parseInt(i / 24);
+ if (!this.activateSwitchPorts["" + level]) {
+ this.activateSwitchPorts["" + level] = [];
+ }
+ this.activateSwitchPorts["" + level].push({
+ index: "" + (i + 1),
+ name: "",
+ info: activaePorts["" + (i + 1)] || undefined,
+ });
+ }
+ // console.log("this.activateSwitchPorts", this.activateSwitchPorts);
+ this.dialog_activateSwitchPorts = true;
+ },
+ },
+};
+</script>
+<style lang="scss" scoped>
+@import "../../common/itm_svg.scss";
+@import "../../common/area-bg.scss";
+$width-screen1: 174.17rem;
+
+.server-container {
+
+ margin: 0 auto;
+ margin-bottom: 5rem;
+
+ .equipments-container {
+ background: #d3e3f3;
+ position: relative;
+ margin: 0 auto;
+ cursor: pointer;
+ max-width: 100%;
+ max-height: 100vh;
+
+ .equipment-item {
+ cursor: pointer;
+ position: absolute;
+ width: 5rem;
+ height: 5rem;
+ background-size: 100% 100%;
+ filter: drop-shadow(2px 2px 2px rgba(0, 0, 0, 0.2));
+ }
+ }
+
+ .serve-item {
+ margin: 0 auto;
+ display: flex;
+ width: fit-content;
+ cursor: pointer;
+
+ .serve-img {
+ margin-right: 2rem;
+ background-image: url("../../assets/equipment/serve.svg");
+ background-image: url("../../assets/equipment/serve_v2.png");
+ background-size: 100% 100%;
+ width: 30.3rem;
+ height: 62.3rem;
+
+ /* padding-left: 1rem; */
+ .each-item-container {
+ margin-top: 21rem;
+ margin-left: 3rem;
+
+ .each-item {
+ background-image: url("../../assets/equipment/serve_item.png");
+ width: 18.9rem;
+ height: 4.8rem;
+ background-size: 100% 100%;
+ margin-bottom: 0.9rem;
+ color: #265696;
+ position: relative;
+
+ .desc {
+ text-align: left;
+ padding-left: 1rem;
+ padding-top: 0.5rem;
+
+ .title {
+ font-weight: 600;
+ margin-bottom: 0.8rem;
+ /* */
+ }
+
+ .value {
+ }
+ }
+ }
+ .each-item:hover::before {
+ position: absolute;
+ left: 0;
+ right: 0;
+ top: 0;
+ bottom: 0;
+
+ content: "";
+ background-color: #059ce293;
+ }
+
+ .each-item-default::before {
+ position: absolute;
+ left: 0;
+ right: 0;
+ top: 0;
+ bottom: 0;
+
+ content: "";
+ // background-color: #4bb6e854;
+ background-color:rgb(4 255 246 / 41%);
+ }
+ .tip-msg {
+ display: none;
+ position: absolute;
+ left: calc(50% + 5rem); //起始是在body中,横向距左50%的位置
+ top: 55%; //起始是在body中,纵向距上50%的位置,这个点相当于body的中心点,div的左上角的定位
+ min-width: 21rem;
+ height: 13.6rem;
+ background: #f1f9ff;
+ box-shadow: 0.6rem 0.4rem 2.4rem 0rem rgba(56, 92, 131, 0.77);
+ border-radius: 0.6rem;
+ z-index: 2;
+ padding: 1.3rem;
+
+ .title {
+ font-size: 2.5rem;
+ font-family: PingFangSC-Semibold, PingFang SC;
+ font-weight: 600;
+ color: #012b5e;
+ line-height: 3.6rem;
+ text-align: left;
+ margin-bottom: 1rem;
+ text-overflow: ellipsis;
+ /* width: 10rem; */
+ overflow: hidden;
+ word-break: break-all;
+ white-space: nowrap;
+
+ .dot {
+ width: 1.6rem;
+ height: 1.6rem;
+ min-width: 1.6rem;
+ min-height: 1.6rem;
+ /* background: #e20505; */
+ border-radius: 50%;
+ margin-top: 1rem;
+ margin-right: 0.5rem;
+ }
+ }
+
+ .desc {
+ font-size: 1.8rem;
+ font-family: PingFangSC-Regular, PingFang SC;
+ font-weight: 400;
+ color: #666666;
+ line-height: 2rem;
+ text-align: left;
+ /* margin-left: 2.1rem; */
+ margin-top: 0.5rem;
+
+ .f-n {
+ color: #0dbe79;
+ font-weight: 600;
+ }
+
+ .f-r {
+ color: #e10808;
+ font-weight: 600;
+ }
+
+ .f-y {
+ color: #ffc310;
+ font-weight: 600;
+ }
+ }
+ }
+
+ .each-item:hover .tip-msg {
+ display: unset;
+ }
+ }
+ }
+
+ .tj-item {
+ margin-left: 2rem;
+ width: 33.5rem;
+ min-height: 47.5rem;
+ min-height: 17.5rem;
+ height: fit-content;
+ background: #f2f8fd;
+ box-shadow: 0.6rem 0.4rem 2.4rem 0rem rgba(198, 212, 228, 0.38),
+ inset 0rem 0.2rem 0.3rem 0rem rgba(255, 255, 255, 0.5);
+ border-radius: 1rem;
+
+ .tj-nums {
+ padding: 1.8rem;
+
+ .title {
+ font-size: 2.5rem;
+ font-family: PingFangSC-Semibold, PingFang SC;
+ font-weight: 600;
+ color: #265696;
+ line-height: 3.6rem;
+ text-align: left;
+ margin-bottom: 1.8rem;
+ }
+
+ .equ-num-item {
+ margin: 0 auto;
+ text-align: center;
+
+ .desc2 {
+ font-size: 1.6rem;
+ font-family: PingFangSC-Medium, PingFang SC;
+ font-weight: 500;
+ color: #235884;
+ line-height: 2.2rem;
+ }
+
+ .num {
+ font-size: 2.4rem;
+ font-family: Impact;
+ line-height: 2.9rem;
+ }
+
+ .num.g {
+ color: #0dbe79;
+ }
+
+ .num.y {
+ color: #ffc310;
+ }
+
+ .num.r {
+ color: #e10808;
+ }
+ }
+
+ .equ-num-item.a {
+ margin-left: 0;
+ margin-right: auto;
+ }
+
+ .equ-num-item.c {
+ margin-right: 0;
+ margin-left: auto;
+ }
+ }
+
+ .tj-list {
+ padding: 2.2rem;
+ padding-top: 1.4rem;
+
+ .service-list-arr {
+ background-color: #f2f8fd;
+ overflow: hidden;
+ height: 30.3rem;
+
+ .service-list-arr-item {
+ width: 100%;
+ min-height: 3rem;
+ /* margin-top: 2.2rem; */
+ display: flex;
+ flex-direction: row;
+ align-items: center;
+ height: fit-content;
+
+ .time {
+ font-size: 1.2rem;
+ font-family: PingFangSC-Medium, PingFang SC;
+ font-weight: 500;
+ color: #a1b6c8;
+ line-height: 1.7rem;
+ margin-right: 1rem;
+ }
+
+ .service-list-arr-item_content {
+ font-family: PingFangSC-Medium, PingFang SC;
+ color: #235884;
+ line-height: 1.17rem;
+ text-align: left;
+ margin-left: 0.4rem;
+ margin-right: 1.5rem;
+ padding-top: 1rem;
+
+ font-size: 1.4rem;
+ font-weight: 500;
+ line-height: 1.4rem;
+ }
+
+ .dot {
+ width: 0.58rem;
+ height: 0.58rem;
+ border-radius: 50%;
+ margin-top: 0.8rem;
+ margin-left: auto;
+ margin-right: 10px;
+ }
+
+ .dot.red {
+ background: #c10b0b;
+ }
+
+ .dot.yellow {
+ background: #fda928;
+ }
+
+ .dot.green {
+ background: #17a537;
+ }
+ }
+ }
+ }
+
+ .tj-line {
+ width: 30.1rem;
+ height: 0.1rem;
+ border: 0.1rem solid #ccdeec;
+ margin: 0 auto;
+ }
+ }
+ }
+
+ .chart-open {
+ width: 6.1rem;
+ height: 7.5rem;
+ background: #e9f4fd;
+ box-shadow: 0.6rem 0.4rem 2.4rem 0rem rgba(198, 212, 228, 0.83),
+ inset 0rem 0.2rem 0.3rem 0rem rgba(255, 255, 255, 0.5);
+ border-radius: 1rem;
+ position: fixed;
+ right: 3rem;
+ top: 50%;
+ transform: translate(0%, 50%);
+ cursor: pointer;
+
+ .img-button {
+ background-size: 100% 100%;
+ background-image: url("../../assets/area/chart-open.svg");
+ width: 2.6rem;
+ height: 2.6rem;
+ transform: translate(-50%, -50%);
+ left: 50%;
+ top: 50%;
+ position: absolute;
+ }
+ }
+}
+</style>
+<!-- 交换机的端口 -->
+<style scoped lang="scss">
+.port-items {
+ display: flex;
+ margin-bottom: 8rem;
+ /* height: 2rem; */
+ width: fit-content;
+
+ .port-item {
+ background: #e9f4fd;
+ border-top: 5px solid #e9f4fd;
+ flex: 1;
+ margin: 0 auto;
+ min-width: 6rem;
+ max-width: 6rem;
+ /* max-width: 6rem; */
+ height: 1.6rem;
+ // background: #fff;
+ // box-shadow: 0rem -2rem 2.1rem 0rem #fff;
+ background-image: url("../../assets/area/space.svg");
+ background-size: 100% 100%;
+ position: relative;
+
+ .port-tip {
+ position: absolute;
+ bottom: -2.5rem;
+ height: 2.5rem;
+ font-size: 1.8rem;
+ font-family: PingFangSC-Semibold, PingFang SC;
+ font-weight: 600;
+ color: #265696;
+ line-height: 2.5rem;
+ text-align: center;
+ /* margin-bottom: 0.5rem; */
+ left: 0;
+ right: 0;
+ }
+
+ .space-text {
+ background-image: url("../../assets/area/space-text.svg");
+ background-size: 100% 100%;
+ min-width: 6rem;
+ min-height: 2.5rem;
+ transform: translate(-50%, 0%);
+ left: 50%;
+ padding-top: 0.5rem;
+ top: -2.5rem;
+ position: absolute;
+ /* line-height: 100%; */
+ /* font-size: 12px; */
+ /* span { */
+ word-break: break-all;
+ word-wrap: break-word;
+ /*但在有些场景中,还需要加上下面这行代码*/
+ white-space: normal;
+ overflow-wrap: anywhere;
+ /* } */
+
+ font-size: 1rem;
+ font-family: PingFangSC-Semibold, PingFang SC;
+ font-weight: 600;
+ color: #3299ff;
+ z-index: 20;
+ }
+
+ .space-text-yellow {
+ color: #e8be19;
+ }
+
+ .space-text-red {
+ color: #e20909;
+ }
+ }
+
+ .port-item:nth-child(6n) {
+ margin-right: 3rem;
+ }
+}
+
+.port-items:nth-child(2n) {
+ margin-bottom: 8rem;
+}
+</style>
\ No newline at end of file
diff --git a/src/views/area/switch-board.vue b/src/views/area/switch-board.vue
index eca53aa..0ab22da 100644
--- a/src/views/area/switch-board.vue
+++ b/src/views/area/switch-board.vue
@@ -2,6 +2,9 @@
<div>
<dv-full-screen-container>
<self-header title="ITM Device Monitoring System"></self-header>
+
+ <server-info v-if="!hideServe" :serve_info="serve_info" :serve_select="serve_select" :code="code"></server-info>
+
<div class="main-container" :style="{
zoom: zoom_main,
width: screen_width + 'rem',
@@ -13,7 +16,7 @@
@mouseup="handleMouseUp"
@mousedown="handleMouseDown"
@mouseleave="handleMouseLeave" -->
- <div id="content" class="equipments-container area-map" :class="['area-map-' + code]" v-show="hideServe"
+ <div id="content" class="equipments-container area-map" v-show="hideServe"
@mousemove="handleMouseMove" @mouseup="handleMouseUp" @mousedown="handleMouseDown"
@mouseleave="handleMouseLeave"
:style="{
@@ -28,15 +31,15 @@
}">
- <div class="serve-item" @click="showCabinetName">
+ <div class="serve-item" >
<div class="serve-img"
v-for="(serverInfo, serverItemindex) in switchCabinets.switchCabinet" :key="serverItemindex"
>
- <div class="cabinetNameDesc">{{ serverInfo.cabinetName }} </div>
+ <div class="cabinetNameDesc" @click="showCabinetName(serverInfo)">{{ serverInfo.cabinetName }} </div>
<div class="each-item-container">
- <div v-for="(serve, itemindex) in serverInfo.cabinetInfoStatic" @click="showServeInfo(serve)" :key="itemindex"
+ <div v-for="(serve, itemindex) in serverInfo.cabinetInfoStatic" :key="itemindex"
class="each-item"
-
+ @click="showCabinetServerInfo(serverInfo,serve)"
>
<div class="desc">
<div class="title">{{ serve.cabinetName }}</div>
@@ -70,6 +73,7 @@
</template>
<script>
import selfHeader from "@/components/header";
+import serverInfo from "./server-info";
import {
getSwitchCabinetInfo,
@@ -79,11 +83,9 @@
export default {
- components: { selfHeader, },
+ components: { selfHeader,serverInfo, },
props: {
- item_show: false,
- code: "",
- query_networkPort: '',
+
},
//根据
//后端存储的是世界坐标,初次时候也是世界坐标,最小单位为0.01吧,这个间距或者大小,不考虑实际像素
@@ -95,6 +97,10 @@
//如果显示服务器的话
hideServe: true,
+ serve_info:{},
+ serve_select:{},
+ activateSwitchPorts: {},
+ code:"",
html_base: 10,
zoom_main: 0.8,
@@ -173,12 +179,21 @@
this.stopScrolling();
},
methods: {
- showCabinetName(){
- alert(111)
+ showCabinetName(serverInfo){
+ this.serve_info=serverInfo
+ this.serve_select={}
+ this.hideServe=!this.hideServe
},
- toSwitchInfo(info) {
- this.showServe(info);
+
+ showCabinetServerInfo(serverInfo,serve_select){
+ this.serve_info=serverInfo
+ this.serve_select={
+ switchName:serve_select.cabinetName
+ }
+ this.hideServe=!this.hideServe
},
+
+
backToTop() {
if (!this.hideServe) {
this.hideServe = !this.hideServe;
@@ -401,7 +416,7 @@
background-image: url("../../assets/equipment/serve.svg");
background-image: url("../../assets/equipment/serve_v2.png");
background-size: 100% 100%;
- width: 15rem;
+ width: 20rem;
// height: 35.3rem;
.cabinetNameDesc{
@@ -417,7 +432,7 @@
.each-item {
background-image: url("../../assets/equipment/serve_item.png");
- width: 10.3rem;
+ width: 14.3rem;
height: 3.7rem;
background-size: 100% 100%;
margin-bottom: 0.9rem;
@@ -430,8 +445,9 @@
padding-top: 0.5rem;
.title {
- font-weight: 600;
- margin-bottom: 0.8rem;
+ font-weight: 700;
+ // margin-bottom: 0.8rem;
+ margin-bottom: 0.2rem;
/* */
}
diff --git a/src/views/screen1/itm.vue b/src/views/screen1/itm.vue
index cebe501..abdd525 100644
--- a/src/views/screen1/itm.vue
+++ b/src/views/screen1/itm.vue
@@ -83,7 +83,18 @@
</div>
</div>
</div>
- <div class="itm-container container-alert" style="cursor: pointer;margin-top: 3rem" @click="showSwitchBoardInfoTable=true">
+ <div class="itm-container container-alert" style="cursor: pointer;margin-top: 1rem" @click="showSwitchBoardInfoTableAdd=true">
+ <div class="flex1">
+ <div class="reg-num flex">
+ <span class="div1">{{ switchInfo.switchInfo && switchInfo.switchInfo.length || 0 }}</span>
+ <span class="div2">个</span>
+ </div>
+ <div class="reg-desc">
+ 新增交换机
+ </div>
+ </div>
+ </div>
+ <div class="itm-container container-alert" style="cursor: pointer;margin-top: 1rem" @click="showSwitchBoardInfoTable=true">
<div class="flex1">
<div class="reg-num flex">
<span class="div1">{{ switchInfo.switchInfo && switchInfo.switchInfo.length || 0 }}</span>
@@ -94,7 +105,7 @@
</div>
</div>
</div>
- <div class="itm-container container-alert" style="cursor: pointer;margin-top: 3rem" @click="showSwitchBoard">
+ <div class="itm-container container-alert" style="cursor: pointer;margin-top: 1rem" @click="showSwitchBoard">
<div class="flex1">
<div class="reg-desc">
交换机机柜
@@ -102,6 +113,64 @@
</div>
</div>
<el-dialog :visible.sync="showSwitchBoardInfoTable" title="交换机清单" append-to-body>
+ <el-table
+ :data="switchInfo.lackSwitchInfo||[]"
+ border
+ style="width: 100%;max-height: 650px;overflow-y: scroll">
+<!-- <el-table-column-->
+<!-- fixed-->
+<!-- label="index"-->
+<!-- width="80"-->
+<!-- type="index">-->
+<!-- </el-table-column>-->
+<!-- <el-table-column-->
+<!-- prop="assetName"-->
+<!-- label="asset name">-->
+<!-- </el-table-column>-->
+<!-- <el-table-column-->
+<!-- prop="clentSiteCode"-->
+<!-- label="clent site code"-->
+<!-- >-->
+<!-- </el-table-column>-->
+<!-- <el-table-column-->
+<!-- prop="createdTime"-->
+<!-- label="created time">-->
+<!-- </el-table-column>-->
+<!-- <el-table-column-->
+<!-- prop="dateTimeConnected"-->
+<!-- label="connected datetime">-->
+<!-- </el-table-column>-->
+ <el-table-column
+ prop="deviceName"
+ label="device name">
+ </el-table-column>
+ <el-table-column
+ prop="deviceNameDNS"
+ label="DNS">
+ </el-table-column>
+ <el-table-column
+ prop="ipAddress"
+ label="ip address">
+ </el-table-column>
+ <el-table-column
+ width="180"
+ prop="macAddress"
+ label="mac address">
+ </el-table-column>
+ <el-table-column
+ prop="nasPort"
+ label="nas port">
+ </el-table-column>
+ <el-table-column
+ prop="switchType"
+ label="switch type">
+ </el-table-column>
+ </el-table>
+ </el-dialog>
+
+ <!-- 新增交换机弹窗 -->
+
+ <el-dialog :visible.sync="showSwitchBoardInfoTableAdd" title="新增交换机" append-to-body>
<el-table
:data="switchInfo.lackSwitchInfo||[]"
border
@@ -171,10 +240,12 @@
chartclose: false,
switchDeviceStatus: {},
switchInfo: {},
+ switchInfoAdd:{}
},
data() {
return {
showSwitchBoardInfoTable: false,
+ showSwitchBoardInfoTableAdd:false,
}
},
methods: {
@@ -303,7 +374,7 @@
}
.itm-container {
- padding: 2rem;
+ padding: 1rem;
margin-top: 2rem;
background: #e9f4fd;
box-shadow: 0.5rem 0.33rem 2rem 0rem rgba(198, 212, 228, 0.38),
--
Gitblit v1.9.3