fix: 修正工作流试运行参数名称展示

- 默认字段标题回退为实际配置的参数名称

- 保留显式展示标题并统一表单与引用口径
This commit is contained in:
2026-08-26 19:16:50 +08:00
parent 1870ac4028
commit 71b3d3d620
4 changed files with 92 additions and 3 deletions

View File

@@ -12,6 +12,8 @@ import { $t } from '#/locales';
import WorkflowFormItem from '#/views/ai/workflow/components/WorkflowFormItem.vue';
import { buildSingleRunModel } from '../../../../../../packages/tinyflow-ui/src/utils/workflowNodeFields';
import { resolveWorkflowParameterDisplayName } from './workflowFormParameters';
interface Props {
workflowId: any;
node: any;
@@ -31,7 +33,7 @@ const parameterDisplayNameMap = computed(() => {
return new Map(
singleRunParameters.value.map((parameter: any) => [
String(parameter.name || ''),
String(parameter.displayName || parameter.formLabel || parameter.name || ''),
resolveWorkflowParameterDisplayName(parameter),
]),
);
});

View File

@@ -13,6 +13,7 @@ import ChooseResource from '#/views/ai/resource/ChooseResource.vue';
import WorkflowFileInput from '#/views/ai/workflow/components/WorkflowFileInput.vue';
import WorkflowImageInput from '#/views/ai/workflow/components/WorkflowImageInput.vue';
import { resolveWorkflowParameterLabel } from './workflowFormParameters';
import { hasWorkflowImageValue } from './workflowImageValue';
const props = defineProps({
@@ -103,7 +104,7 @@ function choose(data: any, propName: string) {
v-for="(item, idx) in parameters"
:prop="`${propPrefix}${item.name}`"
:key="idx"
:label="item.formLabel || item.name"
:label="resolveWorkflowParameterLabel(item)"
:rules="buildRules(item)"
>
<template v-if="getContentType(item) === 'text'">

View File

@@ -1,6 +1,10 @@
import { describe, expect, it } from 'vitest';
import { resolveWorkflowFormParameters } from '../workflowFormParameters';
import {
resolveWorkflowFormParameters,
resolveWorkflowParameterDisplayName,
resolveWorkflowParameterLabel,
} from '../workflowFormParameters';
describe('resolveWorkflowFormParameters', () => {
it('uses the image parameter when a legacy schema still declares text', () => {
@@ -73,4 +77,32 @@ describe('resolveWorkflowFormParameters', () => {
formLabel: '背景资料',
});
});
it('uses the configured parameter name for a default trial-run label', () => {
expect(
resolveWorkflowParameterLabel({
name: 'customer_name',
formLabel: '新字段',
}),
).toBe('customer_name');
expect(
resolveWorkflowParameterDisplayName({
name: 'start_1.customer_name',
displayName: '开始节点 > 新字段',
}),
).toBe('开始节点 > customer_name');
});
it('preserves an explicitly configured trial-run label', () => {
const parameter = {
name: 'customer_name',
formLabel: '客户名称',
displayName: '开始节点 > 客户名称',
};
expect(resolveWorkflowParameterLabel(parameter)).toBe('客户名称');
expect(resolveWorkflowParameterDisplayName(parameter)).toBe(
'开始节点 > 客户名称',
);
});
});

View File

@@ -17,6 +17,60 @@ const DEFAULT_FIELD_LABELS = new Set([
const GENERATED_FIELD_KEY_PATTERN =
/^(?:field_[A-Za-z0-9]+|(?:text|textarea|radio|checkbox|select|file)_field(?:_\d+)?)$/;
function configuredParameterName(name: unknown) {
const normalizedName = String(name || '').trim();
const nameParts = normalizedName.split('.').filter(Boolean);
return nameParts[nameParts.length - 1] || normalizedName;
}
function replaceDefaultParameterLabel(label: unknown, name: unknown) {
const normalizedLabel = String(label || '').trim();
const normalizedName = String(name || '').trim();
if (!normalizedLabel || !normalizedName) {
return normalizedLabel;
}
const parts = normalizedLabel.split('>').map((part) => part.trim());
const lastPart = parts[parts.length - 1] || '';
if (!DEFAULT_FIELD_LABELS.has(lastPart)) {
return normalizedLabel;
}
const parameterName = configuredParameterName(normalizedName);
return parts.length > 1
? `${parts.slice(0, -1).join(' > ')} > ${parameterName}`
: parameterName;
}
/**
* 解析工作流参数在表单中的展示名称。
*
* @param parameter 工作流运行参数
* @returns 用户可见的参数名称
*/
export function resolveWorkflowParameterLabel(parameter: any) {
const name = String(parameter?.name || '').trim();
const formLabel = replaceDefaultParameterLabel(parameter?.formLabel, name);
const displayName = replaceDefaultParameterLabel(
parameter?.displayName,
name,
);
return formLabel || displayName || name || '参数';
}
/**
* 解析工作流参数在引用内容中的展示名称。
*
* @param parameter 工作流运行参数
* @returns 用户可见的引用参数名称
*/
export function resolveWorkflowParameterDisplayName(parameter: any) {
const name = String(parameter?.name || '').trim();
const displayName = replaceDefaultParameterLabel(
parameter?.displayName,
name,
);
return displayName || resolveWorkflowParameterLabel(parameter);
}
function resolveFieldLabel(field: any) {
const key = String(field?.key || '').trim();
const label = String(field?.label || '').trim();