Files
AILab/bbit_ai/app/routers/System.py
T
2025-12-08 18:11:48 +08:00

378 lines
10 KiB
Python

from fastapi import APIRouter, Depends
from config.security import get_user_id_from_token
from db.postgres.system import *
from models.BaseResponse import BaseResponse
from utils.MyUtils import build_dept_tree, format_datetime, build_menu_tree
systemRouter = APIRouter()
@systemRouter.get("/dept/list")
async def dept_list(user_id: UUID = Depends(get_user_id_from_token)):
if not user_id:
return {"error": "userId is required"}
depts = get_all_depts()
# 字段映射(关键)
for d in depts:
# 映射字段
d["pid"] = d.pop("parent_id") or 0 # !!!null → 0
d["remark"] = d.pop("comment")
d["createTime"] = format_datetime(d.pop("created_at"))
# 前端示例格式要求有 status 字段
d["status"] = 1
# children 初始化
d["children"] = []
# 构建树
tree = build_dept_tree(depts)
return BaseResponse(data=tree)
@systemRouter.post("/dept/add")
async def dept_add(data: dict, user_id: UUID = Depends(get_user_id_from_token)):
if not user_id:
return {"error": "userId is required"}
parent_id = data.get("pid")
name = data.get("name")
comment = data.get("comment")
if not name:
return BaseResponse(status=False, message="部门名不能为空", data=None)
new_id = insert_dept(parent_id, name, comment)
return BaseResponse(data={"id": new_id})
@systemRouter.put("/dept/{id}")
async def dept_update(
id: str, data: dict, user_id: UUID = Depends(get_user_id_from_token)
):
if not user_id:
return {"error": "userId is required"}
parent_id = data.get("pid")
name = data.get("name")
comment = data.get("comment")
rowcount = update_dept(id, parent_id, name, comment)
if rowcount == 0:
return BaseResponse(status=False, message="部门不存在", data=None)
return BaseResponse(data=True)
@systemRouter.delete("/dept/{id}")
async def dept_dept(id: str, user_id: UUID = Depends(get_user_id_from_token)):
if not user_id:
return {"error": "userId is required"}
if has_child_dept(id):
return BaseResponse(status=False, message="禁止删除:请先删除子部门", data=None)
deleted = delete_dept(id)
if deleted == 0:
return BaseResponse(status=False, message="部门不存在", data=None)
return BaseResponse(data=True)
from fastapi import Depends
from uuid import UUID
@systemRouter.get("/menu/list/{plat_id}")
async def menu_list(plat_id: int, user_id: UUID = Depends(get_user_id_from_token)):
if not user_id:
return {"error": "userId is required"}
# 1. 根据用户ID获取角色ID列表
role_ids = get_role_ids_by_user(user_id)
if not role_ids:
BaseResponse(data=[]) # 用户没有角色,则返回空列表
# 2. 根据角色ID获取菜单ID列表
menu_ids = get_menu_ids_by_roles(role_ids)
if not menu_ids:
BaseResponse(data=[]) # 角色没有菜单权限,则返回空列表
# 3. 查询菜单信息
menus = get_menus_by_ids(menu_ids, plat_id)
# 4. 字段映射,兼容前端
for m in menus:
m["pid"] = m.get("pid") or "0"
m["meta"] = m.get("meta") or {}
m["createTime"] = format_datetime(m.get("created_at"))
m["updateTime"] = format_datetime(m.get("updated_at"))
m["children"] = []
# 5. 构建菜单树
tree = build_menu_tree(menus)
return BaseResponse(data=tree)
@systemRouter.get("/menu/list/all/{plat_id}")
async def menu_list_all(plat_id: int, user_id: UUID = Depends(get_user_id_from_token)):
if not user_id:
return {"error": "userId is required"}
if plat_id == -1:
menus = get_all_menus()
else:
menus = get_menus(plat_id)
# 字段映射
for m in menus:
m["pid"] = m.pop("pid") or "0"
m["meta"] = m["meta"] or {}
m["createTime"] = format_datetime(m.pop("created_at"))
m["updateTime"] = format_datetime(m.pop("updated_at"))
m["children"] = []
# 构建树,与 build_dept_tree 同逻辑
tree = build_menu_tree(menus)
return BaseResponse(data=tree)
@systemRouter.get("/menu/name-exists/{plat_id}")
async def menu_name_exists(
plat_id: int,
name: str,
id: str | None = None,
user_id: UUID = Depends(get_user_id_from_token),
):
if not user_id:
return {"error": "userId is required"}
exists = db_menu_name_exists(name, id, plat_id)
return BaseResponse(data=exists)
@systemRouter.get("/menu/path-exists/{plat_id}")
async def menu_path_exists(
plat_id: int,
path: str,
id: str | None = None,
user_id: UUID = Depends(get_user_id_from_token),
):
if not user_id:
return {"error": "userId is required"}
exists = db_menu_path_exists(path, id, plat_id)
return BaseResponse(data=exists)
@systemRouter.post("/menu/{plat_id}")
async def create_menu(
plat_id: int, data: dict, user_id: UUID = Depends(get_user_id_from_token)
):
if not user_id:
return {"error": "userId is required"}
new_id = insert_menu(data, plat_id)
return BaseResponse(data={"id": new_id})
@systemRouter.put("/menu/{id}")
async def update_menu(
id: str,
data: dict,
user_id: UUID = Depends(get_user_id_from_token),
):
if not user_id:
return {"error": "userId is required"}
count = update_menu_db(id, data)
if count == 0:
return BaseResponse(status=False, message="菜单不存在", data=None)
return BaseResponse(data=True)
@systemRouter.delete("/menu/{id}")
async def delete_menu(
id: str,
user_id: UUID = Depends(get_user_id_from_token),
):
if not user_id:
return {"error": "userId is required"}
if menu_has_children(id):
return BaseResponse(status=False, message="禁止删除:请先删除子菜单", data=None)
deleted = delete_menu_db(id)
if deleted == 0:
return BaseResponse(status=False, message="菜单不存在", data=None)
return BaseResponse(data=True)
@systemRouter.get("/role/name-exists")
async def role_name_exists(
name: str,
id: str | None = None,
user_id: UUID = Depends(get_user_id_from_token),
):
if not user_id:
return {"error": "userId is required"}
exists = db_role_name_exists(name, id)
return BaseResponse(data=exists)
@systemRouter.get("/role/all")
async def get_role_list(user_id: UUID = Depends(get_user_id_from_token)):
if not user_id:
return {"error": "userId is required"}
roles = get_role_list_db()
return BaseResponse(data=roles)
@systemRouter.get("/role/list")
async def get_role_list(
page: int = 1,
pageSize: int = 10,
id: str | None = None,
name: str | None = None,
remark: str | None = None,
user_id: UUID = Depends(get_user_id_from_token),
):
if not user_id:
return {"error": "userId is required"}
roles, total = get_role_list_db_page(page, pageSize, id, name, remark)
return BaseResponse(data={"list": roles, "total": total})
@systemRouter.post("/role")
async def create_role(data: dict, user_id: UUID = Depends(get_user_id_from_token)):
if not user_id:
return {"error": "userId is required"}
new_id = insert_role(data)
return BaseResponse(data={"id": new_id})
@systemRouter.put("/role/{id}")
async def update_role(
id: str,
data: dict,
user_id: UUID = Depends(get_user_id_from_token),
):
if not user_id:
return {"error": "userId is required"}
count = update_role_db(id, data)
if count == 0:
return BaseResponse(status=False, message="角色不存在", data=None)
return BaseResponse(data=True)
@systemRouter.delete("/role/{id}")
async def delete_role(
id: str,
user_id: UUID = Depends(get_user_id_from_token),
):
if not user_id:
return {"error": "userId is required"}
deleted = delete_role_db(id)
if deleted == 0:
return BaseResponse(status=False, message="角色不存在", data=None)
return BaseResponse(data=True)
@systemRouter.get("/user/name-exists")
async def user_name_exists(
username: str,
id: str | None = None,
user_id: UUID = Depends(get_user_id_from_token),
):
if not user_id:
return {"error": "userId is required"}
exists = db_user_name_exists(username, id)
return BaseResponse(data=exists)
@systemRouter.get("/user/list")
async def get_user_list(
page: int = 1,
pageSize: int = 10,
id: str | None = None,
name: str | None = None,
status: int | None = None,
dept_id: str | None = None,
startTime: str | None = None,
endTime: str | None = None,
user_id: UUID = Depends(get_user_id_from_token),
):
if not user_id:
return {"error": "userId is required"}
users, total = get_user_list_db_page(
page, pageSize, id, name, status, dept_id, startTime, endTime
)
return BaseResponse(data={"list": users, "total": total})
@systemRouter.post("/user")
async def create_user(data: dict, user_id: UUID = Depends(get_user_id_from_token)):
if not user_id:
return {"error": "userId is required"}
new_id = insert_user(data)
return BaseResponse(data={"id": new_id})
@systemRouter.put("/user/{id}")
async def update_user(
id: str,
data: dict,
user_id: UUID = Depends(get_user_id_from_token),
):
if not user_id:
return {"error": "userId is required"}
count = update_user_db(id, data)
if count == 0:
return BaseResponse(status=False, message="用户不存在", data=None)
return BaseResponse(data=True)
@systemRouter.patch("/user/{id}")
async def patch_user(
id: str,
data: dict,
user_id: UUID = Depends(get_user_id_from_token),
):
if not user_id:
return {"error": "userId is required"}
count = patch_user_db(id, data)
if count == 0:
return BaseResponse(status=False, message="用户不存在", data=None)
return BaseResponse(data=True)
@systemRouter.delete("/user/{id}")
async def delete_user(
id: str,
user_id: UUID = Depends(get_user_id_from_token),
):
if not user_id:
return {"error": "userId is required"}
deleted = delete_user_db(id)
if deleted == 0:
return BaseResponse(status=False, message="用户不存在", data=None)
return BaseResponse(data=True)