【组件库】使用Vue2+AntV X6+ElementUI 实现拖拽配置自定义vue节点

    先来看看实现效果:
在这里插入图片描述

    【组件库】使用 AntV X6 + ElementUI 实现拖拽配置自定义 Vue 节点
在现代前端开发中,流程图和可视化编辑器的需求日益增加。AntV X6 是一个强大的图形化框架,支持丰富的图形操作和自定义功能。结合 ElementUI,我们可以轻松实现一个基于 Vue 的拖拽配置流程图,支持自定义节点和动态字段编辑。

一、技术栈介绍

AntV X6:一个基于 HTML5 Canvas 的图形化框架,支持流程图、拓扑图等多种图形化场景。

  • ElementUI:一个基于 Vue 的 UI 组件库,提供丰富的表单、表格和弹窗组件。
  • Vue.js:一个渐进式 JavaScript 框架,用于构建用户界面。

二、项目需求

我们的目标是实现一个流程图编辑器,支持以下功能:
拖拽添加节点:用户可以通过拖拽的方式在画布上添加自定义节点。
节点配置:通过弹窗对话框配置节点的属性,包括实体名称和字段信息。
字段动态编辑:支持动态添加、删除字段,并提供字段类型选择。
数据导入导出:支持从 JSON 文件导入数据,以及将当前流程图导出为 JSON 文件。

三、实现步骤

1. 初始化项目

首先,确保你已经安装了 Vue CLI 和相关依赖。创建一个新的 Vue 项目,并安装以下依赖:

vue create x6-vue-flow
cd x6-vue-flow
npm install @antv/x6 @antv/x6-plugin-dnd @antv/x6-vue-shape element-ui

2. 创建主组件

在 src/components/FlowEditor.vue 中,实现流程图编辑器的主组件。以下是核心代码:

<template><div class="flow-container"><!-- 导航栏 --><div class="flow-nav"><div class="add-entity" @mousedown="startDrag">添加实体</div><el-button type="primary" plain size="medium">保存</el-button><el-button type="warning" plain size="medium">清空</el-button><el-button type="success" plain size="medium">导出</el-button><el-upload accept=".json" :on-progress="handleOnProgress" action="" :show-file-list="false"><el-button plain size="primary">导入</el-button></el-upload></div><!-- 画布 --><div class="flow-content"><div id="container"></div></div><!-- 实体编辑对话框 --><el-dialog title="新增实体" :visible.sync="dialogVisible" width="45%"><el-form ref="form" :model="formData" label-width="130px" :rules="rules" size="small"><el-form-item prop="entity_name_CN" label="逻辑实体中文名"><el-input v-model="formData.entity_name_CN" clearable></el-input></el-form-item><el-form-item prop="entity_name_EN" label="逻辑实体英文名"><el-input v-model="formData.entity_name_EN" clearable></el-input></el-form-item><div class="field-container"><div class="field-container__title"><div class="primary-title">字段信息</div><el-button type="primary" size="small" icon="el-icon-plus" @click="addField">新增一行</el-button></div><el-table :data="formData.formField" height="250"><el-table-column type="index" width="50" label="序号" align="center"></el-table-column><el-table-column prop="cname" label="字段中文名" width="150" align="center"><template v-slot:default="{ $index }"><el-input size="small" v-model="formData.formField[$index].cname"></el-input></template></el-table-column><el-table-column prop="ename" label="字段英文名" width="200" align="center"><template v-slot:default="{ $index }"><el-input size="small" v-model="formData.formField[$index].ename"></el-input></template></el-table-column><el-table-column prop="efType" label="字段类型" align="center"><template v-slot:default="{ $index }"><el-select v-model="formData.formField[$index].efType" size="small"><el-option v-for="item in options" :key="item" :label="item" :value="item"></el-option></el-select></template></el-table-column><el-table-column label="操作" fixed="right" align="center" width="80"><template v-slot:default="{ $index }"><el-button type="danger" size="small" @click="handleFieldDelete($index)">删除</el-button></template></el-table-column></el-table></div></el-form><span slot="footer"><el-button @click="dialogVisible = false">取消</el-button><el-button type="primary" @click="onSubmit(formData)">确定</el-button></span></el-dialog></div>
</template><script>
import { Graph, Shape } from '@antv/x6';
import { Dnd } from '@antv/x6-plugin-dnd';
import { register } from '@antv/x6-vue-shape';
import CellNode from './CellNode.vue';export default {name: 'FlowEditor',data() {return {graph: null,dialogVisible: false,formData: {entity_name_CN: '',entity_name_EN: '',formField: [{ cname: '', ename: '', efType: '' }],},options: ['STRING', 'NUMBER', 'BOOLEAN', 'DATE', 'EMAIL'],};},mounted() {this.$nextTick(() => {this.initGraph();});},methods: {initGraph() {const container = document.getElementById('container');const config = {container,width: '100%',height: '100%',autoResize: true,panning: true,mousewheel: true,};this.graph = new Graph(config);const dnd = new Dnd({target: this.graph,validateNode: (node) => {this.currentDragNode = node;this.dialogVisible = true;return false;},});this.dnd = dnd;},startDrag(e) {const node = this.graph.createNode({shape: 'CellNode',});this.dnd.start(node, e);},onSubmit(data) {this.dialogVisible = false;const node = this.graph.addNode(this.currentDragNode);node.setData(data);},addField() {this.formData.formField.push({ cname: '', ename: '', efType: '' });},handleFieldDelete(index) {this.formData.formField.splice(index, 1);},},
};
</script>

3. 创建自定义 Vue 节点

在 src/components/CellNode.vue 中,实现自定义的 Vue 节点组件。以下是代码:

<template><div style="background-color: #ffffff;"><el-table :data="formData.formField" style="width: 100%" height="250"><el-table-column label="资源名称" :formatter="() => formData.entity_name_CN"></el-table-column><el-table-column prop="cname" label="中文名"></el-table-column><el-table-column prop="ename" label="英文名"></el-table-column><el-table-column prop="efType" label="类型"></el-table-column></el-table></div>
</template><script>
export default {name: 'CellNode',inject: ['getNode'],data() {return {node: null,formData: {entity_name_CN: '',entity_name_EN: '',formField: [{ cname: '', ename: '', efType: '' }],},};},mounted() {const node = this.getNode();this.node = node;node.on('change:data', (data) => {if (data.cell && data.cell.data) {this.formData = node.getData();}});},
};
## 4. 注册自定义节点 在主组件中,使用 @antv/x6-vue-shape 注册自定义的 Vue 节点:
import { register } from '@antv/x6-vue-shape';
import CellNode from './CellNode.vue';register({shape: 'CellNode',width: 300,height: 250,component: CellNode,
});
  1. 样式优化
    在 src/styles/index.scss 中,添加全局样式:
.flow-container {width: 100%;height: 100%;display: flex;flex-direction: column;.flow-nav {display: flex;align-items: center;margin-bottom: 5px;.add-entity {border-radius: 6px;background: rgba(64, 158, 255, 0.7);border-color: #409eff;border-style: dashed;text-align: center;color: #fff;font-size: 14px;padding: 5px;box-sizing: content-box;width: 100px;cursor: pointer;}}.flow-content {flex: 1;}
}

四、运行项目

完成以上步骤后,运行项目:

npm run serve

打开浏览器访问 http://localhost:8080,你将看到一个支持拖拽添加节点、动态字段编辑的流程图编辑器。

五、总结

    通过 AntV X6 和 ElementUI 的结合,我们实现了一个功能丰富的流程图编辑器。AntV X6 提供了强大的图形化能力,ElementUI 提供了丰富的 UI 组件,两者结合可以快速搭建出高效的可视化工具。

完整代码

Graph.vue代码

// Graph.vue
<template><div class="flow-container"><!-- 导航栏 --><div class="flow-nav"><div class="add-entity" @mousedown="startDrag">添加实体</div><el-button type="primary" style="margin-left: 10px" plain  size="medium">保存</el-button><el-button type="warning" style="margin-left: 10px" plain size="medium">清空</el-button><el-button type="success" style="margin-left: 10px" plain  size="medium">导出</el-button><el-upload accept=".JSON" :on-progress="handleOnProgress" action="" :show-file-list="false"><el-button plain size="primary" style="margin-left: 10px">导入</el-button></el-upload></div><!-- 画布 --><div class="flow-content" ><div id="container"></div></div><!-- 实体编辑对话框 --><el-dialog class="dialog-box" title="新增实体" :visible.sync="dialogVisible" width="45%"  :before-close="handleClose" append-to-body="false"><div class="content-wrapper"><div class="primary-title">基本信息</div><el-formref="form":model="formData"label-width="130px":rules="rules"size="small"><el-form-item prop="entity_name_CN" label="逻辑实体中文名"><el-input v-model="formData.entity_name_CN" clearable></el-input></el-form-item><el-form-item prop="entity_name_EN" label="逻辑实体英文名"><el-input v-model="formData.entity_name_EN" clearable></el-input></el-form-item><div class="field-container"><div class="field-container__title"><div class="primary-title">字段信息</div><div class="field-operation"><el-buttontype="primary"size="small"icon="el-icon-plus"@click="addField">新增一行</el-button></div></div><el-table :data="formData.formField" label-position="center" height="250"><el-table-column type="index" width="50" label="序号" align="center"></el-table-column><el-table-columnproperty="cname"label="字段中文名"width="150"align="center"><template v-slot:default="{ $index }" ><el-input size="small" v-model="formData.formField[$index].cname"></el-input></template></el-table-column><el-table-columnproperty="ename"label="字段英文名"width="200"align="center"><template v-slot:default="{ $index }" ><el-input size="small" v-model="formData.formField[$index].ename"></el-input></template></el-table-column><el-table-columnproperty="efType"label="字段类型"align="center"><template v-slot:default="{ $index }"><el-selectv-model="formData.formField[$index].efType"default-first-optionplaceholder="请选择字段类型"clearablesize="small"><el-optionv-for="item in options":key="item":label="item":value="item"></el-option></el-select></template></el-table-column><el-table-column label="操作" fixed="right" align="center" width="80"><template v-slot:default="{ $index }"><el-buttontype="danger"size="small"@click="handleFieldDelete($index)">删除</el-button></template></el-table-column></el-table></div></el-form></div><span slot="footer" class="dialog-footer"><el-button @click="dialogVisible = false">取 消</el-button><el-button type="primary" @click="onSubmit(formData)">确 定</el-button></span></el-dialog></div>
</template><script>
// import index from '../../index.js'
import { Graph, Shape } from '@antv/x6'
import { Dnd } from '@antv/x6-plugin-dnd'
import { register } from '@antv/x6-vue-shape'
import CellNode from './components/cellNode.vue'// 画布配置
const config = {container: null,width: '100%',height: '100%',autoResize: true,// 拖拽画布panning: true,mousewheel: true,connecting: {snap: true, // 是否开启连线自动吸附highlight: true, // 是否高亮显示连线router: 'manhattan',connectionPoint: 'anchor',anchor: 'center',allowBlank: false,// 不允许创建循环连线,即边的起始节点和终止节点为同一节点allowEdge: false,// 不允许起点终点相同allowLoop: false,//  是否允许边连接到非节点上allowNode: false,// 起始和终止节点的相同连接桩之间只允许创建一条边allowMulti: 'witPort'},background: {color: '#F2F7FA'},grid: {visible: true,type: 'doubleMesh',args: [{color: '#eee', // 主网格线颜色thickness: 1 // 主网格线宽度},{color: '#ddd', // 次网格线颜色thickness: 1, // 次网格线宽度factor: 4 // 主次网格线间隔}]}
}
// 连接桩配置
const ports = {groups: {// 对话框需要的一些外部数据right: {position: 'right',attrs: {circle: {r: 5,magnet: true,stroke: '#5F95FF',strokeWidth: 1,fill: '#fff'}}},left: {position: 'left',attrs: {circle: {r: 5,magnet: true,stroke: '#5F95FF',strokeWidth: 1,fill: '#fff'}}}}
}
// 注册HTML节点
Shape.HTML.register({shape: 'custom-html',width: 160,height: 80,effect: ['data'],html (formData) {const data = formDataconst div = document.createElement('div')div.className = 'custom-html'const span1 = document.createElement('span')const span2 = document.createElement('span')const span3 = document.createElement('span')span1.innerText = '1111'span2.innerText = '2222'span3.innerText = '3333'div.appendChild(span1)div.appendChild(span2)div.appendChild(span3)return div}
})
// 注册Vue节点
register({shape: 'CellNode',width: 300,height: 250,component: CellNode,ports: {...ports,items: [{ group: 'left' }, { group: 'right' }]}
})
// 注册边
Graph.registerEdge('dag-edge',{inherit: 'edge',attrs: {line: {stroke: '#C2C8D5',strokeWidth: 1,targetMarker: null}}},true
)export default {name: 'vue-flow',data () {return {graph: null,currentEdge: null,dnd: null,dialogVisible: false,currentDragNode: null,// 对话框类型 编辑/新增formData: {entity_name_CN: '',entity_name_EN: '',// field_list: [],formField: [{cname: '',ename: '',efType: ''}]},options: ['STRING','NUMBER','BOOLEAN','DATE','EMAIL','URL','ARRAY','OBJECT','TEXTAREA','SELECT','RADIO','CHECKBOX','PASSWORD','FILE','IMAGE','RANGE','COLOR','TEL','SEARCH','DATETIME','DATETIME_LOCAL','MONTH','WEEK','TIME','HIDDEN'],rules: {entity_name_CN: [{ required: true, trigger: 'blur', message: '请输入逻辑实体中文名' }],entity_name_EN: [{ required: true, trigger: 'blur', message: '请输入逻辑实体英文名' }]}}},provide () {return {// 要用箭头函数保证this在其他组件获取正确getGraph: () => {return this.graph}}},mounted () {this.$nextTick(() => {this.initGraph()})},methods: {initGraph () {// 容器domconst container = document.getElementById('container')config.container = container// 实例化画布this.graph = new Graph(config)// 实例化拖拽节点const dnd = new Dnd({target: this.graph,validateNode: (node) => {this.currentDragNode = nodethis.dialogVisible = truereturn false}})this.dnd = dndthis.graph.centerContent() // 居中显示},startDrag (e) {const node = this.graph.createNode({shape: 'CellNode'})this.dnd.start(node, e)},handleClose (done) {this.$confirm('确认关闭?').then(_ => {done()}).catch(_ => {})},// 添加节点addNode (node) {return this.graph.addNode(node)},onSubmit (data) {this.dialogVisible = falseif (this.currentDragNode) {const node = this.addNode(this.currentDragNode)const dataSource = {...data}// TODO 有异步问题需要处理先写死200mssetTimeout(() => {node.setData(dataSource)}, 200)}},addField () {this.formData.formField.push({cname: '',ename: '',efType: ''})},handleFieldDelete () {this.formData.formField.splice(0, 1)}}
}
</script><style lang="scss">
$height: 40px;
.custom-html {display: flex;width: 100%;height: 100%;align-items: center;background-color: #fff;span {display: inline-block;height: $height;line-height: $height;border: 1px solid #0f7bcc;text-align: center;min-width: 0;flex: 1;}
}.flow-container {width: 100%;height: 100%;display: flex;flex-direction: column;.flow-nav {display: flex;align-items: center;margin-bottom: 5px;.add-entity {border-radius: 6px;background: rgba(64, 158, 255, 0.7);background-clip: padding-box;border-color: #409eff;border-style: dashed;text-align: center;color: #fff;font-size: 14px;padding: 5px;box-sizing: content-box;width: 100px;cursor: pointer;}}.flow-content {flex: 1;}.my-selecting {border: 1px dashed #40ff7c;background-color: #0f7bcc;}.x6-widget-selection-box {border: 0px dashed rgba(0, 0, 0, 0);box-shadow: 1px 1px 10px 0 rgba(0, 0, 0, 0.3);border-radius: 6px;// background-color: #0F7BCC;// opacity: 0.1;}.x6-widget-selection-inner {opacity: 0.1;border: 5px solid #000000;background-color: #0f7bcc;}}
.dialog-box{// width: 600%;// height: 800px;.el-dialog__title{color:#fff;font-size: 18px;
}.content-wrapper {padding:15px;.primary-title {font-size: 18px;font-weight: 700;padding-bottom: 10px;}.field-container {&__title {display: flex;justify-content: space-between;}}
}
}
</style>

cellNode.vue代码

<template><div style="background-color:  #ffffff;"><el-table:data="formData.formField"style="width: 100%"height="250"><el-table-column :label="`资源名称:${formData.entity_name_CN}`"><el-table-columnprop="cname"label="中文名"></el-table-column><el-table-columnprop="ename"label="英文名"></el-table-column><el-table-columnprop="efType"label="类型"></el-table-column></el-table-column></el-table></div>
</template><script>
export default {name: 'CellNode',inject: ['getNode'],data () {return {// 当前实体节点node: null,formData: {entity_name_CN: '',entity_name_EN: '',formField: [{cname: '',ename: '',efType: ''}]}}},mounted () {// 获取node节点const node = this.getNode()this.node = node// 节点data改变监听node.on('change:data', (data) => {if (data.cell && data.cell.data) {this.formData = node.getData()console.log('🚀 ~ :', this.formData)}})}
}
</script>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/5939.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

docker 部署confluence

1.安装docker的过程就不说了。 2.下载镜像。 docker pull cptactionhank/atlassian-confluence:7.4.0 docker images 3.下载pojie 包。 https://download.csdn.net/download/liudongyang123/90285042https://download.csdn.net/download/liudongyang123/90285042https://do…

C++ 二叉搜索树

目录 概念 性能分析 二叉搜索树的插入 二叉树的查找 二叉树的前序遍历 二叉搜索树的删除&#xff08;重点&#xff09; 完整代码 key与value的使用 概念 对于一个二叉搜索树 若它的左子树不为空&#xff0c;则左子树上所有的节点的值都小于等于根节点的值若它的右子树不为空…

重生之我在异世界学编程之C语言:深入指针篇(上)

大家好&#xff0c;这里是小编的博客频道 小编的博客&#xff1a;就爱学编程 很高兴在CSDN这个大家庭与大家相识&#xff0c;希望能在这里与大家共同进步&#xff0c;共同收获更好的自己&#xff01;&#xff01;&#xff01; 本文目录 引言正文&#xff08;1&#xff09;内置数…

HTTP 配置与应用(不同网段)

想做一个自己学习的有关的csdn账号&#xff0c;努力奋斗......会更新我计算机网络实验课程的所有内容&#xff0c;还有其他的学习知识^_^&#xff0c;为自己巩固一下所学知识&#xff0c;下次更新校园网设计。 我是一个萌新小白&#xff0c;有误地方请大家指正&#xff0c;谢谢…

YOLOv5训练自己的数据及rknn部署

YOLOv5训练自己的数据及rknn部署 一、下载源码二、准备自己的数据集2.1 标注图像2.2 数据集结构 三、配置YOLOv5训练3.1 修改配置文件3.2 模型选择 四、训练五、测试六、部署6.1 pt转onnx6.2 onnx转rknn 七、常见错误7.1 训练过程中的错误7.1.1 cuda: out of memory7.1.2 train…

STM32 ST7735 128*160

ST7735 接口和 STM32 SPI 引脚连接 ST7735 引脚功能描述STM32 引脚连接&#xff08;示例&#xff0c;使用 SPI1&#xff09;SCLSPI 时钟信号 (SCK)PA0(SPI1_SCK)SDASPI 数据信号 (MOSI)PA1 (SPI1_MOSI)RST复位信号 (Reset)PA2(GPIO 手动控制)DC数据/命令选择 (D/C)PA3 (GPIO 手…

使用Redis缓解数据库压力+三种常见问题

目录 一.如何使用 Redis 缓存减缓数据库的压力 &#xff1a; 二.Redis缓存穿透&#xff1a; 布隆过滤器的工作原理&#xff1a; 三.缓存雪崩&#xff1a; 缓存雪崩的处理策略&#xff1a; 四.缓存击穿&#xff1a; 使用 Redis 缓存来减缓数据库的压力是一个常见的优化手段…

移动端VR处理器和传统显卡的不同

骁龙 XR 系列芯片 更多地依赖 AI 技术 来优化渲染过程&#xff0c;而传统的 GPU 渲染 则倾向于在低画质下运行以减少负载。这种设计是为了在有限的硬件资源下&#xff08;如移动端 XR 设备&#xff09;实现高性能和低功耗的平衡。以下是具体的分析&#xff1a; 1. AI 驱动的渲染…

AI新玩法:Flux.1图像生成结合内网穿透远程生图的解决方案

文章目录 前言1. 本地部署ComfyUI2. 下载 Flux.1 模型3. 下载CLIP模型4. 下载 VAE 模型5. 演示文生图6. 公网使用 Flux.1 大模型6.1 创建远程连接公网地址 7. 固定远程访问公网地址 前言 在这个AI技术日新月异的时代&#xff0c;图像生成模型已经成为了创意工作者和开发者手中…

WordPress果果对象存储插件

将网站上的图片等静态资源文件上传至七牛云对象存储&#xff0c;可以减轻服务器文件存储压力&#xff0c;提升静态文件访问速度&#xff0c;从而加速网站访问速度。 支持&#xff1a;阿里云对象存储、华为云对象存储、百度云对象存储、腾讯云对象存储、七牛云对象存储。 下载…

2025美赛倒计时,数学建模五类模型40+常用算法及算法手册汇总

数学建模美赛倒计时&#xff0c;对于第一次参加竞赛且没有相关基础知识的同学来讲&#xff0c;掌握数学建模常用经典的模型算法知识&#xff0c;并熟练使用相关软件进行建模是关键。本文将介绍一些常用的模型算法&#xff0c;以及软件操作教程。 数学建模常用模型包括&#xf…

Maven的下载安装配置

maven的下载安装配置 maven是什么 Maven 是一个用于 Java 平台的 自动化构建工具&#xff0c;由 Apache 组织提供。它不仅可以用作包管理&#xff0c;还支持项目的开发、打包、测试及部署等一系列行为 Maven的核心功能 项目构建生命周期管理&#xff1a;Maven定义了项目构建…

2000-2010年各省第三产业就业人数数据

2000-2010年各省第三产业就业人数数据 1、时间&#xff1a;2000-2010年 2、来源&#xff1a;统计年鉴、各省年鉴 3、指标&#xff1a;行政区划代码、地区、年份、第三产业就业人员数&#xff08;万人&#xff09; 4、范围&#xff1a;31省 5、指标解释&#xff1a;第三产业…

【系统环境丢失恢复】如何恢复和重建 Ubuntu 中的 .bashrc 文件

r如果你遇到这种情况&#xff0c;说明系统环境的.bashrc 文件丢失恢复&#xff1a; 要恢复 ~/.bashrc 文件&#xff0c;可以按照以下几种方式操作&#xff1a; 恢复默认的 ~/.bashrc 文件 如果 ~/.bashrc 文件被删除或修改&#xff0c;你可以恢复到默认的版本。可以参考以下…

Docker网段和服务器ip冲突导致无法访问网络的解决方法

若宿主机所在网络的网段为172.[17-31].xx.xx&#xff0c;则会与Docker本身内部网络间出现冲突&#xff0c;此时需要重新配置Docker默认地址池 一&#xff1a;查看docker的默认网段 route 二&#xff1a;修改docker的默认网段 etc/docker/daemon.json文件增加修改网段信息 {…

2.2.1 语句结构

ST&#xff08;Structured Text&#xff09;语言是一种基于IEC 61131-3标准的高级文本编程语言&#xff0c;其语法规则严格且清晰。以下是ST语言中关于分号、注释和代码块的详细语法规则说明&#xff1a; 分号&#xff08;;&#xff09; 作用&#xff1a;分号用于表示语句的结…

音频入门(二):音频数据增强

本文介绍了一些常见的音频数据增强方法&#xff0c;并给出了代码实现。 目录 一、简介 二、代码 1. 安装必要的库 2. 代码 3. 各函数的介绍 4. 使用方法 参考&#xff1a; 一、简介 音频数据增强是机器学习和深度学习领域中用于改善模型性能和泛化能力的技术。 使用数据…

网络(一)

目录 1. 网络基础(一); 2. 网络套接字; 3. TCP实现; 1. 网络基础(一) 1.1 网络发展: 从一个个计算器都是独立的, 到计算机连接起来进行数据共享, 后期计算机数量很多通过交换器和路由器进行传输(局域网). 广域网就是世界各个计算器进行数据共享, 也是由一个个局域网组成. 1…

风光并网对电网电能质量影响的matlab/simulink仿真建模

这个课题早在一几年的时候比较热门&#xff0c;之前作电科院配电网的一个项目中也有所涉及&#xff0c;我把其中一部分经典仿真模型思路分享给大家&#xff0c;电能质量影响这部分&#xff0c;我在模型中主要体现的就是不同容量的光伏、风电接入&#xff0c;对并网点的电压影响…

【深度学习入门】深度学习知识点总结

一、卷积 &#xff08;1&#xff09;什么是卷积 定义&#xff1a;特征图的局部与卷积核做内积的操作。 作用&#xff1a;① 广泛应用于图像处理领域。卷积操作可以提取图片中的特征&#xff0c;低层的卷积层提取局部特征&#xff0c;如&#xff1a;边缘、线条、角。 ② 高层…