- 引入子例程弹窗:按 isAdmin 分支读取 listFlowTemplateRes/listFlowUserRes,名称兼容 flowTemplateName - 模板补全弹窗:递归展开子工作流模型节点,一次 PUT 更新整棵树(updateWorkflowFromTemplate) - 首页工作流胶囊/占位卡片:名称单行省略 + el-tooltip 悬停显示全名 Co-Authored-By: Claude <noreply@anthropic.com>
170 lines
5.4 KiB
TypeScript
170 lines
5.4 KiB
TypeScript
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,
|
||
});
|
||
}
|