import { ChangeDetectorRef, EventEmitter, OnInit, SimpleChange, TemplateRef } from "@angular/core"; import { NzFormatBeforeDropEvent, NzFormatEmitEvent } from "ng-zorro-antd/core"; import { NzResizeEvent } from "ng-zorro-antd/resizable"; import { NzTableComponent } from "ng-zorro-antd/table"; import { Observable } from "rxjs"; import { Page } from "../model/common-type"; import { CommonSessionService } from "../service/common-session.service"; import { HdTableColumn, HdTableTotalOption, OperateBtn, TableCacheOption, TreeGrid } from "./hd-table.service"; export declare class HdTableComponent implements OnInit { private cdr; private commonSessionService; uuid: string; tableCols: Array; tableData: Page; showSelected: boolean; showOperateColWarpButton: boolean; virtualScroll: boolean; /** 手动指定行高;不传则在首屏渲染后自动测量 */ virtualItemSize: number; selectField: string; /** * 行勾选禁用字段名。定义后取当前行该字段: * 为 true 时禁用该行勾选(全选也会跳过)。 */ selectDisabledField: string; /** * 行失效字段名。定义后取当前行该字段: * 为 true 时整行背景色为 #F7F8FA。 */ rowInvalidField: string; showTableTotal: boolean; tableTotalOption: Array; sortEvent: EventEmitter<{}>; selectEvent: EventEmitter<{}>; tableSearchEvent: EventEmitter<{}>; tableLoading: boolean; /** 是否显示分页;false 时一次展示 tableData.content 全部行 */ pagination: boolean; /** * 是否前端分页(对 content 全量切片)。 * true:翻页不触发 tableSearchEvent,适合详情全量数据; * false(默认):服务端分页,翻页触发查询(现有列表行为)。 * 与 pagination=false 同时用时以不分页为准。 */ frontPagination: boolean; tablePageIndex: number; tablePageSize: number; isFirstEntrySearch: boolean; isCrossPageSelect: boolean; tablePageIndexChange: EventEmitter; tablePageSizeChange: EventEmitter; tablePageSizeChangeEvent: EventEmitter; tableTotal: TemplateRef; tableLeftButton: TemplateRef; tableRightButton: TemplateRef; scroll: any; isAllDisplayDataChecked: boolean; isIndeterminate: boolean; listOfDisplayData: any[]; listOfAllData: any[]; listOfSelection: Array | TemplateRef; mapOfCheckedId: { [key: string]: boolean; }; mapOfCheckList: { [key: string]: any; }; tableTotalOptionList: any[]; tableCacheOption: TableCacheOption; userSession: any; tableColsCache: Array; showTable: boolean; selectColListNodes: Array; selectColListNodesCache: Array; showListNodes: boolean; isDropdownVisible: boolean; nowListNodes: Array; hideListNodes: Array; cancelNowListNodes: Array; cancelHideListNodes: Array; showDetail: boolean; localforage: any; localtionTmp: string; isFirstEntrySearchLocal: boolean; isCrossPageSelectLocal: boolean; /** 自动测量前的兜底行高,测量完成后会更新 */ measuredVirtualItemSize: number; /** 记录当前是否处于虚拟滚动模式,用于切换 pageSize 时重建表格 */ private virtualScrollActive; /** 可见列总宽,用于判断是否需要横向滚动 */ private tableColWidthTotal; /** 数据更新后待复位纵向滚动位置 */ private pendingResetScrollTop; /** 当前排序,表格重建后用于恢复表头排序态 */ private currentSortKey; private currentSortValue; nzTableComponent: NzTableComponent; constructor(cdr: ChangeDetectorRef, commonSessionService: CommonSessionService); ngOnInit(): void; ngOnChanges(changes: SimpleChange): void; /** 是否走前端分页(对 content 切片,不请求后端) */ readonly useFrontPagination: boolean; deleteHideItem(): void; sort(sort: { key: string; value: string; }): void; getColSort(col: HdTableColumn): string | null; toggleShowDetail(): void; readonly effectiveVirtualItemSize: number; /** * 纵向可用高度扣减:按钮区/合计/分页等固定占位。 * 必须与 dealScroll / presetScrollBeforeRemount 使用同一套,否则会误判「能放下」而不设 scroll.y。 */ private getScrollYMaxOffset; /** * 当前视口实际展示的行数。 * 前端分页按 pageIndex/pageSize 切片估算,避免用全量 length 误判需要纵向滚动。 */ private getVisibleRowCount; /** 当前页内容高度是否超出视口(需要表内纵向滚动) */ readonly needsVerticalScroll: boolean; /** 当前页数据能完整展示时不启用虚拟滚动,避免少量数据也出现滚动条 */ readonly useVirtualScroll: boolean; getRightSticky(col: HdTableColumn): string | null; getLeftSticky(col: HdTableColumn): string | null; trackByRow: (index: number, data: any) => string; /** 虚拟滚动按数组下标追踪,避免业务主键 trackBy 导致 CDK 行复用错位 */ virtualTrackByRow: (index: number) => number; trackByCol: (_index: number, col: HdTableColumn) => string; getInitLocalforage(): void; initTable(): void; /** 虚拟/普通模式切换时重建表格,避免残留滚动容器 */ applyTableScrollMode(forceRemount?: boolean): void; /** 重建前预设 scroll,保证 AfterViewInit 时 header/body 结构已正确 */ private presetScrollBeforeRemount; private afterTableRender; refreshVirtualScrollViewport(forceMeasure?: boolean): void; /** 数据刷新后将表体纵向滚动复位到顶部 */ private resetTableBodyScrollTop; /** * 数据更新后多次尝试复位。 * ng-zorro 8 + CDK 虚拟滚动会在数据刷新后异步改写 scrollTop,单次复位经常被覆盖。 */ private scheduleResetTableBodyScrollTop; private flushResetTableBodyScrollTop; /** 未手动传 virtualItemSize 时,从已渲染行测量真实高度 */ measureVirtualItemSize(force?: boolean): boolean; cancelDropdown(): void; confirmDropdown(): void; submitGrids(): void; setCols(): void; beforeDrop: (arg: NzFormatBeforeDropEvent) => Observable; moveElementNearby(arr: any, elementToMoveTitle: any, targetElementTitle: any, pos: any): any; checkAction(event: NzFormatEmitEvent): void; getHideListNodes(): Array; dealCols(): void; normalizeTableCacheOption(): void; private hasColsCache; saveTableCacheOption(): void; judgeRepeatCols(): boolean; onResize({ width }: NzResizeEvent, col: HdTableColumn): void; dealOperateBtn(): void; triggerEvent(fn: any, event: any): void; needShowConfirm(btn: OperateBtn, data: any): boolean; getBtnName(btn: OperateBtn, data: any): string; isDangerBtn(btn: OperateBtn, data: any): boolean; /** 虚拟滚动开启时使用视口最大高度 */ private getVirtualScrollY; private hasTableData; /** 列总宽超出外层容器才启用横向 scroll(不能用 table 自身宽度,会被 scroll.x 撑宽) */ private resolveScrollX; /** 表格渲染后按实际容器宽度校正横向 scroll(只改 x,避免触发表头结构变化) */ private syncHorizontalScroll; /** 手动把表体横向滚动同步到表头(兜底 ng-zorro 监听丢失的情况) */ private syncHeaderBodyScrollLeft; dealScroll(): void; currentPageDataChange($event: any): void; search(reset: boolean): void; /** 底部「共 n 条」:非分页/前端分页用 content.length,服务端分页用 totalElements */ getTableTotalCount(): number; resetStatus(): void; refreshStatus(event?: boolean, data?: any): void; checkAll(value: boolean): void; /** 当前行是否禁用勾选 */ isSelectDisabled(data: any): boolean; /** 当前行是否失效 */ isInvalidRow(data: any): boolean; /** * 列文字颜色:color 为函数时按行计算(用于某一行某一列标红),否则整列同色。 */ resolveCellColor(col: HdTableColumn, data: any): string; /** 可点击单元格颜色:空值固定灰,否则按列 color */ getLinkCellColor(col: HdTableColumn, data: any, isEmpty: boolean): string; /** 普通文本单元格颜色:失效行统一灰,否则用列配置 color */ getPlainCellColor(col: HdTableColumn, data: any): string; judgeColEmpty(str: any): any; getStateField(col: HdTableColumn): string; /** 字段值后是否展示竖线行号 */ hasRowNo(col: HdTableColumn): boolean; /** * 行号文案。rowNo 为字段名时取行数据;为 true 时按当前页序号(跨页连续,从 1 开始)。 */ getRowNoText(col: HdTableColumn, data: any, index: number): string; /** 表头「配送单号 | 行」拆成短竖线,避免字符 | 拉满行高 */ getTitleParts(col: HdTableColumn): Array; /** 是否显示编辑笔图标 */ isEditable(col: HdTableColumn, data: any): boolean; /** 点击编辑笔,回调父组件传入的 edit */ onEditClick(event: Event, col: HdTableColumn, data: any): void; }