Merge remote-tracking branch 'origin/feature/workflow' into feature/workflow
This commit is contained in:
@@ -273,7 +273,7 @@
|
|||||||
</div>
|
</div>
|
||||||
<el-button type="primary" link class="w100" @click="addCustomField">+ 添加自定义字段</el-button>
|
<el-button type="primary" link class="w100" @click="addCustomField">+ 添加自定义字段</el-button>
|
||||||
</template>
|
</template>
|
||||||
</template>
|
</template>
|
||||||
</el-form>
|
</el-form>
|
||||||
</div>
|
</div>
|
||||||
<div class="form-actions">
|
<div class="form-actions">
|
||||||
@@ -1494,10 +1494,21 @@ const handleTemplatePageChange = (page: number) => {
|
|||||||
// 处理技能选择确认(只更新临时状态,不保存到节点)
|
// 处理技能选择确认(只更新临时状态,不保存到节点)
|
||||||
const handleSkillConfirm = (skill: SkillItem) => {
|
const handleSkillConfirm = (skill: SkillItem) => {
|
||||||
selectedSkill.value = skill;
|
selectedSkill.value = skill;
|
||||||
|
if (selectedElement.value?.kind === 'node') {
|
||||||
|
selectedElement.value.properties = {
|
||||||
|
...(selectedElement.value.properties || {}),
|
||||||
|
skillName: skill.name,
|
||||||
|
};
|
||||||
|
}
|
||||||
};
|
};
|
||||||
// 移除已选择的技能(只更新临时状态)
|
// 移除已选择的技能(只更新临时状态)
|
||||||
const handleRemoveSkill = () => {
|
const handleRemoveSkill = () => {
|
||||||
selectedSkill.value = null;
|
selectedSkill.value = null;
|
||||||
|
if (selectedElement.value?.kind === 'node') {
|
||||||
|
const nextProperties = { ...(selectedElement.value.properties || {}) };
|
||||||
|
delete nextProperties.skillName;
|
||||||
|
selectedElement.value.properties = nextProperties;
|
||||||
|
}
|
||||||
};
|
};
|
||||||
// 处理模型选择确认(只更新临时状态,不保存到节点)
|
// 处理模型选择确认(只更新临时状态,不保存到节点)
|
||||||
const handleModelConfirm = (model: any) => {
|
const handleModelConfirm = (model: any) => {
|
||||||
@@ -1710,7 +1721,20 @@ const useWorkflow = async (workflow: WorkflowItem) => {
|
|||||||
// 初始化其他配置字段(从 config 中读取)
|
// 初始化其他配置字段(从 config 中读取)
|
||||||
if (node.config) {
|
if (node.config) {
|
||||||
Object.keys(node.config).forEach((key) => {
|
Object.keys(node.config).forEach((key) => {
|
||||||
if (!['nodeCode', 'width', 'height', 'x', 'y', 'formConfig', 'inputSource', 'fieldMetadata', 'selectedModel', 'modelOutputFields'].includes(key)) {
|
if (
|
||||||
|
![
|
||||||
|
'nodeCode',
|
||||||
|
'width',
|
||||||
|
'height',
|
||||||
|
'x',
|
||||||
|
'y',
|
||||||
|
'formConfig',
|
||||||
|
'inputSource',
|
||||||
|
'fieldMetadata',
|
||||||
|
'selectedModel',
|
||||||
|
'modelOutputFields',
|
||||||
|
].includes(key)
|
||||||
|
) {
|
||||||
const fieldKey = `${node.id}_${key}`;
|
const fieldKey = `${node.id}_${key}`;
|
||||||
creationFormValues[fieldKey] = node.config[key];
|
creationFormValues[fieldKey] = node.config[key];
|
||||||
}
|
}
|
||||||
@@ -1879,7 +1903,10 @@ const hydrateCreationFileFields = (nodes: any[] = []) => {
|
|||||||
const urls = Array.isArray(rawValue) ? rawValue : rawValue ? [rawValue] : [];
|
const urls = Array.isArray(rawValue) ? rawValue : rawValue ? [rawValue] : [];
|
||||||
if (urls.length === 0) return;
|
if (urls.length === 0) return;
|
||||||
creationFieldFiles[key] = urls.map((url: string, index: number) => ({
|
creationFieldFiles[key] = urls.map((url: string, index: number) => ({
|
||||||
name: String(url || '').split('/').pop() || `file-${index + 1}`,
|
name:
|
||||||
|
String(url || '')
|
||||||
|
.split('/')
|
||||||
|
.pop() || `file-${index + 1}`,
|
||||||
url,
|
url,
|
||||||
}));
|
}));
|
||||||
});
|
});
|
||||||
@@ -2090,13 +2117,10 @@ const sendMessage = async () => {
|
|||||||
// 2. 构建节点输入参数
|
// 2. 构建节点输入参数
|
||||||
const nodeInputParams =
|
const nodeInputParams =
|
||||||
currentWorkflowForCreation.value.nodeInputParams?.map((node: any) => {
|
currentWorkflowForCreation.value.nodeInputParams?.map((node: any) => {
|
||||||
const nodeParam: any = {
|
// 先展开原始节点的所有字段(保留 promptContent、isSaveFile、outputConfig、modelOutputFields 等)
|
||||||
id: node.id,
|
const nodeParam: any = { ...node };
|
||||||
nodeCode: node.nodeCode,
|
|
||||||
name: node.name,
|
|
||||||
};
|
|
||||||
|
|
||||||
// 添加表单配置和值
|
// 用用户填写的值覆盖 formConfig
|
||||||
if (node.formConfig && Array.isArray(node.formConfig)) {
|
if (node.formConfig && Array.isArray(node.formConfig)) {
|
||||||
nodeParam.formConfig = node.formConfig.map((field: any) => {
|
nodeParam.formConfig = node.formConfig.map((field: any) => {
|
||||||
// HTTP body: 将创作模式填写值回写到 body 的 showInForm 子字段
|
// HTTP body: 将创作模式填写值回写到 body 的 showInForm 子字段
|
||||||
@@ -2138,10 +2162,9 @@ const sendMessage = async () => {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
// 添加其他配置
|
// 用用户填写的值覆盖 config
|
||||||
if (node.config) {
|
if (node.config) {
|
||||||
nodeParam.config = { ...node.config };
|
nodeParam.config = { ...node.config };
|
||||||
// 更新 config 中的值
|
|
||||||
Object.keys(node.config).forEach((key) => {
|
Object.keys(node.config).forEach((key) => {
|
||||||
const fieldKey = `${node.id}_${key}`;
|
const fieldKey = `${node.id}_${key}`;
|
||||||
if (creationFormValues[fieldKey] !== undefined) {
|
if (creationFormValues[fieldKey] !== undefined) {
|
||||||
@@ -2150,11 +2173,6 @@ const sendMessage = async () => {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
// 添加其他字段
|
|
||||||
if (node.inputSource) nodeParam.inputSource = node.inputSource;
|
|
||||||
if (node.modelConfig) nodeParam.modelConfig = node.modelConfig;
|
|
||||||
if (node.skillName) nodeParam.skillName = node.skillName;
|
|
||||||
|
|
||||||
return nodeParam;
|
return nodeParam;
|
||||||
}) || [];
|
}) || [];
|
||||||
|
|
||||||
@@ -2310,7 +2328,20 @@ const handleTreeNodeClick = async (data: TreeNode) => {
|
|||||||
// 初始化其他配置字段(从 config 中读取)
|
// 初始化其他配置字段(从 config 中读取)
|
||||||
if (node.config) {
|
if (node.config) {
|
||||||
Object.keys(node.config).forEach((key) => {
|
Object.keys(node.config).forEach((key) => {
|
||||||
if (!['nodeCode', 'width', 'height', 'x', 'y', 'formConfig', 'inputSource', 'fieldMetadata', 'selectedModel', 'modelOutputFields'].includes(key)) {
|
if (
|
||||||
|
![
|
||||||
|
'nodeCode',
|
||||||
|
'width',
|
||||||
|
'height',
|
||||||
|
'x',
|
||||||
|
'y',
|
||||||
|
'formConfig',
|
||||||
|
'inputSource',
|
||||||
|
'fieldMetadata',
|
||||||
|
'selectedModel',
|
||||||
|
'modelOutputFields',
|
||||||
|
].includes(key)
|
||||||
|
) {
|
||||||
const fieldKey = `${node.id}_${key}`;
|
const fieldKey = `${node.id}_${key}`;
|
||||||
creationFormValues[fieldKey] = node.config[key];
|
creationFormValues[fieldKey] = node.config[key];
|
||||||
}
|
}
|
||||||
@@ -2392,7 +2423,20 @@ const handleTreeNodeClick = async (data: TreeNode) => {
|
|||||||
// 初始化其他配置字段(从 config 中读取)
|
// 初始化其他配置字段(从 config 中读取)
|
||||||
if (node.config) {
|
if (node.config) {
|
||||||
Object.keys(node.config).forEach((key) => {
|
Object.keys(node.config).forEach((key) => {
|
||||||
if (!['nodeCode', 'width', 'height', 'x', 'y', 'formConfig', 'inputSource', 'fieldMetadata', 'selectedModel', 'modelOutputFields'].includes(key)) {
|
if (
|
||||||
|
![
|
||||||
|
'nodeCode',
|
||||||
|
'width',
|
||||||
|
'height',
|
||||||
|
'x',
|
||||||
|
'y',
|
||||||
|
'formConfig',
|
||||||
|
'inputSource',
|
||||||
|
'fieldMetadata',
|
||||||
|
'selectedModel',
|
||||||
|
'modelOutputFields',
|
||||||
|
].includes(key)
|
||||||
|
) {
|
||||||
const fieldKey = `${node.id}_${key}`;
|
const fieldKey = `${node.id}_${key}`;
|
||||||
creationFormValues[fieldKey] = node.config[key];
|
creationFormValues[fieldKey] = node.config[key];
|
||||||
}
|
}
|
||||||
@@ -3539,7 +3583,7 @@ const applySelected = () => {
|
|||||||
if (selectedSkill.value) {
|
if (selectedSkill.value) {
|
||||||
p.skillName = selectedSkill.value.name;
|
p.skillName = selectedSkill.value.name;
|
||||||
} else {
|
} else {
|
||||||
delete p.skillName;
|
p.skillName = null;
|
||||||
}
|
}
|
||||||
|
|
||||||
// 保存提示词内容
|
// 保存提示词内容
|
||||||
|
|||||||
Reference in New Issue
Block a user