diff --git a/platform/internal/handler/sync.go b/platform/internal/handler/sync.go index b025657..5c95b82 100644 --- a/platform/internal/handler/sync.go +++ b/platform/internal/handler/sync.go @@ -121,21 +121,23 @@ func syncDeleteHandler(svcCtx *svc.ServiceContext) http.HandlerFunc { authx.WriteError(w, http.StatusNotFound, err.Error()) return } - // Z12h-1:公司默认同步通道禁止删除(账号落点依赖它) - if ch.IsSystemDefault { - authx.WriteError(w, http.StatusBadRequest, "公司默认同步通道不可删除;账号绑定落点依赖此通道。若异常请刷新页面自动修复") - return - } + wasDefault := ch.IsSystemDefault svcCtx.DBSync.StopChannel(id) if err := svcCtx.DBSync.Store().DeleteChannel(id); err != nil { authx.WriteError(w, http.StatusBadRequest, err.Error()) return } - // 若误删后仍有 Binding 挂死,heal 会挂回默认通道 - if _, hErr := applogic.HealTenantSyncBind(r.Context(), svcCtx, tid); hErr != nil { - _ = hErr + // Z12h-1:默认同步可删;删后 Ensure+heal,账号落点自动挂回新默认通道 + out := map[string]any{"ok": true, "deleted_id": id, "was_system_default": wasDefault} + if healed, hErr := applogic.HealTenantSyncBind(r.Context(), svcCtx, tid); hErr != nil { + out["heal_error"] = hErr.Error() + } else if healed != nil { + out["channel_id"] = healed.ChannelID + out["recreated_default"] = wasDefault || healed.ChannelCreated + out["bindings_fixed"] = healed.BindingsFixed + out["agents_fixed"] = healed.AgentsFixed } - httpx.OkJson(w, map[string]any{"ok": true}) + httpx.OkJson(w, out) } } diff --git a/web/src/SyncPage.tsx b/web/src/SyncPage.tsx index 507133e..0c41d4c 100644 --- a/web/src/SyncPage.tsx +++ b/web/src/SyncPage.tsx @@ -586,9 +586,35 @@ export function SyncPage(props: {