import React, { CSSProperties, Key, ReactNode } from 'react'; /** 排序子项(如 从低到高 / 从高到低),用于 getSortItems 返回值 */ export interface SortOptionItemCompat { key: string; label: string; } /** 排序列表项:type 由 Sort 内置生成子项;getSortItems 则完全自定义子项,与 RecordBoard Sort 约定一致 */ export interface SortListItemCompat { name?: string | string[]; label?: string; /** 排序类型,有 getSortItems 时可省略 */ type?: 'date' | 'string' | 'number' | 'option'; isCustom?: boolean; columnKey?: string; localFilter?: boolean; isHidden?: boolean; /** 自定义排序子项,优先于 type */ getSortItems?: (fieldKey: string) => SortOptionItemCompat[]; } /** 筛选列表项:与 RecordBoard / PisellFilter 使用的 FilterItemProps 形状兼容 */ export interface FilterItemPropsCompat { type: 'single' | 'input' | 'datePicker' | 'rangePicker' | 'rangePickerNew' | 'search' | 'custom'; key: string; name?: string | string[]; label?: string; props?: Record; other?: Record; isCustom?: boolean; columnKey?: string; isHidden?: boolean; } /** 筛选默认值:quickFilter / otherFilter 为筛项列表,values 为表单值 */ export interface FilterDefaultValueCompat { quickFilter?: FilterItemPropsCompat[]; otherFilter?: FilterItemPropsCompat[]; values?: Record; } /** ToolBar 内筛选配置:defaultFilterValue 提供筛项与初始值 */ export interface RecordBoardToolBarFilterCompat { hiddenQuickFilter?: boolean; hiddenOtherFilter?: boolean; defaultFilterValue?: FilterDefaultValueCompat; [key: string]: any; } /** ToolBar 内排序配置:list 为排序项数组 */ export interface RecordBoardToolBarSortCompat { list?: SortListItemCompat[]; placement?: 'bottom' | 'bottomLeft' | 'bottomRight' | 'top' | 'topLeft' | 'topRight'; [key: string]: any; } /** ToolBar 内快速筛选配置:filterList 覆盖列派生的快筛列表 */ export interface RecordBoardToolBarQuickFilterCompat { filterList?: FilterItemPropsCompat[]; formFiltersPrefix?: string; size?: 'small' | 'middle' | 'large'; [key: string]: any; } /** ToolBar 透传配置:与 RecordBoardToolBarProps 对齐,供 perspective.childComponentProps.toolBar 使用 */ export interface RecordBoardToolBarPropsCompat { className?: string; style?: CSSProperties; tabs?: ReactNode; topLeft?: ReactNode; topRight?: ReactNode; bottomLeft?: ReactNode; bottomRight?: ReactNode; /** 搜索:true 默认 PisellFind;对象透传 props;false 不渲染 */ search?: boolean | Record; /** 筛选:true 默认 PisellFilter;对象可传 defaultFilterValue 等;false 不渲染 */ filter?: boolean | RecordBoardToolBarFilterCompat; /** 排序:true 默认由列派生;对象可传 list、placement;false 不渲染 */ sort?: boolean | RecordBoardToolBarSortCompat; /** 快速筛选:true 用列派生;对象可传 filterList 等 */ quickFilter?: boolean | RecordBoardToolBarQuickFilterCompat; /** 列设置入口;默认 true */ columnSetting?: boolean; } /** Grid 透传配置:与 RecordBoardGridProps 对齐,多选由 SalesGrid 合并后传入 */ export interface RecordBoardGridPropsCompat { /** 列配置;列上可设 hidden: true 表示默认隐藏,与 defaultHiddenColumnKeys 合并由 RecordBoard 初始化列显隐 */ columns?: any[]; /** 默认隐藏的列 key 列表(对应 columns 的 key 或 dataIndex),与列上 hidden: true 合并后由 RecordBoard 初始化列显隐 */ defaultHiddenColumnKeys?: string[]; /** 当前页某列全同值/全空时隐藏该列并在表格上方展示总结区;默认 true,传 false 可关闭 */ collapseUniformColumns?: boolean; /** 表格滚动,与 RecordBoard grid.scroll 对齐(含 autoCalc、scrollToFirstRowOnChange) */ scroll?: { x?: number | string; y?: number | string; autoCalc?: boolean; scrollToFirstRowOnChange?: boolean; }; /** 表格尺寸 */ size?: 'small' | 'middle' | 'default'; /** 其余为 antd Table 透传(onRow、onHeaderRow、expandable、rowClassName、summary 等) */ [key: string]: any; } /** 与 RecordBoard 打散子组件配置兼容;grid 会与多选(selectedKeys/selectedRows/onSelectionChange)合并后传给 RecordBoard */ export interface RecordBoardChildComponentPropsCompat { /** 搜索配置,透传 PisellFind */ search?: Record; /** 工具栏配置:sort / filter / quickFilter 等 */ toolBar?: RecordBoardToolBarPropsCompat; /** 分页组件透传配置 */ pagination?: Record; /** Grid 配置:columns、defaultHiddenColumnKeys、scroll、及 Table 透传 */ grid?: RecordBoardGridPropsCompat; /** 卡片列表配置(card 布局时) */ cardList?: Record; /** 批量操作栏配置 */ batchActionBar?: Record; /** * 平面图:与 PisellRecordBoard.floorMap 对齐,透传 PisellFloorMapLayout; * 有值时工具栏出现「表格 / 平面图」切换。 */ floorMap?: Record; /** 有 floorMap 时首屏默认子视图;PisellReservation 组件内默认为 floorMap */ defaultBodyView?: 'grid' | 'floorMap'; } /** * 列渲染覆盖项:当视角的 grid.columns 中某列的 type 与此 type 一致时,使用此 render 替代该列默认渲染再传给 RecordBoard。 */ export interface SalesGridColumnRenderer { /** 与列配置的 type 匹配(如 'currency'、'singleSelect') */ type: string; /** 自定义列单元格渲染 */ render: (value: any, record: any, index: number) => ReactNode; } /** * Perspective 运行时上下文:由 PisellSalesGrid 在运行时构建, * 传入 perspective 的 getChildComponentProps 工厂函数, * 使 columns / onRow / toolBar 等配置可访问刷新列表等运行时能力。 */ export interface SalesGridRuntimeContext { /** 重新请求当前列表数据(同步触发) */ refresh: () => void; /** 重新请求当前列表数据(返回 Promise) */ refreshAsync: () => Promise; /** 当前激活的 perspective key */ currentPerspective: string; } /** * 单个 Perspective 配置:对应一套 RecordBoard(表格 + 可选工具栏内平面图)。 * 支持两种配置方式(二选一): * 1. **静态配置** — 直接提供 childComponentProps。 * 2. **工厂配置** — 提供 getChildComponentProps(ctx)。 * 平面图:在 childComponentProps 中传 `floorMap`、`defaultBodyView`,由 RecordBoard 工具栏切换。 */ export interface SalesGridPerspectiveConfig { /** Perspective 唯一标识,与 currentPerspective 对应 */ key: string; /** Perspective 展示名称(可选,供外部展示用) */ label?: string; /** 该 Perspective 下 RecordBoard 子组件透传配置 */ childComponentProps?: RecordBoardChildComponentPropsCompat; /** * 工厂函数:接收运行时上下文,返回 RecordBoard 透传配置。 * 存在时忽略 childComponentProps。 */ getChildComponentProps?: (ctx: SalesGridRuntimeContext) => RecordBoardChildComponentPropsCompat; } export interface PisellSalesGridProps { /** Perspective 数据:一组 RecordBoard 配置,支持配置多个 Perspective */ perspectives: SalesGridPerspectiveConfig[]; /** 当前 Perspective:对应 perspectives[].key,决定使用哪个 Perspective 的配置渲染 RecordBoard */ currentPerspective: string; /** 自定义类名 */ className?: string; /** 自定义样式 */ style?: CSSProperties; extParams?: Record; /** 实例 id,透传 RecordBoard 用于列显隐持久化(localStorage,与 @pisell/utils getComponentStorageKey 规则一致) */ __id?: string; /** 受控数据:传入时表格视角使用此处数据,不请求 getOrderList/getBookingList(用于 Story、静态数据等) */ data?: any[]; loading?: boolean; total?: number; pagination?: { pageNumber: number; pageSize: number; }; onPageChange?: (pageNumber: number, pageSize: number) => void; searchParams?: Record; onSearch?: (params: Record) => void; onReset?: () => void; selectedKeys?: React.Key[]; selectedRows?: any[]; onSelectionChange?: (keys: React.Key[], rows: any[]) => void; rowKey?: string | ((record: any) => Key); /** 受控时由父组件提供,供 perspective 的 getChildComponentProps 中 ctx.refresh 使用 */ onRefresh?: (keys: React.Key[]) => void; refreshAsync?: () => Promise; /** 按列 type 覆盖单元格渲染;与内置合并,同 type 时传入的覆盖内置 */ columnRenderers?: SalesGridColumnRenderer[]; } /** Story / 演示用的数据源相关 props 组合(与 PisellSalesGrid 列表态常用字段一致) */ export declare type SalesGridDataSourceProps = Pick;