collect-system/apps/web/src/components/common/editor/graph/data.ts

57 lines
1.7 KiB
TypeScript
Executable File

import { MarkerType } from "@xyflow/react";
// 生成思维导图数据的函数
function generateMindMapData(levels: number, nodesPerLevel: number) {
const nodes = [];
const edges = [];
// 添加根节点
nodes.push({
id: 'root',
data: { label: '核心主题', level: 0 },
type: 'graph-node',
position: { x: 0, y: 0 }
});
// 为每一层生成节点
for (let level = 1; level <= levels; level++) {
const angleStep = (2 * Math.PI) / nodesPerLevel;
const radius = level * 200; // 每层的半径
for (let i = 0; i < nodesPerLevel; i++) {
const angle = i * angleStep;
const nodeId = `node-${level}-${i}`;
// 计算节点位置
const x = Math.cos(angle) * radius;
const y = Math.sin(angle) * radius;
// 添加节点
nodes.push({
id: nodeId,
data: { label: `主题${level}-${i}`, level },
type: 'graph-node',
position: { x, y }
});
// 添加边
// 第一层连接到根节点,其他层连接到上一层的节点
const sourceId = level === 1 ? 'root' : `node-${level - 1}-${Math.floor(i / 2)}`;
edges.push({
id: `edge-${level}-${i}`,
source: sourceId,
target: nodeId,
type: 'graph-edge',
});
}
}
return { nodes, edges };
}
// 生成测试数据 - 可以调整参数来控制规模
// 参数1: 层级数量
// 参数2: 每层节点数量
const { nodes: initialNodes, edges: initialEdges } = generateMindMapData(2, 3);
export { initialNodes, initialEdges };