Add manual plugin manager registration support

Introduces backend and frontend logic to manually register the plugin manager if not already loaded. Adds a new API endpoint and frontend UI prompt to guide users through registration after plugin installation when necessary.
This commit is contained in:
手瓜一十雪
2026-01-29 15:44:26 +08:00
parent f5a18374c9
commit f3549adf8f
4 changed files with 87 additions and 1 deletions

View File

@@ -38,6 +38,7 @@ export default function PluginStorePage () {
const [loading, setLoading] = useState(false);
const [searchQuery, setSearchQuery] = useState('');
const [activeTab, setActiveTab] = useState<string>('all');
const [pluginManagerNotFound, setPluginManagerNotFound] = useState(false);
const dialog = useDialog();
// 获取镜像列表
@@ -52,6 +53,10 @@ export default function PluginStorePage () {
try {
const data = await PluginManager.getPluginStoreList();
setPlugins(data.plugins);
// 检查插件管理器是否已加载
const listResult = await PluginManager.getPluginList();
setPluginManagerNotFound(listResult.pluginManagerNotFound);
} catch (e: any) {
toast.error(e.message);
} finally {
@@ -195,6 +200,33 @@ export default function PluginStorePage () {
} else if (data.success) {
toast.success('插件安装成功!', { id: loadingToast });
eventSource.close();
// 安装成功后检查插件管理器状态
if (pluginManagerNotFound) {
dialog.confirm({
title: '插件管理器未加载',
content: (
<div className="space-y-2">
<p className="text-sm text-default-600">
</p>
<p className="text-sm text-default-600">
</p>
</div>
),
confirmText: '注册插件管理器',
cancelText: '稍后再说',
onConfirm: async () => {
try {
await PluginManager.registerPluginManager();
toast.success('插件管理器注册成功');
setPluginManagerNotFound(false);
} catch (e: any) {
toast.error('注册失败: ' + e.message);
}
},
});
}
} else if (data.message) {
toast.loading(data.message, { id: loadingToast });
}