From 2f50cfacf97b8f0e74de8721d6ba6783beb92838 Mon Sep 17 00:00:00 2001 From: cc500 <2014434568@qq.com> Date: Mon, 23 Jun 2025 17:08:05 +0800 Subject: [PATCH 1/3] =?UTF-8?q?=E7=9F=A5=E8=AF=86=E5=BA=93=E6=A0=B7?= =?UTF-8?q?=E5=BC=8F=E4=BF=AE=E5=A4=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../dialogue/components/MultiSelectTags.vue | 22 ++++++++++--------- 1 file changed, 12 insertions(+), 10 deletions(-) diff --git a/src/views/dialogue/components/MultiSelectTags.vue b/src/views/dialogue/components/MultiSelectTags.vue index 63b65799..9f062863 100644 --- a/src/views/dialogue/components/MultiSelectTags.vue +++ b/src/views/dialogue/components/MultiSelectTags.vue @@ -264,7 +264,7 @@ const checkTagsOverflow = () => { :deep(.el-collapse-item__content) { border-bottom: none; padding-bottom: 0px; - margin: 1px; + margin: 2px; } :deep(.el-collapse-item__header) { @@ -273,7 +273,7 @@ const checkTagsOverflow = () => { justify-content: flex-end; align-items: center; height: 16px; - margin-bottom: 8px; + margin-bottom: 0px; color: #8d98aa; font-size: 12px; border-top: none; @@ -441,6 +441,7 @@ const checkTagsOverflow = () => { /* 全局样式,不使用scoped */ .global-tag-modal { position: fixed; + border-radius: 8px; top: 60px; right: 16px; bottom: 46px; @@ -457,7 +458,7 @@ const checkTagsOverflow = () => { display: flex; justify-content: space-between; align-items: center; - padding: 15px; + padding: 24px 24px 0px 24px; h3 { margin: 0; @@ -487,7 +488,7 @@ const checkTagsOverflow = () => { .multi-select-list { display: flex; flex-direction: column; - gap: 12px; + gap: 16px; width: 100%; max-width: 600px; margin: 0 auto; @@ -501,8 +502,8 @@ const checkTagsOverflow = () => { border-radius: 8px; background-image: linear-gradient( to right, - rgba(109, 117, 250, 0.2), - rgba(90, 179, 255, 0.2) + rgb(231, 243, 255), + rgb(233, 237, 254) ); cursor: pointer; transition: all 0.2s ease; @@ -514,8 +515,9 @@ const checkTagsOverflow = () => { } &.selected { - border-color: #3498db; - background-color: rgba(52, 152, 219, 0.05); + border-color: #6395FD; + background-color: #6395FD; + outline: 2px solid #6395FD; &::after { content: ''; @@ -526,8 +528,8 @@ const checkTagsOverflow = () => { height: 0; border-style: solid; border-width: 0 24px 24px 0; - border-color: transparent #3498db transparent transparent; - border-radius: 4px; + border-color: transparent #6395FD transparent transparent; + border-radius: 0px 4px; } } } -- Gitee From e2a36843d2087857b41bf1a254f8a3667c12636f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=90=B4=E8=82=89=E6=A1=82?= <2014434568@qq.com> Date: Mon, 23 Jun 2025 09:08:46 +0000 Subject: [PATCH 2/3] =?UTF-8?q?Revert=20"=E6=9B=B4=E6=96=B0=20mcp=20?= =?UTF-8?q?=E4=B8=8A=E4=BC=A0icon=20=E6=8E=A5=E5=8F=A3=E4=B8=8E=E9=80=BB?= =?UTF-8?q?=E8=BE=91"?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This reverts commit a9a0033dcf7c2db0ef8d6918548fb62959990ca8. --- src/apis/paths/mcp.ts | 22 ------------------- .../createapp/components/AgentAppConfig.vue | 9 -------- src/views/createapp/index.vue | 3 +-- 3 files changed, 1 insertion(+), 33 deletions(-) diff --git a/src/apis/paths/mcp.ts b/src/apis/paths/mcp.ts index 3d95daa3..7d729735 100644 --- a/src/apis/paths/mcp.ts +++ b/src/apis/paths/mcp.ts @@ -83,32 +83,10 @@ const activeMcpService = (id: string, active: boolean) => { return post<{ serviceId: string }>(`${MCP_BASE_URL}/${id}`, { active }); }; -// 定义一个名为uploadMcpIcon的函数,接收两个参数id和active -const uploadMcpIcon = (params: { - service_id: string; - edit: boolean; - icon: File; -}) => { - console.log('uploadMcpIcon', params.icon); - const formData = new FormData(); - formData.append('icon', params.icon); - // 使用post方法向MCP_BASE_URL/${id}发送请求,请求体为{ icon: params.icon } - return post<{ icon: string }>( - `${MCP_BASE_URL}`, - formData, - { - service_id: params.service_id, - edit: params.edit, - }, - { 'Content-Type': 'multipart/form-data' }, - ); -}; - export const mcpApi = { getMcpList, getMcpServiceDetail, createOrUpdateMcpService, deleteMcpService, activeMcpService, - uploadMcpIcon, }; diff --git a/src/views/createapp/components/AgentAppConfig.vue b/src/views/createapp/components/AgentAppConfig.vue index 33e17df2..743158e7 100644 --- a/src/views/createapp/components/AgentAppConfig.vue +++ b/src/views/createapp/components/AgentAppConfig.vue @@ -139,15 +139,6 @@ const beforeIconUpload: UploadProps['beforeUpload'] = async (rawFile) => { const reader = new FileReader(); reader.onload = (e) => { createAppForm.icon = e.target?.result as string; - // 在上传时直接upload icon - (async() => { - console.log('Uploading icon...',rawFile,e.target?.result); - await api.uploadMcpIcon({ - icon: rawFile, - service_id: route.query?.appId as string, - edit: true, - }); - })() }; reader.readAsDataURL(rawFile); return false; diff --git a/src/views/createapp/index.vue b/src/views/createapp/index.vue index 303ad5e4..b1199aff 100644 --- a/src/views/createapp/index.vue +++ b/src/views/createapp/index.vue @@ -137,11 +137,10 @@ const saveApp = async (type: 'agent' | 'flow') => { } else if (type === 'agent') { const formData = agentAppConfigRef.value.createAppForm; if (!formData) return; - // 配置 agent 接口去掉icon const [, res] = await api.createOrUpdateApp({ appId: route.query?.appId as string, appType: type, - // icon: formData.icon, + icon: formData.icon, name: formData.name, description: formData.description, dialogRounds: formData.dialogRounds, -- Gitee From de51284509f51711da6e7ade1e532c4f4f07de76 Mon Sep 17 00:00:00 2001 From: cc500 <2014434568@qq.com> Date: Mon, 23 Jun 2025 20:24:32 +0800 Subject: [PATCH 3/3] =?UTF-8?q?=E6=9B=B4=E6=96=B0=E6=8F=92=E4=BB=B6?= =?UTF-8?q?=E4=B8=AD=E5=BF=83=EF=BC=8C=E5=88=9B=E5=BB=BA=E7=BC=96=E8=BE=91?= =?UTF-8?q?=E6=8F=92=E4=BB=B6=E5=9B=BE=E7=89=87=E4=B8=8A=E4=BC=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/apis/paths/mcp.ts | 25 ++++++++++++- src/views/api/components/McpDrawer.vue | 49 +++++++++++++++++++++----- 2 files changed, 64 insertions(+), 10 deletions(-) diff --git a/src/apis/paths/mcp.ts b/src/apis/paths/mcp.ts index 7d729735..31ec1eb5 100644 --- a/src/apis/paths/mcp.ts +++ b/src/apis/paths/mcp.ts @@ -72,7 +72,10 @@ const createOrUpdateMcpService = (params: { config: string; mcpType: 'stdio' | 'sse' | 'stream'; }) => { - return post(`${MCP_BASE_URL}`, params); + return post<{ + service_id: string; + name: string; + }>(`${MCP_BASE_URL}`, params); }; const deleteMcpService = (id: string) => { @@ -83,10 +86,30 @@ const activeMcpService = (id: string, active: boolean) => { return post<{ serviceId: string }>(`${MCP_BASE_URL}/${id}`, { active }); }; +// 定义一个名为uploadMcpIcon的函数,接收两个参数serviceId和icon +const uploadMcpIcon = (params: { + serviceId: string; + icon: File; +}) => { + console.log('uploadMcpIcon', params.icon); + const formData = new FormData(); + formData.append('icon', params.icon); + // 使用post方法向MCP_BASE_URL/${id}发送请求,请求体为{ icon: params.icon } + return post<{ icon: string }>( + `${MCP_BASE_URL}`, + formData, + { + serviceId: params.serviceId, + }, + { 'Content-Type': 'multipart/form-data' }, + ); +}; + export const mcpApi = { getMcpList, getMcpServiceDetail, createOrUpdateMcpService, deleteMcpService, activeMcpService, + uploadMcpIcon }; diff --git a/src/views/api/components/McpDrawer.vue b/src/views/api/components/McpDrawer.vue index ea55682d..ad67e205 100644 --- a/src/views/api/components/McpDrawer.vue +++ b/src/views/api/components/McpDrawer.vue @@ -56,6 +56,7 @@ const form = reactive({ description: '', type: 'stdio', mcpConfig: '', + rawFile: null, }); const formRef = ref(); @@ -113,6 +114,8 @@ const beforeIconUpload: UploadProps['beforeUpload'] = async (rawFile) => { const reader = new FileReader(); reader.onload = (e) => { form.icon = e.target?.result as string; + form.rawFile = rawFile; + console.log('Icon uploaded:', rawFile); }; reader.readAsDataURL(rawFile); return false; @@ -125,14 +128,17 @@ const beforeIconUpload: UploadProps['beforeUpload'] = async (rawFile) => { return false; } }; - async function onConfirm(formEl: FormInstance | undefined) { if (!formEl) return; + const json = jsonEditorRef.value.getJsonValue(); if (json) form.mcpConfig = json; - await formEl.validate(async (valid) => { - if (!valid) return; - const [, res] = await api.createOrUpdateMcpService({ + + const valid = await formEl.validate(); + if (!valid) return; + + try { + const [, serviceRes] = await api.createOrUpdateMcpService({ serviceId: props.serviceId || undefined, overview: form.overview, icon: form.icon, @@ -142,12 +148,37 @@ async function onConfirm(formEl: FormInstance | undefined) { mcpType: form.type, }); - if (res) { - formEl.resetFields(); - jsonEditorRef.value.setJsonValue('{\n \n}'); - emits('success'); + console.log('MCP Service Response:', serviceRes); + console.log('MCP Service Response:', serviceRes.result.serviceId, form.rawFile); + + const serviceId = serviceRes.result.serviceId; + if (form.rawFile) { + try { + await api.uploadMcpIcon({ + serviceId, + icon: form.rawFile, + }); + } catch (error) { + console.error('Error uploading icon:', error); + ElMessage({ + message: 'Failed to upload icon!', + type: 'error', + }); + // 不阻断流程,仅提示 + } } - }); + + formEl.resetFields(); + jsonEditorRef.value.setJsonValue('{\n \n}'); + emits('success'); + + } catch (error) { + console.error('Create or update MCP service failed:', error); + ElMessage({ + message: 'Failed to create/update service!', + type: 'error', + }); + } } async function getMcpServiceDetail(serviceId: string) { -- Gitee