vue项目用antv/g6做网络拓扑图

本文介绍了如何在vue.js项目中利用antv/g6库来实现网络拓扑图的创建。作者分享了其在公司项目中的实践经验,提供了相关视频作为参考,旨在促进前端开发者之间的学习交流。
摘要由CSDN通过智能技术生成

前言:
本人公司要求我制作网络拓扑图编辑工具,现在阶段功能研究制作完成,我发布的内容仅供互相学习参考,一切产生的后果与我无关。本人用的是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="请选择类型
  • 0
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 6
    评论
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Alex-Gdd

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值