【GoJS使用】GoJS在vue中的入门使用教程】

gojs在vue中实现画布流程 GoJS 是一个用于实现交互式图表的 JavaScript 库,详情可查看根据官网实现以下demo。 阅读详情

文章目录

前言

此使用教程的内容只是个人制作产品时,根据需要实现功能进行文档记录,需要完整的使用文档需要自行去官方文档查看。

注意:本文档适用于开发类似思维导图的功能,需要其他样式可以查看官方文档的例子。


安装和引入Go.js

先安装

npm I gojs –save

然后组件按需引入或全局main.js引入,看自己需求。

使用时要在html中用个dom容器来渲染图像

<div id="chart-wrap">
      <div id="chart-diagram"></div>
</div>

JS导入

// 在export之前
import go from 'gojs'
const MAKE = go.GraphObject.make; // 声明个全局的常量MAKE,用来“创造”所需图像配置   声明一个比较简约的模板

画板初始化

Vue中建议把初始化过程写在一个方法里,初始化内容为

init() {
    var mySelf = this // 声明个Vue的指向

    mySelf.myDiagram = MAKE(go.Diagram, 'chart-diagram', { // 创建画板并挂在Vue上(注意dom的id名称要对应)

        //这里写画板配置

    })
}

画板配置

基础配置

initialContentAlignment: go.Spot.Center, // 居中显示
isReadOnly: true, // 只读,无法编辑操作
allowMove: true, // 允许拖动画板
allowDragOut:true, // 允许拖拽节点
allowDelete: true, // 允许删除节点
allowCopy: true, // 允许复制节点
allowClipboard: true, // 允许粘贴节点
scale: 1.0, // 初始视图大小比例
minScale: 0.5, // 最小视图的缩小比例
maxScale: 1.5, // 最大视图的放大比例
scrollMargin: 500, // 默认下拖拽画布的时候边界是已最外的节点为边距,这个就是增加边距的,类似padding设置
fixedBounds: , //设置图表边界
    
'undoManager.isEnabled': true, // 支持 Ctrl-Z 和 Ctrl-Y 操作 (撤回和复原)
'toolManager.hoverDelay': 100, // tooltip提示显示延时
'toolManager.toolTipDuration': 10000, // tooltip持续显示时间
'grid.visible': true, // 显示网格
'toolManager.mouseWheelBehavior': go.ToolManager.WheelZoom, // 有鼠标滚轮事件放大和缩小,而不是向上和向下滚动
'clickCreatingTool.archetypeNodeData': { category: 'Normal', text: '新节点', notice: ''}, // 双击新建节点(可以写入节点的默认信息);

树结构配置

mySelf.myDiagram.layout = MAKE(go.TreeLayout, { // 树结构
   angle: 0, //树结构的方向
   layerSpacing: 35, //节点之间的距离
   isOngoing: false, // 是否开启自动布局
   isTreeExpanded:false // 是否展开子节点
})

连接线的配置

mySelf.myDiagram.linkTemplate =
    MAKE(go.Link,
         { 
            routing: go.Link.Orthogonal, // 线会自动90度转弯(AvoidsNodes自动绕开节点)
            curve: go.Link.JumpGap, // 线与线相交会自动不重叠(还有go.Link.Bezier贝塞尔曲线)
            corner: 3 // 拐角弧度
            toEndSegmentLength: 30, //目的点线的固定距离(如果设置了自动拐角就是最短距离)
            fromEndSegmentLength: 30, //出发点线的固定距离(如果设置了自动拐角就是最短距离)
            fromShortLength, //设置线的出发点到端口的距离
            toShortLength, //设置线的结束点到端口的距离
            zOrder: -111, //图像层级
            selectable: false, //连接线是否可选
            fromSpot: go.Spot.LeftRightSides, //连线出发点强制为(new go.Spot(0.5, 0.5, 0, -25)为自定义)
            toSpot: go.Spot.LeftRightSides, //连线目的点强制为
            reshapable: true, 
            resegmentable: true,
            relinkableFrom: true,  //出发点是否可以改变
            relinkableTo: true,  //目标点是否可改变 
            adjusting: go.Link.Stretch,
            fromMaxLinks: 1,  //限制一个连接点的连接次数
            toMaxLinks: 1,  //限制一个连接点的连接次数
		},
         
         // 如果link数据有fromSpot,toSpot属性则可绑定
         new go.Binding("fromSpot", "fromSpot", go.Spot.parse),
         new go.Binding("toSpot", "toSpot", go.Spot.parse),
      
         MAKE(go.Shape, {
          strokeWidth: 2 // 节点连线宽度
          stroke: '#57CFE3' // 节点连线颜色
        }),
         MAKE(go.Shape, {
            toArrow: 'Standard',
            scale: 3, // 箭头放大倍数
            fill: '#57CFE3', // 箭头填充色
            stroke: null // 外边框颜色
        })  
     )

鼠标框选配置

mySelf.myDiagram.toolManager.dragSelectingTool = null // 禁止框选

mySelf.myDiagram.toolManager.dragSelectingTool.box = MAKE(go.Part,{
layerName: 'Tool', selectable: false },
MAKE(go.Shape,
    { name: 'SHAPE', fill: null, stroke: 'chartreuse', strokeWidth: 3 })
  )
}

节点选中时边框的配置

selectionAdornmentTemplate:
MAKE(go.Adornment, "Auto",
     MAKE (go.Shape, { fill: null,
                      stroke: "deepskyblue",
                      strokeWidth: 1.5,
                      strokeDashArray: [4, 2] }
          ),
     MAKE (go.Placeholder)
)

全局缩略图的配置

let myOverview = MAKE(go.Overview, 'myOverviewDiv', { observed: mySelf.myDiagram })  // 'myOverviewDiv'为缩略图dom的id名;

其他配置

线段吸附网格

mySelf.myDiagram.toolManager.draggingTool.isGridSnapEnabled = true  // 注意:要先打开网格

mySelf.myDiagram.toolManager.draggingTool.gridSnapCllSpot = go.Spot.MiddleBottom // 设置网格编辑捕捉对齐点(这个个人还没试出来是什么)

节点有关

节点初始化

建议将节点的初始化写在方法中,便于创建不同类型的节点,以下为例子

function initNode (node_type, color) {
        mySelf.myDiagram.nodeTemplateMap.add(
            node_type || 'Normal', // 默认节点为普通节点
              MAKE(
                go.Node, 
                'Vertical', // 节点默认内部的排列方式,垂直(还有Spot、Auto,下面会介绍)
                new go.Binding('location', 'loc', go.Point.parse), //设定和绑定节点的初始位置
                {这里可以写一些节点的配置},
                // 这里是面板的配置…     
})
            
// 不同节点初始化
initNode('Normal', '#5D7092') // 普通节点
initNode('Model', '#E8684A') // 模型节点

对于定制化的节点,建议一个类型一个初始化方法

节点内容分类

一个节点为Node,内部可以创建Panel,Shape,TextBlock,Picture。

  • Panel:面板,可以把Shape,TextBlock,Picture向内堆放
  • Shape:图像
  • TextBlock:文本框
  • Picture:图片

节点成员的布局方式

注意布局配置是有覆盖的先后顺序的,node和panel可以生效,Auto方式第一个配置的大小会自适应,且以其为边界裁切。

偷大佬的一张图:
在这里插入图片描述

节点配置

{
	// 节点阴影设置
	isShadowed: true,
	shadowOffset: new go.Point(3, 3), //阴影的位置偏移
	shadowColor: '#C5C1AA',
	
	zOrder: 99999//层级
	movable:false,//是否可拖动
	deletable:false,//是否可删除
	selectable: false, //是否可选择
	selectionAdorned:false, //显示选中边框
	copyable:false, //可复制的
	location, //节点坐标,还不会用
	minLocation: new go.Point(0, 0), //节点坐标最小位置
	maxLocation: new go.Point(9999, 0), //节点坐标最大位置
	isSelected:true, //默认fasle,true(操作型属性无法在模板定义,只能在节点生成后操作)例如,节点或线对象.isSelected=true;
	reshapable:true, // 重塑(改变shape形状边界时使用,将影响节点大小)
	resizable: true, // 可调整大小的(手动调整节点大小时,节点内容显示区域时使用)
	resizeCellSize: new go.Size(10, 10), //可调整的范围
	rotatable:true, // 可旋转的
	
	//这三个一起配合,固定选中的节点框只选中名为BODY的面板
	locationSpot: go.Spot.Center,  
	locationObjectName: 'BODY',
	selectionObjectName: 'BODY'
	
	//固定连接点位置
	fromSpot: go.Spot.RightCenter, 
	toSpot: go.Spot.LeftCenter
	
	desiredSize: new go.Size(160, 40), //设置大小
	
	avoidable:false,  //线绕开经过的节点,不从节点穿过,Link.routing 为AvoidsNodes才能使用
	avoidableMargin: new go.Margin(12,12,12,12) // 线绕开经过的节点的边距,默认6,6,6,6
}

一些节点触发事件

tips:也可以写在图形,面板上,但我试过获取不到节点信息

// 鼠标移入事件 (e.event可以获取事件的记录信息,obj为不可读性的移入节点信息)
mouseEnter: (e, obj) => {},、
// 鼠标移出事件
mouseLeave: (e, obj) => {},
// 选中节点事件 (node.isSelected表示被选中的节点)
selectionChanged: (node) => {},
// 单击节点事件 
click: (e, node) => {},
// 双击节点事件
doubleClick: (e, node) => {},
// 鼠标悬停事件
mouseHover: (e, node) => {
  注意:需要在画布定义悬停时间myDiagram.toolManager.hoverDelay = 500 ;
},
// 线连接事件
linkConnected: function (node, link, port) {
    每个参数会触发两次,第一次是出发节点,第二个是目的节点
    console.log(port.portId) //可以获取到连线时,出发点和目的点的节点名称
},
// 线断开事件
linkDisconnected: function(node, link, port) {}
}

面板的配置

tips:面板是可以随意添加,它的功能就是一个画板,内部可以放入图形,文字框等;

// 声明创建一个新的面板对象,自定义方式可参考mySelf.myDiagram.nodeTemplate
MAKE(
	go.Panel, 
	'Auto', // 布局为自动(还有自定义位置Position)
	 {
	minSize: new go.Size(160, 40), //最小大小
	visible: false, // 不可见
	name: ‘BODY’//面板名称
	},
	MAKE( //图形
	go.Shape,
	'RoundedRectangle', //为圆角矩形(还有矩形'Rectangle')
	{
	fill: color || '#5D7092', // 内填充色
	stroke: '#FFF', // 外边框颜色 null 为无
	strokeWidth: 1, // 外边框粗细
	angle: 0, // 应该是旋转角度
	position: new go.Point(0, 95), //如果开启了自定义位置这个就要写
	background '#e6eefb', //可以理解为是panel的背景
	desiredSize: new go.Size(120, 100), //宽高 不设置宽高表示自适应
	alignment: new go.Spot(1, 0.5, 100, 0) // 放在上一级的哪个位置,除了特定的值还可以自定义,前面两个参数表示几倍于上一级的宽高的位置,后面设置具体x,y的位置
	},
	new go.Binding('figure', 'figure') // 声明并创建一个新的图形
	),
    MAKE( // 编辑文本域
      go.TextBlock, 
      '默认',
	{
	font: '12pt Helvetica, Arial, sans-serif',
	stroke: 'whitesmoke',// 外边框颜色
	width: 125, // 文本区域宽度,会覆盖minSize等但仍会生效
	maxLines: 2, 最多显示几行
	maxSize: new go.Size(360, NaN), // 最大大小,NaN表示自适应,这个目前试出来shape不能用,使用Spot布局这个属性无法使用
	wrap: go.TextBlock.WrapFit, //文本域可换行,大小自适应(还有文本决定宽高go.TextBlock.WrapDesiredSize,文本不能换行go.TextBlock.None)使用需要设置宽高
	editable: true, // 是否可编辑
	textAlign: center, // 文本位置
	margin: 12, // new go.Margin(2, 0)或new go.Margin(1, 0, 0, 1)
	overflow: go.TextBlock.OverflowEllipsis // 超出文本框大小的文字...代替(go.TextBlock.OverflowClip 溢出遮挡)使用需要设置宽高
	},
	new go.Binding('text').makeTwoWay() // 注意:这里的text简写了
	   ),
	MAKE(go.Picture, //图片,一个panel不能同时有shape
	{ source: noticeImg, // 一定要以import的方式引入图片import noticeImg from '.. '
	      width: 20,
	      height: 23
	     }
	)
	还可以配置连接点,推荐用函数来配置
)

连接点的配置

// 例子:配置四个连接点,注意在pannel配置
makePort('T', go.Spot.Top, true, true),
makePort('L', go.Spot.Left, true, true),
makePort('R', go.Spot.Right, true, true),
makePort('B', go.Spot.Bottom, true, true)
用函数可以配置不同的连接点
function makePort (name, spot, output, input) {
  return MAKE(go.Shape, 'Circle', {
    fill: '#44CCFF', // 颜色
    opacity: 0, // 透明
    stroke: null, //边框颜色
    desiredSize: new go.Size(10, 10), //大小
    alignment: spot, //放置在相对与外部配置位置的(go.Spot.Left
    alignmentFocus: go.Spot.Center, //第二次调整 
    defaultAlignment // 尚不清楚
    portId: name, // 连接点ID,没有名称可能无法触发连线
    fromLinkable: output, //是否出发点可用true或者false
    toLinkable: input, // 是否目的点可用
    cursor: 'pointer', // 移入的时候鼠标显示什么
	fromShortLength, //设置线的出发点到端口的距离
	toShortLength, //设置线的结束点到端口的距离

	fromSpot: spot, //连线出发点强制为(go.Sport.RightCenter/AllSides/)
    toSpot: spot, // 连线目的点强制为
    // 如果需要这两个属性生效,必须在节点存储的方式上写
    this.$nextTick(() => {
         this.myDiagram.model = MAKE(go.GraphLinksModel, {
           linkFromPortIdProperty: 'fromPort',
           linkToPortIdProperty: 'toPort',
           nodeDataArray, //存储节点数据的变量
           linkDataArray //存储连线数据的变量
         })
       })
  })
}

右键点击配置

{
     contextMenu:
       MAKE('ContextMenu',
        MAKE('ContextMenuButton',
           MAKE(go.TextBlock, '清除计算'),
           { click: function () {
              console.log('右键点击了')
           } })
         )
  },
// 可放在面板的配置中,面板右键触发

节点数据

节点的数据都存放在实例化画板的model属性里。

第一种存储数据的方式

this.myDiagram.model.nodeDataArray = [] //节点数据 格式为[{ key: "Alpha", color: "lightblue", loc: "400 0" }]
this.myDiagram.model.linkDataArray = [] //连线数据 格式为[{ from: "Beta", to: "Alpha" }]

第二种存储数据的方式

// 只需存储节点信息,但内有父级节点属性,这样显得不易乱
this.diagram.model = new go.TreeModel([…])

如果想更新已渲染画板的数据,就需要执行

this.myDiagram.rebuildParts()

或者

this.diagram.model = new go.GraphLinksModel(
          nodeDataArray, //此变量存储节点数据
          linkDataArray //此变量存储线条数据
);

固定属性

节点上会有些原生的固定属性,例如category为节点类型,为字符串;text为节点文本,为字符串,loc可能为节点位置,为字符串格式为’xx xx’(这个还没验证)等等。具体根据需求可查看官方的文档。


监听API

空白背景点击事件

mySelf.myDiagram.addDiagramListener('BackgroundSingleClicked', function (e) {})

监听删除事件

mySelf.myDiagram.addDiagramListener('SelectionDeleted', function (e) {
	e.subject.each(function (n) {
	  删除的东西会依次遍历出来
	})
})

监听节点文本框修改事件

// 在TextBlock的配置中写
textEdited: function (tb, olds, news) {
    console.log('oldString: ' + olds + 'newString: ' + news)
}

监听节点生成事件

mySelf.myDiagram.addDiagramListener('PartCreated', function (e) {
    还没试出具体什么获取节点的信息
})

其他API

外联HTML

与画板的html同级

<div id="toolTipDIV" style="position: absolute; background: white; border: 2px solid #666666; z-index: 1000; display: none;">
  <p id="toolTipParagraph">备注信息</p>
</div>
123
let myToolTip = MAKE(go.HTMLInfo, {
	show: this.showToolTip, //展示时执行的方法
  	hide: this.hideToolTip //隐藏时执行的方法
})

在需要移入触发外联html的panel或node配置内

{
    toolTip: myToolTip // 放在哪个配置就获取到哪个位置信息(obj参数)
}

在methods中的方法示例

showToolTip (obj, diagram) { // 鼠标移入备注图标显示文字
	let toolTipDIV = document.getElementById('toolTipDIV')
	var pt = diagram.lastInput.viewPoint
	toolTipDIV.style.left = (pt.x + 10) + 'px'
	toolTipDIV.style.top = (pt.y + 10) + 'px'
	document.getElementById('toolTipParagraph').textContent = '备注: ' + this.showNoticeText
	toolTipDIV.style.display = 'block'
},
hideToolTip () {
	 let toolTipDIV = document.getElementById('toolTipDIV')
	 toolTipDIV.style.display = 'none'
},

这个api也可以做一些移入指定面板的触发事件;

找到设定名称的面板

比如找到选中节点的面板

Let part = this.myDiagram.selection.first().findObject('NOTICE')

找到后可以修改这个面板的属性

part .setProperties({'visible': true})

放大或者缩小画板

this.myDiagram.scale += 0.1
this.myDiagram.scale -= 0.1

右键点击事件

contextClick : function(e: InputEvent, thisObj: GraphObject)
e.viewPoint能获取鼠标点击坐标

节点API

遍历一个节点的连接点

例子:把每个节点的连接点遍历出来,设置不透明(obj为节点的不可读信息)

obj.ports.each(item => {
	item.opacity = 1
})

遍历一个节点的子节点

// Obj为不可读性的节点信息
obj.findTreeChildrenNodes().each(item => {})

遍历画板所有节点

this.myDiagram.nodes.each(function (node) {})

添加新节点

this.myDiagram.model.addNodeData({ category: 'Normal', text: '新节点',等其他属性 })

删除选中节点

this.myDiagram.commandHandler.deleteSelection()

删除所有节点

this.myDiagram.model.removeNodeData

获取选中节点的信息

this.myDiagram.selection.first() //想获取节点信息还需要加个data属性,连线信息加个links属性如果是选中节点数量
this.myDiagram.selection.size

编辑节点文本

this.myDiagram.commandHandler.editTextBlock()

修改节点属性

例如修改选中节点的某个属性

this.myDiagram.model.setDataProperty(this.myDiagram.selection.first(), 'category', 'Model') 

这个方式修改的节点信息具有实时刷新性

另外想直接获取选中节点数据,修改或者添加属性,只能在实例化go.js的vue文件中才有效

通过节点属性key来找到节点

mySelf.myDiagram.model.findNodeDataForKey(xxx) //例如要找的节点key=’xxx’

通过名称寻找该节点下的图形,面板等

node.findObject('LATESTVAL') //node为该节点的不可读信息

修改该图形,面板等的属性

xxx.setProperties({'visible': false}) // xxx为通过findObject找到的图形,面板等

获取节点关联的线

node.findLinksConnected().each(function(link) {} //node为该节点的不可读信息

获取节点与之连线的节点

node.findNodesConnected().each(function (node) {  只要有连接关系,间接连接也算
  connectedNodes.push(node.data)
})

获取以from方向连接的节点

node.findNodesOutOf().each(function (node) {})

获取以to方向连接该的节点

node. findNodesInto ().each(function (node) {})

连线API

连接线的生成事件

mySelf.myDiagram.addDiagramListener('LinkDrawn', function (e) {})

注意事项

在methods中想获取实例化的画板对象,需要通过this.$nextTick(()=>{})获取

GOJS + VUE 流程图实现 前言及展示 在项目中需要根据传过来的数据画出流程图,采用了GOJS插件,功能很全面,可以根据自己的需要调整,不过建议简单的流程图还是自己手写一个组件,更加便于维护和变换。有一点需要注意的是,GOJS是需要收费的,有水印,虽然可以手动去掉,但是公司用的话还是需要买。GOJS的官网上有关于在VUE中应用GOJS的小例子:Minimal GoJS Sample in Vue.js。推荐看一下,可以解决... 阅读详情

相关推荐

vue 使用 gojs

vue create gojs-vue npm i -S element-ui import ElementUI from 'element-ui'; import 'element-ui/lib/theme-chalk/index.css'; Vue.use(ElementUI); 引入gojs npm install gojs --save import gojs from '...

weixin_43805387的博客 1798

GOJS 基础用法

每个节点下方的内容会不同 这个时候就出现了节点这个概念。版本 网上去除这个版本水印的方法比较多。组样式 当在数据中 这行数据设置了。如果想去掉 左上角水印 可以下载。两个实例代码 放在最下面。比方做成官网这种动态线。则他使用的样式为下方。

notagoodwriter的博客 6425

vue项目里引用Gojs画可拖拽流程图

vue,Gojs,javascript,css 项目需求 实现可拖拽,可链接,自定义流程图,双击可修改文字

qq_37656005的博客 4084

GoJS中文文档

GoJS中文文档,由于项目用的急学习时间比较短,所以几乎都是百度翻译,有空的码农们愿意留个足迹翻译下,可以留言哟,非常感谢

fanlc8888的博客 1万+

vue使用gojs,需求在link中的虚线上添加方向箭头?如何实现

通过上述步骤,你可以在 Vue.js 项目中使用 GoJS 实现带有虚线箭头的链接,并通过按钮控制箭头的显示与隐藏。关键在于利用 GoJS 的数据绑定功能,将链接的显示状态与 Vue 的状态管理结合起来,实现动态控制。如果在实际应用中遇到具体问题,欢迎提供详细信息,我会进一步协助解决。祝你项目顺利!希望如上措施及解决方案能够帮到有需要的你。

**My Coding Family** 848

gojs-chinese:gojs中文文档

GoJS中文文档欢迎提供PR 简介部分翻译进度 介绍 翻译状态 验证核对状态 基本 :check_mark_button: 建造 :check_mark_button: 使用模型 数据绑定 使用React的GoJ Angular的GoJ 文字区块 形状 图片 面板 桌子面板 毛刷 调整对象大小 项目数组 变更事件 交易次数 座标 初始视图 馆藏 链接 链接标签 港口 节点数 调试 版面 树木 子树 团体 子图 规模较大的团体 选拔 突出显示 动画片 工具提示 上下文菜单 图表事件 工具 指令 权限 验证 HTML互动 图层和Z顺序 调色板 概述 调整图表大小 更换和删除 纽扣 模板图 图例和标题 扩展名 几何弦 网格图案 分级面板 图表图像 SVG图 印刷 服务器端图像 Node.js中的GoJS 贮存 表现 :check_mark_button: 从源头建造 部署方式 API部分翻译进度 图形类 翻译状态 验证核对状态 装饰 :check_mark_button: 动画片 动画管理器 动画触发 命令处理程序

【GoJS使用】GoJS在vue中的入门使用教程

文章目录前言安装和引入Go.js画板初始化画板配置基础配置树结构配置连接线的配置鼠标框选配置节点选中时边框的配置全局缩略图的配置其他配置线段吸附网格节点有关节点初始化节点内容分类节点成员的布局方式 前言 此使用教程的内容只是个人制作产品时,根据需要实现功能进行文档记录,需要完整的使用文档需要自行去官方文档查看。 安装和引入Go.js 先安装 npm I gojs –save 使用时要在html中用个dom容器来渲染图像 <div id="chart-wrap"> <div i

庞囧的博客 9018

一步步教你离线安装vsftpd并配置FTP服务

在安装vsftpd之前,需确保系统更新至最新版本,并检查防火墙配置以允许FTP流量。安装过程涉及使用包管理器(如apt-get或yum)下载vsftpd及其依赖包,特别是在离线环境中,需先下载所有相关包并传输到目标机器。安装完成后,通过命令验证安装并启动服务。配置vsftpd包括编辑配置文件以设置访问权限和安全性参数,如匿名访问和本地用户访问。此外,需配置防火墙开放FTP端口,并通过FTP客户端测试服务。最后,建议进行安全配置,如禁用匿名访问和配置SSL/TLS加密,并设置日志记录以监控服务状态。

a_join的博客 2482

【vue3+GoJs】gojs在vue3中的引用及小白入门

GoJS 是一个功能强大的 JavaScript 图形库,用于创建交互式的图表和图形。将 GoJS 与 Vue 3 结合,可以快速开发出动态且交互丰富的图形界面。本文将介绍如何在 Vue 3 项目中引入 GoJS,并通过一个简单的示例进行入门。

weixin_68350138的博客 2529

frp 内网渗透案例:端口转发 + 二级代理(深入理解 frp 在内网渗透中的技巧)

本文使用 vulnstack7 靶场作为测试环境,解释 frp 内网渗透特殊使用姿势,通过此案例来提高内网渗透能力。接下来的演示环境只做了以下修改。攻击者 vps 的 ip 修改为:192.168.72.162。DMZ 区域的 ubuntu 的 ip1 修改为:192.168.72.129。先引入问题,当我们控制了 DMZ 的 ubuntu 并且拿到第二层网络的 ubuntu 的 rce 后,会出现以下两个问题。如何搭建隧道让 ubuntu 反弹 shell 给攻击者 vps?

anddddoooo的博客 1763

Seedance2.5本地部署指南:从环境配置到生产优化的完整实践

在 AI 内容生成领域,本地部署方案正逐渐成为开发者和技术团队关注的焦点。Seedance2.5 作为一款支持图像和视频生成的 AI 工具,其完全离线运行的能力解决了云端服务在数据隐私、使用成本和访问稳定性方面的痛点。对于需要处理敏感内容、频繁生成素材或希望完全掌控生成流程的技术人员来说,掌握本地部署方法具有实际价值。 本文将以 Seedance2.5 的本地部署为例,详细介绍从环境准备、依赖配置到运行验证的完整流程,同时深入分析关键参数配置、常见问题排查方法以及生产环境下的优化建议。通过实际部署过程,理解

weixin_33139275的博客 726

在Vue项目中使用Gojs

使用GOJS在vue项目中实现拖拉拽的图形化需求,记录了常用功能的实现,需要完整使用的可以去官方文档查看。至此,就能在vue项目中使用Gojs实现简单的双画布托拉拽雪花图需求。

CH_Y的博客 6151

SAP ABAP BADI_FINS_ACDOC_POSTING_EVENTS 深度应用:KO88工单结算的凭证字段定制与财务数据增强

本文深入探讨了SAP ABAP中BADI_FINS_ACDOC_POSTING_EVENTS在KO88工单结算中的应用,详细解析了如何通过BADI实现财务凭证字段的定制与数据增强。文章提供了从结构扩展到BADI方法实现的完整步骤,包括性能优化建议和实际应用中的测试验证流程,帮助开发人员高效解决企业个性化财务需求。

weixin_26869081的博客 389

在Vue中使用gojs

在Vue中使用gojs 的两种方式 普通使用 <!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8"> <title></title> <style type="text/css"> canvas { ...

qq_29287561的博客 1683

Airsim动态 | 安装ROS包装器(AirSim ROS Wrapper)

本期内容我们将带来在Airsim环境下使用ROS Wrapper的相关教程,以下是AirSim客户端库上的一些ROS Wrapper相关配置。 一、启动 以下步骤适用于 Linux 系统。如果是在 Windows 上运行 AirSim,可以使用 Windows Subsystem for Linux (WSL) 来运行 ROS 包装器,如果不想在主机上安装ROS相关工具,也可以使用Docker容器进行安装。请检查下方内容并按照需求安装,具体内容可以参照最后网址。 如果您的默认 GCC 版本不是8或更高版.

AMOVLAB(阿木实验室) 1776

IPSec案例部署

步骤二:按照规划划分vlan并开启vlanif接口,配置链路类型实现vlan之间的互通。步骤2 :配置OSPF实现公司内部通信,配置静态路由实现AR1和AR3路由可达。3. 配置IPSec的安全联盟(协商业务数据加密时使用的参数)下发缺省路由,使网关设备有去往对端的路由‘配置对等体IP地址,即分公司的出口IP。步骤1:设备重命名以及IP地址的配置。步骤4:配置NAT,实现内网访问外网。步骤3:配置IPSec VPN。5.调用IPSec的安全策略。发了5个包 加密5个包。

2301_76769137的博客 1694

vue项目里引用 gojs 流程图

gojs 要实现的需求调研了多种可拖拽流程图的技术,如:bpmn.js,gojs等 你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用Markdown编辑器, 可以仔细阅读这篇文章,了解一下Markdown的基本语法知识。 今天先讲一下gojs 我们对Markdown编辑器进行了一些功能拓展与语法支持,除了标准的Markdown编辑器功能,我们增加了如下几点新功能,帮助你用它写博客: 全新的界面设计 ,将会带来全新的写作体验; 在创作中心设置你喜爱的代码高亮样式,Mar

weixin_43478305的博客 5302

用野火FPGA开发板(EP4CE10)手把手教你实现一个高精度频率计(附完整Verilog代码)

本文详细介绍了基于野火FPGA开发板(EP4CE10)实现高精度频率计的全过程,涵盖等精度测量法的核心原理、Verilog代码实现及优化技巧。通过实际案例演示,帮助开发者掌握1Hz-50MHz范围、精度达0.1%的频率计设计方法,并提供完整的工程代码和实测数据。

weixin_29261711的博客 439

GoJS 在 Vue 中的简单实现

GoJS 简单实现 介绍与引入 简述: GoJS 是一个用于实现交互式图表的 JavaScript 库 在 vue 中使用 安装: npm install gojs --save gojs import gojs from 'gojs' // 在 main.js 中引入 Vue.prototype.go = gojs // 挂载 1. 创建一个空图像 结构部分(template) <div class="flowChart" id="flowChart"></div&g

向往的那片海洋 1881

LeRobot 入门教程(三)在仿真环境和自定义机器人上部署 LeRobot

本教程详细介绍了基于真实世界机器人和仿真环境的模仿学习实现方法,涵盖数据采集、训练策略和评估全流程。在真实机器人部分,重点讲解了远程操作设置、摄像头配置、数据集记录与管理技巧、策略训练(支持GPU/MPS设备)以及模型评估。仿真环境部分则演示了gym-hil的安装使用、模拟数据采集和策略训练。此外,教程还提供了自定义机器人集成指南,包括电机选择、接口继承、传感器/动作特征定义、连接管理和校准配置等核心步骤。所有方法均支持HuggingFace数据集中心和Weights & Biases工具链,为机器

2506_90492529的博客 2399

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

vue中 gojs 的使用及去除水印

描述: GoJS是一个用于构建交互式图表和图形的JavaScript和TypeScript库。GoJS允许你为你的用户建立各种各样的图表和图形,从简单的流程图和组织图到高度具体的工业图,SCADA和BPMN图,医学图,如基因图,等等。GoJS使用可定制的模板和布局使构建复杂节点、链接和组的JavaScript关系图变得容易。 传送门: https://gojs.net/latest/index.h...

luckydog 3664

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

vue 使用gojs绘制简单的流程图

在vue项目中需要展示工作流进度,可以使用的流程图插件很多 flowchart.js http://adrai.github.io/flowchart.js/, 基于SVG创建Flow Chart go.jshttp://www.gojs.net/latest/index.html go.js 提供一整套的JS工具,支持各种交互式图表的创建。有免费版和收费版...

ajizai1928的博客 2175

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

vue3.x使用gojs

分别介绍vue2.x和vue3.x使用gojs的方法 1.vue2.x使用gojs 安装: npm install --save gojs 引用:main.js 里 import gojs from ‘gojs’ Vue.prototype.go = gojs 使用: let go = this.go; let $ = go.GraphObject.make; myDiagram = $(go.Diagram, myDiagramDiv ,{…}) // 必须命名或引用div HTML元素 1.vue

qq_37656005的博客 2928

vue配合gojs实现工业组态绘制

vue配合gojs实现工业组态绘制 通过从左侧拖拽区拖拽图片到中间画布区,之后可对此图标进行大小尺寸调整,旋转,删除,绑定等操作进行合理布局 拖拽、复制、粘贴、选择、鼠标右键事件、剪切、文本编辑、删除、撤销、查看信息、模板、数据源绑定、事件处理程序、调色板、自动布局、添加画布或者节点的监听事件

qq_37656005的博客 4936

vue结合GoJS作流程图效果图

vue结合GoJS作流程图效果图

Bay 丶 5771
上一篇: 【gojs常用API-节点定义】
下一篇: 【Promise手撕axios,(它是咋用原生封装的)】
李木木~
博客等级 码龄5年 28粉丝 87原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值