diff --git a/src/apis/paths/model.ts b/src/apis/paths/model.ts index e6d011fa67d20d51b2d9bdaff882694f52f7e492..38a0fb9ec2cb42f72cf05fbe5ef8a1b673c437d6 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 891aacc931e25c56977687c0501b7cf52b847811..aceff82ce17af88bf8ef0102d11a0b6c0d7a50bc 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 6e74398a0c3db99aea97e6931fc0eaadf9b85ce0..ba1c8cccf39bb080829b3c351640bef98adb9667 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 6364ea2262c9e16e6b50d848b06b28d5cb24ca67..a5a3c959db2ff7d581d0314ce02c212229067185 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; }