157 lines
5.3 KiB
Python
157 lines
5.3 KiB
Python
"""
|
||
前端连接测试脚本 - 诊断前端到后端的所有连接问题
|
||
"""
|
||
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")
|