From bb19141edc671d12aa146957942037f7bcf485ea Mon Sep 17 00:00:00 2001 From: hz4th_coder Date: Mon, 1 Jun 2026 17:08:09 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E4=BF=AE=E5=A4=8DWeb=E6=9C=8D=E5=8A=A1?= =?UTF-8?q?=E7=9B=91=E6=8E=A7=E5=8C=BA=E5=9F=9F=E7=8A=B6=E6=80=81=E6=98=BE?= =?UTF-8?q?=E7=A4=BA=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 后端 status 字段从字符串改为结构化对象 {status, ports: {port: {running}}} 前端期望的是 p.status.status 和 p.status.ports[port].running,之前的字符串格式导致: - 所有服务状态始终显示「未知」 - 所有端口始终显示红色(已停止) --- routes_project.py | 38 ++++++++++++++++++++++++++++++++++---- 1 file changed, 34 insertions(+), 4 deletions(-) diff --git a/routes_project.py b/routes_project.py index d55420b..a76929b 100644 --- a/routes_project.py +++ b/routes_project.py @@ -20,10 +20,25 @@ def register_project_routes(app): """获取项目列表""" projects = load_projects() - # 添加状态信息 + # 添加状态信息(结构化对象,前端期望 status.status 和 status.ports) for project in projects: ports = project.get('ports', []) - project['status'] = 'running' if all(check_port(p) for p in ports) else 'stopped' + port_statuses = {} + for p in ports: + port_statuses[str(p)] = {'running': check_port(p)} + + running_count = sum(1 for ps in port_statuses.values() if ps['running']) + if running_count == len(ports) and len(ports) > 0: + overall = 'running' + elif running_count > 0: + overall = 'partial' + else: + overall = 'stopped' + + project['status'] = { + 'status': overall, + 'ports': port_statuses + } return jsonify({ 'projects': projects, @@ -169,10 +184,25 @@ def register_project_routes(app): data = load_projects_full() services = data.get('external_services', []) - # 添加状态 + # 添加状态(结构化对象,前端期望 status.status 和 status.ports) for service in services: ports = service.get('ports', []) - service['status'] = 'running' if all(check_port(p) for p in ports) else 'stopped' + port_statuses = {} + for p in ports: + port_statuses[str(p)] = {'running': check_port(p)} + + running_count = sum(1 for ps in port_statuses.values() if ps['running']) + if running_count == len(ports) and len(ports) > 0: + overall = 'running' + elif running_count > 0: + overall = 'partial' + else: + overall = 'stopped' + + service['status'] = { + 'status': overall, + 'ports': port_statuses + } return jsonify({'services': services})