fix: Basic node data cannot be obtained in the workflow

This commit is contained in:
shaohuzhang1 2025-11-27 18:26:16 +08:00
parent 6434ba71b7
commit 83d8ee6610
4 changed files with 58 additions and 34 deletions

View File

@ -101,19 +101,3 @@ class KnowledgeWorkflowManage(WorkflowManage):
current_node.node_chunk.end()
QuerySet(KnowledgeAction).filter(id=self.params.get('knowledge_action_id')).update(
details=self.get_runtime_details())
def get_reference_field(self, node_id: str, fields: List[str]):
"""
@param node_id: 节点id
@param fields: 字段
@return:
"""
if node_id == 'knowledge-base-node':
return INode.get_field(self.context, fields)
elif node_id == 'chat':
return INode.get_field(self.chat_context, fields)
else:
node = self.get_node_by_id(node_id)
if node:
return node.get_reference_field(fields)
return None

View File

@ -77,6 +77,22 @@ class AppNode extends HtmlResize.view {
children: this.props.model.properties?.config?.chatFields || [],
})
}
if (this.props.model.type === 'knowledge-base-node') {
let globalFields = []
if (this.props.model.properties.user_input_field_list) {
globalFields = this.props.model.properties.user_input_field_list.map((item: any) => ({
label: item.label.label,
value: item.field,
}))
}
result.push({
value: 'global',
label: t('views.workflow.variable.global'),
type: 'global',
children: globalFields,
})
}
result.push({
value: this.props.model.id,
icon: this.props.model.properties.node_data?.icon,

View File

@ -155,13 +155,7 @@ function refreshFieldList(data: any, index: any) {
inputFieldList.value.push(data)
}
UserFieldFormDialogRef.value.close()
const fields = inputFieldList.value.map((item) => ({
label: item.label.label,
value: item.field,
}))
set(props.nodeModel.properties, 'user_input_field_list', cloneDeep(inputFieldList.value))
set(props.nodeModel.properties.config, 'fields', fields)
onDragHandle()
}
@ -217,12 +211,6 @@ onMounted(() => {
inputFieldList.value = cloneDeep(props.nodeModel.properties.user_input_field_list)
}
const fields = inputFieldList.value.map((item) => ({
label: item.label.label,
value: item.field,
}))
set(props.nodeModel.properties.config, 'fields', fields)
onDragHandle()
})
</script>

View File

@ -1,24 +1,60 @@
<template>
<NodeContainer :nodeModel="nodeModel">
<UserInputFieldTable ref="UserInputFieldTableFef" :node-model="nodeModel" />
<template v-if="nodeFields.length > 0">
<h5 class="title-decoration-1 mb-8 mt-8">
{{ $t('common.param.outputParam') }}
</h5>
<template v-for="(item, index) in nodeFields" :key="index">
<div
class="flex-between border-r-6 p-8-12 mb-8 layout-bg lighter"
@mouseenter="showicon = index"
@mouseleave="showicon = null"
>
<span class="break-all">{{ item.label }} {{ '{' + item.value + '}' }}</span>
<el-tooltip
effect="dark"
:content="$t('views.workflow.setting.copyParam')"
placement="top"
v-if="showicon === index"
>
<el-button link @click="copyClick(item.globeLabel)" style="padding: 0">
<AppIcon iconName="app-copy"></AppIcon>
</el-button>
</el-tooltip>
</div>
</template>
</template>
</NodeContainer>
</template>
<script setup lang="ts">
import { set } from 'lodash'
import NodeContainer from '@/workflow/common/NodeContainer.vue'
import type { FormInstance } from 'element-plus'
import { ref, computed, onMounted, inject } from 'vue'
import { t } from '@/locales'
import UserInputFieldTable from './component/UserInputFieldTable.vue'
import { copyClick } from '@/utils/clipboard'
import { set } from 'lodash'
import UserInputFieldTable from './component/UserInputFieldTable.vue'
const showicon = ref<number | null>(null)
const getResourceDetail = inject('getResourceDetail') as any
const props = defineProps<{ nodeModel: any }>()
const UserInputFieldTableFef = ref()
const baseNodeFormRef = ref<FormInstance>()
const nodeFields = computed(() => {
if (props.nodeModel.properties.user_input_field_list) {
const fileds = props.nodeModel.properties.user_input_field_list.map((item: any) => ({
label: typeof item.label == 'string' ? item.label : item.label.label,
value: item.field,
globeLabel: `{{global.${typeof item.label == 'string' ? item.label : item.label.label}}}`,
globeValue: `{{context['global'].${item.field}}}`,
}))
set(props.nodeModel.properties.config, 'globalFields', fileds)
return fileds
}
set(props.nodeModel.properties.config, 'globalFields', [])
return []
})
const resource = getResourceDetail()
onMounted(() => {})