diff --git a/src/renderer/src/pages/settings/ProviderSettings/index.tsx b/src/renderer/src/pages/settings/ProviderSettings/index.tsx index c382ffa415..bb06dfe995 100644 --- a/src/renderer/src/pages/settings/ProviderSettings/index.tsx +++ b/src/renderer/src/pages/settings/ProviderSettings/index.tsx @@ -4,6 +4,7 @@ import Scrollbar from '@renderer/components/Scrollbar' import { getProviderLogo } from '@renderer/config/providers' import { useAllProviders, useProviders } from '@renderer/hooks/useProvider' import ImageStorage from '@renderer/services/ImageStorage' +import { INITIAL_PROVIDERS } from '@renderer/store/llm' import { Provider } from '@renderer/types' import { droppableReorder, generateColorFromChar, getFirstCharacter, uuid } from '@renderer/utils' import { Avatar, Button, Dropdown, Input, MenuProps, Tag } from 'antd' @@ -115,86 +116,89 @@ const ProvidersList: FC = () => { onClick: () => ModelNotesPopup.show({ provider }) } - const menus = [ - { - label: t('common.edit'), - key: 'edit', - icon: , - async onClick() { - const { name, type, logoFile, logo } = await AddProviderPopup.show(provider) + const editMenu = { + label: t('common.edit'), + key: 'edit', + icon: , + async onClick() { + const { name, type, logoFile, logo } = await AddProviderPopup.show(provider) - if (name) { - updateProvider({ ...provider, name, type }) - if (provider.id) { - if (logoFile && logo) { - try { - await ImageStorage.set(`provider-${provider.id}`, logo) - setProviderLogos((prev) => ({ - ...prev, - [provider.id]: logo - })) - } catch (error) { - console.error('Failed to save logo', error) - window.message.error('更新Provider Logo失败') - } - } else if (logo === undefined && logoFile === undefined) { - try { - await ImageStorage.set(`provider-${provider.id}`, '') - setProviderLogos((prev) => { - const newLogos = { ...prev } - delete newLogos[provider.id] - return newLogos - }) - } catch (error) { - console.error('Failed to reset logo', error) - } + if (name) { + updateProvider({ ...provider, name, type }) + if (provider.id) { + if (logoFile && logo) { + try { + await ImageStorage.set(`provider-${provider.id}`, logo) + setProviderLogos((prev) => ({ + ...prev, + [provider.id]: logo + })) + } catch (error) { + console.error('Failed to save logo', error) + window.message.error('更新Provider Logo失败') + } + } else if (logo === undefined && logoFile === undefined) { + try { + await ImageStorage.set(`provider-${provider.id}`, '') + setProviderLogos((prev) => { + const newLogos = { ...prev } + delete newLogos[provider.id] + return newLogos + }) + } catch (error) { + console.error('Failed to reset logo', error) } } } } - }, - noteMenu, - { - label: t('common.delete'), - key: 'delete', - icon: , - danger: true, - async onClick() { - window.modal.confirm({ - title: t('settings.provider.delete.title'), - content: t('settings.provider.delete.content'), - okButtonProps: { danger: true }, - okText: t('common.delete'), - centered: true, - onOk: async () => { - // 删除provider前先清理其logo - if (provider.id) { - try { - await ImageStorage.remove(`provider-${provider.id}`) - setProviderLogos((prev) => { - const newLogos = { ...prev } - delete newLogos[provider.id] - return newLogos - }) - } catch (error) { - console.error('Failed to delete logo', error) - } - } - - setSelectedProvider(providers.filter((p) => p.isSystem)[0]) - removeProvider(provider) - } - }) - } } - ] + } + + const deleteMenu = { + label: t('common.delete'), + key: 'delete', + icon: , + danger: true, + async onClick() { + window.modal.confirm({ + title: t('settings.provider.delete.title'), + content: t('settings.provider.delete.content'), + okButtonProps: { danger: true }, + okText: t('common.delete'), + centered: true, + onOk: async () => { + // 删除provider前先清理其logo + if (provider.id) { + try { + await ImageStorage.remove(`provider-${provider.id}`) + setProviderLogos((prev) => { + const newLogos = { ...prev } + delete newLogos[provider.id] + return newLogos + }) + } catch (error) { + console.error('Failed to delete logo', error) + } + } + + setSelectedProvider(providers.filter((p) => p.isSystem)[0]) + removeProvider(provider) + } + }) + } + } + + const menus = [editMenu, noteMenu, deleteMenu] if (providers.filter((p) => p.id === provider.id).length > 1) { return menus } if (provider.isSystem) { - return [noteMenu] + if (INITIAL_PROVIDERS.find((p) => p.id === provider.id)) { + return [noteMenu] + } + return [noteMenu, deleteMenu] } return menus