export interface FlowNode { id: string name: string type: string taskId: string icon: string backgroundColor: string shape: "square" | "circle" | "rounded" textColor: string category: "控制类" | "设备类" | "媒体类" | "灯光类" | "延时类" config?: Record } export const nodeDefinitions: Record = { // 控制类 "control-poweroff": { id: "control-poweroff", name: "一键关机", type: "control", taskId: "power_off_all", icon: "power", backgroundColor: "#ef4444", shape: "rounded", textColor: "#ffffff", category: "控制类" }, "control-poweron": { id: "control-poweron", name: "一键开机", type: "control", taskId: "power_on_all", icon: "power", backgroundColor: "#22c55e", shape: "rounded", textColor: "#ffffff", category: "控制类" }, // 设备类 "device-poweroff-host1": { id: "device-poweroff-host1", name: "关 [!] 主机1", type: "device", taskId: "power_off_host1", icon: "computer", backgroundColor: "#ef4444", shape: "square", textColor: "#ffffff", category: "设备类" }, "device-poweron-host1": { id: "device-poweron-host1", name: "开 [!] 主机1", type: "device", taskId: "power_on_host1", icon: "computer", backgroundColor: "#22c55e", shape: "square", textColor: "#ffffff", category: "设备类" }, "device-poweroff-host2": { id: "device-poweroff-host2", name: "关 [!] 主机2", type: "device", taskId: "power_off_host2", icon: "computer", backgroundColor: "#ef4444", shape: "square", textColor: "#ffffff", category: "设备类" }, "device-poweron-host2": { id: "device-poweron-host2", name: "开 [!] 主机2", type: "device", taskId: "power_on_host2", icon: "computer", backgroundColor: "#22c55e", shape: "square", textColor: "#ffffff", category: "设备类" }, "device-poweron-projector1": { id: "device-poweron-projector1", name: "开 [!] 投影1", type: "device", taskId: "power_on_projector1", icon: "monitor", backgroundColor: "#22c55e", shape: "square", textColor: "#ffffff", category: "设备类" }, "device-poweroff-projector1": { id: "device-poweroff-projector1", name: "关 [!] 投影1", type: "device", taskId: "power_off_projector1", icon: "monitor", backgroundColor: "#ef4444", shape: "square", textColor: "#ffffff", category: "设备类" }, "device-poweron-projector2": { id: "device-poweron-projector2", name: "开 [!] 投影2", type: "device", taskId: "power_on_projector2", icon: "monitor", backgroundColor: "#22c55e", shape: "square", textColor: "#ffffff", category: "设备类" }, "device-poweroff-projector2": { id: "device-poweroff-projector2", name: "关 [!] 投影2", type: "device", taskId: "power_off_projector2", icon: "monitor", backgroundColor: "#ef4444", shape: "square", textColor: "#ffffff", category: "设备类" }, "device-poweron-projector3": { id: "device-poweron-projector3", name: "开 [!] 投影3", type: "device", taskId: "power_on_projector3", icon: "monitor", backgroundColor: "#22c55e", shape: "square", textColor: "#ffffff", category: "设备类" }, "device-poweroff-projector3": { id: "device-poweroff-projector3", name: "关 [!] 投影3", type: "device", taskId: "power_off_projector3", icon: "monitor", backgroundColor: "#ef4444", shape: "square", textColor: "#ffffff", category: "设备类" }, // 媒体类 "media-button3": { id: "media-button3", name: "BUTTON3", type: "media", taskId: "media_button3", icon: "square", backgroundColor: "#3b82f6", shape: "rounded", textColor: "#ffffff", category: "媒体类" }, "media-play": { id: "media-play", name: "播放", type: "media", taskId: "media_play", icon: "play", backgroundColor: "#22c55e", shape: "circle", textColor: "#ffffff", category: "媒体类" }, "media-pause": { id: "media-pause", name: "暂停", type: "media", taskId: "media_pause", icon: "pause", backgroundColor: "#f97316", shape: "circle", textColor: "#ffffff", category: "媒体类" }, "media-stop": { id: "media-stop", name: "停止", type: "media", taskId: "media_stop", icon: "square", backgroundColor: "#ef4444", shape: "circle", textColor: "#ffffff", category: "媒体类" }, "media-prev": { id: "media-prev", name: "上一曲", type: "media", taskId: "media_prev", icon: "skip-back", backgroundColor: "#8b5cf6", shape: "circle", textColor: "#ffffff", category: "媒体类" }, "media-next": { id: "media-next", name: "下一曲", type: "media", taskId: "media_next", icon: "skip-forward", backgroundColor: "#8b5cf6", shape: "circle", textColor: "#ffffff", category: "媒体类" }, "media-volume-down": { id: "media-volume-down", name: "音量减", type: "media", taskId: "media_volume_down", icon: "volume-2", backgroundColor: "#06b6d4", shape: "circle", textColor: "#ffffff", category: "媒体类" }, "media-volume-up": { id: "media-volume-up", name: "音量加", type: "media", taskId: "media_volume_up", icon: "volume-2", backgroundColor: "#06b6d4", shape: "circle", textColor: "#ffffff", category: "媒体类" }, "media-mute": { id: "media-mute", name: "静音", type: "media", taskId: "media_mute", icon: "volume-x", backgroundColor: "#f97316", shape: "circle", textColor: "#ffffff", category: "媒体类" }, "media-video1": { id: "media-video1", name: "视频一", type: "media", taskId: "media_video1", icon: "play-square", backgroundColor: "#6366f1", shape: "rounded", textColor: "#ffffff", category: "媒体类" }, "media-video2": { id: "media-video2", name: "视频二", type: "media", taskId: "media_video2", icon: "play-square", backgroundColor: "#6366f1", shape: "rounded", textColor: "#ffffff", category: "媒体类" }, "media-video3": { id: "media-video3", name: "视频三", type: "media", taskId: "media_video3", icon: "play-square", backgroundColor: "#6366f1", shape: "rounded", textColor: "#ffffff", category: "媒体类" }, "media-button1": { id: "media-button1", name: "BUTTON1", type: "media", taskId: "media_button1", icon: "square", backgroundColor: "#3b82f6", shape: "rounded", textColor: "#ffffff", category: "媒体类" }, // 延时类 "delay-2s": { id: "delay-2s", name: "延时2秒", type: "delay", taskId: "delay_2s", icon: "clock", backgroundColor: "#f59e0b", shape: "rounded", textColor: "#ffffff", category: "延时类", config: { duration: 2000 } }, "delay-5s": { id: "delay-5s", name: "延时5秒", type: "delay", taskId: "delay_5s", icon: "clock", backgroundColor: "#f59e0b", shape: "rounded", textColor: "#ffffff", category: "延时类", config: { duration: 5000 } }, "delay-custom": { id: "delay-custom", name: "自定义延时时间", type: "delay", taskId: "delay_custom", icon: "clock", backgroundColor: "#f59e0b", shape: "rounded", textColor: "#ffffff", category: "延时类", config: { duration: 1000, editable: true } } }; export const getNodesByCategory = () => { const categories = { 控制类: [] as FlowNode[], 设备类: [] as FlowNode[], 媒体类: [] as FlowNode[], 灯光类: [] as FlowNode[], 延时类: [] as FlowNode[] }; Object.values(nodeDefinitions).forEach((node) => { if (categories[node.category]) { categories[node.category].push(node); } }); return categories; };