|
|
@@ -28,17 +28,15 @@ const props = withDefaults(defineProps<Props>(), {
|
|
|
})
|
|
|
const emit = defineEmits<{
|
|
|
'update:visible': [value: boolean]
|
|
|
- 'update:node:data': [id: string, data: Record<string, unknown>]
|
|
|
+ // 更新节点数据
|
|
|
+ 'update:node:data': [data: Record<string, unknown>]
|
|
|
+ // 运行节点
|
|
|
+ 'run-node': [id: string]
|
|
|
}>()
|
|
|
|
|
|
-const node = computed<IWorkflowNode>({
|
|
|
- get() {
|
|
|
- return props.workflow.nodes.find((node) => node.id === props.id)!
|
|
|
- },
|
|
|
- set(value: IWorkflowNode) {
|
|
|
- emit('update:node:data', props.id, value.data)
|
|
|
- }
|
|
|
-})
|
|
|
+const node = computed<IWorkflowNode>(
|
|
|
+ () => props.workflow.nodes.find((node) => node.id === props.id)!
|
|
|
+)
|
|
|
|
|
|
const setter = computed(() => {
|
|
|
return (
|
|
|
@@ -56,35 +54,38 @@ const closeDrawer = () => {
|
|
|
emit('update:visible', false)
|
|
|
}
|
|
|
|
|
|
-const onUpdate = useDebounceFn((data: Record<string, unknown>) => {
|
|
|
- emit('update:node:data', props.id, data)
|
|
|
+/**
|
|
|
+ * 更新节点配置数据 node.data
|
|
|
+ */
|
|
|
+const onUpdateData = useDebounceFn((data: Record<string, unknown>) => {
|
|
|
+ emit('update:node:data', {
|
|
|
+ ...node.value,
|
|
|
+ data: {
|
|
|
+ ...node.value?.data,
|
|
|
+ ...data
|
|
|
+ }
|
|
|
+ })
|
|
|
}, 1000)
|
|
|
|
|
|
-const name = computed({
|
|
|
- get() {
|
|
|
- return node.value?.name
|
|
|
- },
|
|
|
- set(value: string) {
|
|
|
- node.value.name = value
|
|
|
- }
|
|
|
-})
|
|
|
+const name = ref(node.value?.name || '')
|
|
|
+const remark = ref(node.value?.remark || '')
|
|
|
+const nodeVars = ref<NodeVar[]>([])
|
|
|
|
|
|
-const remark = computed({
|
|
|
- get() {
|
|
|
- return node.value?.remark
|
|
|
- },
|
|
|
- set(value: string) {
|
|
|
- if (value?.trim()) {
|
|
|
- node.value.remark = value
|
|
|
- }
|
|
|
+const onUpdateName = () => {
|
|
|
+ if (name.value !== node.value?.name && name.value.trim() !== '') {
|
|
|
+ emit('update:node:data', { ...node.value, name: name.value })
|
|
|
}
|
|
|
-})
|
|
|
-
|
|
|
-const nodeVars = ref<NodeVar[]>([])
|
|
|
+}
|
|
|
+const onUpdateRemark = () => {
|
|
|
+ emit('update:node:data', { ...node.value, remark: remark.value })
|
|
|
+}
|
|
|
|
|
|
watch(
|
|
|
() => [props.id, props.visible],
|
|
|
async () => {
|
|
|
+ name.value = node.value?.name || ''
|
|
|
+ remark.value = node.value?.remark || ''
|
|
|
+
|
|
|
if (props.id && props.visible) {
|
|
|
const response = await agent.postAgentGetPrevNodeOutVariableList({
|
|
|
node_id: props.id,
|
|
|
@@ -111,17 +112,40 @@ provide('nodeVars', nodeVars)
|
|
|
>
|
|
|
<Icon :icon="nodeInfo?.icon" color="#fff" :size="14" />
|
|
|
</span>
|
|
|
- <Input v-model="name" placeholder="添加标题..." variant="borderless" />
|
|
|
+ <Input
|
|
|
+ v-model="name"
|
|
|
+ placeholder="添加标题..."
|
|
|
+ variant="borderless"
|
|
|
+ @blur="onUpdateName"
|
|
|
+ />
|
|
|
</h4>
|
|
|
- <Icon
|
|
|
- icon="lucide:x"
|
|
|
- height="24"
|
|
|
- width="24"
|
|
|
- @click="closeDrawer"
|
|
|
- class="cursor-pointer"
|
|
|
- ></Icon>
|
|
|
+ <div class="flex items-center">
|
|
|
+ <el-tooltip content="运行节点" placement="top">
|
|
|
+ <Icon
|
|
|
+ icon="lucide:play"
|
|
|
+ width="20"
|
|
|
+ height="20"
|
|
|
+ class="text-gray-400 p-2 hover:cursor-pointer hover:bg-gray-200"
|
|
|
+ @click="emit('run-node', id)"
|
|
|
+ />
|
|
|
+ </el-tooltip>
|
|
|
+
|
|
|
+ <el-divider direction="vertical" />
|
|
|
+ <Icon
|
|
|
+ icon="lucide:x"
|
|
|
+ height="24"
|
|
|
+ width="24"
|
|
|
+ @click="closeDrawer"
|
|
|
+ class="cursor-pointer"
|
|
|
+ ></Icon>
|
|
|
+ </div>
|
|
|
</div>
|
|
|
- <Input v-model="remark" placeholder="添加描述..." variant="borderless" />
|
|
|
+ <Input
|
|
|
+ v-model="remark"
|
|
|
+ placeholder="添加描述..."
|
|
|
+ variant="borderless"
|
|
|
+ @blur="onUpdateRemark"
|
|
|
+ />
|
|
|
</header>
|
|
|
|
|
|
<div class="content">
|
|
|
@@ -133,7 +157,7 @@ provide('nodeVars', nodeVars)
|
|
|
:key="node?.id"
|
|
|
:id="node?.id"
|
|
|
:data="node?.data"
|
|
|
- @update="onUpdate"
|
|
|
+ @update="onUpdateData"
|
|
|
></component>
|
|
|
</div>
|
|
|
</el-tab-pane>
|