From 0ae255185f422781f8a5cc4c52ad56ee0d3a1e6e Mon Sep 17 00:00:00 2001 From: 陶杰 <1378534974@qq.com> Date: 星期五, 29 十一月 2024 19:07:15 +0800 Subject: [PATCH] 1.首页可拖拽 2.没有名字去掉悬浮层 3.增加了背景 --- src/views/screen1/itm.vue | 48 +++++++++++++-- src/views/screen1/itm-map-plant-board.vue | 72 ++++++++++++++++++++++-- src/views/area/main-container.vue | 3 3 files changed, 109 insertions(+), 14 deletions(-) diff --git a/src/views/area/main-container.vue b/src/views/area/main-container.vue index d53a43d..aa4ea76 100644 --- a/src/views/area/main-container.vue +++ b/src/views/area/main-container.vue @@ -410,7 +410,8 @@ } else { // 如果未找到,则清空或设置默认值 element.deviceInfo = null; - element.isPlaceholder = false; + // element.isPlaceholder = false; + element.isPlaceholder = true; } }); diff --git a/src/views/screen1/itm-map-plant-board.vue b/src/views/screen1/itm-map-plant-board.vue index cb33cb9..9ea7eaf 100644 --- a/src/views/screen1/itm-map-plant-board.vue +++ b/src/views/screen1/itm-map-plant-board.vue @@ -1,12 +1,22 @@ <template> <div style="position: relative;" class="itm-map-vr" @contextmenu="showMenu($event)" ref="targetDiv" - :style="{ - background: plantBoardFlag ? 'linear-gradient(-90deg, rgba(0, 0, 0, 0.1) 1px, transparent 1px) 0% 0% / 20px 20px, linear-gradient(rgba(0, 0, 0, 0.1) 1px, transparent 1px) 0% 0% / 20px 20px' : '' + @mousedown="handleMouseDown" + :style="{ + // background: plantBoardFlag ? 'linear-gradient(-90deg, rgba(0, 0, 0, 0.1) 1px, transparent 1px) 0% 0% / 20px 20px, linear-gradient(rgba(0, 0, 0, 0.1) 1px, transparent 1px) 0% 0% / 20px 20px' : '', + + backgroundImage: `url(${screenSrc})`, + backgroundSize:'cover', + backgroundPosition:'center', + backgroundRepeat: 'no-repeat', + + top: `${position.top}px`, + left: `${position.left}px`, + }" > <!-- v-for="(item, index) in itmmapdatas" --> <!-- backgroundSize: 'cover', --> - <vdr :grid=[20,20] :min-width="minWidth" :min-height="minHeight" :resizable="plantBoardFlag" + <vdr :grid=[1,1] :min-width="minWidth" :min-height="minHeight" :resizable="plantBoardFlag" :draggable="plantBoardFlag" v-for="(item, index) in items" :w="item.w" :h="item.h" :x="item.x" :y="item.y" @dragging="onDrag" z-index="0" @resizing="onResize" :parent="true" @dragstop="onDragStop(item)" @resizestop="onResizeStop(item)" @activated="onActivated(item)" @deactivated="onDeactivated(item)" @@ -25,7 +35,7 @@ item?.s ? '' : 'd', item?.n == 'r' ? 'error r' : '', item?.n == 'y' ? 'error y' : '', - item?.areacode ? 'areacode' : '', + item?.areacode && item?.t ? 'areacode' : '', ]" :key="index"> <div style="width:100%;height:100%;" @click="toAreaDetail(item)" @contextmenu="showElementMenu($event,item)" @mouseenter="onMouseEnter(item,$event)" @mouseleave="onMouseLeave" > <div v-if="item.t" class="t" v-html="item.t" :class="[item.t_c_1, item.stand, item.t_c, item.tl]"></div> @@ -96,6 +106,9 @@ <script> import A27 from '@/assets/screen/screen5/svgs3d/A27.svg' +import ScreenPlace from '@/assets/screen/screen1/screen-place.png' + + import AddAreaItem from "@/components/add-area-item"; import { itmmapdata } from "./itm-map.js"; import {addAreaItemInfo, deleteAreaModuleItem, getAreaItemData, updateAreaModuleItem} from "@/api/addareaitem"; @@ -119,6 +132,7 @@ x: 0, y: 0, imgSrc: A27, + screenSrc:ScreenPlace, vLine: [], hLine: [], @@ -206,6 +220,13 @@ mouseX:0, mouseY:0, + offsetX: 0, // 鼠标点击时相对元素的 X 偏移量 + offsetY: 0, // 鼠标点击时相对元素的 Y 偏移量 + position: { + top: 100, // 元素初始位置 + left: 100, // 元素初始位置 + }, + }; }, @@ -223,8 +244,37 @@ }, methods: { + + + // 鼠标按下事件 + handleMouseDown(event) { + this.isDragging = true; + this.offsetX = event.clientX - this.position.left; + this.offsetY = event.clientY - this.position.top; + document.addEventListener('mousemove', this.handleMouseMove); + document.addEventListener('mouseup', this.handleMouseUp); + document.body.style.cursor = 'grabbing'; // 改变光标为抓取状态 + }, + // 鼠标移动事件 + handleMouseMove(event) { + if (this.isDragging) { + this.position.left = event.clientX - this.offsetX; + this.position.top = event.clientY - this.offsetY; + } + }, + // 鼠标松开事件 + handleMouseUp() { + if (this.isDragging) { + this.isDragging = false; + document.removeEventListener('mousemove', this.handleMouseMove); + document.removeEventListener('mouseup', this.handleMouseUp); + document.body.style.cursor = 'grab'; // 改变光标为抓取状态 + } + }, + // 判断当前悬停项 onMouseEnter(item,event) { + this.isDragging = false; this.hoveredItem = item; this.areaVisible=true; this.areaPosition = { x: item.x+item.w/2, y: item.y+item.h/2 }; @@ -232,6 +282,7 @@ }, // 清除悬停项 onMouseLeave() { + this.isDragging = false; this.hoveredItem = null; this.areaVisible=false; }, @@ -245,6 +296,7 @@ }, onResize: function (x, y, width, height) { + this.isDragging = false; console.log("onResize") this.x = x this.y = y @@ -253,12 +305,14 @@ console.log(`x:${this.x},y:${this.y},w:${this.width},h:${this.height}`) }, onDrag: function (x, y) { + this.isDragging = false; console.log("onDrag") this.x = x this.y = y console.log(`x:${this.x},y:${this.y}`) }, onDragStop: async function (itemParam) { + this.isDragging = false; console.log("停止拖拽") console.log(`x:${this.x},y:${this.y}`) console.log("itemParam", itemParam) @@ -280,6 +334,7 @@ }, onResizeStop: async function (itemParam) { + this.isDragging = false; console.log("停止resize") console.log(`x:${this.x},y:${this.y},width:${this.width},height:${this.height}`) console.log(itemParam) @@ -301,7 +356,7 @@ } }, onActivated: function (itemParam) { - + this.isDragging = false; console.log('元素被激活') console.log(itemParam) // 元素初始化 @@ -313,6 +368,7 @@ }, onDeactivated: function (itemParam) { + this.isDragging = false; console.log('元素失活') console.log(itemParam) @@ -334,6 +390,7 @@ // 显示组件右键菜单 showElementMenu(event, item) { + this.isDragging = false; event.preventDefault(); // 禁用默认右键菜单 event.stopPropagation(); // 阻止冒泡 this.elementMenuPosition = { x: item.x + item.w, y: item.y }; @@ -348,12 +405,14 @@ }, // 隐藏右键菜单 hideElementMenu() { + this.isDragging = false; this.isElementMenuVisible = false; document.removeEventListener("click", this.hideElementMenu); }, // 更新操作 handleUpdate() { + this.isDragging = false; //编辑操作 this.hideElementMenu(); console.log("this.editItem",this.editItem); @@ -362,6 +421,7 @@ }, // 删除操作 async handleDel() { + this.isDragging = false; // 删除 console.log("this.deleteItem",this.deleteItem); const re = await deleteAreaModuleItem(this.deleteItem.id); @@ -373,6 +433,7 @@ }, // 新增操作 handleAdd() { + this.isDragging = false; this.$refs.addAreaItem && this.$refs.addAreaItem.openConfig(); this.hideMenu(); }, @@ -670,7 +731,6 @@ right: 0; top: 0; bottom: 0; - content: ""; background-color: #059ce293; diff --git a/src/views/screen1/itm.vue b/src/views/screen1/itm.vue index d748dc8..64b1064 100644 --- a/src/views/screen1/itm.vue +++ b/src/views/screen1/itm.vue @@ -105,11 +105,16 @@ <el-table :data="switchInfo.lackSwitchInfo||[]" border - style="width: 100%;max-height: 650px;overflow-y: scroll"> - + style="width: 100%" + max-height="650" + > + <el-table-column prop="deviceNameDNS" - label="Device Name"> + label="Device Name" + fixed + :width="width" + > </el-table-column> <!-- <el-table-column prop="deviceNameDNS" @@ -118,7 +123,7 @@ <el-table-column prop="ipAddress" label="Ip Address" - width="150" + :width="width" > </el-table-column> <el-table-column @@ -127,17 +132,20 @@ label="Mac Address"> </el-table-column> <el-table-column + :width="width" prop="nasPort" label="Nas Port"> </el-table-column> <el-table-column + :width="width" prop="switchType" label="Switch Type"> </el-table-column> <el-table-column + :width="width" prop="cabinetName" - label="Cabinet Name" width="150"> + label="Cabinet Name"> <template slot-scope="scope"> <el-select v-model="scope.row.cabinetName" placeholder="请选择机柜" filterable clearable> <el-option @@ -152,6 +160,7 @@ </el-table-column> <el-table-column + :width="width" prop="areaCode" label="Area Code"> <template slot-scope="scope"> @@ -166,8 +175,19 @@ </el-select> </template> </el-table-column> + + <el-table-column + :width="width" + prop="networkPort" + label="NetworkPort"> + <template slot-scope="scope"> + <el-input v-model="scope.row.networkPort" placeholder="请输入网络端口号" clearable></el-input> + </template> + </el-table-column> + <el-table-column + :width="width" label="Operator"> <template slot-scope="scope"> <el-button @@ -207,16 +227,29 @@ showSwitchBoardInfoTable: false, cabinetList:[], areaList:[], + width:150, } }, methods: { async handleConfirm(row) { // 检查必填项 - if (!row.cabinetName || !row.areaCode) { - this.$message.error('交换机柜名和区域代码不能为空'); + if (!row.cabinetName) { + this.$message.error('交换机柜名不能为空'); return; } + if (!row.areaCode) { + this.$message.error('区域代码不能为空'); + return; + } + + if (!row.networkPort) { + this.$message.error('网络端口号不能为空'); + return; + } + + + // if (!row.cabinetName) { // this.$message.error('交换机柜名不能为空'); // return; @@ -237,6 +270,7 @@ macAddress: row.macAddress, ipAddress: row.ipAddress, areaCode: row.areaCode, + networkPort:row.networkPort, } }; -- Gitblit v1.9.3