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 = ({