新增园区详情和成员列表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:
Pine
2026-09-06 21:44:56 +08:00
parent 2ce1626591
commit eb7c5371c6
+70 -1
View File
@@ -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,