bugfix: now knowledge toast right msg

This commit is contained in:
youhuanghe
2026-03-08 11:01:13 +00:00
parent c64eb58cf8
commit 95dd19f4d7
9 changed files with 38 additions and 35 deletions
@@ -22,6 +22,7 @@ import { Button } from '@/components/ui/button';
import { useTranslation } from 'react-i18next'; import { useTranslation } from 'react-i18next';
import { httpClient } from '@/app/infra/http/HttpClient'; import { httpClient } from '@/app/infra/http/HttpClient';
import { KnowledgeBase } from '@/app/infra/entities/api'; import { KnowledgeBase } from '@/app/infra/entities/api';
import { CustomApiError } from '@/app/infra/entities/common';
import { toast } from 'sonner'; import { toast } from 'sonner';
import KBForm from '@/app/home/knowledge/components/kb-form/KBForm'; import KBForm from '@/app/home/knowledge/components/kb-form/KBForm';
import KBDoc from '@/app/home/knowledge/components/kb-docs/KBDoc'; import KBDoc from '@/app/home/knowledge/components/kb-docs/KBDoc';
@@ -68,7 +69,7 @@ export default function KBDetailDialog({
setKbInfo(resp.base); setKbInfo(resp.base);
} catch (e) { } catch (e) {
console.error('Failed to load KB info:', e); console.error('Failed to load KB info:', e);
toast.error(t('knowledge.loadKnowledgeBaseFailed')); toast.error(t('knowledge.loadKnowledgeBaseFailed') + (e as CustomApiError).msg);
} }
} }
@@ -136,7 +137,7 @@ export default function KBDetailDialog({
onKbDeleted(); onKbDeleted();
} catch (e) { } catch (e) {
console.error('Failed to delete KB:', e); console.error('Failed to delete KB:', e);
toast.error(t('knowledge.deleteKnowledgeBaseFailed')); toast.error(t('knowledge.deleteKnowledgeBaseFailed') + (e as CustomApiError).msg);
} finally { } finally {
setShowDeleteConfirm(false); setShowDeleteConfirm(false);
} }
@@ -12,7 +12,7 @@ import { httpClient } from '@/app/infra/http/HttpClient';
import { toast } from 'sonner'; import { toast } from 'sonner';
import { useTranslation } from 'react-i18next'; import { useTranslation } from 'react-i18next';
import { ParserInfo } from '@/app/infra/entities/api'; import { ParserInfo } from '@/app/infra/entities/api';
import { I18nObject } from '@/app/infra/entities/common'; import { CustomApiError, I18nObject } from '@/app/infra/entities/common';
import { extractI18nObject } from '@/i18n/I18nProvider'; import { extractI18nObject } from '@/i18n/I18nProvider';
interface FileUploadZoneProps { interface FileUploadZoneProps {
@@ -97,7 +97,7 @@ export default function FileUploadZone({
onUploadSuccess(); onUploadSuccess();
} catch (error) { } catch (error) {
console.error('File upload failed:', error); console.error('File upload failed:', error);
const errorMessage = t('knowledge.documentsTab.uploadError'); const errorMessage = t('knowledge.documentsTab.uploadError') + (error as CustomApiError).msg;
toast.error(errorMessage, { id: toastId }); toast.error(errorMessage, { id: toastId });
onUploadError(errorMessage); onUploadError(errorMessage);
} finally { } finally {
@@ -1,7 +1,7 @@
import { useCallback, useEffect, useRef, useState } from 'react'; import { useCallback, useEffect, useRef, useState } from 'react';
import { httpClient } from '@/app/infra/http/HttpClient'; import { httpClient } from '@/app/infra/http/HttpClient';
import { KnowledgeBaseFile } from '@/app/infra/entities/api'; import { KnowledgeBaseFile } from '@/app/infra/entities/api';
import { I18nObject } from '@/app/infra/entities/common'; import { I18nObject, CustomApiError } from '@/app/infra/entities/common';
import { columns, DocumentFile } from './documents/columns'; import { columns, DocumentFile } from './documents/columns';
import { DataTable } from './documents/data-table'; import { DataTable } from './documents/data-table';
import FileUploadZone from './FileUploadZone'; import FileUploadZone from './FileUploadZone';
@@ -87,7 +87,7 @@ export default function KBDoc({
}) })
.catch((error) => { .catch((error) => {
console.error('Delete failed:', error); console.error('Delete failed:', error);
toast.error(t('knowledge.documentsTab.fileDeleteFailed')); toast.error(t('knowledge.documentsTab.fileDeleteFailed') + (error as CustomApiError).msg);
}); });
}; };
@@ -23,6 +23,7 @@ import {
SelectValue, SelectValue,
} from '@/components/ui/select'; } from '@/components/ui/select';
import { KnowledgeBase, KnowledgeEngine } from '@/app/infra/entities/api'; import { KnowledgeBase, KnowledgeEngine } from '@/app/infra/entities/api';
import { CustomApiError } from '@/app/infra/entities/common';
import { toast } from 'sonner'; import { toast } from 'sonner';
import { extractI18nObject } from '@/i18n/I18nProvider'; import { extractI18nObject } from '@/i18n/I18nProvider';
import DynamicFormComponent from '@/app/home/components/dynamic-form/DynamicFormComponent'; import DynamicFormComponent from '@/app/home/components/dynamic-form/DynamicFormComponent';
@@ -217,7 +218,7 @@ export default function KBForm({
}) })
.catch((err) => { .catch((err) => {
console.error('update knowledge base failed', err); console.error('update knowledge base failed', err);
toast.error(t('knowledge.updateKnowledgeBaseFailed')); toast.error(t('knowledge.updateKnowledgeBaseFailed') + (err as CustomApiError).msg);
}); });
} else { } else {
// Create knowledge base // Create knowledge base
@@ -228,7 +229,7 @@ export default function KBForm({
}) })
.catch((err) => { .catch((err) => {
console.error('create knowledge base failed', err); console.error('create knowledge base failed', err);
toast.error(t('knowledge.createKnowledgeBaseFailed')); toast.error(t('knowledge.createKnowledgeBaseFailed') + (err as CustomApiError).msg);
}); });
} }
}; };
@@ -6,6 +6,7 @@ import { Button } from '@/components/ui/button';
import { Input } from '@/components/ui/input'; import { Input } from '@/components/ui/input';
import { useTranslation } from 'react-i18next'; import { useTranslation } from 'react-i18next';
import { RetrieveResult } from '@/app/infra/entities/api'; import { RetrieveResult } from '@/app/infra/entities/api';
import { CustomApiError } from '@/app/infra/entities/common';
import { toast } from 'sonner'; import { toast } from 'sonner';
interface KBRetrieveGenericProps { interface KBRetrieveGenericProps {
@@ -41,7 +42,7 @@ export default function KBRetrieveGeneric({
setResults(response.results); setResults(response.results);
} catch (error) { } catch (error) {
console.error('Retrieve failed:', error); console.error('Retrieve failed:', error);
toast.error(t('knowledge.retrieveError')); toast.error(t('knowledge.retrieveError') + (error as CustomApiError).msg);
} finally { } finally {
setLoading(false); setLoading(false);
} }
+7 -7
View File
@@ -707,7 +707,7 @@ const enUS = {
cannotChangeEmbeddingModel: cannotChangeEmbeddingModel:
'Knowledge base created cannot be modified embedding model', 'Knowledge base created cannot be modified embedding model',
updateKnowledgeBaseSuccess: 'Knowledge base updated successfully', updateKnowledgeBaseSuccess: 'Knowledge base updated successfully',
updateKnowledgeBaseFailed: 'Knowledge base update failed', updateKnowledgeBaseFailed: 'Knowledge base update failed: ',
documentsTab: { documentsTab: {
name: 'Name', name: 'Name',
status: 'Status', status: 'Status',
@@ -717,14 +717,14 @@ const enUS = {
supportedFormats: supportedFormats:
'Supports PDF, Word, TXT, Markdown, HTML, ZIP and other document formats', 'Supports PDF, Word, TXT, Markdown, HTML, ZIP and other document formats',
uploadSuccess: 'File uploaded successfully!', uploadSuccess: 'File uploaded successfully!',
uploadError: 'File upload failed, please try again', uploadError: 'File upload failed: ',
uploadingFile: 'Uploading file...', uploadingFile: 'Uploading file...',
fileSizeExceeded: fileSizeExceeded:
'File size exceeds 10MB limit. Please split into smaller files.', 'File size exceeds 10MB limit. Please split into smaller files.',
actions: 'Actions', actions: 'Actions',
delete: 'Delete File', delete: 'Delete File',
fileDeleteSuccess: 'File deleted successfully', fileDeleteSuccess: 'File deleted successfully',
fileDeleteFailed: 'File deletion failed', fileDeleteFailed: 'File deletion failed: ',
processing: 'Processing', processing: 'Processing',
completed: 'Completed', completed: 'Completed',
failed: 'Failed', failed: 'Failed',
@@ -745,7 +745,7 @@ const enUS = {
content: 'Content', content: 'Content',
fileName: 'File Name', fileName: 'File Name',
noResults: 'No results', noResults: 'No results',
retrieveError: 'Retrieve failed', retrieveError: 'Retrieve failed: ',
unknownEngine: 'Unknown Engine', unknownEngine: 'Unknown Engine',
knowledgeEngine: 'Knowledge Engine', knowledgeEngine: 'Knowledge Engine',
knowledgeEngineRequired: 'Knowledge engine is required', knowledgeEngineRequired: 'Knowledge engine is required',
@@ -758,9 +758,9 @@ const enUS = {
retrievalSettings: 'Retrieval Settings', retrievalSettings: 'Retrieval Settings',
noEnginesAvailable: 'No knowledge base engines available', noEnginesAvailable: 'No knowledge base engines available',
installEngineHint: 'Please install a knowledge base plugin first', installEngineHint: 'Please install a knowledge base plugin first',
createKnowledgeBaseFailed: 'Failed to create knowledge base', createKnowledgeBaseFailed: 'Failed to create knowledge base: ',
loadKnowledgeBaseFailed: 'Failed to load knowledge base', loadKnowledgeBaseFailed: 'Failed to load knowledge base: ',
deleteKnowledgeBaseFailed: 'Failed to delete knowledge base', deleteKnowledgeBaseFailed: 'Failed to delete knowledge base: ',
getKnowledgeBaseListError: 'Failed to get knowledge base list: ', getKnowledgeBaseListError: 'Failed to get knowledge base list: ',
embeddingModel: 'Embedding Model', embeddingModel: 'Embedding Model',
embeddingModelRequired: 'Embedding model is required for this engine', embeddingModelRequired: 'Embedding model is required for this engine',
+6 -6
View File
@@ -709,7 +709,7 @@ const jaJP = {
cannotChangeEmbeddingModel: cannotChangeEmbeddingModel:
'知識ベース作成後は埋め込みモデルを変更できません', '知識ベース作成後は埋め込みモデルを変更できません',
updateKnowledgeBaseSuccess: '知識ベースの更新に成功しました', updateKnowledgeBaseSuccess: '知識ベースの更新に成功しました',
updateKnowledgeBaseFailed: '知識ベースの更新に失敗しました', updateKnowledgeBaseFailed: '知識ベースの更新に失敗しました',
documentsTab: { documentsTab: {
name: '名前', name: '名前',
status: 'ステータス', status: 'ステータス',
@@ -720,14 +720,14 @@ const jaJP = {
supportedFormats: supportedFormats:
'PDF、Word、TXT、Markdownなどのドキュメントファイルをサポートしています', 'PDF、Word、TXT、Markdownなどのドキュメントファイルをサポートしています',
uploadSuccess: 'ファイルのアップロードに成功しました!', uploadSuccess: 'ファイルのアップロードに成功しました!',
uploadError: 'ファイルのアップロードに失敗しました。再度お試しください', uploadError: 'ファイルのアップロードに失敗しました',
uploadingFile: 'ファイルをアップロード中...', uploadingFile: 'ファイルをアップロード中...',
fileSizeExceeded: fileSizeExceeded:
'ファイルサイズが10MBの制限を超えています。より小さいファイルに分割してください。', 'ファイルサイズが10MBの制限を超えています。より小さいファイルに分割してください。',
actions: 'アクション', actions: 'アクション',
delete: 'ドキュメントを削除', delete: 'ドキュメントを削除',
fileDeleteSuccess: 'ドキュメントの削除に成功しました', fileDeleteSuccess: 'ドキュメントの削除に成功しました',
fileDeleteFailed: 'ドキュメントの削除に失敗しました', fileDeleteFailed: 'ドキュメントの削除に失敗しました',
processing: '処理中', processing: '処理中',
completed: '完了', completed: '完了',
failed: '失敗', failed: '失敗',
@@ -748,10 +748,10 @@ const jaJP = {
content: '内容', content: '内容',
fileName: 'ファイル名', fileName: 'ファイル名',
noResults: '検索結果がありません', noResults: '検索結果がありません',
retrieveError: '検索に失敗しました', retrieveError: '検索に失敗しました',
unknownEngine: '不明なエンジン', unknownEngine: '不明なエンジン',
loadKnowledgeBaseFailed: 'ナレッジベースの読み込みに失敗しました', loadKnowledgeBaseFailed: 'ナレッジベースの読み込みに失敗しました',
deleteKnowledgeBaseFailed: 'ナレッジベースの削除に失敗しました', deleteKnowledgeBaseFailed: 'ナレッジベースの削除に失敗しました',
getKnowledgeBaseListError: 'ナレッジベース一覧の取得に失敗しました:', getKnowledgeBaseListError: 'ナレッジベース一覧の取得に失敗しました:',
addExternal: '外部ナレッジベースを追加', addExternal: '外部ナレッジベースを追加',
createExternalSuccess: '外部ナレッジベースが正常に作成されました', createExternalSuccess: '外部ナレッジベースが正常に作成されました',
+7 -7
View File
@@ -679,7 +679,7 @@ const zhHans = {
updateTime: '更新于', updateTime: '更新于',
cannotChangeEmbeddingModel: '知识库创建后不可修改嵌入模型', cannotChangeEmbeddingModel: '知识库创建后不可修改嵌入模型',
updateKnowledgeBaseSuccess: '知识库更新成功', updateKnowledgeBaseSuccess: '知识库更新成功',
updateKnowledgeBaseFailed: '知识库更新失败', updateKnowledgeBaseFailed: '知识库更新失败',
documentsTab: { documentsTab: {
name: '名称', name: '名称',
status: '状态', status: '状态',
@@ -688,13 +688,13 @@ const zhHans = {
uploading: '上传中...', uploading: '上传中...',
supportedFormats: '支持 PDF、Word、TXT、Markdown、HTML、ZIP 等文档格式', supportedFormats: '支持 PDF、Word、TXT、Markdown、HTML、ZIP 等文档格式',
uploadSuccess: '文件上传成功!', uploadSuccess: '文件上传成功!',
uploadError: '文件上传失败,请重试', uploadError: '文件上传失败',
uploadingFile: '上传文件中...', uploadingFile: '上传文件中...',
fileSizeExceeded: '文件大小超过 10MB 限制,请分割成较小的文件后上传', fileSizeExceeded: '文件大小超过 10MB 限制,请分割成较小的文件后上传',
actions: '操作', actions: '操作',
delete: '删除文件', delete: '删除文件',
fileDeleteSuccess: '文件删除成功', fileDeleteSuccess: '文件删除成功',
fileDeleteFailed: '文件删除失败', fileDeleteFailed: '文件删除失败',
processing: '处理中', processing: '处理中',
completed: '完成', completed: '完成',
failed: '失败', failed: '失败',
@@ -715,7 +715,7 @@ const zhHans = {
content: '内容', content: '内容',
fileName: '文件名', fileName: '文件名',
noResults: '暂无结果', noResults: '暂无结果',
retrieveError: '检索失败', retrieveError: '检索失败',
unknownEngine: '未知引擎', unknownEngine: '未知引擎',
knowledgeEngine: '知识引擎', knowledgeEngine: '知识引擎',
knowledgeEngineRequired: '知识引擎不能为空', knowledgeEngineRequired: '知识引擎不能为空',
@@ -727,9 +727,9 @@ const zhHans = {
retrievalSettings: '检索设置', retrievalSettings: '检索设置',
noEnginesAvailable: '没有可用的知识库引擎', noEnginesAvailable: '没有可用的知识库引擎',
installEngineHint: '请先安装知识库插件', installEngineHint: '请先安装知识库插件',
createKnowledgeBaseFailed: '知识库创建失败', createKnowledgeBaseFailed: '知识库创建失败',
loadKnowledgeBaseFailed: '知识库加载失败', loadKnowledgeBaseFailed: '知识库加载失败',
deleteKnowledgeBaseFailed: '知识库删除失败', deleteKnowledgeBaseFailed: '知识库删除失败',
getKnowledgeBaseListError: '获取知识库列表失败:', getKnowledgeBaseListError: '获取知识库列表失败:',
embeddingModel: '嵌入模型', embeddingModel: '嵌入模型',
embeddingModelRequired: '此引擎需要选择嵌入模型', embeddingModelRequired: '此引擎需要选择嵌入模型',
+6 -6
View File
@@ -672,7 +672,7 @@ const zhHant = {
updateTime: '更新於', updateTime: '更新於',
cannotChangeEmbeddingModel: '知識庫建立後不可修改嵌入模型', cannotChangeEmbeddingModel: '知識庫建立後不可修改嵌入模型',
updateKnowledgeBaseSuccess: '知識庫更新成功', updateKnowledgeBaseSuccess: '知識庫更新成功',
updateKnowledgeBaseFailed: '知識庫更新失敗', updateKnowledgeBaseFailed: '知識庫更新失敗',
documentsTab: { documentsTab: {
name: '名稱', name: '名稱',
status: '狀態', status: '狀態',
@@ -681,13 +681,13 @@ const zhHant = {
uploading: '上傳中...', uploading: '上傳中...',
supportedFormats: '支援 PDF、Word、TXT、Markdown 等文檔格式', supportedFormats: '支援 PDF、Word、TXT、Markdown 等文檔格式',
uploadSuccess: '文檔上傳成功!', uploadSuccess: '文檔上傳成功!',
uploadError: '文檔上傳失敗,請重試', uploadError: '文檔上傳失敗',
uploadingFile: '上傳文檔中...', uploadingFile: '上傳文檔中...',
fileSizeExceeded: '檔案大小超過 10MB 限制,請分割成較小的檔案後上傳', fileSizeExceeded: '檔案大小超過 10MB 限制,請分割成較小的檔案後上傳',
actions: '操作', actions: '操作',
delete: '刪除文檔', delete: '刪除文檔',
fileDeleteSuccess: '文檔刪除成功', fileDeleteSuccess: '文檔刪除成功',
fileDeleteFailed: '文檔刪除失敗', fileDeleteFailed: '文檔刪除失敗',
processing: '處理中', processing: '處理中',
completed: '完成', completed: '完成',
failed: '失敗', failed: '失敗',
@@ -708,10 +708,10 @@ const zhHant = {
content: '內容', content: '內容',
fileName: '文檔名稱', fileName: '文檔名稱',
noResults: '暫無結果', noResults: '暫無結果',
retrieveError: '檢索失敗', retrieveError: '檢索失敗',
unknownEngine: '未知引擎', unknownEngine: '未知引擎',
loadKnowledgeBaseFailed: '知識庫載入失敗', loadKnowledgeBaseFailed: '知識庫載入失敗',
deleteKnowledgeBaseFailed: '知識庫刪除失敗', deleteKnowledgeBaseFailed: '知識庫刪除失敗',
getKnowledgeBaseListError: '取得知識庫列表失敗:', getKnowledgeBaseListError: '取得知識庫列表失敗:',
addExternal: '添加外部知識庫', addExternal: '添加外部知識庫',
createExternalSuccess: '外部知識庫創建成功', createExternalSuccess: '外部知識庫創建成功',