| 274 | """ |
| 275 | |
| 276 | def dfs_html(node_id: str, indent_level: int): |
| 277 | node = nodes[node_id] |
| 278 | |
| 279 | # 确定样式类 |
| 280 | status_class = node.run_status |
| 281 | style = node.stage |
| 282 | if node.is_terminal: |
| 283 | style += " terminal" |
| 284 | |
| 285 | margin_left = indent_level * 30 |
| 286 | html_content = f'<div class="node {style}" style="margin-left: {margin_left}px;">' |
| 287 | html_content += f'<span class="{status_class}">{str(node)}</span>' |
| 288 | html_content += '</div>\n' |
| 289 | |
| 290 | # 递归子节点 |
| 291 | for child_id in node.children_ids: |
| 292 | html_content += dfs_html(child_id, indent_level + 1) |
| 293 | |
| 294 | return html_content |
| 295 | |
| 296 | html += dfs_html(root_id, 0) |
| 297 | |