diff --git a/web/src/api/knowledgeBase.ts b/web/src/api/knowledgeBase.ts index 63ec80ae..05200221 100644 --- a/web/src/api/knowledgeBase.ts +++ b/web/src/api/knowledgeBase.ts @@ -68,8 +68,8 @@ export const getModelTypeList = async () => { return response as any[]; }; // 获取模型列表 -export const getModelList = async (pageInfo: PageRequest) => { - const response = await request.get(`${apiPrefix}/models`, { ...pageInfo, is_active: true }); +export const getModelList = async (types: string[], pageInfo: PageRequest) => { + const response = await request.get(`${apiPrefix}/models`, { ...pageInfo, type: types?.join(','), is_active: true }); return response as any; }; //获取模型提供者 diff --git a/web/src/assets/images/common/delete_red_big.svg b/web/src/assets/images/common/delete_red_big.svg new file mode 100644 index 00000000..7751b4e1 --- /dev/null +++ b/web/src/assets/images/common/delete_red_big.svg @@ -0,0 +1,19 @@ + + + 编组 33 + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/web/src/assets/images/common/edit_bg.svg b/web/src/assets/images/common/edit_bg.svg new file mode 100644 index 00000000..4711afa4 --- /dev/null +++ b/web/src/assets/images/common/edit_bg.svg @@ -0,0 +1,17 @@ + + + 编辑 + + + + + + + + + + + + + + \ No newline at end of file diff --git a/web/src/assets/images/common/edit_bold.svg b/web/src/assets/images/common/edit_bold.svg new file mode 100644 index 00000000..c41984b2 --- /dev/null +++ b/web/src/assets/images/common/edit_bold.svg @@ -0,0 +1,16 @@ + + + 编辑 + + + + + + + + + + + + + \ No newline at end of file diff --git a/web/src/assets/images/common/eye.svg b/web/src/assets/images/common/eye.svg new file mode 100644 index 00000000..df2af1cf --- /dev/null +++ b/web/src/assets/images/common/eye.svg @@ -0,0 +1,16 @@ + + + 编辑 + + + + + + + + + + + + + \ No newline at end of file diff --git a/web/src/assets/images/common/eye_bg.svg b/web/src/assets/images/common/eye_bg.svg new file mode 100644 index 00000000..275c13c2 --- /dev/null +++ b/web/src/assets/images/common/eye_bg.svg @@ -0,0 +1,17 @@ + + + 编辑 + + + + + + + + + + + + + + \ No newline at end of file diff --git a/web/src/assets/images/common/link.svg b/web/src/assets/images/common/link.svg new file mode 100644 index 00000000..5773d546 --- /dev/null +++ b/web/src/assets/images/common/link.svg @@ -0,0 +1,13 @@ + + + link-outlined + + + + + + + + + + \ No newline at end of file diff --git a/web/src/assets/images/common/more.svg b/web/src/assets/images/common/more.svg index 0d4d9cd2..6c24cf52 100644 --- a/web/src/assets/images/common/more.svg +++ b/web/src/assets/images/common/more.svg @@ -1,12 +1,11 @@ - - 更多 - - - - - - + + 卡片1@3x + + + + + diff --git a/web/src/assets/images/common/more_hover.svg b/web/src/assets/images/common/more_hover.svg index 04fc6eb5..d08ba08f 100644 --- a/web/src/assets/images/common/more_hover.svg +++ b/web/src/assets/images/common/more_hover.svg @@ -1,14 +1,23 @@ - - 更多 - - - - - - - - + + 更多@3x + + + + + + + + + + + + + + + + + diff --git a/web/src/assets/images/conversation/analysisEmpty.png b/web/src/assets/images/conversation/analysisEmpty.png index 6d497f31..50adbd82 100644 Binary files a/web/src/assets/images/conversation/analysisEmpty.png and b/web/src/assets/images/conversation/analysisEmpty.png differ diff --git a/web/src/assets/images/model/bedrock.png b/web/src/assets/images/model/bedrock.png new file mode 100644 index 00000000..2c3b4770 Binary files /dev/null and b/web/src/assets/images/model/bedrock.png differ diff --git a/web/src/assets/images/model/bedrock.svg b/web/src/assets/images/model/bedrock.svg deleted file mode 100644 index 6a0235af..00000000 --- a/web/src/assets/images/model/bedrock.svg +++ /dev/null @@ -1,15 +0,0 @@ - - - - - - - - - - - - - - - diff --git a/web/src/assets/images/model/dashscope.png b/web/src/assets/images/model/dashscope.png index c1aff40e..2667528e 100644 Binary files a/web/src/assets/images/model/dashscope.png and b/web/src/assets/images/model/dashscope.png differ diff --git a/web/src/assets/images/model/gpustack.png b/web/src/assets/images/model/gpustack.png index b154821d..5c5afe1b 100644 Binary files a/web/src/assets/images/model/gpustack.png and b/web/src/assets/images/model/gpustack.png differ diff --git a/web/src/assets/images/model/ollama.png b/web/src/assets/images/model/ollama.png new file mode 100644 index 00000000..b3f5bd44 Binary files /dev/null and b/web/src/assets/images/model/ollama.png differ diff --git a/web/src/assets/images/model/ollama.svg b/web/src/assets/images/model/ollama.svg deleted file mode 100644 index f8482a96..00000000 --- a/web/src/assets/images/model/ollama.svg +++ /dev/null @@ -1,15 +0,0 @@ - - - - - - - - - - - - - - - diff --git a/web/src/assets/images/model/openai.png b/web/src/assets/images/model/openai.png new file mode 100644 index 00000000..bd7a119a Binary files /dev/null and b/web/src/assets/images/model/openai.png differ diff --git a/web/src/assets/images/model/openai.svg b/web/src/assets/images/model/openai.svg deleted file mode 100644 index 70686f9b..00000000 --- a/web/src/assets/images/model/openai.svg +++ /dev/null @@ -1,4 +0,0 @@ - - - - diff --git a/web/src/assets/images/prompt/delete.svg b/web/src/assets/images/prompt/delete.svg new file mode 100644 index 00000000..f413ffa0 --- /dev/null +++ b/web/src/assets/images/prompt/delete.svg @@ -0,0 +1,19 @@ + + + 编组 33 + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/web/src/assets/images/prompt/delete_hover.svg b/web/src/assets/images/prompt/delete_hover.svg new file mode 100644 index 00000000..aebdc48c --- /dev/null +++ b/web/src/assets/images/prompt/delete_hover.svg @@ -0,0 +1,20 @@ + + + 编组 33 + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/web/src/assets/images/prompt/edit.svg b/web/src/assets/images/prompt/edit.svg new file mode 100644 index 00000000..89668678 --- /dev/null +++ b/web/src/assets/images/prompt/edit.svg @@ -0,0 +1,16 @@ + + + 编辑 + + + + + + + + + + + + + \ No newline at end of file diff --git a/web/src/assets/images/prompt/edit_bg.svg b/web/src/assets/images/prompt/edit_bg.svg new file mode 100644 index 00000000..4711afa4 --- /dev/null +++ b/web/src/assets/images/prompt/edit_bg.svg @@ -0,0 +1,17 @@ + + + 编辑 + + + + + + + + + + + + + + \ No newline at end of file diff --git a/web/src/assets/images/prompt/eye.svg b/web/src/assets/images/prompt/eye.svg new file mode 100644 index 00000000..df2af1cf --- /dev/null +++ b/web/src/assets/images/prompt/eye.svg @@ -0,0 +1,16 @@ + + + 编辑 + + + + + + + + + + + + + \ No newline at end of file diff --git a/web/src/assets/images/prompt/eye_bg.svg b/web/src/assets/images/prompt/eye_bg.svg new file mode 100644 index 00000000..275c13c2 --- /dev/null +++ b/web/src/assets/images/prompt/eye_bg.svg @@ -0,0 +1,17 @@ + + + 编辑 + + + + + + + + + + + + + + \ No newline at end of file diff --git a/web/src/components/PageScrollList/index.tsx b/web/src/components/PageScrollList/index.tsx index f78bb29b..fd449848 100644 --- a/web/src/components/PageScrollList/index.tsx +++ b/web/src/components/PageScrollList/index.tsx @@ -2,7 +2,7 @@ * @Author: ZhaoYing * @Date: 2026-02-02 15:18:19 * @Last Modified by: ZhaoYing - * @Last Modified time: 2026-03-26 14:43:33 + * @Last Modified time: 2026-03-27 15:52:37 */ /** * PageScrollList Component @@ -156,7 +156,7 @@ const PageScrollList = forwardRef(>({ {/* Render grid list or empty state */} {data.length > 0 ? ( {data.map((item, index) => ( diff --git a/web/src/styles/index.css b/web/src/styles/index.css index b928b939..1c9393e2 100644 --- a/web/src/styles/index.css +++ b/web/src/styles/index.css @@ -88,17 +88,15 @@ body { padding: 0; height: 100%; } - +.ant-menu-light .ant-menu-item { + font-weight: 500; +} .ant-menu-light .ant-menu-item-selected, .ant-menu-light>.ant-menu .ant-menu-item-selected, .ant-menu-light:not(.ant-menu-horizontal) .ant-menu-item:not(.ant-menu-item-selected):hover, .ant-menu-light>.ant-menu:not(.ant-menu-horizontal) .ant-menu-item:not(.ant-menu-item-selected):hover { box-shadow: none; } -.ant-menu-light .ant-menu-item-selected, -.ant-menu-light>.ant-menu .ant-menu-item-selected { - font-weight: 500; -} .ant-menu-inline-collapsed-tooltip .ant-tooltip-arrow { display: none; } @@ -380,6 +378,11 @@ body { .ant-select-filled:not(.ant-select-customize-input) .ant-select-selector { background-color: #FFFFFF; } +.ant-input-filled:hover, +.ant-select-filled:not(.ant-select-customize-input) .ant-select-selector { + background-color: #FFFFFF; + border-color: #171719; +} .ant-checkbox .ant-checkbox-inner { border-radius: 6px !important; } @@ -392,4 +395,4 @@ body { .ant-dropdown-menu-submenu .ant-dropdown-menu .ant-dropdown-menu-submenu-title-selected { color: #FFFFFF; background-color: #171719; -} \ No newline at end of file +} diff --git a/web/src/views/KnowledgeBase/index.tsx b/web/src/views/KnowledgeBase/index.tsx index 38fa48e6..b996bc16 100644 --- a/web/src/views/KnowledgeBase/index.tsx +++ b/web/src/views/KnowledgeBase/index.tsx @@ -1,7 +1,7 @@ import { useEffect, useState, useRef, useMemo, useCallback, type FC } from 'react'; -import { Row, Col, Button, Dropdown, Tooltip, App } from 'antd' +import { Button, Dropdown, Tooltip, App, Flex } from 'antd' import type { MenuProps } from 'antd'; -import { EllipsisOutlined, RightOutlined, DownOutlined } from '@ant-design/icons'; +import { RightOutlined, DownOutlined } from '@ant-design/icons'; import { useNavigate, useLocation } from 'react-router-dom'; import { useTranslation } from 'react-i18next'; @@ -78,6 +78,7 @@ const KnowledgeBaseManagement: FC = () => { if (permissionId !== 'share') { items.push({ key: '1', + icon:
, label: t('knowledgeBase.edit'), onClick: () => { handleEdit(item); @@ -87,6 +88,7 @@ const KnowledgeBaseManagement: FC = () => { items.push({ key: '2', + icon:
, label: t('knowledgeBase.delete'), onClick: () => { handleDelete(item); @@ -560,21 +562,23 @@ const KnowledgeBaseManagement: FC = () => { {data.length === 0 && !loading ? ( ) : ( - +
{data.map((item) => { const modelInfo = modelMenus[item.id]; const hasModelInfo = modelInfo && modelInfo.menu.length > 1; return ( - +
e.stopPropagation()}> - - + +
e.stopPropagation()} className="rb:cursor-pointer rb:size-5.5 rb:bg-[url('@/assets/images/common/more.svg')] rb:hover:bg-[url('@/assets/images/common/more_hover.svg')]">
} @@ -583,24 +587,23 @@ const KnowledgeBaseManagement: FC = () => {
{/*
{t('knowledgeBase.description')}
*/} -
{(item.description && item.description != '') ? item.description : t('knowledgeBase.noDescription')}
+
{(item.description && item.description != '') ? item.description : t('knowledgeBase.noDescription')}
-
- {item.descriptionItems?.map((description: Record) => ( + + {item.descriptionItems?.map((description: Record) => (
-
{(description.label as string)}
-
{(description.children as string)}
+
{(description.label as string)}
+
{(description.children as string)}
- ))} - -
+ ))} + {hasModelInfo && (
e.stopPropagation()}>
{ )}
- +
)})} - +
)} diff --git a/web/src/views/Ontology/index.tsx b/web/src/views/Ontology/index.tsx index cd599b97..7b98efea 100644 --- a/web/src/views/Ontology/index.tsx +++ b/web/src/views/Ontology/index.tsx @@ -2,7 +2,7 @@ * @Author: ZhaoYing * @Date: 2026-02-03 14:10:15 * @Last Modified by: ZhaoYing - * @Last Modified time: 2026-03-25 13:38:59 + * @Last Modified time: 2026-03-27 15:03:09 */ import { type FC, useState, useRef } from 'react'; import type { MenuInfo } from 'rc-menu/lib/interface'; @@ -150,13 +150,13 @@ const Ontology: FC = () => { items: [ { key: 'edit', - icon:
, + icon:
, label: t('common.edit'), onClick: (e: MenuInfo) => handleEdit(item, e), }, { key: 'delete', - icon:
, + icon:
, label: t('common.delete'), onClick: (e: MenuInfo) => handleDelete(item, e), }, @@ -164,7 +164,7 @@ const Ontology: FC = () => { }} placement="bottomRight" > -
e.stopPropagation()} className="rb:cursor-pointer rb:size-6 rb:bg-[url('@/assets/images/common/more.svg')] rb:hover:bg-[url('@/assets/images/common/more_hover.svg')]">
+
e.stopPropagation()} className="rb:cursor-pointer rb:size-5.5 rb:bg-[url('@/assets/images/common/more.svg')] rb:hover:bg-[url('@/assets/images/common/more_hover.svg')]">
} diff --git a/web/src/views/Prompt/index.tsx b/web/src/views/Prompt/index.tsx index 739a73f4..469b1e39 100644 --- a/web/src/views/Prompt/index.tsx +++ b/web/src/views/Prompt/index.tsx @@ -2,7 +2,7 @@ * @Author: ZhaoYing * @Date: 2026-02-03 17:44:15 * @Last Modified by: ZhaoYing - * @Last Modified time: 2026-03-26 14:31:50 + * @Last Modified time: 2026-03-27 15:14:58 */ /** * Prompt Editor Component @@ -278,7 +278,7 @@ const Prompt: FC = () => { className="rb:h-[calc(100vh-193px)] rb:bg-white! rb:border-none! rb:p-0! rb:text-[#212332] rb:leading-5" onChange={(value) => form.setFieldValue('current_prompt', value)} /> - : + : } diff --git a/web/src/views/Prompt/pages/History.tsx b/web/src/views/Prompt/pages/History.tsx index 65bf9a8b..573b4a90 100644 --- a/web/src/views/Prompt/pages/History.tsx +++ b/web/src/views/Prompt/pages/History.tsx @@ -2,7 +2,7 @@ * @Author: ZhaoYing * @Date: 2026-02-03 17:44:04 * @Last Modified by: ZhaoYing - * @Last Modified time: 2026-03-26 14:36:33 + * @Last Modified time: 2026-03-27 15:52:44 */ /** * Prompt History Component @@ -12,8 +12,7 @@ import React, { useRef, type MouseEvent } from 'react'; import { useTranslation } from 'react-i18next'; import { useNavigate } from 'react-router-dom'; -import { Tooltip, App, Flex, Form, Dropdown } from 'antd'; -import { DashOutlined } from '@ant-design/icons'; +import { Space, App, Flex, Form } from 'antd'; import type { HistoryQuery, HistoryItem, PromptDetailRef } from '../types'; import RbCard from '@/components/RbCard/Card' @@ -104,26 +103,30 @@ const History: React.FC = () => { renderItem={(item) => ( {item.title}} - headerClassName='rb:h-[38px]! rb:pt-3!' + title={item.title} + headerClassName='rb:min-h-[46px]!' headerType="borderless" + bodyClassName="rb:px-3! rb:py-0!" > - handleClick(key, item) - }} - > - - -
{formatDateTime(item.created_at, 'YYYY/MM/DD HH:mm')}
-
+
+ + +
{formatDateTime(item.created_at, 'YYYY/MM/DD HH:mm')}
+ + +
handleClick('detail', item)} + >
+
handleClick('edit', item)} + >
+
handleClick('delete', item)} + >
+
+
)} heightClass="rb:h-[calc(100vh-126px)]!" diff --git a/web/src/views/ToolManagement/Custom.tsx b/web/src/views/ToolManagement/Custom.tsx index f8a7db43..64f0af8f 100644 --- a/web/src/views/ToolManagement/Custom.tsx +++ b/web/src/views/ToolManagement/Custom.tsx @@ -88,14 +88,14 @@ const Custom = forwardRef ReactNo items: [ { key: 'edit', - icon:
, + icon:
, label: t('common.edit'), onClick: () => handleEdit(item), }, { key: 'delete', className: 'rb:text-[#FF5D34]!', - icon:
, + icon:
, label: t('common.delete'), onClick: () => handleDeleteService(item), }, @@ -103,7 +103,7 @@ const Custom = forwardRef ReactNo }} placement="bottomRight" > -
+
} diff --git a/web/src/views/ToolManagement/Inner.tsx b/web/src/views/ToolManagement/Inner.tsx index 004b0517..b88428b0 100644 --- a/web/src/views/ToolManagement/Inner.tsx +++ b/web/src/views/ToolManagement/Inner.tsx @@ -86,7 +86,7 @@ const Inner: React.FC<{ getStatusTag: (status: string) => ReactNode; keyword?: s
handleEdit(item)} /> diff --git a/web/src/views/ToolManagement/Mcp.tsx b/web/src/views/ToolManagement/Mcp.tsx index a365bfb3..d24eee3b 100644 --- a/web/src/views/ToolManagement/Mcp.tsx +++ b/web/src/views/ToolManagement/Mcp.tsx @@ -104,20 +104,20 @@ const Mcp = forwardRef ReactNode; ke items: [ { key: 'edit', - icon:
, + icon:
, label: t('common.edit'), onClick: () => handleEdit(item), }, { key: 'link', - icon:
, + icon:
, label: t('tool.testLink'), onClick: () => handleTestConnection(item), }, { key: 'delete', className: 'rb:text-[#FF5D34]!', - icon:
, + icon:
, label: t('common.delete'), onClick: () => handleDeleteService(item), }, @@ -125,7 +125,7 @@ const Mcp = forwardRef ReactNode; ke }} placement="bottomRight" > -
+
} diff --git a/web/src/views/UserMemoryDetail/components/AudioPlayer.tsx b/web/src/views/UserMemoryDetail/components/AudioPlayer.tsx index 985b35fb..5e7c2377 100644 --- a/web/src/views/UserMemoryDetail/components/AudioPlayer.tsx +++ b/web/src/views/UserMemoryDetail/components/AudioPlayer.tsx @@ -2,7 +2,7 @@ * @Author: ZhaoYing * @Date: 2026-03-16 15:00:07 * @Last Modified by: ZhaoYing - * @Last Modified time: 2026-03-25 12:09:39 + * @Last Modified time: 2026-03-27 15:23:14 */ import { type FC, useRef, useState, useEffect } from 'react' import { Flex, Dropdown, type MenuProps, Slider } from 'antd' @@ -128,7 +128,7 @@ const AudioPlayer: FC = ({ src, fileName, fileSize }) => { >
-
+
diff --git a/web/src/views/Workflow/components/NodeLibrary.tsx b/web/src/views/Workflow/components/NodeLibrary.tsx index 464db64e..a7b06fd1 100644 --- a/web/src/views/Workflow/components/NodeLibrary.tsx +++ b/web/src/views/Workflow/components/NodeLibrary.tsx @@ -70,7 +70,7 @@ const NodeLibrary: FC<{ collapsed: boolean; handleToggle: () => void }> = ({ col key={nodeIndex} align="center" gap={8} - className="rb:rounded-xl rb:p-2! rb-border rb:cursor-pointer rb:hover:border rb:hover:border-[#171719]!" + className="rb:rounded-xl rb:p-2! rb:border rb:border-[#EBEBEB] rb:cursor-pointer rb:hover:border rb:hover:border-[#171719]!" draggable onDragStart={(e) => { e.dataTransfer.setData('application/reactflow', node.type); diff --git a/web/src/views/Workflow/components/Properties/VariableList/index.tsx b/web/src/views/Workflow/components/Properties/VariableList/index.tsx index 30b96505..6ff545eb 100644 --- a/web/src/views/Workflow/components/Properties/VariableList/index.tsx +++ b/web/src/views/Workflow/components/Properties/VariableList/index.tsx @@ -95,7 +95,7 @@ const VariableList: FC = ({ {config.sys?.map((vo, index) => - + sys.{vo.name} {vo.type}