2026-04-13 10:31:55 +08:00
|
|
|
|
<template>
|
|
|
|
|
|
<el-drawer
|
2026-07-06 11:11:59 +08:00
|
|
|
|
v-model="props.drawer"
|
|
|
|
|
|
custom-class="custom-drawer-header"
|
|
|
|
|
|
:title="props.data.properties?.name || '参数配置'"
|
|
|
|
|
|
class="no-header-margin"
|
|
|
|
|
|
:before-close="confirmSave"
|
2026-04-13 10:31:55 +08:00
|
|
|
|
>
|
2026-07-06 11:11:59 +08:00
|
|
|
|
<component
|
|
|
|
|
|
:is="currentComponent"
|
|
|
|
|
|
ref="paramsComponentRef"
|
|
|
|
|
|
:data="props.data"
|
|
|
|
|
|
@save-success="handleSaveSuccess"
|
|
|
|
|
|
@save-error="handleSaveError"
|
|
|
|
|
|
/>
|
2026-04-13 10:31:55 +08:00
|
|
|
|
</el-drawer>
|
|
|
|
|
|
</template>
|
|
|
|
|
|
|
|
|
|
|
|
<script setup>
|
2026-07-06 11:11:59 +08:00
|
|
|
|
import { ref, computed, watch } from 'vue'
|
|
|
|
|
|
import { emitter } from '@/utils/eventBus'
|
|
|
|
|
|
|
|
|
|
|
|
// 导入各子组件
|
|
|
|
|
|
import StartParams from './params/StartParams.vue'
|
|
|
|
|
|
import BasicNodeParams from './params/BasicNodeParams.vue'
|
|
|
|
|
|
import CodeNodeParams from './params/CodeNodeParams.vue'
|
|
|
|
|
|
import HttpNodeParams from './params/HttpNodeParams.vue'
|
|
|
|
|
|
import SdAgentNodeParams from './params/SdAgentNodeParams.vue'
|
2026-04-13 10:31:55 +08:00
|
|
|
|
|
|
|
|
|
|
const props = defineProps({
|
2026-07-06 11:11:59 +08:00
|
|
|
|
drawer: Boolean,
|
|
|
|
|
|
data: Object
|
2026-04-13 10:31:55 +08:00
|
|
|
|
})
|
|
|
|
|
|
|
|
|
|
|
|
const emits = defineEmits(['close'])
|
2026-07-06 11:11:59 +08:00
|
|
|
|
const paramsComponentRef = ref(null)
|
|
|
|
|
|
|
|
|
|
|
|
// 根据节点类型决定渲染哪个子组件
|
|
|
|
|
|
const currentComponent = computed(() => {
|
|
|
|
|
|
const type = props.data?.type
|
|
|
|
|
|
if (type === 'start') return StartParams
|
|
|
|
|
|
if (['currentLoop', 'serviceNode', 'sleep', 'loop'].includes(type)) return BasicNodeParams
|
|
|
|
|
|
if (type === 'code') return CodeNodeParams
|
|
|
|
|
|
if (type === 'http') return HttpNodeParams
|
|
|
|
|
|
if (type === 'sdAgent') return SdAgentNodeParams
|
|
|
|
|
|
return null
|
|
|
|
|
|
})
|
2026-04-13 10:31:55 +08:00
|
|
|
|
|
2026-07-06 11:11:59 +08:00
|
|
|
|
// 这里提供一个公开方法供父组件调用
|
|
|
|
|
|
const confirmSave = async () => {
|
|
|
|
|
|
if (paramsComponentRef.value && typeof paramsComponentRef.value.validateAndSave === 'function') {
|
|
|
|
|
|
await paramsComponentRef.value.validateAndSave()
|
2026-04-14 16:17:52 +08:00
|
|
|
|
}
|
2026-04-16 14:37:27 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
2026-07-06 11:11:59 +08:00
|
|
|
|
// 暴露给父组件使用
|
|
|
|
|
|
defineExpose({ confirmSave })
|
2026-04-16 14:37:27 +08:00
|
|
|
|
|
2026-07-06 11:11:59 +08:00
|
|
|
|
// 保存成功 / 失败处理
|
|
|
|
|
|
const handleSaveSuccess = () => {
|
|
|
|
|
|
emitter.emit('setProperties', { id: props.data.id })
|
|
|
|
|
|
emitter.emit("throwAnError", { id: props.data.id, hasError: false });
|
|
|
|
|
|
// 无错误,关闭抽屉
|
|
|
|
|
|
emits('close')
|
2026-04-16 09:32:52 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
2026-07-06 11:11:59 +08:00
|
|
|
|
const handleSaveError = () => {
|
|
|
|
|
|
emitter.emit('setProperties', { id: props.data.id })
|
|
|
|
|
|
emitter.emit("throwAnError", { id: props.data.id, hasError: true });
|
|
|
|
|
|
emits('close')
|
2026-04-16 09:32:52 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
2026-07-06 11:11:59 +08:00
|
|
|
|
// 组件卸载时清理事件监听
|
|
|
|
|
|
// 注意:emitter.off 应在各子组件中自行清理,父组件不再重复
|
2026-04-13 10:31:55 +08:00
|
|
|
|
</script>
|
|
|
|
|
|
|
2026-04-13 15:17:11 +08:00
|
|
|
|
<style lang="scss">
|
|
|
|
|
|
.no-header-margin .el-drawer__header {
|
|
|
|
|
|
margin-bottom: 0 !important;
|
|
|
|
|
|
}
|
2026-04-13 10:31:55 +08:00
|
|
|
|
</style>
|