'待执行', 'ongoing' => '进行中', 'completed' => '已完成', 'cancelled' => '已取消', ]; $st = (string)($node['status'] ?? 'planned'); if (!isset($statusLabels[$st])) $st = 'planned'; $sLoc = json_decode_field($node['start_location'] ?? null); $eLoc = json_decode_field($node['end_location'] ?? null); $transportParts = []; foreach (['trip_number', 'line_name', 'carrier', 'seat_info', 'gate'] as $field) { if (!empty($node[$field])) $transportParts[] = $node[$field]; } $durationText = ''; if (!empty($node['duration_minutes'])) { $mins = (int)$node['duration_minutes']; $durationText = $mins >= 60 ? intdiv($mins, 60) . ' 小时 ' . ($mins % 60) . ' 分' : $mins . ' 分钟'; } ?>
= e($node['activity_title']) ?> · = $node['node_category'] === 'plan' ? '计划节点' : '执行节点' ?> · = e($statusLabels[$st]) ?> · 由计划节点生成