Files
playtool-demo/app/components/flow-nodes/nodes.ts
2025-08-22 14:03:18 +08:00

352 lines
7.4 KiB
TypeScript

export interface FlowNode {
id: string
name: string
type: string
taskId: string
icon: string
backgroundColor: string
shape: "square" | "circle" | "rounded"
textColor: string
category: "控制类" | "设备类" | "媒体类" | "灯光类" | "延时类"
config?: Record<string, any>
}
export const nodeDefinitions: Record<string, FlowNode> = {
// 控制类
"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;
};