73 lines
2.3 KiB
Python
73 lines
2.3 KiB
Python
"""AirLabs Project —— 主入口"""
|
||
from fastapi import FastAPI
|
||
from fastapi.middleware.cors import CORSMiddleware
|
||
from fastapi.staticfiles import StaticFiles
|
||
from fastapi.responses import FileResponse
|
||
from database import engine, Base
|
||
from models import User, UserRole, PhaseGroup
|
||
from auth import hash_password
|
||
import os
|
||
|
||
# 创建所有表
|
||
Base.metadata.create_all(bind=engine)
|
||
|
||
app = FastAPI(title="AirLabs Project", version="1.0.0")
|
||
|
||
# CORS(开发阶段允许所有来源)
|
||
app.add_middleware(
|
||
CORSMiddleware,
|
||
allow_origins=["*"],
|
||
allow_credentials=True,
|
||
allow_methods=["*"],
|
||
allow_headers=["*"],
|
||
)
|
||
|
||
# 注册路由
|
||
from routers.auth import router as auth_router
|
||
from routers.users import router as users_router
|
||
from routers.projects import router as projects_router
|
||
from routers.submissions import router as submissions_router
|
||
from routers.costs import router as costs_router
|
||
from routers.dashboard import router as dashboard_router
|
||
|
||
app.include_router(auth_router)
|
||
app.include_router(users_router)
|
||
app.include_router(projects_router)
|
||
app.include_router(submissions_router)
|
||
app.include_router(costs_router)
|
||
app.include_router(dashboard_router)
|
||
|
||
# 前端静态文件
|
||
frontend_dir = os.path.join(os.path.dirname(os.path.dirname(__file__)), "frontend", "dist")
|
||
if os.path.exists(frontend_dir):
|
||
app.mount("/assets", StaticFiles(directory=os.path.join(frontend_dir, "assets")), name="assets")
|
||
|
||
@app.get("/{full_path:path}")
|
||
async def serve_frontend(full_path: str):
|
||
file_path = os.path.join(frontend_dir, full_path)
|
||
if os.path.isfile(file_path):
|
||
return FileResponse(file_path)
|
||
return FileResponse(os.path.join(frontend_dir, "index.html"))
|
||
|
||
|
||
@app.on_event("startup")
|
||
def init_default_owner():
|
||
"""首次启动时创建默认 Owner 账号"""
|
||
from database import SessionLocal
|
||
db = SessionLocal()
|
||
try:
|
||
if not db.query(User).filter(User.role == UserRole.OWNER).first():
|
||
owner = User(
|
||
username="admin",
|
||
password_hash=hash_password("admin123"),
|
||
name="管理员",
|
||
phase_group=PhaseGroup.PRODUCTION,
|
||
role=UserRole.OWNER,
|
||
monthly_salary=0,
|
||
)
|
||
db.add(owner)
|
||
db.commit()
|
||
print("[OK] default admin created: admin / admin123")
|
||
finally:
|
||
db.close()
|