diff --git a/web/app/components/base/icons/assets/vender/line/general/search-menu.svg b/web/app/components/base/icons/assets/vender/line/general/search-menu.svg
new file mode 100644
index 0000000000..f61f69f4ba
--- /dev/null
+++ b/web/app/components/base/icons/assets/vender/line/general/search-menu.svg
@@ -0,0 +1,7 @@
+
diff --git a/web/app/components/base/icons/src/vender/line/general/SearchMenu.json b/web/app/components/base/icons/src/vender/line/general/SearchMenu.json
new file mode 100644
index 0000000000..5222574040
--- /dev/null
+++ b/web/app/components/base/icons/src/vender/line/general/SearchMenu.json
@@ -0,0 +1,77 @@
+{
+ "icon": {
+ "type": "element",
+ "isRootNode": true,
+ "name": "svg",
+ "attributes": {
+ "width": "32",
+ "height": "32",
+ "viewBox": "0 0 32 32",
+ "fill": "none",
+ "xmlns": "http://www.w3.org/2000/svg"
+ },
+ "children": [
+ {
+ "type": "element",
+ "name": "path",
+ "attributes": {
+ "d": "M28.0049 16C28.0049 20.4183 24.4231 24 20.0049 24C15.5866 24 12.0049 20.4183 12.0049 16C12.0049 11.5817 15.5866 8 20.0049 8C24.4231 8 28.0049 11.5817 28.0049 16Z",
+ "stroke": "currentColor",
+ "stroke-width": "2",
+ "stroke-linecap": "round",
+ "stroke-linejoin": "round"
+ },
+ "children": []
+ },
+ {
+ "type": "element",
+ "name": "path",
+ "attributes": {
+ "d": "M4.00488 16H6.67155",
+ "stroke": "currentColor",
+ "stroke-width": "2",
+ "stroke-linecap": "round",
+ "stroke-linejoin": "round"
+ },
+ "children": []
+ },
+ {
+ "type": "element",
+ "name": "path",
+ "attributes": {
+ "d": "M4.00488 9.33334H8.00488",
+ "stroke": "currentColor",
+ "stroke-width": "2",
+ "stroke-linecap": "round",
+ "stroke-linejoin": "round"
+ },
+ "children": []
+ },
+ {
+ "type": "element",
+ "name": "path",
+ "attributes": {
+ "d": "M4.00488 22.6667H8.00488",
+ "stroke": "currentColor",
+ "stroke-width": "2",
+ "stroke-linecap": "round",
+ "stroke-linejoin": "round"
+ },
+ "children": []
+ },
+ {
+ "type": "element",
+ "name": "path",
+ "attributes": {
+ "d": "M26 22L29.3333 25.3333",
+ "stroke": "currentColor",
+ "stroke-width": "2",
+ "stroke-linecap": "round",
+ "stroke-linejoin": "round"
+ },
+ "children": []
+ }
+ ]
+ },
+ "name": "SearchMenu"
+}
\ No newline at end of file
diff --git a/web/app/components/base/icons/src/vender/line/general/SearchMenu.tsx b/web/app/components/base/icons/src/vender/line/general/SearchMenu.tsx
new file mode 100644
index 0000000000..4826abb20f
--- /dev/null
+++ b/web/app/components/base/icons/src/vender/line/general/SearchMenu.tsx
@@ -0,0 +1,20 @@
+// GENERATE BY script
+// DON NOT EDIT IT MANUALLY
+
+import * as React from 'react'
+import data from './SearchMenu.json'
+import IconBase from '@/app/components/base/icons/IconBase'
+import type { IconData } from '@/app/components/base/icons/IconBase'
+
+const Icon = (
+ {
+ ref,
+ ...props
+ }: React.SVGProps & {
+ ref?: React.RefObject>;
+ },
+) =>
+
+Icon.displayName = 'SearchMenu'
+
+export default Icon
diff --git a/web/app/components/base/icons/src/vender/line/general/index.ts b/web/app/components/base/icons/src/vender/line/general/index.ts
index b5c7a7bbc1..1b6c7e7303 100644
--- a/web/app/components/base/icons/src/vender/line/general/index.ts
+++ b/web/app/components/base/icons/src/vender/line/general/index.ts
@@ -19,6 +19,7 @@ export { default as Pin01 } from './Pin01'
export { default as Pin02 } from './Pin02'
export { default as Plus02 } from './Plus02'
export { default as Refresh } from './Refresh'
+export { default as SearchMenu } from './SearchMenu'
export { default as Settings01 } from './Settings01'
export { default as Settings04 } from './Settings04'
export { default as Target04 } from './Target04'
diff --git a/web/app/components/plugins/reference-setting-modal/auto-update-setting/no-data-placeholder.tsx b/web/app/components/plugins/reference-setting-modal/auto-update-setting/no-data-placeholder.tsx
new file mode 100644
index 0000000000..979dc626e8
--- /dev/null
+++ b/web/app/components/plugins/reference-setting-modal/auto-update-setting/no-data-placeholder.tsx
@@ -0,0 +1,31 @@
+'use client'
+import type { FC } from 'react'
+import React from 'react'
+import cn from '@/utils/classnames'
+import { Group } from '@/app/components/base/icons/src/vender/other'
+import { SearchMenu } from '@/app/components/base/icons/src/vender/line/general'
+import { useTranslation } from 'react-i18next'
+
+type Props = {
+ className: string
+ noPlugins?: boolean
+}
+
+const NoDataPlaceholder: FC = ({
+ className,
+ noPlugins,
+}) => {
+ const { t } = useTranslation()
+ const icon = noPlugins ? () : ()
+ const text = t(`plugin.autoUpdate.noPluginPlaceholder.${noPlugins ? 'noInstalled' : 'noFound'}`)
+ return (
+
+ )
+}
+
+export default React.memo(NoDataPlaceholder)
diff --git a/web/app/components/plugins/reference-setting-modal/auto-update-setting/tool-picker.tsx b/web/app/components/plugins/reference-setting-modal/auto-update-setting/tool-picker.tsx
index d8375f6aec..62989f9460 100644
--- a/web/app/components/plugins/reference-setting-modal/auto-update-setting/tool-picker.tsx
+++ b/web/app/components/plugins/reference-setting-modal/auto-update-setting/tool-picker.tsx
@@ -13,6 +13,7 @@ import { useTranslation } from 'react-i18next'
import cn from '@/utils/classnames'
import ToolItem from './tool-item'
import Loading from '@/app/components/base/loading'
+import NoDataPlaceholder from './no-data-placeholder'
type Props = {
trigger: React.ReactNode
@@ -100,6 +101,10 @@ const ToolPicker: FC = ({
)
+ const noData = (
+
+ )
+
return (
= ({
{!isLoading && list.length > 0 && listContent}
+ {!isLoading && list.length === 0 && noData}
{isLoading && loadingContent}
diff --git a/web/i18n/en-US/plugin.ts b/web/i18n/en-US/plugin.ts
index b422767176..a4d8aad4e9 100644
--- a/web/i18n/en-US/plugin.ts
+++ b/web/i18n/en-US/plugin.ts
@@ -156,6 +156,10 @@ const translation = {
downgrade: 'Downgrade anyway',
exclude: 'Exclude from auto-update',
},
+ noPluginPlaceholder: {
+ noFound: 'No plugins were found',
+ noInstalled: 'No plugins installed',
+ },
},
pluginInfoModal: {
title: 'Plugin info',
diff --git a/web/i18n/zh-Hans/plugin.ts b/web/i18n/zh-Hans/plugin.ts
index 85d0d0df08..1faeea43f1 100644
--- a/web/i18n/zh-Hans/plugin.ts
+++ b/web/i18n/zh-Hans/plugin.ts
@@ -156,6 +156,10 @@ const translation = {
downgrade: '仍然降级',
exclude: '从自动更新中排除',
},
+ noPluginPlaceholder: {
+ noFound: '未找到插件',
+ noInstalled: '未安装插件',
+ },
},
pluginInfoModal: {
title: '插件信息',