import React from 'react'; import type { GridPlusError } from '../ag-grid-plus/errors'; /** * 列表空态四分支(U2)。 * * 四分支: * 1. **无权限**(请求 403)→ 说明缺权限,不给新建入口; * 2. **加载失败** → 给「重新加载」按钮; * 3. **筛选无结果**(最近一次请求带条件)→ 引导调整/清空筛选; * 4. **无数据** → 「暂无数据」+ 业务页注入的操作(通常是 Access 包裹的新建按钮)。 * * 渲染方式:作为 AG-Grid 的 `noRowsOverlayComponent` 挂在标准列表基座上(见 ./StandardAgGridPlus.tsx)。 * ag-grid-react 的 overlay 组件经 portal 渲染、仍在 React 树内,所以用 context 传动态状态, * 请求失败/成功的状态变化能驱动 overlay 重渲染。 * * @author nokecy */ export interface GridEmptyContextValue { /** 最近一次加载失败;请求成功时清空 */ error?: GridPlusError; /** 最近一次请求是否带筛选条件(区分「没有数据」与「筛选无结果」) */ hasFilter?: boolean; /** 业务页注入的空态操作(通常是 Access 包裹的新建按钮) */ actions?: React.ReactNode; /** 业务页注入的筛选无结果操作(通常是清空自定义筛选) */ clearFilterAction?: React.ReactNode; /** 重试(= 重新请求) */ onRetry?: () => void; } export declare const GridEmptyContext: React.Context; /** * 403 是否真的是「没有权限」。ABP 的业务异常(BusinessException)默认也按 403 返回, * 例如「工厂日历缺少所选年周」;这类有业务错误码的 403 要显示后端原因并允许重试, * 不能说成没权限,否则用户会去找管理员授权而真因在数据。 * 授权失败的错误码以 Volo.Authorization 开头,或没有错误码。@author nokecy */ export declare const isPermissionDenied: (status?: number, code?: string) => boolean; export declare const GridEmptyState: React.FC; /** * 判断请求 filter 是否带生效条件(任意叶子值非空即算有筛选)。 * qc-ui 的 queryFilter 是嵌套对象,空表单也会产生空值键。 */ export declare const hasActiveFilter: (filter: any) => boolean;