diff --git a/packages/napcat-webui-frontend/src/pages/dashboard/plugin_store.tsx b/packages/napcat-webui-frontend/src/pages/dashboard/plugin_store.tsx index f8c52ff1..32236498 100644 --- a/packages/napcat-webui-frontend/src/pages/dashboard/plugin_store.tsx +++ b/packages/napcat-webui-frontend/src/pages/dashboard/plugin_store.tsx @@ -9,6 +9,7 @@ import toast from 'react-hot-toast'; import { IoMdRefresh, IoMdSearch, IoMdSettings } from 'react-icons/io'; import clsx from 'clsx'; import { EventSourcePolyfill } from 'event-source-polyfill'; +import { useLocalStorage } from '@uidotdev/usehooks'; import PluginStoreCard, { InstallStatus } from '@/components/display_card/plugin_store_card'; import PluginManager, { PluginItem } from '@/controllers/plugin_manager'; @@ -226,68 +227,70 @@ export default function PluginStorePage () { } }; + const [backgroundImage] = useLocalStorage(key.backgroundImage, ''); + const hasBackground = !!backgroundImage; + return ( <> 插件商店 - NapCat WebUI
- {/* 头部 */} -
-
-

插件商店

- + {/* 固定头部区域 */} +
+ {/* 头部 */} +
+
+

插件商店

+ +
+ + {/* 商店列表源卡片 */} + + +
+
+ 列表源: + {getStoreSourceDisplayName()} +
+ + + +
+
+
- {/* 商店列表源卡片 */} - - -
-
- 列表源: - {getStoreSourceDisplayName()} -
- - - -
-
-
-
- - {/* 搜索框 */} -
- } - value={searchQuery} - onValueChange={setSearchQuery} - className="max-w-md" - /> -
- - {/* 标签页 */} -
- {/* 加载遮罩 - 只遮住插件列表区域 */} - {loading && ( -
- -
- )} + {/* 搜索框 */} +
+ } + value={searchQuery} + onValueChange={setSearchQuery} + className="max-w-md" + /> +
+ {/* 标签页导航 */} {tabs.map((tab) => ( - -
- {categorizedPlugins[tab.key]?.map((plugin) => { - const installInfo = getPluginInstallInfo(plugin); - return ( - handleInstall(plugin)} - /> - ); - })} -
-
+ /> ))}
+ + {/* 插件列表区域 */} +
+ {/* 加载遮罩 - 只遮住插件列表区域 */} + {loading && ( +
+ +
+ )} + + +
+ {categorizedPlugins[activeTab]?.map((plugin) => { + const installInfo = getPluginInstallInfo(plugin); + return ( + handleInstall(plugin)} + /> + ); + })} +
+
{/* 商店列表源选择弹窗 */}