更多ruoyi-nbcio功能请看演示系统
gitee源代码地址
前后端代码: https://gitee.com/nbacheng/ruoyi-nbcio
演示地址:RuoYi-Nbcio后台管理系统http://218.75.87.38:9666/
更多nbcio-boot功能请看演示系统
gitee源代码地址
后端代码: https://gitee.com/nbacheng/nbcio-boot
前端代码:https://gitee.com/nbacheng/nbcio-vue.git
在线演示(包括H5) : http://218.75.87.38:9888
接上一节
4、模板的修改
通过上面的vue3改造,js部分没有什么问题了,可以打印相应的数据,但模板还是出现错误
v-if= "businessObject.eventDefinitions[0].$type.indexOf('TimerEventDefinition') !== -1 要修改如下: -if= "businessObject.eventDefinitions && businessObject.eventDefinitions[0].$type.indexOf('TimerEventDefinition') !== -1
虽然不报错,但界面出现问题
如下问题
说明element-plus不一样了,需要修改这部分代码
原来的插槽修改成template
<template #content> 事件类型配置说明<br> 1.指定时间(timeDate):触发事件的时间,如:2022-12-16T11:12:16 <br> 2.持续时间(timeDuration):指定时器之前需等待多长时间,使用ISO 8601规定的格式<br> (由BPMN 2.0规定),如PT5M(等待5分钟),也支持表达式${duration},<br> 这样你就可以通过流程变量来影响定时器定义<br> 3.周期执行(timeCycle):指定重复执行的间隔,可以用来定期启动流程实例,<br> 或为超时时间发送多个提醒。timeCycle元素可以使用两种格式。<br> 第一种是 ISO 8601 标准的格式。示例值(R3/PT5M)(重复3次,<br> 每次间隔5分钟),或也可以用cron表达式指定timeCycle,如从整点开始,<br> 每10分钟执行一次(0 0/10 * * * ?)<br> </template>
整个模板和js部分修改如下:
<template> <div class="panel-tab__content"> <!--目前只处理定时边界事件 --> <el-form size="mini" label-width="90px" @submit.native.prevent > <el-form-item label="事件类型"> <el-select v-model="timeDefinitionType" @change="changeTimerType" v-if= "businessObject.eventDefinitions && businessObject.eventDefinitions[0].$type.indexOf('TimerEventDefinition') !== -1" > <!--bpmn:TimerEventDefinition--> <el-option label="指定时间" value="timeDate" /> <el-option label="持续时间" value="timeDuration" /> <el-option label="周期执行" value="timeCycle" /> </el-select> </el-form-item> <template v-if="timeDefinitionType != ''"> <el-form-item label="时间设置" required> <el-tooltip> <el-input size="mini" type="string" v-model="FormalExpression" @change="updateTimeValue"></el-input> <template #content> 事件类型配置说明<br> 1.指定时间(timeDate):触发事件的时间,如:2022-12-16T11:12:16 <br> 2.持续时间(timeDuration):指定时器之前需等待多长时间,使用ISO 8601规定的格式<br> (由BPMN 2.0规定),如PT5M(等待5分钟),也支持表达式${duration},<br> 这样你就可以通过流程变量来影响定时器定义<br> 3.周期执行(timeCycle):指定重复执行的间隔,可以用来定期启动流程实例,<br> 或为超时时间发送多个提醒。timeCycle元素可以使用两种格式。<br> 第一种是 ISO 8601 标准的格式。示例值(R3/PT5M)(重复3次,<br> 每次间隔5分钟),或也可以用cron表达式指定timeCycle,如从整点开始,<br> 每10分钟执行一次(0 0/10 * * * ?)<br> </template> </el-tooltip> </el-form-item> </template> </el-form> </div> </template> <script lang="ts" setup> defineOptions({ name: 'BoundaryEvent' }) const props = defineProps({ businessObject: Object, type: String }) //const prefix = inject('prefix') const bpmnElement = ref(null) const bpmnInstances = () => (window as any)?.bpmnInstances const timeDefinitionType = ref('') const FormalExpression = ref('') const getElementLoop = (businessObject) => { //获取定时边界事件原有值 //console.log("getElementLoop businessObject=",businessObject) //console.log("bpmnInstances().bpmnElement.businessObject=",bpmnInstances().bpmnElement.businessObject); if(businessObject.hasOwnProperty('eventDefinitions') && businessObject.eventDefinitions.length>0){ if(businessObject.eventDefinitions[0].$type == 'bpmn:TimerEventDefinition') { if(businessObject.eventDefinitions[0].hasOwnProperty('timeDuration')) { timeDefinitionType.value = "timeDuration" FormalExpression.value = businessObject.eventDefinitions[0].timeDuration.body } else if(businessObject.eventDefinitions[0].hasOwnProperty('timeDate')) { timeDefinitionType.value = "timeDate" FormalExpression.value = businessObject.eventDefinitions[0].timeDate.body } else if(businessObject.eventDefinitions[0].hasOwnProperty('timeCycle')) { timeDefinitionType.value = "timeCycle" FormalExpression.value = businessObject.eventDefinitions[0].timeCycle.body } } } } const changeTimerType = (type) => { timeDefinitionType.value = type } const updateTimeValue = (value) => { updateTime(timeDefinitionType,value); } //时间事件定义类型修改 const updateTime = (type,value) => { //获取节点的子节点 timerEventDefinition console.log("updatetime type=",type) let timerEventDef = bpmnInstances().bpmnElement.businessObject.eventDefinitions[0] const timeCycle = bpmnInstances().moddle.create("bpmn:FormalExpression", { body:value }); const timeDate = bpmnInstances().moddle.create("bpmn:FormalExpression", { body:value }); const timeDuration = bpmnInstances().moddle.create("bpmn:FormalExpression", { body:value }); if (type == 'timeCycle') { bpmnInstances().modeling.updateModdleProperties(bpmnElement,timerEventDef,{timeDate:null}) bpmnInstances().modeling.updateModdleProperties(bpmnElement,timerEventDef,{timeDuration:null}) bpmnInstances().modeling.updateModdleProperties(bpmnElement,timerEventDef,{timeCycle }) } else if (type == 'timeDate') { bpmnInstances().modeling.updateModdleProperties(bpmnElement,timerEventDef,{timeCycle:null}) bpmnInstances().modeling.updateModdleProperties(bpmnElement,timerEventDef,{timeDuration:null}) bpmnInstances().modeling.updateModdleProperties(bpmnElement,timerEventDef,{ timeDate }) } else if (type == 'timeDuration') { bpmnInstances().modeling.updateModdleProperties(bpmnElement,timerEventDef,{timeDate:null}) bpmnInstances().modeling.updateModdleProperties(bpmnElement,timerEventDef,{timeCycle:null}) bpmnInstances().modeling.updateModdleProperties(bpmnElement,timerEventDef,{ timeDuration }) } } watch( () => props.businessObject, (val) => { bpmnElement.value = bpmnInstances().bpmnElement getElementLoop(val) }, { immediate: true } ) onBeforeUnmount(() => { bpmnElement.value = null; }) </script>
5、效果图如下