@echo off setlocal enabledelayedexpansion echo ================================================ echo agent_jrxml 启动 (全栈) echo ================================================ cd /d "%~dp0" :: 清理残留进程 echo [清理] 检查残留进程... for /f "tokens=5" %%a in ('netstat -ano ^| findstr ":8000.*LISTENING"') do taskkill /F /PID %%a >nul 2>&1 for /f "tokens=5" %%a in ('netstat -ano ^| findstr ":8001.*LISTENING"') do taskkill /F /PID %%a >nul 2>&1 for /f "tokens=5" %%a in ('netstat -ano ^| findstr ":5173.*LISTENING"') do taskkill /F /PID %%a >nul 2>&1 echo. :: 1. 验证服务 echo [1/3] 验证服务 :8001 start "jrxml-validator" /MIN .venv\Scripts\python.exe -c "import uvicorn; uvicorn.run('validation_service.main:app',host='0.0.0.0',port=8001,reload=False)" :wait_val ping -n 2 127.0.0.1 >nul powershell -Command "try{$r=Invoke-WebRequest -Uri http://localhost:8001/health -TimeoutSec 2 -UseBasicParsing;exit 0}catch{exit 1}" >nul 2>&1 if errorlevel 1 goto wait_val echo :8001 就绪 :: 2. API 服务 echo [2/3] API 服务 :8000 start "jrxml-api" /MIN .venv\Scripts\python.exe -c "import uvicorn; uvicorn.run('api_server:app',host='0.0.0.0',port=8000,reload=False)" :wait_api ping -n 2 127.0.0.1 >nul powershell -Command "try{$r=Invoke-WebRequest -Uri http://localhost:8000/api/health -TimeoutSec 2 -UseBasicParsing;exit 0}catch{exit 1}" >nul 2>&1 if errorlevel 1 goto wait_api echo :8000 就绪 :: 3. 前端 echo [3/3] 前端 :5173 if not exist "%~dp0frontend\node_modules" ( echo [安装] node_modules 不存在,正在 npm install... cd /d "%~dp0frontend" call npm install cd /d "%~dp0" ) cd /d "%~dp0frontend" start "jrxml-frontend" /MIN cmd /c "npm run dev" cd /d "%~dp0" :wait_fe ping -n 3 127.0.0.1 >nul powershell -Command "try{$r=Invoke-WebRequest -Uri http://localhost:5173 -TimeoutSec 3 -UseBasicParsing;exit 0}catch{exit 1}" >nul 2>&1 if errorlevel 1 goto wait_fe echo :5173 就绪 echo. echo ================================================ echo 全部就绪: echo 前端: http://localhost:5173 echo API: http://localhost:8000/docs echo 验证: http://localhost:8001/health echo 运行 stop.bat 停止所有服务 echo ================================================ pause