Files
hospital_performance/test_frontend_connection.py
2026-02-28 15:16:15 +08:00

157 lines
5.3 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

"""
前端连接测试脚本 - 诊断前端到后端的所有连接问题
"""
import requests
import sys
BASE_URL = "http://localhost:8000"
API_URL = "http://localhost:8000/api/v1"
FRONTEND_URL = "http://localhost:5173"
print("="*60)
print("医院绩效管理系统 - 前端连接诊断")
print("="*60)
# 1. 检查后端服务
print("\n[1] 检查后端服务...")
try:
resp = requests.get(f"{BASE_URL}/health")
if resp.status_code == 200:
print(f" ✅ 后端服务正常:{resp.json()}")
else:
print(f" ❌ 后端服务异常:状态码 {resp.status_code}")
except Exception as e:
print(f" ❌ 后端服务未运行:{e}")
sys.exit(1)
# 2. 检查前端服务
print("\n[2] 检查前端服务...")
try:
resp = requests.get(FRONTEND_URL)
if resp.status_code == 200:
print(f" ✅ 前端服务正常")
else:
print(f" ❌ 前端服务异常:状态码 {resp.status_code}")
except Exception as e:
print(f" ❌ 前端服务未运行:{e}")
# 3. 检查 CORS 配置
print("\n[3] 检查 CORS 配置...")
try:
resp = requests.options(
f"{API_URL}/auth/login",
headers={
"Origin": "http://localhost:5173",
"Access-Control-Request-Method": "POST"
}
)
cors_headers = resp.headers.get("Access-Control-Allow-Origin", "")
if "localhost:5173" in cors_headers or "*" in cors_headers:
print(f" ✅ CORS 配置正确")
else:
print(f" ⚠️ CORS 配置可能有问题:{cors_headers}")
except Exception as e:
print(f" ❌ CORS 检查失败:{e}")
# 4. 测试登录接口
print("\n[4] 测试登录接口...")
try:
resp = requests.post(
f"{API_URL}/auth/login",
data={"username": "admin", "password": "admin123"},
headers={"Origin": "http://localhost:5173"}
)
if resp.status_code == 200:
token = resp.json().get("access_token", "")
print(f" ✅ 登录接口正常Token: {token[:30]}...")
elif resp.status_code == 401:
print(f" ❌ 登录失败:账号或密码错误")
else:
print(f" ❌ 登录接口异常:状态码 {resp.status_code}")
print(f" 响应:{resp.text[:100]}")
except Exception as e:
print(f" ❌ 登录接口异常:{e}")
token = ""
# 5. 测试需要认证的接口
if token:
headers = {"Authorization": f"Bearer {token}"}
print("\n[5] 测试科室列表接口...")
try:
resp = requests.get(f"{API_URL}/departments", headers=headers)
if resp.status_code == 200:
data = resp.json()
print(f" ✅ 科室列表正常:共 {len(data.get('data', []))} 个科室")
else:
print(f" ❌ 科室列表异常:状态码 {resp.status_code}")
except Exception as e:
print(f" ❌ 科室列表异常:{e}")
print("\n[6] 测试指标列表接口...")
try:
resp = requests.get(f"{API_URL}/indicators?page=1&page_size=20", headers=headers)
if resp.status_code == 200:
data = resp.json()
print(f" ✅ 指标列表正常:共 {len(data.get('data', []))} 个指标")
else:
print(f" ❌ 指标列表异常:状态码 {resp.status_code}")
except Exception as e:
print(f" ❌ 指标列表异常:{e}")
print("\n[7] 测试 BSC 维度统计接口...")
try:
resp = requests.get(
f"{API_URL}/stats/bsc-dimension?period_year=2026&period_month=2",
headers=headers
)
if resp.status_code == 200:
data = resp.json()
dimensions = data.get("data", {}).get("dimensions", {})
print(f" ✅ BSC 统计正常:共 {len(dimensions)} 个维度")
else:
print(f" ❌ BSC 统计异常:状态码 {resp.status_code}")
print(f" 响应:{resp.text[:100]}")
except Exception as e:
print(f" ❌ BSC 统计异常:{e}")
print("\n[8] 测试科室统计接口...")
try:
resp = requests.get(
f"{API_URL}/stats/department?period_year=2026&period_month=2",
headers=headers
)
if resp.status_code == 200:
data = resp.json()
print(f" ✅ 科室统计正常:共 {len(data.get('data', []))} 个科室")
else:
print(f" ❌ 科室统计异常:状态码 {resp.status_code}")
print(f" 响应:{resp.text[:100]}")
except Exception as e:
print(f" ❌ 科室统计异常:{e}")
else:
print("\n[5-8] 跳过(需要登录)")
# 9. 检查 API 文档
print("\n[9] 检查 API 文档...")
try:
resp = requests.get(f"{API_URL}/docs")
if resp.status_code == 200:
print(f" ✅ API 文档可访问:{API_URL}/docs")
else:
print(f" ⚠️ API 文档访问异常:状态码 {resp.status_code}")
except Exception as e:
print(f" ❌ API 文档访问异常:{e}")
print("\n" + "="*60)
print("诊断完成")
print("="*60)
print("\n💡 常见问题解决:")
print("1. 如果后端未运行cd backend && uvicorn app.main:app --reload")
print("2. 如果前端未运行cd frontend && npm run dev")
print("3. 清除浏览器缓存Ctrl+Shift+Delete")
print("4. 查看控制台错误F12 → Console")
print("5. 查看网络请求F12 → Network")
print("\n测试页面http://localhost:5173/test-api.html")