feat: 初始化考培练系统项目

- 从服务器拉取完整代码
- 按框架规范整理项目结构
- 配置 Drone CI 测试环境部署
- 包含后端(FastAPI)、前端(Vue3)、管理端

技术栈: Vue3 + TypeScript + FastAPI + MySQL
This commit is contained in:
111
2026-01-24 19:33:28 +08:00
commit 998211c483
1197 changed files with 228429 additions and 0 deletions

114
backend/test_team_api.py Normal file
View File

@@ -0,0 +1,114 @@
"""
测试团队管理API
"""
import asyncio
import sys
from pathlib import Path
# 添加项目路径
sys.path.append(str(Path(__file__).resolve().parent))
import httpx
async def test_team_api():
"""测试团队管理API"""
base_url = "http://localhost:8000"
print("=" * 60)
print("测试团队管理API")
print("=" * 60)
# 1. 登录获取token
print("\n【1. 登录admin用户】")
login_data = {
"username": "admin",
"password": "admin123"
}
async with httpx.AsyncClient() as client:
try:
response = await client.post(
f"{base_url}/api/v1/auth/login",
json=login_data,
timeout=10.0
)
print(f"登录状态: {response.status_code}")
result = response.json()
print(f"响应内容: {result}")
if response.status_code == 200:
# 尝试不同的数据结构
token = None
if "access_token" in result:
token = result["access_token"]
elif result.get("data"):
if "access_token" in result["data"]:
token = result["data"]["access_token"]
elif "token" in result["data"] and "access_token" in result["data"]["token"]:
token = result["data"]["token"]["access_token"]
if token:
print(f"登录成功获取token: {token[:30]}...")
else:
print(f"无法获取token响应结构: {list(result.keys())}")
return
else:
print(f"登录失败: HTTP {response.status_code}")
return
except Exception as e:
print(f"登录失败: {e}")
return
# 2. 测试团队统计API
print("\n【2. 获取团队统计】")
headers = {"Authorization": f"Bearer {token}"}
try:
response = await client.get(
f"{base_url}/api/v1/team/management/statistics",
headers=headers,
timeout=10.0
)
print(f"状态: {response.status_code}")
result = response.json()
print(f"结果: {result}")
except Exception as e:
print(f"获取统计失败: {e}")
# 3. 测试团队成员列表API
print("\n【3. 获取团队成员列表】")
try:
response = await client.get(
f"{base_url}/api/v1/team/management/members",
headers=headers,
params={"page": 1, "size": 20},
timeout=10.0
)
print(f"状态: {response.status_code}")
result = response.json()
print(f"返回code: {result.get('code')}")
print(f"返回message: {result.get('message')}")
if result.get("data"):
data = result["data"]
print(f"总记录数: {data.get('total')}")
print(f"当前页: {data.get('page')}")
print(f"每页大小: {data.get('page_size')}")
print(f"总页数: {data.get('pages')}")
print(f"返回记录数: {len(data.get('items', []))}")
if data.get('items'):
print("\n前3个成员:")
for member in data['items'][:3]:
print(f" - ID:{member['id']}, 姓名:{member['name']}, 岗位:{member['position']}, 状态:{member['status']}")
else:
print("无数据返回")
except Exception as e:
print(f"获取成员列表失败: {e}")
print("\n" + "=" * 60)
if __name__ == "__main__":
asyncio.run(test_team_api())