新增园区详情和成员列表API
新增API:
- GET /admin/park/tenants/{tid} - 园区详情(含统计:成员数/企业数/管理员信息)
- GET /admin/park/tenants/{tid}/members - 园区成员列表(含用户信息)
- GET /admin/companies/{cid}/members - 企业成员列表(含用户信息)
扩展_park_tenant_public函数,增加更多字段:
operator_user_id、city、address、contact、tags、area_m2、
default_company_discount、default_user_discount、created_at
This commit is contained in:
@@ -443,7 +443,9 @@ class AdminTenantStatusBody(BaseModel):
|
||||
|
||||
def _park_tenant_public(t: dict) -> dict:
|
||||
"""脱敏园区:剔除 auth(username/salt/password_hash),仅留管理用字段。"""
|
||||
return {k: t.get(k) for k in ("id", "name", "intro", "admin_username", "status")}
|
||||
return {k: t.get(k) for k in ("id", "name", "intro", "admin_username", "status",
|
||||
"operator_user_id", "city", "address", "contact", "tags", "area_m2",
|
||||
"default_company_discount", "default_user_discount", "created_at")}
|
||||
|
||||
|
||||
@router.get("/park/screens", summary="全部屏幕(含未绑定+归属园区名,平台)")
|
||||
@@ -576,6 +578,73 @@ async def admin_park_tenant_companies(
|
||||
return {"items": await tnt.list_companies(tid)}
|
||||
|
||||
|
||||
@router.get("/park/tenants/{tid}", summary="园区详情(含统计:成员数/企业数,平台)")
|
||||
async def admin_park_tenant_detail(
|
||||
tid: str,
|
||||
db: Database = Depends(get_db),
|
||||
_role: dict = Depends(require_roles("operator")),
|
||||
_perm: dict = Depends(require_permission("menu:admin_user_mgmt")),
|
||||
):
|
||||
from app.park import tenants as tnt
|
||||
t = await tnt.get_tenant(tid)
|
||||
if t is None:
|
||||
raise HTTPException(status_code=404, detail="园区不存在")
|
||||
# 统计数据
|
||||
companies = await tnt.list_companies(tid)
|
||||
members = await db.park_members.list_by_park(tid)
|
||||
# 管理员信息
|
||||
admin_user = None
|
||||
if t.get("operator_user_id"):
|
||||
admin_user = await db.users.get_by_id(t["operator_user_id"])
|
||||
result = _park_tenant_public(t)
|
||||
result["company_count"] = len(companies)
|
||||
result["member_count"] = len(members)
|
||||
result["admin_user"] = {k: admin_user.get(k, "") for k in ("id", "username", "nickname", "phone", "avatar")} if admin_user else None
|
||||
result["companies"] = companies
|
||||
return result
|
||||
|
||||
|
||||
@router.get("/park/tenants/{tid}/members", summary="园区成员列表(含用户信息,平台)")
|
||||
async def admin_park_tenant_members(
|
||||
tid: str,
|
||||
db: Database = Depends(get_db),
|
||||
_role: dict = Depends(require_roles("operator")),
|
||||
_perm: dict = Depends(require_permission("menu:admin_user_mgmt")),
|
||||
):
|
||||
members = await db.park_members.list_by_park(tid)
|
||||
items = []
|
||||
for m in members:
|
||||
user = await db.users.get_by_id(m["user_id"])
|
||||
d = dict(m)
|
||||
if user:
|
||||
d["user"] = {k: user.get(k, "") for k in ("id", "username", "nickname", "phone", "role", "avatar", "certification_status")}
|
||||
items.append(d)
|
||||
return {"items": items}
|
||||
|
||||
|
||||
@router.get("/companies/{cid}/members", summary="企业成员列表(含用户信息,平台)")
|
||||
async def admin_company_members(
|
||||
cid: str,
|
||||
db: Database = Depends(get_db),
|
||||
_role: dict = Depends(require_roles("operator")),
|
||||
):
|
||||
from ...infrastructure.models import ParkCompany
|
||||
from sqlalchemy import select
|
||||
comp = (await db.session.execute(
|
||||
select(ParkCompany).where(ParkCompany.id == cid))).scalars().first()
|
||||
if comp is None:
|
||||
raise HTTPException(status_code=404, detail="企业不存在")
|
||||
members = await db.company_members.list_by_company(cid)
|
||||
items = []
|
||||
for m in members:
|
||||
user = await db.users.get_by_id(m["user_id"])
|
||||
d = dict(m)
|
||||
if user:
|
||||
d["user"] = {k: user.get(k, "") for k in ("id", "username", "nickname", "phone", "role", "avatar", "certification_status")}
|
||||
items.append(d)
|
||||
return {"items": items}
|
||||
|
||||
|
||||
@router.put("/park/tenants/{tid}/companies/{cid}/compute", summary="设置企业算力(只增不减,平台兜底)")
|
||||
async def admin_park_tenant_company_compute(
|
||||
tid: str,
|
||||
|
||||
Reference in New Issue
Block a user