diff --git a/web/src/components/SliderInput/index.tsx b/web/src/components/SliderInput/index.tsx index d3200eef..7f62ad2c 100644 --- a/web/src/components/SliderInput/index.tsx +++ b/web/src/components/SliderInput/index.tsx @@ -1,8 +1,8 @@ /* * @Author: ZhaoYing * @Date: 2026-02-02 15:26:44 - * @Last Modified by: ZhaoYing - * @Last Modified time: 2026-02-02 15:26:44 + * @Last Modified by: ZhaoYing + * @Last Modified time: 2026-03-25 18:14:20 */ /** * SliderInput Component @@ -107,7 +107,7 @@ const SliderInput: FC = ({
{/* Optional label */} {label && ( -
+
{label}
)} @@ -127,7 +127,7 @@ const SliderInput: FC = ({ /> {/* Input number component */} - + = ({ value={internalValue} onChange={handleInputChange} disabled={disabled} - className={`rb:w-full ${inputClassName}`} + className={`rb:w-full! ${inputClassName}`} controls /> diff --git a/web/src/components/Upload/UploadFiles.tsx b/web/src/components/Upload/UploadFiles.tsx index 36ae859d..124c6ebd 100644 --- a/web/src/components/Upload/UploadFiles.tsx +++ b/web/src/components/Upload/UploadFiles.tsx @@ -10,7 +10,6 @@ import { useTranslation } from 'react-i18next'; import { cookieUtils } from '@/utils/request' import { fileUpload } from '@/api/fileStorage' -const { confirm } = Modal; const { Dragger } = Upload; interface UploadFilesProps extends Omit { @@ -91,14 +90,14 @@ const UploadFiles = forwardRef(({ ...props }, ref) => { const { t } = useTranslation(); - const { message } = App.useApp() + const { message, modal } = App.useApp() const [fileList, setFileList] = useState(propFileList); const [accept, setAccept] = useState(); // 处理文件移除 const handleRemove = (file: UploadFile) => { // 显示确认弹窗 - confirm({ + modal.confirm({ title: `${t('common.confirmRemoveFile')}`, okText: `${t('common.confirm')}`, okType: 'danger', diff --git a/web/src/views/EmotionEngine/index.tsx b/web/src/views/EmotionEngine/index.tsx index 4acdd9d7..5784a82f 100644 --- a/web/src/views/EmotionEngine/index.tsx +++ b/web/src/views/EmotionEngine/index.tsx @@ -2,7 +2,7 @@ * @Author: ZhaoYing * @Date: 2026-02-03 16:56:54 * @Last Modified by: ZhaoYing - * @Last Modified time: 2026-03-25 11:42:26 + * @Last Modified time: 2026-03-25 18:28:18 */ /** * Emotion Engine Configuration Page @@ -11,7 +11,7 @@ */ import React, { useState, useEffect } from 'react'; -import { Row, Col, Form, Button, message, Space, Flex, Tooltip } from 'antd'; +import { Row, Col, Form, Button, App, Space, Flex, Tooltip } from 'antd'; import { useParams } from 'react-router-dom'; import { useTranslation } from 'react-i18next'; import clsx from 'clsx'; @@ -67,7 +67,7 @@ const EmotionEngine: React.FC = () => { const { id } = useParams(); const [configData, setConfigData] = useState({} as ConfigForm); const [form] = Form.useForm(); - const [messageApi, contextHolder] = message.useMessage(); + const { message: messageApi } = App.useApp(); const [loading, setLoading] = useState(false) const values = Form.useWatch([], form); @@ -284,7 +284,6 @@ const EmotionEngine: React.FC = () => { - {contextHolder} ); }; diff --git a/web/src/views/ForgettingEngine/index.tsx b/web/src/views/ForgettingEngine/index.tsx index ccfa7769..2386d070 100644 --- a/web/src/views/ForgettingEngine/index.tsx +++ b/web/src/views/ForgettingEngine/index.tsx @@ -1,8 +1,8 @@ /* * @Author: ZhaoYing * @Date: 2026-02-03 17:00:12 - * @Last Modified by: ZhaoYing - * @Last Modified time: 2026-03-16 15:41:54 + * @Last Modified by: ZhaoYing + * @Last Modified time: 2026-03-25 18:29:00 */ /** * Forgetting Engine Configuration Page @@ -11,7 +11,7 @@ */ import React, { useState, useEffect } from 'react'; -import { Row, Col, Form, Button, Space, message, Flex, Tooltip } from 'antd'; +import { Row, Col, Form, Button, Space, App, Flex, Tooltip } from 'antd'; import { useParams } from 'react-router-dom'; import { useTranslation } from 'react-i18next'; @@ -107,7 +107,7 @@ const ForgettingEngine: React.FC = () => { const { id } = useParams(); const [configData, setConfigData] = useState(); const [form] = Form.useForm(); - const [messageApi, contextHolder] = message.useMessage(); + const { message: messageApi } = App.useApp(); const [loading, setLoading] = useState(false) const values = Form.useWatch([], form); @@ -238,7 +238,6 @@ const ForgettingEngine: React.FC = () => { /> - {contextHolder} ); }; diff --git a/web/src/views/KnowledgeBase/[knowledgeBaseId]/CreateDataset.tsx b/web/src/views/KnowledgeBase/[knowledgeBaseId]/CreateDataset.tsx index 5c5902dd..1ec66004 100644 --- a/web/src/views/KnowledgeBase/[knowledgeBaseId]/CreateDataset.tsx +++ b/web/src/views/KnowledgeBase/[knowledgeBaseId]/CreateDataset.tsx @@ -1,5 +1,5 @@ import { useMemo,useRef, useState, useEffect } from 'react'; -import { Button, Flex, Radio, Steps, Modal, Input, Spin, message, Checkbox, Select, Form, Progress} from 'antd'; +import { Button, Flex, Radio, Steps, Modal, Input, Checkbox, Select, Form, Progress, App } from 'antd'; import { useTranslation } from 'react-i18next'; import { useLocation, useNavigate, useParams } from 'react-router-dom'; import './Private.css'; @@ -15,7 +15,7 @@ import exitIcon from '@/assets/images/knowledgeBase/exit.png'; import SliderInput from '@/components/SliderInput'; import DelimiterSelector from '../components/DelimiterSelector'; -const { confirm } = Modal + const { TextArea } = Input; const style: React.CSSProperties = { @@ -28,12 +28,13 @@ const { TextArea } = Input; columnGap: 14, // Wider gap between dot and text width: '100%', border: '1px solid #E5E5E5', - borderRadius: 8, + borderRadius: 12, padding: 16, }; const getActiveRadioStyle = (active: boolean): React.CSSProperties => ({ ...radioWrapperBaseStyle, border: active ? '1px solid #171719' : radioWrapperBaseStyle.border, + backgroundColor: active ? '#FAFAFA' : 'transparent', }); @@ -65,6 +66,7 @@ interface ContentFormData { const CreateDataset = () => { const { t } = useTranslation(); const navigate = useNavigate(); + const { modal, message: messageApi } = App.useApp() const { knowledgeBaseId: routeKnowledgeBaseId } = useParams<{ knowledgeBaseId: string }>(); const location = useLocation(); const locationState = (location.state ?? {}) as CreateDatasetLocationState; @@ -93,7 +95,6 @@ const CreateDataset = () => { const [parameterSettings, setParameterSettings] = useState('defaultSettings'); const [pdfEnhancementEnabled, setPdfEnhancementEnabled] = useState(true); const [pdfEnhancementMethod, setPdfEnhancementMethod] = useState('deepdoc'); - const [messageApi, contextHolder] = message.useMessage(); const fileType = ['pdf', 'doc', 'docx', 'xls', 'xlsx', 'csv', 'md', 'htm', 'html', 'json', 'ppt', 'pptx', 'txt','png','jpg','mp3','mp4','mov','wav'] const steps = useMemo( () => [ @@ -184,7 +185,7 @@ const CreateDataset = () => { } // 显示确认弹框 - confirm({ + modal.confirm({ title: t('knowledgeBase.startUploadConfirmTitle') || 'Start processing documents', content: t('knowledgeBase.startUploadConfirmContent') || 'Document processing will proceed in the background. You can choose to return to the list page immediately or stay on this page to view processing progress.', okText: t('knowledgeBase.returnToList') || 'Return to list', @@ -231,7 +232,7 @@ const CreateDataset = () => { } }; const handleDelete = (record: AnyObject) => { - confirm({ + modal.confirm({ title: t('common.deleteWarning'), content: t('common.deleteWarningContent', { content: record.name }), onOk: async () => { @@ -548,8 +549,6 @@ const CreateDataset = () => { }, [location.pathname]); return (<> - {contextHolder} -
{/* {t('knowledgeBase.createA') + ' ' + t('knowledgeBase.dataset')} @@ -558,10 +557,10 @@ const CreateDataset = () => { exit {t('common.exit')}
-
+
-
+
{current === 0 && (
@@ -672,7 +671,7 @@ const CreateDataset = () => { {current === 1 && (
{rechunkFileIds.length > 0 && ( -
+
{t('knowledgeBase.rechunking')}: {rechunkFileIds.map((id) => ( {id} @@ -684,8 +683,8 @@ const CreateDataset = () => {
setPdfEnhancementEnabled(!pdfEnhancementEnabled)} > @@ -693,24 +692,25 @@ const CreateDataset = () => { checked={pdfEnhancementEnabled} onChange={(e) => setPdfEnhancementEnabled(e.target.checked)} className='rb:mr-3' - /> - - {t('knowledgeBase.pdfEnhancementAnalysis')} - + > + + {t('knowledgeBase.pdfEnhancementAnalysis')} + + {pdfEnhancementEnabled && ( -
- setPdfEnhancementMethod(value)} + className='rb:w-[300px]' + options={[ + { value: 'deepdoc', label: 'DeepDoc' }, + { value: 'mineru', label: 'MinerU' }, + { value: 'textln', label: 'TextLN' } + ]} + /> +
+ )}
@@ -766,12 +766,14 @@ const CreateDataset = () => { {parameterSettings === 'customSettings' && ( -
-
- {t('knowledgeBase.delimiter')} -
- - +
+
+
+ {t('knowledgeBase.delimiter')} +
+ +
+
)} diff --git a/web/src/views/KnowledgeBase/[knowledgeBaseId]/Private.tsx b/web/src/views/KnowledgeBase/[knowledgeBaseId]/Private.tsx index 6074338b..0198f363 100644 --- a/web/src/views/KnowledgeBase/[knowledgeBaseId]/Private.tsx +++ b/web/src/views/KnowledgeBase/[knowledgeBaseId]/Private.tsx @@ -2,7 +2,7 @@ import { useEffect, useState, useRef, useCallback, type FC } from 'react'; import { useNavigate, useParams, useLocation } from 'react-router-dom'; import { useTranslation } from 'react-i18next'; -import { Switch, Button, Dropdown, Space, Modal, message, Radio, Tooltip } from 'antd'; +import { Switch, Button, Dropdown, Space, Radio, Tooltip, App } from 'antd'; import type { MenuProps } from 'antd'; import SearchInput from '@/components/SearchInput' import Table, { type TableRef } from '@/components/Table' @@ -39,12 +39,11 @@ import { formatDateTime } from '@/utils/format'; import KnowledgeGraphCard from '../components/KnowledgeGraphCard'; import { useBreadcrumbManager, type BreadcrumbItem } from '@/hooks/useBreadcrumbManager'; import './Private.css' -const { confirm } = Modal // Tree node data type const Private: FC = () => { const { t } = useTranslation(); - const [messageApi, contextHolder] = message.useMessage(); + const { modal, message: messageApi } = App.useApp() const navigate = useNavigate(); const location = useLocation(); const { knowledgeBaseId } = useParams<{ knowledgeBaseId: string }>(); @@ -501,7 +500,7 @@ const Private: FC = () => { downloadFile(targetFileId, fileName); } const handleDelete = (item: any) => { - confirm({ + modal.confirm({ title: t('common.deleteWarning'), content: t('common.deleteWarningContent', { content: item.file_name }), onOk: () => { @@ -765,7 +764,6 @@ const Private: FC = () => { return ( <> - {contextHolder}
{folder && (
diff --git a/web/src/views/KnowledgeBase/components/CreateImageDataset.tsx b/web/src/views/KnowledgeBase/components/CreateImageDataset.tsx index e6b9b386..732a95ec 100644 --- a/web/src/views/KnowledgeBase/components/CreateImageDataset.tsx +++ b/web/src/views/KnowledgeBase/components/CreateImageDataset.tsx @@ -1,7 +1,7 @@ import { forwardRef, useImperativeHandle, useState, useRef } from 'react'; import { useNavigate } from 'react-router-dom'; -import { Form, message } from 'antd'; +import { Form, App } from 'antd'; import { useTranslation } from 'react-i18next'; import type { UploadFile } from 'antd'; import type { CreateSetModalRef, CreateSetMoealRefProps } from '@/views/KnowledgeBase/types'; @@ -19,8 +19,8 @@ const CreateImageDataset = forwardRef ({ refreshTable }, ref) => { const { t } = useTranslation(); const navigate = useNavigate(); + const { message: messageApi } = App.useApp(); const [visible, setVisible] = useState(false); - const [messageApi, contextHolder] = message.useMessage(); const [form] = Form.useForm(); const [loading, setLoading] = useState(false); @@ -227,7 +227,6 @@ const CreateImageDataset = forwardRef }; return ( <> - {contextHolder} (({ refreshTable }, ref) => { const { t } = useTranslation(); - const [messageApi, contextHolder] = message.useMessage(); + const { modal, message: messageApi } = App.useApp() const [visible, setVisible] = useState(false); const [modelTypeList, setModelTypeList] = useState([]); const [modelOptionsByType, setModelOptionsByType] = useState>({}); @@ -335,7 +335,7 @@ const CreateModal = forwardRef(({ // If original type is 'rebuild' and knowledge graph is enabled, show confirmation dialog if (originalType === 'rebuild' && isGraphragEnabled) { - confirm({ + modal.confirm({ title: t('knowledgeBase.rebuildConfirmTitle'), content: t('knowledgeBase.rebuildConfirmContent'), onOk: async() => { @@ -478,7 +478,7 @@ const CreateModal = forwardRef(({ // Get previous value from original datasets object const previousValue = (datasets as any)[fieldKey]; - confirm({ + modal.confirm({ title: t('common.updateWarning'), content: t('knowledgeBase.updateEmbeddingContent'), onOk: () => { @@ -880,7 +880,6 @@ const CreateModal = forwardRef(({ items={tabItems} /> - {contextHolder} ); }); diff --git a/web/src/views/KnowledgeBase/components/ShareModal.tsx b/web/src/views/KnowledgeBase/components/ShareModal.tsx index 2f2cbb7a..bd1b806d 100644 --- a/web/src/views/KnowledgeBase/components/ShareModal.tsx +++ b/web/src/views/KnowledgeBase/components/ShareModal.tsx @@ -3,13 +3,12 @@ * @Version: 0.0.1 * @Author: yujiangping * @Date: 2025-11-10 18:52:55 - * @LastEditors: yujiangping - * @LastEditTime: 2026-03-09 16:39:07 + * @LastEditors: ZhaoYing + * @LastEditTime: 2026-03-25 18:30:28 */ import { forwardRef, useImperativeHandle, useState, useRef } from 'react'; -import { Switch } from 'antd'; +import { Switch, App } from 'antd'; import { useTranslation } from 'react-i18next'; -import { message } from 'antd'; import type { ShareModalRef, ShareModalRefProps, KnowledgeBase, SpaceItem} from '@/views/KnowledgeBase/types'; import RbModal from '@/components/RbModal' // import betchControlIcon from '@/assets/images/knowledgeBase/betch-control.png'; @@ -23,7 +22,7 @@ import ShareSpaceModal from './ShareSpaceModal' const ShareModal = forwardRef(({ handleShare: onShare }, ref) => { const { t } = useTranslation(); const shareSpaceModalRef = useRef(null); - const [messageApi, contextHolder] = message.useMessage(); + const { message: messageApi } = App.useApp() const [visible, setVisible] = useState(false); const [loading, setLoading] = useState(false) const [curIndex, setCurIndex] = useState(9999); @@ -101,7 +100,6 @@ const ShareModal = forwardRef(({ handleShare: return ( <> - {contextHolder} (({ handleShare: onShare }, ref) => { const { t } = useTranslation(); - const [messageApi, contextHolder] = message.useMessage(); + const { message: messageApi } = App.useApp() const [visible, setVisible] = useState(false); const [loading, setLoading] = useState(false) const [curIndex, setCurIndex] = useState(-1); @@ -97,7 +96,6 @@ const ShareModal = forwardRef(({ handleShare: return ( <> - {contextHolder} { const { t } = useTranslation(); const navigate = useNavigate(); + const { modal, message: messageApi } = App.useApp() const location = useLocation(); const [loading, setLoading] = useState(false); const [data, setData] = useState([]) @@ -43,7 +44,6 @@ const KnowledgeBaseManagement: FC = () => { const [knowledgeBaseTypes, setKnowledgeBaseTypes] = useState([]); const modelListCache = useRef>({}); const modalRef = useRef(null) - const [messageApi, contextHolder] = message.useMessage(); const processedStateRef = useRef(null); // 使用面包屑管理 Hook @@ -386,7 +386,7 @@ const KnowledgeBaseManagement: FC = () => { // 处理删除 const handleDelete = (item: KnowledgeBaseListItem) => { - confirm({ + modal.confirm({ title: t('common.deleteWarning'), content: t('common.deleteWarningContent', { content: item.name }), onOk: () => { @@ -528,7 +528,6 @@ const KnowledgeBaseManagement: FC = () => { return ( <> - {contextHolder}
(({ refreshTable }, ref) => { const { t } = useTranslation(); - const { message } = App.useApp() + const { message, modal } = App.useApp() const initialForm = { // role: 'member', } @@ -47,7 +47,6 @@ const MemberModal = forwardRef(({ const [editingUser, setEditingUser] = useState(null); const [form] = Form.useForm(); const [loading, setLoading] = useState(false) - const [modal, contextHolder] = Modal.useModal(); const roleOptions = [ 'member', @@ -179,7 +178,6 @@ const MemberModal = forwardRef(({ - {contextHolder} ); });