vue开发之LogicFlow自定义业务节点

目录
  • 推荐几个好用的工具
  • 进入正题
    • 1. 认识自定义业务节点模板:
    • 2. 优先进行注册和使用:
      • 2.1 注册自定义业务节点:
      • 2.2 如何使用自定义业务节点:
    • 3. 自定义业务节点样式:
    • 4. 自定义业务节点形状:
    • 5. 自定义业务节点外观:
    • 6. 重启项目预览效果:
  • 总结

推荐几个好用的工具

进入正题

LogicFlow 是一款流程图编辑框架,提供了一系列流程图交互、编辑所必需的功能和灵活的节点自定义、插件等拓展机制。LogicFlow支持前端研发自定义开发各种逻辑编排场景,如流程图、ER图、BPMN流程等。在工作审批配置、机器人逻辑编排、无代码平台流程配置都有较好的应用。

这一节将讲解快速上手 LogicFlow 流程图编辑框架的自定义业务节点内容,代码要在上一节的基础上进行开发,使用1024code在线编写代码的小伙伴可以直接fork上一节的代码开始,这一节的大致内容包括了,准备自定义业务节点的模板、注册和使用、自定义样式、自定义形状、自定义外观几个方面,做好准备后我们就开始了。

1. 认识自定义业务节点模板:

LF框架自定义业务节点使用到了面向对象中继承的概念,通过继承LF提供的 XxxNodeXxxNodeModel 类后对相关的函数进行重写,并在默认导出时提供 typeview 和 model`;

下面这段代码继承了Rect相关的 RectNodeRectNodeModel,如果要继承其他的内置对象还请查看官方文档或源码:

// 源码位置:./src/CustomNode.ts
import { RectNode, RectNodeModel } from "@logicflow/core";
class CustomNodeView extends RectNode {
}
class CustomNodeModel extends RectNodeModel {
}
export default {
    type: "CustomNode",
    view: CustomNodeView,
    model: CustomNodeModel,
}

2. 优先进行注册和使用:

自定义业务模板准备好以后就可以先进行注册和使用了,第一个是因为在继承内置类后虽然没有进行任何的函数重写但是不耽误渲染结果;第二个是因为一开始并不熟悉,所以要及时注册和使用起来看到效果,也是方便后续的自定义。

2.1 注册自定义业务节点:

注册过程主要分两个步骤:

  • 第一要将上面编写的 CustomNode.ts 导入到 App.vue;
  • 第二要将 CustomNode 对象通过lf实例中的 register() 函数在 render() 前注册;
// 导入自定义节点
import CustomNode from "./CustomNode";
const graphData = {}
...
onMounted(() => {
  // 在执行render前进行注册
  lf.value.register(CustomNode);
  lf.value.render(graphData);
})

2.2 如何使用自定义业务节点:

在成功注册后即可通过 render 函数来渲染业务流程中的一切元素的数据,自定义的业务节点和内置的默认节点使用方式相同,都是通过 type 选项来标识;

// 定义graphData
// 数据中的type为自定义节点导出的type属性的值
// 将节点在坐标为(100,100)的位置显示
const graphData = {
  nodes: [
    {
      id: 'fba7fc7b-83a8-4edd-b4be-21f694a5d490',
      type: 'CustomNode',
      x: 100,
      y: 100
    }
  ]
}

3. 自定义业务节点样式:

自定义业务节点样式(绿色描边),需要重写 RectNodeModel 类中的 getNodeStyle() 函数,通过关键词 super 获取到父类中的节点样式,并改变 stroke 的值为绿色,最后将修改完成的 style 返回;

class CustomNodeModel extends RectNodeModel {
  getNodeStyle() {
  	const style = super.getNodeStyle();
  	style.stroke = 'green';
  	return style;
	}
}

4. 自定义业务节点形状:

自定义业务节点形状(圆角矩形)和自定义业务节点样式一样的简单,重写RectNodeModel类中的initNodeData(data: any)函数就可以了;

class CustomNodeModel extends RectNodeModel {
  initNodeData(data: any): void {
    super.initNodeData(data);
    this.width = 120;
    this.height = 80;
    this.radius = 10;
  }
}

5. 自定义业务节点外观:

前面的自定义业务节点样式和形状都是在原有内置对象的基础上进行属性的调整,为了实习更高的自定义的外观,需要用到类似 Vue 中的 h 函数(渲染函数),通过重写 RectNode 中的 Shape() 并借助渲染函数实现外观的自定义;

  • 第一步:重写 getShape 函数,获取 props 中存储的当前节点的信息,如位置、尺寸和样式等;
  • 第二步:节点的外观要基于 SVG 实现,下面的案例要在业务组件左上角显示一个ICON,ICON可以从 iconfont 找一个自己喜欢的;
class CustomNodeView extends RectNode {
  getShape() {
      // 获取XxxNodeModel中定义的形状属性
      const { model } = this.props;
      const { x, y, width, height, radius } = model;
      // 获取XxxNodeModel中定义的样式属性
      const style = model.getNodeStyle();
      return h('g', {}, [
          h('rect', {
              ...style,
              x: x - width / 2,
              y: y - height / 2,
              width,
              height,
              rx: radius,
              ry: radius,
          })
          h('svg', {
              x: x - width / 2 + 5,
              y: y - height / 2 + 5,
              width: 25,
              height: 25,
              viewBox: "0 0 1028 1024",
          }, [
              h('path', {
                  fill: style.stroke,
                  d: "<icon-svg-data>",
              })
          ])
      ]);
  }
}

6. 重启项目预览效果:

至此自定义业务节点基本完成,这种样式也是大多数流程管理系统中常见的一种风格,接着补充一下 graphData 数据,来看一下最终的效果~

const graphData = {
  nodes: [
    {
      id: 'fba7fc7b-83a8-4edd-b4be-21f694a5d490',
      type: 'CustomNode',
      x: 100,
      y: 100
    },
    {
      id: '681035e6-11e3-43d7-9392-1deed852c01a',
      type: 'CustomNode',
      x: 300,
      y: 100
    }
  ],
  edges: [
    {
      sourceNodeId: 'fba7fc7b-83a8-4edd-b4be-21f694a5d490',
      targetNodeId: '681035e6-11e3-43d7-9392-1deed852c01a',
      type: 'polyline'
    }
  ]
}

总结

这一节的内容就到此结束了,自定义业务节点的样式、形状和外观都搞定了吗?尤其是外观的自定义需要渲染 SVG 标签,所以掌握一些 SVG 相关的数据或掌握使用工具的生成 SVG 数据还是很有必要的,感觉把这一节的代码熟悉熟悉,接着要对 LF中的 Edge 进行自定义了。

以上就是vue开发之LogicFlow自定义业务节点的详细内容,更多关于LogicFlow自定义业务节点的资料请关注我们其它相关文章!

(0)

相关推荐

  • vue vite之LogicFlow安装核心依赖及项目初始化详解

    目录 推荐几个好用的工具 进入正题 1. 初始化项目: 2. 安装LogicFlow核心依赖: 3. 初始化目录及容器: 4. 导入LF核心模块和默认样式文件: 5. 声明LF和容器对象并在挂在时初始化: 6. 运行项目 推荐几个好用的工具 var-conv 适用于VSCode IDE的代码变量名称快速转换工具 generator-vite-plugin 快速生成Vite插件模板项目 generator-babel-plugin 快速生成Babel插件模板项目 进入正题 LogicFlow 是一

  • vue开发之LogicFlow自定义业务节点

    目录 推荐几个好用的工具 进入正题 1. 认识自定义业务节点模板: 2. 优先进行注册和使用: 2.1 注册自定义业务节点: 2.2 如何使用自定义业务节点: 3. 自定义业务节点样式: 4. 自定义业务节点形状: 5. 自定义业务节点外观: 6. 重启项目预览效果: 总结 推荐几个好用的工具 var-conv 适用于VSCode IDE的代码变量名称快速转换工具 generator-vite-plugin 快速生成Vite插件模板项目 generator-babel-plugin 快速生成Ba

  • SpringBoot+Vue开发之Login校验规则、实现登录和重置事件

    一.Login校验规则 1.校验规则写法可参考Element-ui官网文档 https://element.eleme.cn/#/zh-CN/component/form 2.Login.vue页面  <template> <div class="login_container"> <!-- 登录块 --> <div class="login_box"> <!-- 头像 --> <div class=

  • IOS 开发之PickerView自定义视图的实例详解

    IOS 开发之PickerView自定义视图的实例详解 例如选择国家,左边是名称右边是国家,不应该使用两列,而是自定义PickerView的一列,可以通过xib来实现. 注意,虽然PickerView也是一列,但是数据源方法是@required,所以必须实现. 因此,核心思想就是一列,自定义PickerView的行视图. 使用viewForRow方法可以设定行视图. 这样的视图可以通过xib和它的控制器进行封装: Xib的控制器继承自UIView类即可. 控制器维护一个用于设置数据的模型对象fl

  • Vue开发之watch监听数组、对象、变量操作分析

    本文实例讲述了Vue开发之watch监听数组.对象.变量操作.分享给大家供大家参考,具体如下: 1.普通的watch data() { return { frontPoints: 0 } }, watch: { frontPoints(newValue, oldValue) { console.log(newValue) } } 2.数组的watch:深拷贝 data() { return { winChips: new Array(11).fill(0) } }, watch: { winCh

  • vue开发之moment的介绍与使用

    前言 在日常开发中,我们常常会遇到以下几种场景: 需要对日期进行非标准格式展示,如 :2021年5月11日星期二下午6点42分 需要对日期进行处理,如:要取前24小时的时间 等 在这时候用js原生的new Date()处理就有些麻烦了,因此我们找到了moment这个类库 一.moment是什么? moment 是一个 JavaScript 日期处理类库. 安装 moment 如果之前安装过就不用再安装了. npm install moment -- save 注:以下所有时间相对于现在时间:20

  • Flutter开发之Widget自定义总结

    前言 在Flutter实际开发中,大家可能会遇到flutter框架中提供的widget达不到我们想要的效果,这时就需要我们去自定义widget,从Flutter构建.布局.绘制三部曲中我们了解到,实际的测量.布局.绘制操作都在RenderObject中,我们是可以进行继承相关的RenderObject来实现自定义的.但是其实flutter框架在设计之初就给我们预留出了自定义的入口,方便我们进行自定义. CustomPaint自定义绘制 例:圆形进度条 思路:使用CustomPaint绘制需要的效

  • Vue组件开发之LeanCloud带图形校验码的短信发送功能

    有15万开发者使用LeanCloud服务,其中不乏知乎.懂球帝.爱范儿.拉卡拉等知名应用,LeanCloud提供了数据存储.即时消息--等一站式服务,并从常用的用户管理需求出发,提供了邮箱验证.短信验证--等用户账户相关的服务. 为防止攻击者恶意发送海量短信造成用户账户损失并影响正常业务,LeanCloud推出了免费图形校验码服务,并且可以在应用设置中设置"强制短信验证服务使用图形校验码". Vue是目前使用较广泛的三大前端框架之一,其数据驱动及组件化的特性使得前端开发更为快捷便利.

  • JavaWeb开发之JSTL标签库的使用、 自定义EL函数、自定义标签(带属性的、带标签体的)

    JSTL  JSTL简介: JSTL的全称:JSP Standard Tag Library,JSP标准标签库 JSTL的作用: 提供给Java Web开发人员一个标准通用的标签函数库 和EL来取代传统直接在页面上嵌入Java程序(Scripting)的做法,以提高程序可读性.维护性和方便性 JSTL的版本: JSTL的主要版本是1.0.1.1和1.2(区别不大) 1.0版本EL表达式还没有纳入官方规范 1.1和1.2版本EL表达式已经纳入了官方规范 JSTL1.1 下载相应的jar包 JSTL

  • Vue Element前端应用开发之Vuex中的API Store View的使用

    概述 在我们开发Vue应用的时候,很多时候需要记录一些变量的内容,这些可以用来做界面状态的承载,也可以作为页面间交换数据的处理,处理这些内容可以归为Vuex的状态控制.例如我们往往前端需要访问后端数据,一般是通过封装的Web API调用获取数据,而使用Store模式来处理相关的数据或者状态的变化,而视图View主要就是界面的展示处理.本篇随笔主要介绍如何整合这三者之间的关系,实现数据的获取.处理.展示等逻辑操作. Vuex 是一个专为 Vue.js 应用程序开发的状态管理模式.它采用集中式存储管

  • java应用开发之Mybatis通过Mapper代理自定义接口的实现

    如何实现?主要分为以下两步骤 1.通过 Mapper 代理实现⾃定义接口 2.编写与方法相对应的 Mapper.xml 1.自定义接口AccountRepository package repository; import entity.Account; import java.util.List; public interface AccountRepository { public int save(Account account); public int update(Account ac

随机推荐