From 08336c7d767de4e5544702ea1a7b7039297e1923 Mon Sep 17 00:00:00 2001 From: Pine Date: Mon, 24 Aug 2026 18:54:24 +0800 Subject: [PATCH] =?UTF-8?q?feat(=E5=B9=B3=E5=8F=B0=E7=AB=AF):=20=E5=9B=AD?= =?UTF-8?q?=E5=8C=BA=E5=88=97=E8=A1=A8=E6=94=AF=E6=8C=81=20=E7=8A=B6?= =?UTF-8?q?=E6=80=81=E6=98=BE=E7=A4=BA/=E7=A6=81=E7=94=A8=E5=90=AF?= =?UTF-8?q?=E7=94=A8/=E7=BA=A7=E8=81=94=E5=88=A0=E9=99=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 园区管理每园显示状态(启用/已禁用);可【禁用】(不删,禁止园区端登录/data)【启用】【删除】; 删除为联级:后端 delete_tenant 一并删 企业/知识库/屏幕 + 引擎缓存;禁用后 /park/auth/login 返回 403。 npm run build 通过。 --- src/api/park.ts | 2 ++ src/pages/park/tenant-tab.tsx | 12 +++++++++++- 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/src/api/park.ts b/src/api/park.ts index ece851b..98c9059 100644 --- a/src/api/park.ts +++ b/src/api/park.ts @@ -20,6 +20,8 @@ export const parkApi = { api.put<{ ok: boolean; tenant: Tenant }>(`/park/tenants/${tid}`, body), bindAdmin: (tid: string, username: string) => api.post<{ ok: boolean }>(`/park/tenants/${tid}/bind`, { username }), unbindAdmin: (tid: string) => api.post<{ ok: boolean }>(`/park/tenants/${tid}/unbind`), + deleteTenant: (tid: string) => api.del<{ ok: boolean }>(`/park/tenants/${tid}`), + setTenantStatus: (tid: string, status: "active" | "disabled") => api.post<{ ok: boolean }>(`/park/tenants/${tid}/status`, { status }), // ---- 大屏控制台 ---- displayState: (tenantId: string) => api.get("/park/api/display/state", { tenant_id: tenantId }), diff --git a/src/pages/park/tenant-tab.tsx b/src/pages/park/tenant-tab.tsx index 30c1444..a623e12 100644 --- a/src/pages/park/tenant-tab.tsx +++ b/src/pages/park/tenant-tab.tsx @@ -47,6 +47,13 @@ export function TenantTab() { if (!window.confirm(`解除「${t.name}」的管理员绑定?`)) return; await parkApi.unbindAdmin(t.id); reload(); }; + const toggle = async (t: Tenant) => { + await parkApi.setTenantStatus(t.id, t.status === "disabled" ? "active" : "disabled"); reload(); + }; + const remove = async (t: Tenant) => { + if (!window.confirm(`确认删除园区「${t.name}」?将一并删除其全部资源(屏幕/企业/知识库/智能体/大屏数据)且不可恢复!`)) return; + await parkApi.deleteTenant(t.id); reload(); + }; return (
@@ -70,13 +77,16 @@ export function TenantTab() {
{t.name} {t.id} + {t.status === "disabled" ? "已禁用" : "启用"}
管理员:{t.admin_username || "(未绑定)"}
{(t.intro ?? []).join(" · ")}
{t.admin_username - ? + ? : } + +
))}