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': '中间事件', 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 @@ + + + + 类型: + + 时间 + 持续 + 循环 + + + + + 条件: + + + + + + + + + + + + + + + + + + + + + + + + + 取消 + 确定 + + + + + + + 取消 + 确定 + + + + + + + 取消 + 确定 + + + + + + + 关闭 + + + + + + + +