import React from "react" import { Card, List, Button, Tag, Space, Typography, Spin, Empty, message } from "antd" import { ThunderboltOutlined, DashboardOutlined, HistoryOutlined, CloudOutlined, CheckCircleOutlined, CloseCircleOutlined, DownloadOutlined, DeleteOutlined, } from "@ant-design/icons" import { useBuiltinPlugins } from "../hooks/useBuiltinPlugins" import { BuiltinPluginMeta } from "../plugins/builtin" const { Title, Text, Paragraph } = Typography const categoryIcons: Record = { automation: , visualization: , management: , integration: , } const categoryLabels: Record = { automation: "自动化", visualization: "可视化", management: "管理", integration: "集成", } interface BuiltinPluginManagerProps { canEdit: boolean } export const BuiltinPluginManager: React.FC = ({ canEdit }) => { const { plugins, loading, install, uninstall, enable, disable } = useBuiltinPlugins() const [messageApi, contextHolder] = message.useMessage() const handleInstall = async (pluginId: string) => { try { await install(pluginId) messageApi.success("插件安装成功") } catch (error) { messageApi.error("插件安装失败") } } const handleUninstall = async (pluginId: string) => { try { await uninstall(pluginId) messageApi.success("插件已卸载") } catch (error) { messageApi.error("插件卸载失败") } } const handleEnable = async (pluginId: string) => { try { await enable(pluginId) messageApi.success("插件已启用") } catch (error) { messageApi.error("插件启用失败") } } const handleDisable = async (pluginId: string) => { try { await disable(pluginId) messageApi.success("插件已禁用") } catch (error) { messageApi.error("插件禁用失败") } } const renderPluginActions = ( plugin: BuiltinPluginMeta & { installed: boolean; enabled: boolean } ) => { if (!plugin.installed) { return ( ) } return ( {plugin.enabled ? ( ) : ( )} ) } return (
{contextHolder} 内置插件管理 管理 SecScore 的内置功能插件。安装后可在侧边栏访问对应功能。 {loading ? (
) : plugins.length === 0 ? ( ) : ( ( {categoryIcons[plugin.category]} {plugin.name} } extra={ {plugin.enabled ? "已启用" : plugin.installed ? "已安装" : "未安装"} } >
{plugin.description}
{categoryLabels[plugin.category]} {plugin.requiresAdmin && 需要管理员权限}
版本 {plugin.version} {renderPluginActions(plugin)}
)} /> )}
) }