From 00dcbe16842465b4aaf6dd6f7ec3045e9cabc9d6 Mon Sep 17 00:00:00 2001 From: ZengZhiqiang <1527656234@163.com> Date: Thu, 29 May 2025 17:30:35 +0800 Subject: [PATCH 1/2] =?UTF-8?q?=E5=A2=9E=E5=8A=A0BPMN=E6=B5=81=E7=A8=8B?= =?UTF-8?q?=E8=AE=BE=E8=AE=A1=E5=99=A8=E7=9A=84=E6=97=B6=E9=97=B4=E4=BA=8B?= =?UTF-8?q?=E4=BB=B6=E9=85=8D=E7=BD=AE=E9=9D=A2=E6=9D=BF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../package/penal/PropertiesPanel.vue | 59 ++++ .../penal/time-event-config/CycleConfig.vue | 118 ++++++++ .../time-event-config/DurationConfig.vue | 66 ++++ .../time-event-config/TimeEventConfig.vue | 282 ++++++++++++++++++ 4 files changed, 525 insertions(+) create mode 100644 src/components/bpmnProcessDesigner/package/penal/time-event-config/CycleConfig.vue create mode 100644 src/components/bpmnProcessDesigner/package/penal/time-event-config/DurationConfig.vue create mode 100644 src/components/bpmnProcessDesigner/package/penal/time-event-config/TimeEventConfig.vue 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 @@ + + + + 类型: + + 时间 + 持续 + 循环 + + + + + 条件: + + + + + + + + + + + + + + + + + + + + + + + + + 取消 + 确定 + + + + + + + 取消 + 确定 + + + + + + + 取消 + 确定 + + + + + + + 关闭 + + + + + + + + From c13f3b86a6d9f12d4a5c09f1df6d8426b66918f0 Mon Sep 17 00:00:00 2001 From: ZengZhiqiang <1527656234@163.com> Date: Thu, 29 May 2025 18:10:07 +0800 Subject: [PATCH 2/2] =?UTF-8?q?=E8=B0=83=E6=95=B4bpmn=E6=B5=81=E7=A8=8B?= =?UTF-8?q?=E8=AE=BE=E8=AE=A1=E5=99=A8=E7=BB=84=E4=BB=B6=E7=BF=BB=E8=AF=91?= =?UTF-8?q?=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../plugins/translate/customTranslate.js | 32 +++++++++---------- .../package/designer/plugins/translate/zh.js | 4 +-- 2 files changed, 17 insertions(+), 19 deletions(-) diff --git a/src/components/bpmnProcessDesigner/package/designer/plugins/translate/customTranslate.js b/src/components/bpmnProcessDesigner/package/designer/plugins/translate/customTranslate.js index c1b99e122..d1796d3f4 100644 --- a/src/components/bpmnProcessDesigner/package/designer/plugins/translate/customTranslate.js +++ b/src/components/bpmnProcessDesigner/package/designer/plugins/translate/customTranslate.js @@ -23,22 +23,20 @@ export default function customTranslate(translations) { return function (template, replacements) { - replacements = replacements || {} - // Translate - template = translations[template] || template + replacements = replacements || {}; + // 将模板和翻译字典的键统一转换为小写进行匹配 + const lowerTemplate = template.toLowerCase(); + const translation = Object.keys(translations).find(key => key.toLowerCase() === lowerTemplate); - // Replace + // 如果找到匹配的翻译,使用翻译后的模板 + if (translation) { + template = translations[translation]; + } + + // 替换模板中的占位符 return template.replace(/{([^}]+)}/g, function (_, key) { - let str = replacements[key] - if ( - translations[replacements[key]] !== null && - translations[replacements[key]] !== undefined - ) { - // eslint-disable-next-line no-mixed-spaces-and-tabs - str = translations[replacements[key]] - // eslint-disable-next-line no-mixed-spaces-and-tabs - } - return str || '{' + key + '}' - }) - } -} + // 如果替换值存在,返回替换值;否则返回原始占位符 + return replacements[key] !== undefined ? replacements[key] : `{${key}}`; + }); + }; +} \ No newline at end of file diff --git a/src/components/bpmnProcessDesigner/package/designer/plugins/translate/zh.js b/src/components/bpmnProcessDesigner/package/designer/plugins/translate/zh.js index cb920413b..d243ec456 100644 --- a/src/components/bpmnProcessDesigner/package/designer/plugins/translate/zh.js +++ b/src/components/bpmnProcessDesigner/package/designer/plugins/translate/zh.js @@ -45,8 +45,8 @@ export default { 'Service Task': '服务任务', 'Script Task': '脚本任务', 'Call Activity': '调用活动', - 'Sub Process (collapsed)': '子流程(折叠的)', - 'Sub Process (expanded)': '子流程(展开的)', + 'Sub-Process (collapsed)': '子流程(折叠的)', + 'Sub-Process (expanded)': '子流程(展开的)', 'Start Event': '开始事件', StartEvent: '开始事件', 'Intermediate Throw Event': '中间事件',