一个基于electron自动化桌面应用-流程图构建

前期工作已搞定,现在可以搭建桌面应用了。这个阶段可以结合前面定义好的数据格式构建流程图。

模板

还是使用熟悉的技术栈vite + react + electron,模板

流程图

官方文档

自定义 节点样式

因为配置化的操作类型较多,因此可以利用自定义节点样式区分(常规的就是一个长方形);
在这里插入图片描述

例如:开始节点


import React, { memo } from 'react';
import { Card } from 'antd'
import { Handle } from 'react-flow-renderer';import StartSvg from '../assets/start.svg'
import './flow.node.css'export default memo(({ isConnectable, selected, data }) => {return (<><div><Cardsize="small"title={<img src={StartSvg} className={`card-img  ${selected && 'selected'}`} />}style={{ maxWidth: 300, minWidth: 260 }}><p className="wrap-txt">打开页面:{data.url}</p>{/* <span>下一步</span> */}</Card></div><Handletype="source"position="bottom"style={{ backgroundColor: '#576B95' }}isConnectable={isConnectable}></Handle></>);
});

使用:

	const nodeTypes = useMemo(() => ({start: StartNode,})

实现修改参数

监听流程图节点的点击事件,并弹窗。每个节点的参数都不太一样,因此需要定义不同类型的组件。流程图点击事件:

	const onNodeClick = useCallback((event, node) => {setNodeDrawer({title: '详情',open: true,node,})}, [])

在这里插入图片描述

元素之外的节点操作

想让软件流程走通,出来chrom插件圈选元素的节点之外,我们还需要其他节点操作,例如:刷新页面,获取当前页面。这个时候就可以根据之前的定义数据格式预设一些节点,例如:

  {imgSrc: NewSvg,disable: false,txt: '获取最新页面',nodeType: 'logic_new_page',data: {type: 'logic_new_page',data: {logicsetting: {logicType: 'logic_new_page',waitTime: 1,}}}},

通过拖拽的方式,把节点添加到流程图内:

 const onDragStart = (event, data) => {event.dataTransfer.setData('application/reactflow', JSON.stringify(data));event.dataTransfer.effectAllowed = 'move';};

在这里插入图片描述

限制

限制1: 一个六流程图不能有环,如果存在环可能导致死循环

解决: 两个节点连接时,判断是否有一个节点已经存在连接

	const onConnect = useCallback((params) => {const edges = reactFlowInstance.getEdges()const nodes = reactFlowInstance.getNodes()console.log('params===', params, edges).....const { source, target, sourceHandle, targetHandle } = paramsif (edges.find(item => item.source === source && item.sourceHandle === sourceHandle)|| edges.find(item => item.target === target && item.targetHandle === targetHandle)) {messageApi.open({type: 'warning',content: '只允许一个流程',});return;}...})

限制2:部分节点只能连接特定的节点类型,例如: 循环条件分支只能连接条件判断、自定义类型的节点

const onConnect = (
...if (sourceHandle === 'loopcondition') {if (!['logic_func', 'opt_verify', 'opt_exists'].includes(fTarget.type)) {messageApi.open({type: 'error',content: '不能连接该类型节点!!!',});return}} else if (sourceHandle === 'listbody') {if (!['logic_listitem'].includes(fTarget.type)) {messageApi.open({type: 'error',content: '不能连接该类型节点!!!',});return}} else if (fSource && fSource.type === 'logic_listitem' &&  sourceHandle === 'next'&& fTarget && fTarget.type !== 'logic_listitem') {messageApi.open({type: 'error',content: '不能连接该类型节点!!!',});return}
...

最后

源码

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

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

相关文章

【开源】基于JAVA语言的就医保险管理系统

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 科室档案模块2.2 医生档案模块2.3 预约挂号模块2.4 我的挂号模块 三、系统展示四、核心代码4.1 用户查询全部医生4.2 新增医生4.3 查询科室4.4 新增号源4.5 预约号源 五、免责说明 一、摘要 1.1 项目介绍 基于JAVAVue…

Atlassian Confluence Data Center and Server 权限提升漏洞复现(CVE-2023-22515)

0x01 产品简介 Atlassian Confluence是一款由Atlassian开发的企业团队协作和知识管理软件,提供了一个集中化的平台,用于创建、组织和共享团队的文档、知识库、项目计划和协作内容。是面向大型企业和组织的高可用性、可扩展性和高性能版本。 0x02 漏洞概述 Atlassian Confl…

在JavaScript中创建自定义错误

&#x1f9d1;‍&#x1f393; 个人主页&#xff1a;《爱蹦跶的大A阿》 &#x1f525;当前正在更新专栏&#xff1a;《VUE》 、《JavaScript保姆级教程》、《krpano》、《krpano中文文档》 ​ 目录 ✨ 前言 ✨ 正文 简介 创建自定义错误 自定义错误属性 instanceof 检…

STM正点mini-跑马灯

一.库函数版 1.硬件连接 &#xff27;&#xff30;&#xff29;&#xff2f;的输出方式&#xff1a;推挽输出 &#xff29;&#xff2f;口输出为高电平时&#xff0c;P-MOS置高&#xff0c;输出为&#xff11;&#xff0c;LED对应引脚处为高电平&#xff0c;而二极管正&#…

N-141基于springboot,vue网上拍卖平台

开发工具&#xff1a;IDEA 服务器&#xff1a;Tomcat9.0&#xff0c; jdk1.8 项目构建&#xff1a;maven 数据库&#xff1a;mysql5.7 系统分前后台&#xff0c;项目采用前后端分离 前端技术&#xff1a;vueelementUI 服务端技术&#xff1a;springbootmybatis-plusredi…

虚拟局域网、广播域、冲突域

目录 广播风暴 安全问题 虚拟局域网 VLAN 虚拟局域网优点 划分虚拟局域网的方法 基于交换机端口的方法 基于计算机网卡的 MAC 地址的方法 基于协议类型的方法 基于 IP 子网地址的方法 基于高层应用或服务的方法 虚拟局域网使用的以太网帧格式 以太网存在的主要问题&…

Linux halt命令教程:如何正确地停止系统(附实例详解和注意事项)

Linux halt命令介绍 halt 命令&#xff0c;全称 stand still&#xff0c;用于让系统立刻停止。在默认情况下&#xff0c;halt 命令会以启动一个新的运行级别来停止系统。这通常会关闭所有正在运行的服务。如果我们使用 -p 选项&#xff08;相当于 --poweroff&#xff09;&…

STM32+ESP8266 实现物联网设备节点

一、硬件准备 本设备利用STM32F103ZE和ESP8266实现了一个基本的物联网节点&#xff0c;所需硬件如下 1、STM32F103ZE开发板 2、ESP8266模组&#xff08;uart接口&#xff09; 3、ST-LINK&#xff08;下载用&#xff09; 4、USB转串口模块&#xff08;调试用&#xff09; 二…

【文本到上下文 #9】NLP中的BERT和迁移学习

​ ​ 一、说明 ​BERT&#xff1a;适合所有人的架构概述&#xff1a;我们将分解 BERT 的核心组件&#xff0c;解释该模型如何改变机器理解人类语言的方式&#xff0c;以及为什么它比以前的模型有重大进步。    ​BERT的变体&#xff1a; 在BERT取得成功之后&#xff0c;已…

matplotlib 波士顿房价数据及可视化 Tensorflow 2.4.0

matplotlib 波士顿房价数据及可视化 Tensorflow 2.4.0 目录 matplotlib 波士顿房价数据及可视化 Tensorflow 2.4.0 1. 认识 1.1 kears 1.2 kears常用数据集 2. 波士顿房价数据及可视化 2.1 下载波士顿房价数据集 2.2 展示一个属性对房价的影响 2.3 将是三个属性全部展…

SpringBoot中实现阿里云OSS对象存储

背景 在业务中我们往往需要上传文件如图片&#xff0c;文件上传&#xff0c;是指将本地图片、视频、音频等文件上传到服务器上&#xff0c;可以供其他用户浏览或下载的过程。文件上传在项目中应用非常广泛&#xff0c;我们经常发抖音、发朋友圈都用到了文件上传功能。 实现文件…

CTF CRYPTO 密码学-6

题目名称&#xff1a;敲击 题目描述&#xff1a; 方方格格&#xff0c;不断敲击 “wdvtdz qsxdr werdzxc esxcfr uygbn” 解题过程&#xff1a; step1&#xff1a;根据题目描述敲击&#xff0c;wdvtdz对应的字符为x step2&#xff1a;依此类推r&#xff0c;z&#xff0c;o&…

【现代密码学基础】详解完美安全与香农定理

目录 一. 介绍 二. 完美安全的密钥与消息空间 三. 完美安全的密钥长度 四. 最优的完美安全方案 五. 香农定理 &#xff08;1&#xff09;理论分析 &#xff08;2&#xff09;严格的正向证明 &#xff08;3&#xff09;严格的反向证明 六. 小结 一. 介绍 一次一密方案…

【Android】非线性方程的求解寻根

目录 前言&#xff1a; 一、Apache-commons-math3介绍 二、具体简单实例 2.1 导入函数类 2.2 定义函数接口 2.3 使用求解器 2.3.1 布伦特法&#xff08;Brent&#xff09; 2.3.2 米勒&#xff08;Muller&#xff09;法 2.3.3 Newton-Raphson法 前言&#xff1a; 最近…

【GitHub项目推荐--不错的 TypeScript 学习项目】【转载】

在线白板工具 Excalidraw 标星 33k&#xff0c;是一款非常轻量的在线白板工具&#xff0c;可以直接在浏览器打开&#xff0c;轻松绘制具有手绘风格的图形。 如下图所示&#xff0c;Excalidraw 支持最常用的图形元素&#xff1a;方框、圆、菱形、线&#xff0c;可以方便的使用…

CSS设置单行文字水平垂直居中的方法

<!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>单行文字水平垂直居中</title><style>div {/* 给div设置宽高 */width: 400px;height: 200px;margin: 100px auto;background-color: red;/…

Spark——Spark读写Greenplum/Greenplum-Spark Connector高速写Greenplum

文章目录 问题背景解决方式代码实现Spark写GreenplumSpark读Greenplum 参考 问题背景 通过数据平台上的DataX把Hive表数据同步至Greenplum&#xff08;因为DataX原生不支持Greenplum Writer&#xff0c;只能采用PostgreSQL驱动的方式&#xff09;&#xff0c;但是同步速度太慢…

Mybatis的XML配置

MyBatis 是一个持久层框架&#xff0c;通过 XML 配置文件来定义 SQL 映射和结果的映射规则。以下是关于 MyBatis XML 配置文件的详细说明&#xff1a; 基本结构&#xff1a; XML 配置文件通常包含 <mapper>、<resultMap>、<typeAliases> 等元素。 2. mappe…

NoSQL基本内容

第一章 NoSQL 1.1 什么是NoSQL NoSQL&#xff08;Not Only SQL&#xff09;即不仅仅是SQL&#xff0c;泛指非关系型的数据库&#xff0c;它可以作为关系型数据库的良好补充。随着互联网web2.0网站的兴起&#xff0c;非关系型的数据库现在成了一个极其热门的新领域&#xff0c;…

(免费领源码)java#Springboot#mysql旅游景点订票系统68524-计算机毕业设计项目选题推荐

摘 要 科技进步的飞速发展引起人们日常生活的巨大变化&#xff0c;电子信息技术的飞速发展使得电子信息技术的各个领域的应用水平得到普及和应用。信息时代的到来已成为不可阻挡的时尚潮流&#xff0c;人类发展的历史正进入一个新时代。在现实运用中&#xff0c;应用软件的工作…