基于jeecgboot-vue3的Flowable流程-集成仿钉钉流程(五)仿钉钉流程的json数据保存与显示

因为这个项目license问题无法开源,更多技术支持与服务请加入我的知识星球。

1、需要做一个界面保存与显示仿钉钉的流程,先建一个表,用online建

2、通过上面生成代码,放入到相应的前后端工程里

3、修改前端仿钉钉流程的设计功能,在原来list页面上增加一个对话框,如下:

<el-dialog :title="designerData.name" class="ddDialog" v-model="designerOpen" append-to-body fullscreen><ding-designerref="ddDesigner"v-loading="designerLoading":process = "flowJsonData"@save="onSaveDesigner"/></el-dialog>

4、增加一个上面的仿钉钉流程组件

<template><div class="formDesign"><FlowDesign :process="process" :fields="fields" :readOnly="readOnly"><el-switchinline-promptsize="large"active-text="正常模式"inactive-text="暗黑模式"@change="handleToggleDark"v-model="isDark"/><el-switchv-model="readOnly"size="large"active-text="只读模式"inactive-text="编辑模式"inline-prompt:active-value="true":inactive-value="false"/><el-button-group><el-button @click="viewJson" size="small" type="primary" round icon="View"> 查看Json</el-button></el-button-group><el-button-group><el-button @click="viewXmlBpmn" size="small" type="primary" round icon="View"> 查看XML </el-button></el-button-group><el-button-group><el-button @click="converterBpmn" size="small" type="primary" round icon="View"> 预览bpmn </el-button></el-button-group><el-button-group><el-button @click="save" size="small" type="primary" round icon="View"> 保存 </el-button></el-button-group></FlowDesign><el-dialog title="预览" width="60%" v-model="previewModelVisible" append-to-body destroy-on-close><highlightjs :language="previewType" :code="previewResult" style="height: 80vh" /></el-dialog><!-- Bpmn流程图 --><el-dialog :title="processView.title" v-model="processView.open" width="70%" append-to-body><process-viewer :key="`designer-${processView.title}`" :xml="processView.xmlData" :style="{height: '500px'}" /></el-dialog></div></template><script setup lang="ts" name="DingDesigner">
import { ref, reactive, toRaw, onMounted } from 'vue';
import '@/views/lowflow/styles/index.scss'// If you want to use ElMessage, import it.
import 'element-plus/dist/index.css';
import 'element-plus/theme-chalk/display.css';import FlowDesign from '@/views/lowflow/flowDesign/index.vue'
import type { Field } from '@/views/lowflow/components/Render/type'
import type { EndNode, FlowNode, StartNode } from '@/views/lowflow/flowDesign/nodes/type'
import { viewXml, ddToBpmnXml } from '@/views/lowflow/api/modules/model'
import ProcessViewer from '@/components/ProcessViewer/index.vue';
import { useMessage } from '/@/hooks/web/useMessage';const { createMessage, createConfirm } = useMessage();const props = defineProps({process: {type: Object,required: true},
});const emit = defineEmits(['save'
])const previewModelVisible = ref(false)
const previewResult = ref('')
const previewType = ref('xml')const processView =  reactive<any>({title: '',open: false,xmlData:'',
})// 流程节点
/*const process = ref<FlowNode>({id: 'root',pid: undefined,type: 'start',name: '流程开始',executionListeners: [],formProperties: [],child: {id: 'end',pid: 'root',type: 'end',name: '流程结束',executionListeners: [],child: undefined} as EndNode
} as StartNode)*/// 表单字段
const fields = ref<Field[]>([{id: 'field_da2w55',type: 'formItem',label: '请假人',name: 'UserSelector',value: null,readonly: false,required: true,hidden: false,props: {multiple: false,disabled: false,placeholder: '请选择用户',style: {width: '100%'}}},{id: 'field_fa2w40',type: 'formItem',label: '请假天数',name: 'ElInputNumber',value: null,readonly: false,required: true,hidden: false,props: {disabled: false,placeholder: '请假天数',style: {width: '100%'},min: 0,max: 100,step: 1,precision: 0}},{id: 'field_d42t45',type: 'formItem',label: '请假事由',name: 'ElSelect',value: null,readonly: false,required: true,hidden: false,props: {disabled: false,multiple: false,placeholder: '请选择请假事由',options: [{label: '事假',value: '事假'},{label: '病假',value: '病假'},{label: '婚假',value: '婚假'},{label: '产假',value: '产假'},{label: '丧假',value: '丧假'},{label: '其他',value: '其他'}],style: {width: '100%'}}},{id: 'field_522g58',type: 'formItem',label: '请假原因',name: 'ElInput',value: null,readonly: false,required: true,hidden: false,props: {type: 'textarea',placeholder: '请输入请假原因',autosize: {minRows: 3,maxRows: 3},disabled: false,style: {width: '100%'}}}
])
// 是否只读
const readOnly = ref(false)
// 是否暗黑模式
const isDark = ref(false)const viewJson = () => {const processJson = JSON.stringify(props.process,undefined, 2); previewResult.value = processJson; previewType.value = 'json'previewModelVisible.value = true
}
const viewXmlBpmn = () => {const processModel = {code: 'test',name: '测试',icon: {name: 'el:HomeFilled',color: '#409EFF'},process: props.process,enable: true,version: 1,sort: 0,groupId: '',remark: ''}const xmlData = viewXml(processModel)xmlData.then((result) => {previewResult.value = resultpreviewType.value = 'xml'previewModelVisible.value = true})}
const converterBpmn = () => {const processModel = {code: 'test',name: '测试',icon: {name: 'el:HomeFilled',color: '#409EFF'},process: props.process,enable: true,version: 1,sort: 0,groupId: '',remark: ''}ddToBpmnXml(processModel).then(res => {console.log("ddToBpmnXml res",res)processView.xmlData = res.resultprocessView.title = "Bpmn流程图预览"processView.open = true})  
}const save = () => {const flowData = props.processemit('save', flowData);
}const handleToggleDark = () => {if (isDark.value) {document.documentElement.classList.add('dark')} else {document.documentElement.classList.remove('dark')}
}onMounted(() => {});</script><style scoped lang="scss">.formDesign {z-index: 999;top: 120px;height: 100%;}
</style>

5、效果图如下:

点设计如下:

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

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

相关文章

spark基于Spark的对招聘信息的分析与设计-计算机毕业设计源码50716

目 录 摘要 1 绪论 1.1 研究背景 1.2 研究意义 1.3论文结构与章节安排 2 系统分析 2.1 可行性分析 2.2.1 数据新增流程 2.2.2 数据删除流程 2.3 系统功能分析 2.3.1 功能性分析 2.3.2 非功能性分析 2.4 系统用例分析 2.5本章小结 3 系统总体设计 3.1 系统架构设…

Vue2/Vue3实现全局/局部添加防篡改水印的效果。删除元素无效!更改元素属性无效!支持图片、元素、视频等等。

水印目的 版权保护:水印可以在图片、文档或视频中嵌入作者、品牌或版权所有者的信息,以防止未经授权的复制、传播或使用。当其他人使用带有水印的内容时,可以追溯到原始作者或版权所有者,从而加强版权保护。 身份识别:水印可以用作作者或品牌的标识符,使观众能够轻松识…

springboot对ZonedDateTime返回结果json是string-源码分析

springboot对ZonedDateTime返回结果json是string-源码分析 application/json格式默认使用ObjectMapper实例进行序列化ObjectMapper自动注入分析springboot关于jackson配置 java.time.ZonedDateTime application/json格式默认使用ObjectMapper实例进行序列化 controller返回后&…

人形机器人的理想与现实

李开复曾提到过一个AI界流传的“骗子又来了曲线”。 人会不断给机器进行“是否具有人类智能”的鉴定&#xff0c;而这个过程&#xff0c;总是从被人工智能在某些领域的惊艳表现震撼&#xff0c;到逐渐认识到当时的人工智能还有各种局限&#xff0c;以至于产生巨大心理落差。 近…

html js 3d z轴移动 实现星空

用chatgpt还有kimi 让实现动画效果的星空,都太垃圾了 不是y轴移动,就是x轴移动, 我要z轴移动,他们就是搞不出来, ai写代码还有很长的路。 <!DOCTYPE html> <meta charset="utf-8" /> <head> <title>ai相关博客</title> </h…

【操作系统】手把手带你搭建DNS服务器!

DNS服务器 DNS服务器指域名系统或者域名服务。域名系统为Internet上的主机分配域名地址和IP地址&#xff0c;用户使用域名地址&#xff0c;该系统就会自动把域名地址转为IP地址。域名服务是运行域名系统的Internet工具。执行域名服务的服务器称之为DNS服务器&#xff0c;通过DN…

51单片机嵌入式开发:8、 STC89C52RC 操作LCD1602原理

STC89C52RC 操作LCD1602原理 1 LCD1602概述1.1 LCD1602介绍1.2 LCD1602引脚说明1.3 LCD1602指令介绍 2 LCD1602外围电路2.1 LCD1602接线方法2.2 LCD1602电路原理 3 LCD1602软件操作3.1 LCD1602显示3.2 LCD1602 protues仿真 4 总结 1 LCD1602概述 1.1 LCD1602介绍 LCD1602是一种…

maven——(重要)手动创建,构建项目

创建项目 手动按照maven层级建好文件夹&#xff0c;并写上java&#xff0c;测试代码和pom文件 构建项目 在dos窗口中执行如下命令 compile编译 当前maven仓库中什么都没有。 在pom所在层级下&#xff0c;执行&#xff1a; mvn compile 就开始显示下面这些&#xff0c;…

数据库-ubuntu环境下安装配置mysql

文章目录 什么是数据库&#xff1f;一、ubuntu环境下安装mysql二、配置mysql配置文件1.先登上root账号2.配置文件的修改show engines \G; mysql和mysqld数据库的基础操作登录mysql创建数据库显示当前数据库使用数据库创建表插入students表数据打印students表数据select * from …

前端使用Vue和Element实现可拖动弹框效果,且不影响底层元素操作,Cesium作为底图(可拖拽的视频实时播放弹框,底层元素可以正常操作)

简述&#xff1a;在前端开发中&#xff0c;弹框和实时视频播放是常见的需求。这里来简单记录一下&#xff0c;如何使用Vue.js和Element UI实现一个可拖动的弹框&#xff0c;并在其中播放实时视频。同时&#xff0c;确保在拖拽弹框时&#xff0c;底层元素仍然可以操作。这里来记…

vue 画二维码及长按保存

需求 想要做如下图的二维码带文字&#xff0c;且能够长按保存 前期准备 一个canvas安装qrcode&#xff08;命令&#xff1a;npm i qrcode&#xff09; 画二维码及文字 初始化画布 <template><div><canvas ref"canvas" width"300" he…

JAVASE进阶day07(泛型,集合,Set,TreeSet,枚举,数据结构)

泛型 1.泛型的基本使用 限制集合存储的数据类型 package com.lu.day07.generics;/*** 定义了一个泛型类* E 泛型通配字母(不固定代替真实数据类型A-Z都可以)* 常见的泛型通配字母:* E:element 元素* T:type 类型* R:return 返回值类型* K:key 键* …

14.爬虫---Selenium 经典动态渲染工具的使用

14.Selenium 经典动态渲染工具的使用 1.查看chrome浏览器版本2.ChromeDriver 安装3.Selenium 安装4.验证安装5.基本用法5.1启动浏览器5.2导航到页面5.3查找元素5.3.1单个元素 find_element5.3.2多个元素 find_elements 5.4 执行操作5.5 动作链ActionChains5.6 执行 JavaScript …

Python基础语法:运算符详解(算术运算符、比较运算符、逻辑运算符、赋值运算符)②

文章目录 Python中的运算符详解一、算术运算符二、比较运算符三、逻辑运算符四、赋值运算符五、综合示例结论 Python中的运算符详解 在Python编程中&#xff0c;运算符用于执行各种操作&#xff0c;例如算术计算、比较、逻辑判断和赋值。了解并掌握这些运算符的使用方法是编写…

N-(4-Azido-2-nitrophenyl)-N‘‘-biotinylnorspemidine

​一、基本信息 常用名&#xff1a;N-(4-Azido-2-nitrophenyl)-N-biotinylnorspemidine 英文名&#xff1a;N-(4-Azido-2-nitrophenyl)-N-biotinylnorspemidine CAS号&#xff1a;786609-83-4 分子式&#xff1a;C22H33N9O4S 分子量&#xff1a;519.62 二、结构特点 该化…

SQL职场必备:掌握数据库技能提升职场竞争力

&#x1f482; 个人网站:【 摸鱼游戏】【网址导航】【神级代码资源网站】&#x1f91f; 一站式轻松构建小程序、Web网站、移动应用&#xff1a;&#x1f449;注册地址&#x1f91f; 基于Web端打造的&#xff1a;&#x1f449;轻量化工具创作平台&#x1f485; 想寻找共同学习交…

vue3 + tsx 表格 Action 单独封装组件用法

前言 先上图看右侧列 action 的 UI 效果&#xff1a; 正常来说&#xff0c;如果一个表格的附带 action 操作&#xff0c;我们一般会放在最右侧的列里面实现&#xff0c;这个时候有些UI 框架支持在 SFC 模板里面定义额外的 solt&#xff0c;当然如果不支持&#xff0c;更通用的…

Linux进行vi编译代码出现“E45: ‘readonly‘ option is set (add ! to override)”(完美解决)。

用vi修改文件&#xff0c;保存文件时&#xff0c;提示没有修改该文件的权限“E45: ‘readonly’ option is set (add ! to override)”的解决方法。 E45: ‘readonly’ option is set (add ! to override) 如果您遇到了“当前用户没有权限对文件作修改”的错误 1. 检查文件…

2024.7.11最新版IDM破解,操作简单

前言 IDM的强劲对手&#xff0c;100%免费&#xff0c;如果破解IDM失败&#xff0c;推荐使用FDM&#xff0c;下载地址&#xff1a;Free Download Manager 破解步骤 打开PowerShell&#xff0c;非CMD 在左下角开始菜单右键点击后选择PowerShell&#xff0c;注意不是打开CMD。…

园林类专刊《花卉》简介及投稿邮箱

园林类专刊《花卉》简介及投稿邮箱 《花卉》杂志是经国家新闻出版总署批准&#xff0c;广东省农业科学院主管&#xff0c;广东省农业科学院环境园艺研究所主办&#xff0c;面向国内外公开发行林业系统专业期刊&#xff0c;是全国从事林业、园林、生态、环保、旅游、自然资源、…