diff --git a/src/components/bpmnProcessDesigner/package/penal/PropertiesPanel.vue b/src/components/bpmnProcessDesigner/package/penal/PropertiesPanel.vue index ff08dd33d..f375f90ef 100644 --- a/src/components/bpmnProcessDesigner/package/penal/PropertiesPanel.vue +++ b/src/components/bpmnProcessDesigner/package/penal/PropertiesPanel.vue @@ -68,6 +68,11 @@ :business-object="elementBusinessObject" /> + + + 时间事件 + + @@ -83,6 +88,8 @@ import ElementProperties from './properties/ElementProperties.vue' // import ElementForm from './form/ElementForm.vue' import UserTaskListeners from './listeners/UserTaskListeners.vue' import { getTaskCollapseItemName, isTaskCollapseItemShow } from './task/data' +import TimeEventConfig from "./time-event-config/TimeEventConfig.vue" +import { ref, computed, watch, onMounted } from 'vue' defineOptions({ name: 'MyPropertiesPanel' }) @@ -121,6 +128,8 @@ const formVisible = ref(false) // 表单配置 const bpmnElement = ref() const isReady = ref(false) +const type = ref('time') +const condition = ref('') provide('prefix', props.prefix) provide('width', props.width) @@ -255,4 +264,54 @@ watch( activeTab.value = 'base' } ) + +function updateNode() { + const moddle = window.bpmnInstances?.moddle + const modeling = window.bpmnInstances?.modeling + const elementRegistry = window.bpmnInstances?.elementRegistry + if (!moddle || !modeling || !elementRegistry) return + + const element = elementRegistry.get(props.businessObject.id) + if (!element) return + + let timerDef = moddle.create('bpmn:TimerEventDefinition', {}) + if (type.value === 'time') { + timerDef.timeDate = moddle.create('bpmn:FormalExpression', { body: condition.value }) + } else if (type.value === 'duration') { + timerDef.timeDuration = moddle.create('bpmn:FormalExpression', { body: condition.value }) + } else if (type.value === 'cycle') { + timerDef.timeCycle = moddle.create('bpmn:FormalExpression', { body: condition.value }) + } + + modeling.updateModdleProperties( + element, + element.businessObject, + { + eventDefinitions: [timerDef] + } + ) + + console.log('当前eventDefinitions:', element.businessObject.eventDefinitions) +} + +// 初始化和监听 +function syncFromBusinessObject() { + if (props.businessObject) { + const timerDef = (props.businessObject.eventDefinitions || [])[0] + if (timerDef) { + if (timerDef.timeDate) { + type.value = 'time' + condition.value = timerDef.timeDate.body + } else if (timerDef.timeDuration) { + type.value = 'duration' + condition.value = timerDef.timeDuration.body + } else if (timerDef.timeCycle) { + type.value = 'cycle' + condition.value = timerDef.timeCycle.body + } + } + } +} +onMounted(syncFromBusinessObject) +watch(() => props.businessObject, syncFromBusinessObject, { deep: true }) diff --git a/src/components/bpmnProcessDesigner/package/penal/time-event-config/CycleConfig.vue b/src/components/bpmnProcessDesigner/package/penal/time-event-config/CycleConfig.vue new file mode 100644 index 000000000..52a57ef14 --- /dev/null +++ b/src/components/bpmnProcessDesigner/package/penal/time-event-config/CycleConfig.vue @@ -0,0 +1,118 @@ + + + + + + + + + + + + + + + + + + + + 每{{f.label}} + 从 到 之间每{{f.label}} + 从第 开始每 {{f.label}} + 指定 + + + + + {{pad(n-1)}} + + + + + + + + + + 循环次数: + 日期时间: + 当前时长: + + 秒:{{s}}自定义 + 分:{{m}}自定义 + 小时:{{h}}自定义 + 天:{{d}}自定义 + 月:{{mo}}自定义 + 年:{{y}}自定义 + + + + + \ No newline at end of file diff --git a/src/components/bpmnProcessDesigner/package/penal/time-event-config/DurationConfig.vue b/src/components/bpmnProcessDesigner/package/penal/time-event-config/DurationConfig.vue new file mode 100644 index 000000000..75688b34e --- /dev/null +++ b/src/components/bpmnProcessDesigner/package/penal/time-event-config/DurationConfig.vue @@ -0,0 +1,66 @@ + + + 当前选择: + + {{ unit.label }}: + + {{ val }} + + + + + + + diff --git a/src/components/bpmnProcessDesigner/package/penal/time-event-config/TimeEventConfig.vue b/src/components/bpmnProcessDesigner/package/penal/time-event-config/TimeEventConfig.vue new file mode 100644 index 000000000..8321ed404 --- /dev/null +++ b/src/components/bpmnProcessDesigner/package/penal/time-event-config/TimeEventConfig.vue @@ -0,0 +1,282 @@ + + + + 类型: + + 时间 + 持续 + 循环 + + + + + 条件: + + + + + + + + + + + + + + + + + + + + + + + + + 取消 + 确定 + + + + + + + 取消 + 确定 + + + + + + + 取消 + 确定 + + + + + + + 关闭 + + + + + + + +