Files
admin-ui/src/api/settings/workflow/index.ts
T
2910410219andClaude dd4e719f55 工作流功能完善:子例程弹窗角色分支与模板名称修复、模板子工作流递归补全、首页工作流名称省略+tooltip
- 引入子例程弹窗:按 isAdmin 分支读取 listFlowTemplateRes/listFlowUserRes,名称兼容 flowTemplateName
- 模板补全弹窗:递归展开子工作流模型节点,一次 PUT 更新整棵树(updateWorkflowFromTemplate)
- 首页工作流胶囊/占位卡片:名称单行省略 + el-tooltip 悬停显示全名

Co-Authored-By: Claude <noreply@anthropic.com>
2026-08-24 18:09:34 +08:00

170 lines
5.4 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
import request from '/@/utils/request';
import type { RequestOptions } from '/@/utils/request';
// ===== 节点库(V2 结构,workflow 专用;creation 继续使用 creation/index.ts 的旧结构)=====
export interface NodeLibraryPresetOption {
value?: unknown;
field: string;
label: string;
type: string;
required: boolean;
options?: Array<{
key: string;
value: string;
config?: NodeLibraryPresetOption[] | null;
}> | null;
// 运行时已在用的扩展字段(补齐声明消除 TS 报错)
isFormField?: boolean;
constraint?: any;
defaultValue?: any;
}
export interface NodeLibraryItem {
key: string;
name: string;
group: string;
sort: number;
desc?: string;
batchExecOption: boolean;
// 是否允许该节点内「引用上级节点输出」多选(true 时所有引用下拉可多选;节点库返回,仅 model 节点 true
isMultiParameter: boolean;
// 前置/后置方法配置定义(结构同 presetOption,值为数组;仅 model 节点提供)
preToolOption: NodeLibraryPresetOption[] | null;
postToolOption: NodeLibraryPresetOption[] | null;
skillOption: boolean;
promptOption: boolean;
negativePromptOption: boolean;
isSaveFileOption: boolean;
formConfigOption: boolean;
modelConfigOption: boolean;
// 节点自带输出项([{ field, label }]):空/null 表示无输出;非空时该节点可作为下游节点的引用来源
outputField?: { field: string; label: string }[] | null;
presetOption: NodeLibraryPresetOption[] | null;
// 是否支持贴片布局(节点库返回,仅 model 节点 true):控制节点配置面板「贴片布局」开关显示
patchLayout?: boolean;
}
export interface NodeLibraryGroup {
group: { key: string; name: string };
nodes: NodeLibraryItem[];
}
export function getNodeLibraryList() {
return request({
url: '/ai-agent/node/library/list',
method: 'get',
}) as Promise<{ code: number; message: string; data: { groups: NodeLibraryGroup[] } }>;
}
// ===== 模型列表(不按类型过滤,显示全部)=====
export interface WorkflowModelItem {
id: string;
modelName: string;
modelType: number | string;
baseUrl?: string;
enabled?: number | boolean;
isOwner?: number;
// true = 系统内置模型(选它需填 API Key 转用户模型);false/缺省 = 用户模型
systemModel?: boolean;
// 模型请求参数模板(选择模型后渲染为递归表单,与 DSL modelRequestParams 结构一致)
requestBodyMapping?: Record<string, any>;
[key: string]: any;
}
export function getWorkflowModelList(params?: {
pageNum: number;
pageSize: number;
modelName?: string;
isSameType?: boolean;
modelType?: string | number;
}) {
return request({
url: '/model-gateway/model/manage/listModelManage',
method: 'get',
params,
}) as Promise<{ code: number; message: string; data: { list: WorkflowModelItem[]; total: number } }>;
}
// ===== 技能列表 =====
export interface WorkflowSkillItem {
id: number;
name: string;
description: string;
category: string;
[key: string]: any;
}
export function getWorkflowSkillList(params?: { pageNum: number; pageSize: number; keyword?: string }) {
return request({
url: '/ai-agent/skill/user/listUser',
method: 'get',
params,
}) as Promise<{ code: number; message: string; data: { list: WorkflowSkillItem[]; total: number } }>;
}
// ===== 子流程:引入已有工作流(独立实现,不依赖 creation=====
export interface SubFlowWorkflowItem {
id: string;
// 后端列表接口返回 flowName(name 仅为前端兜底)
name?: string;
flowName?: string;
description?: string;
[key: string]: any;
}
// 获取"我的工作流"列表(IsOwn=true 只取本人创建,供 sub_flow 节点选择引入)
// 响应结构多形态容错在调用方处理(扁平 list 优先,否则按 isAdmin 分支读取 listFlowTemplateRes / listFlowUserRes
export function getSubFlowWorkflowList(params?: {
pageNum: number;
pageSize: number;
keyword?: string;
IsOwn?: boolean;
}) {
return request({
url: '/ai-agent/flow/user/list',
method: 'get',
params,
}) as Promise<{ code: number; message: string; data: any }>;
}
// 获取工作流详情(取开始节点 outputConfig 构建 sub_flow 引入参数)
export function getSubFlowWorkflowDetail(id: string) {
return request({
url: '/ai-agent/flow/user/get',
method: 'get',
params: { id },
}) as Promise<{ code: number; message: string; data: any }>;
}
// 工作空间文件下载(首页工作流/工作空间专用):与 creation 的 downloadToFile 同一后端接口,
// 但工作空间文件可能较大(视频/音频),下载超时放宽到 5 分钟;不改动 creation 共享 API 的超时
export function downloadWorkspaceFile(data: { fileURL: string }, requestOptions?: RequestOptions) {
return request({
url: '/oss/file/downloadToBrowser',
method: 'post',
data,
responseType: 'blob',
timeout: 5 * 60 * 1000,
requestOptions,
});
}
// 与后端 UpdateFlowUserReq 对齐的更新树:id/flowName/description/flowContent/subFlows
// subFlows 递归嵌套,一次 PUT 更新整棵「主流程 + 嵌套子流程」树);独立实现,不动内容创作的 API
export interface UpdateFlowUserTree {
id: string;
flowName: string;
description: string;
flowContent: any;
subFlows?: UpdateFlowUserTree[];
}
export function updateWorkflowFromTemplate(data: UpdateFlowUserTree, requestOptions?: RequestOptions) {
return request({
url: '/ai-agent/flow/user/update',
method: 'put',
data,
requestOptions,
});
}