vue + LogicFlow 实现流程图展示

news2024/11/19 2:19:55

vue + LogicFlow 实现流程图展示

在这里插入图片描述

1.背景

部门主要负责低代码平台,配置端负责配置流程图,引擎端负责流程执行,原引擎端只负责流程执行控制以及流程历史列表展示。现在提出个新的要求,认为仅历史记录不直观,需要在展示完整配置流程图的基础上显示执行历史路线。经过初步分析,决定在当前项目的基础上使用LogicFlow渲染从配置端获取的流程图

2.方案设计

  1. 配置端为流程设计器,引擎端通过配置端接口获取流程图所有的节点信息json
  2. 在引擎端根据json分析出各节点以及连线的信息并整合形成logicFlow适用的节点连线数据
  3. 根据节点连线数据渲染流程图,使显示与配置端配置流程图基本保持一致
  4. 引擎端获取流程执行历史,对执行过的节点以及节点之间的连线高亮从而显示完整的执行历史路线

3.准备工作

  1. 安装:npm install @logicflow/core --save
  2. 引入:import LogicFlow from '@logicflow/core';
  3. 版本:^1.2.22
  4. 框架:vue

4.运行问题排查

  1. 运行报错ERROR in F:/app/node_modules/preact/src/jsx.d.ts(1462,3):1462:3 Cannot find name 'SubmitEvent'.
  • 可能原因:在LogicFlow的package.json文件中"dependencies": {"preact": "^10.4.8"},依赖的preact版本与当前项目的preact版本不一致导致ts校验报错
  • 解决:npm install preact@^10.4.8,安装相应版本的preact
  1. 运行报错ERROR in F:/app/node_modules/@logicflow/core/types/util/mobx.d.ts(1,106):1:106 Cannot find module 'mobx'
  • 可能原因:在LogicFlow的package.json文件中"devDependencies": {"mobx": "^5.15.7"},找不到依赖的第三方库
  • 解决:npm install mobx@^5.15.7,安装相应版本的mobx(按道理来说devDependencies中依赖的库是不需要安装的,不清楚具体什么原因需要安装)

5.关键实现

1.挂载

// index.js
<div class="container" ref="lf_ref"></div>

import LogicFlow from '@logicflow/core'

this.lf = new LogicFlow({
    container: this.$refs.lf_ref,
    isSilentMode: true // 静默模式,仅用于展示
})
this.lf.render(this.lf_data)

2.自定义节点

基于某种类型节点改动可继承该类型节点类,若需要自定义整个节点则需继承htmlNode类去自定义构建html节点

// customRect.js
import { HtmlNodeModel, HtmlNode } from '@logicflow/core'

class CustomRectModel extends HtmlNodeModel {
    setAttributes() {
        const { properties } = this
        this.width = properties.width
        this.height = properties.height
    }
}
class CustomRectNode extends HtmlNode {
    setHtml(rootEl) {
        const { properties } = this.props.model

        const el = document.createElement('div')
        el.className = 'custom-rect-contain'
        const html = `
        <div class="icon-side">
            <div class="icon-type"><i class="new-web-icon icon-flow_sp"></i></div>
            <div class="icon-status"><i class="new-web-icon icon-success"></i></div>
        </div>
        <div class="info-side">
            <div class="name-text">${properties.af_actname || properties.value}</div>
            <div class="member-text">${properties.af_assignee || ''}</div>
            <div class="status-text">${properties.af_choice || ''}</div>
        </div>
        `
        el.innerHTML = html
        // 需要先把之前渲染的子节点清除掉
        rootEl.innerHTML = ''
        rootEl.appendChild(el)
    }
}

export default {
  type: 'custom-rect',
  view: CustomRectNode,
  model: CustomRectModel
}

// index.js
import customRect from './components/customRect'
this.lf.register(customRect)

3.自定义样式

自定义节点后需要搭配自定义样式,vue中会给节点样式增加唯一后缀以实现样式隔离,因此如果需要修改logicFlow生成的节点需要使用深层选择器;
我使用的是less,对应的深层选择器是::v-deep,sass应该是:deep()

<style lang="less" scoped>
.container {
    width: 100%;
    height: 100%;
    overflow: hidden;
    ::v-deep {
        // 此处定义各种自定义样式类的样式
    }
}
</style>

4.流程json分析

原配置端的流程配置是基于Angular实现的流程设计器,流程协议与logicFlow并不通用,需要对配置端获取的流程协议的参数进行调整才可用于logicFlow的渲染;
json数据转换为logicFlow数据的具体逻辑实现在此不多做赘述,毕竟json格式不一定一致

{
    // 节点属性:将当前节点作为起始节点的线的id,用于设置logicFlow中线的sourceNode
    "outgoing": [
        {
            "resourceId": "sid-58F1C9BC-DEEE-4775-90FB-C3E55993E194"
        }
    ],
    // 节点/线属性:标志id
    "resourceId": "sid-F73FFA42-61DD-4834-8A2D-1611588E1F6B",
    // 节点/线属性:左上以及右下位置的坐标,需要根据两个坐标计算logicFlow中节点的x坐标、y坐标以及宽高
    "bounds": {
        "upperLeft": {
            "x": 45,
            "y": 270
        },
        "lowerRight": {
            "x": 75,
            "y": 300
        }
    },
    // 节点/线属性:id对应不同类型,其他则均为普通节点
    // StartNoneEvent:开始节点,EndNoneEvent:结束节点
    // ExclusiveGateway:分支节点
    // SequenceFlow:线
    "stencil": {
        "id": ""
    },
    // 线属性:dockers作为线连接节点的锚点,若仅两元素则为直线,若多于两元素则表示该连线为折线,超出的docker作为折线的中间点
    // 节点的锚点在logicFlow中并不适用,计算折线pointsList时可根据节点方位选择节点边上任一坐标进行连接
    "dockers": [
        {
            "x": 20.5,
            "y": 20.5
        },
        {
            "x": 50,
            "y": 40
        }
    ],
    "properties": {},
    // 线属性:线目标节点的id,用于设置logicFlow中线的targetNode
    "target": {
        "resourceId": "sid-0DA5B3EC-1E1F-4335-AA26-682E9C8D1DAC"
    }
}

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

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

相关文章

分享多种mfc100u.dll丢失的解决方法(一键修复DLL丢失的方法)

在使用电脑过程中&#xff0c;我们经常会遇到一些陌生的DLL文件&#xff0c;例如mfc100u.dll。这些DLL文件是动态链接库&#xff08;Dynamic Link Libraries&#xff09;的缩写&#xff0c;它们包含了可以被多个程序共享的代码和数据。今天&#xff0c;我们将深入探讨mfc100u.d…

【研发日记】Matlab/Simulink开箱报告(十)——Signal Routing模块模块

文章目录 前言 Signal Routing模块 虚拟模块和虚拟信号 Mux和Demux Vector Concatenate和Selector Bus Creator和Bus Selector 分析和应用 总结 前言 见《开箱报告&#xff0c;Simulink Toolbox库模块使用指南&#xff08;五&#xff09;——S-Fuction模块(C MEX S-Fun…

elasticsearch基础应用

1._cat接口 | _cat接口 | 说明 | | GET /_cat/nodes | 查看所有节点 | | GET /_cat/health | 查看ES健康状况 | | GET /_cat/master | 查看主节点 | | GET /_cat/indices | 查看所有索引信息 | es 中会默认提供上面的几个索引&#xff0c;表头…

【Redis】快速入门 数据类型 常用指令 在Java中操作Redis

文章目录 一、简介二、特点三、下载与安装四、使用4.1 服务器启动4.2 客户端连接命令4.3 修改Redis配置文件4.4 客户端图形化界面 五、数据类型5.1 五种常用数据类型介绍5.2 各种数据类型特点 六、常用命令6.1 字符串操作命令6.2 哈希操作命令6.3 列表操作命令6.4 集合操作命令…

ChatGPT赋能大气科学:GPT与Python结合应用遥感降水数据处理、ERA5大气再分析数据的统计分析、干旱监测及风能和太阳能资源评估等

目录 专题一 AI领域常见工具讲解 专题二 POE平台及ChatGPT使用方法 专题三 提示词工程 专题四 科研常见应用场景 专题五 Python简明教程 专题六 GPT科研绘图 专题七 GPT辅助下载数据 专题八 遥感降水数据 专题九 数据产品评估 专题十 ERA5全球大气再分析数据 专题十…

R语言 | 上下双向柱状图

1. 效果图 2. 代码 # 生成测试数据 difdata.frame(labelspaste0("pathway", 1:3),upc(30,15,1),downc(10,20,40) ) rownames(dif)dif$labels dif#变形 difreshape2::melt(dif) dif# 绘图 ggplot(dif, aes(xlabels, yifelse(variable"up", value, -value), …

大语言模型(LLM)token解读

1. 什么是token&#xff1f; 人们经常在谈论大模型时候&#xff0c;经常会谈到模型很大&#xff0c;我们也常常会看到一种说法&#xff1a; 参数会让我们了解神经网络的结构有多复杂&#xff0c;而token的大小会让我们知道有多少数据用于训练参数。 什么是token&#xff1f;比…

对比HTTP与WebSocket

目录 对比HTTP与WebSocket1. HTTP协议概述2. WebSocket协议概述3. HTTP与WebSocket的区别4. 使用场景比较5. 性能比较6. 安全性比较7. 应用案例分析8. 总结与展望 对比HTTP与WebSocket 1. HTTP协议概述 1.1 HTTP的基本概念 HTTP&#xff08;Hypertext Transfer Protocol&…

【Leetcode每日一题】 递归 - 计算布尔二叉树的值(难度⭐⭐)(44)

1. 题目解析 题目链接&#xff1a;2331. 计算布尔二叉树的值 这个问题的理解其实相当简单&#xff0c;只需看一下示例&#xff0c;基本就能明白其含义了。 2.算法原理 算法思路概述&#xff1a; 问题解释&#xff1a;我们面对的是一个节点可能含有逻辑运算符&#xff08;AN…

比例尺、等高距和DEM分辨率关系

地球表面的形态是很复杂的&#xff0c;不同地貌类型的形态是由它的相对高度、地面坡度以及所处的地势所决定的&#xff0c;它们是影响等高距的主要因素。从等高距计算公式可以看出&#xff0c;当地图比例尺和图上等高线间的最小距离简称等高线间距确定之后&#xff0c;地面坡度…

前端框架的简单介绍

html html-结构 盖房子之前先划三室二厅 &#xff08;超文本标记语言&#xff09;(可以实现一切的文本) css css-样式 在房里添家具 &#xff08;层叠样式单&#xff09;(化妆在脸上叠加) javascript(js) javascript(js)-交互(行为) 我点击你打开 供显示信息的元…

多维数组和交错数组笔记

1.) 关于数据的几个概念&#xff1a; Rank&#xff0c;即数组的维数&#xff0c;其值是数组类型的方括号之间逗号个数加上1。 Demo&#xff1a;利用一维数组显示斐波那契数列F(n) F(n-1) F(n-2) (n >2 ),每行显示5项,20项. static void Main(string[] args){int[] F n…

线程局部存储(TLS)

线程局部存储&#xff08;Thread Local Storage&#xff0c;TLS&#xff09;&#xff0c;是一种变量的存储方法&#xff0c;这个变量在它所在的线程内是全局可访问的&#xff0c;但是不能被其他线程访问到&#xff0c;这样就保持了数据的线程独立性。而熟知的全局变量&#xff…

2014年认证杯SPSSPRO杯数学建模C题(第一阶段)土地储备方案的风险评估全过程文档及程序

2014年认证杯SPSSPRO杯数学建模 C题 土地储备方案的风险评估 原题再现&#xff1a; 土地储备&#xff0c;是指市、县人民政府国土资源管理部门为实现调控土地市场、促进土地资源合理利用目标&#xff0c;依法取得土地&#xff0c;进行前期开发、储存以备供应土地的行为。土地…

⼗多种免费Unity VR资源⼯具

1、VRTK是⼀种⾼效的VR⼯具包&#xff0c;⽤于在Unity3d中快速构建VR解决⽅案VRTK - Virtual Reality Toolkit - [ VR Toolkit ] | Integration | Unity Asset StoreUse the VRTK - Virtual Reality Toolkit - [ VR Toolkit ] from Sysdia Solutions Ltd on your next project.…

PyTorch-----torch.nn.Softmax()函数

Softmax原理 Softmax 函数是一种常用的激活函数&#xff0c;通常用于多分类问题中。它将一个含有多个实数值的向量&#xff08;通常称为 logits&#xff09;转换成一个概率分布&#xff0c;使得每个元素都在 (0, 1) 区间内&#xff0c;并且所有元素的和为 1。 假设我们有一个实…

YOLOv5实战记录02 模型检测

本人记录打卡&#xff0c;不够自习&#xff0c;慎看。 今天主要学了计组和计网&#xff0c;YOLO简单打个卡。 指路大佬&#xff1a;【手把手带你实战YOLOv5-入门篇】YOLOv5 模型检测_哔哩哔哩_bilibili 1. 主要讲了几个关键参数&#xff1a; 图源你可是处女座 运行示例&#…

iOS17 隐私协议适配详解

1. 背景 网上搜了很多文章&#xff0c;总算有点头绪了。其实隐私清单最后做出来就是一个plist文件。找了几个常用三方已经配好的看了看&#xff0c;比着做就好了。 WWDC23 中关于隐私部分的更新&#xff08;WWDC23 隐私更新官网&#xff09;&#xff0c;其中提到了第三方 SDK 的…

SeaTunnel 与 DataX 、Sqoop、Flume、Flink CDC 对比

产品概述 Apache SeaTunnel 是一个非常易用的超高性能分布式数据集成产品&#xff0c;支持海量数据的离线及实时同步。每天可稳定高效同步万亿级数据&#xff0c;已应用于数百家企业生产&#xff0c;也是首个由国人主导贡献到 Apache 基金会的数据集成顶级项目。 SeaTunnel 主…

阿里云ubuntu服务器搭建可视化界面

连接终端 最好初始化服务器的时候 不要以root权限创建 否则会出错 1更新软件: sudo apt-get update2安装ubuntu desktop : sudo apt-get install ubuntu-desktop3 配置ubuntu desktop并重启: sudo apt-get -f install sudo dpkg-reconfigure ubuntu-desktop sudo reboot4 su…