diff --git a/web/src/assets/csv_template.csv b/web/src/assets/csv_template.csv
new file mode 100644
index 00000000..4002af7e
--- /dev/null
+++ b/web/src/assets/csv_template.csv
@@ -0,0 +1 @@
+Q A
\ No newline at end of file
diff --git a/web/src/i18n/en.ts b/web/src/i18n/en.ts
index 4b53403e..61e2bfbc 100644
--- a/web/src/i18n/en.ts
+++ b/web/src/i18n/en.ts
@@ -951,7 +951,8 @@ export const en = {
feishuFolderToken: 'Folder Token',
feishuFolderTokenRequired: 'Please enter Folder Token',
feishuFolderTokenPlaceholder: 'Enter your Feishu Folder Token',
- }
+ },
+ csvTemplate: 'Click to download CSV template',
},
api: {
pageTitle: 'Memory library IAP document',
diff --git a/web/src/i18n/zh.ts b/web/src/i18n/zh.ts
index 9ec419ca..fabd8190 100644
--- a/web/src/i18n/zh.ts
+++ b/web/src/i18n/zh.ts
@@ -438,7 +438,8 @@ export const zh = {
feishuFolderToken: '文件夹 Token',
feishuFolderTokenRequired: '请输入文件夹 Token',
feishuFolderTokenPlaceholder: '请输入您的飞书文件夹 Token',
- }
+ },
+ csvTemplate: '点击下载 CSV 模板',
},
application: {
searchPlaceholder: '搜索应用',
diff --git a/web/src/views/KnowledgeBase/[knowledgeBaseId]/CreateDataset.tsx b/web/src/views/KnowledgeBase/[knowledgeBaseId]/CreateDataset.tsx
index 41375981..127aab43 100644
--- a/web/src/views/KnowledgeBase/[knowledgeBaseId]/CreateDataset.tsx
+++ b/web/src/views/KnowledgeBase/[knowledgeBaseId]/CreateDataset.tsx
@@ -596,111 +596,121 @@ const CreateDataset = () => {
}
- {current === 0 && (
+ {current === 0 && (<>
- {source && (source === 'local' || source === 'csv') && (
-
{
- console.log('File list changed:', fileList);
- }}
- onRemove={async (file) => {
- // 如果文件正在上传,取消上传
- const fileUid = file.uid;
- const abortController = abortControllersRef.current.get(fileUid);
- if (abortController) {
- abortController.abort();
- abortControllersRef.current.delete(fileUid);
- console.log('Upload cancelled:', (file as any).name);
- // 取消上传后直接返回 true,允许移除文件
- return true;
- }
-
- // Only delete server file when file upload was successful (has response.id)
- if (file.response?.id) {
- try {
- await deleteDocument(file.response.id);
- setRechunkFileIds(prev => prev.filter(id => id !== file.response.id));
- console.log('Server file deleted:', file.response.id);
- return true;
- } catch (error) {
- console.error('Failed to delete file:', error);
- messageApi.error(t('common.deleteFailed') || 'Failed to delete file');
- return false; // Don't remove file when deletion fails
- }
- }
-
- // Also allow removal in other cases (such as failed uploads)
- return true;
- }} />
- )}
- {source && source === 'link' && (
-
+ {source && (source === 'local' || source === 'csv') && (
+
{
+ console.log('File list changed:', fileList);
+ }}
+ onRemove={async (file) => {
+ // 如果文件正在上传,取消上传
+ const fileUid = file.uid;
+ const abortController = abortControllersRef.current.get(fileUid);
+ if (abortController) {
+ abortController.abort();
+ abortControllersRef.current.delete(fileUid);
+ console.log('Upload cancelled:', (file as any).name);
+ // 取消上传后直接返回 true,允许移除文件
+ return true;
+ }
+
+ // Only delete server file when file upload was successful (has response.id)
+ if (file.response?.id) {
+ try {
+ await deleteDocument(file.response.id);
+ setRechunkFileIds(prev => prev.filter(id => id !== file.response.id));
+ console.log('Server file deleted:', file.response.id);
+ return true;
+ } catch (error) {
+ console.error('Failed to delete file:', error);
+ messageApi.error(t('common.deleteFailed') || 'Failed to delete file');
+ return false; // Don't remove file when deletion fails
+ }
+ }
+
+ // Also allow removal in other cases (such as failed uploads)
+ return true;
+ }}
+ />
+ )}
+ {source && source === 'link' && (
+
-
- {t('knowledgeBase.webLink')}
-
-
-
- {t('knowledgeBase.webLinkDesc',{count: 5})}
-
-
- {t('knowledgeBase.selectorTutorial')}
-
-
+
+ {t('knowledgeBase.webLink')}
+
+
+ {t('knowledgeBase.webLinkDesc',{count: 5})}
+
+
+ {t('knowledgeBase.selectorTutorial')}
+
+
+
)}
{source && source === 'text' && (
-
- )}
+
+ {source === 'csv' &&
+
+ {t('knowledgeBase.csvTemplate')}
+
+ }
+ >)}
{current === 1 && (