feat:knowledge ui change
This commit is contained in:
@@ -1,7 +1,7 @@
|
|||||||
import { useEffect, useState, useRef, useMemo, useCallback, type FC } from 'react';
|
import { useEffect, useState, useRef, useMemo, useCallback, type FC } from 'react';
|
||||||
import { Row, Col, Button, Dropdown, Modal, message, Tooltip } from 'antd'
|
import { Row, Col, Button, Dropdown, Modal, message, Tooltip } from 'antd'
|
||||||
import type { MenuProps } from 'antd';
|
import type { MenuProps } from 'antd';
|
||||||
import { EllipsisOutlined } from '@ant-design/icons';
|
import { EllipsisOutlined, RightOutlined, DownOutlined } from '@ant-design/icons';
|
||||||
import { useNavigate, useLocation } from 'react-router-dom';
|
import { useNavigate, useLocation } from 'react-router-dom';
|
||||||
|
|
||||||
import { useTranslation } from 'react-i18next';
|
import { useTranslation } from 'react-i18next';
|
||||||
@@ -185,7 +185,7 @@ const KnowledgeBaseManagement: FC = () => {
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
const formatData = (data: KnowledgeBaseListItem) => {
|
const formatData = (data: KnowledgeBaseListItem) => {
|
||||||
const keys: (keyof KnowledgeBaseListItem)[] = ['type', 'permission_id']
|
const keys: (keyof KnowledgeBaseListItem)[] = ['permission_id','type']
|
||||||
return keys.map(key => ({
|
return keys.map(key => ({
|
||||||
key,
|
key,
|
||||||
label: t(`knowledgeBase.${key}`),
|
label: t(`knowledgeBase.${key}`),
|
||||||
@@ -569,7 +569,9 @@ const KnowledgeBaseManagement: FC = () => {
|
|||||||
<Col xs={12} sm={12} md={12} lg={8} xl={8} key={item.id} >
|
<Col xs={12} sm={12} md={12} lg={8} xl={8} key={item.id} >
|
||||||
<RbCard
|
<RbCard
|
||||||
title={item.name}
|
title={item.name}
|
||||||
className='rb:min-h-[198px]'
|
headerType="borderless"
|
||||||
|
headerClassName="rb:py-3!"
|
||||||
|
className='rb:min-h-[200px]'
|
||||||
extra={
|
extra={
|
||||||
<div onClick={(e) => e.stopPropagation()}>
|
<div onClick={(e) => e.stopPropagation()}>
|
||||||
<Dropdown menu={{ items: getOptMenuItems(item) }} >
|
<Dropdown menu={{ items: getOptMenuItems(item) }} >
|
||||||
@@ -578,41 +580,57 @@ const KnowledgeBaseManagement: FC = () => {
|
|||||||
</div>
|
</div>
|
||||||
}
|
}
|
||||||
>
|
>
|
||||||
<div className='rb:min-h-[158px]' onClick={() => handleToDetail(item)}>
|
<div className='' onClick={() => handleToDetail(item)}>
|
||||||
<div className='rb:min-h-[124px]'>
|
<div className="rb:flex rb:text-[#5B6167] rb:h-5 rb:line-clamp-1 rb:text-sm rb:leading-5 rb:mb-3">
|
||||||
|
{/* <div className="rb:font-medium rb:w-20">{t('knowledgeBase.description')} </div> */}
|
||||||
|
<Tooltip title={item.description}>
|
||||||
|
<div className='rb:flex-1 rb:text-left rb:leading-5 rb:text-gray-800 rb:break-words rb:line-clamp-2'>{(item.description && item.description != '') ? item.description : t('knowledgeBase.noDescription')}</div>
|
||||||
|
</Tooltip>
|
||||||
|
</div>
|
||||||
|
<div className='rb:min-h-[60px] rb:py-2.5 rb:px-3 rb:bg-[#F6F6F6] rb:rounded-lg rb:mb-3'>
|
||||||
{item.descriptionItems?.map((description: Record<string, unknown>) => (
|
{item.descriptionItems?.map((description: Record<string, unknown>) => (
|
||||||
<div
|
<div
|
||||||
key={description.key as string}
|
key={description.key as string}
|
||||||
className="rb:flex rb:gap-4 rb:justify-start rb:text-[#5B6167] rb:text-[14px] rb:leading-[20px] rb:mb-[12px]"
|
className="rb:flex rb:gap-4 rb:justify-start rb:text-[#5B6167] rb:text-[14px] rb:leading-[20px]"
|
||||||
>
|
>
|
||||||
<div className="rb:whitespace-nowrap rb:w-20">{(description.label as string)}</div>
|
<div className={clsx('rb:whitespace-nowrap rb:w-20',{"rb:text-gray-800 rb:font-medium" : (description.key as string) === 'permission_id'})}>{(description.label as string)}</div>
|
||||||
<div className={clsx('rb:flex-inline rb:text-left rb:py-[1px] rb:rounded rb:font-medium',{
|
<div className={clsx('rb:flex-inline rb:text-left rb:py-[1px] rb:rounded rb:font-medium',{
|
||||||
"rb:text-[#155eef] rb:bg-[rgba(21,94,239,0.06)] rb:px-2 rb:border rb:border-[rgba(21,94,239,0.25)] rb:font-medium": (description.key as string) === 'permission_id' && (description.children as string) === t('knowledgeBase.private'),
|
"rb:text-[#155eef] rb:font-medium": (description.key as string) === 'permission_id' && (description.children as string) === t('knowledgeBase.private'),
|
||||||
"rb:text-[#369F21] rb:bg-[rgba(54,159,33,0.06)] rb:px-2 rb:border rb:border-[rgba(54,159,33,0.25);] rb:font-medium": (description.key as string) === 'permission_id' && (description.children as string) === t('knowledgeBase.share'),
|
"rb:text-[#FF8A4C] rb:font-medium": (description.key as string) === 'permission_id' && (description.children as string) === t('knowledgeBase.share'),
|
||||||
})}>{(description.children as string)}</div>
|
})}>{(description.children as string)}</div>
|
||||||
</div>
|
</div>
|
||||||
))}
|
))}
|
||||||
{item.description && (
|
|
||||||
<div className="rb:flex rb:text-[#5B6167] rb:h-10 rb:line-clamp-2 rb:text-sm rb:leading-5 rb:mb-3 rb:gap-4">
|
|
||||||
<div className="rb:font-medium rb:w-20">{t('knowledgeBase.description')} </div>
|
|
||||||
<Tooltip title={item.description}>
|
|
||||||
<div className='rb:flex-1 rb:text-left rb:leading-5 rb:text-gray-800 rb:break-words rb:line-clamp-2'>{item.description || t('knowledgeBase.noDescription')}</div>
|
|
||||||
</Tooltip>
|
|
||||||
</div>
|
|
||||||
)}
|
|
||||||
</div>
|
</div>
|
||||||
{hasModelInfo && (
|
{hasModelInfo && (
|
||||||
<Dropdown menu={{ items: modelInfo.menu }}>
|
<div onClick={(e) => e.stopPropagation()}>
|
||||||
<div
|
<div
|
||||||
className="rb:flex rb:text-gray-500 rb:px-3 rb:py-2 rb:text-[12px] rb:leading-4 rb:mb-2 rb:bg-[#F0F3F8] rb:rounded"
|
className="rb:flex rb:items-center rb:pt-2 rb:px-2 rb:text-[12px] rb:leading-5 rb:cursor-pointer rb:rounded rb:transition-colors"
|
||||||
onClick={(e) => e.stopPropagation()}
|
onClick={() => {
|
||||||
|
setData(prev => prev.map(d => d.id === item.id ? { ...d, _expanded: !d._expanded } : d));
|
||||||
|
}}
|
||||||
>
|
>
|
||||||
<span>{t('knowledgeBase.models')}:</span>
|
{/* <span className='rb:text-gray-500'>{t('knowledgeBase.models')}:</span> */}
|
||||||
<span className="rb:ml-1 rb:truncate rb:max-w-[200px]">
|
<span className="rb:ml-1 rb:truncate rb:flex-1 rb:text-gray-500">
|
||||||
{modelInfo.summary.join('、')}
|
{modelInfo.summary[0].split(':')[0]}:<span className="rb:text-gray-900">{modelInfo.summary[0].split(':').slice(1).join(':')}</span>
|
||||||
</span>
|
</span>
|
||||||
|
<span className="rb:ml-auto rb:text-gray-400 rb:text-[10px]">
|
||||||
|
{item._expanded ? <DownOutlined /> : <RightOutlined />}
|
||||||
|
</span>
|
||||||
</div>
|
</div>
|
||||||
</Dropdown>
|
{item._expanded && (
|
||||||
|
<div className="rb:py-1 rb:px-2 rb:text-[12px]">
|
||||||
|
{modelInfo.summary.slice(1).map((text, idx) => {
|
||||||
|
const [label, value] = text.split(':');
|
||||||
|
return (
|
||||||
|
<div key={idx} className="rb:py-1 rb:text-gray-500">
|
||||||
|
{label}:<span className="rb:text-gray-900">{value}</span>
|
||||||
|
</div>
|
||||||
|
);
|
||||||
|
})}
|
||||||
|
</div>
|
||||||
|
)}
|
||||||
|
</div>
|
||||||
)}
|
)}
|
||||||
</div>
|
</div>
|
||||||
</RbCard>
|
</RbCard>
|
||||||
|
|||||||
@@ -283,6 +283,7 @@ export interface KnowledgeBaseListItem extends KnowledgeBase {
|
|||||||
reranker?: Model;
|
reranker?: Model;
|
||||||
llm?: Model;
|
llm?: Model;
|
||||||
image2text?: Model;
|
image2text?: Model;
|
||||||
|
_expanded?: boolean;
|
||||||
}
|
}
|
||||||
|
|
||||||
// 知识库列表响应
|
// 知识库列表响应
|
||||||
|
|||||||
Reference in New Issue
Block a user