From a1d7e81859f554f3a53680cc35f0f49bf1f77098 Mon Sep 17 00:00:00 2001
From: wwf <1971391498@qq.com>
Date: 星期四, 14 五月 2026 14:37:02 +0800
Subject: [PATCH] 导入项目
---
src/components/bpmnProcessDesigner/package/penal/custom-config/components/BoundaryEventTimer.vue | 263 ++++++++++++++++++++++++++++++++++++++++++++++++++++
1 files changed, 263 insertions(+), 0 deletions(-)
diff --git a/src/components/bpmnProcessDesigner/package/penal/custom-config/components/BoundaryEventTimer.vue b/src/components/bpmnProcessDesigner/package/penal/custom-config/components/BoundaryEventTimer.vue
new file mode 100644
index 0000000..77948ce
--- /dev/null
+++ b/src/components/bpmnProcessDesigner/package/penal/custom-config/components/BoundaryEventTimer.vue
@@ -0,0 +1,263 @@
+<template>
+ <div>
+ <el-divider content-position="left">瀹℃壒浜鸿秴鏃舵湭澶勭悊鏃�</el-divider>
+ <el-form-item label="鍚敤寮�鍏�" prop="timeoutHandlerEnable">
+ <el-switch
+ v-model="timeoutHandlerEnable"
+ active-text="寮�鍚�"
+ inactive-text="鍏抽棴"
+ @change="timeoutHandlerChange"
+ />
+ </el-form-item>
+ <el-form-item label="鎵ц鍔ㄤ綔" prop="timeoutHandlerType" v-if="timeoutHandlerEnable">
+ <el-radio-group v-model="timeoutHandlerType.value" @change="onTimeoutHandlerTypeChanged">
+ <el-radio-button
+ v-for="item in TIMEOUT_HANDLER_TYPES"
+ :key="item.value"
+ :value="item.value"
+ :label="item.label"
+ />
+ </el-radio-group>
+ </el-form-item>
+ <el-form-item label="瓒呮椂鏃堕棿璁剧疆" v-if="timeoutHandlerEnable">
+ <span class="mr-2">褰撹秴杩�</span>
+ <el-form-item prop="timeDuration">
+ <el-input-number
+ class="mr-2"
+ :style="{ width: '100px' }"
+ v-model="timeDuration"
+ :min="1"
+ controls-position="right"
+ @change="
+ () => {
+ updateTimeModdle()
+ updateElementExtensions()
+ }
+ "
+ />
+ </el-form-item>
+ <el-select
+ v-model="timeUnit"
+ class="mr-2"
+ :style="{ width: '100px' }"
+ @change="onTimeUnitChange"
+ >
+ <el-option
+ v-for="item in TIME_UNIT_TYPES"
+ :key="item.value"
+ :label="item.label"
+ :value="item.value"
+ />
+ </el-select>
+ 鏈鐞�
+ </el-form-item>
+ <el-form-item
+ label="鏈�澶ф彁閱掓鏁�"
+ prop="maxRemindCount"
+ v-if="timeoutHandlerEnable && timeoutHandlerType.value === 1"
+ >
+ <el-input-number
+ v-model="maxRemindCount"
+ :min="1"
+ :max="10"
+ @change="
+ () => {
+ updateTimeModdle()
+ updateElementExtensions()
+ }
+ "
+ />
+ </el-form-item>
+ </div>
+</template>
+
+<script lang="ts" setup>
+import {
+ TimeUnitType,
+ TIME_UNIT_TYPES,
+ TIMEOUT_HANDLER_TYPES
+} from '@/components/SimpleProcessDesignerV2/src/consts'
+import { convertTimeUnit } from '@/components/SimpleProcessDesignerV2/src/utils'
+
+defineOptions({ name: 'ElementCustomConfig4BoundaryEventTimer' })
+const props = defineProps({
+ id: String,
+ type: String
+})
+const prefix = inject('prefix')
+
+const bpmnElement = ref()
+const bpmnInstances = () => (window as any)?.bpmnInstances
+
+const timeoutHandlerEnable = ref(false)
+const boundaryEventType = ref()
+const timeoutHandlerType = ref({
+ value: undefined
+})
+const timeModdle = ref()
+const timeDuration = ref(6)
+const timeUnit = ref(TimeUnitType.HOUR)
+const maxRemindCount = ref(1)
+
+const elExtensionElements = ref()
+const otherExtensions = ref()
+const configExtensions = ref([])
+const eventDefinition = ref()
+
+const resetElement = () => {
+ bpmnElement.value = bpmnInstances().bpmnElement
+ eventDefinition.value = bpmnElement.value.businessObject.eventDefinitions[0]
+
+ // 鑾峰彇鍏冪礌鎵╁睍灞炴�� 鎴栬�� 鍒涘缓鎵╁睍灞炴��
+ elExtensionElements.value =
+ bpmnElement.value.businessObject?.extensionElements ??
+ bpmnInstances().moddle.create('bpmn:ExtensionElements', { values: [] })
+
+ // 鏄惁寮�鍚嚜瀹氫箟鐢ㄦ埛浠诲姟瓒呮椂澶勭悊
+ boundaryEventType.value = elExtensionElements.value.values?.filter(
+ (ex) => ex.$type === `${prefix}:BoundaryEventType`
+ )?.[0]
+ if (boundaryEventType.value && boundaryEventType.value.value === 1) {
+ timeoutHandlerEnable.value = true
+ configExtensions.value.push(boundaryEventType.value)
+ }
+
+ // 鎵ц鍔ㄤ綔
+ timeoutHandlerType.value = elExtensionElements.value.values?.filter(
+ (ex) => ex.$type === `${prefix}:TimeoutHandlerType`
+ )?.[0]
+ if (timeoutHandlerType.value) {
+ configExtensions.value.push(timeoutHandlerType.value)
+ if (eventDefinition.value.timeCycle) {
+ const timeStr = eventDefinition.value.timeCycle.body
+ const maxRemindCountStr = timeStr.split('/')[0]
+ const timeDurationStr = timeStr.split('/')[1]
+ console.log(maxRemindCountStr)
+ maxRemindCount.value = parseInt(maxRemindCountStr.slice(1))
+ timeDuration.value = parseInt(timeDurationStr.slice(2, timeDurationStr.length - 1))
+ timeUnit.value = convertTimeUnit(timeDurationStr.slice(timeDurationStr.length - 1))
+ timeModdle.value = eventDefinition.value.timeCycle
+ }
+ if (eventDefinition.value.timeDuration) {
+ const timeDurationStr = eventDefinition.value.timeDuration.body
+ timeDuration.value = parseInt(timeDurationStr.slice(2, timeDurationStr.length - 1))
+ timeUnit.value = convertTimeUnit(timeDurationStr.slice(timeDurationStr.length - 1))
+ timeModdle.value = eventDefinition.value.timeDuration
+ }
+ }
+
+ // 淇濈暀鍓╀綑鎵╁睍鍏冪礌锛屼究浜庡悗闈㈡洿鏂拌鍏冪礌瀵瑰簲灞炴��
+ otherExtensions.value =
+ elExtensionElements.value.values?.filter(
+ (ex) =>
+ ex.$type !== `${prefix}:BoundaryEventType` && ex.$type !== `${prefix}:TimeoutHandlerType`
+ ) ?? []
+}
+
+const timeoutHandlerChange = (val) => {
+ timeoutHandlerEnable.value = val
+ if (val) {
+ // 鍚敤鑷畾涔夌敤鎴蜂换鍔¤秴鏃跺鐞�
+ // 杈圭晫浜嬩欢绫诲瀷 --- 瓒呮椂
+ boundaryEventType.value = bpmnInstances().moddle.create(`${prefix}:BoundaryEventType`, {
+ value: 1
+ })
+ configExtensions.value.push(boundaryEventType.value)
+ // 瓒呮椂澶勭悊绫诲瀷
+ timeoutHandlerType.value = bpmnInstances().moddle.create(`${prefix}:TimeoutHandlerType`, {
+ value: 1
+ })
+ configExtensions.value.push(timeoutHandlerType.value)
+ // 瓒呮椂鏃堕棿琛ㄨ揪寮�
+ timeDuration.value = 6
+ timeUnit.value = 2
+ maxRemindCount.value = 1
+ timeModdle.value = bpmnInstances().moddle.create(`bpmn:Expression`, {
+ body: 'PT6H'
+ })
+ eventDefinition.value.timeDuration = timeModdle.value
+ } else {
+ // 鍏抽棴鑷畾涔夌敤鎴蜂换鍔¤秴鏃跺鐞�
+ configExtensions.value = []
+ delete eventDefinition.value.timeDuration
+ delete eventDefinition.value.timeCycle
+ }
+ updateElementExtensions()
+}
+
+const onTimeoutHandlerTypeChanged = () => {
+ maxRemindCount.value = 1
+ updateElementExtensions()
+ updateTimeModdle()
+}
+
+const onTimeUnitChange = () => {
+ // 鍒嗛挓锛岄粯璁ゆ槸 60 鍒嗛挓
+ if (timeUnit.value === TimeUnitType.MINUTE) {
+ timeDuration.value = 60
+ }
+ // 灏忔椂锛岄粯璁ゆ槸 6 涓皬鏃�
+ if (timeUnit.value === TimeUnitType.HOUR) {
+ timeDuration.value = 6
+ }
+ // 澶╋紝 榛樿 1澶�
+ if (timeUnit.value === TimeUnitType.DAY) {
+ timeDuration.value = 1
+ }
+ updateTimeModdle()
+ updateElementExtensions()
+}
+
+const updateTimeModdle = () => {
+ if (maxRemindCount.value > 1) {
+ timeModdle.value.body = 'R' + maxRemindCount.value + '/' + isoTimeDuration()
+ if (!eventDefinition.value.timeCycle) {
+ delete eventDefinition.value.timeDuration
+ eventDefinition.value.timeCycle = timeModdle.value
+ }
+ } else {
+ timeModdle.value.body = isoTimeDuration()
+ if (!eventDefinition.value.timeDuration) {
+ delete eventDefinition.value.timeCycle
+ eventDefinition.value.timeDuration = timeModdle.value
+ }
+ }
+}
+
+const isoTimeDuration = () => {
+ let strTimeDuration = 'PT'
+ if (timeUnit.value === TimeUnitType.MINUTE) {
+ strTimeDuration += timeDuration.value + 'M'
+ }
+ if (timeUnit.value === TimeUnitType.HOUR) {
+ strTimeDuration += timeDuration.value + 'H'
+ }
+ if (timeUnit.value === TimeUnitType.DAY) {
+ strTimeDuration += timeDuration.value + 'D'
+ }
+ return strTimeDuration
+}
+
+const updateElementExtensions = () => {
+ const extensions = bpmnInstances().moddle.create('bpmn:ExtensionElements', {
+ values: [...otherExtensions.value, ...configExtensions.value]
+ })
+ bpmnInstances().modeling.updateProperties(toRaw(bpmnElement.value), {
+ extensionElements: extensions
+ })
+}
+
+watch(
+ () => props.id,
+ (val) => {
+ val &&
+ val.length &&
+ nextTick(() => {
+ resetElement()
+ })
+ },
+ { immediate: true }
+)
+</script>
+
+<style lang="scss" scoped></style>
--
Gitblit v1.8.0