57 lines
1.7 KiB
TypeScript
Executable File
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 }; |