diff --git a/src/views/knowledge/aiChat/image.vue b/src/views/knowledge/aiChat/image.vue index 8a10e27..3dd1301 100644 --- a/src/views/knowledge/aiChat/image.vue +++ b/src/views/knowledge/aiChat/image.vue @@ -104,9 +104,7 @@ -
- 请上传参考图片 -
+
请上传参考图片
@@ -380,7 +378,7 @@ const generateImage = async () => { ElMessage.warning('请输入提示词!'); return; } - + if (!uploadedImageBase64.value) { ElMessage.warning('请上传参考图片!'); return; diff --git a/src/views/knowledge/aiChat/index.vue b/src/views/knowledge/aiChat/index.vue index a412844..5b81237 100644 --- a/src/views/knowledge/aiChat/index.vue +++ b/src/views/knowledge/aiChat/index.vue @@ -12,9 +12,9 @@
- @@ -113,7 +113,7 @@ onBeforeMount(() => { } } else { selectedKnowledgeId.value = datasetId; - selectedKnowledge.value = {id: datasetId}; + selectedKnowledge.value = { id: datasetId }; } } }); diff --git a/src/views/knowledge/aiChat/ts/message.ts b/src/views/knowledge/aiChat/ts/message.ts index 602aae7..6e3489d 100644 --- a/src/views/knowledge/aiChat/ts/message.ts +++ b/src/views/knowledge/aiChat/ts/message.ts @@ -98,10 +98,7 @@ export const parseWelcomeMessage = (welcomeMsg?: string): PrologueItem[] => { * @param {PrologueItem[]} initialPrologueList - 初始的 prologue 列表 * @returns {Promise} 处理后的 prologue items */ -export const processPrologueItems = async ( - selectedKnowledge: Dataset, - initialPrologueList: PrologueItem[] -): Promise => { +export const processPrologueItems = async (selectedKnowledge: Dataset, initialPrologueList: PrologueItem[]): Promise => { // 如果存在 mcpId,从后端获取 MCP 元数据 if (selectedKnowledge?.mcpId) { const { data } = await getObj(selectedKnowledge.mcpId); @@ -143,21 +140,21 @@ const token = computed(() => { export const generateConversationKey = (knowledgeId: string, notime?: boolean, mcpId?: string, dataId?: string) => { // 构建基础key let key = `chat-${knowledgeId}-${useUserInfo().userInfos.user.userId}-${token.value}`; - + // 如果有mcpId,添加到key中 if (mcpId) { key += `-mcp-${mcpId}`; } - + // 如果有dataId,添加到key中 if (dataId) { key += `-data-${dataId}`; } - + // 如果需要时间戳,添加到key末尾 if (!notime) { key += `-${Date.now()}`; } - + return key; -}; \ No newline at end of file +}; diff --git a/src/views/knowledge/aiChatRecord/index.vue b/src/views/knowledge/aiChatRecord/index.vue index 66788b7..f2c678b 100644 --- a/src/views/knowledge/aiChatRecord/index.vue +++ b/src/views/knowledge/aiChatRecord/index.vue @@ -82,9 +82,16 @@ v-if="!selectRow.recordId" class="flex flex-col items-center justify-center h-full p-8 bg-white border shadow-lg rounded-2xl border-slate-200/60 shadow-slate-100/50 backdrop-blur-sm" > -
+
- +
@@ -95,7 +102,10 @@ - + diff --git a/src/views/knowledge/aiDataset/mount.vue b/src/views/knowledge/aiDataset/mount.vue index 60caa9c..4524d7a 100644 --- a/src/views/knowledge/aiDataset/mount.vue +++ b/src/views/knowledge/aiDataset/mount.vue @@ -1,215 +1,211 @@ diff --git a/src/views/knowledge/aiDocument/form.vue b/src/views/knowledge/aiDocument/form.vue index e055e26..6f630af 100644 --- a/src/views/knowledge/aiDocument/form.vue +++ b/src/views/knowledge/aiDocument/form.vue @@ -1,5 +1,13 @@ @@ -274,7 +271,7 @@ const viewDocument = (document: any) => { useMessage().warning('只有切片成功的文档才能查看'); return; } - + selectedDocumentId.value = document.id; documentDrawerVisible.value = true; }; diff --git a/src/views/knowledge/aiDocument/sources/FileDocumentForm.vue b/src/views/knowledge/aiDocument/sources/FileDocumentForm.vue index 74b16f3..17f434a 100644 --- a/src/views/knowledge/aiDocument/sources/FileDocumentForm.vue +++ b/src/views/knowledge/aiDocument/sources/FileDocumentForm.vue @@ -9,7 +9,6 @@ diff --git a/src/views/knowledge/aiDocument/sources/TextDocumentForm.vue b/src/views/knowledge/aiDocument/sources/TextDocumentForm.vue index 99885b6..c186880 100644 --- a/src/views/knowledge/aiDocument/sources/TextDocumentForm.vue +++ b/src/views/knowledge/aiDocument/sources/TextDocumentForm.vue @@ -6,12 +6,7 @@ - + diff --git a/src/views/knowledge/aiEmbedStore/form.vue b/src/views/knowledge/aiEmbedStore/form.vue index 87ccd52..25efbbc 100644 --- a/src/views/knowledge/aiEmbedStore/form.vue +++ b/src/views/knowledge/aiEmbedStore/form.vue @@ -242,7 +242,7 @@ const onSubmit = async () => { loading.value = true; // 修复TypeScript错误:正确处理apiKey的类型 const submitForm = { ...form }; - + // 处理 pgvector 类型的特殊逻辑 if (form.storeType === 'pgvector') { // 将 pgvector 的配置信息存储到 extData 中 @@ -253,7 +253,7 @@ const onSubmit = async () => { dimension: form.pgDimension, }; submitForm.extData = JSON.stringify(pgConfig); - + // 清空不需要的字段 submitForm.apiKey = ''; } else { @@ -262,13 +262,13 @@ const onSubmit = async () => { submitForm.apiKey = ''; } } - + // 移除 pgvector 特有的临时字段 delete (submitForm as any).pgUsername; delete (submitForm as any).pgPassword; delete (submitForm as any).pgDatabase; delete (submitForm as any).pgDimension; - + form.storeId ? await putObj(submitForm) : await addObj(submitForm); useMessage().success(form.storeId ? '修改成功' : '添加成功'); visible.value = false; @@ -287,7 +287,7 @@ const getaiEmbedStoreData = (id: string) => { getObj({ storeId: id }) .then((res: any) => { Object.assign(form, res.data); - + // 如果是 pgvector 类型,解析 extData 中的配置 if (form.storeType === 'pgvector' && form.extData) { try { diff --git a/src/views/knowledge/aiFlow/CanvasContextMenu.vue b/src/views/knowledge/aiFlow/CanvasContextMenu.vue index 1674a8c..7a8238b 100644 --- a/src/views/knowledge/aiFlow/CanvasContextMenu.vue +++ b/src/views/knowledge/aiFlow/CanvasContextMenu.vue @@ -1,173 +1,173 @@ \ No newline at end of file + diff --git a/src/views/knowledge/aiFlow/CheckListPanel.vue b/src/views/knowledge/aiFlow/CheckListPanel.vue index d868561..8dc4316 100644 --- a/src/views/knowledge/aiFlow/CheckListPanel.vue +++ b/src/views/knowledge/aiFlow/CheckListPanel.vue @@ -1,451 +1,442 @@ \ No newline at end of file + diff --git a/src/views/knowledge/aiFlow/ExecutionPanel.vue b/src/views/knowledge/aiFlow/ExecutionPanel.vue index 9d4ba67..45f0a03 100644 --- a/src/views/knowledge/aiFlow/ExecutionPanel.vue +++ b/src/views/knowledge/aiFlow/ExecutionPanel.vue @@ -13,16 +13,13 @@

AI对话

- +
-
- 流式: - -
+
+ 流式: + +
{{ chat.showParams ? '隐藏设置' : '显示设置' }} @@ -384,12 +381,15 @@ const scrollToBottom = (smooth = true) => { } // 确保滚动生效的备用方案 - setTimeout(() => { - if (wrapper.scrollTop + wrapper.clientHeight < scrollHeight - 10) { - chatScrollbarRef.value.setScrollTop(scrollHeight); - } - isAtBottom.value = true; - }, smooth ? 100 : 10); + setTimeout( + () => { + if (wrapper.scrollTop + wrapper.clientHeight < scrollHeight - 10) { + chatScrollbarRef.value.setScrollTop(scrollHeight); + } + isAtBottom.value = true; + }, + smooth ? 100 : 10 + ); }); } catch (error) { // 静默处理错误 @@ -400,19 +400,19 @@ const scrollToBottom = (smooth = true) => { // 专门用于流式传输的滚动函数(带防抖) const scrollToBottomForStreaming = () => { if (!chatScrollbarRef.value || streamingMessageIndex.value === -1) return; - + // 清除之前的定时器 if (scrollDebounceTimer) { clearTimeout(scrollDebounceTimer); } - + // 设置防抖,避免过度频繁的滚动 scrollDebounceTimer = setTimeout(() => { nextTick(() => { try { const wrapper = chatScrollbarRef.value.wrapRef; if (!wrapper) return; - + // 检查是否需要滚动(只有在用户在底部时才自动滚动) if (isAtBottom.value) { const scrollHeight = wrapper.scrollHeight; @@ -471,13 +471,13 @@ const handleClear = async () => { isExecuting.value = false; streamingMessageIndex.value = -1; currentStreamContent.value = ''; - + // 清理防抖定时器 if (scrollDebounceTimer) { clearTimeout(scrollDebounceTimer); scrollDebounceTimer = null; } - + ElMessage.success('聊天记录已清空'); }; @@ -536,7 +536,7 @@ const executionStatus = computed(() => { if (props.finalResult?.result?.nodes && props.finalResult.result.nodes.length > 0) { const nodes = props.finalResult.result.nodes; const lastNode = nodes[nodes.length - 1]; - + if (lastNode && lastNode.status) { const statusMap = { running: { text: '运行中', class: 'status-running' }, @@ -547,7 +547,7 @@ const executionStatus = computed(() => { return statusMap[lastNode.status] || { text: '等待中', class: 'status-pending' }; } } - + // 如果没有 finalResult 的 nodes,则使用 executionNodes const lastNode = props.executionNodes[props.executionNodes.length - 1]; @@ -685,7 +685,7 @@ const sendMessage = () => { content: '', isStreaming: true, }); - + streamingMessageIndex.value = aiMessageIndex; currentStreamContent.value = ''; // 由于已经有流式消息占位符,不需要额外的 loading 状态 @@ -695,7 +695,7 @@ const sendMessage = () => { isLoading.value = true; streamingMessageIndex.value = -1; } - + userInput.value = ''; // Force scroll to bottom after sending message @@ -717,7 +717,7 @@ watch( if (currentMessage && currentMessage.role === 'ai') { // 更新流式消息内容 currentMessage.content = newResult.chatMessage; - + // 检查是否完成流式传输 if (!newResult.isStreaming) { currentMessage.isStreaming = false; @@ -725,7 +725,7 @@ watch( isLoading.value = false; isExecuting.value = false; } - + // 滚动到底部(流式传输时使用专门的滚动函数) if (newResult.isStreaming) { scrollToBottomForStreaming(); @@ -742,7 +742,7 @@ watch( // 如果没有流式消息,但有结果,显示传统格式 if (newResult.result) { let responseText = ''; - + // 如果有聊天消息字段,优先显示 if (newResult.chatMessage) { responseText = newResult.chatMessage; @@ -1049,8 +1049,6 @@ onUpdated(() => { } } - - @keyframes bounce { 0%, 80%, diff --git a/src/views/knowledge/aiFlow/GreetingEditor.vue b/src/views/knowledge/aiFlow/GreetingEditor.vue index e0e6463..fba7449 100644 --- a/src/views/knowledge/aiFlow/GreetingEditor.vue +++ b/src/views/knowledge/aiFlow/GreetingEditor.vue @@ -1,196 +1,166 @@ \ No newline at end of file + diff --git a/src/views/knowledge/aiFlow/JsonPreviewPanel.vue b/src/views/knowledge/aiFlow/JsonPreviewPanel.vue index 7f6388e..9f77090 100644 --- a/src/views/knowledge/aiFlow/JsonPreviewPanel.vue +++ b/src/views/knowledge/aiFlow/JsonPreviewPanel.vue @@ -1,174 +1,164 @@ diff --git a/src/views/knowledge/aiFlow/MiniMap.vue b/src/views/knowledge/aiFlow/MiniMap.vue index 5d730a6..7905c96 100644 --- a/src/views/knowledge/aiFlow/MiniMap.vue +++ b/src/views/knowledge/aiFlow/MiniMap.vue @@ -1,329 +1,327 @@ \ No newline at end of file + diff --git a/src/views/knowledge/aiFlow/NodeContextMenu.vue b/src/views/knowledge/aiFlow/NodeContextMenu.vue index d2539f4..2f93580 100644 --- a/src/views/knowledge/aiFlow/NodeContextMenu.vue +++ b/src/views/knowledge/aiFlow/NodeContextMenu.vue @@ -60,15 +60,15 @@ export default { if (this.addPosition !== 'right' || !this.node || !this.parent) { return true; } - + // 获取当前节点已有的连接数量 const existingConnections = this.parent.connections?.filter((conn) => conn.sourceId === this.node.id) || []; - + // 如果不是分支节点且已经有连接,则不能向右添加 if (!['switch', 'question'].includes(this.node.type) && existingConnections.length > 0) { return false; } - + return true; }, nodeTypes() { diff --git a/src/views/knowledge/aiFlow/NodeMoreMenu.vue b/src/views/knowledge/aiFlow/NodeMoreMenu.vue index 9c18c3d..3b59e3c 100644 --- a/src/views/knowledge/aiFlow/NodeMoreMenu.vue +++ b/src/views/knowledge/aiFlow/NodeMoreMenu.vue @@ -1,313 +1,304 @@ \ No newline at end of file + diff --git a/src/views/knowledge/aiFlow/Run.vue b/src/views/knowledge/aiFlow/Run.vue index 8c6076b..7c5a842 100644 --- a/src/views/knowledge/aiFlow/Run.vue +++ b/src/views/knowledge/aiFlow/Run.vue @@ -1,336 +1,329 @@ diff --git a/src/views/knowledge/aiFlow/components/ChatDetail.vue b/src/views/knowledge/aiFlow/components/ChatDetail.vue index b8989bc..57684f5 100644 --- a/src/views/knowledge/aiFlow/components/ChatDetail.vue +++ b/src/views/knowledge/aiFlow/components/ChatDetail.vue @@ -1,138 +1,129 @@ diff --git a/src/views/knowledge/aiFlow/components/ChatMessage.vue b/src/views/knowledge/aiFlow/components/ChatMessage.vue index cd66a29..6944f96 100644 --- a/src/views/knowledge/aiFlow/components/ChatMessage.vue +++ b/src/views/knowledge/aiFlow/components/ChatMessage.vue @@ -1,222 +1,189 @@ diff --git a/src/views/knowledge/aiFlow/index.vue b/src/views/knowledge/aiFlow/index.vue index 6e6734b..da8cab5 100644 --- a/src/views/knowledge/aiFlow/index.vue +++ b/src/views/knowledge/aiFlow/index.vue @@ -13,7 +13,7 @@ :start-params="startNodeParams" :conversation-id="conversationId" @run="runWorkflow" - @update:stream="(value) => isStream = value" + @update:stream="(value) => (isStream = value)" @close="showExecutionPanel = false" /> @@ -302,7 +302,7 @@ export default { if (sourceNode) { // 获取源节点已有的连接数量 const existingConnections = this.connections.filter((conn) => conn.sourceId === params.sourceId); - + // 如果不是分支节点(switch 或 question),且已经有连接,则不允许创建新连接 if (!['switch', 'question'].includes(sourceNode.type) && existingConnections.length > 0) { this.$message.warning('除分支节点外,每个节点只能有一个子节点'); @@ -462,7 +462,7 @@ export default { if (this.contextMenuAddPosition === 'right') { // 获取当前节点已有的连接数量 const existingConnections = this.connections.filter((conn) => conn.sourceId === this.contextMenuNode.id); - + // 如果不是分支节点且已经有连接,则不允许添加 if (!['switch', 'question'].includes(this.contextMenuNode.type) && existingConnections.length > 0) { this.$message.warning('除分支节点外,每个节点只能有一个子节点'); diff --git a/src/views/knowledge/aiFlow/manage/index.vue b/src/views/knowledge/aiFlow/manage/index.vue index 1c0d927..42571d4 100644 --- a/src/views/knowledge/aiFlow/manage/index.vue +++ b/src/views/knowledge/aiFlow/manage/index.vue @@ -74,7 +74,6 @@
- { this.$log?.info?.(`节点执行进度: ${event.nodeName} (${event.nodeId})`); - + // 更新执行节点状态 if (event.nodeId && this.executionNodes) { const nodeIndex = this.executionNodes.findIndex((n: ExecutionNode) => n.id === event.nodeId); @@ -255,12 +255,12 @@ export default { this.executionNodes[nodeIndex] = { ...this.executionNodes[nodeIndex], status: 'running', - ...event.data + ...event.data, }; }); } } - + // 可以在这里添加进度条或其他UI更新 if (event.progress !== undefined) { this.$log?.info?.(`执行进度: ${event.progress}%`); @@ -270,7 +270,7 @@ export default { // 累积聊天消息内容 chatMessageContent += content; isChatStreaming = true; - + // 处理 tokens、duration 和 nodes 信息 if (isComplete) { if (tokens) { @@ -283,19 +283,19 @@ export default { this.executionNodes = nodes; } } - + // 实时更新executionResult以显示聊天消息 this.$nextTick(() => { this.executionResult = { ...this.executionResult, chatMessage: chatMessageContent, - isStreaming: !isComplete + isStreaming: !isComplete, }; }); }, onComplete: (result: FlowExecutionResult) => { this.$log?.info?.('工作流执行完成'); - + this.$nextTick(() => { this.executionNodes = result.nodes; // 如果有聊天消息,将其合并到结果中 @@ -303,7 +303,7 @@ export default { this.executionResult = { ...result.result, chatMessage: chatMessageContent, - isStreaming: false + isStreaming: false, }; } else { this.executionResult = result.result; @@ -315,7 +315,7 @@ export default { }, onError: (error: string) => { this.$log?.error?.('工作流执行失败:', error); - + this.$nextTick(() => { // 如果有部分聊天消息,也保留在错误结果中 const errorResult: any = { error }; @@ -339,7 +339,7 @@ export default { this.executionResult = { chatMessage: chatResult.chatMessage, result: chatResult.result, - isStreaming: false + isStreaming: false, }; this.isRunning = false; }); @@ -350,11 +350,11 @@ export default { * @param {ExecutionContext} context - 执行上下文 */ async executeWithHTTP(this: any, context: ExecutionContext): Promise { - const { data } = await executeFlow({ - id: this.id, - params: context.params, - envs: context.envs, - stream: false + const { data } = await executeFlow({ + id: this.id, + params: context.params, + envs: context.envs, + stream: false, }); // 处理普通JSON响应 @@ -389,7 +389,7 @@ export default { this.executionResult = { ...this.executionResult, chatMessage: chatMessage, - isStreaming: false + isStreaming: false, }; } } diff --git a/src/views/knowledge/aiFlow/nodes/HttpNode.vue b/src/views/knowledge/aiFlow/nodes/HttpNode.vue index 9ae4c6b..798f7d6 100644 --- a/src/views/knowledge/aiFlow/nodes/HttpNode.vue +++ b/src/views/knowledge/aiFlow/nodes/HttpNode.vue @@ -1,55 +1,54 @@ \ No newline at end of file + diff --git a/src/views/knowledge/aiFlow/nodes/MCPNode.vue b/src/views/knowledge/aiFlow/nodes/MCPNode.vue index 8283046..0aaf842 100644 --- a/src/views/knowledge/aiFlow/nodes/MCPNode.vue +++ b/src/views/knowledge/aiFlow/nodes/MCPNode.vue @@ -57,4 +57,4 @@ export default { color: #666; font-weight: 500; } - \ No newline at end of file + diff --git a/src/views/knowledge/aiFlow/nodes/TextNode.vue b/src/views/knowledge/aiFlow/nodes/TextNode.vue index f80ff23..4fd9bd5 100644 --- a/src/views/knowledge/aiFlow/nodes/TextNode.vue +++ b/src/views/knowledge/aiFlow/nodes/TextNode.vue @@ -85,4 +85,4 @@ export default { line-height: 1.4; word-break: break-word; } - \ No newline at end of file + diff --git a/src/views/knowledge/aiFlow/nodes/common.ts b/src/views/knowledge/aiFlow/nodes/common.ts index 20bf62a..b32f19b 100644 --- a/src/views/knowledge/aiFlow/nodes/common.ts +++ b/src/views/knowledge/aiFlow/nodes/common.ts @@ -2,17 +2,17 @@ import { Node } from '../types/node'; import { PropType } from 'vue'; export default { - inject: ['parent'], - props: { - node: { - type: Object as PropType, - required: true - } - }, - data() { - return { - inputParams: this.node.inputParams || [], - outputParams: this.node.outputParams || [] - } - } -} \ No newline at end of file + inject: ['parent'], + props: { + node: { + type: Object as PropType, + required: true, + }, + }, + data() { + return { + inputParams: this.node.inputParams || [], + outputParams: this.node.outputParams || [], + }; + }, +}; diff --git a/src/views/knowledge/aiFlow/nodes/nodeTypes.ts b/src/views/knowledge/aiFlow/nodes/nodeTypes.ts index 6e078e8..af5d7fe 100644 --- a/src/views/knowledge/aiFlow/nodes/nodeTypes.ts +++ b/src/views/knowledge/aiFlow/nodes/nodeTypes.ts @@ -96,7 +96,7 @@ export const nodeTypes: NodeType[] = [ { name: '分支2', value: 1, - } + }, ], }, outputParams: [ @@ -151,7 +151,7 @@ export const nodeTypes: NodeType[] = [ { name: 'result', type: 'String', - } + }, ], }, { @@ -245,7 +245,8 @@ export const nodeTypes: NodeType[] = [ messages: [ { role: 'user', - content: '你是一个问题总结助手。\n任务:根据用户提问 ${arg1} 和系统答案 ${arg2},生成一个标准的问题答案。\n要求:基于系统答案内容回答,回答准确、简洁、有用。', + content: + '你是一个问题总结助手。\n任务:根据用户提问 ${arg1} 和系统答案 ${arg2},生成一个标准的问题答案。\n要求:基于系统答案内容回答,回答准确、简洁、有用。', }, ], modelConfig: { diff --git a/src/views/knowledge/aiFlow/panels/DbPanel.vue b/src/views/knowledge/aiFlow/panels/DbPanel.vue index 08b60cd..41882d2 100644 --- a/src/views/knowledge/aiFlow/panels/DbPanel.vue +++ b/src/views/knowledge/aiFlow/panels/DbPanel.vue @@ -85,11 +85,10 @@ import { Plus, Delete } from '@element-plus/icons-vue'; import common from './common.ts'; import './panel.css'; -import {list} from "/@/api/gen/datasource"; +import { list } from '/@/api/gen/datasource'; import CodeEditor from '/@/views/knowledge/aiFlow/components/CodeEditor.vue'; import { ref } from 'vue'; - export default { name: 'DbPanel', components: { @@ -100,8 +99,7 @@ export default { mixins: [common], data() { return { - dbList: [ - ], + dbList: [], }; }, created() { @@ -109,8 +107,8 @@ export default { }, methods: { async loadDbList() { - const {data} = await list() - this.dbList = data + const { data } = await list(); + this.dbList = data; }, handleDbChange() { if (!this.node.dbParams.dbId) { @@ -126,7 +124,7 @@ export default { setup() { const result = ref(null); return { - result + result, }; }, }; diff --git a/src/views/knowledge/aiFlow/panels/HttpPanel.vue b/src/views/knowledge/aiFlow/panels/HttpPanel.vue index 16d8ea0..1c84fd8 100644 --- a/src/views/knowledge/aiFlow/panels/HttpPanel.vue +++ b/src/views/knowledge/aiFlow/panels/HttpPanel.vue @@ -249,4 +249,4 @@ export default { }, }, }; - \ No newline at end of file + diff --git a/src/views/knowledge/aiFlow/panels/MCPPanel.vue b/src/views/knowledge/aiFlow/panels/MCPPanel.vue index 013275f..acfcabb 100644 --- a/src/views/knowledge/aiFlow/panels/MCPPanel.vue +++ b/src/views/knowledge/aiFlow/panels/MCPPanel.vue @@ -60,12 +60,12 @@
请求提示词: -
@@ -134,7 +134,7 @@ export default { }, computed: { selectedMcp() { - return this.mcpList.find(mcp => mcp.mcpId === this.node.mcpParams?.mcpId); + return this.mcpList.find((mcp) => mcp.mcpId === this.node.mcpParams?.mcpId); }, }, async mounted() { @@ -148,7 +148,7 @@ export default { } await this.fetchMcpList(); - + // 确保输出参数有默认值 if (!this.outputParams.length) { this.outputParams.push({ @@ -180,4 +180,4 @@ export default { .w-full { margin-right: 15px; } - \ No newline at end of file + diff --git a/src/views/knowledge/aiFlow/panels/StartPanel.vue b/src/views/knowledge/aiFlow/panels/StartPanel.vue index 95743d7..510ac97 100644 --- a/src/views/knowledge/aiFlow/panels/StartPanel.vue +++ b/src/views/knowledge/aiFlow/panels/StartPanel.vue @@ -1,302 +1,267 @@ \ No newline at end of file + diff --git a/src/views/knowledge/aiFlow/types/executor.ts b/src/views/knowledge/aiFlow/types/executor.ts index b5141da..6dd8980 100644 --- a/src/views/knowledge/aiFlow/types/executor.ts +++ b/src/views/knowledge/aiFlow/types/executor.ts @@ -8,140 +8,140 @@ import { InputParams, Params } from './utils'; * 节点执行结果接口 */ export interface NodeExecutionResponse { - nodeId: string; - type: string; - result: any; - timestamp: number; - tokens?: number; + nodeId: string; + type: string; + result: any; + timestamp: number; + tokens?: number; } /** * 代码节点参数接口 */ export interface CodeNodeParams { - code: string; + code: string; } /** * 数据库节点参数接口 */ export interface DbNodeParams { - dbId: string | number; - sql: string; + dbId: string | number; + sql: string; } /** * HTTP节点参数接口 */ export interface HttpNodeParams { - url: string; - method: string; - contentType: string; - jsonBody?: string; - headerParams?: Array<{ - name: string; - type: string; - }>; - bodyParams?: Array<{ - name: string; - type: string; - }>; - paramsParams?: Array<{ - name: string; - type: string; - }>; + url: string; + method: string; + contentType: string; + jsonBody?: string; + headerParams?: Array<{ + name: string; + type: string; + }>; + bodyParams?: Array<{ + name: string; + type: string; + }>; + paramsParams?: Array<{ + name: string; + type: string; + }>; } /** * LLM节点参数接口 */ export interface LLMNodeParams { - modelConfig: Record; - messages: Array<{ - role: string; - content: string; - }>; + modelConfig: Record; + messages: Array<{ + role: string; + content: string; + }>; } /** * 通知节点参数接口 */ export interface NoticeNodeParams { - templateCode: string; + templateCode: string; } /** * 问题节点参数接口 */ export interface QuestionNodeParams { - question: string; + question: string; } /** * Switch节点参数接口 */ export interface SwitchNodeParams { - cases: Array<{ - value: any; - }>; + cases: Array<{ + value: any; + }>; } /** * 代码节点接口 */ export interface CodeNode extends Node { - codeParams: CodeNodeParams; + codeParams: CodeNodeParams; } /** * 数据库节点接口 */ export interface DbNode extends Node { - dbParams: DbNodeParams; + dbParams: DbNodeParams; } /** * HTTP节点接口 */ export interface HttpNode extends Node { - httpParams: HttpNodeParams; + httpParams: HttpNodeParams; } /** * LLM节点接口 */ export interface LLMNode extends Node { - llmParams: LLMNodeParams; + llmParams: LLMNodeParams; } /** * 通知节点接口 */ export interface NoticeNode extends Node { - noticeParams: NoticeNodeParams; + noticeParams: NoticeNodeParams; } /** * 问题节点接口 */ export interface QuestionNode extends Node { - questionParams: QuestionNodeParams; + questionParams: QuestionNodeParams; } /** * Switch节点接口 */ export interface SwitchNode extends Node { - switchParams: SwitchNodeParams; - code?: string; + switchParams: SwitchNodeParams; + code?: string; } /** * 执行器函数类型 */ export type ExecutorFunction = ( - node: T, - inputParams: InputParams, - nodes: Node[], - options?: ExecutionOptions -) => Promise; \ No newline at end of file + node: T, + inputParams: InputParams, + nodes: Node[], + options?: ExecutionOptions +) => Promise; diff --git a/src/views/knowledge/aiFlow/types/panel.ts b/src/views/knowledge/aiFlow/types/panel.ts index caac3dc..3ec57cd 100644 --- a/src/views/knowledge/aiFlow/types/panel.ts +++ b/src/views/knowledge/aiFlow/types/panel.ts @@ -4,24 +4,24 @@ import { Node, Connection, ParamItem } from './node'; // Panel component interface export interface PanelComponent { - parent: { - nodes: Node[]; - connections: Connection[]; - env?: Array<{ name: string; value: any }>; - }; - node: Node; - $emit: (event: string, ...args: any[]) => void; + parent: { + nodes: Node[]; + connections: Connection[]; + env?: Array<{ name: string; value: any }>; + }; + node: Node; + $emit: (event: string, ...args: any[]) => void; } // Node with params export interface NodeWithParams extends Node { - inputParams: ParamItem[]; - outputParams: ParamItem[]; + inputParams: ParamItem[]; + outputParams: ParamItem[]; } // Previous node output structure export interface PreviousNodeOutput { - id: string; - name: string; - list: ParamItem[]; -} \ No newline at end of file + id: string; + name: string; + list: ParamItem[]; +} diff --git a/src/views/knowledge/aiFlow/utils/flow.ts b/src/views/knowledge/aiFlow/utils/flow.ts index 995ebf5..c6809e2 100644 --- a/src/views/knowledge/aiFlow/utils/flow.ts +++ b/src/views/knowledge/aiFlow/utils/flow.ts @@ -1,22 +1,22 @@ import { FlowClass } from '../types/utils'; export default class Flow implements FlowClass { - /** - * 获取统一的URL参数 - * @param type - 流程类型 - * @param id - 流程ID - * @returns 格式化的URL字符串 - */ - static runUrl(type: string, id: string): string { - return `/flow/${type}/${id}`; - } + /** + * 获取统一的URL参数 + * @param type - 流程类型 + * @param id - 流程ID + * @returns 格式化的URL字符串 + */ + static runUrl(type: string, id: string): string { + return `/flow/${type}/${id}`; + } - /** - * 获取icon地址 - * @param icon - 图标路径 - * @returns 图标路径或默认图标 - */ - static getIcon(icon?: string): string { - return icon ? icon : '/img/chat/icon.png'; - } -} \ No newline at end of file + /** + * 获取icon地址 + * @param icon - 图标路径 + * @returns 图标路径或默认图标 + */ + static getIcon(icon?: string): string { + return icon ? icon : '/img/chat/icon.png'; + } +} diff --git a/src/views/knowledge/aiMcpConfig/index.vue b/src/views/knowledge/aiMcpConfig/index.vue index 7d22451..2b59378 100644 --- a/src/views/knowledge/aiMcpConfig/index.vue +++ b/src/views/knowledge/aiMcpConfig/index.vue @@ -132,7 +132,7 @@ >
- +
@@ -158,7 +158,7 @@ - +
diff --git a/src/views/knowledge/aiMcpConfig/tools.vue b/src/views/knowledge/aiMcpConfig/tools.vue index c23c6b3..28e8403 100644 --- a/src/views/knowledge/aiMcpConfig/tools.vue +++ b/src/views/knowledge/aiMcpConfig/tools.vue @@ -1,50 +1,50 @@