前言:
本人公司要求我制作网络拓扑图编辑工具,现在阶段功能研究制作完成,我发布的内容仅供互相学习参考,一切产生的后果与我无关。本人用的是vue
先上视频
<template>
<div class="sketchBox">
<!-- 鼠标移入时展示 -->
<div class="contextmenuBoxHover" ref="mouseHover">
<div class="mgt-5">
<span class="mgl-5 mgr-5">设备编号:</span>
<span v-html="equipMentObject.relevanceEquipId"></span>
</div>
<div>
<span class="mgl-5 mgr-5">设备名称:</span>
<span v-html="equipMentObject.relevanceEquipName"></span>
</div>
<div>
<span class="mgl-5 mgr-5">设备类型:</span>
<span v-html="equipMentObject.relevanceEquipType"></span>
</div>
</div>
<!-- 右键节点 -->
<div :class="isSketchEdit?'contextmenuBoxNode':'contextmenuBoxNodeNoEdit'" ref="contextmenuBox">
<div class="contextmenuBox_li mousehand" v-if="isSketchEdit">
<i class="el-icon-top mgl_10 mgr_10"></i>
<span>层级前置</span>
</div>
<div class="contextmenuBox_li mousehand" v-if="isSketchEdit">
<i class="el-icon-bottom mgl_10 mgr_10"></i>
<span>层级后置</span>
</div>
<div class="contextmenuBox_li mousehand">
<i class="el-icon-search mgl_10 mgr_10"></i>
<span>查看设备</span>
</div>
<div class="contextmenuBox_li mousehand" v-if="isSketchEdit">
<i class="el-icon-edit mgl_10 mgr_10"></i>
<span>编辑节点</span>
</div>
<div class="contextmenuBox_li mousehand" v-if="isSketchEdit">
<i class="el-icon-connection mgl_10 mgr_10"></i>
<span>关联绑定</span>
</div>
<div class="contextmenuBox_li mousehand" v-if="isSketchEdit">
<i class="el-icon-delete mgl_10 mgr_10"></i>
<span>删除节点</span>
</div>
</div>
<!-- 右键线段 -->
<div class="contextmenuBoxLine" ref="contextmenuLineBox">
<div class="contextmenuBox_li mousehand">
<i class="el-icon-edit mgl_10 mgr_10"></i>
<span>编辑连线</span>
</div>
<div class="contextmenuBox_li mousehand">
<i class="el-icon-delete mgl_10 mgr_10"></i>
<span>删除线段</span>
</div>
</div>
<!-- 全局右键节点 -->
<div class="contextmenuBoxNodeAll" ref="contextmenuBoxAll">
<div class="contextmenuBox_li" @click="goBack1" :class="undoList.length>0?'mousehand':'no_cursor'">
<i class="el-icon-back mgl_10 mgr_10"></i>
<span>回退</span>
</div>
<div class="contextmenuBox_li" @click="goBack2" :class="redoList.length>0?'mousehand':'no_cursor'">
<i class="el-icon-right mgl_10 mgr_10"></i>
<span>返回</span>
</div>
<div class="contextmenuBox_li mousehand" @click="goDelete">
<i class="el-icon-document-delete mgl_10 mgr_10"></i>
<span>清空</span>
</div>
<div class="contextmenuBox_li mousehand" @click="goDocument">
<i class="el-icon-document mgl_10 mgr_10"></i>
<span>查看JSON</span>
</div>
<div class="contextmenuBox_li mousehand" @click="goRefresh">
<i class="el-icon-refresh mgl_10 mgr_10"></i>
<span>居中显示</span>
</div>
<div class="contextmenuBox_li mousehand" @click="goDeletePage">
<i class="el-icon-delete mgl_10 mgr_10"></i>
<span>删除</span>
</div>
<div class="contextmenuBox_li mousehand" @click="goBack">
<i class="el-icon-switch-button mgl_10 mgr_10"></i>
<span>关闭</span>
</div>
<div class="contextmenuBox_li mousehand" @click="goSaveSketch">
<i class="el-icon-success mgl_10 mgr_10"></i>
<span>保存</span>
</div>
</div>
<!-- 编辑线段描述 -->
<div class="editorLineBox" ref="editorLineBoxRef">
<el-input v-model="sketchObject.label" size="mini" clearable style="width:200px;">
<el-button style="width:50px;padding:0px;" slot="append" @click="setEditorLineText">确认</el-button>
</el-input>
</div>
<div id="mountNode" ref="mountNode"></div>
<div class="sketchBoxMove" v-if="!isSketchEdit">
<div class="df-c mgt-10">
<div class="df-a sketchHeight">
<div class="mgl_10 sketchBoxTitle">拓扑名称:</div>
<el-input v-model="topologyListObject.topologyName" size="mini" disabled clearable style="width:120px;"></el-input>
</div>
<div class="df-a sketchHeight">
<div class="mgl_10 sketchBoxTitle">拓扑类型:</div>
<el-select v-model="topologyListObject.topologyType" disabled placeholder="请选择拓扑图类型" size="mini" class="mgr-10" style="width:120px;" clearable>
<el-option v-for="item in topologyTypeList" :key="item.id" :label="item.label" :value="item.id">
</el-option>
</el-select>
</div>
<div class="df-a sketchHeight">
<div class="mgl_10 sketchBoxTitle">显示网格:</div>
<el-switch v-model="gridShow" @change='switchChange' active-color="#01bbd2" inactive-color="#0091a6">
</el-switch>
</div>
<div class="df-a sketchHeight">
<div class="mgl_10 sketchBoxTitle">查看JSON:</div>
<el-button type="primary" circle size="mini" icon="el-icon-document" @click="goDocument"></el-button>
</div>
<div class="df-aj btnBoxMoveCss">
<el-button type="primary" size="mini" @click="goBackNoEdit">关闭</el-button>
</div>
</div>
</div>
<!-- 左侧 -->
<div class="monitoringLeft" v-if="isSketchEdit">
<!-- <div class="df-c show_right2" :style="leftDrawer ? 'left:100%;' : 'left:0%;'">
<div class="show_left df-a" @click="showLeft">
<i :class="leftDrawer ? 'el-icon-arrow-left' : 'el-icon-arrow-right'"></i>
</div>
</div> -->
<transition name="fadeleft">
<div v-show="leftDrawer" class="monitoringRightFade addStyle">
<sketch-collapse @setShape='setShapeCollapse'></sketch-collapse>
</div>
</transition>
</div>
<!-- 右侧 -->
<div class="monitoringRight" v-if="rightDrawer">
<div class="df-c show_right2" :style="rightDrawer ? 'right:105%;' : 'right:4.5%;'">
</div>
<transition name="faderight">
<div v-if="rightDrawer" class="monitoringRightFade">
<div class="show_rightClose df-aj mousehand" @click="deleteClose">
<i class="el-icon-close sketchCloseIcon"></i>
</div>
<el-form aria-label="100px" class="mgl_20 mgt_30 sketchPageForm" style="position: relative;">
<el-form-item label="节点名称:" style="width:270px;">
<el-input v-model="sketchObject.label" @change='sketchObjectChange' clearable class="input-with-select" size="mini">
</el-input>
</el-form-item>
<el-form-item label="节点长宽:" style="width:270px;">
<el-input-number v-model.number="sketchObject.size[0]" controls-position="right" @change='sketchObjectChange("size[0]")' size="mini"></el-input-number>
<span class="el-icon-connection connectionCss mousehand mgl-5 mgr-5" @click="connectionShow = !connectionShow" :class="connectionShow?'connectionClickTrue':''"></span>
<el-input-number v-model.number="sketchObject.size[1]" controls-position="right" @change='sketchObjectChange("size[1]")' size="mini"></el-input-number>
</el-form-item>
<el-form-item label="节点类型:" style="width:270px;" class="mgb_10">
<el-input v-model="sketchObject.equipType" disabled class="input-with-select" size="mini">
</el-input>
</el-form-item>
<el-form-item label="关联状态:" style="width:270px;">
<el-button type="primary" v-show="sketchObject.relevance.relevanceEquipName != ''" size="mini" @click="yesRelevanceClick">已关联</el-button>
<el-button type="danger" v-show="sketchObject.relevance.relevanceEquipName == ''" size="mini" @click="noRelevanceClick">未关联</el-button>
</el-form-item>
<el-form-item label="关联名称:" style="width:270px;">
<el-input v-model="sketchObject.relevance.relevanceName" disabled clearable class="input-with-select" size="mini">
</el-input>
</el-form-item>
</el-form>
<div class="df-aj btnBoxCss">
<el-button type="primary" size="mini" @click="deleteClose">取消</el-button>
<el-button type="danger" size="mini" @click="deleteClose">确认</el-button>
</div>
</div>
</transition>
</div>
<div class="monitoringRight" v-if="rightDrawerLine">
<div class="df-c show_right2" :style="rightDrawerLine ? 'right:105%;' : 'right:4.5%;'">
</div>
<transition name="faderight">
<div v-if="rightDrawerLine" class="monitoringRightFade">
<div class="show_rightClose df-aj mousehand" @click="deleteCloseLine">
<i class="el-icon-close sketchCloseIcon"></i>
</div>
<el-form aria-label="100px" class="mgl_20 mgt_30">
<el-form-item label="连线描述:" style="width:270px;">
<el-input v-model="sketchObjectLine.label" @change='sketchObjectLineChange' clearable class="input-with-select" size="mini">
</el-input>
</el-form-item>
<el-form-item label="连线类型:" style="width:270px;">
<el-select v-model="sketchObjectLine.linkType" placeholder="请选择连线类型" size="mini" class="mgr-10" clearable>
<el-option v-for="item in lineTypeLine" :key="item.id" :label="item.label" :value="item.id">
</el-option>
</el-select>
</el-form-item>
<el-form-item label="连线方式:" style="width:270px;" class="mgb_10">
<el-select v-model="sketchObjectLine.direction" @change='setLineDirection' placeholder="请选择连线方式" size="mini" class="mgr-10" clearable>
<el-option v-for="item in lineDirectionLine" :key="item.id" :label="item.label" :value="item.id">
</el-option>
</el-select>
</el-form-item>
</el-form>
<div class="df-aj btnBoxCss">
<el-button type="primary" size="mini" @click="deleteCloseLine">取消</el-button>
<el-button type="danger" size="mini" @click="deleteCloseLine">确认</el-button>
</div>
</div>
</transition>
</div>
<!-- 中间添加 -->
<div class="monitoringCenter df-a df-sp" v-if="isSketchEdit">
<div class="df-a">
<div class="mgl_20" style="color:red;margin-right:2px;">*</div>
<div>拓扑图名称:</div>
<el-input v-model="topologyListObject.topologyName" size="mini" clearable style="width:220px;"></el-input>
<div class="mgl_10">拓扑图类型:</div>
<el-select v-model="topologyListObject.topologyType" placeholder="请选择类型