feat: 第一次上传

This commit is contained in:
2025-12-14 22:21:03 +08:00
commit 366ab0b2e8
19 changed files with 1008 additions and 0 deletions

117
routers/home.py Normal file
View File

@@ -0,0 +1,117 @@
from datetime import datetime
from fastapi import APIRouter, Depends, HTTPException, Request, status
from fastapi.responses import HTMLResponse
from starlette.templating import Jinja2Templates
from services.services import XBXS
router = APIRouter()
templates = Jinja2Templates(directory="templates")
def get_xbxs(request: Request) -> XBXS:
token = request.cookies.get("xbxs_token")
if not token:
# 没有 token 跳转到登录页面
raise HTTPException(
status_code=status.HTTP_303_SEE_OTHER,
detail="Redirect to login",
headers={"Location": "/login"},
)
return XBXS(token=token)
@router.get("/home")
async def home(
request: Request,
xbxs: XBXS = Depends(get_xbxs),
):
return templates.TemplateResponse(
"home.html",
{
"request": request,
"active": "home",
},
)
@router.get("/profile")
async def profile(
request: Request,
xbxs: XBXS = Depends(get_xbxs),
):
student = await xbxs.get_student_info_cached()
return templates.TemplateResponse(
"profile.html",
{
"request": request,
"student": student,
"active": "profile",
},
)
@router.get("/sign")
async def sign_list(
request: Request,
xbxs: XBXS = Depends(get_xbxs),
):
result = await xbxs.get_know_list()
rows = result.get("rows", [])
now = datetime.now()
for item in rows:
# 1⃣ 计算是否结束(核心)
end_str = f"{item['endDate']} {item['endTime']}"
end_time = datetime.strptime(end_str, "%Y-%m-%d %H:%M")
item["isEnded"] = now > end_time
return templates.TemplateResponse(
"sign_list.html",
{
"request": request,
"list": rows,
"total": result.get("total", 0),
},
)
@router.get("/sign/{knowing_id}", response_class=HTMLResponse)
async def sign_detail(
knowing_id: int,
request: Request,
xbxs: XBXS = Depends(get_xbxs),
):
know_detail = await xbxs.get_know(str(knowing_id))
data = know_detail.get("data", {})
# 获取具体的数据
knowing_name = data.get("knowingName", "未知签到")
start_date = data.get("startDate", "未知")
start_time = data.get("startTime", "未知")
end_time = data.get("endTime", "未知")
send_name = data.get("sendName", "未知")
send_role = data.get("sendRole", "未知")
is_check = data.get("isCheck", 0)
is_picture = data.get("isPicture", 0)
is_finish_know = data.get("isFinishKnowing", 0)
return templates.TemplateResponse(
"sign_detail.html",
{
"request": request,
"knowing_name": knowing_name,
"start_date": start_date,
"start_time": start_time,
"end_time": end_time,
"send_name": send_name,
"send_role": send_role,
"is_check": is_check,
"is_picture": is_picture,
"is_finish_know": is_finish_know,
},
)