feat(web): model ui update
This commit is contained in:
@@ -557,6 +557,7 @@ export const en = {
|
|||||||
add: 'Add',
|
add: 'Add',
|
||||||
item: 'item',
|
item: 'item',
|
||||||
apiKeyNum: ' API Keys',
|
apiKeyNum: ' API Keys',
|
||||||
|
official: 'Official',
|
||||||
|
|
||||||
llm: 'LLM',
|
llm: 'LLM',
|
||||||
chat: 'Chat',
|
chat: 'Chat',
|
||||||
|
|||||||
@@ -1123,6 +1123,7 @@ export const zh = {
|
|||||||
add: '添加',
|
add: '添加',
|
||||||
item: '个',
|
item: '个',
|
||||||
apiKeyNum: '个 API Key',
|
apiKeyNum: '个 API Key',
|
||||||
|
official: '官方',
|
||||||
|
|
||||||
llm: 'LLM',
|
llm: 'LLM',
|
||||||
chat: 'Chat',
|
chat: 'Chat',
|
||||||
|
|||||||
@@ -56,7 +56,10 @@ const ModelSquare = forwardRef <BaseRef, { query: any; handleEdit: (vo?: ModelPl
|
|||||||
<RbCard
|
<RbCard
|
||||||
key={item.id}
|
key={item.id}
|
||||||
title={item.name}
|
title={item.name}
|
||||||
subTitle={<Tag className="rb:mt-1">{t(`modelNew.${item.type}`)}</Tag>}
|
subTitle={<Space size={8}>
|
||||||
|
<Tag className="rb:mt-1">{t(`modelNew.${item.type}`)}</Tag>
|
||||||
|
{item.is_official && <Tag color="success" className="rb:mt-1">{t(`modelNew.official`)}</Tag>}
|
||||||
|
</Space>}
|
||||||
avatarUrl={getLogoUrl(item.logo)}
|
avatarUrl={getLogoUrl(item.logo)}
|
||||||
avatar={
|
avatar={
|
||||||
<div className="rb:w-12 rb:h-12 rb:rounded-lg rb:mr-3.25 rb:bg-[#155eef] rb:flex rb:items-center rb:justify-center rb:text-[28px] rb:text-[#ffffff]">
|
<div className="rb:w-12 rb:h-12 rb:rounded-lg rb:mr-3.25 rb:bg-[#155eef] rb:flex rb:items-center rb:justify-center rb:text-[28px] rb:text-[#ffffff]">
|
||||||
|
|||||||
@@ -1,8 +1,8 @@
|
|||||||
import { forwardRef, useImperativeHandle, useState, useMemo, useEffect } from 'react';
|
import { forwardRef, useImperativeHandle, useState, useEffect } from 'react';
|
||||||
import { Form, Cascader, App, type CascaderProps } from 'antd';
|
import { Form, Cascader, App, type CascaderProps } from 'antd';
|
||||||
import { useTranslation } from 'react-i18next';
|
import { useTranslation } from 'react-i18next';
|
||||||
|
|
||||||
import type { SubModelModalForm, SubModelModalRef, SubModelModalProps, ModelList } from './types';
|
import type { SubModelModalForm, SubModelModalRef, SubModelModalProps } from './types';
|
||||||
import RbModal from '@/components/RbModal'
|
import RbModal from '@/components/RbModal'
|
||||||
import CustomSelect from '@/components/CustomSelect'
|
import CustomSelect from '@/components/CustomSelect'
|
||||||
import { modelProviderUrl, getModelNewList } from '@/api/models'
|
import { modelProviderUrl, getModelNewList } from '@/api/models'
|
||||||
@@ -59,7 +59,8 @@ const SubModelModal = forwardRef<SubModelModalRef, SubModelModalProps>(({
|
|||||||
...vo[0],
|
...vo[0],
|
||||||
model_name: vo[0].name,
|
model_name: vo[0].name,
|
||||||
model_config_ids: [vo[0].id],
|
model_config_ids: [vo[0].id],
|
||||||
id: vo[1].value
|
id: vo[1].value,
|
||||||
|
api_key: vo[1].label
|
||||||
})))
|
})))
|
||||||
handleClose()
|
handleClose()
|
||||||
})
|
})
|
||||||
|
|||||||
@@ -24,15 +24,15 @@ const ModelImplement: FC<ModelImplementProps> = ({ type, value, onChange }) => {
|
|||||||
}
|
}
|
||||||
subModelModalRef.current?.handleOpen()
|
subModelModalRef.current?.handleOpen()
|
||||||
}
|
}
|
||||||
const handleDelete = (provider: string) => {
|
const handleDelete = (vo: any) => {
|
||||||
modal.confirm({
|
modal.confirm({
|
||||||
title: t('common.confirmDeleteDesc', { name: provider }),
|
title: t('common.confirmDeleteDesc', { name: [vo.model_name, vo.api_key].join(' / ') }),
|
||||||
content: t('application.apiKeyDeleteContent'),
|
content: t('application.apiKeyDeleteContent'),
|
||||||
okText: t('common.delete'),
|
okText: t('common.delete'),
|
||||||
cancelText: t('common.cancel'),
|
cancelText: t('common.cancel'),
|
||||||
okType: 'danger',
|
okType: 'danger',
|
||||||
onOk: () => {
|
onOk: () => {
|
||||||
onChange?.(value?.filter((item: any) => item.provider !== provider))
|
onChange?.(value?.filter((item: any) => item.id !== vo.id))
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
@@ -70,18 +70,18 @@ const ModelImplement: FC<ModelImplementProps> = ({ type, value, onChange }) => {
|
|||||||
<div className="rb:bg-[#F5F6F7] rb:rounded-lg rb:p-3 rb:mt-2">
|
<div className="rb:bg-[#F5F6F7] rb:rounded-lg rb:p-3 rb:mt-2">
|
||||||
{!value || value.length === 0
|
{!value || value.length === 0
|
||||||
? <Empty size={88} />
|
? <Empty size={88} />
|
||||||
: Object.entries(groupedByProvider).map(([provider, items]: [string, ModelList[]]) => {
|
: value.map((item: any) => {
|
||||||
return (
|
return (
|
||||||
<div key={provider} className="rb:mb-4 last:rb:mb-0">
|
<div key={item.id} className="rb:mb-4 rb:last:rb:mb-0 rb:bg-[#FBFDFF] rb:rounded-lg rb:p-3">
|
||||||
<Flex justify="space-between" align="center" className="rb:mb-2 last:rb:mb-0">
|
<Flex gap={8} justify="space-between" align="center" className="rb:mb-2 rb:last:rb:mb-0">
|
||||||
<div className="rb:font-medium">{[...new Set(items?.map((vo) => vo.model_name))].join(', ')}</div>
|
<div className="rb:font-medium">{[item.model_name, item.api_key].join(' / ')}</div>
|
||||||
|
|
||||||
<div
|
<div
|
||||||
className="rb:w-6 rb:h-6 rb:cursor-pointer rb:bg-[url('@/assets/images/deleteBorder.svg')] rb:hover:bg-[url('@/assets/images/deleteBg.svg')]"
|
className="rb:w-6 rb:h-6 rb:cursor-pointer rb:bg-[url('@/assets/images/deleteBorder.svg')] rb:hover:bg-[url('@/assets/images/deleteBg.svg')]"
|
||||||
onClick={() => handleDelete(provider)}
|
onClick={() => handleDelete(item)}
|
||||||
></div>
|
></div>
|
||||||
</Flex>
|
</Flex>
|
||||||
<Tag className="rb:mb-2">{t(`modelNew.${provider}`)}</Tag>
|
<Tag className="rb:mb-2">{t(`modelNew.${item.provider}`)}</Tag>
|
||||||
</div>
|
</div>
|
||||||
)
|
)
|
||||||
})}
|
})}
|
||||||
|
|||||||
@@ -65,7 +65,10 @@ const ModelSquareDetail = forwardRef<ModelSquareDetailRef, ModelSquareDetailProp
|
|||||||
<RbCard
|
<RbCard
|
||||||
key={item.id}
|
key={item.id}
|
||||||
title={item.name}
|
title={item.name}
|
||||||
subTitle={<Tag className="rb:mt-1">{t(`modelNew.${item.type}`)}</Tag>}
|
subTitle={<Space size={8}>
|
||||||
|
<Tag className="rb:mt-1">{t(`modelNew.${item.type}`)}</Tag>
|
||||||
|
{item.is_official && <Tag color="success" className="rb:mt-1">{t(`modelNew.official`)}</Tag>}
|
||||||
|
</Space>}
|
||||||
avatarUrl={getLogoUrl(item.logo)}
|
avatarUrl={getLogoUrl(item.logo)}
|
||||||
avatar={
|
avatar={
|
||||||
<div className="rb:w-12 rb:h-12 rb:rounded-lg rb:mr-3.25 rb:bg-[#155eef] rb:flex rb:items-center rb:justify-center rb:text-[28px] rb:text-[#ffffff]">
|
<div className="rb:w-12 rb:h-12 rb:rounded-lg rb:mr-3.25 rb:bg-[#155eef] rb:flex rb:items-center rb:justify-center rb:text-[28px] rb:text-[#ffffff]">
|
||||||
|
|||||||
Reference in New Issue
Block a user