fix: 修正工作流试运行参数名称展示
- 默认字段标题回退为实际配置的参数名称 - 保留显式展示标题并统一表单与引用口径
This commit is contained in:
@@ -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),
|
||||
]),
|
||||
);
|
||||
});
|
||||
|
||||
@@ -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'">
|
||||
|
||||
@@ -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(
|
||||
'开始节点 > 客户名称',
|
||||
);
|
||||
});
|
||||
});
|
||||
|
||||
@@ -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();
|
||||
|
||||
Reference in New Issue
Block a user