diff --git a/packages/web/i18n/en/app.json b/packages/web/i18n/en/app.json
index b84d771d3..6f8c09397 100644
--- a/packages/web/i18n/en/app.json
+++ b/packages/web/i18n/en/app.json
@@ -109,6 +109,7 @@
"custom_plugin_default_installed_label": "Default Installed",
"custom_plugin_delete_success": "Delete successful",
"custom_plugin_duplicate": "Duplicate ID",
+ "custom_plugin_duplicate_tip": "Confirm that the import will overwrite the original resources",
"custom_plugin_has_token_fee_label": "Charge Token Fee",
"custom_plugin_intro_label": "Introduction",
"custom_plugin_intro_placeholder": "Add an introduction for this application",
diff --git a/packages/web/i18n/zh-CN/app.json b/packages/web/i18n/zh-CN/app.json
index fc2182dac..f8f34e8f2 100644
--- a/packages/web/i18n/zh-CN/app.json
+++ b/packages/web/i18n/zh-CN/app.json
@@ -111,6 +111,7 @@
"custom_plugin_default_installed_label": "默认安装",
"custom_plugin_delete_success": "删除成功",
"custom_plugin_duplicate": "ID 重复",
+ "custom_plugin_duplicate_tip": "确认导入将覆盖原有资源",
"custom_plugin_has_token_fee_label": "是否收取 Token 费用",
"custom_plugin_intro_label": "介绍",
"custom_plugin_intro_placeholder": "为这个应用添加一个介绍",
diff --git a/packages/web/i18n/zh-Hant/app.json b/packages/web/i18n/zh-Hant/app.json
index 3ba0e3a13..43614ca6d 100644
--- a/packages/web/i18n/zh-Hant/app.json
+++ b/packages/web/i18n/zh-Hant/app.json
@@ -108,6 +108,7 @@
"custom_plugin_default_installed_label": "預設安裝",
"custom_plugin_delete_success": "刪除成功",
"custom_plugin_duplicate": "ID 重複",
+ "custom_plugin_duplicate_tip": "確認導入將覆蓋原有資源",
"custom_plugin_has_token_fee_label": "是否收取 Token 費用",
"custom_plugin_intro_label": "介紹",
"custom_plugin_intro_placeholder": "為這個應用程式新增一個介紹",
diff --git a/projects/app/src/pageComponents/config/ImportPluginModal.tsx b/projects/app/src/pageComponents/config/ImportPluginModal.tsx
index 72c5100b8..ecbdbc8e2 100644
--- a/projects/app/src/pageComponents/config/ImportPluginModal.tsx
+++ b/projects/app/src/pageComponents/config/ImportPluginModal.tsx
@@ -82,10 +82,10 @@ const ImportPluginModal = ({
const isDuplicated = tools.some((tool) => tool.id.includes(toolDetail.toolId));
setUploadedFiles((prev) =>
- prev.map((f) =>
- f.name === file.name
+ prev.map((prevFile) =>
+ prevFile.name === file.name
? {
- ...f,
+ ...prevFile,
status: isDuplicated ? 'duplicate' : 'success',
toolId: parentId,
toolName: parseI18nString(toolDetail.name || '', i18n.language),
@@ -97,12 +97,16 @@ const ImportPluginModal = ({
return parseI18nString(currentTag?.tagName || '', i18n.language) || '';
}) || []
}
- : f
+ : prevFile
)
);
} catch (error: any) {
setUploadedFiles((prev) =>
- prev.map((f) => (f.name === file.name ? { ...f, status: 'error', errorMsg: error } : f))
+ prev.map((prevFile) =>
+ prevFile.name === file.name
+ ? { ...prevFile, status: 'error', errorMsg: error.message }
+ : prevFile
+ )
);
}
};
@@ -160,7 +164,7 @@ const ImportPluginModal = ({
const { runAsync: handleConfirmImport, loading: confirmLoading } = useRequest2(
async () => {
const successToolIds = uploadedFiles
- .filter((file) => file.status === 'success' && file.toolId)
+ .filter((file) => (file.status === 'success' || file.status === 'duplicate') && file.toolId)
.map((file) => file.toolId!);
await confirmPkgPluginUpload({ toolIds: successToolIds });
@@ -248,11 +252,15 @@ const ImportPluginModal = ({
textOverflow={'ellipsis'}
whiteSpace={'nowrap'}
>
- {item.status === 'success' && item.toolName ? item.toolName : item.name}
+ {(item.status === 'success' || item.status === 'duplicate') && item.toolName
+ ? item.toolName
+ : item.name}
- {item.status === 'success' && item.toolTags && item.toolTags.length > 0 ? (
+ {(item.status === 'success' || item.status === 'duplicate') &&
+ item.toolTags &&
+ item.toolTags.length > 0 ? (
item.toolTags.map((tag, tagIndex) => (
- {item.status === 'success' && item.toolIntro ? item.toolIntro : '-'}
+ {(item.status === 'success' || item.status === 'duplicate') && item.toolIntro
+ ? item.toolIntro
+ : '-'}
{(item.status === 'uploading' || item.status === 'parsing') && (
@@ -303,8 +313,10 @@ const ImportPluginModal = ({
fontSize={'xs'}
fontWeight={'medium'}
color={'yellow.500'}
+ gap={1}
>
{t('app:custom_plugin_duplicate')}
+
)}
{item.status === 'success' && (
@@ -371,7 +383,8 @@ const ImportPluginModal = ({