From bf87f01dac8df3916adf8f9af1f2c1c675f72f30 Mon Sep 17 00:00:00 2001 From: Ethan-Zhang Date: Sun, 9 Nov 2025 20:27:46 +0800 Subject: [PATCH] =?UTF-8?q?Fix:=20=E6=B6=88=E6=81=AF=E4=B8=BB=E8=B0=93?= =?UTF-8?q?=E6=AD=A3=E7=A1=AE=E6=B8=B2=E6=9F=93&=E6=A8=A1=E5=9E=8B?= =?UTF-8?q?=E8=AE=BE=E7=BD=AE=E9=81=97=E6=BC=8F=E4=BF=AE=E6=94=B9=E6=8F=90?= =?UTF-8?q?=E4=BA=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/apis/paths/model.ts | 1 + .../dialogue/components/MessageDetail.vue | 29 +++++++++++++++++-- src/views/settings/Model.vue | 7 +++++ src/views/settings/components/AddModel.vue | 13 ++++++++- 4 files changed, 46 insertions(+), 4 deletions(-) diff --git a/src/apis/paths/model.ts b/src/apis/paths/model.ts index e6d011fa..38a0fb9e 100644 --- a/src/apis/paths/model.ts +++ b/src/apis/paths/model.ts @@ -88,6 +88,7 @@ const createOrUpdateModel = (params: { modelName: string; maxTokens: number; type?: string | string[]; + provider?: string; }) => { return put('/api/llm', params, { llmId: params.llmId }); }; diff --git a/src/views/dialogue/components/MessageDetail.vue b/src/views/dialogue/components/MessageDetail.vue index 891aacc9..aceff82c 100644 --- a/src/views/dialogue/components/MessageDetail.vue +++ b/src/views/dialogue/components/MessageDetail.vue @@ -107,12 +107,35 @@ const POLLING_INTERVAL = 30000; // 30秒 // 将后端数据转换为前端显示格式 const transformUserMsgToMessage = (userMsg: UserMsg): Message => { + // 判断当前用户是发送者还是接收者 + const currentUsername = userinfo.value.username; + const isReceiver = userMsg.receiverId === currentUsername; + + let content = ''; + if (userMsg.msgType === 'invitation') { + // 邀请消息 + if (isReceiver) { + // 当前用户是接收者 + content = `${userMsg.senderName || '用户'} 邀请您加入团队 "${userMsg.teamName}"`; + } else { + // 当前用户是发送者 + content = `您邀请 ${userMsg.receiverName || '用户'} 加入团队 "${userMsg.teamName}"`; + } + } else { + // 申请消息 + if (isReceiver) { + // 当前用户是接收者 + content = `${userMsg.senderName || '用户'} 申请加入团队 "${userMsg.teamName}"`; + } else { + // 当前用户是发送者 + content = `您申请加入团队 "${userMsg.teamName}"`; + } + } + return { id: userMsg.msgId, type: userMsg.msgType, - content: userMsg.msgType === 'invitation' - ? `${userMsg.senderName || '用户'} 邀请您加入团队 "${userMsg.teamName}"` - : `${userMsg.senderName || '用户'} 申请加入团队 "${userMsg.teamName}"`, + content, time: new Date(userMsg.createdTime).toLocaleString('zh-CN', { month: '2-digit', day: '2-digit', diff --git a/src/views/settings/Model.vue b/src/views/settings/Model.vue index 6e74398a..ba1c8ccc 100644 --- a/src/views/settings/Model.vue +++ b/src/views/settings/Model.vue @@ -109,6 +109,13 @@ function onModelEdit(model?: Model) { if (!model) return; dialogTitle.value = t(`common.edit`, { name: t('settings.model') }); selectedModel.value = model; + // 在编辑模式下,根据模型的provider找到对应的provider信息并传递 + if (model.provider) { + const providerInfo = modelProviders.value.find(p => p.provider === model.provider); + if (providerInfo) { + selectedProvider.value = providerInfo; + } + } isAddModelVisible.value = true; } diff --git a/src/views/settings/components/AddModel.vue b/src/views/settings/components/AddModel.vue index 6364ea22..a5a3c959 100644 --- a/src/views/settings/components/AddModel.vue +++ b/src/views/settings/components/AddModel.vue @@ -15,6 +15,7 @@ interface From { apiKey: string; maxTokens: string; type: string[]; // 改为数组支持多选 + provider?: string; // 添加provider字段用于编辑模式 } export interface ModelProvider { @@ -38,6 +39,7 @@ const props = defineProps<{ modelName: string; maxTokens: number; type?: string | string[]; // 支持单个类型或类型数组 + provider?: string; // 模型提供商 }; title?: string; provider?: ModelProvider; @@ -53,6 +55,7 @@ const form = ref({ apiKey: '', maxTokens: '', type: [], // 默认为空数组 + provider: undefined, }); const formRef = ref(); @@ -106,6 +109,7 @@ async function onConfirm(formEl: FormInstance | undefined) { modelName: form.value.model, maxTokens: Number(form.value.maxTokens), type: form.value.type, + provider: form.value.provider, }); if (err) { ElMessage.error(err.message); @@ -125,7 +129,7 @@ watch( } if (props.model) { - const { openaiApiKey, openaiBaseUrl, maxTokens, modelName, type } = + const { openaiApiKey, openaiBaseUrl, maxTokens, modelName, type, provider } = props.model; form.value = { url: openaiBaseUrl, @@ -133,16 +137,23 @@ watch( apiKey: openaiApiKey, maxTokens: String(maxTokens), type: type ? (Array.isArray(type) ? type : [type]) : [], + provider: provider, }; } if (props.provider) { form.value.url = props.provider.url; + form.value.provider = props.provider.provider; } }); }, ); const disabledUrl = computed(() => { + // 对于所有 public 类型的 provider,无论创建还是编辑都不允许修改 URL + if (props.provider && props.provider.type === 'public') { + return true; + } + // 对于有固定 URL 的 provider,也不允许修改 if (props.provider && props.provider.url) { return true; } -- Gitee