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/SimpleProcessDesignerV2/src/nodes-config/DelayTimerNodeConfig.vue | 190 +++++++++++++++++++++++++++++++++++++++++++++++
1 files changed, 190 insertions(+), 0 deletions(-)
diff --git a/src/components/SimpleProcessDesignerV2/src/nodes-config/DelayTimerNodeConfig.vue b/src/components/SimpleProcessDesignerV2/src/nodes-config/DelayTimerNodeConfig.vue
new file mode 100644
index 0000000..741796d
--- /dev/null
+++ b/src/components/SimpleProcessDesignerV2/src/nodes-config/DelayTimerNodeConfig.vue
@@ -0,0 +1,190 @@
+<template>
+ <el-drawer
+ :append-to-body="true"
+ v-model="settingVisible"
+ :show-close="false"
+ :size="550"
+ :before-close="saveConfig"
+ >
+ <template #header>
+ <div class="config-header">
+ <input
+ v-if="showInput"
+ type="text"
+ class="config-editable-input"
+ @blur="blurEvent()"
+ v-mountedFocus
+ v-model="nodeName"
+ :placeholder="nodeName"
+ />
+ <div v-else class="node-name">
+ {{ nodeName }} <Icon class="ml-1" icon="ep:edit-pen" :size="16" @click="clickIcon()" />
+ </div>
+ <div class="divide-line"></div>
+ </div>
+ </template>
+ <div>
+ <el-form ref="formRef" :model="configForm" label-position="top" :rules="formRules">
+ <el-form-item label="寤惰繜鏃堕棿" prop="delayType">
+ <el-radio-group v-model="configForm.delayType">
+ <el-radio-button
+ v-for="item in DELAY_TYPE"
+ :key="item.value"
+ :label="item.label"
+ :value="item.value"
+ />
+ </el-radio-group>
+ </el-form-item>
+ <el-form-item v-if="configForm.delayType === DelayTypeEnum.FIXED_TIME_DURATION">
+ <el-form-item prop="timeDuration">
+ <el-input-number
+ class="mr-2"
+ :style="{ width: '100px' }"
+ v-model="configForm.timeDuration"
+ :min="1"
+ controls-position="right"
+ />
+ </el-form-item>
+ <el-select v-model="configForm.timeUnit" class="mr-2" :style="{ width: '100px' }">
+ <el-option
+ v-for="item in TIME_UNIT_TYPES"
+ :key="item.value"
+ :label="item.label"
+ :value="item.value"
+ />
+ </el-select>
+ <el-text>鍚庤繘鍏ヤ笅涓�鑺傜偣</el-text>
+ </el-form-item>
+ <el-form-item v-if="configForm.delayType === DelayTypeEnum.FIXED_DATE_TIME" prop="dateTime">
+ <el-date-picker
+ class="mr-2"
+ v-model="configForm.dateTime"
+ type="datetime"
+ placeholder="璇烽�夋嫨鏃ユ湡鍜屾椂闂�"
+ value-format="YYYY-MM-DDTHH:mm:ss"
+ />
+ <el-text>鍚庤繘鍏ヤ笅涓�鑺傜偣</el-text>
+ </el-form-item>
+ </el-form>
+ </div>
+ <template #footer>
+ <el-divider />
+ <div>
+ <el-button type="primary" @click="saveConfig">纭� 瀹�</el-button>
+ <el-button @click="closeDrawer">鍙� 娑�</el-button>
+ </div>
+ </template>
+ </el-drawer>
+</template>
+<script setup lang="ts">
+import {
+ SimpleFlowNode,
+ NodeType,
+ TIME_UNIT_TYPES,
+ TimeUnitType,
+ DelayTypeEnum,
+ DELAY_TYPE
+} from '../consts'
+import { useWatchNode, useDrawer, useNodeName } from '../node'
+import { convertTimeUnit } from '../utils'
+defineOptions({
+ name: 'DelayTimerNodeConfig'
+})
+const props = defineProps({
+ flowNode: {
+ type: Object as () => SimpleFlowNode,
+ required: true
+ }
+})
+// 鎶藉眽閰嶇疆
+const { settingVisible, closeDrawer, openDrawer } = useDrawer()
+// 褰撳墠鑺傜偣
+const currentNode = useWatchNode(props)
+// 鑺傜偣鍚嶇О
+const { nodeName, showInput, clickIcon, blurEvent } = useNodeName(NodeType.DELAY_TIMER_NODE)
+// 鎶勯�佷汉琛ㄥ崟閰嶇疆
+const formRef = ref() // 琛ㄥ崟 Ref
+// 琛ㄥ崟鏍¢獙瑙勫垯
+const formRules = reactive({
+ delayType: [{ required: true, message: '寤惰繜鏃堕棿涓嶈兘涓虹┖', trigger: 'change' }],
+ timeDuration: [{ required: true, message: '寤惰繜鏃堕棿涓嶈兘涓虹┖', trigger: 'change' }],
+ dateTime: [{ required: true, message: '寤惰繜鏃堕棿涓嶈兘涓虹┖', trigger: 'change' }]
+})
+// 閰嶇疆琛ㄥ崟鏁版嵁
+const configForm = ref({
+ delayType: DelayTypeEnum.FIXED_TIME_DURATION,
+ timeDuration: 1,
+ timeUnit: TimeUnitType.HOUR,
+ dateTime: ''
+})
+// 淇濆瓨閰嶇疆
+const saveConfig = async () => {
+ if (!formRef) return false
+ const valid = await formRef.value.validate()
+ if (!valid) return false
+ const showText = getShowText()
+ if (!showText) return false
+ currentNode.value.name = nodeName.value!
+ currentNode.value.showText = showText
+ if (configForm.value.delayType === DelayTypeEnum.FIXED_TIME_DURATION) {
+ currentNode.value.delaySetting = {
+ delayType: configForm.value.delayType,
+ delayTime: getIsoTimeDuration()
+ }
+ }
+ if (configForm.value.delayType === DelayTypeEnum.FIXED_DATE_TIME) {
+ currentNode.value.delaySetting = {
+ delayType: configForm.value.delayType,
+ delayTime: configForm.value.dateTime
+ }
+ }
+ settingVisible.value = false
+ return true
+}
+const getShowText = (): string => {
+ let showText = ''
+ if (configForm.value.delayType === DelayTypeEnum.FIXED_TIME_DURATION) {
+ showText = `寤惰繜${configForm.value.timeDuration}${TIME_UNIT_TYPES.find((item) => item.value === configForm.value.timeUnit).label}`
+ }
+ if (configForm.value.delayType === DelayTypeEnum.FIXED_DATE_TIME) {
+ showText = `寤惰繜鑷�${configForm.value.dateTime.replace('T', ' ')}`
+ }
+ return showText
+}
+const getIsoTimeDuration = () => {
+ let strTimeDuration = 'PT'
+ if (configForm.value.timeUnit === TimeUnitType.MINUTE) {
+ strTimeDuration += configForm.value.timeDuration + 'M'
+ }
+ if (configForm.value.timeUnit === TimeUnitType.HOUR) {
+ strTimeDuration += configForm.value.timeDuration + 'H'
+ }
+ if (configForm.value.timeUnit === TimeUnitType.DAY) {
+ strTimeDuration += configForm.value.timeDuration + 'D'
+ }
+ return strTimeDuration
+}
+// 鏄剧ず寤惰繜鍣ㄨ妭鐐归厤缃紝 鐢辩埗缁勪欢浼犺繃鏉�
+const showDelayTimerNodeConfig = (node: SimpleFlowNode) => {
+ nodeName.value = node.name
+ if (node.delaySetting) {
+ configForm.value.delayType = node.delaySetting.delayType
+ // 鍥哄畾鏃堕暱
+ if (configForm.value.delayType === DelayTypeEnum.FIXED_TIME_DURATION) {
+ const strTimeDuration = node.delaySetting.delayTime
+ let parseTime = strTimeDuration.slice(2, strTimeDuration.length - 1)
+ let parseTimeUnit = strTimeDuration.slice(strTimeDuration.length - 1)
+ configForm.value.timeDuration = parseInt(parseTime)
+ configForm.value.timeUnit = convertTimeUnit(parseTimeUnit)
+ }
+ // 鍥哄畾鏃ユ湡鏃堕棿
+ if (configForm.value.delayType === DelayTypeEnum.FIXED_DATE_TIME) {
+ configForm.value.dateTime = node.delaySetting.delayTime
+ }
+ }
+}
+
+defineExpose({ openDrawer, showDelayTimerNodeConfig }) // 鏆撮湶鏂规硶缁欑埗缁勪欢
+</script>
+
+<style lang="scss" scoped></style>
--
Gitblit v1.8.0