'use client'; // 注销/删除账号弹窗(受控)。列表页与用户详情页共用,避免两处各写一套(同 AdjustBalanceModals)。 // 复用 C 端自助注销同一套后端清理:物理删除个人内容/行为/PII 表 + 清零余额 + 匿名化 user 行, // 保留资金流水/邀请关系/广告幂等+对账表。仅 super_admin 可见入口;后端亦 require_role("super_admin") 兜底。 // 后端资金前置闸(有未提现现金/邀请金 / 在审提现单 → 409)带明确 detail,errMsg 原样透出。 import { App, Form, Input, Modal } from 'antd'; import { api, errMsg } from '@/lib/api'; export type DeleteTargetUser = { id: number; phone: string }; interface Props { user: DeleteTargetUser | null; open: boolean; onClose: () => void; onDone?: () => void; // 删除成功后回调(刷新详情/列表) } export function DeleteUserModal({ user, open, onClose, onDone }: Props) { const { message } = App.useApp(); const [form] = Form.useForm(); const submit = async () => { if (!user) return; const v = await form.validateFields(); // 原因必填,缺失即红字阻断 try { // axios 的 DELETE 带 body 要放在 config.data 里 await api.delete(`/admin/api/users/${user.id}`, { data: { reason: v.reason } }); message.success('账号已注销'); onClose(); onDone?.(); } catch (e) { message.error(errMsg(e)); } }; return ( { if (o) form.resetFields(); }} destroyOnHidden >

将永久删除该账号的个人数据(比价/省钱/签到/领券/埋点/设备/邀请指纹等)并清零余额、匿名化手机号, 不可恢复。资金流水/邀请关系/广告对账记录按合规保留。

); }