diff --git a/client/web/src/plugin/PluginStore/index.tsx b/client/web/src/plugin/PluginStore/index.tsx index b9d7ff90..b946d849 100644 --- a/client/web/src/plugin/PluginStore/index.tsx +++ b/client/web/src/plugin/PluginStore/index.tsx @@ -11,6 +11,7 @@ import { builtinPlugins } from '../builtin'; import { pluginManager } from '../manager'; import { PluginStoreItem } from './Item'; import { ManualInstall } from './ManualInstall'; +import _uniqBy from 'lodash/uniqBy'; function usePluginStoreData() { const { loading: loading1, value: installedPluginList = [] } = useAsync( @@ -48,14 +49,16 @@ export const PluginStore: React.FC = React.memo(() => { {t('已安装')}
- {[...builtinPlugins, ...installedPluginList].map((plugin) => ( - - ))} + {_uniqBy([...builtinPlugins, ...installedPluginList], 'name').map( + (plugin) => ( + + ) + )}
diff --git a/client/web/src/plugin/manager.ts b/client/web/src/plugin/manager.ts index 38cdee56..f6f89e21 100644 --- a/client/web/src/plugin/manager.ts +++ b/client/web/src/plugin/manager.ts @@ -9,6 +9,7 @@ import _once from 'lodash/once'; import { builtinPlugins } from './builtin'; import { showPluginLoadError } from './showPluginLoadError'; import { injectTailchatGlobalValue } from '@/utils/global-helper'; +import _uniqBy from 'lodash/uniqBy'; class PluginManager { /** @@ -20,10 +21,10 @@ class PluginManager { * 初始化插件 */ initPlugins = _once(async () => { - const installedPlugins = [ - ...builtinPlugins, - ...(await this.getInstalledPlugins()), - ]; + const installedPlugins = _uniqBy( + [...builtinPlugins, ...(await this.getInstalledPlugins())], + 'name' + ); const plugins = installedPlugins.map(({ name, url }) => ({ name,