fantasy-ngzorro 2.2.19 → 2.2.21

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"file":"fantasy-ngzorro.js","sources":["ng://fantasy-ngzorro/hd-button-group/hd-button-group.component.ts","ng://fantasy-ngzorro/hd-button-group/hd-button-group.module.ts","ng://fantasy-ngzorro/hd-button/hd-button.service.ts","ng://fantasy-ngzorro/hd-button/hd-button.component.ts","ng://fantasy-ngzorro/hd-button/hd-button.module.ts","ng://fantasy-ngzorro/hd-detail-form/hd-detail-form.service.ts","ng://fantasy-ngzorro/hd-detail-form/hd-detail-form.component.ts","ng://fantasy-ngzorro/hd-detail-form/hd-detail-form.module.ts","ng://fantasy-ngzorro/hd-space/hd-space.service.ts","ng://fantasy-ngzorro/hd-space/hd-space.component.ts","ng://fantasy-ngzorro/hd-space/hd-space.module.ts","ng://fantasy-ngzorro/model/common-type.ts","ng://fantasy-ngzorro/utils/hd-table-scroll.util.ts","ng://fantasy-ngzorro/hd-detail-lines/hd-detail-lines.component.ts","ng://fantasy-ngzorro/hd-detail-lines/hd-detail-lines.module.ts","ng://fantasy-ngzorro/hd-detail-lines-page/hd-detail-lines-page.component.ts","ng://fantasy-ngzorro/hd-detail-lines-page/hd-detail-lines-page.module.ts","ng://fantasy-ngzorro/hd-status/hd-status.service.ts","ng://fantasy-ngzorro/hd-detail-tip/hd-detail-tip.component.ts","ng://fantasy-ngzorro/hd-detail-tip/hd-detail-tip.module.ts","ng://fantasy-ngzorro/hd-filter/hd-filter.service.ts","ng://fantasy-ngzorro/hd-form/hd-form.service.ts","ng://fantasy-ngzorro/utils/cascader.util.ts","ng://fantasy-ngzorro/hd-filter/hd-filter-scheme.ts","ng://fantasy-ngzorro/hd-filter/hd-filter.component.ts","ng://fantasy-ngzorro/hd-form/hd-form.component.ts","ng://fantasy-ngzorro/hd-form/hd-form.module.ts","ng://fantasy-ngzorro/hd-filter/hd-filter.module.ts","ng://fantasy-ngzorro/service/common-session.service.ts","ng://fantasy-ngzorro/hd-form-lines/hd-form-lines.service.ts","ng://fantasy-ngzorro/hd-form-lines/hd-form-lines.component.ts","ng://fantasy-ngzorro/hd-form-lines/hd-form-lines.module.ts","ng://fantasy-ngzorro/hd-current-table/hd-current-table.component.ts","ng://fantasy-ngzorro/hd-current-table/hd-current-table.module.ts","ng://fantasy-ngzorro/hd-log/hd-log.component.ts","ng://fantasy-ngzorro/hd-log/hd-log.service.ts","ng://fantasy-ngzorro/hd-log/hd-log.module.ts","ng://fantasy-ngzorro/hd-popconfirm/hd-popconfirm.component.ts","ng://fantasy-ngzorro/hd-popconfirm/hd-popconfirm.module.ts","ng://fantasy-ngzorro/hd-status/hd-status.component.ts","ng://fantasy-ngzorro/hd-status/hd-status.module.ts","ng://fantasy-ngzorro/model/colWidth.ts","ng://fantasy-ngzorro/hd-table/hd-table-cell.pipe.ts","ng://fantasy-ngzorro/hd-table/hd-table.service.ts","ng://fantasy-ngzorro/hd-table/hd-table.component.ts","ng://fantasy-ngzorro/hd-table/hd-table.module.ts","ng://fantasy-ngzorro/hd-tip/hd-tip.component.ts","ng://fantasy-ngzorro/hd-tip/hd-tip.module.ts","ng://fantasy-ngzorro/hd-accessory-list/hd-accessory-list.component.ts","ng://fantasy-ngzorro/hd-accessory-list/hd-accessory-list.module.ts","ng://fantasy-ngzorro/service/hd-overlay-cleanup.service.ts","ng://fantasy-ngzorro/hd-component.module.ts","ng://fantasy-ngzorro/fantasy-ngzorro.module.ts","ng://fantasy-ngzorro/hd-accessory-list/hd-accessory-list.service.ts","ng://fantasy-ngzorro/hd-current-table/hd-current-table.service.ts","ng://fantasy-ngzorro/hd-detail-lines/hd-detail-lines.service.ts","ng://fantasy-ngzorro/model/staticConst.ts","ng://fantasy-ngzorro/utils.ts"],"sourcesContent":["import { Component, ContentChild, Input, OnInit, TemplateRef } from '@angular/core';\n\n@Component({\n selector: 'hd-button-group',\n templateUrl: './hd-button-group.component.html',\n styleUrls: ['./hd-button-group.component.less']\n})\nexport class HdButtonGroupComponent implements OnInit {\n @ContentChild(\"buttonGroupLeft\", { static: false }) buttonGroupLeft: TemplateRef<any>;\n @ContentChild(\"buttonGroupRight\", { static: false }) buttonGroupRight: TemplateRef<any>;\n\n constructor() { }\n\n ngOnInit() {\n\n }\n}\n","import { HdButtonGroupComponent } from './hd-button-group.component';\nimport { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { FormsModule } from '@angular/forms';\nimport { NgZorroAntdModule } from 'ng-zorro-antd';\n\n@NgModule({\n imports: [\n CommonModule,\n FormsModule,\n NgZorroAntdModule\n ],\n declarations: [HdButtonGroupComponent],\n exports: [HdButtonGroupComponent]\n})\nexport class HdButtonGroupModule { }\n","import { Injectable } from '@angular/core';\n\nexport enum ButtonType {\n primary = 'primary',\n dashed = 'dashed',\n danger = 'danger',\n default = 'default',\n link = 'link',\n submit = 'submit',\n // 增加类型\n reset = 'reset',\n add = 'add'\n}\n\nexport enum ButtonSize {\n normal = 'normal',\n small = 'small'\n}\n\n@Injectable({\n providedIn: 'root'\n})\nexport class HdButtonService {\n\n constructor() { }\n\n}\n","import { Component, EventEmitter, Input, OnInit, Output } from '@angular/core';\nimport { InputBoolean } from 'ng-zorro-antd';\nimport { ButtonSize, ButtonType } from './hd-button.service';\n@Component({\n selector: 'hd-button',\n templateUrl: './hd-button.component.html',\n styleUrls: ['./hd-button.component.less']\n})\nexport class HdButtonComponent implements OnInit {\n\n // 默认default\n @Input() type: ButtonType = ButtonType.default;\n @Input() size: ButtonSize = ButtonSize.normal;\n @Input() @InputBoolean() loading: boolean;\n @Input() @InputBoolean() disabled: boolean = false;\n @Output() clickAction = new EventEmitter<any>();\n @Output() nzOnConfirm = new EventEmitter<any>();\n constructor() { }\n\n ngOnInit() {\n if ((this.loading === false || this.loading === true) && this.clickAction.observers.length === 0 && this.nzOnConfirm.observers.length === 0) {\n throw '存在loading效果的hd-button组件禁止使用click绑定点击事件,请使用clickAction绑定!';\n }\n if (this.type === 'submit') {\n throw '禁止使用submit类型的按钮,请使用普通按钮+click事件触发表单提交!';\n }\n }\n\n /** loading 时一并禁用,避免与外部 [disabled] 绑定互相翻转状态 */\n get isDisabled(): boolean {\n return this.disabled || this.loading;\n }\n\n innerClickAction(option: any) {\n // loading 状态下,不允许触发点击事件\n if (this.loading) {\n return;\n }\n this.clickAction.emit(option);\n }\n}\n","import { HdButtonComponent } from './hd-button.component';\nimport { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { FormsModule } from '@angular/forms';\nimport { NgZorroAntdModule } from 'ng-zorro-antd';\n\n@NgModule({\n imports: [\n CommonModule,\n FormsModule,\n NgZorroAntdModule\n ],\n declarations: [HdButtonComponent],\n exports: [HdButtonComponent]\n})\nexport class HdButtonModule { }\n","import { Injectable } from \"@angular/core\";\n\n/** hd-detail-form 字段展示类型 */\nexport enum HdDetailFormFieldType {\n /** 普通文本(默认) */\n Text = \"text\",\n /** 附件图片(描述项内横排缩略图) */\n Accessory = \"accessory\",\n}\n\n/** 附件图片项(path 为图片地址) */\nexport interface HdDetailFormImage {\n name?: string;\n path?: string;\n url?: string;\n}\n\n@Injectable({\n providedIn: \"root\",\n})\nexport class HdDetailFormService {\n constructor() {}\n}\n","import {\n Component,\n EventEmitter,\n Input,\n OnInit,\n Output,\n SimpleChange,\n} from \"@angular/core\";\nimport { HdOption } from \"../model/common-type\";\nimport {\n HdDetailFormFieldType,\n HdDetailFormImage,\n} from \"./hd-detail-form.service\";\n\n/** 附件缩略图最多直接展示张数,超出末张蒙版 +n */\nconst MAX_VISIBLE_IMAGES = 4;\n\n@Component({\n selector: \"hd-detail-form\",\n templateUrl: \"./hd-detail-form.component.html\",\n styleUrls: [\"./hd-detail-form.component.less\"],\n})\nexport class HdDetailFormComponent implements OnInit {\n @Input() formCols: Array<HdOption> = new Array();\n /** 一行列数,默认固定 4 列(不再按屏幕宽度自适应) */\n @Input() nzColumn:\n | number\n | {\n xxl?: number;\n xl?: number;\n lg?: number;\n md?: number;\n sm?: number;\n xs?: number;\n } = 4;\n\n /** 附件图片点击回调 */\n @Output() imageClick = new EventEmitter<{\n image: HdDetailFormImage;\n path: string;\n index: number;\n }>();\n\n HdDetailFormFieldType = HdDetailFormFieldType;\n\n /** 大图预览 */\n previewVisible = false;\n previewImagePath = \"\";\n previewTitle = \"图片预览\";\n /** 当前预览所属字段的图片列表(用于翻页) */\n previewImages: Array<HdDetailFormImage> = [];\n previewIndex = 0;\n\n /** 附件字段图片缓存(避免模板里反复 getImageList 导致 *ngFor 重建、点击丢失) */\n private imageListCache = new Map<HdOption, Array<HdDetailFormImage>>();\n private displayListCache = new Map<HdOption, Array<HdDetailFormImage>>();\n\n constructor() {}\n\n get canPreviewPrev(): boolean {\n return this.previewIndex > 0;\n }\n\n get canPreviewNext(): boolean {\n return this.previewIndex < this.previewImages.length - 1;\n }\n\n ngOnInit() {\n if (this.formCols && this.formCols.length > 0) {\n this.formCols = this.formCols.filter((item) => !item.hide);\n }\n this.refreshImageCache();\n }\n\n ngOnChanges(changes: SimpleChange) {\n if (\n changes[\"formCols\"] &&\n JSON.stringify(changes[\"formCols\"].currentValue) !==\n JSON.stringify(changes[\"formCols\"].previousValue)\n ) {\n if (this.formCols && this.formCols.length > 0) {\n this.formCols = this.formCols.filter((item) => !item.hide);\n }\n this.refreshImageCache();\n }\n }\n\n isAccessory(col: HdOption): boolean {\n return !!(\n col &&\n (col.type === HdDetailFormFieldType.Accessory || col.type === \"accessory\")\n );\n }\n\n private refreshImageCache(): void {\n this.imageListCache.clear();\n this.displayListCache.clear();\n (this.formCols || []).forEach((col) => {\n if (this.isAccessory(col)) {\n this.imageListCache.set(col, this.parseImageList(col));\n }\n });\n }\n\n /**\n * 解析附件图片列表。value 支持:\n * - string / string[](图片地址)\n * - { name?, path? / url? }[]\n */\n private parseImageList(col: HdOption): Array<HdDetailFormImage> {\n const value = col && col.value;\n if (value == null || value === \"\") {\n return [];\n }\n const list = Array.isArray(value) ? value : [value];\n const result: Array<HdDetailFormImage> = [];\n list.forEach((item) => {\n if (item == null || item === \"\") {\n return;\n }\n if (typeof item === \"string\") {\n result.push({ path: item });\n return;\n }\n const path = item.path || item.url || item.address || \"\";\n if (!path) {\n return;\n }\n result.push({\n name: item.name || item.fileName,\n path: String(path),\n });\n });\n return result;\n }\n\n getImageList(col: HdOption): Array<HdDetailFormImage> {\n if (!this.imageListCache.has(col)) {\n this.imageListCache.set(col, this.parseImageList(col));\n }\n return this.imageListCache.get(col) || [];\n }\n\n hasImages(col: HdOption): boolean {\n return this.getImageList(col).length > 0;\n }\n\n /** 实际渲染的缩略图(最多 4 张) */\n getDisplayImages(col: HdOption): Array<HdDetailFormImage> {\n if (this.displayListCache.has(col)) {\n return this.displayListCache.get(col);\n }\n const display = this.getImageList(col).slice(0, MAX_VISIBLE_IMAGES);\n this.displayListCache.set(col, display);\n return display;\n }\n\n /** 未展示张数(末张蒙版 +n) */\n getMoreCount(col: HdOption): number {\n const total = this.getImageList(col).length;\n return total > MAX_VISIBLE_IMAGES ? total - MAX_VISIBLE_IMAGES : 0;\n }\n\n getImagePath(image: HdDetailFormImage): string {\n return (image && (image.path || image.url)) || \"\";\n }\n\n trackByImage(index: number, image: HdDetailFormImage): string {\n return (image && (image.path || image.url)) || String(index);\n }\n\n onImageClick(\n col: HdOption,\n image: HdDetailFormImage,\n index: number,\n event?: Event\n ): void {\n if (event) {\n event.preventDefault();\n event.stopPropagation();\n }\n const path = this.getImagePath(image);\n this.imageClick.emit({ image, path, index });\n if (!path) {\n return;\n }\n this.previewImages = this.getImageList(col).slice();\n this.previewIndex = index >= 0 ? index : 0;\n this.applyPreviewImage();\n setTimeout(() => {\n this.previewVisible = true;\n });\n }\n\n previewPrev(event?: Event): void {\n if (event) {\n event.preventDefault();\n event.stopPropagation();\n }\n if (!this.canPreviewPrev) {\n return;\n }\n this.previewIndex -= 1;\n this.applyPreviewImage();\n }\n\n previewNext(event?: Event): void {\n if (event) {\n event.preventDefault();\n event.stopPropagation();\n }\n if (!this.canPreviewNext) {\n return;\n }\n this.previewIndex += 1;\n this.applyPreviewImage();\n }\n\n private applyPreviewImage(): void {\n const image = this.previewImages[this.previewIndex];\n const path = this.getImagePath(image);\n this.previewImagePath = path;\n this.previewTitle =\n (image && image.name) || \"图片\" + (this.previewIndex + 1);\n }\n\n closePreview(): void {\n this.previewVisible = false;\n this.previewImages = [];\n this.previewIndex = 0;\n this.previewImagePath = \"\";\n }\n\n /** HdOption.width:默认 1,最大 4 */\n getColSpan(col: HdOption): number {\n const width = col && col.width != null ? Number(col.width) : 1;\n if (!width || width < 1 || isNaN(width)) {\n return 1;\n }\n return width > 4 ? 4 : Math.floor(width);\n }\n\n triggerEvent(fn: any) {\n if (fn) {\n fn(event);\n }\n }\n\n /** 点击编辑笔,回调父组件传入的 edit */\n onEditClick(event: Event, col: HdOption): void {\n if (event) {\n event.preventDefault();\n event.stopPropagation();\n }\n if (col && col.edit) {\n col.edit(col);\n }\n }\n}\n","import { NgModule } from \"@angular/core\";\nimport { CommonModule } from \"@angular/common\";\nimport { NgZorroAntdModule } from \"ng-zorro-antd\";\nimport { HdDetailFormComponent } from \"./hd-detail-form.component\";\n\n@NgModule({\n imports: [CommonModule, NgZorroAntdModule],\n exports: [HdDetailFormComponent],\n declarations: [HdDetailFormComponent],\n})\nexport class HdDetailFormModule {}\n","import { Injectable } from '@angular/core';\n\nexport enum SpaceType {\n row = 'row',\n column = 'column'\n}\n\nexport class Style {\n background: string\n width: string\n height: string\n}\n\n@Injectable({\n providedIn: 'root'\n})\nexport class HdSpaceService {\n\n constructor() { }\n\n}\n","import { Component, Input, OnInit, Output } from '@angular/core';\nimport { Style, SpaceType } from \"./hd-space.service\"; \n\n@Component({\n selector: 'hd-space',\n templateUrl: './hd-space.component.html',\n styleUrls: ['./hd-space.component.less']\n})\nexport class HdSpaceComponent implements OnInit {\n @Input() type: SpaceType = SpaceType.row; \n @Input() size: number; \n @Input() background: string = 'inherit'; \n\n style: Style = new Style();\n\n constructor() { }\n\n ngOnInit() {\n this.style['background'] = this.background;\n if(this.type === SpaceType.row){\n this.style['width'] = '100%';\n this.style['height'] = this.size + 'px';\n }else{\n this.style['height'] = '100%';\n this.style['width'] = this.size + 'px';\n }\n }\n\n}\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { NgZorroAntdModule } from 'ng-zorro-antd';\nimport { HdSpaceComponent } from './hd-space.component';\n\n@NgModule({\n imports: [\n CommonModule,\n FormsModule,\n ReactiveFormsModule,\n NgZorroAntdModule\n ],\n declarations: [HdSpaceComponent],\n exports: [HdSpaceComponent]\n})\nexport class HdSpaceModule { }\n","export class Page<T> {\n totalPages = 0;\n totalElements = 0;\n pageNumber = 0;\n pageSize = 10;\n hasContent = false;\n hasNext = false;\n content: Array<T> = [];\n}\n\nexport class HdOption {\n label: string;\n value: any;\n color?: string;\n hide?: boolean;\n /** 占据列数,默认 1,最大 4(一行共 4 列);历史未传按 1 */\n width?: number;\n /**\n * 字段类型,默认文本。\n * `accessory`:附件图片,value 为图片地址 string / string[] 或 { name?, path?/url? }[]\n */\n type?: string;\n clickText?: string;\n click?: (value: any) => void;\n clickText1?: string;\n click1?: (value: any) => void;\n /**\n * 值后显示编辑笔图标(Figma edit/edit,14px)。\n */\n editable?: boolean;\n /** 点击编辑笔回调,供父组件处理(如弹窗改值) */\n edit?: (col?: HdOption) => void;\n}\n\nexport class SelectOption {\n label: string;\n value: string;\n selectList?: Array<any>;\n selectListName?: string;\n showLabelAndValue?: boolean = false;\n hdDropdownMatchSelectWidth?: boolean = false;\n hdServerSearch?: boolean = false;\n hdShowItemCode?: boolean = false; // 是否用[value]label显示选项列表\n tableColumns?: Array<SelectOptionTableColumn>;\n hdShowSearch?: boolean = true;\n hdAllowClear?: boolean = true;\n}\n\nexport class RadioOption {\n label: string;\n value: string;\n optionList?: Array<any>;\n showLabelAndValue?: boolean = false;\n}\n\nexport class CheckboxOption {\n label: string;\n value: string;\n optionList?: Array<any>;\n showLabelAndValue?: boolean = false;\n}\n\nexport class SelectOptionTableColumn {\n width: number;\n label: string; // 这里对应的是列名\n name: string; // 对应selectList里面的name值, 如果有render字段 则去render函数渲染\n icons?: Array<SelectOptionTableColumnIcon>; // 对应的图片名字\n render?: (value: any) => string;\n}\n\nexport class SelectOptionTableColumnIcon {\n iconName: string;\n fieldName: string;\n}\n\nexport class InputNumber {\n min?: number = 0;\n max?: number = 99999999;\n step?: number = 1;\n precision?: number = 4;\n nzFormatter?: Function;\n nzParser?: Function;\n}\n\nexport interface CascaderShowSearchOptions {\n filter?: (inputValue: string, path: any[]) => boolean;\n sorter?: (a: any[], b: any[], inputValue: string) => number;\n}\n\nexport class CascaderOption {\n options: Array<any>;\n /** 是否开启搜索,默认 true;传 false 关闭;传对象可自定义 filter/sorter */\n showSearch?: boolean | CascaderShowSearchOptions;\n /** 选项中拼音字段名,默认 pinyin */\n pinyinField?: string;\n /** 下拉菜单额外 class,默认 hd-cascader-menus */\n menuClassName?: string;\n /** 下拉菜单样式(对应 nzMenuStyle) */\n menuStyle?: { [key: string]: string };\n /**\n * 搜索结果下拉最小宽度(可选)。\n * number 按 px;string 可传 '360px' 等;不传则按文案自适应,不强制宽度\n */\n dropdownMinWidth?: number | string;\n}\n","import { NzTableComponent } from \"ng-zorro-antd/table\";\n\nexport interface HdTableScrollConfig {\n x?: string;\n y?: string;\n}\n\nconst DEFAULT_FLUID_COL_WIDTH = 150;\n\nexport function getTableViewportWidth(\n nzTable: NzTableComponent,\n hostClass = \"hd-table-container\",\n): number {\n if (!nzTable || !nzTable.tableMainElement) {\n return 0;\n }\n const tableMain = nzTable.tableMainElement.nativeElement as HTMLElement;\n const scrollBody = tableMain.querySelector(\n \".ant-table-body\",\n ) as HTMLElement;\n if (scrollBody && scrollBody.clientWidth > 0) {\n return scrollBody.clientWidth;\n }\n const wrapper = tableMain.closest(\".ant-table-wrapper\") as HTMLElement;\n if (wrapper && wrapper.clientWidth > 0) {\n return wrapper.clientWidth;\n }\n const host = tableMain.closest(`.${hostClass}`) as HTMLElement;\n if (host && host.clientWidth > 0) {\n return host.clientWidth;\n }\n return 0;\n}\n\nfunction parsePx(value: string): number {\n if (!value) {\n return 0;\n }\n const parsed = parseInt(String(value).replace(/px/i, \"\"), 10);\n return Number.isNaN(parsed) ? 0 : parsed;\n}\n\n/** 克隆表头/表体测量未被 scroll 压缩前的自然列宽 */\nfunction measureElementNaturalWidth(element: HTMLElement): number {\n const clone = element.cloneNode(true) as HTMLElement;\n clone.style.position = \"absolute\";\n clone.style.left = \"-99999px\";\n clone.style.top = \"0\";\n clone.style.visibility = \"hidden\";\n clone.style.width = \"max-content\";\n clone.style.tableLayout = \"auto\";\n document.body.appendChild(clone);\n const width = clone.scrollWidth;\n document.body.removeChild(clone);\n return width;\n}\n\n/** 汇总表头 th 上声明的列宽(style.width / nzWidth) */\nfunction measureHeaderDeclaredColWidth(tableMain: HTMLElement): number {\n const ths = Array.from(\n tableMain.querySelectorAll(\".ant-table-thead > tr > th\"),\n ) as HTMLElement[];\n if (!ths.length) {\n return 0;\n }\n let sum = 0;\n let hasFluidCol = false;\n ths.forEach((th) => {\n const declared = parsePx(th.style.width);\n if (declared > 0) {\n sum += declared;\n return;\n }\n hasFluidCol = true;\n sum += th.scrollWidth || th.offsetWidth || DEFAULT_FLUID_COL_WIDTH;\n });\n return hasFluidCol ? 0 : sum;\n}\n\nexport function measureTableColWidth(nzTable: NzTableComponent): number {\n if (!nzTable || !nzTable.tableMainElement) {\n return 0;\n }\n const tableMain = nzTable.tableMainElement.nativeElement as HTMLElement;\n const tables = Array.from(\n tableMain.querySelectorAll(\n \".ant-table-header table, .ant-table-body table, .cdk-virtual-scroll-content-wrapper table\",\n ),\n ) as HTMLElement[];\n\n let max = tables.reduce(\n (width, table) => Math.max(width, table.scrollWidth || 0),\n 0,\n );\n\n const viewportWidth = getTableViewportWidth(nzTable);\n // 未开启 scroll.x 时表格会被压进容器,scrollWidth 不可靠,需测自然列宽\n if (viewportWidth <= 0 || max <= viewportWidth) {\n const headerTable = tableMain.querySelector(\n \".ant-table-header table\",\n ) as HTMLElement;\n const bodyTable = tableMain.querySelector(\n \".ant-table-body table\",\n ) as HTMLElement;\n if (headerTable) {\n max = Math.max(max, measureElementNaturalWidth(headerTable));\n }\n if (bodyTable) {\n max = Math.max(max, measureElementNaturalWidth(bodyTable));\n }\n max = Math.max(max, measureHeaderDeclaredColWidth(tableMain));\n }\n\n return max;\n}\n\n/**\n * 用于判断是否需要 scroll.x 的视口宽。\n * 有纵向滚动条时 clientWidth 会少一截,若直接拿去比列宽,会「竖滚条导致误开横滚」;\n * 这里用 offsetWidth(含滚动条槽)作为屏幕可展示宽度。\n */\nexport function getTableScrollXViewportWidth(\n nzTable: NzTableComponent,\n hostClass = \"hd-table-container\",\n): number {\n if (!nzTable || !nzTable.tableMainElement) {\n return 0;\n }\n const tableMain = nzTable.tableMainElement.nativeElement as HTMLElement;\n const scrollBody =\n (tableMain.querySelector(\n \"cdk-virtual-scroll-viewport.ant-table-body\",\n ) as HTMLElement) ||\n (tableMain.querySelector(\".ant-table-body\") as HTMLElement);\n if (scrollBody && scrollBody.offsetWidth > 0) {\n return scrollBody.offsetWidth;\n }\n return getTableViewportWidth(nzTable, hostClass);\n}\n\n/** 无数据或列宽未超出容器时不启用横向 scroll */\nexport function resolveAutoTableScroll(\n nzTable: NzTableComponent,\n hasData: boolean,\n colWidth?: number,\n): HdTableScrollConfig | null {\n if (!hasData) {\n return null;\n }\n const width =\n colWidth != null && colWidth > 0\n ? colWidth\n : measureTableColWidth(nzTable);\n if (width <= 0) {\n return null;\n }\n const viewportWidth = getTableScrollXViewportWidth(nzTable);\n if (viewportWidth > 0) {\n // 允许 1px 误差,避免亚像素导致误开横滚\n return width > viewportWidth + 1 ? { x: `${Math.ceil(width)}px` } : null;\n }\n if (typeof window !== \"undefined\" && width > window.innerWidth - 32) {\n return { x: `${Math.ceil(width)}px` };\n }\n return null;\n}\n\n/** 取 ng-zorro 分体表头 / 表体滚动容器(含虚拟滚动) */\nexport function getNzTableScrollElements(\n nzTable: NzTableComponent,\n): { header: HTMLElement | null; body: HTMLElement | null } {\n if (!nzTable) {\n return { header: null, body: null };\n }\n const nz = nzTable as any;\n let header = (nz.tableHeaderNativeElement as HTMLElement) || null;\n let body =\n (nz.mixTableBodyNativeElement as HTMLElement) ||\n (nz.tableBodyNativeElement as HTMLElement) ||\n null;\n const main =\n nz.tableMainElement &&\n (nz.tableMainElement.nativeElement as HTMLElement);\n if (main) {\n if (!header) {\n header = main.querySelector(\".ant-table-header\") as HTMLElement;\n }\n if (!body) {\n body =\n (main.querySelector(\n \"cdk-virtual-scroll-viewport.ant-table-body\",\n ) as HTMLElement) ||\n (main.querySelector(\".ant-table-body\") as HTMLElement);\n }\n }\n return { header, body };\n}\n\n/** 一次性把表体 scrollLeft 同步到表头 */\nexport function syncNzTableHeaderBodyScrollLeft(\n nzTable: NzTableComponent,\n): void {\n const els = getNzTableScrollElements(nzTable);\n if (!els.header || !els.body) {\n return;\n }\n if (els.header.scrollLeft !== els.body.scrollLeft) {\n els.header.scrollLeft = els.body.scrollLeft;\n }\n}\n\n/**\n * 监听表体横向滚动并同步表头。\n * 返回 unbind;DOM 未就绪时返回 null(调用方可重试)。\n */\nexport function bindNzTableHeaderBodyScrollSync(\n nzTable: NzTableComponent,\n): (() => void) | null {\n const els = getNzTableScrollElements(nzTable);\n if (!els.header || !els.body) {\n return null;\n }\n const header = els.header;\n const body = els.body;\n const onScroll = () => {\n if (header.scrollLeft !== body.scrollLeft) {\n header.scrollLeft = body.scrollLeft;\n }\n };\n body.addEventListener(\"scroll\", onScroll);\n onScroll();\n return () => {\n body.removeEventListener(\"scroll\", onScroll);\n };\n}\n","import { CdkDragDrop, moveItemInArray } from \"@angular/cdk/drag-drop\";\nimport {\n AfterViewInit,\n ChangeDetectorRef,\n Component,\n ContentChild,\n EventEmitter,\n Input,\n OnChanges,\n OnDestroy,\n OnInit,\n Output,\n SimpleChanges,\n TemplateRef,\n ViewChild,\n} from \"@angular/core\";\nimport { round } from \"lodash\";\nimport { InputBoolean } from \"ng-zorro-antd/core\";\nimport { NzTableComponent } from \"ng-zorro-antd/table\";\nimport { Page } from \"../model/common-type\";\nimport { measureTableColWidth, resolveAutoTableScroll, bindNzTableHeaderBodyScrollSync } from \"../utils/hd-table-scroll.util\";\nimport { TotalOption } from \"./hd-detail-lines.service\";\n\n@Component({\n selector: \"hd-detail-lines\",\n templateUrl: \"./hd-detail-lines.component.html\",\n styleUrls: [\"./hd-detail-lines.component.less\"],\n})\nexport class HdDetailLinesComponent\n implements OnInit, OnChanges, AfterViewInit, OnDestroy {\n @ViewChild(\"hdTable\", { static: false }) nzTableComponent: NzTableComponent;\n @Input() lines: Array<any>;\n @Input() @InputBoolean() showSelected: boolean = false;\n @Input() @InputBoolean() allowDrop: boolean = false;\n @Input() @InputBoolean() showSearch: boolean = false;\n // 不传递这个字段时默认为查询所有字段是否有匹配的\n @Input() searchFields: string[] = [];\n /**\n * 横向滚动。历史默认 `{ x: '1px' }`(2.1.28 前一直如此):开启横滚但不锁死列宽,\n * 业务页可不写 th/td width,由内容自适应。传 null 则按容器自动测算。\n */\n @Input() scroll: { [key: string]: string } = { x: \"1px\" };\n tableScroll: { x?: string; y?: string } = null;\n @Input() selectField: string = \"billNumber\";\n @Input() selectedField: string;\n /**\n * 行勾选禁用字段名。定义后取当前行该字段:\n * 为 true 时禁用该行勾选(全选也会跳过)。\n */\n @Input() selectDisabledField: string;\n /**\n * 行失效字段名。定义后取当前行该字段:\n * 为 true 时整行背景色为 #F7F8FA、文字 #868A9C。\n */\n @Input() rowInvalidField: string;\n @Output() selectEvent = new EventEmitter();\n @ContentChild(\"detailLineHead\", { static: false })\n detailLineHead: TemplateRef<any>;\n @ContentChild(\"detailLineBody\", { static: false })\n detailLineBody: TemplateRef<any>;\n // 合计区域\n @Input() @InputBoolean() showTotal: boolean = false;\n @Input() totalOption: Array<TotalOption> = [];\n @Input() columnsNumber: number | string = 0;\n @Input() hdFrontPagination: boolean = false;\n totalOptionList = [];\n\n tableData: Page<any> = new Page();\n tableLoading: boolean = false;\n // 表格分页参数\n tablePageIndex: number = 1;\n @Input() tablePageSize: number = 100;\n // 表格勾选参数\n isAllDisplayDataChecked = false;\n isIndeterminate = false;\n listOfDisplayData = [];\n listOfAllData = [];\n listOfSelection: Array<any> | TemplateRef<void>;\n mapOfCheckedId: { [key: string]: boolean } = {};\n mapOfCheckList: { [key: string]: any } = {};\n filterStr: string;\n /** 表格实际展示的数据(筛选结果或全量) */\n displayLines: Array<any> = [];\n /** 是否处于筛选状态 */\n isFilterData = false;\n storeFormLinesData: any = []; // 缓存的总的列表数据\n /** 控制 nz-table 重建:scroll.y 从无到有时必须重建,否则表头不跟横滚 */\n showTable = true;\n private unbindBodyScroll: (() => void) | null = null;\n\n constructor(private cdr: ChangeDetectorRef) {}\n\n get effectiveScroll(): { x?: string; y?: string } {\n // 不自动补 nzScroll.y:有 y 会拆表头/表体,无列宽时列错位。\n // 仅有 x 时的纵滚由 less(max-height + overflow-y)承担,表头 sticky。\n // 仅当父组件显式传了 scroll.y 时才走 nz-table 分体纵滚。\n return this.scroll != null ? this.scroll : this.tableScroll;\n }\n\n ngOnInit(): void {\n this.syncStoreFromLinesInput();\n this.applyDisplayFromStore();\n this.countSelected();\n this.calculateTotal();\n }\n\n ngAfterViewInit(): void {\n this.scheduleSyncHorizontalScroll();\n }\n\n ngOnDestroy(): void {\n this.unbindHeaderBodyScrollSync();\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes[\"lines\"]) {\n if (!this.isFilterData) {\n this.syncStoreFromLinesInput();\n this.displayLines = this.lines || [];\n } else if (\n !this.storeFormLinesData ||\n this.storeFormLinesData.length === 0\n ) {\n this.syncStoreFromLinesInput();\n }\n }\n this.countSelected();\n this.calculateTotal();\n if (changes[\"lines\"] || changes[\"showSelected\"]) {\n this.scheduleSyncHorizontalScroll();\n }\n }\n\n private scheduleSyncHorizontalScroll(retry = 0): void {\n const delay = retry === 0 ? 0 : 50;\n setTimeout(() => {\n if (this.scroll == null) {\n this.syncHorizontalScroll();\n }\n this.bindHeaderBodyScrollSync(0);\n const afterX =\n (this.effectiveScroll && this.effectiveScroll.x) ||\n (this.tableScroll && this.tableScroll.x);\n if (\n this.scroll == null &&\n retry < 5 &&\n this.displayLines &&\n this.displayLines.length > 0 &&\n !afterX &&\n measureTableColWidth(this.nzTableComponent) === 0\n ) {\n this.scheduleSyncHorizontalScroll(retry + 1);\n }\n }, delay);\n }\n\n private syncHorizontalScroll(): void {\n if (this.scroll != null) {\n return;\n }\n const hasData = !!(this.displayLines && this.displayLines.length);\n const nextScroll = resolveAutoTableScroll(\n this.nzTableComponent,\n hasData,\n );\n const nextX = nextScroll ? nextScroll.x : null;\n // 自动测算只设 x,不设 y(与 2.1.64 前一致,避免无列宽时表头/表体错位)\n if (this.tableScroll && this.tableScroll.x === nextX && !this.tableScroll.y) {\n return;\n }\n const prevHasY = !!(this.tableScroll && this.tableScroll.y);\n this.tableScroll = nextX ? { x: nextX } : null;\n if (prevHasY) {\n this.remountTable();\n return;\n }\n this.cdr.markForCheck();\n this.bindHeaderBodyScrollSync(0);\n }\n\n /** 重建 nz-table,让 header/body 滚动同步在 AfterViewInit 重新绑定 */\n private remountTable(): void {\n this.unbindHeaderBodyScrollSync();\n setTimeout(() => {\n this.showTable = false;\n this.cdr.markForCheck();\n setTimeout(() => {\n this.showTable = true;\n this.cdr.markForCheck();\n setTimeout(() => this.bindHeaderBodyScrollSync(0));\n });\n });\n }\n\n /** 表体横滚时同步表头(兜底 ng-zorro 监听丢失);DOM 未就绪时重试 */\n private bindHeaderBodyScrollSync(retry = 0): void {\n this.unbindHeaderBodyScrollSync();\n if (!this.nzTableComponent || !(this.effectiveScroll && this.effectiveScroll.x)) {\n return;\n }\n const unbind = bindNzTableHeaderBodyScrollSync(this.nzTableComponent);\n if (unbind) {\n this.unbindBodyScroll = unbind;\n return;\n }\n if (retry < 8) {\n setTimeout(() => this.bindHeaderBodyScrollSync(retry + 1), 50);\n }\n }\n\n private unbindHeaderBodyScrollSync(): void {\n if (this.unbindBodyScroll) {\n this.unbindBodyScroll();\n this.unbindBodyScroll = null;\n }\n }\n\n private syncStoreFromLinesInput(source?: Array<any>): void {\n const data = source || this.lines;\n this.storeFormLinesData = data ? JSON.parse(JSON.stringify(data)) : [];\n }\n\n /** 未筛选时与父组件 lines 同源,避免模板内 ngModel 与父数据脱节 */\n private applyDisplayFromStore(): void {\n if (this.lines && this.lines.length > 0) {\n this.displayLines = this.lines;\n return;\n }\n this.displayLines = this.storeFormLinesData\n ? JSON.parse(JSON.stringify(this.storeFormLinesData))\n : [];\n }\n\n private restoreFromStore(): void {\n this.isFilterData = false;\n this.applyDisplayFromStore();\n this.tableLoading = false;\n this.countSelected();\n this.calculateTotal();\n this.scheduleSyncHorizontalScroll();\n }\n\n // 全局性的搜索(涵盖页面上所有的可视文字)\n searchLines() {\n // 清空搜索:即使当前展示为空也要能从缓存恢复(对齐 hd-form-lines)\n if (!this.filterStr || !this.filterStr.trim()) {\n if (!this.storeFormLinesData || this.storeFormLinesData.length < 1) {\n return;\n }\n this.tableLoading = true;\n this.restoreFromStore();\n return;\n }\n if (!this.storeFormLinesData || this.storeFormLinesData.length < 1) {\n return;\n }\n this.tableLoading = true;\n const filterValue = this.filterStr.trim().toLowerCase();\n this.isFilterData = true;\n\n const filteredData = this.storeFormLinesData.filter((data: any) => {\n if (!this.searchFields || this.searchFields.length === 0) {\n for (const item of Object.keys(data)) {\n if (\n data[item] &&\n data[item].toString().toLowerCase().includes(filterValue)\n ) {\n return true;\n }\n }\n return false;\n }\n for (const item of this.searchFields) {\n if (\n data[item] &&\n data[item].toString().toLowerCase().includes(filterValue)\n ) {\n return true;\n }\n }\n return false;\n });\n this.displayLines = JSON.parse(JSON.stringify(filteredData));\n this.tableLoading = false;\n this.countSelected();\n this.calculateTotal();\n this.scheduleSyncHorizontalScroll();\n }\n\n private countSelected(): void {\n if (\n this.showSelected &&\n this.selectedField &&\n this.displayLines &&\n this.displayLines.length\n ) {\n this.displayLines.forEach((item) => {\n if (item[this.selectedField] === true && !this.isSelectDisabled(item)) {\n this.mapOfCheckedId[item[this.selectField]] = true;\n this.mapOfCheckList[item[this.selectField]] = item;\n }\n });\n if (\n this.displayLines.length === Object.keys(this.mapOfCheckList).length\n ) {\n this.isAllDisplayDataChecked = true;\n this.isIndeterminate = true;\n }\n }\n }\n\n get LodashRound() {\n return round;\n }\n\n drop(event: CdkDragDrop<string[]>): void {\n moveItemInArray(this.displayLines, event.previousIndex, event.currentIndex);\n this.displayLines = JSON.parse(JSON.stringify(this.displayLines));\n if (!this.isFilterData) {\n this.storeFormLinesData = JSON.parse(JSON.stringify(this.displayLines));\n }\n }\n\n calculateTotal() {\n // 这里处理合计数据\n if (this.showTotal && this.displayLines && this.displayLines.length) {\n this.totalOptionList = new Array(Number(this.columnsNumber) - 1).fill(\"\");\n this.totalOption.forEach((item) => {\n if (item.insertIndex && (item.insertValue || item.insertValue === 0)) {\n this.totalOptionList[item.insertIndex - 1] = {\n value: item.insertValue,\n align: item.align || \"right\",\n showDecimal: item.showDecimal || false,\n preserveNumber: item.preserveNumber != null ? item.preserveNumber : 2,\n isHide: item.isHide || false,\n };\n }\n });\n }\n }\n\n // 表格勾选逻辑\n currentPageDataChange($event: any): void {\n this.listOfDisplayData = $event;\n this.refreshStatus();\n this.scheduleSyncHorizontalScroll();\n }\n\n resetStatus() {\n this.isAllDisplayDataChecked = false;\n this.isIndeterminate = false;\n this.mapOfCheckedId = {};\n this.mapOfCheckList = {};\n this.selectEvent.emit([]);\n }\n\n refreshStatus(event: boolean = false, data: any = null): void {\n if (data) {\n if (event && this.isSelectDisabled(data)) {\n return;\n }\n this.mapOfCheckedId[data[this.selectField]] = event;\n if (event) {\n !this.mapOfCheckList[data[this.selectField]] &&\n (this.mapOfCheckList[data[this.selectField]] = data);\n } else {\n this.mapOfCheckList[data[this.selectField]] &&\n delete this.mapOfCheckList[data[this.selectField]];\n }\n }\n const selectableList = this.listOfDisplayData.filter(\n (item) => !this.isSelectDisabled(item),\n );\n this.isAllDisplayDataChecked =\n selectableList.length > 0 &&\n selectableList.every((item) => this.mapOfCheckedId[item[this.selectField]]);\n this.isIndeterminate =\n selectableList.some(\n (item) => this.mapOfCheckedId[item[this.selectField]],\n ) && !this.isAllDisplayDataChecked;\n // 触发select事件\n if (this.selectEvent) {\n this.selectEvent.emit(Object.values(this.mapOfCheckList));\n }\n }\n\n checkAll(value: boolean): void {\n this.listOfDisplayData.forEach((item) => {\n if (this.isSelectDisabled(item)) {\n return;\n }\n if (value) {\n !this.mapOfCheckList[item[this.selectField]] &&\n (this.mapOfCheckList[item[this.selectField]] = item);\n } else {\n this.mapOfCheckList[item[this.selectField]] &&\n delete this.mapOfCheckList[item[this.selectField]];\n }\n this.mapOfCheckedId[item[this.selectField]] = value;\n });\n this.refreshStatus();\n }\n\n /** 当前行是否禁用勾选 */\n isSelectDisabled(data: any): boolean {\n return !!(\n this.selectDisabledField &&\n data &&\n data[this.selectDisabledField] === true\n );\n }\n\n /** 当前行是否失效 */\n isInvalidRow(data: any): boolean {\n return !!(\n this.rowInvalidField &&\n data &&\n data[this.rowInvalidField] === true\n );\n }\n}\n","import { DragDropModule } from \"@angular/cdk/drag-drop\";\nimport { CommonModule } from \"@angular/common\";\nimport { NgModule, NO_ERRORS_SCHEMA } from \"@angular/core\";\nimport { FormsModule } from \"@angular/forms\";\nimport { HdButtonGroupModule } from \"../hd-button-group/hd-button-group.module\";\nimport { NgZorroAntdModule } from \"ng-zorro-antd\";\nimport { NzTableModule } from \"ng-zorro-antd/table\";\nimport { HdButtonModule } from \"../hd-button/hd-button.module\";\nimport { HdSpaceModule } from \"../hd-space/hd-space.module\";\nimport { HdDetailLinesComponent } from \"./hd-detail-lines.component\";\n\n@NgModule({\n imports: [\n CommonModule,\n NzTableModule,\n DragDropModule,\n FormsModule,\n NgZorroAntdModule,\n HdSpaceModule,\n HdButtonModule,\n HdButtonGroupModule,\n ],\n declarations: [HdDetailLinesComponent],\n exports: [HdDetailLinesComponent],\n schemas: [NO_ERRORS_SCHEMA],\n})\nexport class HdDetailLinesModule {}\n","import { CdkDragDrop, moveItemInArray } from \"@angular/cdk/drag-drop\";\nimport {\n AfterViewInit,\n ChangeDetectorRef,\n Component,\n ContentChild,\n EventEmitter,\n Input,\n OnChanges,\n OnDestroy,\n OnInit,\n Output,\n SimpleChanges,\n TemplateRef,\n ViewChild,\n} from \"@angular/core\";\nimport { round } from \"lodash\";\nimport { InputBoolean } from \"ng-zorro-antd/core\";\nimport { NzTableComponent } from \"ng-zorro-antd/table\";\nimport { Page } from \"../model/common-type\";\nimport { TotalOption } from \"../hd-detail-lines/hd-detail-lines.service\";\nimport {\n measureTableColWidth,\n resolveAutoTableScroll,\n bindNzTableHeaderBodyScrollSync,\n} from \"../utils/hd-table-scroll.util\";\n\n@Component({\n selector: \"hd-detail-lines-page\",\n templateUrl: \"./hd-detail-lines-page.component.html\",\n styleUrls: [\"./hd-detail-lines-page.component.less\"],\n})\nexport class HdDetailLinesPageComponent\n implements OnInit, OnChanges, AfterViewInit, OnDestroy\n{\n @ViewChild(\"hdTable\", { static: false }) nzTableComponent: NzTableComponent;\n @Input() lines: Array<any> = [];\n /** 与 hd-table 一致,可传 Page 对象;未传 lines 时使用 tableData.content */\n @Input() tableData: Page<any> = new Page();\n @Input() @InputBoolean() showSelected: boolean = false;\n @Input() @InputBoolean() allowDrop: boolean = false;\n /** 与 hd-table 一致:行数多时自动虚拟滚动;拖拽排序开启时强制关闭 */\n @Input() @InputBoolean() virtualScroll: boolean = true;\n /** 手动指定行高;不传则用默认/测量值 */\n @Input() virtualItemSize: number;\n /**\n * 横向滚动。历史默认 `{ x: '1px' }`(2.1.28 前一直如此):开启横滚但不锁死列宽,\n * 业务页可不写 th/td width。传 null 则按容器自动测算。\n */\n @Input() scroll: { [key: string]: string } = { x: \"1px\" };\n tableScroll: { x?: string; y?: string } = null;\n @Input() selectField: string = \"billNumber\";\n @Input() selectedField: string;\n /**\n * 行勾选禁用字段名。定义后取当前行该字段:\n * 为 true 时禁用该行勾选(全选也会跳过)。\n */\n @Input() selectDisabledField: string;\n /**\n * 行失效字段名。定义后取当前行该字段:\n * 为 true 时整行背景色为 #F7F8FA、文字 #868A9C。\n */\n @Input() rowInvalidField: string;\n @Input() isCrossPageSelect: boolean;\n @Output() selectEvent = new EventEmitter();\n @ContentChild(\"detailLineHead\", { static: false })\n detailLineHead: TemplateRef<any>;\n @ContentChild(\"detailLineBody\", { static: false })\n detailLineBody: TemplateRef<any>;\n @Input() @InputBoolean() showTotal: boolean = false;\n @Input() totalOption: Array<TotalOption> = [];\n @Input() columnsNumber: number | string = 0;\n @Input() tableLoading: boolean = false;\n @Input() tablePageIndex: number = 1;\n @Input() tablePageSize: number = 100;\n @Output() tablePageIndexChange = new EventEmitter<number>();\n @Output() tablePageSizeChange = new EventEmitter<number>();\n @Output() pageChange = new EventEmitter<void>();\n\n totalOptionList = [];\n isAllDisplayDataChecked = false;\n isIndeterminate = false;\n listOfDisplayData = [];\n mapOfCheckedId: { [key: string]: boolean } = {};\n mapOfCheckList: { [key: string]: any } = {};\n isCrossPageSelectLocal: boolean = false;\n\n showTable = true;\n /** 自动测量前的兜底行高 */\n measuredVirtualItemSize = 47;\n private virtualScrollActive: boolean | null = null;\n private unbindBodyScroll: (() => void) | null = null;\n\n constructor(private cdr: ChangeDetectorRef) {}\n\n get effectiveScroll(): { x?: string; y?: string } {\n return this.scroll != null ? this.scroll : this.tableScroll;\n }\n\n get effectiveVirtualItemSize(): number {\n if (this.virtualItemSize != null && this.virtualItemSize > 0) {\n return this.virtualItemSize;\n }\n return this.measuredVirtualItemSize;\n }\n\n /** 当前页内容高度是否超出视口 / 已指定 scroll.y */\n get needsVerticalScroll(): boolean {\n const rowCount = this.displayLines ? this.displayLines.length : 0;\n if (rowCount <= 0) {\n return false;\n }\n const base = this.effectiveScroll;\n if (base && base.y) {\n // 父级已定高(如弹窗),行稍多就开虚拟,避免千行 DOM\n return rowCount > 20;\n }\n const maxOffset = 200;\n const estimatedHeight = rowCount * this.effectiveVirtualItemSize;\n if (typeof window !== \"undefined\") {\n return estimatedHeight > window.innerHeight - maxOffset;\n }\n return rowCount > 100;\n }\n\n get useVirtualScroll(): boolean {\n if (!this.virtualScroll || this.allowDrop) {\n return false;\n }\n return this.needsVerticalScroll;\n }\n\n /** 虚拟滚动必须有 y;业务自适应列宽场景不自动给仅有 x 的表补 y */\n get resolvedScroll(): { x?: string; y?: string } {\n const base = this.effectiveScroll ? { ...this.effectiveScroll } : {};\n if (this.useVirtualScroll && !base.y) {\n base.y = this.getAutoScrollY();\n }\n return base;\n }\n\n /** 虚拟滚动按数组下标追踪,避免业务主键 trackBy 导致 CDK 行复用错位 */\n virtualTrackByRow = (index: number): number => index;\n\n ngOnInit(): void {\n if (this.isCrossPageSelect === true) {\n this.isCrossPageSelectLocal = this.isCrossPageSelect;\n }\n this.countSelected();\n this.calculateTotal();\n }\n\n ngAfterViewInit(): void {\n this.scheduleSyncHorizontalScroll();\n this.applyTableScrollMode(true);\n }\n\n ngOnDestroy(): void {\n this.unbindHeaderBodyScrollSync();\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n if (\n changes &&\n changes[\"tableData\"] &&\n changes[\"tableData\"][\"currentValue\"] &&\n changes[\"tableData\"][\"previousValue\"]\n ) {\n if (\n changes[\"tableData\"][\"currentValue\"][\"pageSize\"] !==\n changes[\"tableData\"][\"previousValue\"][\"pageSize\"] ||\n changes[\"tableData\"][\"currentValue\"][\"pageNumber\"] !==\n changes[\"tableData\"][\"previousValue\"][\"pageNumber\"]\n ) {\n this.countSelected();\n this.calculateTotal();\n this.applyTableScrollMode(false);\n return;\n }\n if (!this.isCrossPageSelectLocal) {\n this.resetStatus();\n }\n }\n this.countSelected();\n this.calculateTotal();\n if (\n changes[\"lines\"] ||\n changes[\"tableData\"] ||\n changes[\"showSelected\"] ||\n changes[\"scroll\"] ||\n changes[\"virtualScroll\"] ||\n changes[\"allowDrop\"]\n ) {\n this.scheduleSyncHorizontalScroll();\n this.applyTableScrollMode(false);\n }\n }\n\n /** 虚拟/普通模式切换时重建表格,避免残留滚动容器 */\n applyTableScrollMode(forceRemount = false): void {\n const useVirtual = this.useVirtualScroll;\n const modeChanged =\n this.virtualScrollActive !== null &&\n this.virtualScrollActive !== useVirtual;\n this.virtualScrollActive = useVirtual;\n\n if (forceRemount || modeChanged) {\n this.unbindHeaderBodyScrollSync();\n // 延后销毁/重建,避免当前 CD 周期内 ngIf 变更触发 ExpressionChanged\n setTimeout(() => {\n this.showTable = false;\n this.cdr.markForCheck();\n setTimeout(() => {\n this.showTable = true;\n this.cdr.markForCheck();\n setTimeout(() => {\n this.afterTableRender(useVirtual);\n });\n });\n });\n return;\n }\n\n this.cdr.markForCheck();\n this.afterTableRender(useVirtual);\n }\n\n private afterTableRender(useVirtual: boolean): void {\n this.scheduleSyncHorizontalScroll();\n this.bindHeaderBodyScrollSync(0);\n if (useVirtual) {\n this.refreshVirtualScrollViewport(true);\n }\n }\n\n refreshVirtualScrollViewport(forceMeasure = false): void {\n if (!this.useVirtualScroll) {\n this.bindHeaderBodyScrollSync(0);\n return;\n }\n setTimeout(() => {\n this.measureVirtualItemSize(forceMeasure);\n const viewport =\n this.nzTableComponent && this.nzTableComponent.cdkVirtualScrollViewport;\n if (viewport) {\n viewport.checkViewportSize();\n }\n this.bindHeaderBodyScrollSync(0);\n this.cdr.markForCheck();\n });\n }\n\n private measureVirtualItemSize(force = false): void {\n if (this.virtualItemSize != null && this.virtualItemSize > 0 && !force) {\n return;\n }\n const viewport =\n this.nzTableComponent && this.nzTableComponent.cdkVirtualScrollViewport;\n if (!viewport || !viewport.elementRef || !viewport.elementRef.nativeElement) {\n return;\n }\n const row = viewport.elementRef.nativeElement.querySelector(\n \"tr.hd-detail-lines-page-virtual-row\",\n ) as HTMLElement;\n if (row && row.offsetHeight > 0) {\n this.measuredVirtualItemSize = row.offsetHeight;\n }\n }\n\n private scheduleSyncHorizontalScroll(retry = 0): void {\n const delay = retry === 0 ? 0 : 50;\n setTimeout(() => {\n if (this.scroll == null) {\n this.syncHorizontalScroll();\n }\n this.bindHeaderBodyScrollSync(0);\n const afterX =\n (this.resolvedScroll && this.resolvedScroll.x) ||\n (this.tableScroll && this.tableScroll.x);\n if (\n this.scroll == null &&\n retry < 5 &&\n this.displayLines &&\n this.displayLines.length > 0 &&\n !afterX &&\n measureTableColWidth(this.nzTableComponent) === 0\n ) {\n this.scheduleSyncHorizontalScroll(retry + 1);\n }\n }, delay);\n }\n\n private getAutoScrollY(): string {\n return \"calc(100vh - 280px)\";\n }\n\n private syncHorizontalScroll(): void {\n if (this.scroll != null) {\n return;\n }\n const hasData = !!(this.displayLines && this.displayLines.length);\n const nextScroll = resolveAutoTableScroll(\n this.nzTableComponent,\n hasData,\n );\n const nextX = nextScroll ? nextScroll.x : null;\n // 自动测算只设 x;虚拟滚动才需要 y\n const nextY = this.useVirtualScroll ? this.getAutoScrollY() : null;\n const prevHasY = !!(this.tableScroll && this.tableScroll.y);\n const nextHasY = !!nextY;\n if (\n this.tableScroll &&\n this.tableScroll.x === nextX &&\n this.tableScroll.y === nextY\n ) {\n return;\n }\n this.tableScroll =\n nextX || nextY\n ? nextY\n ? { x: nextX, y: nextY }\n : { x: nextX }\n : null;\n if (prevHasY !== nextHasY) {\n this.applyTableScrollMode(true);\n return;\n }\n this.cdr.markForCheck();\n this.bindHeaderBodyScrollSync(0);\n }\n\n /** 表体横滚时同步表头;DOM 未就绪时重试 */\n private bindHeaderBodyScrollSync(retry = 0): void {\n this.unbindHeaderBodyScrollSync();\n if (!this.nzTableComponent || !(this.resolvedScroll && this.resolvedScroll.x)) {\n return;\n }\n const unbind = bindNzTableHeaderBodyScrollSync(this.nzTableComponent);\n if (unbind) {\n this.unbindBodyScroll = unbind;\n return;\n }\n if (retry < 8) {\n setTimeout(() => this.bindHeaderBodyScrollSync(retry + 1), 50);\n }\n }\n\n private unbindHeaderBodyScrollSync(): void {\n if (this.unbindBodyScroll) {\n this.unbindBodyScroll();\n this.unbindBodyScroll = null;\n }\n }\n\n get displayLines(): Array<any> {\n if (this.lines && this.lines.length) {\n return this.lines;\n }\n return (this.tableData && this.tableData.content) || [];\n }\n\n get totalCount(): number {\n if (this.tableData && this.tableData.totalElements != null) {\n return this.tableData.totalElements;\n }\n return this.displayLines.length;\n }\n\n getRowIndex(localIndex: number): number {\n return (this.tablePageIndex - 1) * this.tablePageSize + localIndex;\n }\n\n onPageIndexChange(pageIndex: number): void {\n this.tablePageIndex = pageIndex;\n this.tablePageIndexChange.emit(this.tablePageIndex);\n this.pageChange.emit();\n this.scheduleSyncHorizontalScroll();\n this.applyTableScrollMode(false);\n }\n\n onPageSizeChange(pageSize: number): void {\n this.tablePageSize = pageSize;\n this.tablePageIndex = 1;\n this.tablePageSizeChange.emit(this.tablePageSize);\n this.tablePageIndexChange.emit(this.tablePageIndex);\n this.pageChange.emit();\n this.scheduleSyncHorizontalScroll();\n this.applyTableScrollMode(true);\n }\n\n private countSelected(): void {\n if (\n this.showSelected &&\n this.selectedField &&\n this.displayLines &&\n this.displayLines.length\n ) {\n this.displayLines.forEach((item) => {\n if (item[this.selectedField] === true && !this.isSelectDisabled(item)) {\n this.mapOfCheckedId[item[this.selectField]] = true;\n this.mapOfCheckList[item[this.selectField]] = item;\n }\n });\n if (\n this.displayLines.length === Object.keys(this.mapOfCheckList).length\n ) {\n this.isAllDisplayDataChecked = true;\n this.isIndeterminate = true;\n }\n }\n }\n\n get LodashRound() {\n return round;\n }\n\n drop(event: CdkDragDrop<string[]>): void {\n const lines = [...this.displayLines];\n moveItemInArray(lines, event.previousIndex, event.currentIndex);\n this.lines = lines;\n }\n\n calculateTotal() {\n if (this.showTotal && this.displayLines && this.displayLines.length) {\n this.totalOptionList = new Array(Number(this.columnsNumber) - 1).fill(\"\");\n this.totalOption.forEach((item) => {\n if (item.insertIndex && (item.insertValue || item.insertValue === 0)) {\n this.totalOptionList[item.insertIndex - 1] = {\n value: item.insertValue,\n align: item.align || \"right\",\n showDecimal: item.showDecimal || false,\n preserveNumber: item.preserveNumber != null ? item.preserveNumber : 2,\n isHide: item.isHide || false,\n };\n }\n });\n }\n }\n\n currentPageDataChange($event: any): void {\n this.listOfDisplayData = $event;\n this.refreshStatus();\n if (!this.isCrossPageSelectLocal) {\n this.resetStatus();\n }\n this.scheduleSyncHorizontalScroll();\n }\n\n resetStatus() {\n this.isAllDisplayDataChecked = false;\n this.isIndeterminate = false;\n this.mapOfCheckedId = {};\n this.mapOfCheckList = {};\n this.selectEvent.emit([]);\n }\n\n refreshStatus(event: boolean = false, data: any = null): void {\n if (data) {\n if (event && this.isSelectDisabled(data)) {\n return;\n }\n this.mapOfCheckedId[data[this.selectField]] = event;\n if (event) {\n !this.mapOfCheckList[data[this.selectField]] &&\n (this.mapOfCheckList[data[this.selectField]] = data);\n } else {\n this.mapOfCheckList[data[this.selectField]] &&\n delete this.mapOfCheckList[data[this.selectField]];\n }\n }\n const sourceList =\n this.listOfDisplayData && this.listOfDisplayData.length\n ? this.listOfDisplayData\n : this.displayLines;\n const selectableList = (sourceList || []).filter(\n (item) => !this.isSelectDisabled(item),\n );\n this.isAllDisplayDataChecked =\n selectableList.length > 0 &&\n selectableList.every((item) => this.mapOfCheckedId[item[this.selectField]]);\n this.isIndeterminate =\n selectableList.some(\n (item) => this.mapOfCheckedId[item[this.selectField]],\n ) && !this.isAllDisplayDataChecked;\n if (this.selectEvent) {\n this.selectEvent.emit(Object.values(this.mapOfCheckList));\n }\n }\n\n checkAll(value: boolean): void {\n const sourceList =\n this.listOfDisplayData && this.listOfDisplayData.length\n ? this.listOfDisplayData\n : this.displayLines;\n (sourceList || []).forEach((item) => {\n if (this.isSelectDisabled(item)) {\n return;\n }\n if (value) {\n !this.mapOfCheckList[item[this.selectField]] &&\n (this.mapOfCheckList[item[this.selectField]] = item);\n } else {\n this.mapOfCheckList[item[this.selectField]] &&\n delete this.mapOfCheckList[item[this.selectField]];\n }\n this.mapOfCheckedId[item[this.selectField]] = value;\n });\n this.refreshStatus();\n }\n\n /** 当前行是否禁用勾选 */\n isSelectDisabled(data: any): boolean {\n return !!(\n this.selectDisabledField &&\n data &&\n data[this.selectDisabledField] === true\n );\n }\n\n /** 当前行是否失效 */\n isInvalidRow(data: any): boolean {\n return !!(\n this.rowInvalidField &&\n data &&\n data[this.rowInvalidField] === true\n );\n }\n}\n","import { DragDropModule } from \"@angular/cdk/drag-drop\";\nimport { CommonModule } from \"@angular/common\";\nimport { NgModule, NO_ERRORS_SCHEMA } from \"@angular/core\";\nimport { NzTableModule } from \"ng-zorro-antd/table\";\nimport { HdDetailLinesPageComponent } from \"./hd-detail-lines-page.component\";\n\n@NgModule({\n imports: [CommonModule, NzTableModule, DragDropModule],\n declarations: [HdDetailLinesPageComponent],\n exports: [HdDetailLinesPageComponent],\n schemas: [NO_ERRORS_SCHEMA],\n})\nexport class HdDetailLinesPageModule {}\n","import { Injectable } from '@angular/core';\n\n/**\n * 状态码 → 颜色(来源:sunan-server 业务 *State/*Status 枚举全量去重)\n * 已排除:银行支付 / AGV / HTTP StatusCode\n * 颜色语义:\n * 黄-过程中/中间态;灰-初始未开始/线下停用类;红-作废拒绝失效;\n * 蓝-审核流转中;绿-完成启用生效;橙-部分完成/预警\n */\nexport const statusToColor = {\n // 黄色:过程中 / 中间态 / 待处理动作\n '#FAB13B': [\n 'partshipped', 'partShipped', 'committed', 'COMMITTED', 'partValid', 'confirm', 'picking',\n 'prepareSubmitted', 'prepareConfirmed', 'receiving', 'shipping', 'delivering', 'approving',\n 'tendering', 'forPick', 'forPickup', 'forMove', 'forLoss', 'forMachiningTask', 'forReturn',\n 'forTransfer', 'forWholesale', 'outTransit', 'unconfirmedPrice', 'reSubmitted', 'submit',\n 'firstReview', 'Locked', 'beingUsed', 'transferLock', 'agvTransferLock', 'suspend',\n 'collected', 'merged', 'planCared', 'toBeConfirm', 'toBePaid', 'UNRECEIVED',\n '开票中', '红冲开票中', '待生效', '对账中', '可付款', '可对账',\n ],\n // 灰色:初始 / 未开始 / 未提交 / 线下停用 / 未读未打印\n '#9FA4A2': [\n 'initial', 'INITIAL', 'INIT', 'uncommitted', 'OFF_LINE', 'UN_PRINTED', 'unpublish', 'pastpublish',\n 'TO_COMMIT', 'unpublished', 'UNPUBLISHED', '未审核', 'returned', 'saved', 'SAVED', 'unaudited',\n 'UN_AUDIT', 'unlock', 'free', 'unKnow', 'noSign', 'NOT_INVOICED', 'notConfirm', 'unshipped',\n 'unPlanCar', 'UNREAD', 'UNSEND', '未提交', '未确认', '已保存', '未对账', '未登记', '未付款',\n ],\n // 红色:删除 / 作废 / 拒绝 / 失效 / 禁用\n '#F5222D': [\n 'delete', 'deleted', 'DELETED', 'abort', 'ABORTED', 'aborted', 'rejected', 'REJECTED',\n '停用', '禁用', '已停用', 'unpicked', 'AUDIT_REJECT', 'invalid', 'INVALID', 'disabled', 'DISABLED',\n '', 'canceled', 'cancelled', 'BLANK_OUT', 'complaintRejected', 'prepareRejected',\n 'returnedBeforeAudit', 'RETURNED_BEFORE_AUDIT', 'returnedBeforeConfirm', 'handleReturned',\n 'TAKE_DOWN', 'expired', 'paidFailed', 'submitFailed', 'exception',\n '已作废', '已删除', '已失效',\n ],\n // 蓝色:已审核 / 提交后流转 / 处理中\n '#3B77E3': [\n 'audited', 'adjusted', 'invoiced', 'INVOICED', 'audit', 'submitted', 'SUBMITTED', 'TO_AUDIT',\n '已审核', '处理中', 'processing', 'firstReviewed', 'awaiting_effective', 'AWAITING_EFFECTIVE',\n 'checking', 'reviewed', 'running', 'SENT', 'uploaded', 'snapped', 'handling',\n '已提交', '已初审', '已复审', '已分配', '已生成费用单',\n ],\n // 绿色:完成 / 成功 / 启用 / 生效\n '#20B95D': [\n 'shipped', 'SHIPPED', 'received', 'RECEIVED', 'checked', 'using', 'USING', 'reverse', 'valid',\n 'approved', 'ON_LINE', 'finished', 'FINISHED', 'finish', 'opened', 'PRINTED', '启用', 'picked',\n 'published', 'PUBLISHED', 'AUDITED', '已收票', '付款完成', '收款完成', '已收款', 'accepted',\n 'offered', 'confirmed', 'effective', 'EFFECTIVE', '已发布', 'paid', 'successful', 'READ',\n 'signed', 'ON_SALE', 'enabled', 'entrucked', 'normal', 'statemented',\n '已付款', '已核销', '已开票', '已完成', '已确认', '已红冲', '已结束', '已发货', '已收货', '生效中',\n '已对账', '已登记',\n ],\n // 橙色:部分完成 / 打印后修改 / 临期预警\n '#F05B24': [\n 'partialReceived', 'partDelete', 'tender', 'MODIFIED_AFTER_PRINTED', '部分付款', '部分收款',\n 'partPublished', 'partOffered', 'partInvoiced', 'partStatemented', '部分核销', 'willExpired',\n 'supplierConfirmed',\n ],\n};\n\n@Injectable({\n providedIn: 'root'\n})\nexport class HdStatusService {\n constructor() {\n }\n}\n","import { Component, Input, OnInit, SimpleChange } from \"@angular/core\";\nimport { statusToColor } from \"../hd-status/hd-status.service\";\n\n@Component({\n selector: \"hd-detail-tip\",\n templateUrl: \"./hd-detail-tip.component.html\",\n styleUrls: [\"./hd-detail-tip.component.less\"],\n})\nexport class HdDetailTipComponent implements OnInit {\n constructor() {}\n @Input() state: string;\n @Input() stateText: string;\n @Input() billNumber: string;\n @Input() tip: string = \"详情\";\n statusColor: string;\n\n ngOnInit() {\n this.setStatusColor();\n }\n\n ngOnChanges() {\n this.setStatusColor();\n }\n\n setStatusColor() {\n let findKey = '';\n for (let key in statusToColor) {\n if (\n this.state &&\n (statusToColor[key].indexOf(this.state) !== -1 ||\n statusToColor[key].indexOf(this.state.toUpperCase()) !== -1 ||\n statusToColor[key].indexOf(this.state.toLowerCase()) !== -1)\n ) {\n findKey = key;\n }\n }\n if (findKey) {\n this.statusColor = findKey;\n } else {\n this.statusColor = '#9FA4A2';\n }\n }\n}\n","import { HdDetailTipComponent } from './hd-detail-tip.component';\nimport { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { FormsModule } from '@angular/forms';\nimport { NgZorroAntdModule } from 'ng-zorro-antd';\n\n@NgModule({\n imports: [\n CommonModule,\n FormsModule,\n NgZorroAntdModule\n ],\n declarations: [HdDetailTipComponent],\n exports: [HdDetailTipComponent]\n})\nexport class HdDetailTipModule { }\n","import { Injectable } from '@angular/core';\nimport { SelectOption, CascaderOption, InputNumber } from '../model/common-type';\n\n// 控件列表\nexport class Filter {\n type: FilterListType;\n label: string; // 文本\n name: string; // 字段名称\n placeholder?: string; // 输入框提示文案\n value?: string | boolean | number | Array<string | Date> | null = null; // 值 不传默认为null\n // 组件内部成员\n show?: boolean;\n selectOption?: SelectOption; // 控件为Select时,选项列表\n inputNumber?: InputNumber = new InputNumber(); // number组件的min、max、step\n onSearchEvent?: Function; // select选择器搜索事件 可用于更新备选集合\n onChangeEvent?: Function; // 控件的值改变事件 可用于控件间联动\n onOpenChangeEvent?: Function; // select下拉展开/收起;展开时组件先清空 selectList 再回调,可用于按需请求\n onBlurEvent?: Function; // 控件失去焦点事件\n hdDisabledDate?: Function; // date-picker组件不可选择的日期\n showTime?: boolean = false; // 日期选择器是否包含时间\n require?: boolean = false; // 是否必填\n /**\n * 是否允许清空当前筛选项(Input 清空按钮、Select/Date/Cascader 等清空图标)。\n * 不传默认 true;Select 未配此项时仍可回退到 selectOption.hdAllowClear\n */\n hdAllowClear?: boolean;\n cascaderOption?: CascaderOption; // 级联选择器配置\n onChangeEventDebounceTime?: number; // change事件防抖\n onSearchEventEventDebounceTime?: number; // search事件防抖\n onOpenChangeEventDebounceTime?: number; // 下拉展开事件防抖,未配置或为0时同步触发(不防抖)\n}\n\n\n// 控件类型\nexport enum FilterListType {\n Input, // 输入框\n Select, // 单项选择器\n Date, // 单个日期选择\n DateRange, // 日期范围选择\n MultipleSelect, // 多选\n Cascader, // 级联选择\n Month, // 月份选择\n InputNumber // 数字输入\n}\n\n\n@Injectable({\n providedIn: 'root'\n})\nexport class HdFilterService {\n\n constructor() {\n }\n\n}\n","import { Injectable } from \"@angular/core\";\nimport { ValidatorFn } from \"@angular/forms\";\nimport {\n CascaderOption,\n CheckboxOption,\n InputNumber,\n RadioOption,\n SelectOption,\n} from \"../model/common-type\";\n\n// 控件列表\nexport class FormItem {\n type: FormListType;\n label: string; // 文本\n name: string; // 字段名称\n require?: boolean = false; // 是否必填\n placeholder?: string; // 输入框提示文案\n width?: number = 1; // 占据的列数。默认1\n hide?: boolean = false; // 是否为隐藏字段,仅用于填充表单的字段,不显示在页面上\n /**\n * 是否允许清空当前控件(Input 清空按钮、Select/Date/Cascader 等清空图标)。\n * 不传默认 true;Select 未配此项时仍可回退到 selectOption.hdAllowClear\n */\n hdAllowClear?: boolean;\n totalWidth?: number = 0;\n isRowFirst?: number = 0; // 是否是一行的第一个元素\n columnItems?: Array<any>; // 当前行的所有列的items\n value?:\n | string\n | boolean\n | number\n | Date\n | Array<string | number | boolean | Date>\n | null = null; // 值 不传默认为null\n disabled?: boolean;\n color?: string;\n // 组件内部成员\n maxLength?: number; // input控件的输入长度\n prefix?: string; // input前缀文字,对应 nz-input-group nzPrefix\n prefixIcon?: string; // input前缀图标,对应 nz-icon nzType\n selectOption?: SelectOption; // 控件为Select时,选项列表\n radioOption?: RadioOption; // 控件为Radio时,选项列表\n checkboxOption?: CheckboxOption; // 控件为Checkbox组时,选项列表\n inputNumber?: InputNumber = new InputNumber(); // number组件的min、max、step\n onChangeEvent?: Function; // 控件的值改变事件 可用于控件间联动\n onSearchEvent?: Function; // select选择器搜索事件 可用于更新备选集合\n onOpenChangeEvent?: Function; // select下拉展开/收起;展开时组件先清空 selectList 再回调,可用于按需请求\n defaultLabel?: string | Array<string>; // select选择器不初始化的时候可以使用defaultLabel搭配value,设置默认值\n hdDisabledDate?: Function; // date-picker组件不可选择的日期\n hdShowToday?: boolean = true; // 对应 nzShowToday,是否显示「今天」按钮,默认 true\n explain?: string; // label底部的介绍\n textAreaRows?: number; // textArea的行数\n showTime?: boolean = false; // 日期选择器是否包含时间\n labelColor?: string; // label的文字的颜色\n validatorKeys?: Array<ValidatorKey>;\n validator?: ValidatorFn;\n onChangeEventDebounceTime?: number; // change事件防抖,未配置或为0时同步触发(不防抖)\n onSearchEventEventDebounceTime?: number; // search事件防抖,未配置或为0时同步触发(不防抖)\n onOpenChangeEventDebounceTime?: number; // 下拉展开事件防抖,未配置或为0时同步触发(不防抖)\n cascaderOption?: CascaderOption; // 级联选择器配置\n format?: string; // 时间的格式化规则\n /** RegionAddress:详细地址字段名(与 name 组成两个 FormControl) */\n addressName?: string;\n /** RegionAddress:详细地址初始值 */\n addressValue?: string;\n /** RegionAddress:详细地址占位符,默认「请输入详细地址」 */\n addressPlaceholder?: string;\n /** RegionAddress:详细地址最大长度 */\n addressMaxLength?: number;\n}\n\nexport class ValidatorKey {\n key: string;\n label: string;\n}\n\n// 控件类型\nexport enum FormListType {\n Input, // 输入框\n Select, // 单项选择器\n Date, // 单个日期选择\n DateRange, // 日期范围选择\n TextArea, // 块级输入框\n InputNumber, // 数字输入\n MultipleSelect, // 多选\n ViewDom, // 单纯的显示控件\n Switch, // 开关\n Time, // 时间选择器\n Cascader, // 级联选择器\n Radio, // 单选\n Checkbox, // 复选框\n RegionAddress, // 省市区级联 + 详细地址(占 2 列,注册两个 FormControl)\n}\n\n@Injectable({\n providedIn: \"root\",\n})\nexport class HdFormService {\n constructor() {}\n}\n","import { CascaderOption } from '../model/common-type';\n\nexport const HD_CASCADER_MENU_CLASS = 'hd-cascader-menus';\n\nexport function cascaderPinyinFilter(\n inputValue: string,\n path: any[],\n pinyinField: string = 'pinyin'\n): boolean {\n if (!inputValue) {\n return true;\n }\n const keyword = inputValue.trim().toLowerCase();\n return path.some((option) => {\n const label =\n option.label != null ? String(option.label).toLowerCase() : '';\n const value =\n option.value != null ? String(option.value).toLowerCase() : '';\n const pinyin =\n option[pinyinField] != null\n ? String(option[pinyinField]).toLowerCase()\n : '';\n return (\n (label && label.indexOf(keyword) !== -1) ||\n (value && value.indexOf(keyword) !== -1) ||\n (pinyin && pinyin.indexOf(keyword) !== -1)\n );\n });\n}\n\nexport function getCascaderShowSearch(\n cascaderOption?: CascaderOption\n): boolean | { filter?: Function; sorter?: Function } {\n if (!cascaderOption) {\n return true;\n }\n if (cascaderOption.showSearch === false) {\n return false;\n }\n if (\n cascaderOption.showSearch &&\n typeof cascaderOption.showSearch === 'object'\n ) {\n return cascaderOption.showSearch;\n }\n const pinyinField = cascaderOption.pinyinField || 'pinyin';\n return {\n filter: (inputValue: string, path: any[]) =>\n cascaderPinyinFilter(inputValue, path, pinyinField),\n };\n}\n\n/** 下拉菜单 class:默认带 hd-cascader-menus,便于搜索结果按内容撑开 */\nexport function getCascaderMenuClassName(\n cascaderOption?: CascaderOption\n): string {\n const custom =\n cascaderOption && cascaderOption.menuClassName\n ? String(cascaderOption.menuClassName).trim()\n : '';\n if (!custom) {\n return HD_CASCADER_MENU_CLASS;\n }\n if (custom.indexOf(HD_CASCADER_MENU_CLASS) !== -1) {\n return custom;\n }\n return HD_CASCADER_MENU_CLASS + ' ' + custom;\n}\n\n/**\n * 合并 menuStyle。\n * 默认不强制宽度;仅当配置了 dropdownMinWidth / menuStyle 时才写入。\n */\nexport function getCascaderMenuStyle(\n cascaderOption?: CascaderOption\n): { [key: string]: string } | null {\n if (!cascaderOption) {\n return null;\n }\n const style: { [key: string]: string } = {};\n if (cascaderOption.menuStyle) {\n Object.keys(cascaderOption.menuStyle).forEach((key) => {\n style[key] = cascaderOption.menuStyle[key];\n });\n }\n if (cascaderOption.dropdownMinWidth != null) {\n const minWidthCss =\n typeof cascaderOption.dropdownMinWidth === 'number'\n ? cascaderOption.dropdownMinWidth + 'px'\n : String(cascaderOption.dropdownMinWidth);\n if (style['--hd-cascader-menu-min-width'] == null) {\n style['--hd-cascader-menu-min-width'] = minWidthCss;\n }\n }\n return Object.keys(style).length ? style : null;\n}\n","import { InjectionToken } from '@angular/core';\r\nimport { Observable } from 'rxjs';\r\n\r\n/** 用户筛选条件模版(与 auth UserFilterScheme 对齐) */\r\nexport class HdFilterScheme {\r\n uuid?: string;\r\n userCode?: string;\r\n filterKey: string;\r\n templateName: string;\r\n filterValue: string;\r\n}\r\n\r\n/** 内置默认模版名 */\r\nexport const HD_FILTER_DEFAULT_SCHEME_NAME = '默认条件';\r\n\r\n/**\r\n * 业务仓实现并 provide,hd-filter 在 enableFilterScheme 时注入使用。\r\n * 不提供则开启开关也不会调接口。\r\n */\r\nexport abstract class HdFilterSchemeStore {\r\n abstract queryByFilterKey(filterKey: string): Observable<Array<HdFilterScheme>>;\r\n abstract save(scheme: HdFilterScheme): Observable<HdFilterScheme>;\r\n abstract delete(uuid: string): Observable<void>;\r\n}\r\n\r\nexport const HD_FILTER_SCHEME_STORE = new InjectionToken<HdFilterSchemeStore>('HD_FILTER_SCHEME_STORE');\r\n","import {\n Component,\n EventEmitter,\n Inject,\n Input,\n OnChanges,\n OnDestroy,\n OnInit,\n Optional,\n Output,\n SimpleChanges\n} from '@angular/core';\nimport { FormBuilder, FormGroup } from '@angular/forms';\nimport { Filter, FilterListType } from './hd-filter.service';\nimport { FormItem, FormListType } from '../hd-form/hd-form.service';\nimport {\n getCascaderMenuClassName,\n getCascaderMenuStyle,\n getCascaderShowSearch,\n} from '../utils/cascader.util';\nimport { Subject, Subscription } from 'rxjs';\nimport { debounceTime } from 'rxjs/operators';\nimport { InputBoolean } from 'ng-zorro-antd';\nimport {\n HD_FILTER_DEFAULT_SCHEME_NAME,\n HD_FILTER_SCHEME_STORE,\n HdFilterScheme,\n HdFilterSchemeStore\n} from './hd-filter-scheme';\n\n@Component({\n selector: 'hd-filter',\n templateUrl: './hd-filter.component.html',\n styleUrls: ['./hd-filter.component.less']\n})\nexport class HdFilterComponent implements OnInit, OnChanges, OnDestroy {\n\n @Input() filterList: Array<Filter>;\n /** 是否启用筛选组(默认关闭) */\n @Input() @InputBoolean() enableFilterScheme = false;\n /** 筛选器标识,开启筛选组时必传 */\n @Input() filterSchemeKey: string;\n /** 是否去掉 hd-filter-container 的 padding,默认 false */\n @Input() @InputBoolean() hidePadding = false;\n\n @Output() searchEvent = new EventEmitter();\n @Output() resetEvent = new EventEmitter();\n\n validateFilterForm: FormGroup;\n isShowMore: boolean = true;\n filterListModular: number = 0;\n private searchSubject = new Subject<{ fn: any, event: any, selectOption?: any; }>();\n private debounceTimeout: number = 0;\n private openChangeSubject = new Subject<{ fn: any; event: any }>();\n private openChangeDebounceTimeout: number = 0;\n\n private searchSubscription: Subscription | undefined;\n private openChangeSubscription: Subscription | undefined;\n private schemeLoadSub: Subscription | undefined;\n private schemeActionSub: Subscription | undefined;\n\n /** 页面配置的初始值(虚拟「默认条件」) */\n private defaultFilterValues: { [key: string]: any } = {};\n private defaultValuesCaptured = false;\n\n schemeList: Array<HdFilterScheme> = [];\n currentScheme: HdFilterScheme = null;\n currentSchemeName = HD_FILTER_DEFAULT_SCHEME_NAME;\n schemeLoading = false;\n schemeSaving = false;\n\n switchModalVisible = false;\n switchFormList: Array<FormItem> = [];\n switchValidateForm: FormGroup;\n\n saveAsModalVisible = false;\n saveAsFormList: Array<FormItem> = [];\n saveAsValidateForm: FormGroup;\n\n readonly defaultSchemeName = HD_FILTER_DEFAULT_SCHEME_NAME;\n private readonly switchDefaultKey = '__DEFAULT__';\n\n constructor(\n private fb: FormBuilder,\n @Optional() @Inject(HD_FILTER_SCHEME_STORE) private schemeStore: HdFilterSchemeStore\n ) {\n this.searchSubscription = this.searchSubject.pipe(\n debounceTime(this.debounceTimeout)\n ).subscribe(({ fn, event, selectOption }) => this.triggerEvent(fn, event, selectOption));\n this.openChangeSubscription = this.openChangeSubject\n .pipe(debounceTime(this.openChangeDebounceTimeout))\n .subscribe(({ fn, event }) => {\n if (event) {\n this.triggerEvent(fn, event);\n }\n });\n }\n\n ngOnInit() {\n this.init();\n // 首次加载只在这里请求一次;ngOnChanges 首次也会带上 enableFilterScheme/filterSchemeKey,避免重复调接口\n this.tryLoadSchemes(true);\n }\n\n ngOnChanges(changes: SimpleChanges) {\n if (changes['filterList']) {\n this.init();\n }\n if (changes['enableFilterScheme'] || changes['filterSchemeKey']) {\n // 首次变更与 ngOnInit 重复(第二次会 unsubscribe 第一次,表现为请求无返回);仅后续切换再加载\n const enableLater = changes['enableFilterScheme'] && !changes['enableFilterScheme'].firstChange;\n const keyLater = changes['filterSchemeKey'] && !changes['filterSchemeKey'].firstChange;\n if (enableLater || keyLater) {\n this.tryLoadSchemes(true);\n }\n }\n }\n\n ngOnDestroy() {\n if (this.searchSubscription) {\n this.searchSubscription.unsubscribe();\n }\n if (this.openChangeSubscription) {\n this.openChangeSubscription.unsubscribe();\n }\n if (this.schemeLoadSub) {\n this.schemeLoadSub.unsubscribe();\n }\n if (this.schemeActionSub) {\n this.schemeActionSub.unsubscribe();\n }\n }\n\n get canUseScheme(): boolean {\n return !!(this.enableFilterScheme && this.filterSchemeKey && this.schemeStore);\n }\n\n private init(): void {\n this.isShowMore = true;\n if (!this.checkList(this.filterList)) {\n throw 'filter组件数据格式不规范';\n }\n if (!this.filterList) {\n this.filterList = [];\n }\n this.filterListModular = this.filterList.length % 4;\n const formGroupList = {};\n this.filterList.forEach((item, index) => {\n formGroupList[item.name] = this.fb.control(item.value, []);\n item.show = index < 7;\n });\n this.validateFilterForm = this.fb.group(formGroupList);\n if (!this.defaultValuesCaptured) {\n this.defaultFilterValues = this.clonePlain(this.getFilterData());\n this.defaultValuesCaptured = true;\n }\n this.filterList.forEach((item) => {\n if (item.onChangeEvent) {\n if (item.onChangeEventDebounceTime) {\n this.validateFilterForm.get(item.name).valueChanges\n .pipe(\n debounceTime(item.onChangeEventDebounceTime)\n )\n .subscribe(value => this.triggerEvent(item.onChangeEvent, value));\n } else {\n this.validateFilterForm.get(item.name).valueChanges.subscribe(value => this.triggerEvent(item.onChangeEvent, value));\n }\n }\n });\n }\n\n onSearchEvent(fn: any, event: any, onSearchEventDebounceTime: any, selectOption?: any) {\n if (onSearchEventDebounceTime) {\n this.debounceTimeout = onSearchEventDebounceTime;\n if (this.searchSubscription) {\n this.searchSubscription.unsubscribe();\n }\n this.searchSubscription = this.searchSubject.pipe(\n debounceTime(this.debounceTimeout)\n ).subscribe(({ fn, event, selectOption }) => this.triggerEvent(fn, event, selectOption));\n this.searchSubject.next({ fn, event, selectOption });\n } else {\n this.triggerEvent(fn, event, selectOption);\n }\n }\n\n onOpenChangeEvent(\n fn: any,\n open: boolean,\n onOpenChangeEventDebounceTime: any,\n filter?: Filter,\n ) {\n if (!fn) {\n return;\n }\n // 展开时先清空旧 options,避免条件变化后请求返回前仍展示上一批下拉数据\n if (open) {\n this.clearSelectOptionsOnOpen(filter);\n }\n const debounceMs =\n onOpenChangeEventDebounceTime != null\n ? onOpenChangeEventDebounceTime\n : 0;\n // 未配置或为 0:同步触发,不走 debounceTime(避免异步)\n if (!debounceMs) {\n if (open) {\n this.triggerEvent(fn, open);\n }\n return;\n }\n this.openChangeDebounceTimeout = debounceMs;\n if (this.openChangeSubscription) {\n this.openChangeSubscription.unsubscribe();\n }\n this.openChangeSubscription = this.openChangeSubject\n .pipe(debounceTime(this.openChangeDebounceTimeout))\n .subscribe(({ fn, event }) => {\n if (event) {\n this.triggerEvent(fn, event);\n }\n });\n this.openChangeSubject.next({ fn, event: open });\n }\n\n /** 有 onOpenChangeEvent 时展开下拉先清空选项,由业务回调再写入新数据 */\n private clearSelectOptionsOnOpen(filter: Filter): void {\n if (!filter || !filter.selectOption) {\n return;\n }\n const opt = filter.selectOption;\n if (opt.selectList != null) {\n opt.selectList = [];\n }\n }\n\n triggerEvent(fn: any, event: any, selectOption?: any) {\n if (fn && selectOption) {\n fn(event, selectOption);\n } else if (fn) {\n fn(event);\n } else {\n return;\n }\n }\n\n computeOffset() {\n if (this.filterList.length === 4) {\n return 18;\n }\n return this.isShowMore ? ((this.filterListModular === 0 || this.filterList.length > 7) ? 0 : (3 - this.filterListModular) * 6) : (this.filterListModular === 0 ? 18 : (3 - this.filterListModular) * 6);\n }\n\n private checkList(list: Array<Filter>): boolean {\n if (!list || (list && list.length === 0)) {\n return true;\n }\n const nameList = [];\n list.forEach((item) => {\n nameList.push(item.name);\n });\n if ([...new Set(nameList)].length !== list.length) {\n throw 'filter组件数据格式不规范,存在重复name值!';\n }\n return true;\n }\n\n public submitForm(): void {\n this.searchEvent.emit(this.validateFilterForm.getRawValue());\n }\n\n public resetForm(): void {\n this.resetFilterFormWithValue();\n if (this.resetEvent.observers.length > 0) {\n this.resetEvent.emit(this.validateFilterForm.getRawValue());\n } else {\n this.searchEvent.emit(this.validateFilterForm.getRawValue());\n }\n }\n\n public resetFilterFormWithValue() {\n const resetValue: { [key: string]: any } = {};\n this.filterList.forEach((item) => {\n resetValue[item.name] = item.value;\n });\n this.validateFilterForm.patchValue(resetValue);\n }\n\n public getFilterData() {\n return this.validateFilterForm.getRawValue();\n }\n\n public showMore(): void {\n this.isShowMore = !this.isShowMore;\n this.filterList.forEach((item, index) => {\n item.show = this.isShowMore ? index < 7 : true;\n });\n }\n\n public inputClean(filter: Filter): void {\n const patchObject = {};\n patchObject[filter.name] = null;\n this.validateFilterForm.patchValue(patchObject);\n }\n\n isAllowClear(item: Filter): boolean {\n if (!item) {\n return true;\n }\n if (item.hdAllowClear != null) {\n return !!item.hdAllowClear;\n }\n if (item.selectOption && item.selectOption.hdAllowClear != null) {\n return !!item.selectOption.hdAllowClear;\n }\n return true;\n }\n\n // ---------- 筛选组 ----------\n\n private tryLoadSchemes(applyDefault: boolean) {\n if (!this.canUseScheme) {\n this.schemeList = [];\n this.currentScheme = null;\n this.currentSchemeName = HD_FILTER_DEFAULT_SCHEME_NAME;\n return;\n }\n this.schemeLoading = true;\n if (this.schemeLoadSub) {\n this.schemeLoadSub.unsubscribe();\n }\n this.schemeLoadSub = this.schemeStore.queryByFilterKey(this.filterSchemeKey).subscribe(\n (list) => {\n this.schemeLoading = false;\n this.schemeList = list || [];\n if (applyDefault) {\n this.applySchemeByName(HD_FILTER_DEFAULT_SCHEME_NAME, true);\n } else if (this.currentScheme && this.currentScheme.uuid) {\n const found = this.schemeList.find(s => s.uuid === this.currentScheme.uuid);\n this.currentScheme = found || null;\n this.currentSchemeName = found ? found.templateName : HD_FILTER_DEFAULT_SCHEME_NAME;\n }\n },\n (err) => {\n this.schemeLoading = false;\n this.showError('加载筛选模版失败:' + (err || ''));\n if (applyDefault) {\n this.applySchemeByName(HD_FILTER_DEFAULT_SCHEME_NAME, true);\n }\n }\n );\n }\n\n /** 展示用列表:保证有「默认条件」 */\n getDisplaySchemeList(): Array<HdFilterScheme> {\n const result: Array<HdFilterScheme> = [];\n const fromDb = this.schemeList.find(s => s.templateName === HD_FILTER_DEFAULT_SCHEME_NAME);\n if (fromDb) {\n result.push(fromDb);\n } else {\n result.push({\n filterKey: this.filterSchemeKey,\n templateName: HD_FILTER_DEFAULT_SCHEME_NAME,\n filterValue: JSON.stringify(this.defaultFilterValues || {})\n });\n }\n (this.schemeList || []).forEach(s => {\n if (s.templateName !== HD_FILTER_DEFAULT_SCHEME_NAME) {\n result.push(s);\n }\n });\n return result;\n }\n\n openSwitchModal() {\n if (!this.canUseScheme) {\n return;\n }\n const current = this.currentScheme\n || {\n filterKey: this.filterSchemeKey,\n templateName: this.currentSchemeName || HD_FILTER_DEFAULT_SCHEME_NAME,\n filterValue: ''\n };\n this.buildSwitchFormList(this.getSwitchOptionKey(current));\n this.switchModalVisible = true;\n }\n\n closeSwitchModal() {\n this.switchModalVisible = false;\n }\n\n switchFormChangeEvent(form: FormGroup) {\n this.switchValidateForm = form;\n }\n\n getSwitchOptionKey(item: HdFilterScheme): string {\n if (!item) {\n return this.switchDefaultKey;\n }\n if (item.uuid) {\n return item.uuid;\n }\n return this.switchDefaultKey;\n }\n\n private buildSwitchFormList(selectedKey: string) {\n const selectList = this.getDisplaySchemeList().map(item => {\n return {\n value: this.getSwitchOptionKey(item),\n label: item.templateName\n };\n });\n this.switchFormList = [\n {\n type: FormListType.Select,\n label: '筛选组',\n name: 'schemeKey',\n require: true,\n width: 4,\n value: selectedKey,\n placeholder: '请选择筛选组',\n selectOption: {\n value: 'value',\n label: 'label',\n hdShowSearch: true,\n selectList: selectList\n }\n }\n ];\n }\n\n confirmSwitch(): boolean {\n if (!this.switchValidateForm || !this.switchValidateForm.valid) {\n this.showError('请选择筛选组');\n return false;\n }\n const schemeKey = this.switchValidateForm.getRawValue().schemeKey;\n if (schemeKey == null || schemeKey === '') {\n this.showError('请选择筛选组');\n return false;\n }\n const list = this.getDisplaySchemeList();\n let target: HdFilterScheme = null;\n if (schemeKey === this.switchDefaultKey) {\n target = list.find(s => s.templateName === HD_FILTER_DEFAULT_SCHEME_NAME && !s.uuid)\n || list.find(s => s.templateName === HD_FILTER_DEFAULT_SCHEME_NAME);\n } else {\n target = list.find(s => s.uuid === schemeKey);\n }\n if (!target) {\n this.showError('请选择筛选组');\n return false;\n }\n this.applyScheme(target, true);\n this.switchModalVisible = false;\n return true;\n }\n\n isDefaultScheme(item: HdFilterScheme): boolean {\n return !!(item && item.templateName === HD_FILTER_DEFAULT_SCHEME_NAME);\n }\n\n canDeleteCurrent(): boolean {\n return !!(this.currentScheme && this.currentScheme.uuid\n && this.currentScheme.templateName !== HD_FILTER_DEFAULT_SCHEME_NAME);\n }\n\n saveCurrentScheme() {\n if (!this.canUseScheme) {\n return;\n }\n const name = this.currentSchemeName || HD_FILTER_DEFAULT_SCHEME_NAME;\n const body: HdFilterScheme = {\n uuid: this.currentScheme && this.currentScheme.uuid ? this.currentScheme.uuid : null,\n filterKey: this.filterSchemeKey,\n templateName: name,\n filterValue: this.serializeFilterValue()\n };\n this.schemeSaving = true;\n if (this.schemeActionSub) {\n this.schemeActionSub.unsubscribe();\n }\n this.schemeActionSub = this.schemeStore.save(body).subscribe(\n (saved) => {\n this.schemeSaving = false;\n this.showSuccess('保存成功');\n this.currentScheme = saved;\n this.currentSchemeName = saved.templateName;\n this.refreshSchemeListKeepCurrent();\n },\n (err) => {\n this.schemeSaving = false;\n this.showError('保存失败:' + (err || ''));\n }\n );\n }\n\n openSaveAsModal() {\n this.buildSaveAsFormList();\n this.saveAsModalVisible = true;\n }\n\n closeSaveAsModal() {\n this.saveAsModalVisible = false;\n }\n\n saveAsFormChangeEvent(form: FormGroup) {\n this.saveAsValidateForm = form;\n }\n\n private buildSaveAsFormList() {\n this.saveAsFormList = [\n {\n type: FormListType.Input,\n label: '筛选组名称',\n name: 'templateName',\n require: true,\n width: 4,\n maxLength: 50,\n value: null,\n placeholder: '请输入筛选组名称'\n }\n ];\n }\n\n confirmSaveAs(): boolean {\n if (!this.saveAsValidateForm || !this.saveAsValidateForm.valid) {\n this.showError('请输入筛选组名称');\n return false;\n }\n const name = ((this.saveAsValidateForm.getRawValue().templateName) || '').trim();\n if (!name) {\n this.showError('请输入筛选组名称');\n return false;\n }\n if (name === HD_FILTER_DEFAULT_SCHEME_NAME) {\n this.showError('不能使用「默认条件」作为筛选组名称,请使用「保存为当前」覆盖默认条件');\n return false;\n }\n const exists = (this.schemeList || []).some(s => s.templateName === name);\n if (exists) {\n this.showError('筛选组名称已存在');\n return false;\n }\n const body: HdFilterScheme = {\n filterKey: this.filterSchemeKey,\n templateName: name,\n filterValue: this.serializeFilterValue()\n };\n this.schemeSaving = true;\n if (this.schemeActionSub) {\n this.schemeActionSub.unsubscribe();\n }\n this.schemeActionSub = this.schemeStore.save(body).subscribe(\n (saved) => {\n this.schemeSaving = false;\n this.saveAsModalVisible = false;\n this.showSuccess('另存为成功');\n this.currentScheme = saved;\n this.currentSchemeName = saved.templateName;\n this.refreshSchemeListKeepCurrent();\n },\n (err) => {\n this.schemeSaving = false;\n this.showError('另存为失败:' + (err || ''));\n }\n );\n return false;\n }\n\n deleteCurrentScheme() {\n if (!this.canDeleteCurrent()) {\n return;\n }\n const uuid = this.currentScheme.uuid;\n this.schemeSaving = true;\n if (this.schemeActionSub) {\n this.schemeActionSub.unsubscribe();\n }\n this.schemeActionSub = this.schemeStore.delete(uuid).subscribe(\n () => {\n this.schemeSaving = false;\n this.showSuccess('删除成功');\n this.schemeList = (this.schemeList || []).filter(s => s.uuid !== uuid);\n this.applySchemeByName(HD_FILTER_DEFAULT_SCHEME_NAME, true);\n },\n (err) => {\n this.schemeSaving = false;\n this.showError('删除失败:' + (err || ''));\n }\n );\n }\n\n private refreshSchemeListKeepCurrent() {\n if (!this.canUseScheme) {\n return;\n }\n this.schemeStore.queryByFilterKey(this.filterSchemeKey).subscribe(\n (list) => {\n this.schemeList = list || [];\n if (this.currentScheme && this.currentScheme.uuid) {\n const found = this.schemeList.find(s => s.uuid === this.currentScheme.uuid);\n if (found) {\n this.currentScheme = found;\n this.currentSchemeName = found.templateName;\n }\n }\n },\n () => { /* ignore */ }\n );\n }\n\n private applySchemeByName(name: string, emitSearch: boolean) {\n const list = this.getDisplaySchemeList();\n const target = list.find(s => s.templateName === name);\n if (target) {\n this.applyScheme(target, emitSearch);\n }\n }\n\n private applyScheme(scheme: HdFilterScheme, emitSearch: boolean) {\n this.currentScheme = scheme && scheme.uuid ? scheme : {\n filterKey: this.filterSchemeKey,\n templateName: scheme ? scheme.templateName : HD_FILTER_DEFAULT_SCHEME_NAME,\n filterValue: scheme ? scheme.filterValue : JSON.stringify(this.defaultFilterValues || {})\n };\n this.currentSchemeName = this.currentScheme.templateName || HD_FILTER_DEFAULT_SCHEME_NAME;\n\n let values: any = {};\n if (this.currentSchemeName === HD_FILTER_DEFAULT_SCHEME_NAME && !(scheme && scheme.uuid)) {\n values = this.clonePlain(this.defaultFilterValues || {});\n } else {\n try {\n values = JSON.parse(scheme.filterValue || '{}');\n } catch (e) {\n values = {};\n }\n if (this.currentSchemeName === HD_FILTER_DEFAULT_SCHEME_NAME) {\n // 库中默认条件覆盖初始值:以默认值为底,再叠加库值\n values = Object.assign({}, this.defaultFilterValues || {}, values || {});\n }\n }\n this.patchFilterValues(values);\n if (emitSearch) {\n this.submitForm();\n }\n }\n\n private serializeFilterValue(): string {\n return JSON.stringify(this.getFilterData() || {});\n }\n\n private patchFilterValues(values: { [key: string]: any }) {\n if (!this.validateFilterForm || !this.filterList) {\n return;\n }\n const patch: { [key: string]: any } = {};\n this.filterList.forEach(item => {\n if (values && Object.prototype.hasOwnProperty.call(values, item.name)) {\n patch[item.name] = this.reviveFilterValue(item, values[item.name]);\n }\n });\n this.validateFilterForm.patchValue(patch);\n }\n\n private reviveFilterValue(filter: Filter, value: any): any {\n if (value == null) {\n return value;\n }\n if (filter.type === FilterListType.DateRange) {\n if (Array.isArray(value)) {\n return value.map(v => this.parseDateLike(v));\n }\n return value;\n }\n if (filter.type === FilterListType.Date || filter.type === FilterListType.Month) {\n return this.parseDateLike(value);\n }\n return value;\n }\n\n private parseDateLike(value: any): any {\n if (value == null || value instanceof Date) {\n return value;\n }\n if (typeof value === 'string' && /^\\d{4}-\\d{2}-\\d{2}/.test(value)) {\n const d = new Date(value);\n return isNaN(d.getTime()) ? value : d;\n }\n if (typeof value === 'number') {\n const d = new Date(value);\n return isNaN(d.getTime()) ? value : d;\n }\n return value;\n }\n\n private clonePlain(obj: any): any {\n try {\n return JSON.parse(JSON.stringify(obj == null ? {} : obj));\n } catch (e) {\n return {};\n }\n }\n\n private showSuccess(msg: string) {\n if (typeof window !== 'undefined' && (window as any).hdMessageService) {\n (window as any).hdMessageService.prototype.success(msg);\n }\n }\n\n private showError(msg: string) {\n if (typeof window !== 'undefined' && (window as any).hdMessageService) {\n (window as any).hdMessageService.prototype.error(msg);\n } else {\n // eslint-disable-next-line no-console\n console.error(msg);\n }\n }\n\n getCascaderShowSearch = getCascaderShowSearch;\n getCascaderMenuClassName = getCascaderMenuClassName;\n getCascaderMenuStyle = getCascaderMenuStyle;\n}\n","import {\n Component,\n EventEmitter,\n Input,\n OnInit,\n Output,\n SimpleChanges,\n} from \"@angular/core\";\nimport { FormBuilder, FormGroup, Validators } from \"@angular/forms\";\nimport { Subject, Subscription } from \"rxjs\";\nimport { debounceTime } from \"rxjs/operators\";\nimport { FormItem, FormListType } from \"./hd-form.service\";\nimport {\n getCascaderMenuClassName,\n getCascaderMenuStyle,\n getCascaderShowSearch,\n} from \"../utils/cascader.util\";\n// import * as moment from 'moment';\n@Component({\n selector: \"hd-form\",\n templateUrl: \"./hd-form.component.html\",\n styleUrls: [\"./hd-form.component.less\"],\n})\nexport class HdFormComponent implements OnInit {\n @Input() formList: Array<FormItem>;\n @Output() changeEvent = new EventEmitter();\n validateHdForm: FormGroup;\n inputValue: string;\n\n private searchSubject = new Subject<{ fn: any; event: any }>();\n private debounceTimeout: number = 0; // 默认防抖时间\n private searchSubscription: Subscription | undefined;\n\n private openChangeSubject = new Subject<{ fn: any; event: any }>();\n private openChangeDebounceTimeout: number = 0;\n private openChangeSubscription: Subscription | undefined;\n\n constructor(private fb: FormBuilder) {\n this.searchSubscription = this.searchSubject\n .pipe(debounceTime(this.debounceTimeout))\n .subscribe(({ fn, event }) => this.triggerEvent(fn, event));\n this.openChangeSubscription = this.openChangeSubject\n .pipe(debounceTime(this.openChangeDebounceTimeout))\n .subscribe(({ fn, event }) => {\n // 防抖结束后仅展开态触发业务回调,避免频繁开关仍打接口\n if (event) {\n this.triggerEvent(fn, event);\n }\n });\n }\n\n ngOnInit() {\n if (!this.formList || this.formList.length === 0) {\n // 模板始终绑定 [formGroup],空列表时也必须有 FormGroup 实例\n this.validateHdForm = this.fb.group({});\n return;\n }\n\n this.init();\n }\n\n ngOnChanges(changes: SimpleChanges) {\n if (\n changes[\"formList\"] &&\n JSON.stringify(changes[\"formList\"].currentValue) !==\n JSON.stringify(changes[\"formList\"].previousValue)\n ) {\n if (!this.formList || this.formList.length === 0) {\n this.validateHdForm = this.fb.group({});\n return;\n }\n this.init();\n }\n }\n\n onSearchEvent(fn: any, event: any, onSearchEventDebounceTime: any) {\n if (!fn) {\n return;\n }\n const debounceMs =\n onSearchEventDebounceTime != null ? onSearchEventDebounceTime : 0;\n // 未配置或为 0:同步触发,不走 debounceTime(避免异步)\n if (!debounceMs) {\n this.triggerEvent(fn, event);\n return;\n }\n this.debounceTimeout = debounceMs;\n if (this.searchSubscription) {\n this.searchSubscription.unsubscribe();\n }\n this.searchSubscription = this.searchSubject\n .pipe(debounceTime(this.debounceTimeout))\n .subscribe(({ fn, event }) => this.triggerEvent(fn, event));\n this.searchSubject.next({ fn, event });\n }\n\n onOpenChangeEvent(\n fn: any,\n open: boolean,\n onOpenChangeEventDebounceTime: any,\n formItem?: any,\n ) {\n if (!fn) {\n return;\n }\n // 展开时先清空旧 options,避免条件变化后请求返回前仍展示上一批下拉数据\n if (open) {\n this.clearSelectOptionsOnOpen(formItem);\n }\n const debounceMs =\n onOpenChangeEventDebounceTime != null\n ? onOpenChangeEventDebounceTime\n : 0;\n // 未配置或为 0:同步触发,不走 debounceTime(避免异步)\n if (!debounceMs) {\n if (open) {\n this.triggerEvent(fn, open);\n }\n return;\n }\n this.openChangeDebounceTimeout = debounceMs;\n if (this.openChangeSubscription) {\n this.openChangeSubscription.unsubscribe();\n }\n this.openChangeSubscription = this.openChangeSubject\n .pipe(debounceTime(this.openChangeDebounceTimeout))\n .subscribe(({ fn, event }) => {\n if (event) {\n this.triggerEvent(fn, event);\n }\n });\n this.openChangeSubject.next({ fn, event: open });\n }\n\n /** 有 onOpenChangeEvent 时展开下拉先清空选项,由业务回调再写入新数据 */\n private clearSelectOptionsOnOpen(formItem: any): void {\n if (!formItem || !formItem.selectOption) {\n return;\n }\n const opt = formItem.selectOption;\n if (opt.selectList != null) {\n opt.selectList = [];\n }\n }\n\n triggerEvent(fn: any, event: any) {\n if (fn) {\n fn(event);\n }\n }\n\n private init(): void {\n // 异常捕获\n if (!this.checkList(this.formList)) {\n throw \"form组件数据格式不规范\";\n }\n // RegionAddress 固定占两列,保证级联宽与单列控件对齐\n this.formList.forEach((item) => {\n if (item.type === FormListType.RegionAddress) {\n item.width = 2;\n }\n });\n // 对表单数据做初始化,用row隔离每行数据item\n this.dealRow();\n // 首先根据定义的组件数组 去初始化表单\n let formGroupList = {};\n this.formList.forEach((item, index) => {\n // 日期相关的控件做特殊处理\n if (item.type === 2 && item.value) {\n const [year, month, day] = item.value\n .toString()\n .split(\"-\")\n .map((str) => parseInt(str));\n const newDateStr = new Date(year, month - 1, day)\n .toLocaleDateString(\"zh-Hans-CN\", {\n year: \"numeric\",\n month: \"2-digit\",\n day: \"2-digit\",\n })\n .replace(/\\//g, \"-\");\n if (item.validator) {\n formGroupList[item.name] = this.fb.control(\n { value: new Date(newDateStr), disabled: item.disabled },\n item.require && !item.hide\n ? [Validators.required, item.validator]\n : [],\n );\n } else {\n formGroupList[item.name] = this.fb.control(\n { value: new Date(newDateStr), disabled: item.disabled },\n item.require && !item.hide ? [Validators.required] : [],\n );\n }\n } else if (item.type === 3 && item.value) {\n let formItemDate = JSON.parse(JSON.stringify(item.value));\n if (formItemDate && formItemDate instanceof Array) {\n formItemDate = formItemDate.map((item) => {\n const [year, month, day] = item\n .split(\"-\")\n .map((str) => parseInt(str));\n const newDateStr = new Date(year, month - 1, day)\n .toLocaleDateString(\"zh-Hans-CN\", {\n year: \"numeric\",\n month: \"2-digit\",\n day: \"2-digit\",\n })\n .replace(/\\//g, \"-\");\n item = new Date(newDateStr);\n });\n if (item.validator) {\n formGroupList[item.name] = this.fb.control(\n { value: formItemDate, disabled: item.disabled },\n item.require && !item.hide\n ? [Validators.required, item.validator]\n : [],\n );\n } else {\n formGroupList[item.name] = this.fb.control(\n { value: formItemDate, disabled: item.disabled },\n item.require && !item.hide ? [Validators.required] : [],\n );\n }\n } else {\n throw \"form组件中DateRange控件value值格式不规范,正确示例['2020-01-22', '2020-01-23']\";\n }\n } else if (item.type === FormListType.Checkbox && item.checkboxOption) {\n const checkboxValue = Array.isArray(item.value) ? item.value : [];\n if (item.validator) {\n formGroupList[item.name] = this.fb.control(\n { value: checkboxValue, disabled: item.disabled },\n item.require && !item.hide\n ? [Validators.required, item.validator]\n : [],\n );\n } else {\n formGroupList[item.name] = this.fb.control(\n { value: checkboxValue, disabled: item.disabled },\n item.require && !item.hide ? [Validators.required] : [],\n );\n }\n } else if (item.type === FormListType.Checkbox) {\n const checkboxValue = item.value != null ? item.value : false;\n if (item.validator) {\n formGroupList[item.name] = this.fb.control(\n { value: checkboxValue, disabled: item.disabled },\n item.require && !item.hide\n ? [Validators.required, item.validator]\n : [],\n );\n } else {\n formGroupList[item.name] = this.fb.control(\n { value: checkboxValue, disabled: item.disabled },\n item.require && !item.hide ? [Validators.required] : [],\n );\n }\n } else if (item.type === FormListType.RegionAddress) {\n const regionValue = Array.isArray(item.value) ? item.value : null;\n const addressValue =\n item.addressValue != null ? item.addressValue : null;\n const requireValidators =\n item.require && !item.hide ? [Validators.required] : [];\n if (item.validator) {\n formGroupList[item.name] = this.fb.control(\n { value: regionValue, disabled: item.disabled },\n item.require && !item.hide\n ? [Validators.required, item.validator]\n : [item.validator],\n );\n } else {\n formGroupList[item.name] = this.fb.control(\n { value: regionValue, disabled: item.disabled },\n requireValidators,\n );\n }\n formGroupList[item.addressName] = this.fb.control(\n { value: addressValue, disabled: item.disabled },\n requireValidators,\n );\n } else {\n if (item.validator) {\n formGroupList[item.name] = this.fb.control(\n { value: item.value, disabled: item.disabled },\n item.require && !item.hide\n ? [Validators.required, item.validator]\n : [],\n );\n } else {\n formGroupList[item.name] = this.fb.control(\n { value: item.value, disabled: item.disabled },\n item.require && !item.hide ? [Validators.required] : [],\n );\n }\n }\n });\n\n this.validateHdForm = this.fb.group(formGroupList);\n\n this.formList.forEach((item) => {\n if (item.onChangeEvent) {\n const debounceMs =\n item.onChangeEventDebounceTime != null\n ? item.onChangeEventDebounceTime\n : 0;\n const control = this.validateHdForm.get(item.name);\n // 未配置或为 0:同步订阅,不走 debounceTime(避免异步破坏 patchValue 联动回显)\n if (debounceMs > 0) {\n control.valueChanges\n .pipe(debounceTime(debounceMs))\n .subscribe((value) =>\n this.triggerEvent(item.onChangeEvent, value),\n );\n } else {\n control.valueChanges.subscribe((value) =>\n this.triggerEvent(item.onChangeEvent, value),\n );\n }\n }\n });\n this.validateHdForm.valueChanges.subscribe((data) =>\n this.onHdFormValueChanged(data),\n );\n this.onHdFormValueChanged();\n }\n\n private dealRow() {\n // 一阶段 遍历数据计算相关数据\n const formListLength = this.formList.length;\n let step = 0;\n for (let i = 0; i < formListLength; i++) {\n if (!this.formList[i].hide) {\n if (i === 0) {\n this.formList[i].totalWidth = this.formList[i].width || 1;\n this.formList[i].isRowFirst = 1;\n step = step + 4;\n } else {\n // 去找到前一个非hide的控件\n for (let j = i - 1; j >= 0; j--) {\n if (this.formList[j].totalWidth) {\n this.formList[i].totalWidth =\n this.formList[j].totalWidth + (this.formList[i].width || 1);\n if (\n this.formList[j].totalWidth + (this.formList[i].width || 1) >\n step &&\n this.formList[j].totalWidth <= step\n ) {\n step = step + 4;\n this.formList[i].isRowFirst = 1;\n } else {\n this.formList[i].isRowFirst = 0;\n }\n break;\n }\n }\n }\n }\n }\n\n // 二阶段 isRowFirst的数组项增加子节点\n for (let m = 0; m < formListLength; m++) {\n if (this.formList[m].isRowFirst === 1) {\n this.formList[m].columnItems = [];\n let space = 0;\n for (let n = 1; n < formListLength - m; n++) {\n if (space === 4 || this.formList[m + n].isRowFirst === 1) {\n break;\n }\n if (\n !this.formList[m + n].hide &&\n this.formList[m + n] &&\n this.formList[m + n].isRowFirst === 0\n ) {\n this.formList[m].columnItems.push(this.formList[m + n]);\n space++;\n }\n }\n }\n }\n }\n\n private onHdFormValueChanged(data?: any) {\n this.changeEvent.emit(this.validateHdForm);\n }\n\n private checkList(list: Array<FormItem>): boolean {\n if (!list || (list && list.length === 0)) {\n return false;\n }\n let nameList = [];\n list.forEach((item) => {\n // 校验单项选择器\n // if (item.type === FormListType.Select && (!item.selectOption.selectList || (item.selectOption.selectList && item.selectOption.selectList.length === 0))) {\n // throw 'form组件数据格式不规范,存在单项选择器没有传入选项!'\n // }\n if (item.type === FormListType.RegionAddress && !item.addressName) {\n throw \"form组件 RegionAddress 必须配置 addressName\";\n }\n if (\n item.type === FormListType.RegionAddress &&\n (!item.cascaderOption || !item.cascaderOption.options)\n ) {\n throw \"form组件 RegionAddress 必须配置 cascaderOption.options\";\n }\n nameList.push(item.name);\n if (item.type === FormListType.RegionAddress) {\n nameList.push(item.addressName);\n }\n });\n // 校验 name / addressName 是否重复\n if ([...new Set(nameList)].length !== nameList.length) {\n throw \"form组件数据格式不规范,存在重复name值!\";\n }\n // ...more check\n return true;\n }\n\n /** RegionAddress 双控件任一脏且无效时显示 error */\n getRegionAddressValidateStatus(item: FormItem): string {\n if (!this.validateHdForm) {\n return \"\";\n }\n const region = this.validateHdForm.get(item.name);\n const address = item.addressName\n ? this.validateHdForm.get(item.addressName)\n : null;\n const invalidDirty = (control) =>\n control && control.dirty && control.invalid;\n if (invalidDirty(region) || invalidDirty(address)) {\n return \"error\";\n }\n return \"\";\n }\n\n getRegionAddressErrorTip(item: FormItem): string {\n if (!this.validateHdForm) {\n return \"\";\n }\n const region = this.validateHdForm.get(item.name);\n const address = item.addressName\n ? this.validateHdForm.get(item.addressName)\n : null;\n if (region && region.dirty && region.hasError(\"required\")) {\n return item.label + \"不能为空\";\n }\n if (address && address.dirty && address.hasError(\"required\")) {\n return \"详细地址不能为空\";\n }\n if (item.validatorKeys && region) {\n for (let i = 0; i < item.validatorKeys.length; i++) {\n const key = item.validatorKeys[i];\n if (region.hasError(key.key)) {\n return key.label;\n }\n }\n }\n return item.label + \"不能为空\";\n }\n\n public submitForm(): void {\n Object.values(this.validateHdForm.controls).forEach((control) => {\n control.markAsDirty();\n control.updateValueAndValidity();\n });\n this.changeEvent.emit(this.validateHdForm.getRawValue());\n }\n\n public resetForm(): void {\n this.validateHdForm.reset();\n Object.values(this.validateHdForm.controls).forEach((control) => {\n control.markAsDirty();\n control.updateValueAndValidity();\n });\n this.changeEvent.emit(this.validateHdForm.getRawValue());\n }\n\n public inputClean(filter: FormItem): void {\n const patchObject = {};\n patchObject[filter.name] = null;\n this.validateHdForm.patchValue(patchObject);\n }\n\n /**\n * 是否允许清空:优先 FormItem.hdAllowClear,其次 selectOption.hdAllowClear,默认 true\n */\n isAllowClear(item: FormItem): boolean {\n if (!item) {\n return true;\n }\n if (item.hdAllowClear != null) {\n return !!item.hdAllowClear;\n }\n if (item.selectOption && item.selectOption.hdAllowClear != null) {\n return !!item.selectOption.hdAllowClear;\n }\n return true;\n }\n\n isCheckboxChecked(name: string, value: any): boolean {\n const control = this.validateHdForm.get(name);\n const current = control ? control.value : null;\n return Array.isArray(current) && current.indexOf(value) !== -1;\n }\n\n onCheckboxItemChange(name: string, value: any, checked: boolean): void {\n const control = this.validateHdForm.get(name);\n if (!control) {\n return;\n }\n const current = Array.isArray(control.value) ? [...control.value] : [];\n const index = current.indexOf(value);\n if (checked && index === -1) {\n current.push(value);\n } else if (!checked && index !== -1) {\n current.splice(index, 1);\n }\n control.setValue(current);\n control.markAsDirty();\n control.updateValueAndValidity();\n }\n\n readonly inputNumberDefaultFormatter = (value: unknown) => value;\n readonly inputNumberDefaultParser = (value: string) => value;\n\n getCascaderShowSearch = getCascaderShowSearch;\n getCascaderMenuClassName = getCascaderMenuClassName;\n getCascaderMenuStyle = getCascaderMenuStyle;\n}\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { HdFormComponent } from './hd-form.component';\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { NgZorroAntdModule } from 'ng-zorro-antd';\nimport { HdButtonModule } from '../hd-button/hd-button.module';\n@NgModule({\n imports: [\n CommonModule,\n FormsModule,\n ReactiveFormsModule,\n NgZorroAntdModule,\n HdButtonModule\n ],\n declarations: [HdFormComponent],\n exports: [HdFormComponent]\n})\nexport class HdFormModule { }\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { HdFilterComponent } from './hd-filter.component';\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { NgZorroAntdModule } from 'ng-zorro-antd';\nimport { HdButtonModule } from '../hd-button/hd-button.module';\nimport { HdFormModule } from '../hd-form/hd-form.module';\n@NgModule({\n imports: [\n CommonModule,\n FormsModule,\n ReactiveFormsModule,\n NgZorroAntdModule,\n HdButtonModule,\n HdFormModule\n ],\n declarations: [HdFilterComponent],\n exports: [HdFilterComponent]\n})\nexport class HdFilterModule { }\n","import { Injectable } from '@angular/core';\n\n@Injectable()\nexport class CommonSessionService {\n putSession(session_key: string, session: any) {\n if (session) {\n window.sessionStorage.setItem(session_key, JSON.stringify(session));\n } else {\n window.sessionStorage.removeItem(session_key);\n }\n }\n\n getSession(session_key: string): any {\n return JSON.parse(window.sessionStorage.getItem(session_key));\n }\n\n removeSession(session_key: string) {\n window.sessionStorage.removeItem(session_key);\n }\n}\n","import { Injectable } from \"@angular/core\";\nimport { InputNumber, SelectOption } from \"../model/common-type\";\n// 控件列表\nexport class FormLine {\n type: FormLineType; // 控件类型\n label: string; // 文本\n name: string; // 字段名称\n placeholder?: string; // 输入框的提示文件\n require?: boolean = false; // 是否必填\n hide?: boolean = false; // 是否为隐藏字段,仅用于填充表单的字段,不显示在页面上\n hideViewDomValue?: boolean = false; // type为ViewDom时,是否隐藏value值, 用于特殊场景,譬如列表中图片的显示\n /** 列设置可见性(仅非 hide 的 ViewDom 可由设置列切换;默认 true) */\n isShow?: boolean = true;\n align?: \"left\" | \"right\" | \"center\"; // 列对齐方式\n value?: string | boolean | number | Date | Array<string | Date> | null = null; // 值 不传默认为null\n isSelect?: boolean; // 输入框等是否允许点击之后全选内容\n selectOption?: SelectOption; // 控件为Select时,选项列表\n explainOptionRight?: ExplainOption; // 明细字段的说明(右侧)\n explainOption?: ExplainOption; // 明细字段的说明\n colorOption?: ColorOption; // 颜色字段的说明\n // 组件内部成员\n maxLength?: number; // input控件的输入长度\n preserveNumber?: number; // 需要保留小数的列的位数\n inputNumber?: InputNumber = new InputNumber(); // number组件的min、max、step\n onChangeEvent?: Function; // 控件的值改变事件 可用于控件间联动\n onSearchEvent?: Function; // select选择器搜索事件 可用于更新备选集合\n onOpenChangeEvent?: Function; // select下拉展开/收起,回调 (open, line);展开时组件先清空 selectList/selectListName 再回调\n defaultLabel?: any; // select选择器不初始化的时候可以使用defaultLabel搭配value,设置默认值\n hdDisabledDate?: Function; // date-picker组件不可选择的日期\n hdShowToday?: boolean = true; // 对应 nzShowToday,是否显示「今天」按钮,默认 true\n disabled?: boolean; // 不可输入状态\n showTime?: boolean = false; // 日期选择器是否包含时间\n style?: object;\n canSearch?: boolean = false; // 指明hide 情况下的控件是否可以被搜索,默认false\n onChangeEventDebounceTime?: number; // change事件防抖,未配置或为0时同步触发(不防抖)\n onSearchEventEventDebounceTime?: number; // search事件防抖,未配置或为0时同步触发(不防抖)\n onOpenChangeEventDebounceTime?: number; // 下拉展开事件防抖,未配置或为0时同步触发(不防抖)\n}\n\nexport class ColorOption {\n name: string;\n color?: string;\n}\n\nexport class ExplainOption {\n show: boolean;\n name: string;\n color?: string;\n}\n\n// 控件类型\nexport enum FormLineType {\n Input = \"Input\", // 输入框\n Select = \"Select\", // 单项选择器\n Date = \"Date\", // 单个日期选择\n DateRange = \"DateRange\", // 日期范围选择\n TextArea = \"TextArea\", // 块级输入框\n InputNumber = \"InputNumber\", // 数字输入\n MultipleSelect = \"MultipleSelect\", // 多选\n ViewDom = \"ViewDom\", // 单纯的显示控件\n Switch = \"Switch\", // 开关\n Time = \"Time\", // 时间选择器\n}\n\n/** 列设置缓存(IndexedDB),仅存可见 ViewDom 的 name 列表 */\nexport class FormLinesCacheOption {\n cols: Array<string> = [];\n}\n\n@Injectable({\n providedIn: \"root\",\n})\nexport class HdFormLinesService {\n constructor() {}\n}\n","import {\n AfterViewInit,\n ChangeDetectorRef,\n Component,\n ContentChild,\n ElementRef,\n EventEmitter,\n Input,\n OnDestroy,\n OnInit,\n Output,\n QueryList,\n SimpleChanges,\n TemplateRef,\n ViewChildren,\n} from \"@angular/core\";\nimport { FormArray, FormBuilder, FormGroup, Validators } from \"@angular/forms\";\nimport { round } from \"lodash\";\nimport * as localforage from \"localforage\";\nimport {\n InputBoolean,\n NzDatePickerComponent,\n NzInputNumberComponent,\n NzRangePickerComponent,\n NzSelectComponent,\n NzTimePickerComponent,\n} from \"ng-zorro-antd\";\nimport { NzFormatEmitEvent } from \"ng-zorro-antd/core\";\nimport { Subject, Subscription } from \"rxjs\";\nimport { debounceTime } from \"rxjs/operators\";\nimport { TotalOption } from \"../hd-detail-lines/hd-detail-lines.service\";\nimport { TreeGrid } from \"../hd-table/hd-table.service\";\nimport { SelectOptionTableColumn } from \"../model/common-type\";\nimport { CommonSessionService } from \"../service/common-session.service\";\nimport { FormLine, FormLineType, FormLinesCacheOption } from \"./hd-form-lines.service\";\n\n/** 与 ant-select 选项项水平内边距一致,用于表头与选项行对齐 */\nconst SELECT_TABLE_OPTION_HORIZONTAL_PADDING = 12;\n\n@Component({\n selector: \"hd-form-lines\",\n templateUrl: \"./hd-form-lines.component.html\",\n styleUrls: [\"./hd-form-lines.component.less\"],\n})\nexport class HdFormLinesComponent implements OnInit, AfterViewInit, OnDestroy {\n @ViewChildren(\"formInputDom\") formInputDomList!: QueryList<ElementRef>;\n\n @Input() @InputBoolean() showLineNumber: boolean = true;\n @Input() @InputBoolean() allowEmpty: boolean = true;\n @Output() deleteLastLineEvent = new EventEmitter();\n @Input() @InputBoolean() showKeyboardOperateTip: boolean = false;\n /** 是否启用键盘方向键/Enter 在单元格间跳转,默认开启 */\n @Input() @InputBoolean() enableKeyboardOperate: boolean = true;\n @Input() @InputBoolean() tableLoading: boolean = false;\n @Input() @InputBoolean() showSearch: boolean = false;\n /** 是否展示行勾选列,用于外部批量操作勾选行 */\n @Input() @InputBoolean() showCheckbox: boolean = false;\n /** 是否展示列设置(齿轮),默认关闭;需要时页面手工 `[showColSettings]=\"true\"`;仅非 hide 的 ViewDom 可配置,禁止拖拽调序 */\n @Input() @InputBoolean() showColSettings: boolean = false;\n /** 列设置缓存 key 片段;有值时持久化到 IndexedDB,无则仅当前会话生效 */\n @Input() uuid: string;\n @Input() formLines: Array<FormLine>;\n // 针对formLines里面所有的name,\n @Input() formLinesData: any;\n @Input() operateButtons: Array<string> = [\"add\", \"delete\"]; // 操作列按钮:add / delete / copy\n @Input() scroll: { [key: string]: string } = { x: \"1px\" };\n @Output() changeEvent = new EventEmitter();\n /** 新增空行后抛出该行 FormGroup(手动添加、键盘跳行自动补行等) */\n @Output() addLineEvent = new EventEmitter<FormGroup>();\n /** 勾选变化时抛出当前勾选行 FormGroup 列表 */\n @Output() selectionChange = new EventEmitter<FormGroup[]>();\n @Input() @InputBoolean() showDeleteConfirm: boolean = false;\n paginationPageIndex: number = 1;\n paginationPageSize: number = 10;\n validateHdFormLines: FormGroup;\n newLine: any;\n inputValue: string;\n\n // 合计区域\n @Input() @InputBoolean() showTotal: boolean = false;\n @Input() totalOption: Array<TotalOption> = [];\n @Input() columnsNumber: number | string = 0;\n totalOptionList = [];\n\n showForm: boolean = false;\n filterStr: string;\n storeFormLinesData: any = []; // 缓存的总的表单数据\n filterStoreFormLinesData: any = []; // 筛选出来的数据列表\n filterIndexStore: Array<number> = []; // 筛选出来的数据在原始列表中的下标\n isFilterData: boolean = false; // 是否是已经筛选过的数据\n formValid: boolean = false; // 表单当前的状态\n /** 勾选的行 id(跨页、搜索重建后仍保留) */\n private selectedRowIds = new Set<string>();\n private searchSubject = new Subject<{ fn: any; event: any; line: any }>();\n private debounceTimeout: number = 0; // 默认防抖时间\n\n private searchSubscription: Subscription | undefined;\n private formInputDomListSub: Subscription | undefined;\n\n private openChangeSubject = new Subject<{ fn: any; event: any; line: any }>();\n private openChangeDebounceTimeout: number = 0;\n private openChangeSubscription: Subscription | undefined;\n\n // 当前页的dom二维数组\n collectDomList: Array<\n Array<\n | ElementRef\n | NzSelectComponent\n | NzInputNumberComponent\n | NzDatePickerComponent\n | NzRangePickerComponent\n | NzTimePickerComponent\n >\n > = [];\n // 当前聚焦的dom元素坐标\n activeDomX: number = null;\n activeDomY: number = null;\n activeDom:\n | ElementRef\n | NzSelectComponent\n | NzInputNumberComponent\n | NzDatePickerComponent\n | NzRangePickerComponent\n | NzTimePickerComponent = null;\n activeSelectedComponentOpen: boolean = false;\n @ContentChild(\"ViewDomRightTemplate\", { static: false })\n ViewDomRightTemplate: TemplateRef<any>;\n /** 工具栏左侧自定义按钮,用法同 hd-table 的 tableLeftButton */\n @ContentChild(\"formLinesLeftButton\", { static: false })\n formLinesLeftButton: TemplateRef<any>;\n /** 工具栏右侧自定义按钮,用法同 hd-table 的 tableRightButton */\n @ContentChild(\"formLinesRightButton\", { static: false })\n formLinesRightButton: TemplateRef<any>;\n /** 表格上方自定义区域(如勾选提示),用法同 hd-table 的 tableTotal */\n @ContentChild(\"tableTotal\", { static: false })\n tableTotal: TemplateRef<any>;\n\n // 列设置\n isDropdownVisible: boolean = false;\n showListNodes: boolean = false;\n nowListNodes: Array<TreeGrid> = [];\n hideListNodes: Array<TreeGrid> = [];\n cancelNowListNodes: Array<TreeGrid> = [];\n cancelHideListNodes: Array<TreeGrid> = [];\n formLinesCacheOption: FormLinesCacheOption = new FormLinesCacheOption();\n private localforage: any = null;\n private localtionTmp: string = \"\";\n private userSession: any;\n /** 是否已从 IndexedDB 读到过列设置缓存(含 cols 为空) */\n private colsCacheLoaded: boolean = false;\n\n constructor(\n private fb: FormBuilder,\n private cdr: ChangeDetectorRef,\n private commonSessionService: CommonSessionService,\n ) {\n this.localforage = localforage.createInstance({\n driver: localforage.INDEXEDDB,\n name: \"hd-fscm\",\n version: 1.0,\n storeName: \"hd-fscm-store\",\n });\n this.searchSubscription = this.searchSubject\n .pipe(debounceTime(this.debounceTimeout))\n .subscribe(({ fn, event, line }) => this.triggerEvent(fn, event, line));\n this.openChangeSubscription = this.openChangeSubject\n .pipe(debounceTime(this.openChangeDebounceTimeout))\n .subscribe(({ fn, event, line }) => {\n if (event) {\n this.triggerEvent(fn, event, line);\n }\n });\n }\n\n ngOnInit() {\n this.localtionTmp = location.pathname;\n if (this.localtionTmp) {\n this.localtionTmp = this.localtionTmp.replace(/\\//g, \"_\");\n }\n this.userSession = this.commonSessionService.getSession(\n \"__jy_authorization_session__\",\n );\n if (!this.userSession) {\n this.userSession = { userCode: \"dev\" };\n }\n // 缓存一下总的表单数据\n this.storeFormLinesData = this.formLinesData;\n this.initColSettings();\n this.init();\n }\n\n ngAfterViewInit() {\n this.collectDomData();\n this.formInputDomListSub = this.formInputDomList.changes.subscribe(() => {\n this.collectDomData();\n });\n }\n\n ngOnDestroy() {\n if (this.searchSubscription) {\n this.searchSubscription.unsubscribe();\n }\n if (this.openChangeSubscription) {\n this.openChangeSubscription.unsubscribe();\n }\n if (this.formInputDomListSub) {\n this.formInputDomListSub.unsubscribe();\n }\n }\n\n get formLinesLength() {\n return this.linesFormArray.controls.length;\n }\n\n get operateColWidth() {\n const count = (this.operateButtons || []).filter((btn) =>\n [\"add\", \"copy\", \"delete\"].includes(btn),\n ).length;\n return Math.max(count * 40, 80);\n }\n\n /** allowEmpty 且操作列仅有删除时:允许 0 行,初始化与删至空都不自动补空行 */\n get isTrulyEmptyAllowed(): boolean {\n const buttons = (this.operateButtons || []).filter((btn) =>\n [\"add\", \"copy\", \"delete\"].includes(btn),\n );\n return (\n this.allowEmpty &&\n buttons.length === 1 &&\n buttons[0] === \"delete\"\n );\n }\n\n /** 勾选列固定时,序号列的 left 偏移 */\n get lineNumberLeft() {\n return this.showCheckbox ? \"40px\" : \"0px\";\n }\n\n private generateRowId(): string {\n return `hd_row_${Date.now()}_${Math.random().toString(36).slice(2, 9)}`;\n }\n\n private getRowId(line: FormGroup): string {\n if (!line || !line.get(\"_hdRowId\")) {\n return null;\n }\n return line.get(\"_hdRowId\").value;\n }\n\n /** 当前页的行(用于表头全选,仅作用于当前页,跨页勾选仍保留) */\n private getCurrentPageLines(): FormGroup[] {\n const start = (this.paginationPageIndex - 1) * this.paginationPageSize;\n const end = start + this.paginationPageSize;\n return (this.linesFormArray.controls as FormGroup[]).slice(start, end);\n }\n\n isLineChecked(line: FormGroup): boolean {\n const id = this.getRowId(line);\n return !!id && this.selectedRowIds.has(id);\n }\n\n isAllChecked(): boolean {\n const pageLines = this.getCurrentPageLines();\n return (\n pageLines.length > 0 &&\n pageLines.every((line) => this.isLineChecked(line))\n );\n }\n\n isIndeterminate(): boolean {\n const pageLines = this.getCurrentPageLines();\n const checkedCount = pageLines.filter((line) =>\n this.isLineChecked(line),\n ).length;\n return checkedCount > 0 && checkedCount < pageLines.length;\n }\n\n onAllChecked(checked: boolean): void {\n this.getCurrentPageLines().forEach((line) => {\n const id = this.getRowId(line);\n if (!id) {\n return;\n }\n if (checked) {\n this.selectedRowIds.add(id);\n } else {\n this.selectedRowIds.delete(id);\n }\n });\n this.emitSelectionChange();\n }\n\n onLineCheckedChange(line: FormGroup, checked: boolean): void {\n const id = this.getRowId(line);\n if (!id) {\n return;\n }\n if (checked) {\n this.selectedRowIds.add(id);\n } else {\n this.selectedRowIds.delete(id);\n }\n this.emitSelectionChange();\n }\n\n private emitSelectionChange(): void {\n this.selectionChange.emit(this.getSelectedLines());\n this.cdr.markForCheck();\n }\n\n private removeLineFromSelection(line: FormGroup): void {\n const id = this.getRowId(line);\n if (id && this.selectedRowIds.has(id)) {\n this.selectedRowIds.delete(id);\n this.emitSelectionChange();\n }\n }\n\n private applyValuesToLine(\n line: FormGroup,\n values: { [field: string]: any },\n emitEvent: boolean,\n ): void {\n Object.keys(values).forEach((key) => {\n let control = line.get(key);\n if (!control) {\n line.addControl(key, this.fb.control(values[key]));\n control = line.get(key);\n }\n // 静默赋值,避免 valueChanges / DOM maxlength 回写把校验态打乱\n control.setValue(values[key], { emitEvent: false });\n control.markAsPristine({ onlySelf: true });\n control.markAsUntouched({ onlySelf: true });\n control.updateValueAndValidity({ emitEvent: false });\n if (emitEvent) {\n const formItem = this.formLines.find((item) => item.name === key);\n if (formItem && formItem.onChangeEvent) {\n this.triggerEvent(formItem.onChangeEvent, values[key], line);\n }\n }\n });\n this.cdr.detectChanges();\n }\n\n /**\n * 仅在用户交互后、且当前值确实为空的 required 错误时展示红框,\n * 避免批量赋值时 ng-zorro 残留「不能为空」提示\n */\n getControlValidateStatus(line: FormGroup, formItem: FormLine): string {\n const control = line.get(formItem.name);\n if (!control || control.disabled) {\n return \"\";\n }\n const empty =\n control.value === null ||\n control.value === undefined ||\n control.value === \"\";\n if (\n (control.dirty || control.touched) &&\n empty &&\n control.hasError(\"required\")\n ) {\n return \"error\";\n }\n return \"\";\n }\n\n /** 用户输入时按 maxLength 截断(不使用原生 maxlength,避免干扰程序化赋值) */\n limitInputLength(event: Event, line: FormGroup, formItem: FormLine): void {\n if (!formItem || !formItem.maxLength) {\n return;\n }\n const input = event.target as HTMLInputElement;\n if (input && input.value && input.value.length > formItem.maxLength) {\n const next = input.value.slice(0, formItem.maxLength);\n input.value = next;\n const control = line.get(formItem.name);\n if (control) {\n control.setValue(next);\n }\n }\n }\n\n /** 获取当前勾选且已挂载的行 FormGroup(当前筛选结果内) */\n public getSelectedLines(): FormGroup[] {\n return (this.linesFormArray.controls as FormGroup[]).filter((line) =>\n this.isLineChecked(line),\n );\n }\n\n /**\n * 获取全部勾选行数据(含跨页、搜索后未展示但仍勾选的行)\n */\n public getSelectedLinesData(): any[] {\n const result = [];\n const mountedById = new Map<string, any>();\n (this.linesFormArray.controls as FormGroup[]).forEach((line) => {\n const id = this.getRowId(line);\n if (id && this.selectedRowIds.has(id)) {\n mountedById.set(id, line.getRawValue());\n }\n });\n\n (this.storeFormLinesData || []).forEach((data) => {\n const id = data && data._hdRowId;\n if (id && this.selectedRowIds.has(id)) {\n result.push(mountedById.has(id) ? mountedById.get(id) : { ...data });\n }\n });\n\n // 兜底:刚新增、尚未进 store 的勾选行\n this.selectedRowIds.forEach((id) => {\n if (\n !result.some((item) => item && item._hdRowId === id) &&\n mountedById.has(id)\n ) {\n result.push(mountedById.get(id));\n }\n });\n return result;\n }\n\n /**\n * 批量填充勾选行字段(支持跨页、搜索后未展示但仍勾选的行)\n * @param values 要写入的字段,如 { remark: '批量备注', price: 10 }\n * @param emitEvent 是否触发 valueChanges / onChangeEvent,默认 true\n * @returns 实际填充的行数\n */\n public batchFillSelected(\n values: { [field: string]: any },\n emitEvent: boolean = true,\n ): number {\n if (!values || this.selectedRowIds.size === 0) {\n return 0;\n }\n const mountedById = new Map<string, FormGroup>();\n (this.linesFormArray.controls as FormGroup[]).forEach((line) => {\n const id = this.getRowId(line);\n if (id) {\n mountedById.set(id, line);\n }\n });\n\n let count = 0;\n this.selectedRowIds.forEach((id) => {\n const line = mountedById.get(id);\n if (line) {\n this.applyValuesToLine(line, values, emitEvent);\n count++;\n return;\n }\n // 当前筛选/页面未挂载:直接改总数据,退出搜索后可见\n const storeItem = (this.storeFormLinesData || []).find(\n (data) => data && data._hdRowId === id,\n );\n if (storeItem) {\n Object.keys(values).forEach((key) => {\n storeItem[key] = values[key];\n });\n count++;\n }\n });\n return count;\n }\n\n /** 清空勾选 */\n public clearSelection(): void {\n if (this.selectedRowIds.size === 0) {\n return;\n }\n this.selectedRowIds.clear();\n this.emitSelectionChange();\n }\n\n /** 当前勾选数量(含跨页、搜索保留) */\n public getSelectedCount(): number {\n return this.selectedRowIds.size;\n }\n\n /** 是否展示顶部工具栏 */\n get showToolbar(): boolean {\n return (\n !!this.showSearch ||\n !!this.showCheckbox ||\n !!this.formLinesLeftButton ||\n !!this.formLinesRightButton ||\n this.showColSettingsButton\n );\n }\n\n /** 是否展示列设置齿轮(有可配置 ViewDom 时) */\n get showColSettingsButton(): boolean {\n return (\n !!this.showColSettings && this.getConfigurableFormLines().length > 0\n );\n }\n\n /** 列是否渲染:hide 永不展示;ViewDom 受 isShow 控制 */\n isColumnVisible(item: FormLine): boolean {\n if (!item || item.hide) {\n return false;\n }\n if (item.type === FormLineType.ViewDom) {\n return item.isShow !== false;\n }\n return true;\n }\n\n /** 可进入列设置的字段:非 hide 的 ViewDom */\n getConfigurableFormLines(): FormLine[] {\n if (!this.formLines || !this.formLines.length) {\n return [];\n }\n return this.formLines.filter(\n (item) => item.type === FormLineType.ViewDom && !item.hide,\n );\n }\n\n private getCacheKey(): string {\n const userCode =\n (this.userSession && this.userSession.userCode) || \"dev\";\n return (\n \"hd-form-lines_\" +\n userCode +\n \"_\" +\n this.localtionTmp +\n \"_\" +\n this.uuid\n );\n }\n\n private initColSettings(): void {\n this.colsCacheLoaded = false;\n if (!this.showColSettings || !this.formLines || !this.formLines.length) {\n this.setCols();\n return;\n }\n if (!this.uuid) {\n this.setCols();\n return;\n }\n this.localforage\n .ready()\n .then(() => {\n this.localforage\n .getItem(this.getCacheKey())\n .then((value: FormLinesCacheOption) => {\n if (value && Array.isArray(value.cols)) {\n this.formLinesCacheOption = value;\n this.colsCacheLoaded = true;\n } else {\n this.formLinesCacheOption = new FormLinesCacheOption();\n this.colsCacheLoaded = false;\n }\n this.setCols();\n })\n .catch(() => {\n this.formLinesCacheOption = new FormLinesCacheOption();\n this.colsCacheLoaded = false;\n this.setCols();\n });\n })\n .catch((e) => {\n console.log(\"localforage加载异常\", e);\n this.formLinesCacheOption = new FormLinesCacheOption();\n this.colsCacheLoaded = false;\n this.setCols();\n });\n }\n\n private hasColsCache(): boolean {\n return this.colsCacheLoaded && Array.isArray(this.formLinesCacheOption.cols);\n }\n\n private saveFormLinesCacheOption(): void {\n if (!this.uuid) {\n return;\n }\n this.localforage.setItem(this.getCacheKey(), this.formLinesCacheOption);\n }\n\n /** 按 formLines 原始顺序排列节点(禁止调序时保持源顺序) */\n private sortNodesByFormLinesOrder(nodes: TreeGrid[]): TreeGrid[] {\n const order = this.getConfigurableFormLines().map((f) => f.name);\n return nodes.slice().sort((a, b) => {\n return order.indexOf(a.key) - order.indexOf(b.key);\n });\n }\n\n setCols(): void {\n this.showListNodes = false;\n this.nowListNodes = [];\n this.hideListNodes = [];\n const configurable = this.getConfigurableFormLines();\n const hasCache = this.hasColsCache();\n configurable.forEach((element) => {\n if (hasCache) {\n element.isShow = this.formLinesCacheOption.cols.includes(element.name);\n } else if (element.isShow === undefined || element.isShow === null) {\n element.isShow = true;\n }\n const node: TreeGrid = {\n title: element.label,\n key: element.name,\n checked: element.isShow !== false,\n disabled: false,\n };\n if (element.isShow !== false) {\n this.nowListNodes.push(node);\n } else {\n this.hideListNodes.push(node);\n }\n });\n this.nowListNodes = this.sortNodesByFormLinesOrder(this.nowListNodes);\n this.hideListNodes = this.sortNodesByFormLinesOrder(this.hideListNodes);\n setTimeout(() => {\n this.showListNodes = true;\n this.cdr.markForCheck();\n }, 0);\n }\n\n cancelDropdown(): void {\n this.isDropdownVisible = false;\n this.hideListNodes = JSON.parse(JSON.stringify(this.cancelHideListNodes));\n this.nowListNodes = JSON.parse(JSON.stringify(this.cancelNowListNodes));\n this.cdr.markForCheck();\n }\n\n confirmDropdown(): void {\n this.cancelHideListNodes = JSON.parse(JSON.stringify(this.hideListNodes));\n this.cancelNowListNodes = JSON.parse(JSON.stringify(this.nowListNodes));\n this.isDropdownVisible = true;\n this.cdr.markForCheck();\n }\n\n submitGrids(): void {\n const visibleNames = this.nowListNodes.map((item) => item.key);\n this.getConfigurableFormLines().forEach((line) => {\n line.isShow = visibleNames.includes(line.name);\n });\n this.formLinesCacheOption.cols = visibleNames;\n this.colsCacheLoaded = true;\n this.saveFormLinesCacheOption();\n this.isDropdownVisible = false;\n this.cdr.markForCheck();\n }\n\n /** 勾选/取消:仅在显示/隐藏两组间移动,不改变 formLines 顺序 */\n checkAction(event: NzFormatEmitEvent): void {\n if (event.node.origin.checked) {\n const node = this.hideListNodes.find((item) => {\n return item.key === event.node.origin.key;\n });\n if (!node) {\n return;\n }\n node.checked = true;\n this.hideListNodes = this.hideListNodes.filter((item) => {\n return item.key !== event.node.origin.key;\n });\n this.nowListNodes = this.sortNodesByFormLinesOrder(\n this.nowListNodes.concat([node]),\n );\n } else {\n const temporaryNodeList = this.hideListNodes.slice(0);\n this.nowListNodes.forEach((item) => {\n if (item.key === event.node.origin.key) {\n const innerItem = JSON.parse(JSON.stringify(item));\n innerItem.checked = false;\n temporaryNodeList.push(innerItem);\n }\n });\n this.hideListNodes = this.sortNodesByFormLinesOrder(temporaryNodeList);\n this.nowListNodes = this.nowListNodes.filter((item) => {\n return item.key !== event.node.origin.key;\n });\n }\n this.cdr.markForCheck();\n }\n\n setActiveSelectedComponentOpen(value: boolean) {\n this.activeSelectedComponentOpen = value;\n if (value === true) {\n setTimeout(() => {\n const domList = document.querySelectorAll(\n \".ant-select-dropdown.hd-select-table\",\n );\n if (domList.length > 0) {\n const dom = domList[0];\n dom\n .querySelectorAll(\".hd-option-header\")\n .forEach((header) => header.remove());\n const oldIndex = this.getOldDomIndex(this.activeDomY, this.formLines);\n dom.insertBefore(\n this.createDOMStructure(\n this.formLines[oldIndex],\n this.linesFormArray.controls.slice(\n (this.paginationPageIndex - 1) * this.paginationPageSize,\n (this.paginationPageIndex - 1) * this.paginationPageSize +\n this.paginationPageSize,\n )[this.activeDomX],\n ),\n dom.firstChild,\n );\n }\n }, 0);\n }\n }\n\n getSelectTableColumnStyle(column: SelectOptionTableColumn): {\n [key: string]: string;\n } {\n if (!column || !column.width) {\n return { width: \"unset\" };\n }\n return { width: `${column.width}px` };\n }\n\n createDOMStructure(formItem, line) {\n // 创建外部 div\n const hdOptionHeader = document.createElement(\"div\");\n hdOptionHeader.className = \"hd-option-header\";\n hdOptionHeader.style.paddingLeft = `${SELECT_TABLE_OPTION_HORIZONTAL_PADDING}px`;\n hdOptionHeader.style.paddingRight = `${SELECT_TABLE_OPTION_HORIZONTAL_PADDING}px`;\n\n // 检查条件,确定是否要创建子元素\n // const selectListLength = (formItem && formItem.selectOption && formItem.selectOption.selectList && formItem.selectOption.selectList.length) || 0;\n // if\n // const lineValueLength = (line.get(formItem.selectOption.selectListName) && line.get(formItem.selectOption.selectListName).value && line.get(formItem.selectOption.selectListName).value.length) || 0;\n\n // if (selectListLength > 0 || lineValueLength > 0) {\n // 遍历 tableColumns 创建内部列 div\n formItem.selectOption.tableColumns.forEach((selectOptionTableColumn) => {\n const columnDiv = document.createElement(\"div\");\n columnDiv.className = \"hd-option-header-column\";\n\n const widthStyle = this.getSelectTableColumnStyle(\n selectOptionTableColumn,\n );\n columnDiv.style.width = widthStyle.width;\n\n // 添加列标签内容\n if (selectOptionTableColumn.label) {\n const labelText = document.createTextNode(\n selectOptionTableColumn.label,\n );\n columnDiv.appendChild(labelText);\n }\n\n // 添加列 div 到外部 div\n hdOptionHeader.appendChild(columnDiv);\n });\n // }\n\n return hdOptionHeader;\n }\n\n collectDomData() {\n this.collectDomList = [];\n const pageDomList = this.formInputDomList.toArray();\n // Step 1: 获取当前页的数据量\n const startIndex = (this.paginationPageIndex - 1) * this.paginationPageSize;\n const endIndex = this.paginationPageIndex * this.paginationPageSize;\n const adjustedEndIndex =\n endIndex > this.formLinesLength ? this.formLinesLength : endIndex;\n const pageLinesLength = adjustedEndIndex - startIndex;\n\n const interval = pageDomList.length / pageLinesLength;\n // Step 2: 拆分formInputDomList\n for (let i = 0; i < pageLinesLength; i++) {\n this.collectDomList.push(pageDomList.splice(0, interval));\n }\n this.disableInputNumberKeyboardStep();\n }\n\n /**\n * ng-zorro 8 在 input 的 onKeyDown 里用上下键调 up()/down() 改 step。\n * 只覆盖 onKeyDown(不动 up/down),键盘方向键交给表单跳转,+/- 按钮仍可用。\n */\n private disableInputNumberKeyboardStep(): void {\n if (!this.enableKeyboardOperate) {\n return;\n }\n for (let i = 0; i < this.collectDomList.length; i++) {\n for (let j = 0; j < this.collectDomList[i].length; j++) {\n const dom = this.collectDomList[i][j];\n if (dom instanceof NzInputNumberComponent) {\n dom.onKeyDown = (e: KeyboardEvent) => {\n if (e.keyCode === 38 || e.keyCode === 40) {\n return;\n }\n if (e.keyCode === 13) {\n dom.setValidateValue();\n }\n };\n }\n }\n }\n }\n\n // 聚焦下一个dom\n jumpToNextInput(x: number, y: number) {\n if (\n x === null ||\n y === null ||\n !this.collectDomList ||\n this.collectDomList.length === 0\n ) {\n return;\n }\n // 如果是最后一个可输入元素,新增行\n if (\n !(this.activeDom instanceof NzSelectComponent) &&\n x === this.collectDomList.length - 1 &&\n y === this.collectDomList[0].length - 1\n ) {\n this.addNewLineAndFocus();\n } else {\n if (y === this.collectDomList[0].length - 1) {\n console.log(\"执行过程1\");\n // 如果是最后一列,则跳转到下一行第一个输入框\n this.focusDom(x + 1, 0, \"right\");\n } else {\n console.log(\"执行过程2\");\n // 如果不是最后一列,则跳转到当前行下一个输入框\n this.focusDom(x, y + 1, \"right\");\n }\n }\n }\n\n /**\n * 增加新行并且聚焦到第一个元素,\n * 这里要注意,如果存在翻页情况,需要处理\n */\n addNewLineAndFocus() {\n // 当前行为当前页最后一行的时候,判断下一页是否有数据\n // 1、如果有:翻页+聚焦第一行第一个元素\n // 2、如果没有:新增行+翻页+聚焦第一行第一个元素\n if (this.activeDomX === this.paginationPageSize - 1) {\n // 判断下一页是否有数据\n if (\n this.paginationPageIndex <\n Math.ceil(this.formLinesLength / this.paginationPageSize)\n ) {\n // 翻页+聚焦第一行第一个元素\n this.paginationPageIndex++;\n setTimeout(() => {\n this.collectDomData();\n console.log(\"执行过程3\");\n this.focusDom(0, 0, \"right\");\n }, 0);\n } else {\n // 新增行+翻页+聚焦第一行第一个元素\n this.addFormLine();\n this.paginationPageIndex++;\n setTimeout(() => {\n this.collectDomData();\n console.log(\"执行过程4\");\n this.focusDom(0, 0);\n }, 0);\n }\n } else {\n this.addFormLine();\n }\n }\n\n // 聚焦到上一个dom\n jumpToPrevInput(x: number, y: number) {\n if (\n x === null ||\n y === null ||\n !this.collectDomList ||\n this.collectDomList.length === 0\n ) {\n return;\n }\n if (x === 0 && y === 0) {\n // 如果是第一个可输入元素, 判断是否有上一页, 如果有,则翻页+聚焦到上一页最后一个元素\n if (this.paginationPageIndex > 1) {\n // 翻页+聚焦到上一页最后一个元素\n this.paginationPageIndex--;\n setTimeout(() => {\n this.collectDomData();\n console.log(\"执行过程5\");\n this.focusDom(\n this.collectDomList.length - 1,\n this.collectDomList[0].length - 1,\n );\n }, 0);\n }\n return;\n } else {\n if (y === 0) {\n console.log(\"执行过程6\");\n // 如果是第一列,则跳转到上一行最后一个输入框\n this.focusDom(x - 1, this.collectDomList[0].length - 1, \"left\");\n } else {\n console.log(\"执行过程7\");\n // 如果不是第一列,则跳转到当前行上一个输入框\n this.focusDom(x, y - 1, \"left\");\n }\n }\n }\n\n /**\n * 聚焦到某个dom\n * @param x 坐标x\n * @param y 坐标y\n * @param jumpDirection 跳转方向\n */\n focusDom(x: number, y: number, jumpDirection: string = \"right\") {\n if (\n x === null ||\n y === null ||\n !this.collectDomList ||\n this.collectDomList.length === 0\n ) {\n return;\n }\n // 先清除一下当前的焦点\n this.cleanFocusDom(this.activeDomX, this.activeDomY);\n if (this.collectDomList[x] && this.collectDomList[x][y]) {\n const dom = this.collectDomList[x][y];\n // 需要判断下一个focus的dom是否是禁用状态,如果是禁用状态需要跳过\n if (dom instanceof NzSelectComponent) {\n if (dom.nzDisabled) {\n if (jumpDirection === \"right\") {\n this.jumpToNextInput(x, y);\n } else if (jumpDirection === \"left\") {\n this.jumpToPrevInput(x, y);\n }\n return;\n }\n dom.nzSelectTopControlComponent.inputElement.nativeElement.scrollIntoView(\n { behavior: \"smooth\", block: \"center\", inline: \"center\" },\n );\n // 这里多选框需要额外处理下,因为向下的时候会触发内部Input的聚焦,把下一个dom的focus放到宏任务中,延迟处理。\n if (dom.nzSelectService.mode === \"multiple\") {\n setTimeout(() => {\n dom.focus();\n }, 0);\n } else {\n dom.focus();\n }\n } else if (dom instanceof NzInputNumberComponent) {\n if (dom.nzDisabled) {\n if (jumpDirection === \"right\") {\n this.jumpToNextInput(x, y);\n } else if (jumpDirection === \"left\") {\n this.jumpToPrevInput(x, y);\n }\n return;\n }\n const inputDom: any = document.getElementById(dom.nzId);\n inputDom.focus();\n inputDom.scrollIntoView({\n behavior: \"smooth\",\n block: \"center\",\n inline: \"center\",\n });\n setTimeout(() => {\n inputDom.select();\n }, 0);\n } else if (dom instanceof ElementRef) {\n if (dom.nativeElement.disabled) {\n if (jumpDirection === \"right\") {\n this.jumpToNextInput(x, y);\n } else if (jumpDirection === \"left\") {\n this.jumpToPrevInput(x, y);\n }\n return;\n }\n dom.nativeElement.focus();\n dom.nativeElement.scrollIntoView({\n behavior: \"smooth\",\n block: \"center\",\n inline: \"center\",\n });\n setTimeout(() => {\n dom.nativeElement.select();\n }, 0);\n } else if (\n dom instanceof NzDatePickerComponent ||\n dom instanceof NzRangePickerComponent ||\n dom instanceof NzTimePickerComponent\n ) {\n // TODO:在ngzorro8.5.x版本,时间相关的选择器没有暴露出open方法,暂时先不处理。(10.x及以上版本提供了open方法)\n if (jumpDirection === \"right\") {\n this.jumpToNextInput(x, y);\n } else if (jumpDirection === \"left\") {\n this.jumpToPrevInput(x, y);\n }\n return;\n }\n this.setActiveDom(x, y);\n } else {\n // 没有dom的场景下,需要判断是左还是右,\n }\n }\n\n cleanFocusDom(x: number, y: number) {\n if (\n x === null ||\n y === null ||\n !this.collectDomList ||\n this.collectDomList.length === 0\n ) {\n return;\n }\n if (this.collectDomList[x] && this.collectDomList[x][y]) {\n const dom = this.collectDomList[x][y];\n if (dom instanceof NzSelectComponent) {\n dom.blur();\n dom.nzOpen = false;\n } else if (dom instanceof NzInputNumberComponent) {\n dom.blur();\n } else if (dom instanceof ElementRef) {\n dom.nativeElement.blur();\n } else {\n }\n }\n }\n\n setActiveDom(x: number, y: number) {\n this.activeDomX = x;\n this.activeDomY = y;\n this.activeDom = this.collectDomList[this.activeDomX][this.activeDomY];\n if (this.activeDom instanceof NzSelectComponent) {\n this.setActiveSelectedComponentOpen(this.activeDom.open);\n }\n }\n\n /**\n * 根据行号和列号名称获取当前聚焦的dom位置\n * @param rowNumber 行号\n * @param colNumber 列号\n */\n setActiveDomInFormLines(rowNumber: number, colNumber: number) {\n this.activeDomX = rowNumber;\n this.activeDomY = this.getDomIndex(colNumber, this.formLines);\n this.setActiveDom(this.activeDomX, this.activeDomY);\n }\n\n /**\n * 键盘点击事件\n * @param event 键盘事件\n * @returns\n */\n onKeyDown(event: KeyboardEvent) {\n if (!this.enableKeyboardOperate) {\n return;\n }\n if (this.activeDomX === null || this.activeDomY === null) {\n return;\n }\n switch (event.key) {\n case \"ArrowUp\":\n if (\n this.activeDom instanceof NzSelectComponent &&\n this.activeSelectedComponentOpen\n ) {\n return;\n }\n if (this.activeDomX !== 0) {\n this.focusDom(this.activeDomX - 1, this.activeDomY);\n }\n break;\n case \"ArrowDown\":\n if (\n this.activeDom instanceof NzSelectComponent &&\n this.activeSelectedComponentOpen\n ) {\n return;\n }\n // 判断是否在最后一行,加行\n if (this.activeDomX === this.collectDomList.length - 1) {\n this.cleanFocusDom(this.activeDomX, this.activeDomY);\n this.addNewLineAndFocus();\n break;\n } else {\n this.focusDom(this.activeDomX + 1, this.activeDomY);\n }\n break;\n case \"ArrowLeft\":\n this.jumpToPrevInput(this.activeDomX, this.activeDomY);\n break;\n case \"ArrowRight\":\n this.jumpToNextInput(this.activeDomX, this.activeDomY);\n break;\n case \"Enter\":\n if (this.activeDom instanceof NzSelectComponent) {\n this.setActiveSelectedComponentOpen(this.activeDom.open);\n if (this.activeSelectedComponentOpen === false) {\n this.focusDom(this.activeDomX, this.activeDomY);\n }\n } else if (this.activeDomX === this.collectDomList.length - 1) {\n this.addNewLineAndFocus();\n }\n break;\n case \"Escape\":\n if (this.activeDom instanceof NzSelectComponent) {\n const nowActiveDom = this.activeDom as NzSelectComponent;\n setTimeout(() => {\n this.setActiveSelectedComponentOpen(nowActiveDom.open);\n if (this.activeSelectedComponentOpen === false) {\n if (nowActiveDom.nzSelectService.mode === \"multiple\") {\n setTimeout(() => {\n this.focusDom(this.activeDomX, this.activeDomY);\n }, 0);\n } else {\n this.focusDom(this.activeDomX, this.activeDomY);\n }\n }\n }, 0);\n }\n break;\n default:\n // 如果当前聚焦的是选择框,且键入0-9a-zA-Z,则弹出\n if (\n this.activeDom instanceof NzSelectComponent &&\n this.activeSelectedComponentOpen === false &&\n /^[0-9a-zA-Z]$/.test(event.key)\n ) {\n const dom = this.activeDom;\n dom.nzOpen = true;\n this.setActiveSelectedComponentOpen(true);\n // // TODO:这里暂时注释,不能直接带入键入值,这样会导致输入中文的时候带入英文字符,不符合预期\n // dom.nzSelectTopControlComponent.inputValue = event.key;\n // // 获取 input 元素\n // const inputElement = dom.nzSelectTopControlComponent.inputElement.nativeElement;\n // setTimeout(() => {\n // // 触发输入事件,以确保 Angular 检测到值的变化\n // const eventInput = new Event('input', { bubbles: true });\n // inputElement.dispatchEvent(eventInput);\n // }, 0);\n }\n break;\n }\n }\n\n /**\n * 根据在初始dom下标和数据集 获取在collectDomList中的下标\n * @param index 初始下标\n * @param list 老数据集\n * @returns\n */\n private getDomIndex(index: number, list: Array<FormLine>): number {\n const typeList = [\n \"Input\",\n \"Select\",\n \"Date\",\n \"DateRange\",\n \"TextArea\",\n \"InputNumber\",\n \"MultipleSelect\",\n ];\n let filterList = [];\n for (let i = 0; i < list.length; i++) {\n if (i === index) {\n return filterList.length;\n }\n // 与模板一致:hide / isShow=false 的列不渲染 #formInputDom,不计入 collectDomList 的列下标\n if (\n typeList.includes(list[i].type) &&\n !list[i].hide &&\n list[i].isShow !== false\n ) {\n filterList.push(list[i]);\n }\n }\n return null;\n }\n\n /**\n * 根据在collectDomList中的下标和数据集 获取初始dom下标\n * @param index 新下标\n * @param list 老数据集\n * @returns\n */\n private getOldDomIndex(index: number, list: Array<FormLine>): number {\n console.log(\"index\", index);\n console.log(\"list\", list);\n const typeList = [\n \"Input\",\n \"Select\",\n \"Date\",\n \"DateRange\",\n \"TextArea\",\n \"InputNumber\",\n \"MultipleSelect\",\n ];\n let filterList = [];\n for (let i = 0; i < list.length; i++) {\n if (\n typeList.includes(list[i].type) &&\n !list[i].hide &&\n list[i].isShow !== false\n ) {\n filterList.push(list[i]);\n if (filterList.length === index + 1) {\n return i;\n }\n }\n }\n return null;\n }\n\n get linesFormArray(): any {\n return this.validateHdFormLines.get(\"lines\") as FormArray;\n }\n\n get LodashRound() {\n return round;\n }\n\n // 暴露的方法,用于获取所有数据的valid状态\n public getValid() {\n return this.formValid;\n }\n\n onSearchEvent(\n fn: any,\n event: any,\n line: any,\n onSearchEventDebounceTime: any,\n ) {\n if (!fn) {\n return;\n }\n const debounceMs =\n onSearchEventDebounceTime != null ? onSearchEventDebounceTime : 0;\n // 未配置或为 0:同步触发,不走 debounceTime(避免异步)\n if (!debounceMs) {\n this.triggerEvent(fn, event, line);\n } else {\n this.debounceTimeout = debounceMs;\n if (this.searchSubscription) {\n this.searchSubscription.unsubscribe();\n }\n this.searchSubscription = this.searchSubject\n .pipe(debounceTime(this.debounceTimeout))\n .subscribe(({ fn, event, line }) => this.triggerEvent(fn, event, line));\n this.searchSubject.next({ fn, event, line });\n }\n setTimeout(() => {\n this.setActiveSelectedComponentOpen(true);\n }, 0);\n }\n\n onOpenChangeEvent(\n fn: any,\n open: boolean,\n line: any,\n onOpenChangeEventDebounceTime: any,\n formItem?: any,\n ) {\n if (!fn) {\n return;\n }\n // 展开时先清空旧 options,避免条件变化后请求返回前仍展示上一批下拉数据\n if (open) {\n this.clearSelectOptionsOnOpen(formItem, line);\n }\n const debounceMs =\n onOpenChangeEventDebounceTime != null\n ? onOpenChangeEventDebounceTime\n : 0;\n // 未配置或为 0:同步触发,不走 debounceTime(避免异步)\n if (!debounceMs) {\n if (open) {\n this.triggerEvent(fn, open, line);\n }\n return;\n }\n this.openChangeDebounceTimeout = debounceMs;\n if (this.openChangeSubscription) {\n this.openChangeSubscription.unsubscribe();\n }\n this.openChangeSubscription = this.openChangeSubject\n .pipe(debounceTime(this.openChangeDebounceTimeout))\n .subscribe(({ fn, event, line }) => {\n if (event) {\n this.triggerEvent(fn, event, line);\n }\n });\n this.openChangeSubject.next({ fn, event: open, line });\n }\n\n /** 有 onOpenChangeEvent 时展开下拉先清空选项,由业务回调再写入新数据 */\n private clearSelectOptionsOnOpen(formItem: any, line: any): void {\n if (!formItem || !formItem.selectOption) {\n return;\n }\n const opt = formItem.selectOption;\n if (opt.selectList != null) {\n opt.selectList = [];\n }\n if (\n opt.selectListName &&\n line &&\n line.get &&\n line.get(opt.selectListName)\n ) {\n line.get(opt.selectListName).setValue([], { emitEvent: false });\n }\n }\n\n /**\n *\n * @param fn 父组件函数\n * @param event 事件值\n * @param line 触发的行\n */\n triggerEvent(fn: any, event: any, line: any) {\n if (fn) {\n fn(event, line);\n }\n }\n\n innerGetValid() {\n let tmpValidateHdFormLines = this.fb.group({\n lines: this.fb.array([]),\n });\n this.storeFormLinesData.forEach((formLinesDataItem) => {\n let formGroupObj: any = {};\n this.formLines.forEach((item) => {\n // 新增行 初始数据都为null\n formGroupObj[item.name] = this.fb.control(\n {\n value: this.judgeValueIsNotEmpty(formLinesDataItem[item.name])\n ? formLinesDataItem[item.name]\n : item.value || null,\n disabled: item.disabled,\n },\n item.require ? [Validators.required] : [],\n );\n if (item.selectOption && item.selectOption.label) {\n formGroupObj[item.selectOption.label] = this.fb.control(\n formLinesDataItem[item.selectOption.label] || null,\n [],\n );\n }\n });\n formGroupObj.lineIndex = this.fb.control(\n (tmpValidateHdFormLines.get(\"lines\") as FormArray).controls.length + 1,\n [],\n );\n let formGroupTmp = this.fb.group(formGroupObj);\n this.formLines.forEach((item) => {\n if (item.onChangeEvent) {\n const debounceMs =\n item.onChangeEventDebounceTime != null\n ? item.onChangeEventDebounceTime\n : 0;\n const control = formGroupTmp.get(item.name);\n // 未配置或为 0:同步订阅,不走 debounceTime\n if (debounceMs > 0) {\n control.valueChanges\n .pipe(debounceTime(debounceMs))\n .subscribe((value) => {\n this.triggerEvent(item.onChangeEvent, value, formGroupTmp);\n });\n } else {\n control.valueChanges.subscribe((value) => {\n this.triggerEvent(item.onChangeEvent, value, formGroupTmp);\n });\n }\n }\n });\n (tmpValidateHdFormLines.get(\"lines\") as FormArray).insert(\n (tmpValidateHdFormLines.get(\"lines\") as FormArray).controls.length,\n formGroupTmp,\n );\n });\n return tmpValidateHdFormLines.valid;\n }\n\n // 暴露的方法,用于获取所有数据\n public getLines() {\n let allLines = [];\n this.storeFormLinesData.forEach((formLinesDataItem) => {\n let formGroupObj: any = {};\n this.formLines.forEach((item) => {\n // 新增行 初始数据都为null\n formGroupObj[item.name] = formLinesDataItem[item.name];\n });\n formGroupObj.lineIndex = formLinesDataItem.lineIndex;\n allLines.push(formGroupObj);\n });\n return allLines;\n }\n\n // 全局性的搜索(涵盖页面上所有的可视文字)\n searchLines() {\n if (this.storeFormLinesData.length < 1) {\n return;\n }\n this.tableLoading = true;\n // 如果没有输入搜索字符串,则显示缓存内的所有数据\n if (!this.filterStr) {\n this.isFilterData = false;\n this.setStoreData();\n return;\n }\n const filterValue = this.filterStr.trim().toLowerCase();\n this.isFilterData = true;\n this.filterIndexStore = [];\n\n // 根据搜索字符串过滤数据\n const filteredData = this.storeFormLinesData.filter(\n (data: any, index: number) => {\n for (const item of this.formLines) {\n if (\n (item.hide && item.canSearch) ||\n (!item.hide && item.name !== \"uuid\")\n ) {\n console.log(\"item\", item.name);\n const value = data[item.name]\n ? data[item.name].toString().toLowerCase()\n : \"\";\n if (value.includes(filterValue)) {\n this.filterIndexStore.push(index);\n return true;\n }\n }\n }\n return false;\n },\n );\n // 缓存一下筛选后的表单数据\n this.filterStoreFormLinesData = filteredData;\n // 处理筛选好的数据 然后重新渲染\n this.formLinesData = filteredData;\n this.init(true);\n }\n\n setStoreData() {\n this.formLinesData = this.storeFormLinesData;\n this.init(true);\n }\n\n getStyle(line: FormGroup, formItem: any, width: string) {\n let styleObj = {\n \"min-width\": width,\n };\n if (formItem.style) {\n styleObj = { ...styleObj, ...formItem.style };\n }\n if (\n formItem.colorOption &&\n formItem.colorOption.name &&\n line.get(formItem.colorOption.name).value\n ) {\n styleObj = {\n ...styleObj,\n ...{ color: line.get(formItem.colorOption.name).value },\n };\n }\n return styleObj;\n }\n\n ngOnChanges(changes: SimpleChanges) {\n if (\n changes[\"formLinesData\"] &&\n JSON.stringify(changes[\"formLinesData\"].currentValue) !==\n JSON.stringify(changes[\"formLinesData\"].previousValue)\n ) {\n if (this.storeFormLinesData && this.storeFormLinesData.length === 0) {\n this.storeFormLinesData = this.formLinesData;\n }\n this.init();\n }\n if (\n changes[\"formLines\"] &&\n changes[\"formLines\"].previousValue !== undefined &&\n JSON.stringify(changes[\"formLines\"].currentValue) !==\n JSON.stringify(changes[\"formLines\"].previousValue)\n ) {\n this.initColSettings();\n }\n if (\n changes[\"totalOption\"] &&\n JSON.stringify(changes[\"totalOption\"].currentValue) !==\n JSON.stringify(changes[\"totalOption\"].previousValue)\n ) {\n this.calculateTotal();\n }\n }\n\n calculateTotal() {\n // 这里处理合计数据\n if (this.showTotal) {\n this.totalOptionList = new Array(Number(this.columnsNumber) - 1).fill(\"\");\n this.totalOption.forEach((item) => {\n if (item.insertIndex && (item.insertValue || item.insertValue === 0)) {\n this.totalOptionList[item.insertIndex - 1] = {\n value: item.insertValue,\n align: item.align || \"left\",\n showDecimal: item.showDecimal || false,\n preserveNumber: item.preserveNumber != null ? item.preserveNumber : 2,\n };\n }\n });\n }\n }\n\n private init(isEdit: boolean = false): void {\n this.paginationPageIndex = 1;\n // 异常捕获\n if (!this.checkList(this.formLines)) {\n this.tableLoading = false;\n return;\n }\n this.createForm();\n // 如果没有formLinesData,则认为是新增\n if (\n !isEdit &&\n (!this.formLinesData ||\n (this.formLinesData && this.formLinesData.length === 0))\n ) {\n this.tableLoading = false;\n // allowEmpty 且仅删除按钮:不自动补空行\n if (!this.isTrulyEmptyAllowed) {\n this.addFormLine(null, false);\n }\n this.showForm = true;\n } else {\n // 编辑逻辑\n this.addFormLineWithData();\n }\n this.validateHdFormLines.valueChanges.subscribe((data) =>\n this.onHdFormValueChanged(data),\n );\n this.onHdFormValueChanged();\n }\n\n /**\n * 创建表单\n */\n private createForm() {\n this.validateHdFormLines = this.fb.group({\n lines: this.fb.array([]),\n });\n this.newLine = this.newLineItem();\n }\n\n delayJumpToNextInput() {\n // 关闭键盘操作时,选择框选中后不自动跳转到下一个输入控件\n if (!this.enableKeyboardOperate) {\n return;\n }\n setTimeout(() => {\n this.jumpToNextInput(this.activeDomX, this.activeDomY);\n }, 0);\n }\n\n /**\n * 定义空的newLineItem 结构\n */\n private newLineItem(): FormGroup {\n return this.createLineFromValues(null, true);\n }\n\n /**\n * 根据行数据创建 FormGroup(含隐藏字段、select 的 label 等附属字段)\n * @param formLinesDataItem 行数据,空行传 null\n * @param isEmptyLine 是否空行(影响必填校验规则,与历史逻辑保持一致)\n * @param regenerateRowId 是否强制生成新行 id(复制行时使用)\n */\n private createLineFromValues(\n formLinesDataItem: any,\n isEmptyLine: boolean = false,\n regenerateRowId: boolean = false,\n ): FormGroup {\n let formGroupObj: any = {};\n this.formLines.forEach((item) => {\n formGroupObj[item.name] = this.fb.control(\n {\n value:\n formLinesDataItem != null\n ? formLinesDataItem[item.name]\n : item.value,\n disabled: item.disabled,\n },\n isEmptyLine\n ? item.require && !item.hide\n ? [Validators.required]\n : []\n : item.require\n ? [Validators.required]\n : [],\n );\n if (item.selectOption && item.selectOption.label) {\n formGroupObj[item.selectOption.label] = this.fb.control(\n formLinesDataItem != null\n ? formLinesDataItem[item.selectOption.label] || null\n : null,\n [],\n );\n }\n });\n\n // 稳定行 id:搜索重建表单后用于保留勾选\n const rowId =\n !regenerateRowId && formLinesDataItem && formLinesDataItem._hdRowId\n ? formLinesDataItem._hdRowId\n : this.generateRowId();\n formGroupObj._hdRowId = this.fb.control(rowId);\n if (formLinesDataItem && !formLinesDataItem._hdRowId) {\n formLinesDataItem._hdRowId = rowId;\n }\n\n // 复制源行上多余的字段(隐藏附属字段、selectListName 等)\n if (formLinesDataItem) {\n Object.keys(formLinesDataItem).forEach((key) => {\n if (\n key === \"lineIndex\" ||\n key === \"isHdFormLineSearchAdd\" ||\n key === \"_hdRowId\"\n ) {\n return;\n }\n if (!formGroupObj[key]) {\n formGroupObj[key] = this.fb.control(formLinesDataItem[key]);\n }\n });\n }\n\n formGroupObj.lineIndex = this.fb.control(\n this.linesFormArray.controls.length + 1,\n [],\n );\n formGroupObj.isHdFormLineSearchAdd = this.fb.control(this.isFilterData, []);\n let formGroupSubmit = this.fb.group(formGroupObj);\n this.formLines.forEach((item) => {\n if (item.onChangeEvent) {\n const debounceMs =\n item.onChangeEventDebounceTime != null\n ? item.onChangeEventDebounceTime\n : 0;\n const control = formGroupSubmit.get(item.name);\n const handleChange = (value: any) => {\n if (item.type === FormLineType.Select && value !== null) {\n this.delayJumpToNextInput();\n }\n this.triggerEvent(item.onChangeEvent, value, formGroupSubmit);\n };\n // 未配置或为 0:同步订阅,不走 debounceTime\n if (debounceMs > 0) {\n control.valueChanges\n .pipe(debounceTime(debounceMs))\n .subscribe(handleChange);\n } else {\n control.valueChanges.subscribe(handleChange);\n }\n }\n });\n return formGroupSubmit;\n }\n\n private calculateLineNumber() {\n this.linesFormArray.controls.forEach((item, index) => {\n item.get(\"lineIndex\").setValue(index + 1, { emitEvent: false });\n });\n }\n\n /**\n * 编辑的时候数据处理\n */\n addFormLineWithData() {\n this.formLinesData.forEach((formLinesDataItem) => {\n this.linesFormArray.insert(\n this.linesFormArray.controls.length,\n this.createLineFromValues(formLinesDataItem),\n );\n });\n this.calculateLineNumber();\n this.tableLoading = false;\n this.showForm = true;\n }\n\n /**\n * 在指定行下方新增空行;不传 afterLine 则追加到末尾\n * @param afterLine 当前行 FormGroup(不要传 lineIndex,避免序号偏移导致插错位置)\n */\n addFormLine(afterLine?: FormGroup | null, isFocus: boolean = true) {\n const insertAt = this.getInsertIndexAfter(afterLine);\n const newLine = this.newLineItem();\n this.linesFormArray.insert(insertAt, newLine);\n this.calculateLineNumber();\n this.addLineEvent.emit(newLine);\n // 跳到新增行所在页,避免页码异常时看不到数据\n this.paginationPageIndex =\n Math.floor(insertAt / this.paginationPageSize) + 1;\n setTimeout(() => {\n this.collectDomData();\n if (isFocus) {\n this.activeDomX = this.toPageLocalRowIndex(insertAt);\n this.activeDomY = 0;\n console.log(\"执行过程13\");\n this.focusDom(this.activeDomX, this.activeDomY);\n }\n }, 0);\n }\n\n /**\n * 复制当前行:在当前行下方新增一行,复制所有字段值(含隐藏字段)\n */\n copyFormLine(line: FormGroup) {\n const sourceIndex = this.linesFormArray.controls.indexOf(line);\n if (sourceIndex < 0) {\n return;\n }\n // getRawValue 包含 disabled 字段;复制行使用新的 _hdRowId\n const sourceValues = line.getRawValue();\n const insertAt = sourceIndex + 1;\n this.linesFormArray.insert(\n insertAt,\n this.createLineFromValues(sourceValues, false, true),\n );\n this.calculateLineNumber();\n setTimeout(() => {\n this.collectDomData();\n this.activeDomX = this.toPageLocalRowIndex(insertAt);\n this.activeDomY = 0;\n this.focusDom(this.activeDomX, this.activeDomY);\n }, 0);\n }\n\n @Output() deleteLineEvent = new EventEmitter();\n\n /**\n * 删除行\n * @param lineOrIndex 行 FormGroup,或 1-based 的 lineIndex(兼容 resetForm)\n */\n deleteFormLine(lineOrIndex: FormGroup | number) {\n let removeAt = -1;\n if (typeof lineOrIndex === \"number\") {\n removeAt = lineOrIndex - 1;\n } else if (lineOrIndex) {\n removeAt = this.linesFormArray.controls.indexOf(lineOrIndex);\n }\n console.log(\n \"index\",\n typeof lineOrIndex === \"number\" ? lineOrIndex : removeAt,\n );\n if (removeAt < 0) {\n return;\n }\n // 最后一条数据的时候要判断一下\n if (this.linesFormArray.controls.length === 1 && !this.allowEmpty) {\n if (this.deleteLastLineEvent) {\n this.deleteLastLineEvent.emit();\n }\n return;\n }\n const removedLine = this.linesFormArray.at(removeAt) as FormGroup;\n this.linesFormArray.removeAt(removeAt);\n this.removeLineFromSelection(removedLine);\n if (\n !this.isFilterData &&\n this.linesFormArray.controls &&\n this.linesFormArray.controls.length === 0 &&\n !this.isTrulyEmptyAllowed\n ) {\n this.addFormLine();\n } else {\n // 当前页已无数据时回退页码,且页码最小为 1(避免删空后变成 0 导致再添加看不见)\n const maxPage = Math.max(\n 1,\n Math.ceil(\n this.linesFormArray.controls.length / this.paginationPageSize,\n ),\n );\n if (this.paginationPageIndex > maxPage) {\n this.paginationPageIndex = maxPage;\n }\n this.calculateLineNumber();\n }\n setTimeout(() => {\n this.collectDomData();\n }, 0);\n }\n\n /** 在指定行后方的插入下标;无行则追加到末尾 */\n private getInsertIndexAfter(afterLine?: FormGroup | null): number {\n if (!afterLine) {\n return this.linesFormArray.controls.length;\n }\n const idx = this.linesFormArray.controls.indexOf(afterLine);\n return idx >= 0 ? idx + 1 : this.linesFormArray.controls.length;\n }\n\n /** 全局行下标转当前页内的行下标(供聚焦用) */\n private toPageLocalRowIndex(globalIndex: number): number {\n return (\n globalIndex - (this.paginationPageIndex - 1) * this.paginationPageSize\n );\n }\n\n public pageIndexChange(event: number): void {\n this.paginationPageIndex = event;\n setTimeout(() => {\n this.collectDomData();\n }, 0);\n }\n\n public pageSizeChange(event: number): void {\n this.paginationPageSize = event;\n setTimeout(() => {\n this.collectDomData();\n }, 0);\n }\n\n private onHdFormValueChanged(data?: any) {\n if (this.isFilterData) {\n if (data && data.lines && this.filterIndexStore.length !== 0) {\n const lines = data.lines;\n if (lines.length === this.filterIndexStore.length) {\n this.filterIndexStore.forEach((item, index) => {\n this.storeFormLinesData[item] = {\n ...this.filterStoreFormLinesData[index],\n ...lines[index],\n };\n });\n } else if (lines.length > this.filterIndexStore.length) {\n // 有新增数据的情况\n // step 1: 先找新增的index下标\n const getNowLines = this.validateHdFormLines.getRawValue().lines;\n let addIndex = -1;\n for (let i = 0; i < getNowLines.length; i++) {\n if (getNowLines[i].isHdFormLineSearchAdd) {\n addIndex = i;\n break;\n }\n }\n if (addIndex !== -1) {\n this.storeFormLinesData.splice(\n this.filterIndexStore[addIndex - 1] + 1,\n 0,\n getNowLines[addIndex],\n );\n }\n this.filterIndexStore.push(this.filterIndexStore[addIndex - 1] + 1);\n } else {\n // 有删除数据的情况\n // step 1:先找到删除的index下标\n let deletedIndex = -1;\n let count = 0;\n if (lines.length === 0) {\n deletedIndex = 0;\n } else {\n for (let i = 0; i < lines.length; i++) {\n if (lines[i].lineIndex - count > 1) {\n deletedIndex = i;\n break;\n }\n count++;\n }\n }\n if (deletedIndex !== -1) {\n // step 2: 删除总数据中的对应数据, 把下标数组和lines长度对齐,同时把下标数组在deletedIndex后面的值全都-1\n this.storeFormLinesData = this.storeFormLinesData.filter(\n (item, index) => {\n return index !== this.filterIndexStore[deletedIndex];\n },\n );\n this.filterIndexStore.splice(deletedIndex, 1);\n for (let i = 0; i < this.filterIndexStore.length; i++) {\n if (i >= deletedIndex) {\n this.filterIndexStore[i]--;\n }\n }\n } else {\n // step 2: 没有找到deletedIndex说明删除操作在最后一行\n const filterIndex =\n this.filterIndexStore[this.filterIndexStore.length - 1];\n this.storeFormLinesData = this.storeFormLinesData.filter(\n (item, index) => {\n return index !== filterIndex;\n },\n );\n this.filterIndexStore.pop();\n }\n }\n } else {\n if (data && data.lines) {\n this.storeFormLinesData = data.lines;\n }\n }\n } else {\n if (data && data.lines) {\n this.storeFormLinesData = data.lines;\n }\n }\n\n // 总表单\n if (!this.isFilterData) {\n this.formValid = this.validateHdFormLines.valid;\n } else {\n if (this.formValid) {\n // 如果整体表单是true,不管子表单是什么,都变成子表单的状态\n this.formValid = this.validateHdFormLines.valid;\n } else {\n // 如果整体表单是false:1、子表单为true,需要重算;2、子表单为false,用子表单状态\n if (this.validateHdFormLines.valid) {\n this.formValid = this.innerGetValid();\n } else {\n this.formValid = this.validateHdFormLines.valid;\n }\n }\n }\n // this.calculateLineNumber();\n this.changeEvent.emit(this.validateHdFormLines);\n }\n\n private checkList(list: Array<FormLine>): boolean {\n if (!list || (list && list.length === 0)) {\n return false;\n }\n let nameList = [];\n let selectOptionCheckList = [];\n list.forEach((item) => {\n // 校验单项选择器\n // if (item.type === FormLineType.Select && (!item.selectList || (item.selectList && item.selectList.length === 0))) {\n // throw 'formLines组件数据格式不规范,存在单项选择器没有传入选项!'\n // }\n nameList.push(item.name);\n\n // 校验有onSearch的字段的selectOption的value、label是否在formLine里面都定义了\n if (item.onSearchEvent && item.selectOption) {\n selectOptionCheckList = [];\n list.forEach((innerItem) => {\n if (\n innerItem.name === item.selectOption.value ||\n innerItem.name === item.selectOption.label\n ) {\n selectOptionCheckList.push(innerItem.name);\n }\n });\n if (selectOptionCheckList.length < 2) {\n throw `formLines组件数据格式不规范,字段${item.name}的selectOption的value、label字段未能在formLines中找到对应字段!`;\n }\n }\n });\n // 校验name是否重复\n if ([...new Set(nameList)].length !== list.length) {\n throw \"formLines组件数据格式不规范,存在重复name值!\";\n }\n // ...more check\n return true;\n }\n\n public submitForm(): void {\n this.changeEvent.emit(this.validateHdFormLines.getRawValue());\n }\n\n public resetForm(): void {\n // 删除\n this.clearSelection();\n for (let i = this.linesFormArray.controls.length; i >= 0; i--) {\n this.deleteFormLine(i);\n }\n this.paginationPageIndex = 1;\n }\n\n public inputClean(formItem: any, line: any): void {\n line.get(formItem.name).setValue(null);\n }\n\n public selectValue(id: string, rowNumber: number, colNumber: number): void {\n const inputDom: any = document.querySelector(id);\n inputDom.select();\n this.setActiveDomInFormLines(rowNumber, colNumber);\n }\n\n private textWidthCache: { [key: string]: number } = {};\n\n isTextOverflow(text: string, maxWidth: number): boolean {\n const cachedWidth = this.textWidthCache[text];\n if (cachedWidth !== undefined) {\n return cachedWidth + 15 >= maxWidth;\n }\n\n const span = document.createElement(\"span\");\n span.style.visibility = \"hidden\";\n span.style.position = \"absolute\";\n span.style.whiteSpace = \"nowrap\";\n span.style.fontSize = \"14px\";\n span.style.display = \"inline-block\"; // 将样式修改为 inline-block\n span.innerText = text;\n document.body.appendChild(span);\n const isOverflow = span.offsetWidth + 15 >= maxWidth;\n this.textWidthCache[text] = span.offsetWidth;\n span.style.display = \"none\";\n document.body.removeChild(span);\n return isOverflow;\n }\n\n judgeColEmpty(str: any) {\n if (str || str === 0) {\n return str;\n } else {\n return \"<空>\";\n }\n }\n\n judgeValueIsNotEmpty(str: any) {\n if (str === null && str === undefined) {\n return false;\n } else {\n return true;\n }\n }\n}\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { NgZorroAntdModule } from 'ng-zorro-antd';\nimport { HdButtonGroupModule } from '../hd-button-group/hd-button-group.module';\nimport { HdButtonModule } from '../hd-button/hd-button.module';\nimport { HdSpaceModule } from '../hd-space/hd-space.module';\nimport { CommonSessionService } from '../service/common-session.service';\nimport { HdFormLinesComponent } from './hd-form-lines.component';\n@NgModule({\n imports: [\n CommonModule,\n FormsModule,\n ReactiveFormsModule,\n NgZorroAntdModule,\n HdButtonModule,\n HdSpaceModule,\n HdButtonGroupModule\n ],\n declarations: [HdFormLinesComponent],\n exports: [HdFormLinesComponent],\n providers: [CommonSessionService]\n})\nexport class HdFormLinesModule { }\n","import { Component, ContentChild, EventEmitter, Input, OnInit, Output, SimpleChange, SimpleChanges, TemplateRef } from '@angular/core';\nimport { TableTotalOption } from './hd-current-table.service';\nimport { InputBoolean } from 'ng-zorro-antd/core';\nimport { Page } from '../model/common-type';\n\n@Component({\n selector: 'hd-current-table',\n templateUrl: './hd-current-table.component.html',\n styleUrls: ['./hd-current-table.component.less']\n})\nexport class HdCurrentTableComponent implements OnInit {\n @Input() tableData: Page<any>;\n @Input() scroll: { [key: string]: string } = { x: '1px' };\n @Input() @InputBoolean() showSelected: boolean = false;\n @Input() selectField: string = 'billNumber';\n // 合计区域\n @Input() @InputBoolean() showTableTotal: boolean = false;\n @Input() tableTotalOption: Array<TableTotalOption>;\n @Output() selectEvent = new EventEmitter();\n @Output() tableSearchEvent = new EventEmitter();\n @ContentChild(\"tableHead\", { static: false }) tableHead: TemplateRef<any>;\n @ContentChild(\"tableBody\", { static: false }) tableBody: TemplateRef<any>;\n @ContentChild(\"tableTotal\", { static: false }) tableTotal: TemplateRef<any>;\n\n @Input() tableLoading: boolean = false;\n // 表格分页参数\n @Input() tablePageIndex: number = 1;\n @Input() tablePageSize: number = 10;\n @Output() tablePageIndexChange = new EventEmitter<any>();\n @Output() tablePageSizeChange = new EventEmitter<any>();\n // 表格勾选参数\n isAllDisplayDataChecked = false;\n isIndeterminate = false;\n listOfDisplayData = [];\n listOfAllData = [];\n listOfSelection: Array<any> | TemplateRef<void>;\n mapOfCheckedId: { [key: string]: boolean } = {};\n mapOfCheckList: { [key: string]: any } = {};\n\n tableTotalOptionList = [];\n\n constructor() { }\n\n ngOnInit(): void { }\n\n ngOnChanges(changes: SimpleChange) {\n // 数据改变时,重置勾选状态\n if (changes && changes['tableData'] && changes['tableData']['currentValue'] && changes['tableData']['previousValue']) {\n if(changes['tableData']['currentValue']['pageSize'] !== changes['tableData']['previousValue']['pageSize']\n || changes['tableData']['currentValue']['pageNumber'] !== changes['tableData']['previousValue']['pageNumber']){\n return;\n }\n this.resetStatus();\n }\n }\n\n // 表格勾选逻辑\n currentPageDataChange($event: any): void {\n this.listOfDisplayData = $event;\n this.refreshStatus();\n this.resetStatus();\n }\n\n search(reset: boolean) {\n if(reset){\n this.tablePageSizeChange.emit(this.tablePageSize);\n }else{\n this.tablePageIndexChange.emit(this.tablePageIndex);\n }\n // 触发父组件查询事件\n this.tableSearchEvent.emit(reset);\n }\n\n resetStatus() {\n this.isAllDisplayDataChecked = false;\n this.isIndeterminate = false;\n this.mapOfCheckedId = {};\n this.mapOfCheckList = {};\n this.selectEvent.emit([]);\n }\n\n refreshStatus(event: boolean = false, data: any = null): void {\n if (event && data) {\n !this.mapOfCheckList[data[this.selectField]] && (this.mapOfCheckList[data[this.selectField]] = data);\n } else if (!event && data) {\n this.mapOfCheckList[data[this.selectField]] && delete this.mapOfCheckList[data[this.selectField]];\n }\n this.isAllDisplayDataChecked = this.listOfDisplayData.every(item => this.mapOfCheckedId[item[this.selectField]]);\n this.isIndeterminate =\n this.listOfDisplayData.some(item => this.mapOfCheckedId[item[this.selectField]]) && !this.isAllDisplayDataChecked;\n // 触发select事件\n if (this.selectEvent) {\n const selectedList: Array<any> = Object.values(this.mapOfCheckList);\n this.selectEvent.emit(selectedList);\n }\n // 如果数据为空,则清空勾选标识\n if (this.tableData.content.length === 0) {\n this.isAllDisplayDataChecked = false;\n }\n }\n\n checkAll(value: boolean): void {\n this.listOfDisplayData.forEach(item => {\n if (value) {\n !this.mapOfCheckList[item[this.selectField]] && (this.mapOfCheckList[item[this.selectField]] = item);\n } else {\n this.mapOfCheckList[item[this.selectField]] && delete this.mapOfCheckList[item[this.selectField]];\n }\n\n this.mapOfCheckedId[item[this.selectField]] = value\n });\n this.refreshStatus();\n }\n}\n","import { NgModule, NO_ERRORS_SCHEMA } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { HdCurrentTableComponent } from './hd-current-table.component';\nimport { NzTableModule } from 'ng-zorro-antd/table';\nimport { HdSpaceModule } from '../hd-space/hd-space.module';\n\n@NgModule({\n imports: [\n CommonModule,\n NzTableModule,\n HdSpaceModule\n ],\n declarations: [HdCurrentTableComponent],\n exports: [HdCurrentTableComponent],\n schemas: [NO_ERRORS_SCHEMA]\n})\nexport class HdCurrentTableModule { }\n","import { Component, Input, OnInit } from '@angular/core';\n\n@Component({\n selector: 'hd-log',\n templateUrl: './hd-log.component.html',\n styleUrls: ['./hd-log.component.less']\n})\nexport class HdLogComponent implements OnInit {\n @Input() logs: any[];\n\n constructor() {\n }\n\n ngOnInit() {\n }\n}\n","import { Injectable, NgModule } from '@angular/core';\nimport { NzModalService } from 'ng-zorro-antd';\nimport { HdLogComponent } from './hd-log.component';\n\n@Injectable({\n providedIn: 'root',\n})\n\nexport class HdLogService {\n\n constructor(private modalService: NzModalService) { }\n\n showLogs(logs: any[]) {\n this.modalService.create({\n nzTitle: '操作日志',\n nzContent: HdLogComponent,\n nzComponentParams: { logs },\n nzFooter: null,\n nzWidth: 1000\n });\n }\n}\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { HdLogComponent } from './hd-log.component';\nimport { NgZorroAntdModule } from 'ng-zorro-antd';\nimport { HdDetailLinesModule } from '../hd-detail-lines/hd-detail-lines.module';\nimport { HdLogService } from './hd-log.service';\n@NgModule({\n imports: [\n CommonModule,\n NgZorroAntdModule,\n HdDetailLinesModule\n ],\n entryComponents: [HdLogComponent],\n declarations: [HdLogComponent],\n exports: [HdLogComponent],\n providers: [HdLogService]\n})\nexport class HdLogModule { }\n","import { Component, OnInit, Output, Input, EventEmitter } from '@angular/core';\n\n@Component({\n selector: 'hd-popconfirm',\n templateUrl: './hd-popconfirm.component.html',\n styleUrls: ['./hd-popconfirm.component.less']\n})\nexport class HdPopconfirmComponent implements OnInit {\n @Input() message: string;\n @Output() confirmOption = new EventEmitter<any>();\n @Output() cancelOption = new EventEmitter<any>();\n\n constructor() { }\n\n ngOnInit() {\n }\n\n\n cancel(e: any): void{\n this.cancelOption.emit();\n }\n\n confirm(e: any): void{\n this.confirmOption.emit();\n }\n\n}\n","import { NgModule } from '@angular/core';\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { CommonModule } from '@angular/common';\nimport { NgZorroAntdModule } from 'ng-zorro-antd';\nimport { HdPopconfirmComponent } from \"./hd-popconfirm.component\";\n\n@NgModule({\n declarations: [\n HdPopconfirmComponent\n ],\n imports: [\n FormsModule,\n ReactiveFormsModule,\n CommonModule,\n NgZorroAntdModule,\n ],\n exports: [HdPopconfirmComponent],\n providers: [],\n bootstrap: [HdPopconfirmComponent]\n})\nexport class HdPopconfirmModule {\n}\n","import { Component, OnInit, Input, OnChanges } from \"@angular/core\";\nimport { statusToColor } from \"./hd-status.service\";\n\n/** status 值 → 颜色,启动时构建一次 */\nconst STATUS_COLOR_MAP: Map<string, string> = (() => {\n const map = new Map<string, string>();\n for (const color of Object.keys(statusToColor)) {\n statusToColor[color].forEach((item) => {\n if (item) {\n map.set(item.toLowerCase(), color);\n }\n });\n }\n return map;\n})();\n\n@Component({\n selector: \"hd-status\",\n templateUrl: \"./hd-status.component.html\",\n styleUrls: [\"./hd-status.component.less\"],\n})\nexport class HdStatusComponent implements OnInit, OnChanges {\n @Input() status: string;\n statusColor: string;\n\n constructor() {}\n\n ngOnInit() {\n this.setStatusColor();\n }\n\n ngOnChanges() {\n this.setStatusColor();\n }\n\n setStatusColor() {\n const statusLower = this.status && this.status.toLowerCase();\n this.statusColor =\n statusLower && STATUS_COLOR_MAP.has(statusLower)\n ? STATUS_COLOR_MAP.get(statusLower)\n : \"#9FA4A2\";\n }\n}\n","import { NgModule } from '@angular/core';\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { CommonModule } from '@angular/common';\nimport { NgZorroAntdModule } from 'ng-zorro-antd';\nimport { HdStatusComponent } from \"./hd-status.component\";\n\n@NgModule({\n declarations: [\n HdStatusComponent,\n ],\n imports: [\n FormsModule,\n ReactiveFormsModule,\n CommonModule,\n NgZorroAntdModule,\n ],\n exports: [HdStatusComponent],\n providers: [],\n bootstrap: [HdStatusComponent]\n})\nexport class HdStatusModule {\n}\n","/**\n * 表格 / 表单列宽常量(px)。\n * 使用 `as const`,发布后的 `.d.ts` 仍保留具体数值,IDE 悬停可直接看到。\n *\n * @example\n * import { ColWidth } from 'fantasy-ngzorro';\n * { width: ColWidth.enumColWidth } // 100\n */\nexport const ColWidth = {\n /** 表格小图标宽度 — 25 */\n tableImageColWidth: 25,\n /** 表格双小图标宽度 — 40 */\n tableTwoImageColWidth: 40,\n /** 单据单号列宽度 — 150 */\n billNumberColWidth: 150,\n /** 基本资料名称列宽度 — 150 */\n nameColWidth: 150,\n /** 基本资料代码列宽度 — 100 */\n codeColWidth: 100,\n /** 门店/货主/供应商 `[code]name` 展示固定宽度 — 200 */\n codeNameColWidth: 200,\n /** 枚举列宽度 — 100 */\n enumColWidth: 100,\n /** 单个日期 — 100 */\n dateColWidth: 100,\n /** 单个日期带时间 — 150 */\n dateTimeColWidth: 150,\n /** 日期范围 — 200 */\n dateRangeWidth: 200,\n /** 操作列宽度 — 150 */\n operateColWidth: 150,\n /** 数字列 — 100 */\n numberColWidth: 100,\n /** 备注列 — 250 */\n remarkColWidth: 250,\n /** 通用固定宽(超长省略)— 150 */\n fixColWidth: 150,\n /** 订单等内容缩略/展开列 — 350 */\n maxColWidth: 350,\n} as const;\n","import { Pipe, PipeTransform } from \"@angular/core\";\nimport { ColWidth } from \"../model/colWidth\";\nimport { HdTableColumn } from \"./hd-table.service\";\n\nexport interface HdTableCellView {\n display: string | number;\n title: string | null;\n isEmpty: boolean;\n overflow: boolean;\n}\n\n@Pipe({ name: \"hdTableCell\", pure: true })\nexport class HdTableCellPipe implements PipeTransform {\n transform(data: any, col: HdTableColumn): HdTableCellView {\n if (!data || !col) {\n return { display: \"<空>\", title: null, isEmpty: true, overflow: false };\n }\n const raw = getHdTableCellRaw(data, col);\n const isEmpty = !(raw || raw === 0);\n const display = isEmpty ? \"<空>\" : raw;\n const maxWidth = col.width || ColWidth.fixColWidth;\n let overflow = false;\n let title: string | null = null;\n if (!isEmpty) {\n const str = String(raw);\n overflow = estimateTextWidth(str) >= maxWidth;\n if (overflow) {\n title = str;\n }\n }\n return { display, title, isEmpty, overflow };\n }\n}\n\n/** 估算文本像素宽度(中文约 14px,英文约 8px) */\nfunction estimateTextWidth(str: string): number {\n let width = 15;\n for (let i = 0; i < str.length; i++) {\n width += str.charCodeAt(i) > 255 ? 14 : 8;\n }\n return width;\n}\n\nfunction getHdTableCellRaw(data: any, col: HdTableColumn): any {\n if (col.render) {\n return col.render(data);\n }\n const name = col.name;\n if (typeof name === \"function\") {\n return name(data);\n }\n if (typeof name === \"string\") {\n return data[name];\n }\n return undefined;\n}\n","import { InputNumber, SelectOption } from \"../model/common-type\";\n\n// 表格行\nexport class HdTableColumn {\n title: string; // 列名\n name: string | Function = null; // 字段名\n render?: (value: any) => string; // 渲染函数\n width?: number; // 列宽\n /**\n * 文字颜色。\n * 字符串:整列同色;\n * 函数:按行返回颜色(如标红返回 '#F5222D',不标色返回空)。\n */\n color?: string | ((line: any) => string);\n align?: \"right\" | \"left\" | \"center\" = \"left\";\n click?: (value: any) => void;\n /** 按行控制是否渲染为可点击超链接;未配置时只要有 click 则整列可点 */\n canClick?: (value: any) => boolean;\n fixed?: \"left\" | \"right\" = null;\n fixedWidth?: number; // 左侧固定列偏移(其左侧已固定列宽之和)\n fixedRightWidth?: number; // 右侧固定列偏移(其右侧已固定列宽之和)\n btnList?: Array<OperateBtn> = []; // title 为「操作」时整列按钮;其他列时作为单元格文案后的操作按钮\n isShow?: boolean = true;\n canSort?: boolean = false; // 是否可以排序\n canWarp?: boolean = false; // 用于某一列需要个性化的场景,当为true时,且表格选项showOperateColWarpButton为true时,通过按钮控制对应的列是否换行\n minWidth?: number; // 最小宽度,保证列名能正常显示\n stateField?: string; // 状态列取值字段,默认取 state\n isState?: boolean; // 是否按状态列渲染,取值字段为 name\n /**\n * 字段值后用竖线追加行号。前面的字段仍可配 click 作为超链接,行号本身不可点。\n * true:按分页连续序号(从 1 开始);\n * string:取当前行该字段作为行号。\n */\n rowNo?: boolean | string;\n /**\n * 值后显示编辑笔图标(Figma edit/edit,14px)。\n * true:整列可编辑;函数:按行控制。\n * 与 editType 互斥:配置了 editType 时走单元格内控件,不再显示编辑笔。\n */\n editable?: boolean | ((line: any) => boolean);\n /** 点击编辑笔回调,供父组件处理(如弹窗改值) */\n edit?: (line: any) => void;\n /**\n * 行内编辑类型;配置后该列常显控件。\n * name 须为 string(函数型 name 不支持行内编辑)。\n */\n editType?: \"input\" | \"inputNumber\" | \"select\";\n /** 是否禁用行内编辑:true / 按行函数 */\n editDisabled?: boolean | ((line: any) => boolean);\n /** Select 配置(复用 SelectOption 子集) */\n selectOption?: SelectOption;\n /** InputNumber 配置 */\n inputNumber?: InputNumber;\n /** 输入框 / 下拉 placeholder */\n placeholder?: string;\n}\n\n/** hd-table 行内编辑变更事件(乐观更新后抛出,previous* 供接口失败回滚) */\nexport class HdTableCellChange {\n line: any;\n col: HdTableColumn;\n name: string;\n value: any;\n previousValue: any;\n label?: any;\n previousLabel?: any;\n option?: any;\n previousOption?: any;\n}\n\nexport class OperateBtn {\n /** 按钮文案;支持按行动态,如 (line) => line.enabled ? '解除' : '设置' */\n name: string | ((line: any) => string);\n showConfirm?: boolean | ((line: any) => boolean) = false;\n isRepeat?: boolean = false; // 是否和别的按钮有显示冲突,譬如:开启,关闭需要再关闭按钮加一个这个属性\n click?: (value: any) => void;\n permission?: (value: any) => boolean;\n}\n\nexport class TableCacheOption {\n pageSize: number;\n colWidths: Map<string, number> = new Map<string, number>(); // name -> width\n cols: Array<string>; // ['title']\n}\n\n// 设置列 树组件对象\nexport class TreeGrid {\n title: string = \"\";\n key: string = \"\";\n disabled?: boolean = false;\n checked?: boolean = false;\n selectable?: boolean = false;\n isLeaf?: boolean = true;\n expanded?: boolean = false;\n}\n","import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ContentChild,\n ElementRef,\n EventEmitter,\n Input,\n OnDestroy,\n OnInit,\n Output,\n SimpleChange,\n TemplateRef,\n ViewChild,\n} from \"@angular/core\";\nimport * as localforage from \"localforage\";\nimport {\n InputBoolean,\n NzFormatBeforeDropEvent,\n NzFormatEmitEvent,\n} from \"ng-zorro-antd/core\";\nimport { NzResizeEvent } from \"ng-zorro-antd/resizable\";\nimport { NzTableComponent } from \"ng-zorro-antd/table\";\nimport { Observable, of } from \"rxjs\";\nimport { delay } from \"rxjs/operators\";\nimport { ColWidth } from \"../model/colWidth\";\nimport { Page } from \"../model/common-type\";\nimport { CommonSessionService } from \"../service/common-session.service\";\nimport { resolveAutoTableScroll } from \"../utils/hd-table-scroll.util\";\nimport { TotalOption } from \"../hd-detail-lines/hd-detail-lines.service\";\nimport {\n HdTableCellChange,\n HdTableColumn,\n OperateBtn,\n TableCacheOption,\n TreeGrid,\n} from \"./hd-table.service\";\n@Component({\n selector: \"hd-table\",\n templateUrl: \"./hd-table.component.html\",\n styleUrls: [\"./hd-table.component.less\"],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class HdTableComponent implements OnInit, OnDestroy {\n @Input() uuid: string;\n @Input() tableCols: Array<HdTableColumn> = [];\n @Input() tableData: Page<any>;\n @Input() @InputBoolean() showSelected: boolean = false;\n @Input() @InputBoolean() showOperateColWarpButton: boolean = false;\n @Input() @InputBoolean() virtualScroll: boolean = true;\n /** 手动指定行高;不传则在首屏渲染后自动测量 */\n @Input() virtualItemSize: number;\n @Input() selectField: string = \"billNumber\";\n /**\n * 行勾选禁用字段名。定义后取当前行该字段:\n * 为 true 时禁用该行勾选(全选也会跳过)。\n */\n @Input() selectDisabledField: string;\n /**\n * 行失效字段名。定义后取当前行该字段:\n * 为 true 时整行背景色为 #F7F8FA。\n */\n @Input() rowInvalidField: string;\n // 合计区域(类型与 hd-detail-lines 的 TotalOption 一致)\n @Input() @InputBoolean() showTableTotal: boolean = false;\n @Input() tableTotalOption: Array<TotalOption>;\n /**\n * 合计列总数(含序号列,与 hd-detail-lines 一致);\n * 不传则按当前可见数据列数 + 1(序号)推算。\n */\n @Input() columnsNumber: number | string;\n @Output() sortEvent = new EventEmitter();\n @Output() selectEvent = new EventEmitter();\n @Output() tableSearchEvent = new EventEmitter();\n /** 行内编辑变更(已写回行对象;previous* 供接口失败回滚) */\n @Output() cellChange = new EventEmitter<HdTableCellChange>();\n @Input() tableLoading: boolean = false;\n /** 是否显示分页;false 时一次展示 tableData.content 全部行 */\n @Input() @InputBoolean() pagination: boolean = true;\n /**\n * 是否前端分页(对 content 全量切片)。\n * true:翻页不触发 tableSearchEvent,适合详情全量数据;\n * false(默认):服务端分页,翻页触发查询(现有列表行为)。\n * 与 pagination=false 同时用时以不分页为准。\n */\n @Input() @InputBoolean() frontPagination: boolean = false;\n // 表格分页参数\n @Input() tablePageIndex: number = 1;\n @Input() tablePageSize: number = 100;\n @Input() isFirstEntrySearch: boolean;\n @Input() isCrossPageSelect: boolean;\n @Output() tablePageIndexChange = new EventEmitter<any>();\n @Output() tablePageSizeChange = new EventEmitter<any>();\n @Output() tablePageSizeChangeEvent = new EventEmitter<any>();\n @ContentChild(\"tableTotal\", { static: false }) tableTotal: TemplateRef<any>;\n @ContentChild(\"tableLeftButton\", { static: false })\n tableLeftButton: TemplateRef<any>;\n @ContentChild(\"tableRightButton\", { static: false })\n tableRightButton: TemplateRef<any>;\n scroll = null;\n\n // 表格勾选参数\n isAllDisplayDataChecked = false;\n isIndeterminate = false;\n listOfDisplayData = [];\n listOfAllData = [];\n listOfSelection: Array<any> | TemplateRef<void>;\n mapOfCheckedId: { [key: string]: boolean } = {};\n mapOfCheckList: { [key: string]: any } = {};\n // 合计参数\n tableTotalOptionList = [];\n // 缓存信息\n tableCacheOption: TableCacheOption = new TableCacheOption();\n userSession: any;\n\n tableColsCache: Array<HdTableColumn> = [];\n showTable: boolean = false;\n selectColListNodes: Array<TreeGrid> = [];\n selectColListNodesCache: Array<TreeGrid> = [];\n showListNodes: boolean = false;\n\n isDropdownVisible: boolean = false;\n // 设置列的可见操作数组\n nowListNodes: Array<TreeGrid> = [];\n // 设置列的不可见操作数组\n hideListNodes: Array<TreeGrid> = [];\n\n // 点击时需要有临时数组存放两个tree,用于取消时候恢复调整前的状态\n cancelNowListNodes: Array<TreeGrid> = [];\n cancelHideListNodes: Array<TreeGrid> = [];\n showDetail: boolean = false;\n localforage: any = null;\n localtionTmp: string = \"\";\n isFirstEntrySearchLocal: boolean = true;\n isCrossPageSelectLocal: boolean = false;\n\n /** 自动测量前的兜底行高,测量完成后会更新 */\n measuredVirtualItemSize = 47;\n\n /** 记录当前是否处于虚拟滚动模式,用于切换 pageSize 时重建表格 */\n private virtualScrollActive: boolean | null = null;\n\n /** 可见列总宽,用于判断是否需要横向滚动 */\n /** 列宽合计(含勾选/序号),footer 表宽与横向 scroll 共用 */\n tableColWidthTotal = 0;\n\n /** 数据更新后待复位纵向滚动位置 */\n private pendingResetScrollTop = false;\n\n /** 当前排序,表格重建后用于恢复表头排序态 */\n private currentSortKey: string = null;\n private currentSortValue: string = null;\n\n @ViewChild(\"hdTable\", { static: false }) nzTableComponent: NzTableComponent;\n\n private totalFooterScrollBoundBody: HTMLElement = null;\n private totalFooterScrollHandler: () => void = null;\n private totalFooterSyncRetry = 0;\n\n /** 表体有竖滚条时合计 footer 才预留右侧滚动条槽 */\n totalFooterNeedYGutter = false;\n\n /** 视口/容器尺寸变化时重算 scroll.x 与合计对齐 */\n private viewportResizeTimer: any = null;\n private boundOnViewportResize: () => void = null;\n private hostResizeObserver: any = null;\n\n constructor(\n private hostEl: ElementRef,\n private cdr: ChangeDetectorRef,\n private commonSessionService: CommonSessionService,\n ) {\n this.localforage = localforage.createInstance({\n driver: localforage.INDEXEDDB,\n name: \"hd-fscm\", // 设置存储库的名称\n version: 1.0, // 设置存储库的版本\n storeName: \"hd-fscm-store\", // 设置存储库的存储空间名称\n });\n }\n\n ngOnDestroy(): void {\n this.unbindTotalFooterScrollSync();\n this.unbindViewportResizeSync();\n }\n\n ngOnInit(): void {\n if (this.isFirstEntrySearch === false) {\n this.isFirstEntrySearchLocal = this.isFirstEntrySearch;\n }\n if (this.isCrossPageSelect === true) {\n this.isCrossPageSelectLocal = this.isCrossPageSelect;\n }\n this.localtionTmp = location.pathname;\n if (this.localtionTmp) {\n this.localtionTmp = this.localtionTmp.replace(/\\//g, \"_\");\n }\n this.userSession = this.commonSessionService.getSession(\n \"__jy_authorization_session__\",\n );\n // 用于开发环境调试\n if (!this.userSession) {\n this.userSession = {\n userCode: \"dev\",\n };\n }\n\n this.bindViewportResizeSync();\n this.deleteHideItem();\n if (!this.tableCols || this.tableCols.length === 0) {\n return;\n }\n\n this.localforage\n .ready()\n .then(() => {\n this.getInitLocalforage();\n })\n .catch(function (e) {\n console.log(\"localforage加载异常step1\", e);\n throw \"localforage加载异常\";\n });\n }\n\n ngOnChanges(changes: SimpleChange) {\n if (\n changes[\"tableData\"] ||\n changes[\"tableTotalOption\"] ||\n changes[\"showTableTotal\"] ||\n changes[\"columnsNumber\"] ||\n changes[\"tableCols\"]\n ) {\n this.calculateTableTotal();\n }\n\n if (\n changes &&\n changes[\"tableData\"] &&\n changes[\"tableData\"][\"currentValue\"] &&\n changes[\"tableData\"][\"previousValue\"]\n ) {\n if (\n changes[\"tableData\"][\"currentValue\"][\"pageSize\"] !==\n changes[\"tableData\"][\"previousValue\"][\"pageSize\"] ||\n changes[\"tableData\"][\"currentValue\"][\"pageNumber\"] !==\n changes[\"tableData\"][\"previousValue\"][\"pageNumber\"]\n ) {\n this.pendingResetScrollTop = true;\n if (this.virtualScroll) {\n // 仅虚拟/普通模式真正切换时重建,避免排序后数据刷新把排序态清掉\n this.applyTableScrollMode(false);\n }\n // 翻页/改 pageSize:主动多次复位,覆盖 CDK 异步渲染时序\n this.scheduleResetTableBodyScrollTop();\n return;\n }\n if (!this.isCrossPageSelectLocal) {\n this.resetStatus();\n }\n }\n\n if (changes[\"tableData\"]) {\n this.pendingResetScrollTop = true;\n if (this.virtualScroll) {\n // 数据刷新不强制重建,只在滚动模式变化时 remount\n this.applyTableScrollMode(false);\n }\n // 数据更新后复位纵向滚动(含虚拟滚动场景)\n this.scheduleResetTableBodyScrollTop();\n }\n\n if (\n changes[\"tableCols\"] &&\n JSON.stringify(changes[\"tableCols\"].currentValue) !==\n JSON.stringify(changes[\"tableCols\"].previousValue) &&\n changes[\"tableCols\"].previousValue !== undefined\n ) {\n this.deleteHideItem();\n if (!this.tableCols || this.tableCols.length === 0) {\n return;\n }\n this.localforage\n .ready()\n .then(() => {\n this.getInitLocalforage();\n })\n .catch(function (e) {\n console.log(\"localforage加载异常step2\", e);\n throw \"localforage加载异常\";\n });\n }\n\n if (\n (changes[\"pagination\"] && !changes[\"pagination\"].firstChange) ||\n (changes[\"frontPagination\"] && !changes[\"frontPagination\"].firstChange)\n ) {\n // 分页模式切换需重建 nz-table(front / server / none)\n this.tablePageIndex = 1;\n this.applyTableScrollMode(true);\n this.cdr.markForCheck();\n }\n }\n\n /** 是否走前端分页(对 content 切片,不请求后端) */\n get useFrontPagination(): boolean {\n return !!this.pagination && !!this.frontPagination;\n }\n\n deleteHideItem() {\n // 首先把isShow为false数据剔除掉\n this.tableCols = this.tableCols.filter((item) => {\n // 如果对象没有 isShow 属性,则默认为 true,保留该对象\n if (!item.hasOwnProperty(\"isShow\")) {\n return true;\n }\n // 如果对象有 isShow 属性,则检查其值是否为 true\n return item.isShow === true;\n });\n }\n\n sort(sort: { key: string; value: string }) {\n this.currentSortKey = sort && sort.key;\n this.currentSortValue = sort && sort.value;\n this.sortEvent.emit(sort);\n }\n\n getColSort(col: HdTableColumn): string | null {\n if (!col || !col.canSort || !this.currentSortKey) {\n return null;\n }\n return col.name === this.currentSortKey ? this.currentSortValue : null;\n }\n\n toggleShowDetail(): void {\n this.showDetail = !this.showDetail;\n this.cdr.markForCheck();\n this.refreshVirtualScrollViewport(true);\n }\n\n get effectiveVirtualItemSize(): number {\n if (this.virtualItemSize != null && this.virtualItemSize > 0) {\n return this.virtualItemSize;\n }\n return this.measuredVirtualItemSize;\n }\n\n /**\n * 纵向可用高度扣减:按钮区/合计/分页等固定占位。\n * 必须与 dealScroll / presetScrollBeforeRemount 使用同一套,否则会误判「能放下」而不设 scroll.y。\n */\n private getScrollYMaxOffset(): number {\n return (this.tableTotal ? 180 : 140) + 216;\n }\n\n /**\n * 当前视口实际展示的行数。\n * 前端分页按 pageIndex/pageSize 切片估算,避免用全量 length 误判需要纵向滚动。\n */\n private getVisibleRowCount(): number {\n const content =\n this.tableData && this.tableData.content ? this.tableData.content : [];\n const total = content.length;\n if (!this.useFrontPagination) {\n return total;\n }\n if (total <= 0) {\n return 0;\n }\n const pageSize =\n Number(this.tablePageSize) > 0 ? Number(this.tablePageSize) : 10;\n const pageIndex =\n Number(this.tablePageIndex) > 0 ? Number(this.tablePageIndex) : 1;\n const start = (pageIndex - 1) * pageSize;\n if (start >= total) {\n return 0;\n }\n return Math.min(pageSize, total - start);\n }\n\n /** 当前页内容高度是否超出视口(需要表内纵向滚动) */\n get needsVerticalScroll(): boolean {\n const rowCount = this.getVisibleRowCount();\n if (rowCount <= 0) {\n return false;\n }\n const maxOffset = this.getScrollYMaxOffset();\n const estimatedHeight = rowCount * this.effectiveVirtualItemSize;\n if (typeof window !== \"undefined\") {\n return estimatedHeight > window.innerHeight - maxOffset;\n }\n return rowCount > 100;\n }\n\n /** 当前页数据能完整展示时不启用虚拟滚动,避免少量数据也出现滚动条 */\n get useVirtualScroll(): boolean {\n if (!this.virtualScroll) {\n return false;\n }\n return this.needsVerticalScroll;\n }\n\n getRightSticky(col: HdTableColumn): string | null {\n return col.fixed === \"right\" ? `${col.fixedRightWidth || 0}px` : null;\n }\n\n getLeftSticky(col: HdTableColumn): string | null {\n return col.fixed === \"left\" ? `${col.fixedWidth || 0}px` : null;\n }\n\n /**\n * 序号列固定宽(含 padding,可容纳 6 位如 199995)。\n * 不锁死时表体会随位数变宽(1→~64px,199995→~67px),合计行对不齐。\n */\n readonly lineNumberColWidth = 72;\n\n /** 开启合计时序号列的 left(勾选列占 40px) */\n get lineNumberLeft(): string {\n return this.showSelected ? \"40px\" : \"0px\";\n }\n\n get lineNumberColWidthPx(): string {\n return this.lineNumberColWidth + \"px\";\n }\n\n /**\n * 列总宽未超出容器:无横向 scroll,表体列会被撑满,合计走 fluid(width:100%)。\n * 列总宽超出:有 scroll.x,合计走固定表宽 + 横滚同步。\n */\n get isTotalFooterFluid(): boolean {\n return !(this.scroll && this.scroll.x);\n }\n\n /** fluid → 100%;固定 → scroll.x(与表体同一套横向宽度) */\n get totalFooterTableWidth(): string {\n if (this.isTotalFooterFluid) {\n return \"100%\";\n }\n return this.scroll && this.scroll.x\n ? String(this.scroll.x)\n : this.tableColWidthTotal > 0\n ? this.tableColWidthTotal + \"px\"\n : \"100%\";\n }\n\n /** 当前页行号(跨页连续,从 1 开始) */\n getLineNumber(index: number): number {\n const page = Number(this.tablePageIndex) > 0 ? Number(this.tablePageIndex) : 1;\n const size = Number(this.tablePageSize) > 0 ? Number(this.tablePageSize) : 0;\n const rowIndex = Number(index) >= 0 ? Number(index) : 0;\n return (page - 1) * size + rowIndex + 1;\n }\n\n trackByRow = (index: number, data: any): string => {\n const key = data && data[this.selectField];\n return key != null ? String(key) : `row-${index}`;\n };\n\n /** 虚拟滚动按数组下标追踪,避免业务主键 trackBy 导致 CDK 行复用错位 */\n virtualTrackByRow = (index: number): number => index;\n\n trackByCol = (_index: number, col: HdTableColumn): string => {\n return col.title;\n };\n\n getInitLocalforage() {\n // 首先获取当前hd-table存储的数据 如果没有,则初始化下当前的数据\n this.localforage\n .getItem(\n \"hd-table_\" +\n this.userSession.userCode +\n \"_\" +\n this.localtionTmp +\n \"_\" +\n this.uuid,\n )\n .then((value: TableCacheOption) => {\n if (value) {\n this.tableCacheOption = value;\n this.normalizeTableCacheOption();\n if (\n this.pagination &&\n this.tableCacheOption.pageSize &&\n this.tableCacheOption.pageSize > 10\n ) {\n this.tablePageSize = this.tableCacheOption.pageSize;\n this.tablePageSizeChange.emit(this.tablePageSize);\n }\n } else {\n this.tableCacheOption = new TableCacheOption();\n this.tableCacheOption.pageSize = this.tablePageSize;\n }\n // 服务端分页才在初始化时抛 pageSizeChangeEvent 触发父查询;前端分页不抛\n if (\n this.pagination &&\n !this.frontPagination &&\n this.isFirstEntrySearchLocal\n ) {\n this.tablePageSizeChangeEvent.emit(this.tablePageSize);\n } else {\n this.isFirstEntrySearchLocal = true;\n }\n this.initTable();\n })\n .catch((err) => {\n this.tableCacheOption = new TableCacheOption();\n this.tableCacheOption.pageSize = this.tablePageSize;\n this.initTable();\n });\n }\n\n initTable() {\n this.showTable = false;\n if (!this.uuid) {\n throw \"hd-table缺失uuid参数,请使用编辑器插件生成并给hd-table赋予uuid属性\";\n }\n if (this.judgeRepeatCols()) {\n this.dealCols();\n this.setCols();\n this.dealOperateBtn();\n this.virtualScrollActive = null;\n this.applyTableScrollMode(true);\n }\n }\n\n /** 虚拟/普通模式切换时重建表格,避免残留滚动容器 */\n applyTableScrollMode(forceRemount = false): void {\n const useVirtual = this.useVirtualScroll;\n const modeChanged =\n this.virtualScrollActive !== null &&\n this.virtualScrollActive !== useVirtual;\n this.virtualScrollActive = useVirtual;\n\n if (forceRemount || modeChanged) {\n // 必须先写好 scroll.y,再创建 nz-table。\n // ng-zorro 只在 AfterViewInit 绑一次 header/body 的 scroll 同步;\n // 若先以 y=null 创建再改成有 y,表头监听会丢,表现为列头不跟着横滚。\n this.presetScrollBeforeRemount(useVirtual);\n this.showTable = false;\n this.cdr.markForCheck();\n setTimeout(() => {\n this.showTable = true;\n this.cdr.markForCheck();\n setTimeout(() => {\n this.dealScroll();\n this.cdr.markForCheck();\n this.afterTableRender(useVirtual);\n });\n });\n return;\n }\n\n const prevHasY = !!(this.scroll && this.scroll.y);\n this.dealScroll();\n const nextHasY = !!(this.scroll && this.scroll.y);\n // 运行中 y 从有变无/从无变有时,也必须重建,否则同步监听仍指向旧 DOM\n if (prevHasY !== nextHasY) {\n this.showTable = false;\n this.cdr.markForCheck();\n setTimeout(() => {\n this.showTable = true;\n this.cdr.markForCheck();\n setTimeout(() => {\n this.afterTableRender(useVirtual);\n });\n });\n return;\n }\n\n this.cdr.markForCheck();\n this.afterTableRender(useVirtual);\n }\n\n /** 重建前预设 scroll,保证 AfterViewInit 时 header/body 结构已正确 */\n private presetScrollBeforeRemount(useVirtual: boolean): void {\n const maxOffset = this.getScrollYMaxOffset();\n const x = this.scroll ? this.scroll.x : null;\n if (this.virtualScroll && !useVirtual) {\n this.scroll = { x, y: null };\n return;\n }\n this.scroll = {\n x,\n y: `calc(100vh - ${maxOffset}px)`,\n };\n }\n\n private afterTableRender(useVirtual: boolean): void {\n if (useVirtual) {\n this.refreshVirtualScrollViewport(true);\n return;\n }\n if (this.virtualScroll) {\n this.measureVirtualItemSize(true);\n // 实测行高后可能从「能放下」变为「超出」,需切换滚动模式\n if (this.useVirtualScroll) {\n this.applyTableScrollMode(false);\n return;\n }\n }\n setTimeout(() => {\n this.syncHorizontalScroll();\n this.flushResetTableBodyScrollTop();\n });\n }\n\n refreshVirtualScrollViewport(forceMeasure = false): void {\n if (!this.useVirtualScroll) {\n if (forceMeasure) {\n this.measureVirtualItemSize(forceMeasure);\n this.dealScroll();\n this.cdr.markForCheck();\n }\n this.flushResetTableBodyScrollTop();\n return;\n }\n setTimeout(() => {\n const viewport =\n this.nzTableComponent && this.nzTableComponent.cdkVirtualScrollViewport;\n if (!viewport) {\n this.syncHorizontalScroll();\n this.flushResetTableBodyScrollTop();\n return;\n }\n const measured = this.measureVirtualItemSize(forceMeasure);\n if (measured) {\n this.dealScroll();\n this.cdr.markForCheck();\n viewport.checkViewportSize();\n setTimeout(() => {\n this.measureVirtualItemSize(forceMeasure);\n this.syncHorizontalScroll();\n viewport.checkViewportSize();\n this.flushResetTableBodyScrollTop();\n });\n } else {\n viewport.checkViewportSize();\n this.syncHorizontalScroll();\n this.flushResetTableBodyScrollTop();\n }\n });\n }\n\n /** 数据刷新后将表体纵向滚动复位到顶部 */\n private resetTableBodyScrollTop(): void {\n if (!this.nzTableComponent) {\n return;\n }\n const nzTable = this.nzTableComponent as any;\n const viewport = this.nzTableComponent.cdkVirtualScrollViewport;\n if (viewport) {\n if (typeof (viewport as any).scrollToOffset === \"function\") {\n (viewport as any).scrollToOffset(0);\n }\n if (typeof (viewport as any).scrollToIndex === \"function\") {\n (viewport as any).scrollToIndex(0);\n }\n const viewportEl =\n viewport.elementRef &&\n (viewport.elementRef.nativeElement as HTMLElement);\n if (viewportEl) {\n viewportEl.scrollTop = 0;\n }\n }\n const bodyCandidates = [\n nzTable.mixTableBodyNativeElement,\n nzTable.tableBodyNativeElement,\n nzTable.tableBodyElement && nzTable.tableBodyElement.nativeElement,\n ];\n bodyCandidates.forEach((el: HTMLElement) => {\n if (el) {\n el.scrollTop = 0;\n }\n });\n const tableMain =\n nzTable.tableMainElement &&\n (nzTable.tableMainElement.nativeElement as HTMLElement);\n if (!tableMain) {\n return;\n }\n const nodes = tableMain.querySelectorAll(\n \".ant-table-body, cdk-virtual-scroll-viewport\",\n );\n Array.prototype.forEach.call(nodes, (el: HTMLElement) => {\n el.scrollTop = 0;\n });\n }\n\n /**\n * 数据更新后多次尝试复位。\n * ng-zorro 8 + CDK 虚拟滚动会在数据刷新后异步改写 scrollTop,单次复位经常被覆盖。\n */\n private scheduleResetTableBodyScrollTop(): void {\n // 多次尝试:覆盖 nz-table / CDK 虚拟滚动异步改写 scrollTop\n const delays = [0, 50, 100];\n delays.forEach((ms, index) => {\n setTimeout(() => {\n this.resetTableBodyScrollTop();\n if (index === delays.length - 1) {\n this.pendingResetScrollTop = false;\n }\n }, ms);\n });\n }\n\n private flushResetTableBodyScrollTop(): void {\n if (!this.pendingResetScrollTop) {\n return;\n }\n this.resetTableBodyScrollTop();\n }\n\n /** 未手动传 virtualItemSize 时,从已渲染行测量真实高度 */\n measureVirtualItemSize(force = false): boolean {\n if (this.virtualItemSize != null && this.virtualItemSize > 0 && !force) {\n return false;\n }\n const viewport =\n this.nzTableComponent && this.nzTableComponent.cdkVirtualScrollViewport;\n const tableBody =\n this.nzTableComponent &&\n (this.nzTableComponent.tableBodyNativeElement as HTMLElement);\n const row =\n (viewport &&\n ((viewport.elementRef.nativeElement as HTMLElement).querySelector(\n \"tr.hd-table-virtual-row\",\n ) as HTMLElement)) ||\n (tableBody && (tableBody.querySelector(\"tbody tr\") as HTMLElement));\n if (!row || row.offsetHeight <= 0) {\n return false;\n }\n const height = row.offsetHeight;\n if (height === this.measuredVirtualItemSize) {\n return false;\n }\n this.measuredVirtualItemSize = height;\n return true;\n }\n\n // 设置列点击取消\n cancelDropdown(): void {\n this.isDropdownVisible = false;\n this.hideListNodes = JSON.parse(JSON.stringify(this.cancelHideListNodes));\n this.nowListNodes = JSON.parse(JSON.stringify(this.cancelNowListNodes));\n this.cdr.markForCheck();\n }\n\n // 点击触发设置列\n confirmDropdown(): void {\n // 临时存放下,取消的时候恢复原来的状态 深拷贝下对象数组\n this.cancelHideListNodes = JSON.parse(JSON.stringify(this.hideListNodes));\n this.cancelNowListNodes = JSON.parse(JSON.stringify(this.nowListNodes));\n this.isDropdownVisible = true;\n this.cdr.markForCheck();\n }\n\n submitGrids() {\n this.tableCacheOption.cols = [];\n this.nowListNodes.forEach((item) => {\n this.tableCacheOption.cols.push(item.title);\n });\n this.saveTableCacheOption();\n this.initTable();\n this.isDropdownVisible = false;\n this.cdr.markForCheck();\n }\n\n // 从缓存设置列\n setCols() {\n this.showListNodes = false;\n this.nowListNodes = [];\n this.hideListNodes = [];\n if (this.hasColsCache()) {\n let { notIncols, incols } = this.tableColsCache.reduce(\n (acc, item) => {\n if (this.tableCacheOption.cols.includes(item.title)) {\n acc.incols.push(item);\n } else {\n acc.notIncols.push(item);\n }\n return acc;\n },\n { notIncols: [], incols: [] },\n );\n incols.sort((a, b) => {\n return (\n this.tableCacheOption.cols.indexOf(a.title) -\n this.tableCacheOption.cols.indexOf(b.title)\n );\n });\n this.tableCols = incols.concat(notIncols);\n }\n\n this.tableCols.forEach((element, index) => {\n if (this.hasColsCache()) {\n element.isShow = this.tableCacheOption.cols.includes(element.title)\n ? true\n : false;\n if (element.isShow) {\n this.nowListNodes.push({\n title: element.title,\n key: element.title,\n disabled: element.fixed ? true : false,\n // selectable: false,\n checked: this.tableCacheOption.cols.includes(element.title)\n ? true\n : false,\n });\n } else {\n this.hideListNodes.push({\n title: element.title,\n key: element.title,\n disabled: element.fixed ? true : false,\n // selectable: false,\n checked: this.tableCacheOption.cols.includes(element.title)\n ? true\n : false,\n });\n }\n } else {\n element.isShow = true;\n this.nowListNodes.push({\n title: element.title,\n key: element.title,\n checked: true,\n // selectable: false,\n disabled: element.fixed ? true : false,\n });\n }\n });\n\n // 调整列宽为缓存宽度\n if (\n this.tableCacheOption &&\n this.tableCacheOption.colWidths &&\n this.tableCacheOption.colWidths.size !== 0\n ) {\n this.tableCols.forEach((col) => {\n if (this.tableCacheOption.colWidths.has(col.title)) {\n col.width = this.tableCacheOption.colWidths.get(col.title);\n }\n });\n }\n\n this.dealCols();\n setTimeout(() => {\n this.showListNodes = true;\n }, 0);\n }\n\n // 拖拽操作\n beforeDrop = (arg: NzFormatBeforeDropEvent): Observable<boolean> => {\n if (\n arg.node.origin.disabled ||\n !arg.dragNode.origin.checked ||\n arg.pos === 0\n ) {\n return of(false);\n } else {\n let node: TreeGrid = new TreeGrid();\n node.checked = arg.dragNode.origin.checked;\n node.disabled = arg.dragNode.origin.disabled;\n node.expanded = arg.dragNode.origin.expanded;\n node.isLeaf = arg.dragNode.origin.isLeaf;\n node.key = arg.dragNode.origin.key;\n node.selectable = arg.dragNode.origin.selectable;\n node.title = arg.dragNode.origin.title;\n // 拖拽元素下标\n let dragNodeIndex = this.nowListNodes.findIndex((item) => {\n return item.title == arg.dragNode.origin.title;\n });\n // 目标位置的下标\n let nodeIndex =\n this.nowListNodes.findIndex((item) => {\n return item.title == arg.node.origin.title;\n }) + (arg.pos === -1 ? 0 : arg.pos);\n this.nowListNodes.splice(nodeIndex, 0, node);\n this.nowListNodes.splice(\n nodeIndex >= dragNodeIndex ? dragNodeIndex : dragNodeIndex + 1,\n 1,\n );\n return of(true).pipe(delay(100));\n }\n };\n\n moveElementNearby(arr, elementToMoveTitle, targetElementTitle, pos) {\n const tmpArray = JSON.parse(JSON.stringify(arr));\n const targetIndex = tmpArray.findIndex(\n (item) => item.title === targetElementTitle,\n );\n const elementIndex = tmpArray.findIndex(\n (item) => item.title === elementToMoveTitle,\n );\n const newIndex = pos < 0 ? targetIndex + pos : targetIndex;\n // 移除目标元素,并插入到新的位置\n const removedElement = tmpArray.splice(elementIndex, 1);\n tmpArray.splice(newIndex + 1, 0, removedElement[0]);\n return tmpArray;\n }\n\n // 勾选操作\n checkAction(event: NzFormatEmitEvent): void {\n // 勾选只有在hideListNodes,取消勾选只有在nowListNodes\n if (event.node.origin.checked) {\n let node: TreeGrid = new TreeGrid();\n node = this.hideListNodes.find((item) => {\n return item.title === event.node.origin.title;\n });\n node.checked = true;\n // 找到第一个fixed属性为right的title,找到插入元素的位置\n let title = null;\n for (let i = this.tableColsCache.length - 1; i >= 0; i--) {\n if (this.tableColsCache[i].fixed === \"right\") {\n title = this.tableColsCache[i].title;\n break;\n }\n }\n let temporaryNodeList = this.nowListNodes.slice(0);\n if (!title) {\n temporaryNodeList.push(node);\n } else {\n const index = this.nowListNodes.findIndex(\n (node) => node.title === title,\n );\n temporaryNodeList.splice(index, 0, node);\n }\n this.nowListNodes = temporaryNodeList;\n this.hideListNodes = this.hideListNodes.filter((item) => {\n return item.title !== event.node.origin.title;\n });\n } else {\n // if (this.hideListNodes.length === 0 && this.tableCacheOption && this.tableCacheOption.cols) {\n // this.hideListNodes = this.getHideListNodes();\n // }\n let temporaryNodeList = this.hideListNodes.slice(0);\n this.nowListNodes.forEach((item) => {\n if (item.title === event.node.origin.title) {\n const innerItem = JSON.parse(JSON.stringify(item));\n innerItem.checked = false;\n temporaryNodeList.push(innerItem);\n }\n });\n this.hideListNodes = temporaryNodeList;\n\n // 为了防止未选择的数组顺序因为push方法而改变,通过初始数据获取显示的字段列表\n this.nowListNodes = this.nowListNodes.filter((item) => {\n return item.title !== event.node.origin.title;\n });\n }\n this.cdr.markForCheck();\n }\n\n // 防止未选择的数组顺序因为push方法而改变,从初始数据获取隐藏未显示的字段列表\n getHideListNodes(): Array<TreeGrid> {\n let temporaryNodeList: Array<TreeGrid> = [];\n // 从tableColsCache里面找没有在storage里面出现的字段,组成hideList\n this.tableColsCache.forEach((item) => {\n if (!this.tableCacheOption.cols.includes(item.title)) {\n let nodeItem: TreeGrid = new TreeGrid();\n nodeItem.title = item.title;\n nodeItem.key = item.title;\n nodeItem.disabled = item.fixed ? true : false;\n nodeItem.checked = false;\n temporaryNodeList.push(nodeItem);\n }\n });\n return temporaryNodeList;\n }\n\n dealCols() {\n if (!this.tableCols[0].minWidth) {\n this.tableCols.forEach((item) => {\n const span = document.createElement(\"span\");\n span.style.visibility = \"hidden\";\n span.style.position = \"absolute\";\n span.style.whiteSpace = \"nowrap\";\n span.style.fontSize = \"14px\";\n span.style.display = \"inline-block\"; // 将样式修改为 inline-block\n span.innerText = item.title;\n document.body.appendChild(span);\n item.minWidth = span.offsetWidth + 16;\n span.style.display = \"none\";\n document.body.removeChild(span);\n });\n }\n // 处理左右吸附的数据在数组中的位置\n const leftFixedCols = this.tableCols.filter((col) => col.fixed === \"left\");\n const rightFixedCols = this.tableCols.filter(\n (col) => col.fixed === \"right\",\n );\n const normalCols = this.tableCols.filter((col) => !col.fixed);\n const resultCols = leftFixedCols.concat(normalCols).concat(rightFixedCols);\n this.tableCols = resultCols;\n if (!this.tableColsCache || this.tableColsCache.length === 0) {\n // 缓存一下表格的数据\n this.tableColsCache = [...this.tableCols];\n }\n }\n\n normalizeTableCacheOption() {\n if (!this.tableCacheOption.colWidths) {\n this.tableCacheOption.colWidths = new Map<string, number>();\n } else if (!(this.tableCacheOption.colWidths instanceof Map)) {\n const colWidths = new Map<string, number>();\n Object.keys(this.tableCacheOption.colWidths).forEach((key) => {\n colWidths.set(key, (this.tableCacheOption.colWidths as any)[key]);\n });\n this.tableCacheOption.colWidths = colWidths;\n }\n }\n\n private hasColsCache(): boolean {\n return !!(\n this.tableCacheOption &&\n this.tableCacheOption.cols &&\n this.tableCacheOption.cols.length > 0\n );\n }\n\n saveTableCacheOption() {\n this.localforage.setItem(\n \"hd-table_\" +\n this.userSession.userCode +\n \"_\" +\n this.localtionTmp +\n \"_\" +\n this.uuid,\n this.tableCacheOption,\n );\n }\n\n judgeRepeatCols() {\n for (let i = 0; i < this.tableCols.length; i++) {\n for (let j = i + 1; j < this.tableCols.length; j++) {\n if (this.tableCols[i].title === this.tableCols[j].title) {\n throw `hd-table组件中列名 ${this.tableCols[i].title} 重复`;\n }\n }\n }\n return true;\n }\n\n onResize({ width }: NzResizeEvent, col: HdTableColumn): void {\n this.normalizeTableCacheOption();\n let tempWidth = 0;\n if (width > col.minWidth) {\n tempWidth = width;\n } else {\n tempWidth = col.minWidth;\n }\n this.tableCacheOption.colWidths.set(col.title, tempWidth);\n this.saveTableCacheOption();\n this.tableCols = this.tableCols.map((e) =>\n e.title === col.title ? { ...e, width: tempWidth } : e,\n );\n this.dealScroll();\n this.cdr.markForCheck();\n setTimeout(() => this.syncTotalFooterWithBody());\n }\n\n dealOperateBtn() {\n let operateCol = this.tableCols.find((col) => col.title === \"操作\") || null;\n if (operateCol) {\n let textStr = \"\";\n operateCol.btnList.forEach((btn) => {\n if (!btn.isRepeat) {\n textStr += typeof btn.name === \"function\" ? \"操作\" : btn.name;\n }\n });\n\n const span = document.createElement(\"a\");\n span.style.visibility = \"hidden\";\n span.style.position = \"absolute\";\n span.style.whiteSpace = \"nowrap\";\n span.style.fontSize = \"14px\";\n span.style.display = \"inline-block\"; // 将样式修改为 inline-block\n span.innerText = textStr;\n document.body.appendChild(span);\n operateCol.width =\n span.offsetWidth +\n (operateCol.btnList.filter((item) => !item.isRepeat).length - 1) * 4 +\n 16;\n span.style.display = \"none\";\n document.body.removeChild(span);\n }\n }\n\n triggerEvent(fn: any, event: any) {\n if (fn) {\n fn(event);\n }\n }\n\n needShowConfirm(btn: OperateBtn, data: any): boolean {\n if (typeof btn.showConfirm === \"function\") {\n return btn.showConfirm(data);\n }\n return !!btn.showConfirm;\n }\n\n getBtnName(btn: OperateBtn, data: any): string {\n if (typeof btn.name === \"function\") {\n return btn.name(data) || \"\";\n }\n return btn.name != null ? String(btn.name) : \"\";\n }\n\n isDangerBtn(btn: OperateBtn, data: any): boolean {\n return this.getBtnName(btn, data) === \"删除\";\n }\n\n /** 虚拟滚动开启时使用视口最大高度 */\n private getVirtualScrollY(maxOffset: number): string {\n return `calc(100vh - ${maxOffset}px)`;\n }\n\n private hasTableData(): boolean {\n return !!(\n this.tableData &&\n this.tableData.content &&\n this.tableData.content.length\n );\n }\n\n /**\n * 列总宽超出外层容器才启用横向 scroll。\n * 以 dealScroll 累计的声明列宽为准,不用 DOM 自然测宽(内容不截断会偏大,导致列能放下也开横滚)。\n */\n private resolveScrollX(colWidth: number): string | null {\n const autoScroll = resolveAutoTableScroll(\n this.nzTableComponent,\n this.hasTableData(),\n colWidth,\n );\n return autoScroll ? autoScroll.x : null;\n }\n\n /** 表格渲染后按实际容器宽度校正横向 scroll(只改 x,避免触发表头结构变化) */\n private syncHorizontalScroll(): void {\n const scrollX = this.resolveScrollX(this.tableColWidthTotal);\n const currentY = this.scroll ? this.scroll.y : null;\n if (\n this.scroll &&\n this.scroll.x === scrollX &&\n this.scroll.y === currentY\n ) {\n setTimeout(() => this.syncTotalFooterWithBody());\n return;\n }\n // 保持 y 不变,防止运行中拆/合 header 导致横向同步失效\n this.scroll = { x: scrollX, y: currentY };\n this.cdr.markForCheck();\n setTimeout(() => this.syncHeaderBodyScrollLeft());\n }\n\n /** 手动把表体横向滚动同步到表头 / 合计 footer(兜底 ng-zorro 监听丢失的情况) */\n private syncHeaderBodyScrollLeft(): void {\n if (!this.nzTableComponent) {\n return;\n }\n const header = (this.nzTableComponent as any).tableHeaderNativeElement as\n | HTMLElement\n | null;\n const body = this.getTableBodyScrollEl();\n if (this.scroll && this.scroll.x && header && body) {\n if (header.scrollLeft !== body.scrollLeft) {\n header.scrollLeft = body.scrollLeft;\n }\n }\n this.syncTotalFooterWithBody();\n }\n\n /** 取表体横向滚动容器(虚拟滚动优先 viewport) */\n private getTableBodyScrollEl(): HTMLElement | null {\n if (!this.nzTableComponent) {\n return null;\n }\n const mix = (this.nzTableComponent as any).mixTableBodyNativeElement as\n | HTMLElement\n | null;\n if (mix) {\n return mix;\n }\n const host = this.hostEl && (this.hostEl.nativeElement as HTMLElement);\n if (!host) {\n return null;\n }\n return (\n (host.querySelector(\n \"cdk-virtual-scroll-viewport.ant-table-body\",\n ) as HTMLElement) ||\n (host.querySelector(\".ant-table-body\") as HTMLElement) ||\n null\n );\n }\n\n private getTotalFooterScrollEl(): HTMLElement | null {\n const host = this.hostEl && (this.hostEl.nativeElement as HTMLElement);\n return host\n ? (host.querySelector(\".hd-table-total-footer\") as HTMLElement)\n : null;\n }\n\n /** 表体是否出现纵向滚动条(含滚动条槽宽) */\n private bodyHasVerticalScrollbar(body: HTMLElement): boolean {\n if (!body) {\n return false;\n }\n return (\n body.scrollHeight > body.clientHeight + 1 ||\n body.offsetWidth - body.clientWidth > 1\n );\n }\n\n /**\n * 合计 footer 与表体联动:\n * - fluid(列未撑满):不横滚、不测宽,表宽 100% 与表体同比例拉伸;\n * - fixed(有 scroll.x):同步 scrollLeft;\n * - 仅当表体有竖滚条时预留右侧槽,行少无竖滚时不占位。\n */\n private syncTotalFooterWithBody(): void {\n if (!this.showTableTotal) {\n this.unbindTotalFooterScrollSync();\n if (this.totalFooterNeedYGutter) {\n this.totalFooterNeedYGutter = false;\n this.cdr.markForCheck();\n }\n return;\n }\n const footer = this.getTotalFooterScrollEl();\n const body = this.getTableBodyScrollEl();\n if (!footer) {\n if (this.totalFooterSyncRetry < 10) {\n this.totalFooterSyncRetry++;\n setTimeout(() => this.syncTotalFooterWithBody(), 50);\n }\n return;\n }\n this.totalFooterSyncRetry = 0;\n const needYGutter = !!(body && this.bodyHasVerticalScrollbar(body));\n if (this.totalFooterNeedYGutter !== needYGutter) {\n this.totalFooterNeedYGutter = needYGutter;\n this.cdr.markForCheck();\n }\n if (this.isTotalFooterFluid) {\n this.unbindTotalFooterScrollSync();\n footer.scrollLeft = 0;\n return;\n }\n if (body) {\n this.syncTotalFooterScrollLeft(body.scrollLeft);\n this.bindTotalFooterScrollSync(body);\n }\n }\n\n private syncTotalFooterScrollLeft(scrollLeft: number): void {\n const footer = this.getTotalFooterScrollEl();\n if (footer && footer.scrollLeft !== scrollLeft) {\n footer.scrollLeft = scrollLeft;\n }\n }\n\n private bindTotalFooterScrollSync(body: HTMLElement): void {\n if (!this.showTableTotal || !body || this.isTotalFooterFluid) {\n return;\n }\n if (\n this.totalFooterScrollBoundBody === body &&\n this.totalFooterScrollHandler\n ) {\n return;\n }\n this.unbindTotalFooterScrollSync();\n this.totalFooterScrollBoundBody = body;\n this.totalFooterScrollHandler = () => {\n this.syncTotalFooterScrollLeft(body.scrollLeft);\n };\n body.addEventListener(\"scroll\", this.totalFooterScrollHandler, {\n passive: true,\n } as any);\n }\n\n private unbindTotalFooterScrollSync(): void {\n if (this.totalFooterScrollBoundBody && this.totalFooterScrollHandler) {\n this.totalFooterScrollBoundBody.removeEventListener(\n \"scroll\",\n this.totalFooterScrollHandler,\n );\n }\n this.totalFooterScrollBoundBody = null;\n this.totalFooterScrollHandler = null;\n }\n\n /**\n * 监听窗口 / 容器宽度变化:重新判定 scroll.x(fluid↔fixed)与合计右侧竖滚槽,\n * 避免拉宽/缩窄屏幕后合计行宽与表体错位。\n */\n private bindViewportResizeSync(): void {\n this.boundOnViewportResize = () => this.scheduleViewportScrollSync();\n if (typeof window !== \"undefined\") {\n window.addEventListener(\"resize\", this.boundOnViewportResize);\n }\n const RO =\n typeof window !== \"undefined\" ? (window as any).ResizeObserver : null;\n if (RO && this.hostEl && this.hostEl.nativeElement) {\n this.hostResizeObserver = new RO(() => this.scheduleViewportScrollSync());\n this.hostResizeObserver.observe(this.hostEl.nativeElement);\n }\n }\n\n private unbindViewportResizeSync(): void {\n if (this.boundOnViewportResize && typeof window !== \"undefined\") {\n window.removeEventListener(\"resize\", this.boundOnViewportResize);\n }\n this.boundOnViewportResize = null;\n if (this.hostResizeObserver) {\n this.hostResizeObserver.disconnect();\n this.hostResizeObserver = null;\n }\n if (this.viewportResizeTimer != null) {\n clearTimeout(this.viewportResizeTimer);\n this.viewportResizeTimer = null;\n }\n }\n\n private scheduleViewportScrollSync(): void {\n if (this.viewportResizeTimer != null) {\n clearTimeout(this.viewportResizeTimer);\n }\n this.viewportResizeTimer = setTimeout(() => {\n this.viewportResizeTimer = null;\n if (!this.tableCols || !this.tableCols.length) {\n return;\n }\n this.syncHorizontalScroll();\n // 等表体布局稳定后再校合计竖滚槽 / 横滚同步\n setTimeout(() => this.syncTotalFooterWithBody(), 50);\n }, 100);\n }\n\n dealScroll() {\n let colWidth = 0;\n if (this.showSelected) {\n colWidth += 40;\n }\n if (this.showTableTotal) {\n colWidth += this.lineNumberColWidth; // 序号列(固定宽,不随位数变化)\n }\n this.tableCols.forEach((item) => {\n if (!item.width) {\n item.width = ColWidth.fixColWidth;\n }\n if (item.isShow) {\n item.fixedWidth = colWidth;\n colWidth += item.width;\n }\n });\n\n // 右侧固定列:从右往左累计偏移,避免多列都 right:0 互相遮挡\n let rightOffset = 0;\n for (let i = this.tableCols.length - 1; i >= 0; i--) {\n const item = this.tableCols[i];\n if (!item.isShow) {\n continue;\n }\n if (item.fixed === \"right\") {\n item.fixedRightWidth = rightOffset;\n rightOffset += item.width;\n } else {\n item.fixedRightWidth = 0;\n }\n }\n\n this.tableColWidthTotal = colWidth;\n const maxOffset = this.getScrollYMaxOffset();\n const useVirtual = this.useVirtualScroll;\n const scrollX = this.resolveScrollX(colWidth);\n\n if (this.virtualScroll && !useVirtual) {\n this.scroll = {\n x: scrollX,\n y: null,\n };\n return;\n }\n\n if (!this.virtualScroll) {\n this.scroll = {\n x: scrollX,\n y: `calc(100vh - ${maxOffset}px)`,\n };\n return;\n }\n\n this.scroll = {\n x: scrollX,\n y: this.getVirtualScrollY(maxOffset),\n };\n }\n\n // 表格勾选逻辑\n currentPageDataChange($event: any): void {\n this.listOfDisplayData = $event;\n this.refreshStatus();\n if (!this.isCrossPageSelectLocal) {\n this.resetStatus();\n }\n this.cdr.markForCheck();\n }\n\n search(reset: boolean) {\n if (!this.pagination) {\n return;\n }\n // 前端分页:只同步页码/条数,不触发父组件查询\n if (this.frontPagination) {\n if (reset) {\n this.tablePageIndex = 1;\n this.tablePageSizeChange.emit(this.tablePageSize);\n } else {\n this.tablePageIndexChange.emit(this.tablePageIndex);\n }\n this.tableCacheOption.pageSize = this.tablePageSize;\n this.saveTableCacheOption();\n // 按当前页行数重算是否需要 scroll.y(末页数据少时去掉固定高度,避免留白)\n this.pendingResetScrollTop = true;\n this.applyTableScrollMode(false);\n this.scheduleResetTableBodyScrollTop();\n this.cdr.markForCheck();\n return;\n }\n this.tableCacheOption.pageSize = this.tablePageSize;\n this.saveTableCacheOption();\n if (reset) {\n this.tablePageSizeChange.emit(this.tablePageSize);\n this.tablePageSizeChangeEvent.emit(this.tablePageSize);\n } else {\n this.tablePageIndexChange.emit(this.tablePageIndex);\n // 触发父组件查询事件\n this.tableSearchEvent.emit(reset);\n }\n }\n\n /**\n * 底部合计:与 hd-detail-lines 相同,使用 TotalOption(insertIndex / insertValue)。\n * 开启后强制展示序号列,「合计」落在序号列下;\n * insertIndex 从 1 起对应可见数据列;未传 insertValue 时按该列 name 对 content 求和。\n */\n calculateTableTotal() {\n if (\n !this.showTableTotal ||\n !this.tableTotalOption ||\n !this.tableTotalOption.length\n ) {\n this.tableTotalOptionList = [];\n return;\n }\n const visibleCols = (this.tableCols || []).filter(\n (c) => c && c.isShow !== false,\n );\n // columnsNumber 含序号列(与 detail-lines 一致),数据槽位数 = columnsNumber - 1\n const configured = Number(this.columnsNumber);\n const columnNumber =\n configured > 1\n ? configured - 1\n : configured === 1\n ? 1\n : visibleCols.length;\n if (!columnNumber || columnNumber < 1) {\n this.tableTotalOptionList = [];\n return;\n }\n this.tableTotalOptionList = new Array(columnNumber).fill(\"\");\n const content =\n this.tableData && this.tableData.content ? this.tableData.content : [];\n this.tableTotalOption.forEach((item) => {\n if (item == null || !item.insertIndex || item.insertIndex < 1) {\n return;\n }\n let value: any = item.insertValue;\n // 未传 insertValue 时:按 insertIndex 对应可见列 name 自动求和\n if (value == null || value === \"\") {\n const col = visibleCols[item.insertIndex - 1];\n const field = col && typeof col.name === \"string\" ? col.name : null;\n if (!field) {\n return;\n }\n let sum = 0;\n let hasValue = false;\n content.forEach((row) => {\n const raw = row ? row[field] : null;\n if (raw == null || raw === \"\") {\n return;\n }\n const num = Number(raw);\n if (!isNaN(num)) {\n sum += num;\n hasValue = true;\n }\n });\n if (!hasValue) {\n return;\n }\n value = sum;\n }\n const colAtIndex = visibleCols[item.insertIndex - 1];\n this.tableTotalOptionList[item.insertIndex - 1] = {\n value,\n align: item.align || (colAtIndex && colAtIndex.align) || \"left\",\n showDecimal: item.showDecimal || false,\n preserveNumber:\n item.preserveNumber != null ? item.preserveNumber : 2,\n isHide: item.isHide || false,\n };\n });\n }\n\n private getTableTotalCellMeta(col: HdTableColumn, colIndex: number): any {\n if (!col || !this.tableTotalOptionList || !this.tableTotalOptionList.length) {\n return null;\n }\n let visibleIndex = -1;\n for (let i = 0; i <= colIndex; i++) {\n const c = this.tableCols[i];\n if (c && c.isShow !== false) {\n visibleIndex++;\n }\n }\n if (visibleIndex < 0 || visibleIndex >= this.tableTotalOptionList.length) {\n return null;\n }\n const meta = this.tableTotalOptionList[visibleIndex];\n return meta && typeof meta === \"object\" ? meta : null;\n }\n\n /** 合计单元格展示文案(对齐 detail-lines 小数规则) */\n getTableTotalCellValue(col: HdTableColumn, colIndex: number): any {\n const meta = this.getTableTotalCellMeta(col, colIndex);\n if (!meta || meta.isHide) {\n return \"\";\n }\n const value = meta.value;\n if (!(value || value === 0)) {\n return \"\";\n }\n const preserve =\n meta.preserveNumber != null ? Number(meta.preserveNumber) : 2;\n if (value % 1 === 0 && !meta.showDecimal) {\n return value;\n }\n const factor = Math.pow(10, preserve);\n return (Math.round(Number(value) * factor) / factor).toFixed(preserve);\n }\n\n getTableTotalCellAlign(col: HdTableColumn, colIndex: number): string {\n const meta = this.getTableTotalCellMeta(col, colIndex);\n const align =\n (meta && meta.align) || (col && col.align) || \"left\";\n if (align === \"right\" || align === \"center\" || align === \"left\") {\n return align;\n }\n return \"left\";\n }\n\n /** 底部「共 n 条」:非分页/前端分页用 content.length,服务端分页用 totalElements */\n getTableTotalCount(): number {\n if (!this.tableData) {\n return 0;\n }\n if (!this.pagination || this.frontPagination) {\n return this.tableData.content ? this.tableData.content.length : 0;\n }\n return this.tableData.totalElements != null\n ? this.tableData.totalElements\n : 0;\n }\n\n resetStatus() {\n this.isAllDisplayDataChecked = false;\n this.isIndeterminate = false;\n // 先显式置 false,避免 nz-checkbox 内部状态与 mapOfCheckedId 不同步(虚拟滚动复用行时常见)\n Object.keys(this.mapOfCheckList).forEach((key) => {\n this.mapOfCheckedId[key] = false;\n });\n this.listOfDisplayData.forEach((item) => {\n const key = item[this.selectField];\n if (key != null) {\n this.mapOfCheckedId[key] = false;\n }\n });\n this.mapOfCheckedId = {};\n this.mapOfCheckList = {};\n this.selectEvent.emit([]);\n this.cdr.markForCheck();\n }\n\n refreshStatus(event: boolean = false, data: any = null): void {\n if (data) {\n // 禁用行不允许勾选;取消勾选仍允许(例如数据变更前已勾选)\n if (event && this.isSelectDisabled(data)) {\n this.cdr.markForCheck();\n return;\n }\n this.mapOfCheckedId[data[this.selectField]] = event;\n if (event) {\n !this.mapOfCheckList[data[this.selectField]] &&\n (this.mapOfCheckList[data[this.selectField]] = data);\n } else {\n this.mapOfCheckList[data[this.selectField]] &&\n delete this.mapOfCheckList[data[this.selectField]];\n }\n }\n const selectableList = this.listOfDisplayData.filter(\n (item) => !this.isSelectDisabled(item),\n );\n this.isAllDisplayDataChecked =\n selectableList.length > 0 &&\n selectableList.every((item) => this.mapOfCheckedId[item[this.selectField]]);\n this.isIndeterminate =\n selectableList.some(\n (item) => this.mapOfCheckedId[item[this.selectField]],\n ) && !this.isAllDisplayDataChecked;\n // 触发select事件\n if (this.selectEvent) {\n const selectedList: Array<any> = Object.values(this.mapOfCheckList);\n this.selectEvent.emit(selectedList);\n }\n // 如果数据为空,则清空勾选标识\n if (this.tableData.content.length === 0) {\n this.isAllDisplayDataChecked = false;\n }\n this.cdr.markForCheck();\n }\n\n checkAll(value: boolean): void {\n this.listOfDisplayData.forEach((item) => {\n // 全选/取消全选均跳过禁用行(禁用行保持原勾选状态)\n if (this.isSelectDisabled(item)) {\n return;\n }\n if (value) {\n !this.mapOfCheckList[item[this.selectField]] &&\n (this.mapOfCheckList[item[this.selectField]] = item);\n } else {\n this.mapOfCheckList[item[this.selectField]] &&\n delete this.mapOfCheckList[item[this.selectField]];\n }\n\n this.mapOfCheckedId[item[this.selectField]] = value;\n });\n this.refreshStatus();\n this.cdr.markForCheck();\n }\n\n /** 当前行是否禁用勾选 */\n isSelectDisabled(data: any): boolean {\n return !!(\n this.selectDisabledField &&\n data &&\n data[this.selectDisabledField] === true\n );\n }\n\n /** 当前行是否失效 */\n isInvalidRow(data: any): boolean {\n return !!(\n this.rowInvalidField &&\n data &&\n data[this.rowInvalidField] === true\n );\n }\n\n /**\n * 列文字颜色:color 为函数时按行计算(用于某一行某一列标红),否则整列同色。\n */\n resolveCellColor(col: HdTableColumn, data: any): string {\n if (!col || col.color == null || col.color === \"\") {\n return null;\n }\n if (typeof col.color === \"function\") {\n const value = col.color(data);\n return value || null;\n }\n return col.color;\n }\n\n /** 可点击单元格颜色:空值固定灰,否则按列 color */\n getLinkCellColor(col: HdTableColumn, data: any, isEmpty: boolean): string {\n if (isEmpty) {\n return \"#2A3634\";\n }\n return this.resolveCellColor(col, data);\n }\n\n /** 普通文本单元格颜色:失效行统一灰,否则用列配置 color */\n getPlainCellColor(col: HdTableColumn, data: any): string {\n if (this.isInvalidRow(data)) {\n return \"#868A9C\";\n }\n return this.resolveCellColor(col, data);\n }\n\n judgeColEmpty(str: any) {\n if (str || str === 0) {\n return str;\n } else {\n return \"<空>\";\n }\n }\n\n getStateField(col: HdTableColumn): string {\n if (col.isState) {\n return col.name as string;\n }\n return col.stateField || \"state\";\n }\n\n /** 字段值后是否展示竖线行号 */\n hasRowNo(col: HdTableColumn): boolean {\n return !!(col && (col.rowNo === true || (typeof col.rowNo === \"string\" && col.rowNo)));\n }\n\n /**\n * 行号文案。rowNo 为字段名时取行数据;为 true 时按当前页序号(跨页连续,从 1 开始)。\n */\n getRowNoText(col: HdTableColumn, data: any, index: number): string {\n if (!this.hasRowNo(col)) {\n return \"\";\n }\n if (typeof col.rowNo === \"string\") {\n const value = data ? data[col.rowNo] : null;\n if (value == null || value === \"\") {\n return \"\";\n }\n return String(value);\n }\n const page = Number(this.tablePageIndex) > 0 ? Number(this.tablePageIndex) : 1;\n const size = Number(this.tablePageSize) > 0 ? Number(this.tablePageSize) : 0;\n const rowIndex = Number(index) >= 0 ? Number(index) : 0;\n return String((page - 1) * size + rowIndex + 1);\n }\n\n /** 表头「配送单号 | 行」拆成短竖线,避免字符 | 拉满行高 */\n getTitleParts(col: HdTableColumn): Array<string> {\n if (!this.hasRowNo(col) || !col || !col.title || String(col.title).indexOf(\"|\") < 0) {\n return null;\n }\n const raw = String(col.title).split(\"|\");\n if (raw.length < 2) {\n return null;\n }\n return [raw[0].trim(), raw.slice(1).join(\"|\").trim()];\n }\n\n /** 是否显示编辑笔图标(有 editType 时走行内控件,不再显示笔) */\n isEditable(col: HdTableColumn, data: any): boolean {\n if (!col || this.hasInlineEdit(col)) {\n return false;\n }\n if (col.editable == null || col.editable === false) {\n return false;\n }\n if (typeof col.editable === \"function\") {\n return !!col.editable(data);\n }\n return !!col.editable;\n }\n\n /** 点击编辑笔,回调父组件传入的 edit */\n onEditClick(event: Event, col: HdTableColumn, data: any): void {\n if (event) {\n event.preventDefault();\n event.stopPropagation();\n }\n this.triggerEvent(col.edit || null, data);\n }\n\n /** 列是否配置了可用的行内编辑(name 必须是 string) */\n hasInlineEdit(col: HdTableColumn): boolean {\n if (!col || !col.editType) {\n return false;\n }\n if (typeof col.name !== \"string\" || !col.name) {\n console.warn(\n \"[hd-table] editType 要求 name 为 string,列「\" +\n (col.title || \"\") +\n \"」已回退只读\",\n );\n return false;\n }\n return true;\n }\n\n isEditDisabled(col: HdTableColumn, data: any): boolean {\n if (!col || col.editDisabled == null || col.editDisabled === false) {\n return false;\n }\n if (typeof col.editDisabled === \"function\") {\n return !!col.editDisabled(data);\n }\n return !!col.editDisabled;\n }\n\n getSelectList(col: HdTableColumn, data: any): Array<any> {\n if (!col || !col.selectOption) {\n return [];\n }\n const opt = col.selectOption;\n if (opt.selectListName && data) {\n const list = data[opt.selectListName];\n return Array.isArray(list) ? list : [];\n }\n return Array.isArray(opt.selectList) ? opt.selectList : [];\n }\n\n getSelectOptionLabel(col: HdTableColumn, item: any): string {\n if (!col || !col.selectOption || !item) {\n return \"\";\n }\n const opt = col.selectOption;\n const value = item[opt.value];\n const label = item[opt.label];\n if (opt.showLabelAndValue || opt.hdShowItemCode) {\n return `[${value == null ? \"\" : value}]${label == null ? \"\" : label}`;\n }\n return label == null ? \"\" : String(label);\n }\n\n getInputNumberProp(\n col: HdTableColumn,\n key: \"min\" | \"max\" | \"step\" | \"precision\",\n fallback: number,\n ): number {\n if (!col || !col.inputNumber) {\n return fallback;\n }\n const val = col.inputNumber[key];\n return val != null ? Number(val) : fallback;\n }\n\n /** Input / InputNumber 变更:先记旧值再写回并通知父组件 */\n onCellChange(col: HdTableColumn, data: any, value: any): void {\n if (!this.hasInlineEdit(col) || !data) {\n return;\n }\n const name = col.name as string;\n const previousValue = data[name];\n data[name] = value;\n this.cellChange.emit({\n line: data,\n col,\n name,\n value,\n previousValue,\n });\n this.cdr.markForCheck();\n }\n\n /** Select 变更:双写 value + label,并带 previous* / option */\n onSelectChange(col: HdTableColumn, data: any, value: any): void {\n if (!this.hasInlineEdit(col) || !data) {\n return;\n }\n const name = col.name as string;\n const opt = col.selectOption;\n const labelField = opt && opt.label ? opt.label : null;\n const previousValue = data[name];\n const previousLabel = labelField ? data[labelField] : undefined;\n const list = this.getSelectList(col, data);\n const previousOption =\n previousValue == null || !opt\n ? null\n : list.find((item) => item && item[opt.value] === previousValue) ||\n null;\n const option =\n value == null || !opt\n ? null\n : list.find((item) => item && item[opt.value] === value) || null;\n\n data[name] = value;\n let label: any = undefined;\n if (labelField) {\n label = option ? option[opt.label] : null;\n data[labelField] = label;\n }\n\n this.cellChange.emit({\n line: data,\n col,\n name,\n value,\n previousValue,\n label,\n previousLabel,\n option,\n previousOption,\n });\n this.cdr.markForCheck();\n }\n}\n","import { CommonModule } from '@angular/common';\nimport { NgModule, NO_ERRORS_SCHEMA } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { NgZorroAntdModule } from 'ng-zorro-antd';\nimport { NzDropDownModule } from 'ng-zorro-antd/dropdown';\nimport { NzIconModule } from 'ng-zorro-antd/icon';\nimport { NzPopconfirmModule } from 'ng-zorro-antd/popconfirm';\nimport { NzResizableModule } from 'ng-zorro-antd/resizable';\nimport { NzTableModule } from 'ng-zorro-antd/table';\nimport { NzToolTipModule } from 'ng-zorro-antd/tooltip';\nimport { NzTreeModule } from 'ng-zorro-antd/tree';\nimport { HdButtonGroupModule } from '../hd-button-group/hd-button-group.module';\nimport { HdButtonModule } from '../hd-button/hd-button.module';\nimport { HdSpaceModule } from '../hd-space/hd-space.module';\nimport { HdStatusModule } from '../hd-status/hd-status.module';\nimport { CommonSessionService } from '../service/common-session.service';\nimport { HdTableCellPipe } from './hd-table-cell.pipe';\nimport { HdTableComponent } from './hd-table.component';\n@NgModule({\n imports: [\n CommonModule,\n FormsModule,\n NgZorroAntdModule,\n NzTableModule,\n HdSpaceModule,\n HdStatusModule,\n HdButtonModule,\n HdButtonGroupModule,\n NzToolTipModule,\n NzPopconfirmModule,\n NzResizableModule,\n NzDropDownModule,\n NzTreeModule,\n NzIconModule\n ],\n declarations: [HdTableComponent, HdTableCellPipe],\n providers: [CommonSessionService],\n exports: [HdTableComponent],\n schemas: [NO_ERRORS_SCHEMA]\n})\nexport class HdTableModule { }\n","import { Component, EventEmitter, Input, Output } from \"@angular/core\";\nimport { InputBoolean } from \"ng-zorro-antd\";\n\n@Component({\n selector: \"hd-tip\",\n templateUrl: \"./hd-tip.component.html\",\n styleUrls: [\"./hd-tip.component.less\"],\n})\nexport class HdTipComponent {\n @Input() showIcon: boolean = true;\n @Input() fontSize: number;\n @Input() title: string;\n /** 是否在右侧展示展开/收起,默认关闭 */\n @Input() @InputBoolean() showCollapse: boolean = false;\n /** 当前是否展开(父组件可用 [(expanded)] 控制其它区块显隐) */\n @Input() @InputBoolean() expanded: boolean = true;\n @Output() expandedChange = new EventEmitter<boolean>();\n\n /** 展开(供父组件 ViewChild 调用) */\n expand(): void {\n this.setExpanded(true);\n }\n\n /** 收起(供父组件 ViewChild 调用) */\n collapse(): void {\n this.setExpanded(false);\n }\n\n /** 切换展开/收起(供父组件 ViewChild 或点击触发) */\n toggle(): void {\n this.setExpanded(!this.expanded);\n }\n\n private setExpanded(value: boolean): void {\n if (this.expanded === value) {\n return;\n }\n this.expanded = value;\n this.expandedChange.emit(this.expanded);\n }\n}\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { HdTipComponent } from './hd-tip.component';\nimport {NgZorroAntdModule} from 'ng-zorro-antd';\n\n@NgModule({\n imports: [\n CommonModule,\n NgZorroAntdModule\n ],\n exports: [HdTipComponent],\n declarations: [HdTipComponent]\n})\nexport class HdTipModule { }\n","import {\n Component,\n EventEmitter,\n Input,\n OnInit,\n Output,\n} from \"@angular/core\";\nimport { HdAccessoryFile, HdAccessoryGroup } from \"./hd-accessory-list.service\";\n\n@Component({\n selector: \"hd-accessory-list\",\n templateUrl: \"./hd-accessory-list.component.html\",\n styleUrls: [\"./hd-accessory-list.component.less\"],\n})\nexport class HdAccessoryListComponent implements OnInit {\n /** 分组列表:每项含 name + accessoryList */\n @Input() groups: Array<HdAccessoryGroup> = [];\n /** 分组标签后是否自动加冒号,默认 true */\n @Input() labelColon: boolean = true;\n /** 点击附件时是否默认 window.open 下载/查看,默认 true */\n @Input() autoOpen: boolean = true;\n\n /** 点击附件回调(在 autoOpen 之前触发) */\n @Output() fileClick = new EventEmitter<{\n group: HdAccessoryGroup;\n file: HdAccessoryFile;\n path: string;\n }>();\n\n constructor() {}\n\n ngOnInit() {}\n\n getFileName(file: HdAccessoryFile): string {\n if (!file || file.name == null) {\n return \"\";\n }\n return String(file.name);\n }\n\n getFilePath(file: HdAccessoryFile): string {\n if (!file || file.path == null) {\n return \"\";\n }\n return String(file.path);\n }\n\n getFileSizeText(file: HdAccessoryFile): string {\n if (!file) {\n return \"\";\n }\n const raw = file.size;\n if (raw == null || raw === \"\") {\n return \"\";\n }\n if (typeof raw === \"string\") {\n return raw;\n }\n const bytes = Number(raw);\n if (isNaN(bytes) || bytes < 0) {\n return \"\";\n }\n if (bytes < 1024) {\n return bytes + \" B\";\n }\n if (bytes < 1024 * 1024) {\n return (bytes / 1024).toFixed(bytes < 10 * 1024 ? 1 : 0) + \" KB\";\n }\n return (\n (bytes / (1024 * 1024)).toFixed(bytes < 10 * 1024 * 1024 ? 1 : 0) + \" MB\"\n );\n }\n\n getLabelText(group: HdAccessoryGroup): string {\n const name = group && group.name != null ? String(group.name) : \"\";\n if (!name) {\n return \"\";\n }\n if (!this.labelColon) {\n return name;\n }\n return /[::]$/.test(name) ? name : name + \":\";\n }\n\n onFileClick(\n group: HdAccessoryGroup,\n file: HdAccessoryFile,\n event: Event,\n ): void {\n if (event) {\n event.preventDefault();\n }\n const path = this.getFilePath(file);\n this.fileClick.emit({ group, file, path });\n if (this.autoOpen && path) {\n window.open(path, \"_blank\");\n }\n }\n\n // 用箭头函数:ngFor 的 trackBy 调用时不会绑定组件 this\n trackByGroup = (index: number, group: HdAccessoryGroup): any => {\n return (group && group.name) || index;\n };\n\n trackByFile = (index: number, file: HdAccessoryFile): any => {\n return this.getFilePath(file) || this.getFileName(file) || index;\n };\n}\n","import { NgModule } from \"@angular/core\";\nimport { CommonModule } from \"@angular/common\";\nimport { NgZorroAntdModule } from \"ng-zorro-antd\";\nimport { HdAccessoryListComponent } from \"./hd-accessory-list.component\";\n\n@NgModule({\n imports: [CommonModule, NgZorroAntdModule],\n declarations: [HdAccessoryListComponent],\n exports: [HdAccessoryListComponent],\n})\nexport class HdAccessoryListModule {}\n","import { Injectable, Optional } from \"@angular/core\";\nimport { NavigationStart, Router } from \"@angular/router\";\nimport { filter } from \"rxjs/operators\";\n\n/**\n * 全局清理 ng-zorro tooltip 残留 overlay。\n * 典型场景:hover 出 tooltip 后立刻点击跳转/打开详情,CDK overlay 未销毁,飘到下一页。\n *\n * 引入 FantasyNgzorroModule 后自动生效,也可手动注入调用 clearStuckTooltips()。\n */\n@Injectable({ providedIn: \"root\" })\nexport class HdOverlayCleanupService {\n private started = false;\n\n constructor(@Optional() private router: Router) {\n this.start();\n }\n\n /** 启动全局监听(幂等) */\n start(): void {\n if (this.started || typeof document === \"undefined\") {\n return;\n }\n this.started = true;\n\n // 任意按下即清:覆盖跳路由、开抽屉/弹窗等不走 Navigation 的场景\n document.addEventListener(\n \"mousedown\",\n () => this.clearStuckTooltips(),\n true,\n );\n\n if (this.router) {\n this.router.events\n .pipe(filter((e) => e instanceof NavigationStart))\n .subscribe(() => this.clearStuckTooltips());\n }\n }\n\n /** 清理残留在 body 上的 ant-tooltip overlay */\n clearStuckTooltips(): void {\n if (typeof document === \"undefined\") {\n return;\n }\n const tooltips = document.querySelectorAll(\n \".cdk-overlay-container .ant-tooltip\",\n );\n tooltips.forEach((el) => {\n const pane = el.closest(\".cdk-overlay-pane\") as HTMLElement | null;\n if (pane && pane.parentNode) {\n pane.parentNode.removeChild(pane);\n }\n });\n }\n}\n","import { HdButtonGroupModule } from './hd-button-group/hd-button-group.module';\nimport { HdButtonModule } from './hd-button/hd-button.module';\n\nimport { HdDetailFormModule } from './hd-detail-form/hd-detail-form.module';\nimport { HdDetailLinesModule } from './hd-detail-lines/hd-detail-lines.module';\nimport { HdDetailLinesPageModule } from './hd-detail-lines-page/hd-detail-lines-page.module';\nimport { HdDetailTipModule } from './hd-detail-tip/hd-detail-tip.module';\n\nimport { HdFilterModule } from './hd-filter/hd-filter.module';\nimport { HdFormLinesModule } from './hd-form-lines/hd-form-lines.module';\nimport { HdFormModule } from './hd-form/hd-form.module';\n\nimport { NgModule } from '@angular/core';\nimport { HdCurrentTableModule } from './hd-current-table/hd-current-table.module';\nimport { HdLogModule } from './hd-log/hd-log.module';\nimport { HdPopconfirmModule } from './hd-popconfirm/hd-popconfirm.module';\nimport { HdSpaceModule } from './hd-space/hd-space.module';\nimport { HdStatusModule } from './hd-status/hd-status.module';\nimport { HdTableModule } from './hd-table/hd-table.module';\nimport { HdTipModule } from './hd-tip/hd-tip.module';\nimport { HdAccessoryListModule } from './hd-accessory-list/hd-accessory-list.module';\nimport { HdOverlayCleanupService } from './service/hd-overlay-cleanup.service';\n@NgModule({\n exports: [\n HdButtonModule,\n HdButtonGroupModule,\n\n HdDetailFormModule,\n HdDetailLinesModule,\n HdDetailLinesPageModule,\n HdDetailTipModule,\n\n HdFilterModule,\n HdFormModule,\n HdFormLinesModule,\n\n HdSpaceModule,\n HdStatusModule,\n HdCurrentTableModule,\n HdTableModule,\n HdTipModule,\n HdAccessoryListModule,\n HdPopconfirmModule,\n HdLogModule\n ]\n})\n\nexport class HdComponentModule {\n // 单独引入 HdComponentModule 时也启动全局 tooltip 清理\n constructor(_overlayCleanup: HdOverlayCleanupService) {}\n}\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { HdComponentModule } from \"./hd-component.module\";\nimport { HdLogComponent } from './hd-log/hd-log.component';\nimport { HdOverlayCleanupService } from './service/hd-overlay-cleanup.service';\n@NgModule({\n imports: [CommonModule],\n exports: [HdComponentModule],\n providers: [],\n entryComponents: [HdLogComponent]\n})\nexport class FantasyNgzorroModule {\n // 注入以启动全局 tooltip overlay 清理(providedIn: root,幂等)\n constructor(_overlayCleanup: HdOverlayCleanupService) {}\n}\n","/** 单个附件 */\nexport class HdAccessoryFile {\n /** 展示文件名 */\n name?: string;\n /** 完整下载/查看地址(由父组件直接传入) */\n path?: string;\n /** 文件大小(可缺省;有值才展示):数字按字节格式化,字符串原样展示 */\n size?: number | string;\n}\n\n/** 附件分组:标签 + 附件列表 */\nexport class HdAccessoryGroup {\n /** 分组标签,如「营业执照扫描件」 */\n name: string;\n /** 该分组下的附件 */\n accessoryList: Array<HdAccessoryFile> = [];\n}\n","import { HdOption } from \"../model/common-type\";\n\n// 表格行\nexport class TableColumn {\n label: string; // 文本\n name: string; // 字段名称\n value?: string | boolean | Array<string | Date> | null = null; // 值 不传默认为null\n selectList?: Array<HdOption>; // 控件为Select时,选项列表\n // 组件内部成员\n show?: boolean;\n}\n\n//\nexport class TableTotalOption {\n columnNumber: number; // 总列数\n insertIndex: number; // 插入下标\n insertName: string; // 插入字段\n}\n","export class TotalOption {\n insertIndex: number; // 插入下标\n /** 合计值;hd-table 可不传,按 insertIndex 对应列对 content 自动求和 */\n insertValue?: any;\n align?: string; // 靠左还是靠右\n showDecimal?: boolean; // 是否显示小数位\n preserveNumber?: number; // 保留小数位数,不传默认 2\n isHide?: boolean; // 是否隐藏, 这里只针对列会同步消失的场景\n}\n","export const StaticConst = {\n MaxPageSize: 99999999\n};\n","import { FormItem } from './hd-form/hd-form.service';\nimport { round } from 'lodash';\n// 工具类\nexport const Utils = {\n /**\n * 填充select控件选项\n * @param formList 入参数组 Array<any>\n * @param name 需要填充options的属性名称\n * @param options 选项列表\n */\n fillSelectOption(formList: Array<any>, name: string, options: Array<any>) {\n const returnData = formList;\n if (!returnData || !returnData.length) {\n return returnData;\n }\n const length = formList.length;\n for (let i = 0; i < length; i++) {\n if (returnData[i].name === name) {\n returnData[i].selectOption.selectList = options;\n }\n }\n return returnData;\n },\n\n /**\n * 填充FormItem数组:针对入参list的每一个FormItem,判断obj中是否有对应的name字段,如果有,则填充value。\n * @param list 入参数组 Array<FormItem>\n * @param obj 需要填充到list的属性\n */\n fillArrayFormItem(list: Array<FormItem>, obj: Object) {\n const returnData = [];\n if (!list || !list.length) {\n return returnData;\n }\n const length = list.length;\n for (let i = 0; i < length; i++) {\n if (obj[list[i].name]) {\n list[i].value = obj[list[i].name];\n }\n }\n return list;\n },\n\n /**\n * 数组转换成选择器的选项数组\n * @param list 入参数组 字符串数组或对象数组\n * @param option 转换选项\n * 注:list为字符串数组,option不需要传,按照标准的label、value转换\n */\n arrayToSelectOptionList(list: Array<any>, option?: {\n value: string,\n label: string,\n valueTip?: string,\n labelTip?: string\n }) {\n const returnData = [];\n if (!list || !list.length) {\n return returnData;\n }\n if (option) {\n if (option.labelTip && option.valueTip) {\n list.forEach((item) => {\n const returnItem: any = item;\n returnItem.label = item[option.label];\n returnItem.value = item[option.value];\n if (option.valueTip) {\n returnItem[option.valueTip] = item[option.value];\n }\n if (option.labelTip) {\n returnItem[option.labelTip] = item[option.label];\n }\n returnData.push(returnItem);\n });\n } else {\n list.forEach((item) => {\n const returnItem: any = item;\n returnItem.label = item[option.label];\n returnItem.value = item[option.value];\n returnData.push(returnItem);\n });\n }\n } else {\n list.forEach((item) => {\n const returnItem: any = {};\n returnItem.label = item;\n returnItem.value = item;\n returnData.push(returnItem);\n });\n }\n return returnData;\n },\n\n /**\n * 求和\n * @param nums 数组\n * @param precision 精度\n */\n add(nums: number[], precision: number = 2) {\n if (!Array.isArray(nums)) {\n throw new Error('参数必须是数组');\n }\n if (nums.some(num => typeof num !== 'number')) {\n throw new Error('数组元素必须是数字');\n }\n let result = 0;\n for (const num of nums) {\n result += num;\n }\n return round(result, precision);\n },\n\n /**\n * 减法\n * @param nums 数组\n * @param precision 精度\n */\n subtract(nums: number[], precision: number = 2) {\n if (!Array.isArray(nums)) {\n throw new Error('参数必须是数组');\n }\n if (nums.some(num => typeof num !== 'number')) {\n throw new Error('数组元素必须是数字');\n }\n if (nums.length < 2) {\n throw new Error('减法入参数量至少要2个!');\n }\n let result = nums.shift();\n for (const num of nums) {\n result -= num;\n }\n return round(result, precision);\n },\n\n /**\n * 乘法\n * @param nums 数组\n * @param precision 精度\n */\n multiply(nums: number[], precision: number = 2) {\n if (!Array.isArray(nums)) {\n throw new Error('参数必须是数组');\n }\n if (nums.some(num => typeof num !== 'number')) {\n throw new Error('数组元素必须是数字');\n }\n let result = 1;\n for (const num of nums) {\n result = result * num;\n }\n return round(result, precision);\n },\n\n /**\n * 除法\n * @param nums 数组\n * @param precision 精度\n */\n divide(nums: number[], precision: number = 2) {\n if (!Array.isArray(nums)) {\n throw new Error('参数必须是数组');\n }\n if (nums.some(num => typeof num !== 'number')) {\n throw new Error('数组元素必须是数字');\n }\n if (nums.length < 2) {\n throw new Error('除法入参数量至少要2个!');\n }\n let result = nums.shift();\n for (const num of nums) {\n if (num === 0) {\n throw new Error('除数不能为0!');\n }\n result = result / num;\n }\n return round(result, precision);\n }\n};\n"],"names":["tslib_1.__decorate","tslib_1.__values","InputBoolean","tslib_1.__spread","localforage.createInstance","localforage.INDEXEDDB"],"mappings":"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"}
1
+ {"version":3,"file":"fantasy-ngzorro.js","sources":["ng://fantasy-ngzorro/hd-button-group/hd-button-group.component.ts","ng://fantasy-ngzorro/hd-button-group/hd-button-group.module.ts","ng://fantasy-ngzorro/hd-button/hd-button.service.ts","ng://fantasy-ngzorro/hd-button/hd-button.component.ts","ng://fantasy-ngzorro/hd-button/hd-button.module.ts","ng://fantasy-ngzorro/hd-detail-form/hd-detail-form.service.ts","ng://fantasy-ngzorro/hd-detail-form/hd-detail-form.component.ts","ng://fantasy-ngzorro/hd-detail-form/hd-detail-form.module.ts","ng://fantasy-ngzorro/hd-space/hd-space.service.ts","ng://fantasy-ngzorro/hd-space/hd-space.component.ts","ng://fantasy-ngzorro/hd-space/hd-space.module.ts","ng://fantasy-ngzorro/model/common-type.ts","ng://fantasy-ngzorro/utils/hd-table-scroll.util.ts","ng://fantasy-ngzorro/hd-detail-lines/hd-detail-lines.component.ts","ng://fantasy-ngzorro/hd-detail-lines/hd-detail-lines.module.ts","ng://fantasy-ngzorro/hd-detail-lines-page/hd-detail-lines-page.component.ts","ng://fantasy-ngzorro/hd-detail-lines-page/hd-detail-lines-page.module.ts","ng://fantasy-ngzorro/hd-status/hd-status.service.ts","ng://fantasy-ngzorro/hd-detail-tip/hd-detail-tip.component.ts","ng://fantasy-ngzorro/hd-detail-tip/hd-detail-tip.module.ts","ng://fantasy-ngzorro/hd-filter/hd-filter.service.ts","ng://fantasy-ngzorro/hd-form/hd-form.service.ts","ng://fantasy-ngzorro/utils/cascader.util.ts","ng://fantasy-ngzorro/hd-filter/hd-filter-scheme.ts","ng://fantasy-ngzorro/hd-filter/hd-filter.component.ts","ng://fantasy-ngzorro/hd-form/hd-form.component.ts","ng://fantasy-ngzorro/hd-form/hd-form.module.ts","ng://fantasy-ngzorro/hd-filter/hd-filter.module.ts","ng://fantasy-ngzorro/service/common-session.service.ts","ng://fantasy-ngzorro/hd-form-lines/hd-form-lines.service.ts","ng://fantasy-ngzorro/hd-form-lines/hd-form-lines.component.ts","ng://fantasy-ngzorro/hd-form-lines/hd-form-lines.module.ts","ng://fantasy-ngzorro/hd-current-table/hd-current-table.component.ts","ng://fantasy-ngzorro/hd-current-table/hd-current-table.module.ts","ng://fantasy-ngzorro/hd-log/hd-log.component.ts","ng://fantasy-ngzorro/hd-log/hd-log.service.ts","ng://fantasy-ngzorro/hd-log/hd-log.module.ts","ng://fantasy-ngzorro/hd-popconfirm/hd-popconfirm.component.ts","ng://fantasy-ngzorro/hd-popconfirm/hd-popconfirm.module.ts","ng://fantasy-ngzorro/hd-status/hd-status.component.ts","ng://fantasy-ngzorro/hd-status/hd-status.module.ts","ng://fantasy-ngzorro/model/colWidth.ts","ng://fantasy-ngzorro/hd-table/hd-table-cell.pipe.ts","ng://fantasy-ngzorro/hd-table/hd-table.service.ts","ng://fantasy-ngzorro/hd-table/hd-table.component.ts","ng://fantasy-ngzorro/hd-table/hd-table.module.ts","ng://fantasy-ngzorro/hd-tip/hd-tip.component.ts","ng://fantasy-ngzorro/hd-tip/hd-tip.module.ts","ng://fantasy-ngzorro/hd-accessory-list/hd-accessory-list.component.ts","ng://fantasy-ngzorro/hd-accessory-list/hd-accessory-list.module.ts","ng://fantasy-ngzorro/service/hd-overlay-cleanup.service.ts","ng://fantasy-ngzorro/hd-component.module.ts","ng://fantasy-ngzorro/fantasy-ngzorro.module.ts","ng://fantasy-ngzorro/hd-accessory-list/hd-accessory-list.service.ts","ng://fantasy-ngzorro/hd-current-table/hd-current-table.service.ts","ng://fantasy-ngzorro/hd-detail-lines/hd-detail-lines.service.ts","ng://fantasy-ngzorro/model/staticConst.ts","ng://fantasy-ngzorro/utils.ts"],"sourcesContent":["import { Component, ContentChild, Input, OnInit, TemplateRef } from '@angular/core';\n\n@Component({\n selector: 'hd-button-group',\n templateUrl: './hd-button-group.component.html',\n styleUrls: ['./hd-button-group.component.less']\n})\nexport class HdButtonGroupComponent implements OnInit {\n @ContentChild(\"buttonGroupLeft\", { static: false }) buttonGroupLeft: TemplateRef<any>;\n @ContentChild(\"buttonGroupRight\", { static: false }) buttonGroupRight: TemplateRef<any>;\n\n constructor() { }\n\n ngOnInit() {\n\n }\n}\n","import { HdButtonGroupComponent } from './hd-button-group.component';\nimport { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { FormsModule } from '@angular/forms';\nimport { NgZorroAntdModule } from 'ng-zorro-antd';\n\n@NgModule({\n imports: [\n CommonModule,\n FormsModule,\n NgZorroAntdModule\n ],\n declarations: [HdButtonGroupComponent],\n exports: [HdButtonGroupComponent]\n})\nexport class HdButtonGroupModule { }\n","import { Injectable } from '@angular/core';\n\nexport enum ButtonType {\n primary = 'primary',\n dashed = 'dashed',\n danger = 'danger',\n default = 'default',\n link = 'link',\n submit = 'submit',\n // 增加类型\n reset = 'reset',\n add = 'add'\n}\n\nexport enum ButtonSize {\n normal = 'normal',\n small = 'small'\n}\n\n@Injectable({\n providedIn: 'root'\n})\nexport class HdButtonService {\n\n constructor() { }\n\n}\n","import { Component, EventEmitter, Input, OnInit, Output } from '@angular/core';\nimport { InputBoolean } from 'ng-zorro-antd';\nimport { ButtonSize, ButtonType } from './hd-button.service';\n@Component({\n selector: 'hd-button',\n templateUrl: './hd-button.component.html',\n styleUrls: ['./hd-button.component.less']\n})\nexport class HdButtonComponent implements OnInit {\n\n // 默认default\n @Input() type: ButtonType = ButtonType.default;\n @Input() size: ButtonSize = ButtonSize.normal;\n @Input() @InputBoolean() loading: boolean;\n @Input() @InputBoolean() disabled: boolean = false;\n @Output() clickAction = new EventEmitter<any>();\n @Output() nzOnConfirm = new EventEmitter<any>();\n constructor() { }\n\n ngOnInit() {\n if ((this.loading === false || this.loading === true) && this.clickAction.observers.length === 0 && this.nzOnConfirm.observers.length === 0) {\n throw '存在loading效果的hd-button组件禁止使用click绑定点击事件,请使用clickAction绑定!';\n }\n if (this.type === 'submit') {\n throw '禁止使用submit类型的按钮,请使用普通按钮+click事件触发表单提交!';\n }\n }\n\n /** loading 时一并禁用,避免与外部 [disabled] 绑定互相翻转状态 */\n get isDisabled(): boolean {\n return this.disabled || this.loading;\n }\n\n innerClickAction(option: any) {\n // loading 状态下,不允许触发点击事件\n if (this.loading) {\n return;\n }\n this.clickAction.emit(option);\n }\n}\n","import { HdButtonComponent } from './hd-button.component';\nimport { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { FormsModule } from '@angular/forms';\nimport { NgZorroAntdModule } from 'ng-zorro-antd';\n\n@NgModule({\n imports: [\n CommonModule,\n FormsModule,\n NgZorroAntdModule\n ],\n declarations: [HdButtonComponent],\n exports: [HdButtonComponent]\n})\nexport class HdButtonModule { }\n","import { Injectable } from \"@angular/core\";\n\n/** hd-detail-form 字段展示类型 */\nexport enum HdDetailFormFieldType {\n /** 普通文本(默认) */\n Text = \"text\",\n /** 附件图片(描述项内横排缩略图) */\n Accessory = \"accessory\",\n}\n\n/** 附件图片项(path 为图片地址) */\nexport interface HdDetailFormImage {\n name?: string;\n path?: string;\n url?: string;\n}\n\n@Injectable({\n providedIn: \"root\",\n})\nexport class HdDetailFormService {\n constructor() {}\n}\n","import {\n Component,\n EventEmitter,\n Input,\n OnInit,\n Output,\n SimpleChange,\n} from \"@angular/core\";\nimport { HdOption } from \"../model/common-type\";\nimport {\n HdDetailFormFieldType,\n HdDetailFormImage,\n} from \"./hd-detail-form.service\";\n\n/** 附件缩略图最多直接展示张数,超出末张蒙版 +n */\nconst MAX_VISIBLE_IMAGES = 4;\n\n@Component({\n selector: \"hd-detail-form\",\n templateUrl: \"./hd-detail-form.component.html\",\n styleUrls: [\"./hd-detail-form.component.less\"],\n})\nexport class HdDetailFormComponent implements OnInit {\n @Input() formCols: Array<HdOption> = new Array();\n /** 一行列数,默认固定 4 列(不再按屏幕宽度自适应) */\n @Input() nzColumn:\n | number\n | {\n xxl?: number;\n xl?: number;\n lg?: number;\n md?: number;\n sm?: number;\n xs?: number;\n } = 4;\n\n /** 附件图片点击回调 */\n @Output() imageClick = new EventEmitter<{\n image: HdDetailFormImage;\n path: string;\n index: number;\n }>();\n\n HdDetailFormFieldType = HdDetailFormFieldType;\n\n /** 大图预览 */\n previewVisible = false;\n previewImagePath = \"\";\n previewTitle = \"图片预览\";\n /** 当前预览所属字段的图片列表(用于翻页) */\n previewImages: Array<HdDetailFormImage> = [];\n previewIndex = 0;\n\n /** 附件字段图片缓存(避免模板里反复 getImageList 导致 *ngFor 重建、点击丢失) */\n private imageListCache = new Map<HdOption, Array<HdDetailFormImage>>();\n private displayListCache = new Map<HdOption, Array<HdDetailFormImage>>();\n\n constructor() {}\n\n get canPreviewPrev(): boolean {\n return this.previewIndex > 0;\n }\n\n get canPreviewNext(): boolean {\n return this.previewIndex < this.previewImages.length - 1;\n }\n\n ngOnInit() {\n if (this.formCols && this.formCols.length > 0) {\n this.formCols = this.formCols.filter((item) => !item.hide);\n }\n this.refreshImageCache();\n }\n\n ngOnChanges(changes: SimpleChange) {\n if (\n changes[\"formCols\"] &&\n JSON.stringify(changes[\"formCols\"].currentValue) !==\n JSON.stringify(changes[\"formCols\"].previousValue)\n ) {\n if (this.formCols && this.formCols.length > 0) {\n this.formCols = this.formCols.filter((item) => !item.hide);\n }\n this.refreshImageCache();\n }\n }\n\n isAccessory(col: HdOption): boolean {\n return !!(\n col &&\n (col.type === HdDetailFormFieldType.Accessory || col.type === \"accessory\")\n );\n }\n\n private refreshImageCache(): void {\n this.imageListCache.clear();\n this.displayListCache.clear();\n (this.formCols || []).forEach((col) => {\n if (this.isAccessory(col)) {\n this.imageListCache.set(col, this.parseImageList(col));\n }\n });\n }\n\n /**\n * 解析附件图片列表。value 支持:\n * - string / string[](图片地址)\n * - { name?, path? / url? }[]\n */\n private parseImageList(col: HdOption): Array<HdDetailFormImage> {\n const value = col && col.value;\n if (value == null || value === \"\") {\n return [];\n }\n const list = Array.isArray(value) ? value : [value];\n const result: Array<HdDetailFormImage> = [];\n list.forEach((item) => {\n if (item == null || item === \"\") {\n return;\n }\n if (typeof item === \"string\") {\n result.push({ path: item });\n return;\n }\n const path = item.path || item.url || item.address || \"\";\n if (!path) {\n return;\n }\n result.push({\n name: item.name || item.fileName,\n path: String(path),\n });\n });\n return result;\n }\n\n getImageList(col: HdOption): Array<HdDetailFormImage> {\n if (!this.imageListCache.has(col)) {\n this.imageListCache.set(col, this.parseImageList(col));\n }\n return this.imageListCache.get(col) || [];\n }\n\n hasImages(col: HdOption): boolean {\n return this.getImageList(col).length > 0;\n }\n\n /** 实际渲染的缩略图(最多 4 张) */\n getDisplayImages(col: HdOption): Array<HdDetailFormImage> {\n if (this.displayListCache.has(col)) {\n return this.displayListCache.get(col);\n }\n const display = this.getImageList(col).slice(0, MAX_VISIBLE_IMAGES);\n this.displayListCache.set(col, display);\n return display;\n }\n\n /** 未展示张数(末张蒙版 +n) */\n getMoreCount(col: HdOption): number {\n const total = this.getImageList(col).length;\n return total > MAX_VISIBLE_IMAGES ? total - MAX_VISIBLE_IMAGES : 0;\n }\n\n getImagePath(image: HdDetailFormImage): string {\n return (image && (image.path || image.url)) || \"\";\n }\n\n trackByImage(index: number, image: HdDetailFormImage): string {\n return (image && (image.path || image.url)) || String(index);\n }\n\n onImageClick(\n col: HdOption,\n image: HdDetailFormImage,\n index: number,\n event?: Event\n ): void {\n if (event) {\n event.preventDefault();\n event.stopPropagation();\n }\n const path = this.getImagePath(image);\n this.imageClick.emit({ image, path, index });\n if (!path) {\n return;\n }\n this.previewImages = this.getImageList(col).slice();\n this.previewIndex = index >= 0 ? index : 0;\n this.applyPreviewImage();\n setTimeout(() => {\n this.previewVisible = true;\n });\n }\n\n previewPrev(event?: Event): void {\n if (event) {\n event.preventDefault();\n event.stopPropagation();\n }\n if (!this.canPreviewPrev) {\n return;\n }\n this.previewIndex -= 1;\n this.applyPreviewImage();\n }\n\n previewNext(event?: Event): void {\n if (event) {\n event.preventDefault();\n event.stopPropagation();\n }\n if (!this.canPreviewNext) {\n return;\n }\n this.previewIndex += 1;\n this.applyPreviewImage();\n }\n\n private applyPreviewImage(): void {\n const image = this.previewImages[this.previewIndex];\n const path = this.getImagePath(image);\n this.previewImagePath = path;\n this.previewTitle =\n (image && image.name) || \"图片\" + (this.previewIndex + 1);\n }\n\n closePreview(): void {\n this.previewVisible = false;\n this.previewImages = [];\n this.previewIndex = 0;\n this.previewImagePath = \"\";\n }\n\n /** HdOption.width:默认 1,最大 4 */\n getColSpan(col: HdOption): number {\n const width = col && col.width != null ? Number(col.width) : 1;\n if (!width || width < 1 || isNaN(width)) {\n return 1;\n }\n return width > 4 ? 4 : Math.floor(width);\n }\n\n triggerEvent(fn: any) {\n if (fn) {\n fn(event);\n }\n }\n\n /** 点击编辑笔,回调父组件传入的 edit */\n onEditClick(event: Event, col: HdOption): void {\n if (event) {\n event.preventDefault();\n event.stopPropagation();\n }\n if (col && col.edit) {\n col.edit(col);\n }\n }\n}\n","import { NgModule } from \"@angular/core\";\nimport { CommonModule } from \"@angular/common\";\nimport { NgZorroAntdModule } from \"ng-zorro-antd\";\nimport { HdDetailFormComponent } from \"./hd-detail-form.component\";\n\n@NgModule({\n imports: [CommonModule, NgZorroAntdModule],\n exports: [HdDetailFormComponent],\n declarations: [HdDetailFormComponent],\n})\nexport class HdDetailFormModule {}\n","import { Injectable } from '@angular/core';\n\nexport enum SpaceType {\n row = 'row',\n column = 'column'\n}\n\nexport class Style {\n background: string\n width: string\n height: string\n}\n\n@Injectable({\n providedIn: 'root'\n})\nexport class HdSpaceService {\n\n constructor() { }\n\n}\n","import { Component, Input, OnInit, Output } from '@angular/core';\nimport { Style, SpaceType } from \"./hd-space.service\"; \n\n@Component({\n selector: 'hd-space',\n templateUrl: './hd-space.component.html',\n styleUrls: ['./hd-space.component.less']\n})\nexport class HdSpaceComponent implements OnInit {\n @Input() type: SpaceType = SpaceType.row; \n @Input() size: number; \n @Input() background: string = 'inherit'; \n\n style: Style = new Style();\n\n constructor() { }\n\n ngOnInit() {\n this.style['background'] = this.background;\n if(this.type === SpaceType.row){\n this.style['width'] = '100%';\n this.style['height'] = this.size + 'px';\n }else{\n this.style['height'] = '100%';\n this.style['width'] = this.size + 'px';\n }\n }\n\n}\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { NgZorroAntdModule } from 'ng-zorro-antd';\nimport { HdSpaceComponent } from './hd-space.component';\n\n@NgModule({\n imports: [\n CommonModule,\n FormsModule,\n ReactiveFormsModule,\n NgZorroAntdModule\n ],\n declarations: [HdSpaceComponent],\n exports: [HdSpaceComponent]\n})\nexport class HdSpaceModule { }\n","export class Page<T> {\n totalPages = 0;\n totalElements = 0;\n pageNumber = 0;\n pageSize = 10;\n hasContent = false;\n hasNext = false;\n content: Array<T> = [];\n}\n\nexport class HdOption {\n label: string;\n value: any;\n color?: string;\n hide?: boolean;\n /** 占据列数,默认 1,最大 4(一行共 4 列);历史未传按 1 */\n width?: number;\n /**\n * 字段类型,默认文本。\n * `accessory`:附件图片,value 为图片地址 string / string[] 或 { name?, path?/url? }[]\n */\n type?: string;\n clickText?: string;\n click?: (value: any) => void;\n clickText1?: string;\n click1?: (value: any) => void;\n /**\n * 值后显示编辑笔图标(Figma edit/edit,14px)。\n */\n editable?: boolean;\n /** 点击编辑笔回调,供父组件处理(如弹窗改值) */\n edit?: (col?: HdOption) => void;\n}\n\nexport class SelectOption {\n label: string;\n value: string;\n selectList?: Array<any>;\n selectListName?: string;\n showLabelAndValue?: boolean = false;\n hdDropdownMatchSelectWidth?: boolean = false;\n hdServerSearch?: boolean = false;\n hdShowItemCode?: boolean = false; // 是否用[value]label显示选项列表\n tableColumns?: Array<SelectOptionTableColumn>;\n hdShowSearch?: boolean = true;\n hdAllowClear?: boolean = true;\n}\n\nexport class RadioOption {\n label: string;\n value: string;\n optionList?: Array<any>;\n showLabelAndValue?: boolean = false;\n}\n\nexport class CheckboxOption {\n label: string;\n value: string;\n optionList?: Array<any>;\n showLabelAndValue?: boolean = false;\n}\n\nexport class SelectOptionTableColumn {\n width: number;\n label: string; // 这里对应的是列名\n name: string; // 对应selectList里面的name值, 如果有render字段 则去render函数渲染\n icons?: Array<SelectOptionTableColumnIcon>; // 对应的图片名字\n render?: (value: any) => string;\n}\n\nexport class SelectOptionTableColumnIcon {\n iconName: string;\n fieldName: string;\n}\n\nexport class InputNumber {\n min?: number = 0;\n max?: number = 99999999;\n step?: number = 1;\n precision?: number = 4;\n nzFormatter?: Function;\n nzParser?: Function;\n}\n\nexport interface CascaderShowSearchOptions {\n filter?: (inputValue: string, path: any[]) => boolean;\n sorter?: (a: any[], b: any[], inputValue: string) => number;\n}\n\nexport class CascaderOption {\n options: Array<any>;\n /** 是否开启搜索,默认 true;传 false 关闭;传对象可自定义 filter/sorter */\n showSearch?: boolean | CascaderShowSearchOptions;\n /** 选项中拼音字段名,默认 pinyin */\n pinyinField?: string;\n /** 下拉菜单额外 class,默认 hd-cascader-menus */\n menuClassName?: string;\n /** 下拉菜单样式(对应 nzMenuStyle) */\n menuStyle?: { [key: string]: string };\n /**\n * 搜索结果下拉最小宽度(可选)。\n * number 按 px;string 可传 '360px' 等;不传则按文案自适应,不强制宽度\n */\n dropdownMinWidth?: number | string;\n}\n","import { NzTableComponent } from \"ng-zorro-antd/table\";\n\nexport interface HdTableScrollConfig {\n x?: string;\n y?: string;\n}\n\nconst DEFAULT_FLUID_COL_WIDTH = 150;\n\nexport function getTableViewportWidth(\n nzTable: NzTableComponent,\n hostClass = \"hd-table-container\",\n): number {\n if (!nzTable || !nzTable.tableMainElement) {\n return 0;\n }\n const tableMain = nzTable.tableMainElement.nativeElement as HTMLElement;\n const scrollBody = tableMain.querySelector(\n \".ant-table-body\",\n ) as HTMLElement;\n if (scrollBody && scrollBody.clientWidth > 0) {\n return scrollBody.clientWidth;\n }\n const wrapper = tableMain.closest(\".ant-table-wrapper\") as HTMLElement;\n if (wrapper && wrapper.clientWidth > 0) {\n return wrapper.clientWidth;\n }\n const host = tableMain.closest(`.${hostClass}`) as HTMLElement;\n if (host && host.clientWidth > 0) {\n return host.clientWidth;\n }\n return 0;\n}\n\nfunction parsePx(value: string): number {\n if (!value) {\n return 0;\n }\n const parsed = parseInt(String(value).replace(/px/i, \"\"), 10);\n return Number.isNaN(parsed) ? 0 : parsed;\n}\n\n/** 克隆表头/表体测量未被 scroll 压缩前的自然列宽 */\nfunction measureElementNaturalWidth(element: HTMLElement): number {\n const clone = element.cloneNode(true) as HTMLElement;\n clone.style.position = \"absolute\";\n clone.style.left = \"-99999px\";\n clone.style.top = \"0\";\n clone.style.visibility = \"hidden\";\n clone.style.width = \"max-content\";\n clone.style.tableLayout = \"auto\";\n document.body.appendChild(clone);\n const width = clone.scrollWidth;\n document.body.removeChild(clone);\n return width;\n}\n\n/** 汇总表头 th 上声明的列宽(style.width / nzWidth) */\nfunction measureHeaderDeclaredColWidth(tableMain: HTMLElement): number {\n const ths = Array.from(\n tableMain.querySelectorAll(\".ant-table-thead > tr > th\"),\n ) as HTMLElement[];\n if (!ths.length) {\n return 0;\n }\n let sum = 0;\n let hasFluidCol = false;\n ths.forEach((th) => {\n const declared = parsePx(th.style.width);\n if (declared > 0) {\n sum += declared;\n return;\n }\n hasFluidCol = true;\n sum += th.scrollWidth || th.offsetWidth || DEFAULT_FLUID_COL_WIDTH;\n });\n return hasFluidCol ? 0 : sum;\n}\n\nexport function measureTableColWidth(nzTable: NzTableComponent): number {\n if (!nzTable || !nzTable.tableMainElement) {\n return 0;\n }\n const tableMain = nzTable.tableMainElement.nativeElement as HTMLElement;\n const tables = Array.from(\n tableMain.querySelectorAll(\n \".ant-table-header table, .ant-table-body table, .cdk-virtual-scroll-content-wrapper table\",\n ),\n ) as HTMLElement[];\n\n let max = tables.reduce(\n (width, table) => Math.max(width, table.scrollWidth || 0),\n 0,\n );\n\n const viewportWidth = getTableViewportWidth(nzTable);\n // 未开启 scroll.x 时表格会被压进容器,scrollWidth 不可靠,需测自然列宽\n if (viewportWidth <= 0 || max <= viewportWidth) {\n const headerTable = tableMain.querySelector(\n \".ant-table-header table\",\n ) as HTMLElement;\n const bodyTable = tableMain.querySelector(\n \".ant-table-body table\",\n ) as HTMLElement;\n if (headerTable) {\n max = Math.max(max, measureElementNaturalWidth(headerTable));\n }\n if (bodyTable) {\n max = Math.max(max, measureElementNaturalWidth(bodyTable));\n }\n max = Math.max(max, measureHeaderDeclaredColWidth(tableMain));\n }\n\n return max;\n}\n\n/**\n * 用于判断是否需要 scroll.x 的视口宽。\n * 有纵向滚动条时 clientWidth 会少一截,若直接拿去比列宽,会「竖滚条导致误开横滚」;\n * 这里用 offsetWidth(含滚动条槽)作为屏幕可展示宽度。\n */\nexport function getTableScrollXViewportWidth(\n nzTable: NzTableComponent,\n hostClass = \"hd-table-container\",\n): number {\n if (!nzTable || !nzTable.tableMainElement) {\n return 0;\n }\n const tableMain = nzTable.tableMainElement.nativeElement as HTMLElement;\n const scrollBody =\n (tableMain.querySelector(\n \"cdk-virtual-scroll-viewport.ant-table-body\",\n ) as HTMLElement) ||\n (tableMain.querySelector(\".ant-table-body\") as HTMLElement);\n if (scrollBody && scrollBody.offsetWidth > 0) {\n return scrollBody.offsetWidth;\n }\n return getTableViewportWidth(nzTable, hostClass);\n}\n\n/** 无数据或列宽未超出容器时不启用横向 scroll */\nexport function resolveAutoTableScroll(\n nzTable: NzTableComponent,\n hasData: boolean,\n colWidth?: number,\n): HdTableScrollConfig | null {\n if (!hasData) {\n return null;\n }\n const width =\n colWidth != null && colWidth > 0\n ? colWidth\n : measureTableColWidth(nzTable);\n if (width <= 0) {\n return null;\n }\n const viewportWidth = getTableScrollXViewportWidth(nzTable);\n if (viewportWidth > 0) {\n // 允许 1px 误差,避免亚像素导致误开横滚\n return width > viewportWidth + 1 ? { x: `${Math.ceil(width)}px` } : null;\n }\n if (typeof window !== \"undefined\" && width > window.innerWidth - 32) {\n return { x: `${Math.ceil(width)}px` };\n }\n return null;\n}\n\n/** 取 ng-zorro 分体表头 / 表体滚动容器(含虚拟滚动) */\nexport function getNzTableScrollElements(\n nzTable: NzTableComponent,\n): { header: HTMLElement | null; body: HTMLElement | null } {\n if (!nzTable) {\n return { header: null, body: null };\n }\n const nz = nzTable as any;\n let header = (nz.tableHeaderNativeElement as HTMLElement) || null;\n let body =\n (nz.mixTableBodyNativeElement as HTMLElement) ||\n (nz.tableBodyNativeElement as HTMLElement) ||\n null;\n const main =\n nz.tableMainElement &&\n (nz.tableMainElement.nativeElement as HTMLElement);\n if (main) {\n if (!header) {\n header = main.querySelector(\".ant-table-header\") as HTMLElement;\n }\n if (!body) {\n body =\n (main.querySelector(\n \"cdk-virtual-scroll-viewport.ant-table-body\",\n ) as HTMLElement) ||\n (main.querySelector(\".ant-table-body\") as HTMLElement);\n }\n }\n return { header, body };\n}\n\n/** 一次性把表体 scrollLeft 同步到表头 */\nexport function syncNzTableHeaderBodyScrollLeft(\n nzTable: NzTableComponent,\n): void {\n const els = getNzTableScrollElements(nzTable);\n if (!els.header || !els.body) {\n return;\n }\n if (els.header.scrollLeft !== els.body.scrollLeft) {\n els.header.scrollLeft = els.body.scrollLeft;\n }\n}\n\n/**\n * 监听表体横向滚动并同步表头。\n * 返回 unbind;DOM 未就绪时返回 null(调用方可重试)。\n */\nexport function bindNzTableHeaderBodyScrollSync(\n nzTable: NzTableComponent,\n): (() => void) | null {\n const els = getNzTableScrollElements(nzTable);\n if (!els.header || !els.body) {\n return null;\n }\n const header = els.header;\n const body = els.body;\n const onScroll = () => {\n if (header.scrollLeft !== body.scrollLeft) {\n header.scrollLeft = body.scrollLeft;\n }\n };\n body.addEventListener(\"scroll\", onScroll);\n onScroll();\n return () => {\n body.removeEventListener(\"scroll\", onScroll);\n };\n}\n","import { CdkDragDrop, moveItemInArray } from \"@angular/cdk/drag-drop\";\nimport {\n AfterViewInit,\n ChangeDetectorRef,\n Component,\n ContentChild,\n EventEmitter,\n Input,\n OnChanges,\n OnDestroy,\n OnInit,\n Output,\n SimpleChanges,\n TemplateRef,\n ViewChild,\n} from \"@angular/core\";\nimport { round } from \"lodash\";\nimport { InputBoolean } from \"ng-zorro-antd/core\";\nimport { NzTableComponent } from \"ng-zorro-antd/table\";\nimport { Page } from \"../model/common-type\";\nimport { measureTableColWidth, resolveAutoTableScroll, bindNzTableHeaderBodyScrollSync } from \"../utils/hd-table-scroll.util\";\nimport { TotalOption } from \"./hd-detail-lines.service\";\n\n@Component({\n selector: \"hd-detail-lines\",\n templateUrl: \"./hd-detail-lines.component.html\",\n styleUrls: [\"./hd-detail-lines.component.less\"],\n})\nexport class HdDetailLinesComponent\n implements OnInit, OnChanges, AfterViewInit, OnDestroy {\n @ViewChild(\"hdTable\", { static: false }) nzTableComponent: NzTableComponent;\n @Input() lines: Array<any>;\n @Input() @InputBoolean() showSelected: boolean = false;\n @Input() @InputBoolean() allowDrop: boolean = false;\n @Input() @InputBoolean() showSearch: boolean = false;\n // 不传递这个字段时默认为查询所有字段是否有匹配的\n @Input() searchFields: string[] = [];\n /**\n * 横向滚动。历史默认 `{ x: '1px' }`(2.1.28 前一直如此):开启横滚但不锁死列宽,\n * 业务页可不写 th/td width,由内容自适应。传 null 则按容器自动测算。\n */\n @Input() scroll: { [key: string]: string } = { x: \"1px\" };\n tableScroll: { x?: string; y?: string } = null;\n @Input() selectField: string = \"billNumber\";\n @Input() selectedField: string;\n /**\n * 行勾选禁用字段名。定义后取当前行该字段:\n * 为 true 时禁用该行勾选(全选也会跳过)。\n */\n @Input() selectDisabledField: string;\n /**\n * 行失效字段名。定义后取当前行该字段:\n * 为 true 时整行背景色为 #F7F8FA、文字 #868A9C。\n */\n @Input() rowInvalidField: string;\n @Output() selectEvent = new EventEmitter();\n @ContentChild(\"detailLineHead\", { static: false })\n detailLineHead: TemplateRef<any>;\n @ContentChild(\"detailLineBody\", { static: false })\n detailLineBody: TemplateRef<any>;\n // 合计区域\n @Input() @InputBoolean() showTotal: boolean = false;\n @Input() totalOption: Array<TotalOption> = [];\n @Input() columnsNumber: number | string = 0;\n @Input() hdFrontPagination: boolean = false;\n totalOptionList = [];\n\n tableData: Page<any> = new Page();\n tableLoading: boolean = false;\n // 表格分页参数\n tablePageIndex: number = 1;\n @Input() tablePageSize: number = 100;\n // 表格勾选参数\n isAllDisplayDataChecked = false;\n isIndeterminate = false;\n listOfDisplayData = [];\n listOfAllData = [];\n listOfSelection: Array<any> | TemplateRef<void>;\n mapOfCheckedId: { [key: string]: boolean } = {};\n mapOfCheckList: { [key: string]: any } = {};\n filterStr: string;\n /** 表格实际展示的数据(筛选结果或全量) */\n displayLines: Array<any> = [];\n /** 是否处于筛选状态 */\n isFilterData = false;\n storeFormLinesData: any = []; // 缓存的总的列表数据\n /** 控制 nz-table 重建:scroll.y 从无到有时必须重建,否则表头不跟横滚 */\n showTable = true;\n private unbindBodyScroll: (() => void) | null = null;\n\n constructor(private cdr: ChangeDetectorRef) {}\n\n get effectiveScroll(): { x?: string; y?: string } {\n // 不自动补 nzScroll.y:有 y 会拆表头/表体,无列宽时列错位。\n // 仅有 x 时的纵滚由 less(max-height + overflow-y)承担,表头 sticky。\n // 仅当父组件显式传了 scroll.y 时才走 nz-table 分体纵滚。\n return this.scroll != null ? this.scroll : this.tableScroll;\n }\n\n ngOnInit(): void {\n this.syncStoreFromLinesInput();\n this.applyDisplayFromStore();\n this.countSelected();\n this.calculateTotal();\n }\n\n ngAfterViewInit(): void {\n this.scheduleSyncHorizontalScroll();\n }\n\n ngOnDestroy(): void {\n this.unbindHeaderBodyScrollSync();\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes[\"lines\"]) {\n if (!this.isFilterData) {\n this.syncStoreFromLinesInput();\n this.displayLines = this.lines || [];\n } else if (\n !this.storeFormLinesData ||\n this.storeFormLinesData.length === 0\n ) {\n this.syncStoreFromLinesInput();\n }\n }\n this.countSelected();\n this.calculateTotal();\n if (changes[\"lines\"] || changes[\"showSelected\"]) {\n this.scheduleSyncHorizontalScroll();\n }\n }\n\n private scheduleSyncHorizontalScroll(retry = 0): void {\n const delay = retry === 0 ? 0 : 50;\n setTimeout(() => {\n if (this.scroll == null) {\n this.syncHorizontalScroll();\n }\n this.bindHeaderBodyScrollSync(0);\n const afterX =\n (this.effectiveScroll && this.effectiveScroll.x) ||\n (this.tableScroll && this.tableScroll.x);\n if (\n this.scroll == null &&\n retry < 5 &&\n this.displayLines &&\n this.displayLines.length > 0 &&\n !afterX &&\n measureTableColWidth(this.nzTableComponent) === 0\n ) {\n this.scheduleSyncHorizontalScroll(retry + 1);\n }\n }, delay);\n }\n\n private syncHorizontalScroll(): void {\n if (this.scroll != null) {\n return;\n }\n const hasData = !!(this.displayLines && this.displayLines.length);\n const nextScroll = resolveAutoTableScroll(\n this.nzTableComponent,\n hasData,\n );\n const nextX = nextScroll ? nextScroll.x : null;\n // 自动测算只设 x,不设 y(与 2.1.64 前一致,避免无列宽时表头/表体错位)\n if (this.tableScroll && this.tableScroll.x === nextX && !this.tableScroll.y) {\n return;\n }\n const prevHasY = !!(this.tableScroll && this.tableScroll.y);\n this.tableScroll = nextX ? { x: nextX } : null;\n if (prevHasY) {\n this.remountTable();\n return;\n }\n this.cdr.markForCheck();\n this.bindHeaderBodyScrollSync(0);\n }\n\n /** 重建 nz-table,让 header/body 滚动同步在 AfterViewInit 重新绑定 */\n private remountTable(): void {\n this.unbindHeaderBodyScrollSync();\n setTimeout(() => {\n this.showTable = false;\n this.cdr.markForCheck();\n setTimeout(() => {\n this.showTable = true;\n this.cdr.markForCheck();\n setTimeout(() => this.bindHeaderBodyScrollSync(0));\n });\n });\n }\n\n /** 表体横滚时同步表头(兜底 ng-zorro 监听丢失);DOM 未就绪时重试 */\n private bindHeaderBodyScrollSync(retry = 0): void {\n this.unbindHeaderBodyScrollSync();\n if (!this.nzTableComponent || !(this.effectiveScroll && this.effectiveScroll.x)) {\n return;\n }\n const unbind = bindNzTableHeaderBodyScrollSync(this.nzTableComponent);\n if (unbind) {\n this.unbindBodyScroll = unbind;\n return;\n }\n if (retry < 8) {\n setTimeout(() => this.bindHeaderBodyScrollSync(retry + 1), 50);\n }\n }\n\n private unbindHeaderBodyScrollSync(): void {\n if (this.unbindBodyScroll) {\n this.unbindBodyScroll();\n this.unbindBodyScroll = null;\n }\n }\n\n private syncStoreFromLinesInput(source?: Array<any>): void {\n const data = source || this.lines;\n this.storeFormLinesData = data ? JSON.parse(JSON.stringify(data)) : [];\n }\n\n /** 未筛选时与父组件 lines 同源,避免模板内 ngModel 与父数据脱节 */\n private applyDisplayFromStore(): void {\n if (this.lines && this.lines.length > 0) {\n this.displayLines = this.lines;\n return;\n }\n this.displayLines = this.storeFormLinesData\n ? JSON.parse(JSON.stringify(this.storeFormLinesData))\n : [];\n }\n\n private restoreFromStore(): void {\n this.isFilterData = false;\n this.applyDisplayFromStore();\n this.tableLoading = false;\n this.countSelected();\n this.calculateTotal();\n this.scheduleSyncHorizontalScroll();\n }\n\n // 全局性的搜索(涵盖页面上所有的可视文字)\n searchLines() {\n // 清空搜索:即使当前展示为空也要能从缓存恢复(对齐 hd-form-lines)\n if (!this.filterStr || !this.filterStr.trim()) {\n if (!this.storeFormLinesData || this.storeFormLinesData.length < 1) {\n return;\n }\n this.tableLoading = true;\n this.restoreFromStore();\n return;\n }\n if (!this.storeFormLinesData || this.storeFormLinesData.length < 1) {\n return;\n }\n this.tableLoading = true;\n const filterValue = this.filterStr.trim().toLowerCase();\n this.isFilterData = true;\n\n const filteredData = this.storeFormLinesData.filter((data: any) => {\n if (!this.searchFields || this.searchFields.length === 0) {\n for (const item of Object.keys(data)) {\n if (\n data[item] &&\n data[item].toString().toLowerCase().includes(filterValue)\n ) {\n return true;\n }\n }\n return false;\n }\n for (const item of this.searchFields) {\n if (\n data[item] &&\n data[item].toString().toLowerCase().includes(filterValue)\n ) {\n return true;\n }\n }\n return false;\n });\n this.displayLines = JSON.parse(JSON.stringify(filteredData));\n this.tableLoading = false;\n this.countSelected();\n this.calculateTotal();\n this.scheduleSyncHorizontalScroll();\n }\n\n private countSelected(): void {\n if (\n this.showSelected &&\n this.selectedField &&\n this.displayLines &&\n this.displayLines.length\n ) {\n this.displayLines.forEach((item) => {\n if (item[this.selectedField] === true && !this.isSelectDisabled(item)) {\n this.mapOfCheckedId[item[this.selectField]] = true;\n this.mapOfCheckList[item[this.selectField]] = item;\n }\n });\n if (\n this.displayLines.length === Object.keys(this.mapOfCheckList).length\n ) {\n this.isAllDisplayDataChecked = true;\n this.isIndeterminate = true;\n }\n }\n }\n\n get LodashRound() {\n return round;\n }\n\n drop(event: CdkDragDrop<string[]>): void {\n moveItemInArray(this.displayLines, event.previousIndex, event.currentIndex);\n this.displayLines = JSON.parse(JSON.stringify(this.displayLines));\n if (!this.isFilterData) {\n this.storeFormLinesData = JSON.parse(JSON.stringify(this.displayLines));\n }\n }\n\n calculateTotal() {\n // 这里处理合计数据\n if (this.showTotal && this.displayLines && this.displayLines.length) {\n this.totalOptionList = new Array(Number(this.columnsNumber) - 1).fill(\"\");\n this.totalOption.forEach((item) => {\n if (item.insertIndex && (item.insertValue || item.insertValue === 0)) {\n this.totalOptionList[item.insertIndex - 1] = {\n value: item.insertValue,\n align: item.align || \"right\",\n showDecimal: item.showDecimal || false,\n preserveNumber: item.preserveNumber != null ? item.preserveNumber : 2,\n isHide: item.isHide || false,\n };\n }\n });\n }\n }\n\n // 表格勾选逻辑\n currentPageDataChange($event: any): void {\n this.listOfDisplayData = $event;\n this.refreshStatus();\n this.scheduleSyncHorizontalScroll();\n }\n\n resetStatus() {\n this.isAllDisplayDataChecked = false;\n this.isIndeterminate = false;\n this.mapOfCheckedId = {};\n this.mapOfCheckList = {};\n this.selectEvent.emit([]);\n }\n\n refreshStatus(event: boolean = false, data: any = null): void {\n if (data) {\n if (event && this.isSelectDisabled(data)) {\n return;\n }\n this.mapOfCheckedId[data[this.selectField]] = event;\n if (event) {\n !this.mapOfCheckList[data[this.selectField]] &&\n (this.mapOfCheckList[data[this.selectField]] = data);\n } else {\n this.mapOfCheckList[data[this.selectField]] &&\n delete this.mapOfCheckList[data[this.selectField]];\n }\n }\n const selectableList = this.listOfDisplayData.filter(\n (item) => !this.isSelectDisabled(item),\n );\n this.isAllDisplayDataChecked =\n selectableList.length > 0 &&\n selectableList.every((item) => this.mapOfCheckedId[item[this.selectField]]);\n this.isIndeterminate =\n selectableList.some(\n (item) => this.mapOfCheckedId[item[this.selectField]],\n ) && !this.isAllDisplayDataChecked;\n // 触发select事件\n if (this.selectEvent) {\n this.selectEvent.emit(Object.values(this.mapOfCheckList));\n }\n }\n\n checkAll(value: boolean): void {\n this.listOfDisplayData.forEach((item) => {\n if (this.isSelectDisabled(item)) {\n return;\n }\n if (value) {\n !this.mapOfCheckList[item[this.selectField]] &&\n (this.mapOfCheckList[item[this.selectField]] = item);\n } else {\n this.mapOfCheckList[item[this.selectField]] &&\n delete this.mapOfCheckList[item[this.selectField]];\n }\n this.mapOfCheckedId[item[this.selectField]] = value;\n });\n this.refreshStatus();\n }\n\n /** 当前行是否禁用勾选 */\n isSelectDisabled(data: any): boolean {\n return !!(\n this.selectDisabledField &&\n data &&\n data[this.selectDisabledField] === true\n );\n }\n\n /** 当前行是否失效 */\n isInvalidRow(data: any): boolean {\n return !!(\n this.rowInvalidField &&\n data &&\n data[this.rowInvalidField] === true\n );\n }\n}\n","import { DragDropModule } from \"@angular/cdk/drag-drop\";\nimport { CommonModule } from \"@angular/common\";\nimport { NgModule, NO_ERRORS_SCHEMA } from \"@angular/core\";\nimport { FormsModule } from \"@angular/forms\";\nimport { HdButtonGroupModule } from \"../hd-button-group/hd-button-group.module\";\nimport { NgZorroAntdModule } from \"ng-zorro-antd\";\nimport { NzTableModule } from \"ng-zorro-antd/table\";\nimport { HdButtonModule } from \"../hd-button/hd-button.module\";\nimport { HdSpaceModule } from \"../hd-space/hd-space.module\";\nimport { HdDetailLinesComponent } from \"./hd-detail-lines.component\";\n\n@NgModule({\n imports: [\n CommonModule,\n NzTableModule,\n DragDropModule,\n FormsModule,\n NgZorroAntdModule,\n HdSpaceModule,\n HdButtonModule,\n HdButtonGroupModule,\n ],\n declarations: [HdDetailLinesComponent],\n exports: [HdDetailLinesComponent],\n schemas: [NO_ERRORS_SCHEMA],\n})\nexport class HdDetailLinesModule {}\n","import { CdkDragDrop, moveItemInArray } from \"@angular/cdk/drag-drop\";\nimport {\n AfterViewInit,\n ChangeDetectorRef,\n Component,\n ContentChild,\n EventEmitter,\n Input,\n OnChanges,\n OnDestroy,\n OnInit,\n Output,\n SimpleChanges,\n TemplateRef,\n ViewChild,\n} from \"@angular/core\";\nimport { round } from \"lodash\";\nimport { InputBoolean } from \"ng-zorro-antd/core\";\nimport { NzTableComponent } from \"ng-zorro-antd/table\";\nimport { Page } from \"../model/common-type\";\nimport { TotalOption } from \"../hd-detail-lines/hd-detail-lines.service\";\nimport {\n measureTableColWidth,\n resolveAutoTableScroll,\n bindNzTableHeaderBodyScrollSync,\n} from \"../utils/hd-table-scroll.util\";\n\n@Component({\n selector: \"hd-detail-lines-page\",\n templateUrl: \"./hd-detail-lines-page.component.html\",\n styleUrls: [\"./hd-detail-lines-page.component.less\"],\n})\nexport class HdDetailLinesPageComponent\n implements OnInit, OnChanges, AfterViewInit, OnDestroy\n{\n @ViewChild(\"hdTable\", { static: false }) nzTableComponent: NzTableComponent;\n @Input() lines: Array<any> = [];\n /** 与 hd-table 一致,可传 Page 对象;未传 lines 时使用 tableData.content */\n @Input() tableData: Page<any> = new Page();\n @Input() @InputBoolean() showSelected: boolean = false;\n @Input() @InputBoolean() allowDrop: boolean = false;\n /** 与 hd-table 一致:行数多时自动虚拟滚动;拖拽排序开启时强制关闭 */\n @Input() @InputBoolean() virtualScroll: boolean = true;\n /** 手动指定行高;不传则用默认/测量值 */\n @Input() virtualItemSize: number;\n /**\n * 横向滚动。历史默认 `{ x: '1px' }`(2.1.28 前一直如此):开启横滚但不锁死列宽,\n * 业务页可不写 th/td width。传 null 则按容器自动测算。\n */\n @Input() scroll: { [key: string]: string } = { x: \"1px\" };\n tableScroll: { x?: string; y?: string } = null;\n @Input() selectField: string = \"billNumber\";\n @Input() selectedField: string;\n /**\n * 行勾选禁用字段名。定义后取当前行该字段:\n * 为 true 时禁用该行勾选(全选也会跳过)。\n */\n @Input() selectDisabledField: string;\n /**\n * 行失效字段名。定义后取当前行该字段:\n * 为 true 时整行背景色为 #F7F8FA、文字 #868A9C。\n */\n @Input() rowInvalidField: string;\n @Input() isCrossPageSelect: boolean;\n @Output() selectEvent = new EventEmitter();\n @ContentChild(\"detailLineHead\", { static: false })\n detailLineHead: TemplateRef<any>;\n @ContentChild(\"detailLineBody\", { static: false })\n detailLineBody: TemplateRef<any>;\n @Input() @InputBoolean() showTotal: boolean = false;\n @Input() totalOption: Array<TotalOption> = [];\n @Input() columnsNumber: number | string = 0;\n @Input() tableLoading: boolean = false;\n @Input() tablePageIndex: number = 1;\n @Input() tablePageSize: number = 100;\n @Output() tablePageIndexChange = new EventEmitter<number>();\n @Output() tablePageSizeChange = new EventEmitter<number>();\n @Output() pageChange = new EventEmitter<void>();\n\n totalOptionList = [];\n isAllDisplayDataChecked = false;\n isIndeterminate = false;\n listOfDisplayData = [];\n mapOfCheckedId: { [key: string]: boolean } = {};\n mapOfCheckList: { [key: string]: any } = {};\n isCrossPageSelectLocal: boolean = false;\n\n showTable = true;\n /** 自动测量前的兜底行高 */\n measuredVirtualItemSize = 47;\n private virtualScrollActive: boolean | null = null;\n private unbindBodyScroll: (() => void) | null = null;\n\n constructor(private cdr: ChangeDetectorRef) {}\n\n get effectiveScroll(): { x?: string; y?: string } {\n return this.scroll != null ? this.scroll : this.tableScroll;\n }\n\n get effectiveVirtualItemSize(): number {\n if (this.virtualItemSize != null && this.virtualItemSize > 0) {\n return this.virtualItemSize;\n }\n return this.measuredVirtualItemSize;\n }\n\n /** 当前页内容高度是否超出视口 / 已指定 scroll.y */\n get needsVerticalScroll(): boolean {\n const rowCount = this.displayLines ? this.displayLines.length : 0;\n if (rowCount <= 0) {\n return false;\n }\n const base = this.effectiveScroll;\n if (base && base.y) {\n // 父级已定高(如弹窗),行稍多就开虚拟,避免千行 DOM\n return rowCount > 20;\n }\n const maxOffset = 200;\n const estimatedHeight = rowCount * this.effectiveVirtualItemSize;\n if (typeof window !== \"undefined\") {\n return estimatedHeight > window.innerHeight - maxOffset;\n }\n return rowCount > 100;\n }\n\n get useVirtualScroll(): boolean {\n if (!this.virtualScroll || this.allowDrop) {\n return false;\n }\n return this.needsVerticalScroll;\n }\n\n /** 虚拟滚动必须有 y;业务自适应列宽场景不自动给仅有 x 的表补 y */\n get resolvedScroll(): { x?: string; y?: string } {\n const base = this.effectiveScroll ? { ...this.effectiveScroll } : {};\n if (this.useVirtualScroll && !base.y) {\n base.y = this.getAutoScrollY();\n }\n return base;\n }\n\n /** 虚拟滚动按数组下标追踪,避免业务主键 trackBy 导致 CDK 行复用错位 */\n virtualTrackByRow = (index: number): number => index;\n\n ngOnInit(): void {\n if (this.isCrossPageSelect === true) {\n this.isCrossPageSelectLocal = this.isCrossPageSelect;\n }\n this.countSelected();\n this.calculateTotal();\n }\n\n ngAfterViewInit(): void {\n this.scheduleSyncHorizontalScroll();\n this.applyTableScrollMode(true);\n }\n\n ngOnDestroy(): void {\n this.unbindHeaderBodyScrollSync();\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n if (\n changes &&\n changes[\"tableData\"] &&\n changes[\"tableData\"][\"currentValue\"] &&\n changes[\"tableData\"][\"previousValue\"]\n ) {\n if (\n changes[\"tableData\"][\"currentValue\"][\"pageSize\"] !==\n changes[\"tableData\"][\"previousValue\"][\"pageSize\"] ||\n changes[\"tableData\"][\"currentValue\"][\"pageNumber\"] !==\n changes[\"tableData\"][\"previousValue\"][\"pageNumber\"]\n ) {\n this.countSelected();\n this.calculateTotal();\n this.applyTableScrollMode(false);\n return;\n }\n if (!this.isCrossPageSelectLocal) {\n this.resetStatus();\n }\n }\n this.countSelected();\n this.calculateTotal();\n if (\n changes[\"lines\"] ||\n changes[\"tableData\"] ||\n changes[\"showSelected\"] ||\n changes[\"scroll\"] ||\n changes[\"virtualScroll\"] ||\n changes[\"allowDrop\"]\n ) {\n this.scheduleSyncHorizontalScroll();\n this.applyTableScrollMode(false);\n }\n }\n\n /** 虚拟/普通模式切换时重建表格,避免残留滚动容器 */\n applyTableScrollMode(forceRemount = false): void {\n const useVirtual = this.useVirtualScroll;\n const modeChanged =\n this.virtualScrollActive !== null &&\n this.virtualScrollActive !== useVirtual;\n this.virtualScrollActive = useVirtual;\n\n if (forceRemount || modeChanged) {\n this.unbindHeaderBodyScrollSync();\n // 延后销毁/重建,避免当前 CD 周期内 ngIf 变更触发 ExpressionChanged\n setTimeout(() => {\n this.showTable = false;\n this.cdr.markForCheck();\n setTimeout(() => {\n this.showTable = true;\n this.cdr.markForCheck();\n setTimeout(() => {\n this.afterTableRender(useVirtual);\n });\n });\n });\n return;\n }\n\n this.cdr.markForCheck();\n this.afterTableRender(useVirtual);\n }\n\n private afterTableRender(useVirtual: boolean): void {\n this.scheduleSyncHorizontalScroll();\n this.bindHeaderBodyScrollSync(0);\n if (useVirtual) {\n this.refreshVirtualScrollViewport(true);\n }\n }\n\n refreshVirtualScrollViewport(forceMeasure = false): void {\n if (!this.useVirtualScroll) {\n this.bindHeaderBodyScrollSync(0);\n return;\n }\n setTimeout(() => {\n this.measureVirtualItemSize(forceMeasure);\n const viewport =\n this.nzTableComponent && this.nzTableComponent.cdkVirtualScrollViewport;\n if (viewport) {\n viewport.checkViewportSize();\n }\n this.bindHeaderBodyScrollSync(0);\n this.cdr.markForCheck();\n });\n }\n\n private measureVirtualItemSize(force = false): void {\n if (this.virtualItemSize != null && this.virtualItemSize > 0 && !force) {\n return;\n }\n const viewport =\n this.nzTableComponent && this.nzTableComponent.cdkVirtualScrollViewport;\n if (!viewport || !viewport.elementRef || !viewport.elementRef.nativeElement) {\n return;\n }\n const row = viewport.elementRef.nativeElement.querySelector(\n \"tr.hd-detail-lines-page-virtual-row\",\n ) as HTMLElement;\n if (row && row.offsetHeight > 0) {\n this.measuredVirtualItemSize = row.offsetHeight;\n }\n }\n\n private scheduleSyncHorizontalScroll(retry = 0): void {\n const delay = retry === 0 ? 0 : 50;\n setTimeout(() => {\n if (this.scroll == null) {\n this.syncHorizontalScroll();\n }\n this.bindHeaderBodyScrollSync(0);\n const afterX =\n (this.resolvedScroll && this.resolvedScroll.x) ||\n (this.tableScroll && this.tableScroll.x);\n if (\n this.scroll == null &&\n retry < 5 &&\n this.displayLines &&\n this.displayLines.length > 0 &&\n !afterX &&\n measureTableColWidth(this.nzTableComponent) === 0\n ) {\n this.scheduleSyncHorizontalScroll(retry + 1);\n }\n }, delay);\n }\n\n private getAutoScrollY(): string {\n return \"calc(100vh - 280px)\";\n }\n\n private syncHorizontalScroll(): void {\n if (this.scroll != null) {\n return;\n }\n const hasData = !!(this.displayLines && this.displayLines.length);\n const nextScroll = resolveAutoTableScroll(\n this.nzTableComponent,\n hasData,\n );\n const nextX = nextScroll ? nextScroll.x : null;\n // 自动测算只设 x;虚拟滚动才需要 y\n const nextY = this.useVirtualScroll ? this.getAutoScrollY() : null;\n const prevHasY = !!(this.tableScroll && this.tableScroll.y);\n const nextHasY = !!nextY;\n if (\n this.tableScroll &&\n this.tableScroll.x === nextX &&\n this.tableScroll.y === nextY\n ) {\n return;\n }\n this.tableScroll =\n nextX || nextY\n ? nextY\n ? { x: nextX, y: nextY }\n : { x: nextX }\n : null;\n if (prevHasY !== nextHasY) {\n this.applyTableScrollMode(true);\n return;\n }\n this.cdr.markForCheck();\n this.bindHeaderBodyScrollSync(0);\n }\n\n /** 表体横滚时同步表头;DOM 未就绪时重试 */\n private bindHeaderBodyScrollSync(retry = 0): void {\n this.unbindHeaderBodyScrollSync();\n if (!this.nzTableComponent || !(this.resolvedScroll && this.resolvedScroll.x)) {\n return;\n }\n const unbind = bindNzTableHeaderBodyScrollSync(this.nzTableComponent);\n if (unbind) {\n this.unbindBodyScroll = unbind;\n return;\n }\n if (retry < 8) {\n setTimeout(() => this.bindHeaderBodyScrollSync(retry + 1), 50);\n }\n }\n\n private unbindHeaderBodyScrollSync(): void {\n if (this.unbindBodyScroll) {\n this.unbindBodyScroll();\n this.unbindBodyScroll = null;\n }\n }\n\n get displayLines(): Array<any> {\n if (this.lines && this.lines.length) {\n return this.lines;\n }\n return (this.tableData && this.tableData.content) || [];\n }\n\n get totalCount(): number {\n if (this.tableData && this.tableData.totalElements != null) {\n return this.tableData.totalElements;\n }\n return this.displayLines.length;\n }\n\n getRowIndex(localIndex: number): number {\n return (this.tablePageIndex - 1) * this.tablePageSize + localIndex;\n }\n\n onPageIndexChange(pageIndex: number): void {\n this.tablePageIndex = pageIndex;\n this.tablePageIndexChange.emit(this.tablePageIndex);\n this.pageChange.emit();\n this.scheduleSyncHorizontalScroll();\n this.applyTableScrollMode(false);\n }\n\n onPageSizeChange(pageSize: number): void {\n this.tablePageSize = pageSize;\n this.tablePageIndex = 1;\n this.tablePageSizeChange.emit(this.tablePageSize);\n this.tablePageIndexChange.emit(this.tablePageIndex);\n this.pageChange.emit();\n this.scheduleSyncHorizontalScroll();\n this.applyTableScrollMode(true);\n }\n\n private countSelected(): void {\n if (\n this.showSelected &&\n this.selectedField &&\n this.displayLines &&\n this.displayLines.length\n ) {\n this.displayLines.forEach((item) => {\n if (item[this.selectedField] === true && !this.isSelectDisabled(item)) {\n this.mapOfCheckedId[item[this.selectField]] = true;\n this.mapOfCheckList[item[this.selectField]] = item;\n }\n });\n if (\n this.displayLines.length === Object.keys(this.mapOfCheckList).length\n ) {\n this.isAllDisplayDataChecked = true;\n this.isIndeterminate = true;\n }\n }\n }\n\n get LodashRound() {\n return round;\n }\n\n drop(event: CdkDragDrop<string[]>): void {\n const lines = [...this.displayLines];\n moveItemInArray(lines, event.previousIndex, event.currentIndex);\n this.lines = lines;\n }\n\n calculateTotal() {\n if (this.showTotal && this.displayLines && this.displayLines.length) {\n this.totalOptionList = new Array(Number(this.columnsNumber) - 1).fill(\"\");\n this.totalOption.forEach((item) => {\n if (item.insertIndex && (item.insertValue || item.insertValue === 0)) {\n this.totalOptionList[item.insertIndex - 1] = {\n value: item.insertValue,\n align: item.align || \"right\",\n showDecimal: item.showDecimal || false,\n preserveNumber: item.preserveNumber != null ? item.preserveNumber : 2,\n isHide: item.isHide || false,\n };\n }\n });\n }\n }\n\n currentPageDataChange($event: any): void {\n this.listOfDisplayData = $event;\n this.refreshStatus();\n if (!this.isCrossPageSelectLocal) {\n this.resetStatus();\n }\n this.scheduleSyncHorizontalScroll();\n }\n\n resetStatus() {\n this.isAllDisplayDataChecked = false;\n this.isIndeterminate = false;\n this.mapOfCheckedId = {};\n this.mapOfCheckList = {};\n this.selectEvent.emit([]);\n }\n\n refreshStatus(event: boolean = false, data: any = null): void {\n if (data) {\n if (event && this.isSelectDisabled(data)) {\n return;\n }\n this.mapOfCheckedId[data[this.selectField]] = event;\n if (event) {\n !this.mapOfCheckList[data[this.selectField]] &&\n (this.mapOfCheckList[data[this.selectField]] = data);\n } else {\n this.mapOfCheckList[data[this.selectField]] &&\n delete this.mapOfCheckList[data[this.selectField]];\n }\n }\n const sourceList =\n this.listOfDisplayData && this.listOfDisplayData.length\n ? this.listOfDisplayData\n : this.displayLines;\n const selectableList = (sourceList || []).filter(\n (item) => !this.isSelectDisabled(item),\n );\n this.isAllDisplayDataChecked =\n selectableList.length > 0 &&\n selectableList.every((item) => this.mapOfCheckedId[item[this.selectField]]);\n this.isIndeterminate =\n selectableList.some(\n (item) => this.mapOfCheckedId[item[this.selectField]],\n ) && !this.isAllDisplayDataChecked;\n if (this.selectEvent) {\n this.selectEvent.emit(Object.values(this.mapOfCheckList));\n }\n }\n\n checkAll(value: boolean): void {\n const sourceList =\n this.listOfDisplayData && this.listOfDisplayData.length\n ? this.listOfDisplayData\n : this.displayLines;\n (sourceList || []).forEach((item) => {\n if (this.isSelectDisabled(item)) {\n return;\n }\n if (value) {\n !this.mapOfCheckList[item[this.selectField]] &&\n (this.mapOfCheckList[item[this.selectField]] = item);\n } else {\n this.mapOfCheckList[item[this.selectField]] &&\n delete this.mapOfCheckList[item[this.selectField]];\n }\n this.mapOfCheckedId[item[this.selectField]] = value;\n });\n this.refreshStatus();\n }\n\n /** 当前行是否禁用勾选 */\n isSelectDisabled(data: any): boolean {\n return !!(\n this.selectDisabledField &&\n data &&\n data[this.selectDisabledField] === true\n );\n }\n\n /** 当前行是否失效 */\n isInvalidRow(data: any): boolean {\n return !!(\n this.rowInvalidField &&\n data &&\n data[this.rowInvalidField] === true\n );\n }\n}\n","import { DragDropModule } from \"@angular/cdk/drag-drop\";\nimport { CommonModule } from \"@angular/common\";\nimport { NgModule, NO_ERRORS_SCHEMA } from \"@angular/core\";\nimport { NzTableModule } from \"ng-zorro-antd/table\";\nimport { HdDetailLinesPageComponent } from \"./hd-detail-lines-page.component\";\n\n@NgModule({\n imports: [CommonModule, NzTableModule, DragDropModule],\n declarations: [HdDetailLinesPageComponent],\n exports: [HdDetailLinesPageComponent],\n schemas: [NO_ERRORS_SCHEMA],\n})\nexport class HdDetailLinesPageModule {}\n","import { Injectable } from '@angular/core';\n\n/**\n * 状态码 → 颜色(来源:sunan-server 业务 *State/*Status 枚举全量去重)\n * 已排除:银行支付 / AGV / HTTP StatusCode\n * 颜色语义:\n * 黄-过程中/中间态;灰-初始未开始/线下停用类;红-作废拒绝失效;\n * 蓝-审核流转中;绿-完成启用生效;橙-部分完成/预警\n */\nexport const statusToColor = {\n // 黄色:过程中 / 中间态 / 待处理动作\n '#FAB13B': [\n 'partshipped', 'partShipped', 'committed', 'COMMITTED', 'partValid', 'confirm', 'picking',\n 'prepareSubmitted', 'prepareConfirmed', 'receiving', 'shipping', 'delivering', 'approving',\n 'tendering', 'forPick', 'forPickup', 'forMove', 'forLoss', 'forMachiningTask', 'forReturn',\n 'forTransfer', 'forWholesale', 'outTransit', 'unconfirmedPrice', 'reSubmitted', 'submit',\n 'firstReview', 'Locked', 'beingUsed', 'transferLock', 'agvTransferLock', 'suspend',\n 'collected', 'merged', 'planCared', 'toBeConfirm', 'toBePaid', 'UNRECEIVED',\n '开票中', '红冲开票中', '待生效', '对账中', '可付款', '可对账',\n ],\n // 灰色:初始 / 未开始 / 未提交 / 线下停用 / 未读未打印\n '#9FA4A2': [\n 'initial', 'INITIAL', 'INIT', 'uncommitted', 'OFF_LINE', 'UN_PRINTED', 'unpublish', 'pastpublish',\n 'TO_COMMIT', 'unpublished', 'UNPUBLISHED', '未审核', 'returned', 'saved', 'SAVED', 'unaudited',\n 'UN_AUDIT', 'unlock', 'free', 'unKnow', 'noSign', 'NOT_INVOICED', 'notConfirm', 'unshipped',\n 'unPlanCar', 'UNREAD', 'UNSEND', '未提交', '未确认', '已保存', '未对账', '未登记', '未付款',\n ],\n // 红色:删除 / 作废 / 拒绝 / 失效 / 禁用\n '#F5222D': [\n 'delete', 'deleted', 'DELETED', 'abort', 'ABORTED', 'aborted', 'rejected', 'REJECTED',\n '停用', '禁用', '已停用', 'unpicked', 'AUDIT_REJECT', 'invalid', 'INVALID', 'disabled', 'DISABLED',\n '', 'canceled', 'cancelled', 'BLANK_OUT', 'complaintRejected', 'prepareRejected',\n 'returnedBeforeAudit', 'RETURNED_BEFORE_AUDIT', 'returnedBeforeConfirm', 'handleReturned',\n 'TAKE_DOWN', 'expired', 'paidFailed', 'submitFailed', 'exception',\n '已作废', '已删除', '已失效',\n ],\n // 蓝色:已审核 / 提交后流转 / 处理中\n '#3B77E3': [\n 'audited', 'adjusted', 'invoiced', 'INVOICED', 'audit', 'submitted', 'SUBMITTED', 'TO_AUDIT',\n '已审核', '处理中', 'processing', 'firstReviewed', 'awaiting_effective', 'AWAITING_EFFECTIVE',\n 'checking', 'reviewed', 'running', 'SENT', 'uploaded', 'snapped', 'handling',\n '已提交', '已初审', '已复审', '已分配', '已生成费用单',\n ],\n // 绿色:完成 / 成功 / 启用 / 生效\n '#20B95D': [\n 'shipped', 'SHIPPED', 'received', 'RECEIVED', 'checked', 'using', 'USING', 'reverse', 'valid',\n 'approved', 'ON_LINE', 'finished', 'FINISHED', 'finish', 'opened', 'PRINTED', '启用', 'picked',\n 'published', 'PUBLISHED', 'AUDITED', '已收票', '付款完成', '收款完成', '已收款', 'accepted',\n 'offered', 'confirmed', 'effective', 'EFFECTIVE', '已发布', 'paid', 'successful', 'READ',\n 'signed', 'ON_SALE', 'enabled', 'entrucked', 'normal', 'statemented',\n '已付款', '已核销', '已开票', '已完成', '已确认', '已红冲', '已结束', '已发货', '已收货', '生效中',\n '已对账', '已登记',\n ],\n // 橙色:部分完成 / 打印后修改 / 临期预警\n '#F05B24': [\n 'partialReceived', 'partDelete', 'tender', 'MODIFIED_AFTER_PRINTED', '部分付款', '部分收款',\n 'partPublished', 'partOffered', 'partInvoiced', 'partStatemented', '部分核销', 'willExpired',\n 'supplierConfirmed',\n ],\n};\n\n@Injectable({\n providedIn: 'root'\n})\nexport class HdStatusService {\n constructor() {\n }\n}\n","import { Component, Input, OnInit, SimpleChange } from \"@angular/core\";\nimport { statusToColor } from \"../hd-status/hd-status.service\";\n\n@Component({\n selector: \"hd-detail-tip\",\n templateUrl: \"./hd-detail-tip.component.html\",\n styleUrls: [\"./hd-detail-tip.component.less\"],\n})\nexport class HdDetailTipComponent implements OnInit {\n constructor() {}\n @Input() state: string;\n @Input() stateText: string;\n @Input() billNumber: string;\n @Input() tip: string = \"详情\";\n statusColor: string;\n\n ngOnInit() {\n this.setStatusColor();\n }\n\n ngOnChanges() {\n this.setStatusColor();\n }\n\n setStatusColor() {\n let findKey = '';\n for (let key in statusToColor) {\n if (\n this.state &&\n (statusToColor[key].indexOf(this.state) !== -1 ||\n statusToColor[key].indexOf(this.state.toUpperCase()) !== -1 ||\n statusToColor[key].indexOf(this.state.toLowerCase()) !== -1)\n ) {\n findKey = key;\n }\n }\n if (findKey) {\n this.statusColor = findKey;\n } else {\n this.statusColor = '#9FA4A2';\n }\n }\n}\n","import { HdDetailTipComponent } from './hd-detail-tip.component';\nimport { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { FormsModule } from '@angular/forms';\nimport { NgZorroAntdModule } from 'ng-zorro-antd';\n\n@NgModule({\n imports: [\n CommonModule,\n FormsModule,\n NgZorroAntdModule\n ],\n declarations: [HdDetailTipComponent],\n exports: [HdDetailTipComponent]\n})\nexport class HdDetailTipModule { }\n","import { Injectable } from '@angular/core';\nimport { SelectOption, CascaderOption, InputNumber } from '../model/common-type';\n\n// 控件列表\nexport class Filter {\n type: FilterListType;\n label: string; // 文本\n name: string; // 字段名称\n placeholder?: string; // 输入框提示文案\n value?: string | boolean | number | Array<string | Date> | null = null; // 值 不传默认为null\n // 组件内部成员\n show?: boolean;\n selectOption?: SelectOption; // 控件为Select时,选项列表\n inputNumber?: InputNumber = new InputNumber(); // number组件的min、max、step\n onSearchEvent?: Function; // select选择器搜索事件 可用于更新备选集合\n onChangeEvent?: Function; // 控件的值改变事件 可用于控件间联动\n onOpenChangeEvent?: Function; // select下拉展开/收起;展开时组件先清空 selectList 再回调,可用于按需请求\n onBlurEvent?: Function; // 控件失去焦点事件\n hdDisabledDate?: Function; // date-picker组件不可选择的日期\n showTime?: boolean = false; // 日期选择器是否包含时间\n require?: boolean = false; // 是否必填\n /**\n * 是否允许清空当前筛选项(Input 清空按钮、Select/Date/Cascader 等清空图标)。\n * 不传默认 true;Select 未配此项时仍可回退到 selectOption.hdAllowClear\n */\n hdAllowClear?: boolean;\n cascaderOption?: CascaderOption; // 级联选择器配置\n onChangeEventDebounceTime?: number; // change事件防抖\n onSearchEventEventDebounceTime?: number; // search事件防抖\n onOpenChangeEventDebounceTime?: number; // 下拉展开事件防抖,未配置或为0时同步触发(不防抖)\n}\n\n\n// 控件类型\nexport enum FilterListType {\n Input, // 输入框\n Select, // 单项选择器\n Date, // 单个日期选择\n DateRange, // 日期范围选择\n MultipleSelect, // 多选\n Cascader, // 级联选择\n Month, // 月份选择\n InputNumber // 数字输入\n}\n\n\n@Injectable({\n providedIn: 'root'\n})\nexport class HdFilterService {\n\n constructor() {\n }\n\n}\n","import { Injectable } from \"@angular/core\";\nimport { ValidatorFn } from \"@angular/forms\";\nimport {\n CascaderOption,\n CheckboxOption,\n InputNumber,\n RadioOption,\n SelectOption,\n} from \"../model/common-type\";\n\n// 控件列表\nexport class FormItem {\n type: FormListType;\n label: string; // 文本\n name: string; // 字段名称\n require?: boolean = false; // 是否必填\n placeholder?: string; // 输入框提示文案\n width?: number = 1; // 占据的列数。默认1\n hide?: boolean = false; // 是否为隐藏字段,仅用于填充表单的字段,不显示在页面上\n /**\n * 是否允许清空当前控件(Input 清空按钮、Select/Date/Cascader 等清空图标)。\n * 不传默认 true;Select 未配此项时仍可回退到 selectOption.hdAllowClear\n */\n hdAllowClear?: boolean;\n totalWidth?: number = 0;\n isRowFirst?: number = 0; // 是否是一行的第一个元素\n columnItems?: Array<any>; // 当前行的所有列的items\n value?:\n | string\n | boolean\n | number\n | Date\n | Array<string | number | boolean | Date>\n | null = null; // 值 不传默认为null\n disabled?: boolean;\n color?: string;\n // 组件内部成员\n maxLength?: number; // input控件的输入长度\n prefix?: string; // input前缀文字,对应 nz-input-group nzPrefix\n prefixIcon?: string; // input前缀图标,对应 nz-icon nzType\n selectOption?: SelectOption; // 控件为Select时,选项列表\n radioOption?: RadioOption; // 控件为Radio时,选项列表\n checkboxOption?: CheckboxOption; // 控件为Checkbox组时,选项列表\n inputNumber?: InputNumber = new InputNumber(); // number组件的min、max、step\n onChangeEvent?: Function; // 控件的值改变事件 可用于控件间联动\n onSearchEvent?: Function; // select选择器搜索事件 可用于更新备选集合\n onOpenChangeEvent?: Function; // select下拉展开/收起;展开时组件先清空 selectList 再回调,可用于按需请求\n defaultLabel?: string | Array<string>; // select选择器不初始化的时候可以使用defaultLabel搭配value,设置默认值\n hdDisabledDate?: Function; // date-picker组件不可选择的日期\n hdShowToday?: boolean = true; // 对应 nzShowToday,是否显示「今天」按钮,默认 true\n explain?: string; // label底部的介绍\n textAreaRows?: number; // textArea的行数\n showTime?: boolean = false; // 日期选择器是否包含时间\n labelColor?: string; // label的文字的颜色\n validatorKeys?: Array<ValidatorKey>;\n validator?: ValidatorFn;\n onChangeEventDebounceTime?: number; // change事件防抖,未配置或为0时同步触发(不防抖)\n onSearchEventEventDebounceTime?: number; // search事件防抖,未配置或为0时同步触发(不防抖)\n onOpenChangeEventDebounceTime?: number; // 下拉展开事件防抖,未配置或为0时同步触发(不防抖)\n cascaderOption?: CascaderOption; // 级联选择器配置\n format?: string; // 时间的格式化规则\n /** RegionAddress:详细地址字段名(与 name 组成两个 FormControl) */\n addressName?: string;\n /** RegionAddress:详细地址初始值 */\n addressValue?: string;\n /** RegionAddress:详细地址占位符,默认「请输入详细地址」 */\n addressPlaceholder?: string;\n /** RegionAddress:详细地址最大长度 */\n addressMaxLength?: number;\n}\n\nexport class ValidatorKey {\n key: string;\n label: string;\n}\n\n// 控件类型\nexport enum FormListType {\n Input, // 输入框\n Select, // 单项选择器\n Date, // 单个日期选择\n DateRange, // 日期范围选择\n TextArea, // 块级输入框\n InputNumber, // 数字输入\n MultipleSelect, // 多选\n ViewDom, // 单纯的显示控件\n Switch, // 开关\n Time, // 时间选择器\n Cascader, // 级联选择器\n Radio, // 单选\n Checkbox, // 复选框\n RegionAddress, // 省市区级联 + 详细地址(占 2 列,注册两个 FormControl)\n}\n\n@Injectable({\n providedIn: \"root\",\n})\nexport class HdFormService {\n constructor() {}\n}\n","import { CascaderOption } from '../model/common-type';\n\nexport const HD_CASCADER_MENU_CLASS = 'hd-cascader-menus';\n\nexport function cascaderPinyinFilter(\n inputValue: string,\n path: any[],\n pinyinField: string = 'pinyin'\n): boolean {\n if (!inputValue) {\n return true;\n }\n const keyword = inputValue.trim().toLowerCase();\n return path.some((option) => {\n const label =\n option.label != null ? String(option.label).toLowerCase() : '';\n const value =\n option.value != null ? String(option.value).toLowerCase() : '';\n const pinyin =\n option[pinyinField] != null\n ? String(option[pinyinField]).toLowerCase()\n : '';\n return (\n (label && label.indexOf(keyword) !== -1) ||\n (value && value.indexOf(keyword) !== -1) ||\n (pinyin && pinyin.indexOf(keyword) !== -1)\n );\n });\n}\n\nexport function getCascaderShowSearch(\n cascaderOption?: CascaderOption\n): boolean | { filter?: Function; sorter?: Function } {\n if (!cascaderOption) {\n return true;\n }\n if (cascaderOption.showSearch === false) {\n return false;\n }\n if (\n cascaderOption.showSearch &&\n typeof cascaderOption.showSearch === 'object'\n ) {\n return cascaderOption.showSearch;\n }\n const pinyinField = cascaderOption.pinyinField || 'pinyin';\n return {\n filter: (inputValue: string, path: any[]) =>\n cascaderPinyinFilter(inputValue, path, pinyinField),\n };\n}\n\n/** 下拉菜单 class:默认带 hd-cascader-menus,便于搜索结果按内容撑开 */\nexport function getCascaderMenuClassName(\n cascaderOption?: CascaderOption\n): string {\n const custom =\n cascaderOption && cascaderOption.menuClassName\n ? String(cascaderOption.menuClassName).trim()\n : '';\n if (!custom) {\n return HD_CASCADER_MENU_CLASS;\n }\n if (custom.indexOf(HD_CASCADER_MENU_CLASS) !== -1) {\n return custom;\n }\n return HD_CASCADER_MENU_CLASS + ' ' + custom;\n}\n\n/**\n * 合并 menuStyle。\n * 默认不强制宽度;仅当配置了 dropdownMinWidth / menuStyle 时才写入。\n */\nexport function getCascaderMenuStyle(\n cascaderOption?: CascaderOption\n): { [key: string]: string } | null {\n if (!cascaderOption) {\n return null;\n }\n const style: { [key: string]: string } = {};\n if (cascaderOption.menuStyle) {\n Object.keys(cascaderOption.menuStyle).forEach((key) => {\n style[key] = cascaderOption.menuStyle[key];\n });\n }\n if (cascaderOption.dropdownMinWidth != null) {\n const minWidthCss =\n typeof cascaderOption.dropdownMinWidth === 'number'\n ? cascaderOption.dropdownMinWidth + 'px'\n : String(cascaderOption.dropdownMinWidth);\n if (style['--hd-cascader-menu-min-width'] == null) {\n style['--hd-cascader-menu-min-width'] = minWidthCss;\n }\n }\n return Object.keys(style).length ? style : null;\n}\n","import { InjectionToken } from '@angular/core';\r\nimport { Observable } from 'rxjs';\r\n\r\n/** 用户筛选条件模版(与 auth UserFilterScheme 对齐) */\r\nexport class HdFilterScheme {\r\n uuid?: string;\r\n userCode?: string;\r\n filterKey: string;\r\n templateName: string;\r\n filterValue: string;\r\n}\r\n\r\n/** 内置默认模版名 */\r\nexport const HD_FILTER_DEFAULT_SCHEME_NAME = '默认条件';\r\n\r\n/**\r\n * 业务仓实现并 provide,hd-filter 在 enableFilterScheme 时注入使用。\r\n * 不提供则开启开关也不会调接口。\r\n */\r\nexport abstract class HdFilterSchemeStore {\r\n abstract queryByFilterKey(filterKey: string): Observable<Array<HdFilterScheme>>;\r\n abstract save(scheme: HdFilterScheme): Observable<HdFilterScheme>;\r\n abstract delete(uuid: string): Observable<void>;\r\n}\r\n\r\nexport const HD_FILTER_SCHEME_STORE = new InjectionToken<HdFilterSchemeStore>('HD_FILTER_SCHEME_STORE');\r\n","import {\n Component,\n EventEmitter,\n Inject,\n Input,\n OnChanges,\n OnDestroy,\n OnInit,\n Optional,\n Output,\n SimpleChanges\n} from '@angular/core';\nimport { FormBuilder, FormGroup } from '@angular/forms';\nimport { Filter, FilterListType } from './hd-filter.service';\nimport { FormItem, FormListType } from '../hd-form/hd-form.service';\nimport {\n getCascaderMenuClassName,\n getCascaderMenuStyle,\n getCascaderShowSearch,\n} from '../utils/cascader.util';\nimport { Subject, Subscription } from 'rxjs';\nimport { debounceTime } from 'rxjs/operators';\nimport { InputBoolean } from 'ng-zorro-antd';\nimport {\n HD_FILTER_DEFAULT_SCHEME_NAME,\n HD_FILTER_SCHEME_STORE,\n HdFilterScheme,\n HdFilterSchemeStore\n} from './hd-filter-scheme';\n\n@Component({\n selector: 'hd-filter',\n templateUrl: './hd-filter.component.html',\n styleUrls: ['./hd-filter.component.less']\n})\nexport class HdFilterComponent implements OnInit, OnChanges, OnDestroy {\n\n @Input() filterList: Array<Filter>;\n /** 是否启用筛选组(默认关闭) */\n @Input() @InputBoolean() enableFilterScheme = false;\n /** 筛选器标识,开启筛选组时必传 */\n @Input() filterSchemeKey: string;\n /** 是否去掉 hd-filter-container 的 padding,默认 false */\n @Input() @InputBoolean() hidePadding = false;\n\n @Output() searchEvent = new EventEmitter();\n @Output() resetEvent = new EventEmitter();\n\n validateFilterForm: FormGroup;\n isShowMore: boolean = true;\n filterListModular: number = 0;\n private searchSubject = new Subject<{ fn: any, event: any, selectOption?: any; }>();\n private debounceTimeout: number = 0;\n private openChangeSubject = new Subject<{ fn: any; event: any }>();\n private openChangeDebounceTimeout: number = 0;\n\n private searchSubscription: Subscription | undefined;\n private openChangeSubscription: Subscription | undefined;\n private schemeLoadSub: Subscription | undefined;\n private schemeActionSub: Subscription | undefined;\n\n /** 页面配置的初始值(虚拟「默认条件」) */\n private defaultFilterValues: { [key: string]: any } = {};\n private defaultValuesCaptured = false;\n\n schemeList: Array<HdFilterScheme> = [];\n currentScheme: HdFilterScheme = null;\n currentSchemeName = HD_FILTER_DEFAULT_SCHEME_NAME;\n schemeLoading = false;\n schemeSaving = false;\n\n switchModalVisible = false;\n switchFormList: Array<FormItem> = [];\n switchValidateForm: FormGroup;\n\n saveAsModalVisible = false;\n saveAsFormList: Array<FormItem> = [];\n saveAsValidateForm: FormGroup;\n\n readonly defaultSchemeName = HD_FILTER_DEFAULT_SCHEME_NAME;\n private readonly switchDefaultKey = '__DEFAULT__';\n\n constructor(\n private fb: FormBuilder,\n @Optional() @Inject(HD_FILTER_SCHEME_STORE) private schemeStore: HdFilterSchemeStore\n ) {\n this.searchSubscription = this.searchSubject.pipe(\n debounceTime(this.debounceTimeout)\n ).subscribe(({ fn, event, selectOption }) => this.triggerEvent(fn, event, selectOption));\n this.openChangeSubscription = this.openChangeSubject\n .pipe(debounceTime(this.openChangeDebounceTimeout))\n .subscribe(({ fn, event }) => {\n if (event) {\n this.triggerEvent(fn, event);\n }\n });\n }\n\n ngOnInit() {\n this.init();\n // 首次加载只在这里请求一次;ngOnChanges 首次也会带上 enableFilterScheme/filterSchemeKey,避免重复调接口\n this.tryLoadSchemes(true);\n }\n\n ngOnChanges(changes: SimpleChanges) {\n if (changes['filterList']) {\n this.init();\n }\n if (changes['enableFilterScheme'] || changes['filterSchemeKey']) {\n // 首次变更与 ngOnInit 重复(第二次会 unsubscribe 第一次,表现为请求无返回);仅后续切换再加载\n const enableLater = changes['enableFilterScheme'] && !changes['enableFilterScheme'].firstChange;\n const keyLater = changes['filterSchemeKey'] && !changes['filterSchemeKey'].firstChange;\n if (enableLater || keyLater) {\n this.tryLoadSchemes(true);\n }\n }\n }\n\n ngOnDestroy() {\n if (this.searchSubscription) {\n this.searchSubscription.unsubscribe();\n }\n if (this.openChangeSubscription) {\n this.openChangeSubscription.unsubscribe();\n }\n if (this.schemeLoadSub) {\n this.schemeLoadSub.unsubscribe();\n }\n if (this.schemeActionSub) {\n this.schemeActionSub.unsubscribe();\n }\n }\n\n get canUseScheme(): boolean {\n return !!(this.enableFilterScheme && this.filterSchemeKey && this.schemeStore);\n }\n\n private init(): void {\n this.isShowMore = true;\n if (!this.checkList(this.filterList)) {\n throw 'filter组件数据格式不规范';\n }\n if (!this.filterList) {\n this.filterList = [];\n }\n this.filterListModular = this.filterList.length % 4;\n const formGroupList = {};\n this.filterList.forEach((item, index) => {\n formGroupList[item.name] = this.fb.control(item.value, []);\n item.show = index < 7;\n });\n this.validateFilterForm = this.fb.group(formGroupList);\n if (!this.defaultValuesCaptured) {\n this.defaultFilterValues = this.clonePlain(this.getFilterData());\n this.defaultValuesCaptured = true;\n }\n this.filterList.forEach((item) => {\n if (item.onChangeEvent) {\n if (item.onChangeEventDebounceTime) {\n this.validateFilterForm.get(item.name).valueChanges\n .pipe(\n debounceTime(item.onChangeEventDebounceTime)\n )\n .subscribe(value => this.triggerEvent(item.onChangeEvent, value));\n } else {\n this.validateFilterForm.get(item.name).valueChanges.subscribe(value => this.triggerEvent(item.onChangeEvent, value));\n }\n }\n });\n }\n\n onSearchEvent(fn: any, event: any, onSearchEventDebounceTime: any, selectOption?: any) {\n if (onSearchEventDebounceTime) {\n this.debounceTimeout = onSearchEventDebounceTime;\n if (this.searchSubscription) {\n this.searchSubscription.unsubscribe();\n }\n this.searchSubscription = this.searchSubject.pipe(\n debounceTime(this.debounceTimeout)\n ).subscribe(({ fn, event, selectOption }) => this.triggerEvent(fn, event, selectOption));\n this.searchSubject.next({ fn, event, selectOption });\n } else {\n this.triggerEvent(fn, event, selectOption);\n }\n }\n\n onOpenChangeEvent(\n fn: any,\n open: boolean,\n onOpenChangeEventDebounceTime: any,\n filter?: Filter,\n ) {\n if (!fn) {\n return;\n }\n // 展开时先清空旧 options,避免条件变化后请求返回前仍展示上一批下拉数据\n if (open) {\n this.clearSelectOptionsOnOpen(filter);\n }\n const debounceMs =\n onOpenChangeEventDebounceTime != null\n ? onOpenChangeEventDebounceTime\n : 0;\n // 未配置或为 0:同步触发,不走 debounceTime(避免异步)\n if (!debounceMs) {\n if (open) {\n this.triggerEvent(fn, open);\n }\n return;\n }\n this.openChangeDebounceTimeout = debounceMs;\n if (this.openChangeSubscription) {\n this.openChangeSubscription.unsubscribe();\n }\n this.openChangeSubscription = this.openChangeSubject\n .pipe(debounceTime(this.openChangeDebounceTimeout))\n .subscribe(({ fn, event }) => {\n if (event) {\n this.triggerEvent(fn, event);\n }\n });\n this.openChangeSubject.next({ fn, event: open });\n }\n\n /** 有 onOpenChangeEvent 时展开下拉先清空选项,由业务回调再写入新数据 */\n private clearSelectOptionsOnOpen(filter: Filter): void {\n if (!filter || !filter.selectOption) {\n return;\n }\n const opt = filter.selectOption;\n if (opt.selectList != null) {\n opt.selectList = [];\n }\n }\n\n triggerEvent(fn: any, event: any, selectOption?: any) {\n if (fn && selectOption) {\n fn(event, selectOption);\n } else if (fn) {\n fn(event);\n } else {\n return;\n }\n }\n\n /** 当前展示的筛选项数量(尊重 item.show,与展开/收起一致) */\n getVisibleFilterCount(): number {\n return (this.filterList || []).filter((item) => item.show !== false).length;\n }\n\n /** 少条件时加宽字段列:1→18、2→9、≥3→6 */\n getFilterColSpan(): number {\n const n = this.getVisibleFilterCount();\n if (n === 1) {\n return 18;\n }\n if (n === 2) {\n return 9;\n }\n return 6;\n }\n\n computeOffset() {\n const visibleCount = this.getVisibleFilterCount();\n // ≤2 个可见条件时字段已加宽占满一行剩余,按钮不再 offset\n if (visibleCount <= 2) {\n return 0;\n }\n const modular = visibleCount % 4;\n if (visibleCount === 4) {\n return 18;\n }\n // ≥3:沿用原 %4 逻辑,按可见数计算(避免收起后错位)\n return this.isShowMore\n ? ((modular === 0 || visibleCount > 7) ? 0 : (3 - modular) * 6)\n : (modular === 0 ? 18 : (3 - modular) * 6);\n }\n\n private checkList(list: Array<Filter>): boolean {\n if (!list || (list && list.length === 0)) {\n return true;\n }\n const nameList = [];\n list.forEach((item) => {\n nameList.push(item.name);\n });\n if ([...new Set(nameList)].length !== list.length) {\n throw 'filter组件数据格式不规范,存在重复name值!';\n }\n return true;\n }\n\n public submitForm(): void {\n this.searchEvent.emit(this.validateFilterForm.getRawValue());\n }\n\n public resetForm(): void {\n this.resetFilterFormWithValue();\n if (this.resetEvent.observers.length > 0) {\n this.resetEvent.emit(this.validateFilterForm.getRawValue());\n } else {\n this.searchEvent.emit(this.validateFilterForm.getRawValue());\n }\n }\n\n public resetFilterFormWithValue() {\n const resetValue: { [key: string]: any } = {};\n this.filterList.forEach((item) => {\n resetValue[item.name] = item.value;\n });\n this.validateFilterForm.patchValue(resetValue);\n }\n\n public getFilterData() {\n return this.validateFilterForm.getRawValue();\n }\n\n public showMore(): void {\n this.isShowMore = !this.isShowMore;\n this.filterList.forEach((item, index) => {\n item.show = this.isShowMore ? index < 7 : true;\n });\n }\n\n public inputClean(filter: Filter): void {\n const patchObject = {};\n patchObject[filter.name] = null;\n this.validateFilterForm.patchValue(patchObject);\n }\n\n isAllowClear(item: Filter): boolean {\n if (!item) {\n return true;\n }\n if (item.hdAllowClear != null) {\n return !!item.hdAllowClear;\n }\n if (item.selectOption && item.selectOption.hdAllowClear != null) {\n return !!item.selectOption.hdAllowClear;\n }\n return true;\n }\n\n // ---------- 筛选组 ----------\n\n private tryLoadSchemes(applyDefault: boolean) {\n if (!this.canUseScheme) {\n this.schemeList = [];\n this.currentScheme = null;\n this.currentSchemeName = HD_FILTER_DEFAULT_SCHEME_NAME;\n return;\n }\n this.schemeLoading = true;\n if (this.schemeLoadSub) {\n this.schemeLoadSub.unsubscribe();\n }\n this.schemeLoadSub = this.schemeStore.queryByFilterKey(this.filterSchemeKey).subscribe(\n (list) => {\n this.schemeLoading = false;\n this.schemeList = list || [];\n if (applyDefault) {\n this.applySchemeByName(HD_FILTER_DEFAULT_SCHEME_NAME, true);\n } else if (this.currentScheme && this.currentScheme.uuid) {\n const found = this.schemeList.find(s => s.uuid === this.currentScheme.uuid);\n this.currentScheme = found || null;\n this.currentSchemeName = found ? found.templateName : HD_FILTER_DEFAULT_SCHEME_NAME;\n }\n },\n (err) => {\n this.schemeLoading = false;\n this.showError('加载筛选模版失败:' + (err || ''));\n if (applyDefault) {\n this.applySchemeByName(HD_FILTER_DEFAULT_SCHEME_NAME, true);\n }\n }\n );\n }\n\n /** 展示用列表:保证有「默认条件」 */\n getDisplaySchemeList(): Array<HdFilterScheme> {\n const result: Array<HdFilterScheme> = [];\n const fromDb = this.schemeList.find(s => s.templateName === HD_FILTER_DEFAULT_SCHEME_NAME);\n if (fromDb) {\n result.push(fromDb);\n } else {\n result.push({\n filterKey: this.filterSchemeKey,\n templateName: HD_FILTER_DEFAULT_SCHEME_NAME,\n filterValue: JSON.stringify(this.defaultFilterValues || {})\n });\n }\n (this.schemeList || []).forEach(s => {\n if (s.templateName !== HD_FILTER_DEFAULT_SCHEME_NAME) {\n result.push(s);\n }\n });\n return result;\n }\n\n openSwitchModal() {\n if (!this.canUseScheme) {\n return;\n }\n const current = this.currentScheme\n || {\n filterKey: this.filterSchemeKey,\n templateName: this.currentSchemeName || HD_FILTER_DEFAULT_SCHEME_NAME,\n filterValue: ''\n };\n this.buildSwitchFormList(this.getSwitchOptionKey(current));\n this.switchModalVisible = true;\n }\n\n closeSwitchModal() {\n this.switchModalVisible = false;\n }\n\n switchFormChangeEvent(form: FormGroup) {\n this.switchValidateForm = form;\n }\n\n getSwitchOptionKey(item: HdFilterScheme): string {\n if (!item) {\n return this.switchDefaultKey;\n }\n if (item.uuid) {\n return item.uuid;\n }\n return this.switchDefaultKey;\n }\n\n private buildSwitchFormList(selectedKey: string) {\n const selectList = this.getDisplaySchemeList().map(item => {\n return {\n value: this.getSwitchOptionKey(item),\n label: item.templateName\n };\n });\n this.switchFormList = [\n {\n type: FormListType.Select,\n label: '筛选组',\n name: 'schemeKey',\n require: true,\n width: 4,\n value: selectedKey,\n placeholder: '请选择筛选组',\n selectOption: {\n value: 'value',\n label: 'label',\n hdShowSearch: true,\n selectList: selectList\n }\n }\n ];\n }\n\n confirmSwitch(): boolean {\n if (!this.switchValidateForm || !this.switchValidateForm.valid) {\n this.showError('请选择筛选组');\n return false;\n }\n const schemeKey = this.switchValidateForm.getRawValue().schemeKey;\n if (schemeKey == null || schemeKey === '') {\n this.showError('请选择筛选组');\n return false;\n }\n const list = this.getDisplaySchemeList();\n let target: HdFilterScheme = null;\n if (schemeKey === this.switchDefaultKey) {\n target = list.find(s => s.templateName === HD_FILTER_DEFAULT_SCHEME_NAME && !s.uuid)\n || list.find(s => s.templateName === HD_FILTER_DEFAULT_SCHEME_NAME);\n } else {\n target = list.find(s => s.uuid === schemeKey);\n }\n if (!target) {\n this.showError('请选择筛选组');\n return false;\n }\n this.applyScheme(target, true);\n this.switchModalVisible = false;\n return true;\n }\n\n isDefaultScheme(item: HdFilterScheme): boolean {\n return !!(item && item.templateName === HD_FILTER_DEFAULT_SCHEME_NAME);\n }\n\n canDeleteCurrent(): boolean {\n return !!(this.currentScheme && this.currentScheme.uuid\n && this.currentScheme.templateName !== HD_FILTER_DEFAULT_SCHEME_NAME);\n }\n\n saveCurrentScheme() {\n if (!this.canUseScheme) {\n return;\n }\n const name = this.currentSchemeName || HD_FILTER_DEFAULT_SCHEME_NAME;\n const body: HdFilterScheme = {\n uuid: this.currentScheme && this.currentScheme.uuid ? this.currentScheme.uuid : null,\n filterKey: this.filterSchemeKey,\n templateName: name,\n filterValue: this.serializeFilterValue()\n };\n this.schemeSaving = true;\n if (this.schemeActionSub) {\n this.schemeActionSub.unsubscribe();\n }\n this.schemeActionSub = this.schemeStore.save(body).subscribe(\n (saved) => {\n this.schemeSaving = false;\n this.showSuccess('保存成功');\n this.currentScheme = saved;\n this.currentSchemeName = saved.templateName;\n this.refreshSchemeListKeepCurrent();\n },\n (err) => {\n this.schemeSaving = false;\n this.showError('保存失败:' + (err || ''));\n }\n );\n }\n\n openSaveAsModal() {\n this.buildSaveAsFormList();\n this.saveAsModalVisible = true;\n }\n\n closeSaveAsModal() {\n this.saveAsModalVisible = false;\n }\n\n saveAsFormChangeEvent(form: FormGroup) {\n this.saveAsValidateForm = form;\n }\n\n private buildSaveAsFormList() {\n this.saveAsFormList = [\n {\n type: FormListType.Input,\n label: '筛选组名称',\n name: 'templateName',\n require: true,\n width: 4,\n maxLength: 50,\n value: null,\n placeholder: '请输入筛选组名称'\n }\n ];\n }\n\n confirmSaveAs(): boolean {\n if (!this.saveAsValidateForm || !this.saveAsValidateForm.valid) {\n this.showError('请输入筛选组名称');\n return false;\n }\n const name = ((this.saveAsValidateForm.getRawValue().templateName) || '').trim();\n if (!name) {\n this.showError('请输入筛选组名称');\n return false;\n }\n if (name === HD_FILTER_DEFAULT_SCHEME_NAME) {\n this.showError('不能使用「默认条件」作为筛选组名称,请使用「保存为当前」覆盖默认条件');\n return false;\n }\n const exists = (this.schemeList || []).some(s => s.templateName === name);\n if (exists) {\n this.showError('筛选组名称已存在');\n return false;\n }\n const body: HdFilterScheme = {\n filterKey: this.filterSchemeKey,\n templateName: name,\n filterValue: this.serializeFilterValue()\n };\n this.schemeSaving = true;\n if (this.schemeActionSub) {\n this.schemeActionSub.unsubscribe();\n }\n this.schemeActionSub = this.schemeStore.save(body).subscribe(\n (saved) => {\n this.schemeSaving = false;\n this.saveAsModalVisible = false;\n this.showSuccess('另存为成功');\n this.currentScheme = saved;\n this.currentSchemeName = saved.templateName;\n this.refreshSchemeListKeepCurrent();\n },\n (err) => {\n this.schemeSaving = false;\n this.showError('另存为失败:' + (err || ''));\n }\n );\n return false;\n }\n\n deleteCurrentScheme() {\n if (!this.canDeleteCurrent()) {\n return;\n }\n const uuid = this.currentScheme.uuid;\n this.schemeSaving = true;\n if (this.schemeActionSub) {\n this.schemeActionSub.unsubscribe();\n }\n this.schemeActionSub = this.schemeStore.delete(uuid).subscribe(\n () => {\n this.schemeSaving = false;\n this.showSuccess('删除成功');\n this.schemeList = (this.schemeList || []).filter(s => s.uuid !== uuid);\n this.applySchemeByName(HD_FILTER_DEFAULT_SCHEME_NAME, true);\n },\n (err) => {\n this.schemeSaving = false;\n this.showError('删除失败:' + (err || ''));\n }\n );\n }\n\n private refreshSchemeListKeepCurrent() {\n if (!this.canUseScheme) {\n return;\n }\n this.schemeStore.queryByFilterKey(this.filterSchemeKey).subscribe(\n (list) => {\n this.schemeList = list || [];\n if (this.currentScheme && this.currentScheme.uuid) {\n const found = this.schemeList.find(s => s.uuid === this.currentScheme.uuid);\n if (found) {\n this.currentScheme = found;\n this.currentSchemeName = found.templateName;\n }\n }\n },\n () => { /* ignore */ }\n );\n }\n\n private applySchemeByName(name: string, emitSearch: boolean) {\n const list = this.getDisplaySchemeList();\n const target = list.find(s => s.templateName === name);\n if (target) {\n this.applyScheme(target, emitSearch);\n }\n }\n\n private applyScheme(scheme: HdFilterScheme, emitSearch: boolean) {\n this.currentScheme = scheme && scheme.uuid ? scheme : {\n filterKey: this.filterSchemeKey,\n templateName: scheme ? scheme.templateName : HD_FILTER_DEFAULT_SCHEME_NAME,\n filterValue: scheme ? scheme.filterValue : JSON.stringify(this.defaultFilterValues || {})\n };\n this.currentSchemeName = this.currentScheme.templateName || HD_FILTER_DEFAULT_SCHEME_NAME;\n\n let values: any = {};\n if (this.currentSchemeName === HD_FILTER_DEFAULT_SCHEME_NAME && !(scheme && scheme.uuid)) {\n values = this.clonePlain(this.defaultFilterValues || {});\n } else {\n try {\n values = JSON.parse(scheme.filterValue || '{}');\n } catch (e) {\n values = {};\n }\n if (this.currentSchemeName === HD_FILTER_DEFAULT_SCHEME_NAME) {\n // 库中默认条件覆盖初始值:以默认值为底,再叠加库值\n values = Object.assign({}, this.defaultFilterValues || {}, values || {});\n }\n }\n this.patchFilterValues(values);\n if (emitSearch) {\n this.submitForm();\n }\n }\n\n private serializeFilterValue(): string {\n return JSON.stringify(this.getFilterData() || {});\n }\n\n private patchFilterValues(values: { [key: string]: any }) {\n if (!this.validateFilterForm || !this.filterList) {\n return;\n }\n const patch: { [key: string]: any } = {};\n this.filterList.forEach(item => {\n if (values && Object.prototype.hasOwnProperty.call(values, item.name)) {\n patch[item.name] = this.reviveFilterValue(item, values[item.name]);\n }\n });\n this.validateFilterForm.patchValue(patch);\n }\n\n private reviveFilterValue(filter: Filter, value: any): any {\n if (value == null) {\n return value;\n }\n if (filter.type === FilterListType.DateRange) {\n if (Array.isArray(value)) {\n return value.map(v => this.parseDateLike(v));\n }\n return value;\n }\n if (filter.type === FilterListType.Date || filter.type === FilterListType.Month) {\n return this.parseDateLike(value);\n }\n return value;\n }\n\n private parseDateLike(value: any): any {\n if (value == null || value instanceof Date) {\n return value;\n }\n if (typeof value === 'string' && /^\\d{4}-\\d{2}-\\d{2}/.test(value)) {\n const d = new Date(value);\n return isNaN(d.getTime()) ? value : d;\n }\n if (typeof value === 'number') {\n const d = new Date(value);\n return isNaN(d.getTime()) ? value : d;\n }\n return value;\n }\n\n private clonePlain(obj: any): any {\n try {\n return JSON.parse(JSON.stringify(obj == null ? {} : obj));\n } catch (e) {\n return {};\n }\n }\n\n private showSuccess(msg: string) {\n if (typeof window !== 'undefined' && (window as any).hdMessageService) {\n (window as any).hdMessageService.prototype.success(msg);\n }\n }\n\n private showError(msg: string) {\n if (typeof window !== 'undefined' && (window as any).hdMessageService) {\n (window as any).hdMessageService.prototype.error(msg);\n } else {\n // eslint-disable-next-line no-console\n console.error(msg);\n }\n }\n\n getCascaderShowSearch = getCascaderShowSearch;\n getCascaderMenuClassName = getCascaderMenuClassName;\n getCascaderMenuStyle = getCascaderMenuStyle;\n}\n","import {\n Component,\n EventEmitter,\n Input,\n OnInit,\n Output,\n SimpleChanges,\n} from \"@angular/core\";\nimport { FormBuilder, FormGroup, Validators } from \"@angular/forms\";\nimport { Subject, Subscription } from \"rxjs\";\nimport { debounceTime } from \"rxjs/operators\";\nimport { FormItem, FormListType } from \"./hd-form.service\";\nimport {\n getCascaderMenuClassName,\n getCascaderMenuStyle,\n getCascaderShowSearch,\n} from \"../utils/cascader.util\";\n// import * as moment from 'moment';\n@Component({\n selector: \"hd-form\",\n templateUrl: \"./hd-form.component.html\",\n styleUrls: [\"./hd-form.component.less\"],\n})\nexport class HdFormComponent implements OnInit {\n @Input() formList: Array<FormItem>;\n @Output() changeEvent = new EventEmitter();\n validateHdForm: FormGroup;\n inputValue: string;\n\n private searchSubject = new Subject<{ fn: any; event: any }>();\n private debounceTimeout: number = 0; // 默认防抖时间\n private searchSubscription: Subscription | undefined;\n\n private openChangeSubject = new Subject<{ fn: any; event: any }>();\n private openChangeDebounceTimeout: number = 0;\n private openChangeSubscription: Subscription | undefined;\n\n constructor(private fb: FormBuilder) {\n this.searchSubscription = this.searchSubject\n .pipe(debounceTime(this.debounceTimeout))\n .subscribe(({ fn, event }) => this.triggerEvent(fn, event));\n this.openChangeSubscription = this.openChangeSubject\n .pipe(debounceTime(this.openChangeDebounceTimeout))\n .subscribe(({ fn, event }) => {\n // 防抖结束后仅展开态触发业务回调,避免频繁开关仍打接口\n if (event) {\n this.triggerEvent(fn, event);\n }\n });\n }\n\n ngOnInit() {\n if (!this.formList || this.formList.length === 0) {\n // 模板始终绑定 [formGroup],空列表时也必须有 FormGroup 实例\n this.validateHdForm = this.fb.group({});\n return;\n }\n\n this.init();\n }\n\n ngOnChanges(changes: SimpleChanges) {\n if (\n changes[\"formList\"] &&\n JSON.stringify(changes[\"formList\"].currentValue) !==\n JSON.stringify(changes[\"formList\"].previousValue)\n ) {\n if (!this.formList || this.formList.length === 0) {\n this.validateHdForm = this.fb.group({});\n return;\n }\n this.init();\n }\n }\n\n onSearchEvent(fn: any, event: any, onSearchEventDebounceTime: any) {\n if (!fn) {\n return;\n }\n const debounceMs =\n onSearchEventDebounceTime != null ? onSearchEventDebounceTime : 0;\n // 未配置或为 0:同步触发,不走 debounceTime(避免异步)\n if (!debounceMs) {\n this.triggerEvent(fn, event);\n return;\n }\n this.debounceTimeout = debounceMs;\n if (this.searchSubscription) {\n this.searchSubscription.unsubscribe();\n }\n this.searchSubscription = this.searchSubject\n .pipe(debounceTime(this.debounceTimeout))\n .subscribe(({ fn, event }) => this.triggerEvent(fn, event));\n this.searchSubject.next({ fn, event });\n }\n\n onOpenChangeEvent(\n fn: any,\n open: boolean,\n onOpenChangeEventDebounceTime: any,\n formItem?: any,\n ) {\n if (!fn) {\n return;\n }\n // 展开时先清空旧 options,避免条件变化后请求返回前仍展示上一批下拉数据\n if (open) {\n this.clearSelectOptionsOnOpen(formItem);\n }\n const debounceMs =\n onOpenChangeEventDebounceTime != null\n ? onOpenChangeEventDebounceTime\n : 0;\n // 未配置或为 0:同步触发,不走 debounceTime(避免异步)\n if (!debounceMs) {\n if (open) {\n this.triggerEvent(fn, open);\n }\n return;\n }\n this.openChangeDebounceTimeout = debounceMs;\n if (this.openChangeSubscription) {\n this.openChangeSubscription.unsubscribe();\n }\n this.openChangeSubscription = this.openChangeSubject\n .pipe(debounceTime(this.openChangeDebounceTimeout))\n .subscribe(({ fn, event }) => {\n if (event) {\n this.triggerEvent(fn, event);\n }\n });\n this.openChangeSubject.next({ fn, event: open });\n }\n\n /** 有 onOpenChangeEvent 时展开下拉先清空选项,由业务回调再写入新数据 */\n private clearSelectOptionsOnOpen(formItem: any): void {\n if (!formItem || !formItem.selectOption) {\n return;\n }\n const opt = formItem.selectOption;\n if (opt.selectList != null) {\n opt.selectList = [];\n }\n }\n\n triggerEvent(fn: any, event: any) {\n if (fn) {\n fn(event);\n }\n }\n\n private init(): void {\n // 异常捕获\n if (!this.checkList(this.formList)) {\n throw \"form组件数据格式不规范\";\n }\n // RegionAddress 固定占两列,保证级联宽与单列控件对齐\n this.formList.forEach((item) => {\n if (item.type === FormListType.RegionAddress) {\n item.width = 2;\n }\n });\n // 对表单数据做初始化,用row隔离每行数据item\n this.dealRow();\n // 首先根据定义的组件数组 去初始化表单\n let formGroupList = {};\n this.formList.forEach((item, index) => {\n // 日期相关的控件做特殊处理\n if (item.type === 2 && item.value) {\n const [year, month, day] = item.value\n .toString()\n .split(\"-\")\n .map((str) => parseInt(str));\n const newDateStr = new Date(year, month - 1, day)\n .toLocaleDateString(\"zh-Hans-CN\", {\n year: \"numeric\",\n month: \"2-digit\",\n day: \"2-digit\",\n })\n .replace(/\\//g, \"-\");\n if (item.validator) {\n formGroupList[item.name] = this.fb.control(\n { value: new Date(newDateStr), disabled: item.disabled },\n item.require && !item.hide\n ? [Validators.required, item.validator]\n : [],\n );\n } else {\n formGroupList[item.name] = this.fb.control(\n { value: new Date(newDateStr), disabled: item.disabled },\n item.require && !item.hide ? [Validators.required] : [],\n );\n }\n } else if (item.type === 3 && item.value) {\n let formItemDate = JSON.parse(JSON.stringify(item.value));\n if (formItemDate && formItemDate instanceof Array) {\n formItemDate = formItemDate.map((item) => {\n const [year, month, day] = item\n .split(\"-\")\n .map((str) => parseInt(str));\n const newDateStr = new Date(year, month - 1, day)\n .toLocaleDateString(\"zh-Hans-CN\", {\n year: \"numeric\",\n month: \"2-digit\",\n day: \"2-digit\",\n })\n .replace(/\\//g, \"-\");\n item = new Date(newDateStr);\n });\n if (item.validator) {\n formGroupList[item.name] = this.fb.control(\n { value: formItemDate, disabled: item.disabled },\n item.require && !item.hide\n ? [Validators.required, item.validator]\n : [],\n );\n } else {\n formGroupList[item.name] = this.fb.control(\n { value: formItemDate, disabled: item.disabled },\n item.require && !item.hide ? [Validators.required] : [],\n );\n }\n } else {\n throw \"form组件中DateRange控件value值格式不规范,正确示例['2020-01-22', '2020-01-23']\";\n }\n } else if (item.type === FormListType.Checkbox && item.checkboxOption) {\n const checkboxValue = Array.isArray(item.value) ? item.value : [];\n if (item.validator) {\n formGroupList[item.name] = this.fb.control(\n { value: checkboxValue, disabled: item.disabled },\n item.require && !item.hide\n ? [Validators.required, item.validator]\n : [],\n );\n } else {\n formGroupList[item.name] = this.fb.control(\n { value: checkboxValue, disabled: item.disabled },\n item.require && !item.hide ? [Validators.required] : [],\n );\n }\n } else if (item.type === FormListType.Checkbox) {\n const checkboxValue = item.value != null ? item.value : false;\n if (item.validator) {\n formGroupList[item.name] = this.fb.control(\n { value: checkboxValue, disabled: item.disabled },\n item.require && !item.hide\n ? [Validators.required, item.validator]\n : [],\n );\n } else {\n formGroupList[item.name] = this.fb.control(\n { value: checkboxValue, disabled: item.disabled },\n item.require && !item.hide ? [Validators.required] : [],\n );\n }\n } else if (item.type === FormListType.RegionAddress) {\n const regionValue = Array.isArray(item.value) ? item.value : null;\n const addressValue =\n item.addressValue != null ? item.addressValue : null;\n const requireValidators =\n item.require && !item.hide ? [Validators.required] : [];\n if (item.validator) {\n formGroupList[item.name] = this.fb.control(\n { value: regionValue, disabled: item.disabled },\n item.require && !item.hide\n ? [Validators.required, item.validator]\n : [item.validator],\n );\n } else {\n formGroupList[item.name] = this.fb.control(\n { value: regionValue, disabled: item.disabled },\n requireValidators,\n );\n }\n formGroupList[item.addressName] = this.fb.control(\n { value: addressValue, disabled: item.disabled },\n requireValidators,\n );\n } else {\n if (item.validator) {\n formGroupList[item.name] = this.fb.control(\n { value: item.value, disabled: item.disabled },\n item.require && !item.hide\n ? [Validators.required, item.validator]\n : [],\n );\n } else {\n formGroupList[item.name] = this.fb.control(\n { value: item.value, disabled: item.disabled },\n item.require && !item.hide ? [Validators.required] : [],\n );\n }\n }\n });\n\n this.validateHdForm = this.fb.group(formGroupList);\n\n this.formList.forEach((item) => {\n if (item.onChangeEvent) {\n const debounceMs =\n item.onChangeEventDebounceTime != null\n ? item.onChangeEventDebounceTime\n : 0;\n const control = this.validateHdForm.get(item.name);\n // 未配置或为 0:同步订阅,不走 debounceTime(避免异步破坏 patchValue 联动回显)\n if (debounceMs > 0) {\n control.valueChanges\n .pipe(debounceTime(debounceMs))\n .subscribe((value) =>\n this.triggerEvent(item.onChangeEvent, value),\n );\n } else {\n control.valueChanges.subscribe((value) =>\n this.triggerEvent(item.onChangeEvent, value),\n );\n }\n }\n });\n this.validateHdForm.valueChanges.subscribe((data) =>\n this.onHdFormValueChanged(data),\n );\n this.onHdFormValueChanged();\n }\n\n private dealRow() {\n // 一阶段 遍历数据计算相关数据\n const formListLength = this.formList.length;\n let step = 0;\n for (let i = 0; i < formListLength; i++) {\n if (!this.formList[i].hide) {\n if (i === 0) {\n this.formList[i].totalWidth = this.formList[i].width || 1;\n this.formList[i].isRowFirst = 1;\n step = step + 4;\n } else {\n // 去找到前一个非hide的控件\n for (let j = i - 1; j >= 0; j--) {\n if (this.formList[j].totalWidth) {\n this.formList[i].totalWidth =\n this.formList[j].totalWidth + (this.formList[i].width || 1);\n if (\n this.formList[j].totalWidth + (this.formList[i].width || 1) >\n step &&\n this.formList[j].totalWidth <= step\n ) {\n step = step + 4;\n this.formList[i].isRowFirst = 1;\n } else {\n this.formList[i].isRowFirst = 0;\n }\n break;\n }\n }\n }\n }\n }\n\n // 二阶段 isRowFirst的数组项增加子节点\n for (let m = 0; m < formListLength; m++) {\n if (this.formList[m].isRowFirst === 1) {\n this.formList[m].columnItems = [];\n let space = 0;\n for (let n = 1; n < formListLength - m; n++) {\n if (space === 4 || this.formList[m + n].isRowFirst === 1) {\n break;\n }\n if (\n !this.formList[m + n].hide &&\n this.formList[m + n] &&\n this.formList[m + n].isRowFirst === 0\n ) {\n this.formList[m].columnItems.push(this.formList[m + n]);\n space++;\n }\n }\n }\n }\n }\n\n private onHdFormValueChanged(data?: any) {\n this.changeEvent.emit(this.validateHdForm);\n }\n\n private checkList(list: Array<FormItem>): boolean {\n if (!list || (list && list.length === 0)) {\n return false;\n }\n let nameList = [];\n list.forEach((item) => {\n // 校验单项选择器\n // if (item.type === FormListType.Select && (!item.selectOption.selectList || (item.selectOption.selectList && item.selectOption.selectList.length === 0))) {\n // throw 'form组件数据格式不规范,存在单项选择器没有传入选项!'\n // }\n if (item.type === FormListType.RegionAddress && !item.addressName) {\n throw \"form组件 RegionAddress 必须配置 addressName\";\n }\n if (\n item.type === FormListType.RegionAddress &&\n (!item.cascaderOption || !item.cascaderOption.options)\n ) {\n throw \"form组件 RegionAddress 必须配置 cascaderOption.options\";\n }\n nameList.push(item.name);\n if (item.type === FormListType.RegionAddress) {\n nameList.push(item.addressName);\n }\n });\n // 校验 name / addressName 是否重复\n if ([...new Set(nameList)].length !== nameList.length) {\n throw \"form组件数据格式不规范,存在重复name值!\";\n }\n // ...more check\n return true;\n }\n\n /** RegionAddress 双控件任一脏且无效时显示 error */\n getRegionAddressValidateStatus(item: FormItem): string {\n if (!this.validateHdForm) {\n return \"\";\n }\n const region = this.validateHdForm.get(item.name);\n const address = item.addressName\n ? this.validateHdForm.get(item.addressName)\n : null;\n const invalidDirty = (control) =>\n control && control.dirty && control.invalid;\n if (invalidDirty(region) || invalidDirty(address)) {\n return \"error\";\n }\n return \"\";\n }\n\n getRegionAddressErrorTip(item: FormItem): string {\n if (!this.validateHdForm) {\n return \"\";\n }\n const region = this.validateHdForm.get(item.name);\n const address = item.addressName\n ? this.validateHdForm.get(item.addressName)\n : null;\n if (region && region.dirty && region.hasError(\"required\")) {\n return item.label + \"不能为空\";\n }\n if (address && address.dirty && address.hasError(\"required\")) {\n return \"详细地址不能为空\";\n }\n if (item.validatorKeys && region) {\n for (let i = 0; i < item.validatorKeys.length; i++) {\n const key = item.validatorKeys[i];\n if (region.hasError(key.key)) {\n return key.label;\n }\n }\n }\n return item.label + \"不能为空\";\n }\n\n public submitForm(): void {\n Object.values(this.validateHdForm.controls).forEach((control) => {\n control.markAsDirty();\n control.updateValueAndValidity();\n });\n this.changeEvent.emit(this.validateHdForm.getRawValue());\n }\n\n public resetForm(): void {\n this.validateHdForm.reset();\n Object.values(this.validateHdForm.controls).forEach((control) => {\n control.markAsDirty();\n control.updateValueAndValidity();\n });\n this.changeEvent.emit(this.validateHdForm.getRawValue());\n }\n\n public inputClean(filter: FormItem): void {\n const patchObject = {};\n patchObject[filter.name] = null;\n this.validateHdForm.patchValue(patchObject);\n }\n\n /**\n * 是否允许清空:优先 FormItem.hdAllowClear,其次 selectOption.hdAllowClear,默认 true\n */\n isAllowClear(item: FormItem): boolean {\n if (!item) {\n return true;\n }\n if (item.hdAllowClear != null) {\n return !!item.hdAllowClear;\n }\n if (item.selectOption && item.selectOption.hdAllowClear != null) {\n return !!item.selectOption.hdAllowClear;\n }\n return true;\n }\n\n isCheckboxChecked(name: string, value: any): boolean {\n const control = this.validateHdForm.get(name);\n const current = control ? control.value : null;\n return Array.isArray(current) && current.indexOf(value) !== -1;\n }\n\n onCheckboxItemChange(name: string, value: any, checked: boolean): void {\n const control = this.validateHdForm.get(name);\n if (!control) {\n return;\n }\n const current = Array.isArray(control.value) ? [...control.value] : [];\n const index = current.indexOf(value);\n if (checked && index === -1) {\n current.push(value);\n } else if (!checked && index !== -1) {\n current.splice(index, 1);\n }\n control.setValue(current);\n control.markAsDirty();\n control.updateValueAndValidity();\n }\n\n readonly inputNumberDefaultFormatter = (value: unknown) => value;\n readonly inputNumberDefaultParser = (value: string) => value;\n\n getCascaderShowSearch = getCascaderShowSearch;\n getCascaderMenuClassName = getCascaderMenuClassName;\n getCascaderMenuStyle = getCascaderMenuStyle;\n}\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { HdFormComponent } from './hd-form.component';\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { NgZorroAntdModule } from 'ng-zorro-antd';\nimport { HdButtonModule } from '../hd-button/hd-button.module';\n@NgModule({\n imports: [\n CommonModule,\n FormsModule,\n ReactiveFormsModule,\n NgZorroAntdModule,\n HdButtonModule\n ],\n declarations: [HdFormComponent],\n exports: [HdFormComponent]\n})\nexport class HdFormModule { }\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { HdFilterComponent } from './hd-filter.component';\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { NgZorroAntdModule } from 'ng-zorro-antd';\nimport { HdButtonModule } from '../hd-button/hd-button.module';\nimport { HdFormModule } from '../hd-form/hd-form.module';\n@NgModule({\n imports: [\n CommonModule,\n FormsModule,\n ReactiveFormsModule,\n NgZorroAntdModule,\n HdButtonModule,\n HdFormModule\n ],\n declarations: [HdFilterComponent],\n exports: [HdFilterComponent]\n})\nexport class HdFilterModule { }\n","import { Injectable } from '@angular/core';\n\n@Injectable()\nexport class CommonSessionService {\n putSession(session_key: string, session: any) {\n if (session) {\n window.sessionStorage.setItem(session_key, JSON.stringify(session));\n } else {\n window.sessionStorage.removeItem(session_key);\n }\n }\n\n getSession(session_key: string): any {\n return JSON.parse(window.sessionStorage.getItem(session_key));\n }\n\n removeSession(session_key: string) {\n window.sessionStorage.removeItem(session_key);\n }\n}\n","import { Injectable } from \"@angular/core\";\nimport { InputNumber, SelectOption } from \"../model/common-type\";\n// 控件列表\nexport class FormLine {\n type: FormLineType; // 控件类型\n label: string; // 文本\n name: string; // 字段名称\n placeholder?: string; // 输入框的提示文件\n require?: boolean = false; // 是否必填\n hide?: boolean = false; // 是否为隐藏字段,仅用于填充表单的字段,不显示在页面上\n hideViewDomValue?: boolean = false; // type为ViewDom时,是否隐藏value值, 用于特殊场景,譬如列表中图片的显示\n /** 列设置可见性(仅非 hide 的 ViewDom 可由设置列切换;默认 true) */\n isShow?: boolean = true;\n align?: \"left\" | \"right\" | \"center\"; // 列对齐方式\n value?: string | boolean | number | Date | Array<string | Date> | null = null; // 值 不传默认为null\n isSelect?: boolean; // 输入框等是否允许点击之后全选内容\n selectOption?: SelectOption; // 控件为Select时,选项列表\n explainOptionRight?: ExplainOption; // 明细字段的说明(右侧)\n explainOption?: ExplainOption; // 明细字段的说明\n colorOption?: ColorOption; // 颜色字段的说明\n // 组件内部成员\n maxLength?: number; // input控件的输入长度\n preserveNumber?: number; // 需要保留小数的列的位数\n inputNumber?: InputNumber = new InputNumber(); // number组件的min、max、step\n onChangeEvent?: Function; // 控件的值改变事件 可用于控件间联动\n onSearchEvent?: Function; // select选择器搜索事件 可用于更新备选集合\n onOpenChangeEvent?: Function; // select下拉展开/收起,回调 (open, line);展开时组件先清空 selectList/selectListName 再回调\n defaultLabel?: any; // select选择器不初始化的时候可以使用defaultLabel搭配value,设置默认值\n hdDisabledDate?: Function; // date-picker组件不可选择的日期\n hdShowToday?: boolean = true; // 对应 nzShowToday,是否显示「今天」按钮,默认 true\n disabled?: boolean; // 不可输入状态\n showTime?: boolean = false; // 日期选择器是否包含时间\n style?: object;\n canSearch?: boolean = false; // 指明hide 情况下的控件是否可以被搜索,默认false\n onChangeEventDebounceTime?: number; // change事件防抖,未配置或为0时同步触发(不防抖)\n onSearchEventEventDebounceTime?: number; // search事件防抖,未配置或为0时同步触发(不防抖)\n onOpenChangeEventDebounceTime?: number; // 下拉展开事件防抖,未配置或为0时同步触发(不防抖)\n}\n\nexport class ColorOption {\n name: string;\n color?: string;\n}\n\nexport class ExplainOption {\n show: boolean;\n name: string;\n color?: string;\n}\n\n// 控件类型\nexport enum FormLineType {\n Input = \"Input\", // 输入框\n Select = \"Select\", // 单项选择器\n Date = \"Date\", // 单个日期选择\n DateRange = \"DateRange\", // 日期范围选择\n TextArea = \"TextArea\", // 块级输入框\n InputNumber = \"InputNumber\", // 数字输入\n MultipleSelect = \"MultipleSelect\", // 多选\n ViewDom = \"ViewDom\", // 单纯的显示控件\n Switch = \"Switch\", // 开关\n Time = \"Time\", // 时间选择器\n}\n\n/** 列设置缓存(IndexedDB),仅存可见 ViewDom 的 name 列表 */\nexport class FormLinesCacheOption {\n cols: Array<string> = [];\n}\n\n@Injectable({\n providedIn: \"root\",\n})\nexport class HdFormLinesService {\n constructor() {}\n}\n","import {\n AfterViewInit,\n ChangeDetectorRef,\n Component,\n ContentChild,\n ElementRef,\n EventEmitter,\n Input,\n OnDestroy,\n OnInit,\n Output,\n QueryList,\n SimpleChanges,\n TemplateRef,\n ViewChildren,\n} from \"@angular/core\";\nimport { FormArray, FormBuilder, FormGroup, Validators } from \"@angular/forms\";\nimport { round } from \"lodash\";\nimport * as localforage from \"localforage\";\nimport {\n InputBoolean,\n NzDatePickerComponent,\n NzInputNumberComponent,\n NzRangePickerComponent,\n NzSelectComponent,\n NzTimePickerComponent,\n} from \"ng-zorro-antd\";\nimport { NzFormatEmitEvent } from \"ng-zorro-antd/core\";\nimport { Subject, Subscription } from \"rxjs\";\nimport { debounceTime } from \"rxjs/operators\";\nimport { TotalOption } from \"../hd-detail-lines/hd-detail-lines.service\";\nimport { TreeGrid } from \"../hd-table/hd-table.service\";\nimport { SelectOptionTableColumn } from \"../model/common-type\";\nimport { CommonSessionService } from \"../service/common-session.service\";\nimport { FormLine, FormLineType, FormLinesCacheOption } from \"./hd-form-lines.service\";\n\n/** 与 ant-select 选项项水平内边距一致,用于表头与选项行对齐 */\nconst SELECT_TABLE_OPTION_HORIZONTAL_PADDING = 12;\n\n@Component({\n selector: \"hd-form-lines\",\n templateUrl: \"./hd-form-lines.component.html\",\n styleUrls: [\"./hd-form-lines.component.less\"],\n})\nexport class HdFormLinesComponent implements OnInit, AfterViewInit, OnDestroy {\n @ViewChildren(\"formInputDom\") formInputDomList!: QueryList<ElementRef>;\n\n @Input() @InputBoolean() showLineNumber: boolean = true;\n @Input() @InputBoolean() allowEmpty: boolean = true;\n @Output() deleteLastLineEvent = new EventEmitter();\n @Input() @InputBoolean() showKeyboardOperateTip: boolean = false;\n /** 是否启用键盘方向键/Enter 在单元格间跳转,默认开启 */\n @Input() @InputBoolean() enableKeyboardOperate: boolean = true;\n @Input() @InputBoolean() tableLoading: boolean = false;\n @Input() @InputBoolean() showSearch: boolean = false;\n /** 是否展示行勾选列,用于外部批量操作勾选行 */\n @Input() @InputBoolean() showCheckbox: boolean = false;\n /** 是否展示列设置(齿轮),默认关闭;需要时页面手工 `[showColSettings]=\"true\"`;仅非 hide 的 ViewDom 可配置,禁止拖拽调序 */\n @Input() @InputBoolean() showColSettings: boolean = false;\n /** 列设置缓存 key 片段;有值时持久化到 IndexedDB,无则仅当前会话生效 */\n @Input() uuid: string;\n @Input() formLines: Array<FormLine>;\n // 针对formLines里面所有的name,\n @Input() formLinesData: any;\n @Input() operateButtons: Array<string> = [\"add\", \"delete\"]; // 操作列按钮:add / delete / copy\n @Input() scroll: { [key: string]: string } = { x: \"1px\" };\n @Output() changeEvent = new EventEmitter();\n /** 新增空行后抛出该行 FormGroup(手动添加、键盘跳行自动补行等) */\n @Output() addLineEvent = new EventEmitter<FormGroup>();\n /** 勾选变化时抛出当前勾选行 FormGroup 列表 */\n @Output() selectionChange = new EventEmitter<FormGroup[]>();\n @Input() @InputBoolean() showDeleteConfirm: boolean = false;\n paginationPageIndex: number = 1;\n paginationPageSize: number = 10;\n validateHdFormLines: FormGroup;\n newLine: any;\n inputValue: string;\n\n // 合计区域\n @Input() @InputBoolean() showTotal: boolean = false;\n @Input() totalOption: Array<TotalOption> = [];\n @Input() columnsNumber: number | string = 0;\n totalOptionList = [];\n\n showForm: boolean = false;\n filterStr: string;\n storeFormLinesData: any = []; // 缓存的总的表单数据\n filterStoreFormLinesData: any = []; // 筛选出来的数据列表\n filterIndexStore: Array<number> = []; // 筛选出来的数据在原始列表中的下标\n isFilterData: boolean = false; // 是否是已经筛选过的数据\n formValid: boolean = false; // 表单当前的状态\n /** 勾选的行 id(跨页、搜索重建后仍保留) */\n private selectedRowIds = new Set<string>();\n private searchSubject = new Subject<{ fn: any; event: any; line: any }>();\n private debounceTimeout: number = 0; // 默认防抖时间\n\n private searchSubscription: Subscription | undefined;\n private formInputDomListSub: Subscription | undefined;\n\n private openChangeSubject = new Subject<{ fn: any; event: any; line: any }>();\n private openChangeDebounceTimeout: number = 0;\n private openChangeSubscription: Subscription | undefined;\n\n // 当前页的dom二维数组\n collectDomList: Array<\n Array<\n | ElementRef\n | NzSelectComponent\n | NzInputNumberComponent\n | NzDatePickerComponent\n | NzRangePickerComponent\n | NzTimePickerComponent\n >\n > = [];\n // 当前聚焦的dom元素坐标\n activeDomX: number = null;\n activeDomY: number = null;\n activeDom:\n | ElementRef\n | NzSelectComponent\n | NzInputNumberComponent\n | NzDatePickerComponent\n | NzRangePickerComponent\n | NzTimePickerComponent = null;\n activeSelectedComponentOpen: boolean = false;\n @ContentChild(\"ViewDomRightTemplate\", { static: false })\n ViewDomRightTemplate: TemplateRef<any>;\n /** 工具栏左侧自定义按钮,用法同 hd-table 的 tableLeftButton */\n @ContentChild(\"formLinesLeftButton\", { static: false })\n formLinesLeftButton: TemplateRef<any>;\n /** 工具栏右侧自定义按钮,用法同 hd-table 的 tableRightButton */\n @ContentChild(\"formLinesRightButton\", { static: false })\n formLinesRightButton: TemplateRef<any>;\n /** 表格上方自定义区域(如勾选提示),用法同 hd-table 的 tableTotal */\n @ContentChild(\"tableTotal\", { static: false })\n tableTotal: TemplateRef<any>;\n\n // 列设置\n isDropdownVisible: boolean = false;\n showListNodes: boolean = false;\n nowListNodes: Array<TreeGrid> = [];\n hideListNodes: Array<TreeGrid> = [];\n cancelNowListNodes: Array<TreeGrid> = [];\n cancelHideListNodes: Array<TreeGrid> = [];\n formLinesCacheOption: FormLinesCacheOption = new FormLinesCacheOption();\n private localforage: any = null;\n private localtionTmp: string = \"\";\n private userSession: any;\n /** 是否已从 IndexedDB 读到过列设置缓存(含 cols 为空) */\n private colsCacheLoaded: boolean = false;\n\n constructor(\n private fb: FormBuilder,\n private cdr: ChangeDetectorRef,\n private commonSessionService: CommonSessionService,\n ) {\n this.localforage = localforage.createInstance({\n driver: localforage.INDEXEDDB,\n name: \"hd-fscm\",\n version: 1.0,\n storeName: \"hd-fscm-store\",\n });\n this.searchSubscription = this.searchSubject\n .pipe(debounceTime(this.debounceTimeout))\n .subscribe(({ fn, event, line }) => this.triggerEvent(fn, event, line));\n this.openChangeSubscription = this.openChangeSubject\n .pipe(debounceTime(this.openChangeDebounceTimeout))\n .subscribe(({ fn, event, line }) => {\n if (event) {\n this.triggerEvent(fn, event, line);\n }\n });\n }\n\n ngOnInit() {\n this.localtionTmp = location.pathname;\n if (this.localtionTmp) {\n this.localtionTmp = this.localtionTmp.replace(/\\//g, \"_\");\n }\n this.userSession = this.commonSessionService.getSession(\n \"__jy_authorization_session__\",\n );\n if (!this.userSession) {\n this.userSession = { userCode: \"dev\" };\n }\n // 缓存一下总的表单数据\n this.storeFormLinesData = this.formLinesData;\n this.initColSettings();\n this.init();\n }\n\n ngAfterViewInit() {\n this.collectDomData();\n this.formInputDomListSub = this.formInputDomList.changes.subscribe(() => {\n this.collectDomData();\n });\n }\n\n ngOnDestroy() {\n if (this.searchSubscription) {\n this.searchSubscription.unsubscribe();\n }\n if (this.openChangeSubscription) {\n this.openChangeSubscription.unsubscribe();\n }\n if (this.formInputDomListSub) {\n this.formInputDomListSub.unsubscribe();\n }\n }\n\n get formLinesLength() {\n return this.linesFormArray.controls.length;\n }\n\n get operateColWidth() {\n const count = (this.operateButtons || []).filter((btn) =>\n [\"add\", \"copy\", \"delete\"].includes(btn),\n ).length;\n return Math.max(count * 40, 80);\n }\n\n /** allowEmpty 且操作列仅有删除时:允许 0 行,初始化与删至空都不自动补空行 */\n get isTrulyEmptyAllowed(): boolean {\n const buttons = (this.operateButtons || []).filter((btn) =>\n [\"add\", \"copy\", \"delete\"].includes(btn),\n );\n return (\n this.allowEmpty &&\n buttons.length === 1 &&\n buttons[0] === \"delete\"\n );\n }\n\n /** 勾选列固定时,序号列的 left 偏移 */\n get lineNumberLeft() {\n return this.showCheckbox ? \"40px\" : \"0px\";\n }\n\n private generateRowId(): string {\n return `hd_row_${Date.now()}_${Math.random().toString(36).slice(2, 9)}`;\n }\n\n private getRowId(line: FormGroup): string {\n if (!line || !line.get(\"_hdRowId\")) {\n return null;\n }\n return line.get(\"_hdRowId\").value;\n }\n\n /** 当前页的行(用于表头全选,仅作用于当前页,跨页勾选仍保留) */\n private getCurrentPageLines(): FormGroup[] {\n const start = (this.paginationPageIndex - 1) * this.paginationPageSize;\n const end = start + this.paginationPageSize;\n return (this.linesFormArray.controls as FormGroup[]).slice(start, end);\n }\n\n isLineChecked(line: FormGroup): boolean {\n const id = this.getRowId(line);\n return !!id && this.selectedRowIds.has(id);\n }\n\n isAllChecked(): boolean {\n const pageLines = this.getCurrentPageLines();\n return (\n pageLines.length > 0 &&\n pageLines.every((line) => this.isLineChecked(line))\n );\n }\n\n isIndeterminate(): boolean {\n const pageLines = this.getCurrentPageLines();\n const checkedCount = pageLines.filter((line) =>\n this.isLineChecked(line),\n ).length;\n return checkedCount > 0 && checkedCount < pageLines.length;\n }\n\n onAllChecked(checked: boolean): void {\n this.getCurrentPageLines().forEach((line) => {\n const id = this.getRowId(line);\n if (!id) {\n return;\n }\n if (checked) {\n this.selectedRowIds.add(id);\n } else {\n this.selectedRowIds.delete(id);\n }\n });\n this.emitSelectionChange();\n }\n\n onLineCheckedChange(line: FormGroup, checked: boolean): void {\n const id = this.getRowId(line);\n if (!id) {\n return;\n }\n if (checked) {\n this.selectedRowIds.add(id);\n } else {\n this.selectedRowIds.delete(id);\n }\n this.emitSelectionChange();\n }\n\n private emitSelectionChange(): void {\n this.selectionChange.emit(this.getSelectedLines());\n this.cdr.markForCheck();\n }\n\n private removeLineFromSelection(line: FormGroup): void {\n const id = this.getRowId(line);\n if (id && this.selectedRowIds.has(id)) {\n this.selectedRowIds.delete(id);\n this.emitSelectionChange();\n }\n }\n\n private applyValuesToLine(\n line: FormGroup,\n values: { [field: string]: any },\n emitEvent: boolean,\n ): void {\n Object.keys(values).forEach((key) => {\n let control = line.get(key);\n if (!control) {\n line.addControl(key, this.fb.control(values[key]));\n control = line.get(key);\n }\n // 静默赋值,避免 valueChanges / DOM maxlength 回写把校验态打乱\n control.setValue(values[key], { emitEvent: false });\n control.markAsPristine({ onlySelf: true });\n control.markAsUntouched({ onlySelf: true });\n control.updateValueAndValidity({ emitEvent: false });\n if (emitEvent) {\n const formItem = this.formLines.find((item) => item.name === key);\n if (formItem && formItem.onChangeEvent) {\n this.triggerEvent(formItem.onChangeEvent, values[key], line);\n }\n }\n });\n this.cdr.detectChanges();\n }\n\n /**\n * 仅在用户交互后、且当前值确实为空的 required 错误时展示红框,\n * 避免批量赋值时 ng-zorro 残留「不能为空」提示\n */\n getControlValidateStatus(line: FormGroup, formItem: FormLine): string {\n const control = line.get(formItem.name);\n if (!control || control.disabled) {\n return \"\";\n }\n const empty =\n control.value === null ||\n control.value === undefined ||\n control.value === \"\";\n if (\n (control.dirty || control.touched) &&\n empty &&\n control.hasError(\"required\")\n ) {\n return \"error\";\n }\n return \"\";\n }\n\n /** 用户输入时按 maxLength 截断(不使用原生 maxlength,避免干扰程序化赋值) */\n limitInputLength(event: Event, line: FormGroup, formItem: FormLine): void {\n if (!formItem || !formItem.maxLength) {\n return;\n }\n const input = event.target as HTMLInputElement;\n if (input && input.value && input.value.length > formItem.maxLength) {\n const next = input.value.slice(0, formItem.maxLength);\n input.value = next;\n const control = line.get(formItem.name);\n if (control) {\n control.setValue(next);\n }\n }\n }\n\n /** 获取当前勾选且已挂载的行 FormGroup(当前筛选结果内) */\n public getSelectedLines(): FormGroup[] {\n return (this.linesFormArray.controls as FormGroup[]).filter((line) =>\n this.isLineChecked(line),\n );\n }\n\n /**\n * 获取全部勾选行数据(含跨页、搜索后未展示但仍勾选的行)\n */\n public getSelectedLinesData(): any[] {\n const result = [];\n const mountedById = new Map<string, any>();\n (this.linesFormArray.controls as FormGroup[]).forEach((line) => {\n const id = this.getRowId(line);\n if (id && this.selectedRowIds.has(id)) {\n mountedById.set(id, line.getRawValue());\n }\n });\n\n (this.storeFormLinesData || []).forEach((data) => {\n const id = data && data._hdRowId;\n if (id && this.selectedRowIds.has(id)) {\n result.push(mountedById.has(id) ? mountedById.get(id) : { ...data });\n }\n });\n\n // 兜底:刚新增、尚未进 store 的勾选行\n this.selectedRowIds.forEach((id) => {\n if (\n !result.some((item) => item && item._hdRowId === id) &&\n mountedById.has(id)\n ) {\n result.push(mountedById.get(id));\n }\n });\n return result;\n }\n\n /**\n * 批量填充勾选行字段(支持跨页、搜索后未展示但仍勾选的行)\n * @param values 要写入的字段,如 { remark: '批量备注', price: 10 }\n * @param emitEvent 是否触发 valueChanges / onChangeEvent,默认 true\n * @returns 实际填充的行数\n */\n public batchFillSelected(\n values: { [field: string]: any },\n emitEvent: boolean = true,\n ): number {\n if (!values || this.selectedRowIds.size === 0) {\n return 0;\n }\n const mountedById = new Map<string, FormGroup>();\n (this.linesFormArray.controls as FormGroup[]).forEach((line) => {\n const id = this.getRowId(line);\n if (id) {\n mountedById.set(id, line);\n }\n });\n\n let count = 0;\n this.selectedRowIds.forEach((id) => {\n const line = mountedById.get(id);\n if (line) {\n this.applyValuesToLine(line, values, emitEvent);\n count++;\n return;\n }\n // 当前筛选/页面未挂载:直接改总数据,退出搜索后可见\n const storeItem = (this.storeFormLinesData || []).find(\n (data) => data && data._hdRowId === id,\n );\n if (storeItem) {\n Object.keys(values).forEach((key) => {\n storeItem[key] = values[key];\n });\n count++;\n }\n });\n return count;\n }\n\n /** 清空勾选 */\n public clearSelection(): void {\n if (this.selectedRowIds.size === 0) {\n return;\n }\n this.selectedRowIds.clear();\n this.emitSelectionChange();\n }\n\n /** 当前勾选数量(含跨页、搜索保留) */\n public getSelectedCount(): number {\n return this.selectedRowIds.size;\n }\n\n /** 是否展示顶部工具栏 */\n get showToolbar(): boolean {\n return (\n !!this.showSearch ||\n !!this.showCheckbox ||\n !!this.formLinesLeftButton ||\n !!this.formLinesRightButton ||\n this.showColSettingsButton\n );\n }\n\n /** 是否展示列设置齿轮(有可配置 ViewDom 时) */\n get showColSettingsButton(): boolean {\n return (\n !!this.showColSettings && this.getConfigurableFormLines().length > 0\n );\n }\n\n /** 列是否渲染:hide 永不展示;ViewDom 受 isShow 控制 */\n isColumnVisible(item: FormLine): boolean {\n if (!item || item.hide) {\n return false;\n }\n if (item.type === FormLineType.ViewDom) {\n return item.isShow !== false;\n }\n return true;\n }\n\n /** 可进入列设置的字段:非 hide 的 ViewDom */\n getConfigurableFormLines(): FormLine[] {\n if (!this.formLines || !this.formLines.length) {\n return [];\n }\n return this.formLines.filter(\n (item) => item.type === FormLineType.ViewDom && !item.hide,\n );\n }\n\n private getCacheKey(): string {\n const userCode =\n (this.userSession && this.userSession.userCode) || \"dev\";\n return (\n \"hd-form-lines_\" +\n userCode +\n \"_\" +\n this.localtionTmp +\n \"_\" +\n this.uuid\n );\n }\n\n private initColSettings(): void {\n this.colsCacheLoaded = false;\n if (!this.showColSettings || !this.formLines || !this.formLines.length) {\n this.setCols();\n return;\n }\n if (!this.uuid) {\n this.setCols();\n return;\n }\n this.localforage\n .ready()\n .then(() => {\n this.localforage\n .getItem(this.getCacheKey())\n .then((value: FormLinesCacheOption) => {\n if (value && Array.isArray(value.cols)) {\n this.formLinesCacheOption = value;\n this.colsCacheLoaded = true;\n } else {\n this.formLinesCacheOption = new FormLinesCacheOption();\n this.colsCacheLoaded = false;\n }\n this.setCols();\n })\n .catch(() => {\n this.formLinesCacheOption = new FormLinesCacheOption();\n this.colsCacheLoaded = false;\n this.setCols();\n });\n })\n .catch((e) => {\n console.log(\"localforage加载异常\", e);\n this.formLinesCacheOption = new FormLinesCacheOption();\n this.colsCacheLoaded = false;\n this.setCols();\n });\n }\n\n private hasColsCache(): boolean {\n return this.colsCacheLoaded && Array.isArray(this.formLinesCacheOption.cols);\n }\n\n private saveFormLinesCacheOption(): void {\n if (!this.uuid) {\n return;\n }\n this.localforage.setItem(this.getCacheKey(), this.formLinesCacheOption);\n }\n\n /** 按 formLines 原始顺序排列节点(禁止调序时保持源顺序) */\n private sortNodesByFormLinesOrder(nodes: TreeGrid[]): TreeGrid[] {\n const order = this.getConfigurableFormLines().map((f) => f.name);\n return nodes.slice().sort((a, b) => {\n return order.indexOf(a.key) - order.indexOf(b.key);\n });\n }\n\n setCols(): void {\n this.showListNodes = false;\n this.nowListNodes = [];\n this.hideListNodes = [];\n const configurable = this.getConfigurableFormLines();\n const hasCache = this.hasColsCache();\n configurable.forEach((element) => {\n if (hasCache) {\n element.isShow = this.formLinesCacheOption.cols.includes(element.name);\n } else if (element.isShow === undefined || element.isShow === null) {\n element.isShow = true;\n }\n const node: TreeGrid = {\n title: element.label,\n key: element.name,\n checked: element.isShow !== false,\n disabled: false,\n };\n if (element.isShow !== false) {\n this.nowListNodes.push(node);\n } else {\n this.hideListNodes.push(node);\n }\n });\n this.nowListNodes = this.sortNodesByFormLinesOrder(this.nowListNodes);\n this.hideListNodes = this.sortNodesByFormLinesOrder(this.hideListNodes);\n setTimeout(() => {\n this.showListNodes = true;\n this.cdr.markForCheck();\n }, 0);\n }\n\n cancelDropdown(): void {\n this.isDropdownVisible = false;\n this.hideListNodes = JSON.parse(JSON.stringify(this.cancelHideListNodes));\n this.nowListNodes = JSON.parse(JSON.stringify(this.cancelNowListNodes));\n this.cdr.markForCheck();\n }\n\n confirmDropdown(): void {\n this.cancelHideListNodes = JSON.parse(JSON.stringify(this.hideListNodes));\n this.cancelNowListNodes = JSON.parse(JSON.stringify(this.nowListNodes));\n this.isDropdownVisible = true;\n this.cdr.markForCheck();\n }\n\n submitGrids(): void {\n const visibleNames = this.nowListNodes.map((item) => item.key);\n this.getConfigurableFormLines().forEach((line) => {\n line.isShow = visibleNames.includes(line.name);\n });\n this.formLinesCacheOption.cols = visibleNames;\n this.colsCacheLoaded = true;\n this.saveFormLinesCacheOption();\n this.isDropdownVisible = false;\n this.cdr.markForCheck();\n }\n\n /** 勾选/取消:仅在显示/隐藏两组间移动,不改变 formLines 顺序 */\n checkAction(event: NzFormatEmitEvent): void {\n if (event.node.origin.checked) {\n const node = this.hideListNodes.find((item) => {\n return item.key === event.node.origin.key;\n });\n if (!node) {\n return;\n }\n node.checked = true;\n this.hideListNodes = this.hideListNodes.filter((item) => {\n return item.key !== event.node.origin.key;\n });\n this.nowListNodes = this.sortNodesByFormLinesOrder(\n this.nowListNodes.concat([node]),\n );\n } else {\n const temporaryNodeList = this.hideListNodes.slice(0);\n this.nowListNodes.forEach((item) => {\n if (item.key === event.node.origin.key) {\n const innerItem = JSON.parse(JSON.stringify(item));\n innerItem.checked = false;\n temporaryNodeList.push(innerItem);\n }\n });\n this.hideListNodes = this.sortNodesByFormLinesOrder(temporaryNodeList);\n this.nowListNodes = this.nowListNodes.filter((item) => {\n return item.key !== event.node.origin.key;\n });\n }\n this.cdr.markForCheck();\n }\n\n setActiveSelectedComponentOpen(value: boolean) {\n this.activeSelectedComponentOpen = value;\n if (value === true) {\n setTimeout(() => {\n const domList = document.querySelectorAll(\n \".ant-select-dropdown.hd-select-table\",\n );\n if (domList.length > 0) {\n const dom = domList[0];\n dom\n .querySelectorAll(\".hd-option-header\")\n .forEach((header) => header.remove());\n const oldIndex = this.getOldDomIndex(this.activeDomY, this.formLines);\n dom.insertBefore(\n this.createDOMStructure(\n this.formLines[oldIndex],\n this.linesFormArray.controls.slice(\n (this.paginationPageIndex - 1) * this.paginationPageSize,\n (this.paginationPageIndex - 1) * this.paginationPageSize +\n this.paginationPageSize,\n )[this.activeDomX],\n ),\n dom.firstChild,\n );\n }\n }, 0);\n }\n }\n\n getSelectTableColumnStyle(column: SelectOptionTableColumn): {\n [key: string]: string;\n } {\n if (!column || !column.width) {\n return { width: \"unset\" };\n }\n return { width: `${column.width}px` };\n }\n\n createDOMStructure(formItem, line) {\n // 创建外部 div\n const hdOptionHeader = document.createElement(\"div\");\n hdOptionHeader.className = \"hd-option-header\";\n hdOptionHeader.style.paddingLeft = `${SELECT_TABLE_OPTION_HORIZONTAL_PADDING}px`;\n hdOptionHeader.style.paddingRight = `${SELECT_TABLE_OPTION_HORIZONTAL_PADDING}px`;\n\n // 检查条件,确定是否要创建子元素\n // const selectListLength = (formItem && formItem.selectOption && formItem.selectOption.selectList && formItem.selectOption.selectList.length) || 0;\n // if\n // const lineValueLength = (line.get(formItem.selectOption.selectListName) && line.get(formItem.selectOption.selectListName).value && line.get(formItem.selectOption.selectListName).value.length) || 0;\n\n // if (selectListLength > 0 || lineValueLength > 0) {\n // 遍历 tableColumns 创建内部列 div\n formItem.selectOption.tableColumns.forEach((selectOptionTableColumn) => {\n const columnDiv = document.createElement(\"div\");\n columnDiv.className = \"hd-option-header-column\";\n\n const widthStyle = this.getSelectTableColumnStyle(\n selectOptionTableColumn,\n );\n columnDiv.style.width = widthStyle.width;\n\n // 添加列标签内容\n if (selectOptionTableColumn.label) {\n const labelText = document.createTextNode(\n selectOptionTableColumn.label,\n );\n columnDiv.appendChild(labelText);\n }\n\n // 添加列 div 到外部 div\n hdOptionHeader.appendChild(columnDiv);\n });\n // }\n\n return hdOptionHeader;\n }\n\n collectDomData() {\n this.collectDomList = [];\n const pageDomList = this.formInputDomList.toArray();\n // Step 1: 获取当前页的数据量\n const startIndex = (this.paginationPageIndex - 1) * this.paginationPageSize;\n const endIndex = this.paginationPageIndex * this.paginationPageSize;\n const adjustedEndIndex =\n endIndex > this.formLinesLength ? this.formLinesLength : endIndex;\n const pageLinesLength = adjustedEndIndex - startIndex;\n\n const interval = pageDomList.length / pageLinesLength;\n // Step 2: 拆分formInputDomList\n for (let i = 0; i < pageLinesLength; i++) {\n this.collectDomList.push(pageDomList.splice(0, interval));\n }\n this.disableInputNumberKeyboardStep();\n }\n\n /**\n * ng-zorro 8 在 input 的 onKeyDown 里用上下键调 up()/down() 改 step。\n * 只覆盖 onKeyDown(不动 up/down),键盘方向键交给表单跳转,+/- 按钮仍可用。\n */\n private disableInputNumberKeyboardStep(): void {\n if (!this.enableKeyboardOperate) {\n return;\n }\n for (let i = 0; i < this.collectDomList.length; i++) {\n for (let j = 0; j < this.collectDomList[i].length; j++) {\n const dom = this.collectDomList[i][j];\n if (dom instanceof NzInputNumberComponent) {\n dom.onKeyDown = (e: KeyboardEvent) => {\n if (e.keyCode === 38 || e.keyCode === 40) {\n return;\n }\n if (e.keyCode === 13) {\n dom.setValidateValue();\n }\n };\n }\n }\n }\n }\n\n // 聚焦下一个dom\n jumpToNextInput(x: number, y: number) {\n if (\n x === null ||\n y === null ||\n !this.collectDomList ||\n this.collectDomList.length === 0\n ) {\n return;\n }\n // 如果是最后一个可输入元素,新增行\n if (\n !(this.activeDom instanceof NzSelectComponent) &&\n x === this.collectDomList.length - 1 &&\n y === this.collectDomList[0].length - 1\n ) {\n this.addNewLineAndFocus();\n } else {\n if (y === this.collectDomList[0].length - 1) {\n console.log(\"执行过程1\");\n // 如果是最后一列,则跳转到下一行第一个输入框\n this.focusDom(x + 1, 0, \"right\");\n } else {\n console.log(\"执行过程2\");\n // 如果不是最后一列,则跳转到当前行下一个输入框\n this.focusDom(x, y + 1, \"right\");\n }\n }\n }\n\n /**\n * 增加新行并且聚焦到第一个元素,\n * 这里要注意,如果存在翻页情况,需要处理\n */\n addNewLineAndFocus() {\n // 当前行为当前页最后一行的时候,判断下一页是否有数据\n // 1、如果有:翻页+聚焦第一行第一个元素\n // 2、如果没有:新增行+翻页+聚焦第一行第一个元素\n if (this.activeDomX === this.paginationPageSize - 1) {\n // 判断下一页是否有数据\n if (\n this.paginationPageIndex <\n Math.ceil(this.formLinesLength / this.paginationPageSize)\n ) {\n // 翻页+聚焦第一行第一个元素\n this.paginationPageIndex++;\n setTimeout(() => {\n this.collectDomData();\n console.log(\"执行过程3\");\n this.focusDom(0, 0, \"right\");\n }, 0);\n } else {\n // 新增行+翻页+聚焦第一行第一个元素\n this.addFormLine();\n this.paginationPageIndex++;\n setTimeout(() => {\n this.collectDomData();\n console.log(\"执行过程4\");\n this.focusDom(0, 0);\n }, 0);\n }\n } else {\n this.addFormLine();\n }\n }\n\n // 聚焦到上一个dom\n jumpToPrevInput(x: number, y: number) {\n if (\n x === null ||\n y === null ||\n !this.collectDomList ||\n this.collectDomList.length === 0\n ) {\n return;\n }\n if (x === 0 && y === 0) {\n // 如果是第一个可输入元素, 判断是否有上一页, 如果有,则翻页+聚焦到上一页最后一个元素\n if (this.paginationPageIndex > 1) {\n // 翻页+聚焦到上一页最后一个元素\n this.paginationPageIndex--;\n setTimeout(() => {\n this.collectDomData();\n console.log(\"执行过程5\");\n this.focusDom(\n this.collectDomList.length - 1,\n this.collectDomList[0].length - 1,\n );\n }, 0);\n }\n return;\n } else {\n if (y === 0) {\n console.log(\"执行过程6\");\n // 如果是第一列,则跳转到上一行最后一个输入框\n this.focusDom(x - 1, this.collectDomList[0].length - 1, \"left\");\n } else {\n console.log(\"执行过程7\");\n // 如果不是第一列,则跳转到当前行上一个输入框\n this.focusDom(x, y - 1, \"left\");\n }\n }\n }\n\n /**\n * 聚焦到某个dom\n * @param x 坐标x\n * @param y 坐标y\n * @param jumpDirection 跳转方向\n */\n focusDom(x: number, y: number, jumpDirection: string = \"right\") {\n if (\n x === null ||\n y === null ||\n !this.collectDomList ||\n this.collectDomList.length === 0\n ) {\n return;\n }\n // 先清除一下当前的焦点\n this.cleanFocusDom(this.activeDomX, this.activeDomY);\n if (this.collectDomList[x] && this.collectDomList[x][y]) {\n const dom = this.collectDomList[x][y];\n // 需要判断下一个focus的dom是否是禁用状态,如果是禁用状态需要跳过\n if (dom instanceof NzSelectComponent) {\n if (dom.nzDisabled) {\n if (jumpDirection === \"right\") {\n this.jumpToNextInput(x, y);\n } else if (jumpDirection === \"left\") {\n this.jumpToPrevInput(x, y);\n }\n return;\n }\n dom.nzSelectTopControlComponent.inputElement.nativeElement.scrollIntoView(\n { behavior: \"smooth\", block: \"center\", inline: \"center\" },\n );\n // 这里多选框需要额外处理下,因为向下的时候会触发内部Input的聚焦,把下一个dom的focus放到宏任务中,延迟处理。\n if (dom.nzSelectService.mode === \"multiple\") {\n setTimeout(() => {\n dom.focus();\n }, 0);\n } else {\n dom.focus();\n }\n } else if (dom instanceof NzInputNumberComponent) {\n if (dom.nzDisabled) {\n if (jumpDirection === \"right\") {\n this.jumpToNextInput(x, y);\n } else if (jumpDirection === \"left\") {\n this.jumpToPrevInput(x, y);\n }\n return;\n }\n const inputDom: any = document.getElementById(dom.nzId);\n inputDom.focus();\n inputDom.scrollIntoView({\n behavior: \"smooth\",\n block: \"center\",\n inline: \"center\",\n });\n setTimeout(() => {\n inputDom.select();\n }, 0);\n } else if (dom instanceof ElementRef) {\n if (dom.nativeElement.disabled) {\n if (jumpDirection === \"right\") {\n this.jumpToNextInput(x, y);\n } else if (jumpDirection === \"left\") {\n this.jumpToPrevInput(x, y);\n }\n return;\n }\n dom.nativeElement.focus();\n dom.nativeElement.scrollIntoView({\n behavior: \"smooth\",\n block: \"center\",\n inline: \"center\",\n });\n setTimeout(() => {\n dom.nativeElement.select();\n }, 0);\n } else if (\n dom instanceof NzDatePickerComponent ||\n dom instanceof NzRangePickerComponent ||\n dom instanceof NzTimePickerComponent\n ) {\n // TODO:在ngzorro8.5.x版本,时间相关的选择器没有暴露出open方法,暂时先不处理。(10.x及以上版本提供了open方法)\n if (jumpDirection === \"right\") {\n this.jumpToNextInput(x, y);\n } else if (jumpDirection === \"left\") {\n this.jumpToPrevInput(x, y);\n }\n return;\n }\n this.setActiveDom(x, y);\n } else {\n // 没有dom的场景下,需要判断是左还是右,\n }\n }\n\n cleanFocusDom(x: number, y: number) {\n if (\n x === null ||\n y === null ||\n !this.collectDomList ||\n this.collectDomList.length === 0\n ) {\n return;\n }\n if (this.collectDomList[x] && this.collectDomList[x][y]) {\n const dom = this.collectDomList[x][y];\n if (dom instanceof NzSelectComponent) {\n dom.blur();\n dom.nzOpen = false;\n } else if (dom instanceof NzInputNumberComponent) {\n dom.blur();\n } else if (dom instanceof ElementRef) {\n dom.nativeElement.blur();\n } else {\n }\n }\n }\n\n setActiveDom(x: number, y: number) {\n this.activeDomX = x;\n this.activeDomY = y;\n this.activeDom = this.collectDomList[this.activeDomX][this.activeDomY];\n if (this.activeDom instanceof NzSelectComponent) {\n this.setActiveSelectedComponentOpen(this.activeDom.open);\n }\n }\n\n /**\n * 根据行号和列号名称获取当前聚焦的dom位置\n * @param rowNumber 行号\n * @param colNumber 列号\n */\n setActiveDomInFormLines(rowNumber: number, colNumber: number) {\n this.activeDomX = rowNumber;\n this.activeDomY = this.getDomIndex(colNumber, this.formLines);\n this.setActiveDom(this.activeDomX, this.activeDomY);\n }\n\n /**\n * 键盘点击事件\n * @param event 键盘事件\n * @returns\n */\n onKeyDown(event: KeyboardEvent) {\n if (!this.enableKeyboardOperate) {\n return;\n }\n if (this.activeDomX === null || this.activeDomY === null) {\n return;\n }\n switch (event.key) {\n case \"ArrowUp\":\n if (\n this.activeDom instanceof NzSelectComponent &&\n this.activeSelectedComponentOpen\n ) {\n return;\n }\n if (this.activeDomX !== 0) {\n this.focusDom(this.activeDomX - 1, this.activeDomY);\n }\n break;\n case \"ArrowDown\":\n if (\n this.activeDom instanceof NzSelectComponent &&\n this.activeSelectedComponentOpen\n ) {\n return;\n }\n // 判断是否在最后一行,加行\n if (this.activeDomX === this.collectDomList.length - 1) {\n this.cleanFocusDom(this.activeDomX, this.activeDomY);\n this.addNewLineAndFocus();\n break;\n } else {\n this.focusDom(this.activeDomX + 1, this.activeDomY);\n }\n break;\n case \"ArrowLeft\":\n this.jumpToPrevInput(this.activeDomX, this.activeDomY);\n break;\n case \"ArrowRight\":\n this.jumpToNextInput(this.activeDomX, this.activeDomY);\n break;\n case \"Enter\":\n if (this.activeDom instanceof NzSelectComponent) {\n this.setActiveSelectedComponentOpen(this.activeDom.open);\n if (this.activeSelectedComponentOpen === false) {\n this.focusDom(this.activeDomX, this.activeDomY);\n }\n } else if (this.activeDomX === this.collectDomList.length - 1) {\n this.addNewLineAndFocus();\n }\n break;\n case \"Escape\":\n if (this.activeDom instanceof NzSelectComponent) {\n const nowActiveDom = this.activeDom as NzSelectComponent;\n setTimeout(() => {\n this.setActiveSelectedComponentOpen(nowActiveDom.open);\n if (this.activeSelectedComponentOpen === false) {\n if (nowActiveDom.nzSelectService.mode === \"multiple\") {\n setTimeout(() => {\n this.focusDom(this.activeDomX, this.activeDomY);\n }, 0);\n } else {\n this.focusDom(this.activeDomX, this.activeDomY);\n }\n }\n }, 0);\n }\n break;\n default:\n // 如果当前聚焦的是选择框,且键入0-9a-zA-Z,则弹出\n if (\n this.activeDom instanceof NzSelectComponent &&\n this.activeSelectedComponentOpen === false &&\n /^[0-9a-zA-Z]$/.test(event.key)\n ) {\n const dom = this.activeDom;\n dom.nzOpen = true;\n this.setActiveSelectedComponentOpen(true);\n // // TODO:这里暂时注释,不能直接带入键入值,这样会导致输入中文的时候带入英文字符,不符合预期\n // dom.nzSelectTopControlComponent.inputValue = event.key;\n // // 获取 input 元素\n // const inputElement = dom.nzSelectTopControlComponent.inputElement.nativeElement;\n // setTimeout(() => {\n // // 触发输入事件,以确保 Angular 检测到值的变化\n // const eventInput = new Event('input', { bubbles: true });\n // inputElement.dispatchEvent(eventInput);\n // }, 0);\n }\n break;\n }\n }\n\n /**\n * 根据在初始dom下标和数据集 获取在collectDomList中的下标\n * @param index 初始下标\n * @param list 老数据集\n * @returns\n */\n private getDomIndex(index: number, list: Array<FormLine>): number {\n const typeList = [\n \"Input\",\n \"Select\",\n \"Date\",\n \"DateRange\",\n \"TextArea\",\n \"InputNumber\",\n \"MultipleSelect\",\n ];\n let filterList = [];\n for (let i = 0; i < list.length; i++) {\n if (i === index) {\n return filterList.length;\n }\n // 与模板一致:hide / isShow=false 的列不渲染 #formInputDom,不计入 collectDomList 的列下标\n if (\n typeList.includes(list[i].type) &&\n !list[i].hide &&\n list[i].isShow !== false\n ) {\n filterList.push(list[i]);\n }\n }\n return null;\n }\n\n /**\n * 根据在collectDomList中的下标和数据集 获取初始dom下标\n * @param index 新下标\n * @param list 老数据集\n * @returns\n */\n private getOldDomIndex(index: number, list: Array<FormLine>): number {\n console.log(\"index\", index);\n console.log(\"list\", list);\n const typeList = [\n \"Input\",\n \"Select\",\n \"Date\",\n \"DateRange\",\n \"TextArea\",\n \"InputNumber\",\n \"MultipleSelect\",\n ];\n let filterList = [];\n for (let i = 0; i < list.length; i++) {\n if (\n typeList.includes(list[i].type) &&\n !list[i].hide &&\n list[i].isShow !== false\n ) {\n filterList.push(list[i]);\n if (filterList.length === index + 1) {\n return i;\n }\n }\n }\n return null;\n }\n\n get linesFormArray(): any {\n return this.validateHdFormLines.get(\"lines\") as FormArray;\n }\n\n get LodashRound() {\n return round;\n }\n\n // 暴露的方法,用于获取所有数据的valid状态\n public getValid() {\n return this.formValid;\n }\n\n onSearchEvent(\n fn: any,\n event: any,\n line: any,\n onSearchEventDebounceTime: any,\n ) {\n if (!fn) {\n return;\n }\n const debounceMs =\n onSearchEventDebounceTime != null ? onSearchEventDebounceTime : 0;\n // 未配置或为 0:同步触发,不走 debounceTime(避免异步)\n if (!debounceMs) {\n this.triggerEvent(fn, event, line);\n } else {\n this.debounceTimeout = debounceMs;\n if (this.searchSubscription) {\n this.searchSubscription.unsubscribe();\n }\n this.searchSubscription = this.searchSubject\n .pipe(debounceTime(this.debounceTimeout))\n .subscribe(({ fn, event, line }) => this.triggerEvent(fn, event, line));\n this.searchSubject.next({ fn, event, line });\n }\n setTimeout(() => {\n this.setActiveSelectedComponentOpen(true);\n }, 0);\n }\n\n onOpenChangeEvent(\n fn: any,\n open: boolean,\n line: any,\n onOpenChangeEventDebounceTime: any,\n formItem?: any,\n ) {\n if (!fn) {\n return;\n }\n // 展开时先清空旧 options,避免条件变化后请求返回前仍展示上一批下拉数据\n if (open) {\n this.clearSelectOptionsOnOpen(formItem, line);\n }\n const debounceMs =\n onOpenChangeEventDebounceTime != null\n ? onOpenChangeEventDebounceTime\n : 0;\n // 未配置或为 0:同步触发,不走 debounceTime(避免异步)\n if (!debounceMs) {\n if (open) {\n this.triggerEvent(fn, open, line);\n }\n return;\n }\n this.openChangeDebounceTimeout = debounceMs;\n if (this.openChangeSubscription) {\n this.openChangeSubscription.unsubscribe();\n }\n this.openChangeSubscription = this.openChangeSubject\n .pipe(debounceTime(this.openChangeDebounceTimeout))\n .subscribe(({ fn, event, line }) => {\n if (event) {\n this.triggerEvent(fn, event, line);\n }\n });\n this.openChangeSubject.next({ fn, event: open, line });\n }\n\n /** 有 onOpenChangeEvent 时展开下拉先清空选项,由业务回调再写入新数据 */\n private clearSelectOptionsOnOpen(formItem: any, line: any): void {\n if (!formItem || !formItem.selectOption) {\n return;\n }\n const opt = formItem.selectOption;\n if (opt.selectList != null) {\n opt.selectList = [];\n }\n if (\n opt.selectListName &&\n line &&\n line.get &&\n line.get(opt.selectListName)\n ) {\n line.get(opt.selectListName).setValue([], { emitEvent: false });\n }\n }\n\n /**\n *\n * @param fn 父组件函数\n * @param event 事件值\n * @param line 触发的行\n */\n triggerEvent(fn: any, event: any, line: any) {\n if (fn) {\n fn(event, line);\n }\n }\n\n innerGetValid() {\n let tmpValidateHdFormLines = this.fb.group({\n lines: this.fb.array([]),\n });\n this.storeFormLinesData.forEach((formLinesDataItem) => {\n let formGroupObj: any = {};\n this.formLines.forEach((item) => {\n // 新增行 初始数据都为null\n formGroupObj[item.name] = this.fb.control(\n {\n value: this.judgeValueIsNotEmpty(formLinesDataItem[item.name])\n ? formLinesDataItem[item.name]\n : item.value || null,\n disabled: item.disabled,\n },\n item.require ? [Validators.required] : [],\n );\n if (item.selectOption && item.selectOption.label) {\n formGroupObj[item.selectOption.label] = this.fb.control(\n formLinesDataItem[item.selectOption.label] || null,\n [],\n );\n }\n });\n formGroupObj.lineIndex = this.fb.control(\n (tmpValidateHdFormLines.get(\"lines\") as FormArray).controls.length + 1,\n [],\n );\n let formGroupTmp = this.fb.group(formGroupObj);\n this.formLines.forEach((item) => {\n if (item.onChangeEvent) {\n const debounceMs =\n item.onChangeEventDebounceTime != null\n ? item.onChangeEventDebounceTime\n : 0;\n const control = formGroupTmp.get(item.name);\n // 未配置或为 0:同步订阅,不走 debounceTime\n if (debounceMs > 0) {\n control.valueChanges\n .pipe(debounceTime(debounceMs))\n .subscribe((value) => {\n this.triggerEvent(item.onChangeEvent, value, formGroupTmp);\n });\n } else {\n control.valueChanges.subscribe((value) => {\n this.triggerEvent(item.onChangeEvent, value, formGroupTmp);\n });\n }\n }\n });\n (tmpValidateHdFormLines.get(\"lines\") as FormArray).insert(\n (tmpValidateHdFormLines.get(\"lines\") as FormArray).controls.length,\n formGroupTmp,\n );\n });\n return tmpValidateHdFormLines.valid;\n }\n\n // 暴露的方法,用于获取所有数据\n public getLines() {\n let allLines = [];\n this.storeFormLinesData.forEach((formLinesDataItem) => {\n let formGroupObj: any = {};\n this.formLines.forEach((item) => {\n // 新增行 初始数据都为null\n formGroupObj[item.name] = formLinesDataItem[item.name];\n });\n formGroupObj.lineIndex = formLinesDataItem.lineIndex;\n allLines.push(formGroupObj);\n });\n return allLines;\n }\n\n // 全局性的搜索(涵盖页面上所有的可视文字)\n searchLines() {\n if (this.storeFormLinesData.length < 1) {\n return;\n }\n this.tableLoading = true;\n // 如果没有输入搜索字符串,则显示缓存内的所有数据\n if (!this.filterStr) {\n this.isFilterData = false;\n this.setStoreData();\n return;\n }\n const filterValue = this.filterStr.trim().toLowerCase();\n this.isFilterData = true;\n this.filterIndexStore = [];\n\n // 根据搜索字符串过滤数据\n const filteredData = this.storeFormLinesData.filter(\n (data: any, index: number) => {\n for (const item of this.formLines) {\n if (\n (item.hide && item.canSearch) ||\n (!item.hide && item.name !== \"uuid\")\n ) {\n console.log(\"item\", item.name);\n const value = data[item.name]\n ? data[item.name].toString().toLowerCase()\n : \"\";\n if (value.includes(filterValue)) {\n this.filterIndexStore.push(index);\n return true;\n }\n }\n }\n return false;\n },\n );\n // 缓存一下筛选后的表单数据\n this.filterStoreFormLinesData = filteredData;\n // 处理筛选好的数据 然后重新渲染\n this.formLinesData = filteredData;\n this.init(true);\n }\n\n setStoreData() {\n this.formLinesData = this.storeFormLinesData;\n this.init(true);\n }\n\n getStyle(line: FormGroup, formItem: any, width: string) {\n let styleObj = {\n \"min-width\": width,\n };\n if (formItem.style) {\n styleObj = { ...styleObj, ...formItem.style };\n }\n if (\n formItem.colorOption &&\n formItem.colorOption.name &&\n line.get(formItem.colorOption.name).value\n ) {\n styleObj = {\n ...styleObj,\n ...{ color: line.get(formItem.colorOption.name).value },\n };\n }\n return styleObj;\n }\n\n ngOnChanges(changes: SimpleChanges) {\n if (\n changes[\"formLinesData\"] &&\n JSON.stringify(changes[\"formLinesData\"].currentValue) !==\n JSON.stringify(changes[\"formLinesData\"].previousValue)\n ) {\n if (this.storeFormLinesData && this.storeFormLinesData.length === 0) {\n this.storeFormLinesData = this.formLinesData;\n }\n this.init();\n }\n if (\n changes[\"formLines\"] &&\n changes[\"formLines\"].previousValue !== undefined &&\n JSON.stringify(changes[\"formLines\"].currentValue) !==\n JSON.stringify(changes[\"formLines\"].previousValue)\n ) {\n this.initColSettings();\n }\n if (\n changes[\"totalOption\"] &&\n JSON.stringify(changes[\"totalOption\"].currentValue) !==\n JSON.stringify(changes[\"totalOption\"].previousValue)\n ) {\n this.calculateTotal();\n }\n }\n\n calculateTotal() {\n // 这里处理合计数据\n if (this.showTotal) {\n this.totalOptionList = new Array(Number(this.columnsNumber) - 1).fill(\"\");\n this.totalOption.forEach((item) => {\n if (item.insertIndex && (item.insertValue || item.insertValue === 0)) {\n this.totalOptionList[item.insertIndex - 1] = {\n value: item.insertValue,\n align: item.align || \"left\",\n showDecimal: item.showDecimal || false,\n preserveNumber: item.preserveNumber != null ? item.preserveNumber : 2,\n };\n }\n });\n }\n }\n\n private init(isEdit: boolean = false): void {\n this.paginationPageIndex = 1;\n // 异常捕获\n if (!this.checkList(this.formLines)) {\n this.tableLoading = false;\n return;\n }\n this.createForm();\n // 如果没有formLinesData,则认为是新增\n if (\n !isEdit &&\n (!this.formLinesData ||\n (this.formLinesData && this.formLinesData.length === 0))\n ) {\n this.tableLoading = false;\n // allowEmpty 且仅删除按钮:不自动补空行\n if (!this.isTrulyEmptyAllowed) {\n this.addFormLine(null, false);\n }\n this.showForm = true;\n } else {\n // 编辑逻辑\n this.addFormLineWithData();\n }\n this.validateHdFormLines.valueChanges.subscribe((data) =>\n this.onHdFormValueChanged(data),\n );\n this.onHdFormValueChanged();\n }\n\n /**\n * 创建表单\n */\n private createForm() {\n this.validateHdFormLines = this.fb.group({\n lines: this.fb.array([]),\n });\n this.newLine = this.newLineItem();\n }\n\n delayJumpToNextInput() {\n // 关闭键盘操作时,选择框选中后不自动跳转到下一个输入控件\n if (!this.enableKeyboardOperate) {\n return;\n }\n setTimeout(() => {\n this.jumpToNextInput(this.activeDomX, this.activeDomY);\n }, 0);\n }\n\n /**\n * 定义空的newLineItem 结构\n */\n private newLineItem(): FormGroup {\n return this.createLineFromValues(null, true);\n }\n\n /**\n * 根据行数据创建 FormGroup(含隐藏字段、select 的 label 等附属字段)\n * @param formLinesDataItem 行数据,空行传 null\n * @param isEmptyLine 是否空行(影响必填校验规则,与历史逻辑保持一致)\n * @param regenerateRowId 是否强制生成新行 id(复制行时使用)\n */\n private createLineFromValues(\n formLinesDataItem: any,\n isEmptyLine: boolean = false,\n regenerateRowId: boolean = false,\n ): FormGroup {\n let formGroupObj: any = {};\n this.formLines.forEach((item) => {\n formGroupObj[item.name] = this.fb.control(\n {\n value:\n formLinesDataItem != null\n ? formLinesDataItem[item.name]\n : item.value,\n disabled: item.disabled,\n },\n isEmptyLine\n ? item.require && !item.hide\n ? [Validators.required]\n : []\n : item.require\n ? [Validators.required]\n : [],\n );\n if (item.selectOption && item.selectOption.label) {\n formGroupObj[item.selectOption.label] = this.fb.control(\n formLinesDataItem != null\n ? formLinesDataItem[item.selectOption.label] || null\n : null,\n [],\n );\n }\n });\n\n // 稳定行 id:搜索重建表单后用于保留勾选\n const rowId =\n !regenerateRowId && formLinesDataItem && formLinesDataItem._hdRowId\n ? formLinesDataItem._hdRowId\n : this.generateRowId();\n formGroupObj._hdRowId = this.fb.control(rowId);\n if (formLinesDataItem && !formLinesDataItem._hdRowId) {\n formLinesDataItem._hdRowId = rowId;\n }\n\n // 复制源行上多余的字段(隐藏附属字段、selectListName 等)\n if (formLinesDataItem) {\n Object.keys(formLinesDataItem).forEach((key) => {\n if (\n key === \"lineIndex\" ||\n key === \"isHdFormLineSearchAdd\" ||\n key === \"_hdRowId\"\n ) {\n return;\n }\n if (!formGroupObj[key]) {\n formGroupObj[key] = this.fb.control(formLinesDataItem[key]);\n }\n });\n }\n\n formGroupObj.lineIndex = this.fb.control(\n this.linesFormArray.controls.length + 1,\n [],\n );\n formGroupObj.isHdFormLineSearchAdd = this.fb.control(this.isFilterData, []);\n let formGroupSubmit = this.fb.group(formGroupObj);\n this.formLines.forEach((item) => {\n if (item.onChangeEvent) {\n const debounceMs =\n item.onChangeEventDebounceTime != null\n ? item.onChangeEventDebounceTime\n : 0;\n const control = formGroupSubmit.get(item.name);\n const handleChange = (value: any) => {\n if (item.type === FormLineType.Select && value !== null) {\n this.delayJumpToNextInput();\n }\n this.triggerEvent(item.onChangeEvent, value, formGroupSubmit);\n };\n // 未配置或为 0:同步订阅,不走 debounceTime\n if (debounceMs > 0) {\n control.valueChanges\n .pipe(debounceTime(debounceMs))\n .subscribe(handleChange);\n } else {\n control.valueChanges.subscribe(handleChange);\n }\n }\n });\n return formGroupSubmit;\n }\n\n private calculateLineNumber() {\n this.linesFormArray.controls.forEach((item, index) => {\n item.get(\"lineIndex\").setValue(index + 1, { emitEvent: false });\n });\n }\n\n /**\n * 编辑的时候数据处理\n */\n addFormLineWithData() {\n this.formLinesData.forEach((formLinesDataItem) => {\n this.linesFormArray.insert(\n this.linesFormArray.controls.length,\n this.createLineFromValues(formLinesDataItem),\n );\n });\n this.calculateLineNumber();\n this.tableLoading = false;\n this.showForm = true;\n }\n\n /**\n * 在指定行下方新增空行;不传 afterLine 则追加到末尾\n * @param afterLine 当前行 FormGroup(不要传 lineIndex,避免序号偏移导致插错位置)\n */\n addFormLine(afterLine?: FormGroup | null, isFocus: boolean = true) {\n const insertAt = this.getInsertIndexAfter(afterLine);\n const newLine = this.newLineItem();\n this.linesFormArray.insert(insertAt, newLine);\n this.calculateLineNumber();\n this.addLineEvent.emit(newLine);\n // 跳到新增行所在页,避免页码异常时看不到数据\n this.paginationPageIndex =\n Math.floor(insertAt / this.paginationPageSize) + 1;\n setTimeout(() => {\n this.collectDomData();\n if (isFocus) {\n this.activeDomX = this.toPageLocalRowIndex(insertAt);\n this.activeDomY = 0;\n console.log(\"执行过程13\");\n this.focusDom(this.activeDomX, this.activeDomY);\n }\n }, 0);\n }\n\n /**\n * 复制当前行:在当前行下方新增一行,复制所有字段值(含隐藏字段)\n */\n copyFormLine(line: FormGroup) {\n const sourceIndex = this.linesFormArray.controls.indexOf(line);\n if (sourceIndex < 0) {\n return;\n }\n // getRawValue 包含 disabled 字段;复制行使用新的 _hdRowId\n const sourceValues = line.getRawValue();\n const insertAt = sourceIndex + 1;\n this.linesFormArray.insert(\n insertAt,\n this.createLineFromValues(sourceValues, false, true),\n );\n this.calculateLineNumber();\n setTimeout(() => {\n this.collectDomData();\n this.activeDomX = this.toPageLocalRowIndex(insertAt);\n this.activeDomY = 0;\n this.focusDom(this.activeDomX, this.activeDomY);\n }, 0);\n }\n\n @Output() deleteLineEvent = new EventEmitter();\n\n /**\n * 删除行\n * @param lineOrIndex 行 FormGroup,或 1-based 的 lineIndex(兼容 resetForm)\n */\n deleteFormLine(lineOrIndex: FormGroup | number) {\n let removeAt = -1;\n if (typeof lineOrIndex === \"number\") {\n removeAt = lineOrIndex - 1;\n } else if (lineOrIndex) {\n removeAt = this.linesFormArray.controls.indexOf(lineOrIndex);\n }\n console.log(\n \"index\",\n typeof lineOrIndex === \"number\" ? lineOrIndex : removeAt,\n );\n if (removeAt < 0) {\n return;\n }\n // 最后一条数据的时候要判断一下\n if (this.linesFormArray.controls.length === 1 && !this.allowEmpty) {\n if (this.deleteLastLineEvent) {\n this.deleteLastLineEvent.emit();\n }\n return;\n }\n const removedLine = this.linesFormArray.at(removeAt) as FormGroup;\n this.linesFormArray.removeAt(removeAt);\n this.removeLineFromSelection(removedLine);\n if (\n !this.isFilterData &&\n this.linesFormArray.controls &&\n this.linesFormArray.controls.length === 0 &&\n !this.isTrulyEmptyAllowed\n ) {\n this.addFormLine();\n } else {\n // 当前页已无数据时回退页码,且页码最小为 1(避免删空后变成 0 导致再添加看不见)\n const maxPage = Math.max(\n 1,\n Math.ceil(\n this.linesFormArray.controls.length / this.paginationPageSize,\n ),\n );\n if (this.paginationPageIndex > maxPage) {\n this.paginationPageIndex = maxPage;\n }\n this.calculateLineNumber();\n }\n setTimeout(() => {\n this.collectDomData();\n }, 0);\n }\n\n /** 在指定行后方的插入下标;无行则追加到末尾 */\n private getInsertIndexAfter(afterLine?: FormGroup | null): number {\n if (!afterLine) {\n return this.linesFormArray.controls.length;\n }\n const idx = this.linesFormArray.controls.indexOf(afterLine);\n return idx >= 0 ? idx + 1 : this.linesFormArray.controls.length;\n }\n\n /** 全局行下标转当前页内的行下标(供聚焦用) */\n private toPageLocalRowIndex(globalIndex: number): number {\n return (\n globalIndex - (this.paginationPageIndex - 1) * this.paginationPageSize\n );\n }\n\n public pageIndexChange(event: number): void {\n this.paginationPageIndex = event;\n setTimeout(() => {\n this.collectDomData();\n }, 0);\n }\n\n public pageSizeChange(event: number): void {\n this.paginationPageSize = event;\n setTimeout(() => {\n this.collectDomData();\n }, 0);\n }\n\n private onHdFormValueChanged(data?: any) {\n if (this.isFilterData) {\n if (data && data.lines && this.filterIndexStore.length !== 0) {\n const lines = data.lines;\n if (lines.length === this.filterIndexStore.length) {\n this.filterIndexStore.forEach((item, index) => {\n this.storeFormLinesData[item] = {\n ...this.filterStoreFormLinesData[index],\n ...lines[index],\n };\n });\n } else if (lines.length > this.filterIndexStore.length) {\n // 有新增数据的情况\n // step 1: 先找新增的index下标\n const getNowLines = this.validateHdFormLines.getRawValue().lines;\n let addIndex = -1;\n for (let i = 0; i < getNowLines.length; i++) {\n if (getNowLines[i].isHdFormLineSearchAdd) {\n addIndex = i;\n break;\n }\n }\n if (addIndex !== -1) {\n this.storeFormLinesData.splice(\n this.filterIndexStore[addIndex - 1] + 1,\n 0,\n getNowLines[addIndex],\n );\n }\n this.filterIndexStore.push(this.filterIndexStore[addIndex - 1] + 1);\n } else {\n // 有删除数据的情况\n // step 1:先找到删除的index下标\n let deletedIndex = -1;\n let count = 0;\n if (lines.length === 0) {\n deletedIndex = 0;\n } else {\n for (let i = 0; i < lines.length; i++) {\n if (lines[i].lineIndex - count > 1) {\n deletedIndex = i;\n break;\n }\n count++;\n }\n }\n if (deletedIndex !== -1) {\n // step 2: 删除总数据中的对应数据, 把下标数组和lines长度对齐,同时把下标数组在deletedIndex后面的值全都-1\n this.storeFormLinesData = this.storeFormLinesData.filter(\n (item, index) => {\n return index !== this.filterIndexStore[deletedIndex];\n },\n );\n this.filterIndexStore.splice(deletedIndex, 1);\n for (let i = 0; i < this.filterIndexStore.length; i++) {\n if (i >= deletedIndex) {\n this.filterIndexStore[i]--;\n }\n }\n } else {\n // step 2: 没有找到deletedIndex说明删除操作在最后一行\n const filterIndex =\n this.filterIndexStore[this.filterIndexStore.length - 1];\n this.storeFormLinesData = this.storeFormLinesData.filter(\n (item, index) => {\n return index !== filterIndex;\n },\n );\n this.filterIndexStore.pop();\n }\n }\n } else {\n if (data && data.lines) {\n this.storeFormLinesData = data.lines;\n }\n }\n } else {\n if (data && data.lines) {\n this.storeFormLinesData = data.lines;\n }\n }\n\n // 总表单\n if (!this.isFilterData) {\n this.formValid = this.validateHdFormLines.valid;\n } else {\n if (this.formValid) {\n // 如果整体表单是true,不管子表单是什么,都变成子表单的状态\n this.formValid = this.validateHdFormLines.valid;\n } else {\n // 如果整体表单是false:1、子表单为true,需要重算;2、子表单为false,用子表单状态\n if (this.validateHdFormLines.valid) {\n this.formValid = this.innerGetValid();\n } else {\n this.formValid = this.validateHdFormLines.valid;\n }\n }\n }\n // this.calculateLineNumber();\n this.changeEvent.emit(this.validateHdFormLines);\n }\n\n private checkList(list: Array<FormLine>): boolean {\n if (!list || (list && list.length === 0)) {\n return false;\n }\n let nameList = [];\n let selectOptionCheckList = [];\n list.forEach((item) => {\n // 校验单项选择器\n // if (item.type === FormLineType.Select && (!item.selectList || (item.selectList && item.selectList.length === 0))) {\n // throw 'formLines组件数据格式不规范,存在单项选择器没有传入选项!'\n // }\n nameList.push(item.name);\n\n // 校验有onSearch的字段的selectOption的value、label是否在formLine里面都定义了\n if (item.onSearchEvent && item.selectOption) {\n selectOptionCheckList = [];\n list.forEach((innerItem) => {\n if (\n innerItem.name === item.selectOption.value ||\n innerItem.name === item.selectOption.label\n ) {\n selectOptionCheckList.push(innerItem.name);\n }\n });\n if (selectOptionCheckList.length < 2) {\n throw `formLines组件数据格式不规范,字段${item.name}的selectOption的value、label字段未能在formLines中找到对应字段!`;\n }\n }\n });\n // 校验name是否重复\n if ([...new Set(nameList)].length !== list.length) {\n throw \"formLines组件数据格式不规范,存在重复name值!\";\n }\n // ...more check\n return true;\n }\n\n public submitForm(): void {\n this.changeEvent.emit(this.validateHdFormLines.getRawValue());\n }\n\n public resetForm(): void {\n // 删除\n this.clearSelection();\n for (let i = this.linesFormArray.controls.length; i >= 0; i--) {\n this.deleteFormLine(i);\n }\n this.paginationPageIndex = 1;\n }\n\n public inputClean(formItem: any, line: any): void {\n line.get(formItem.name).setValue(null);\n }\n\n public selectValue(id: string, rowNumber: number, colNumber: number): void {\n const inputDom: any = document.querySelector(id);\n inputDom.select();\n this.setActiveDomInFormLines(rowNumber, colNumber);\n }\n\n private textWidthCache: { [key: string]: number } = {};\n\n isTextOverflow(text: string, maxWidth: number): boolean {\n const cachedWidth = this.textWidthCache[text];\n if (cachedWidth !== undefined) {\n return cachedWidth + 15 >= maxWidth;\n }\n\n const span = document.createElement(\"span\");\n span.style.visibility = \"hidden\";\n span.style.position = \"absolute\";\n span.style.whiteSpace = \"nowrap\";\n span.style.fontSize = \"14px\";\n span.style.display = \"inline-block\"; // 将样式修改为 inline-block\n span.innerText = text;\n document.body.appendChild(span);\n const isOverflow = span.offsetWidth + 15 >= maxWidth;\n this.textWidthCache[text] = span.offsetWidth;\n span.style.display = \"none\";\n document.body.removeChild(span);\n return isOverflow;\n }\n\n judgeColEmpty(str: any) {\n if (str || str === 0) {\n return str;\n } else {\n return \"<空>\";\n }\n }\n\n judgeValueIsNotEmpty(str: any) {\n if (str === null && str === undefined) {\n return false;\n } else {\n return true;\n }\n }\n}\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { NgZorroAntdModule } from 'ng-zorro-antd';\nimport { HdButtonGroupModule } from '../hd-button-group/hd-button-group.module';\nimport { HdButtonModule } from '../hd-button/hd-button.module';\nimport { HdSpaceModule } from '../hd-space/hd-space.module';\nimport { CommonSessionService } from '../service/common-session.service';\nimport { HdFormLinesComponent } from './hd-form-lines.component';\n@NgModule({\n imports: [\n CommonModule,\n FormsModule,\n ReactiveFormsModule,\n NgZorroAntdModule,\n HdButtonModule,\n HdSpaceModule,\n HdButtonGroupModule\n ],\n declarations: [HdFormLinesComponent],\n exports: [HdFormLinesComponent],\n providers: [CommonSessionService]\n})\nexport class HdFormLinesModule { }\n","import { Component, ContentChild, EventEmitter, Input, OnInit, Output, SimpleChange, SimpleChanges, TemplateRef } from '@angular/core';\nimport { TableTotalOption } from './hd-current-table.service';\nimport { InputBoolean } from 'ng-zorro-antd/core';\nimport { Page } from '../model/common-type';\n\n@Component({\n selector: 'hd-current-table',\n templateUrl: './hd-current-table.component.html',\n styleUrls: ['./hd-current-table.component.less']\n})\nexport class HdCurrentTableComponent implements OnInit {\n @Input() tableData: Page<any>;\n @Input() scroll: { [key: string]: string } = { x: '1px' };\n @Input() @InputBoolean() showSelected: boolean = false;\n @Input() selectField: string = 'billNumber';\n // 合计区域\n @Input() @InputBoolean() showTableTotal: boolean = false;\n @Input() tableTotalOption: Array<TableTotalOption>;\n @Output() selectEvent = new EventEmitter();\n @Output() tableSearchEvent = new EventEmitter();\n @ContentChild(\"tableHead\", { static: false }) tableHead: TemplateRef<any>;\n @ContentChild(\"tableBody\", { static: false }) tableBody: TemplateRef<any>;\n @ContentChild(\"tableTotal\", { static: false }) tableTotal: TemplateRef<any>;\n\n @Input() tableLoading: boolean = false;\n // 表格分页参数\n @Input() tablePageIndex: number = 1;\n @Input() tablePageSize: number = 10;\n @Output() tablePageIndexChange = new EventEmitter<any>();\n @Output() tablePageSizeChange = new EventEmitter<any>();\n // 表格勾选参数\n isAllDisplayDataChecked = false;\n isIndeterminate = false;\n listOfDisplayData = [];\n listOfAllData = [];\n listOfSelection: Array<any> | TemplateRef<void>;\n mapOfCheckedId: { [key: string]: boolean } = {};\n mapOfCheckList: { [key: string]: any } = {};\n\n tableTotalOptionList = [];\n\n constructor() { }\n\n ngOnInit(): void { }\n\n ngOnChanges(changes: SimpleChange) {\n // 数据改变时,重置勾选状态\n if (changes && changes['tableData'] && changes['tableData']['currentValue'] && changes['tableData']['previousValue']) {\n if(changes['tableData']['currentValue']['pageSize'] !== changes['tableData']['previousValue']['pageSize']\n || changes['tableData']['currentValue']['pageNumber'] !== changes['tableData']['previousValue']['pageNumber']){\n return;\n }\n this.resetStatus();\n }\n }\n\n // 表格勾选逻辑\n currentPageDataChange($event: any): void {\n this.listOfDisplayData = $event;\n this.refreshStatus();\n this.resetStatus();\n }\n\n search(reset: boolean) {\n if(reset){\n this.tablePageSizeChange.emit(this.tablePageSize);\n }else{\n this.tablePageIndexChange.emit(this.tablePageIndex);\n }\n // 触发父组件查询事件\n this.tableSearchEvent.emit(reset);\n }\n\n resetStatus() {\n this.isAllDisplayDataChecked = false;\n this.isIndeterminate = false;\n this.mapOfCheckedId = {};\n this.mapOfCheckList = {};\n this.selectEvent.emit([]);\n }\n\n refreshStatus(event: boolean = false, data: any = null): void {\n if (event && data) {\n !this.mapOfCheckList[data[this.selectField]] && (this.mapOfCheckList[data[this.selectField]] = data);\n } else if (!event && data) {\n this.mapOfCheckList[data[this.selectField]] && delete this.mapOfCheckList[data[this.selectField]];\n }\n this.isAllDisplayDataChecked = this.listOfDisplayData.every(item => this.mapOfCheckedId[item[this.selectField]]);\n this.isIndeterminate =\n this.listOfDisplayData.some(item => this.mapOfCheckedId[item[this.selectField]]) && !this.isAllDisplayDataChecked;\n // 触发select事件\n if (this.selectEvent) {\n const selectedList: Array<any> = Object.values(this.mapOfCheckList);\n this.selectEvent.emit(selectedList);\n }\n // 如果数据为空,则清空勾选标识\n if (this.tableData.content.length === 0) {\n this.isAllDisplayDataChecked = false;\n }\n }\n\n checkAll(value: boolean): void {\n this.listOfDisplayData.forEach(item => {\n if (value) {\n !this.mapOfCheckList[item[this.selectField]] && (this.mapOfCheckList[item[this.selectField]] = item);\n } else {\n this.mapOfCheckList[item[this.selectField]] && delete this.mapOfCheckList[item[this.selectField]];\n }\n\n this.mapOfCheckedId[item[this.selectField]] = value\n });\n this.refreshStatus();\n }\n}\n","import { NgModule, NO_ERRORS_SCHEMA } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { HdCurrentTableComponent } from './hd-current-table.component';\nimport { NzTableModule } from 'ng-zorro-antd/table';\nimport { HdSpaceModule } from '../hd-space/hd-space.module';\n\n@NgModule({\n imports: [\n CommonModule,\n NzTableModule,\n HdSpaceModule\n ],\n declarations: [HdCurrentTableComponent],\n exports: [HdCurrentTableComponent],\n schemas: [NO_ERRORS_SCHEMA]\n})\nexport class HdCurrentTableModule { }\n","import { Component, Input, OnInit } from '@angular/core';\n\n@Component({\n selector: 'hd-log',\n templateUrl: './hd-log.component.html',\n styleUrls: ['./hd-log.component.less']\n})\nexport class HdLogComponent implements OnInit {\n @Input() logs: any[];\n\n constructor() {\n }\n\n ngOnInit() {\n }\n}\n","import { Injectable, NgModule } from '@angular/core';\nimport { NzModalService } from 'ng-zorro-antd';\nimport { HdLogComponent } from './hd-log.component';\n\n@Injectable({\n providedIn: 'root',\n})\n\nexport class HdLogService {\n\n constructor(private modalService: NzModalService) { }\n\n showLogs(logs: any[]) {\n this.modalService.create({\n nzTitle: '操作日志',\n nzContent: HdLogComponent,\n nzComponentParams: { logs },\n nzFooter: null,\n nzWidth: 1000\n });\n }\n}\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { HdLogComponent } from './hd-log.component';\nimport { NgZorroAntdModule } from 'ng-zorro-antd';\nimport { HdDetailLinesModule } from '../hd-detail-lines/hd-detail-lines.module';\nimport { HdLogService } from './hd-log.service';\n@NgModule({\n imports: [\n CommonModule,\n NgZorroAntdModule,\n HdDetailLinesModule\n ],\n entryComponents: [HdLogComponent],\n declarations: [HdLogComponent],\n exports: [HdLogComponent],\n providers: [HdLogService]\n})\nexport class HdLogModule { }\n","import { Component, OnInit, Output, Input, EventEmitter } from '@angular/core';\n\n@Component({\n selector: 'hd-popconfirm',\n templateUrl: './hd-popconfirm.component.html',\n styleUrls: ['./hd-popconfirm.component.less']\n})\nexport class HdPopconfirmComponent implements OnInit {\n @Input() message: string;\n @Output() confirmOption = new EventEmitter<any>();\n @Output() cancelOption = new EventEmitter<any>();\n\n constructor() { }\n\n ngOnInit() {\n }\n\n\n cancel(e: any): void{\n this.cancelOption.emit();\n }\n\n confirm(e: any): void{\n this.confirmOption.emit();\n }\n\n}\n","import { NgModule } from '@angular/core';\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { CommonModule } from '@angular/common';\nimport { NgZorroAntdModule } from 'ng-zorro-antd';\nimport { HdPopconfirmComponent } from \"./hd-popconfirm.component\";\n\n@NgModule({\n declarations: [\n HdPopconfirmComponent\n ],\n imports: [\n FormsModule,\n ReactiveFormsModule,\n CommonModule,\n NgZorroAntdModule,\n ],\n exports: [HdPopconfirmComponent],\n providers: [],\n bootstrap: [HdPopconfirmComponent]\n})\nexport class HdPopconfirmModule {\n}\n","import { Component, OnInit, Input, OnChanges } from \"@angular/core\";\nimport { statusToColor } from \"./hd-status.service\";\n\n/** status 值 → 颜色,启动时构建一次 */\nconst STATUS_COLOR_MAP: Map<string, string> = (() => {\n const map = new Map<string, string>();\n for (const color of Object.keys(statusToColor)) {\n statusToColor[color].forEach((item) => {\n if (item) {\n map.set(item.toLowerCase(), color);\n }\n });\n }\n return map;\n})();\n\n@Component({\n selector: \"hd-status\",\n templateUrl: \"./hd-status.component.html\",\n styleUrls: [\"./hd-status.component.less\"],\n})\nexport class HdStatusComponent implements OnInit, OnChanges {\n @Input() status: string;\n statusColor: string;\n\n constructor() {}\n\n ngOnInit() {\n this.setStatusColor();\n }\n\n ngOnChanges() {\n this.setStatusColor();\n }\n\n setStatusColor() {\n const statusLower = this.status && this.status.toLowerCase();\n this.statusColor =\n statusLower && STATUS_COLOR_MAP.has(statusLower)\n ? STATUS_COLOR_MAP.get(statusLower)\n : \"#9FA4A2\";\n }\n}\n","import { NgModule } from '@angular/core';\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { CommonModule } from '@angular/common';\nimport { NgZorroAntdModule } from 'ng-zorro-antd';\nimport { HdStatusComponent } from \"./hd-status.component\";\n\n@NgModule({\n declarations: [\n HdStatusComponent,\n ],\n imports: [\n FormsModule,\n ReactiveFormsModule,\n CommonModule,\n NgZorroAntdModule,\n ],\n exports: [HdStatusComponent],\n providers: [],\n bootstrap: [HdStatusComponent]\n})\nexport class HdStatusModule {\n}\n","/**\n * 表格 / 表单列宽常量(px)。\n * 使用 `as const`,发布后的 `.d.ts` 仍保留具体数值,IDE 悬停可直接看到。\n *\n * @example\n * import { ColWidth } from 'fantasy-ngzorro';\n * { width: ColWidth.enumColWidth } // 100\n */\nexport const ColWidth = {\n /** 表格小图标宽度 — 25 */\n tableImageColWidth: 25,\n /** 表格双小图标宽度 — 40 */\n tableTwoImageColWidth: 40,\n /** 单据单号列宽度 — 150 */\n billNumberColWidth: 150,\n /** 基本资料名称列宽度 — 150 */\n nameColWidth: 150,\n /** 基本资料代码列宽度 — 100 */\n codeColWidth: 100,\n /** 门店/货主/供应商 `[code]name` 展示固定宽度 — 200 */\n codeNameColWidth: 200,\n /** 枚举列宽度 — 100 */\n enumColWidth: 100,\n /** 单个日期 — 100 */\n dateColWidth: 100,\n /** 单个日期带时间 — 150 */\n dateTimeColWidth: 150,\n /** 日期范围 — 200 */\n dateRangeWidth: 200,\n /** 操作列宽度 — 150 */\n operateColWidth: 150,\n /** 数字列 — 100 */\n numberColWidth: 100,\n /** 备注列 — 250 */\n remarkColWidth: 250,\n /** 通用固定宽(超长省略)— 150 */\n fixColWidth: 150,\n /** 订单等内容缩略/展开列 — 350 */\n maxColWidth: 350,\n} as const;\n","import { Pipe, PipeTransform } from \"@angular/core\";\nimport { ColWidth } from \"../model/colWidth\";\nimport { HdTableColumn } from \"./hd-table.service\";\n\nexport interface HdTableCellView {\n display: string | number;\n title: string | null;\n isEmpty: boolean;\n overflow: boolean;\n}\n\n@Pipe({ name: \"hdTableCell\", pure: true })\nexport class HdTableCellPipe implements PipeTransform {\n transform(data: any, col: HdTableColumn): HdTableCellView {\n if (!data || !col) {\n return { display: \"<空>\", title: null, isEmpty: true, overflow: false };\n }\n const raw = getHdTableCellRaw(data, col);\n const isEmpty = !(raw || raw === 0);\n const display = isEmpty ? \"<空>\" : raw;\n const maxWidth = col.width || ColWidth.fixColWidth;\n let overflow = false;\n let title: string | null = null;\n if (!isEmpty) {\n const str = String(raw);\n overflow = estimateTextWidth(str) >= maxWidth;\n if (overflow) {\n title = str;\n }\n }\n return { display, title, isEmpty, overflow };\n }\n}\n\n/** 估算文本像素宽度(中文约 14px,英文约 8px) */\nfunction estimateTextWidth(str: string): number {\n let width = 15;\n for (let i = 0; i < str.length; i++) {\n width += str.charCodeAt(i) > 255 ? 14 : 8;\n }\n return width;\n}\n\nfunction getHdTableCellRaw(data: any, col: HdTableColumn): any {\n if (col.render) {\n return col.render(data);\n }\n const name = col.name;\n if (typeof name === \"function\") {\n return name(data);\n }\n if (typeof name === \"string\") {\n return data[name];\n }\n return undefined;\n}\n","import { InputNumber, SelectOption } from \"../model/common-type\";\n\n// 表格行\nexport class HdTableColumn {\n title: string; // 列名\n name: string | Function = null; // 字段名\n render?: (value: any) => string; // 渲染函数\n width?: number; // 列宽\n /**\n * 文字颜色。\n * 字符串:整列同色;\n * 函数:按行返回颜色(如标红返回 '#F5222D',不标色返回空)。\n */\n color?: string | ((line: any) => string);\n align?: \"right\" | \"left\" | \"center\" = \"left\";\n click?: (value: any) => void;\n /** 按行控制是否渲染为可点击超链接;未配置时只要有 click 则整列可点 */\n canClick?: (value: any) => boolean;\n fixed?: \"left\" | \"right\" = null;\n fixedWidth?: number; // 左侧固定列偏移(其左侧已固定列宽之和)\n fixedRightWidth?: number; // 右侧固定列偏移(其右侧已固定列宽之和)\n btnList?: Array<OperateBtn> = []; // title 为「操作」时整列按钮;其他列时作为单元格文案后的操作按钮\n isShow?: boolean = true;\n canSort?: boolean = false; // 是否可以排序\n canWarp?: boolean = false; // 用于某一列需要个性化的场景,当为true时,且表格选项showOperateColWarpButton为true时,通过按钮控制对应的列是否换行\n minWidth?: number; // 最小宽度,保证列名能正常显示\n stateField?: string; // 状态列取值字段,默认取 state\n isState?: boolean; // 是否按状态列渲染,取值字段为 name\n /**\n * 字段值后用竖线追加行号。前面的字段仍可配 click 作为超链接,行号本身不可点。\n * true:按分页连续序号(从 1 开始);\n * string:取当前行该字段作为行号。\n */\n rowNo?: boolean | string;\n /**\n * 值后显示编辑笔图标(Figma edit/edit,14px)。\n * true:整列可编辑;函数:按行控制。\n * 与 editType 互斥:配置了 editType 时走单元格内控件,不再显示编辑笔。\n */\n editable?: boolean | ((line: any) => boolean);\n /** 点击编辑笔回调,供父组件处理(如弹窗改值) */\n edit?: (line: any) => void;\n /**\n * 行内编辑类型;配置后该列常显控件。\n * name 须为 string(函数型 name 不支持行内编辑)。\n */\n editType?: \"input\" | \"inputNumber\" | \"select\";\n /** 是否禁用行内编辑:true / 按行函数 */\n editDisabled?: boolean | ((line: any) => boolean);\n /** Select 配置(复用 SelectOption 子集) */\n selectOption?: SelectOption;\n /** InputNumber 配置 */\n inputNumber?: InputNumber;\n /** 输入框 / 下拉 placeholder */\n placeholder?: string;\n}\n\n/** hd-table 行内编辑变更事件(乐观更新后抛出,previous* 供接口失败回滚) */\nexport class HdTableCellChange {\n line: any;\n col: HdTableColumn;\n name: string;\n value: any;\n previousValue: any;\n label?: any;\n previousLabel?: any;\n option?: any;\n previousOption?: any;\n}\n\nexport class OperateBtn {\n /** 按钮文案;支持按行动态,如 (line) => line.enabled ? '解除' : '设置' */\n name: string | ((line: any) => string);\n showConfirm?: boolean | ((line: any) => boolean) = false;\n isRepeat?: boolean = false; // 是否和别的按钮有显示冲突,譬如:开启,关闭需要再关闭按钮加一个这个属性\n click?: (value: any) => void;\n permission?: (value: any) => boolean;\n}\n\nexport class TableCacheOption {\n pageSize: number;\n colWidths: Map<string, number> = new Map<string, number>(); // name -> width\n cols: Array<string>; // ['title']\n}\n\n// 设置列 树组件对象\nexport class TreeGrid {\n title: string = \"\";\n key: string = \"\";\n disabled?: boolean = false;\n checked?: boolean = false;\n selectable?: boolean = false;\n isLeaf?: boolean = true;\n expanded?: boolean = false;\n}\n","import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ContentChild,\n ElementRef,\n EventEmitter,\n Input,\n OnDestroy,\n OnInit,\n Output,\n SimpleChange,\n TemplateRef,\n ViewChild,\n} from \"@angular/core\";\nimport * as localforage from \"localforage\";\nimport {\n InputBoolean,\n NzFormatBeforeDropEvent,\n NzFormatEmitEvent,\n} from \"ng-zorro-antd/core\";\nimport { NzResizeEvent } from \"ng-zorro-antd/resizable\";\nimport { NzTableComponent } from \"ng-zorro-antd/table\";\nimport { Observable, of } from \"rxjs\";\nimport { delay } from \"rxjs/operators\";\nimport { ColWidth } from \"../model/colWidth\";\nimport { Page } from \"../model/common-type\";\nimport { CommonSessionService } from \"../service/common-session.service\";\nimport { resolveAutoTableScroll } from \"../utils/hd-table-scroll.util\";\nimport { TotalOption } from \"../hd-detail-lines/hd-detail-lines.service\";\nimport {\n HdTableCellChange,\n HdTableColumn,\n OperateBtn,\n TableCacheOption,\n TreeGrid,\n} from \"./hd-table.service\";\n@Component({\n selector: \"hd-table\",\n templateUrl: \"./hd-table.component.html\",\n styleUrls: [\"./hd-table.component.less\"],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class HdTableComponent implements OnInit, OnDestroy {\n @Input() uuid: string;\n @Input() tableCols: Array<HdTableColumn> = [];\n @Input() tableData: Page<any>;\n @Input() @InputBoolean() showSelected: boolean = false;\n @Input() @InputBoolean() showOperateColWarpButton: boolean = false;\n /** 是否展示列设置(齿轮),默认开启;弹窗等场景可传 false 关闭 */\n @Input() @InputBoolean() showColSettings: boolean = true;\n @Input() @InputBoolean() virtualScroll: boolean = true;\n /** 手动指定行高;不传则在首屏渲染后自动测量 */\n @Input() virtualItemSize: number;\n @Input() selectField: string = \"billNumber\";\n /**\n * 行勾选禁用字段名。定义后取当前行该字段:\n * 为 true 时禁用该行勾选(全选也会跳过)。\n */\n @Input() selectDisabledField: string;\n /**\n * 行失效字段名。定义后取当前行该字段:\n * 为 true 时整行背景色为 #F7F8FA。\n */\n @Input() rowInvalidField: string;\n // 合计区域(类型与 hd-detail-lines 的 TotalOption 一致)\n @Input() @InputBoolean() showTableTotal: boolean = false;\n @Input() tableTotalOption: Array<TotalOption>;\n /**\n * 合计列总数(含序号列,与 hd-detail-lines 一致);\n * 不传则按当前可见数据列数 + 1(序号)推算。\n */\n @Input() columnsNumber: number | string;\n @Output() sortEvent = new EventEmitter();\n @Output() selectEvent = new EventEmitter();\n @Output() tableSearchEvent = new EventEmitter();\n /** 行内编辑变更(已写回行对象;previous* 供接口失败回滚) */\n @Output() cellChange = new EventEmitter<HdTableCellChange>();\n @Input() tableLoading: boolean = false;\n /** 是否显示分页;false 时一次展示 tableData.content 全部行 */\n @Input() @InputBoolean() pagination: boolean = true;\n /**\n * 是否前端分页(对 content 全量切片)。\n * true:翻页不触发 tableSearchEvent,适合详情全量数据;\n * false(默认):服务端分页,翻页触发查询(现有列表行为)。\n * 与 pagination=false 同时用时以不分页为准。\n */\n @Input() @InputBoolean() frontPagination: boolean = false;\n // 表格分页参数\n @Input() tablePageIndex: number = 1;\n @Input() tablePageSize: number = 100;\n @Input() isFirstEntrySearch: boolean;\n @Input() isCrossPageSelect: boolean;\n @Output() tablePageIndexChange = new EventEmitter<any>();\n @Output() tablePageSizeChange = new EventEmitter<any>();\n @Output() tablePageSizeChangeEvent = new EventEmitter<any>();\n @ContentChild(\"tableTotal\", { static: false }) tableTotal: TemplateRef<any>;\n @ContentChild(\"tableLeftButton\", { static: false })\n tableLeftButton: TemplateRef<any>;\n @ContentChild(\"tableRightButton\", { static: false })\n tableRightButton: TemplateRef<any>;\n scroll = null;\n\n // 表格勾选参数\n isAllDisplayDataChecked = false;\n isIndeterminate = false;\n listOfDisplayData = [];\n listOfAllData = [];\n listOfSelection: Array<any> | TemplateRef<void>;\n mapOfCheckedId: { [key: string]: boolean } = {};\n mapOfCheckList: { [key: string]: any } = {};\n // 合计参数\n tableTotalOptionList = [];\n // 缓存信息\n tableCacheOption: TableCacheOption = new TableCacheOption();\n userSession: any;\n\n tableColsCache: Array<HdTableColumn> = [];\n showTable: boolean = false;\n selectColListNodes: Array<TreeGrid> = [];\n selectColListNodesCache: Array<TreeGrid> = [];\n showListNodes: boolean = false;\n\n isDropdownVisible: boolean = false;\n // 设置列的可见操作数组\n nowListNodes: Array<TreeGrid> = [];\n // 设置列的不可见操作数组\n hideListNodes: Array<TreeGrid> = [];\n\n // 点击时需要有临时数组存放两个tree,用于取消时候恢复调整前的状态\n cancelNowListNodes: Array<TreeGrid> = [];\n cancelHideListNodes: Array<TreeGrid> = [];\n showDetail: boolean = false;\n localforage: any = null;\n localtionTmp: string = \"\";\n isFirstEntrySearchLocal: boolean = true;\n isCrossPageSelectLocal: boolean = false;\n\n /** 自动测量前的兜底行高,测量完成后会更新 */\n measuredVirtualItemSize = 47;\n\n /** 记录当前是否处于虚拟滚动模式,用于切换 pageSize 时重建表格 */\n private virtualScrollActive: boolean | null = null;\n\n /** 可见列总宽,用于判断是否需要横向滚动 */\n /** 列宽合计(含勾选/序号),footer 表宽与横向 scroll 共用 */\n tableColWidthTotal = 0;\n\n /** 数据更新后待复位纵向滚动位置 */\n private pendingResetScrollTop = false;\n\n /** 当前排序,表格重建后用于恢复表头排序态 */\n private currentSortKey: string = null;\n private currentSortValue: string = null;\n\n @ViewChild(\"hdTable\", { static: false }) nzTableComponent: NzTableComponent;\n\n private totalFooterScrollBoundBody: HTMLElement = null;\n private totalFooterScrollHandler: () => void = null;\n private totalFooterSyncRetry = 0;\n\n /** 表体有竖滚条时合计 footer 才预留右侧滚动条槽 */\n totalFooterNeedYGutter = false;\n\n /** 视口/容器尺寸变化时重算 scroll.x 与合计对齐 */\n private viewportResizeTimer: any = null;\n private boundOnViewportResize: () => void = null;\n private hostResizeObserver: any = null;\n\n constructor(\n private hostEl: ElementRef,\n private cdr: ChangeDetectorRef,\n private commonSessionService: CommonSessionService,\n ) {\n this.localforage = localforage.createInstance({\n driver: localforage.INDEXEDDB,\n name: \"hd-fscm\", // 设置存储库的名称\n version: 1.0, // 设置存储库的版本\n storeName: \"hd-fscm-store\", // 设置存储库的存储空间名称\n });\n }\n\n ngOnDestroy(): void {\n this.unbindTotalFooterScrollSync();\n this.unbindViewportResizeSync();\n }\n\n ngOnInit(): void {\n if (this.isFirstEntrySearch === false) {\n this.isFirstEntrySearchLocal = this.isFirstEntrySearch;\n }\n if (this.isCrossPageSelect === true) {\n this.isCrossPageSelectLocal = this.isCrossPageSelect;\n }\n this.localtionTmp = location.pathname;\n if (this.localtionTmp) {\n this.localtionTmp = this.localtionTmp.replace(/\\//g, \"_\");\n }\n this.userSession = this.commonSessionService.getSession(\n \"__jy_authorization_session__\",\n );\n // 用于开发环境调试\n if (!this.userSession) {\n this.userSession = {\n userCode: \"dev\",\n };\n }\n\n this.bindViewportResizeSync();\n this.deleteHideItem();\n if (!this.tableCols || this.tableCols.length === 0) {\n return;\n }\n\n this.localforage\n .ready()\n .then(() => {\n this.getInitLocalforage();\n })\n .catch(function (e) {\n console.log(\"localforage加载异常step1\", e);\n throw \"localforage加载异常\";\n });\n }\n\n ngOnChanges(changes: SimpleChange) {\n if (\n changes[\"tableData\"] ||\n changes[\"tableTotalOption\"] ||\n changes[\"showTableTotal\"] ||\n changes[\"columnsNumber\"] ||\n changes[\"tableCols\"]\n ) {\n this.calculateTableTotal();\n }\n\n if (\n changes &&\n changes[\"tableData\"] &&\n changes[\"tableData\"][\"currentValue\"] &&\n changes[\"tableData\"][\"previousValue\"]\n ) {\n if (\n changes[\"tableData\"][\"currentValue\"][\"pageSize\"] !==\n changes[\"tableData\"][\"previousValue\"][\"pageSize\"] ||\n changes[\"tableData\"][\"currentValue\"][\"pageNumber\"] !==\n changes[\"tableData\"][\"previousValue\"][\"pageNumber\"]\n ) {\n this.pendingResetScrollTop = true;\n if (this.virtualScroll) {\n // 仅虚拟/普通模式真正切换时重建,避免排序后数据刷新把排序态清掉\n this.applyTableScrollMode(false);\n }\n // 翻页/改 pageSize:主动多次复位,覆盖 CDK 异步渲染时序\n this.scheduleResetTableBodyScrollTop();\n return;\n }\n if (!this.isCrossPageSelectLocal) {\n this.resetStatus();\n }\n }\n\n if (changes[\"tableData\"]) {\n this.pendingResetScrollTop = true;\n if (this.virtualScroll) {\n // 数据刷新不强制重建,只在滚动模式变化时 remount\n this.applyTableScrollMode(false);\n }\n // 数据更新后复位纵向滚动(含虚拟滚动场景)\n this.scheduleResetTableBodyScrollTop();\n }\n\n if (\n changes[\"tableCols\"] &&\n JSON.stringify(changes[\"tableCols\"].currentValue) !==\n JSON.stringify(changes[\"tableCols\"].previousValue) &&\n changes[\"tableCols\"].previousValue !== undefined\n ) {\n this.deleteHideItem();\n if (!this.tableCols || this.tableCols.length === 0) {\n return;\n }\n this.localforage\n .ready()\n .then(() => {\n this.getInitLocalforage();\n })\n .catch(function (e) {\n console.log(\"localforage加载异常step2\", e);\n throw \"localforage加载异常\";\n });\n }\n\n if (\n (changes[\"pagination\"] && !changes[\"pagination\"].firstChange) ||\n (changes[\"frontPagination\"] && !changes[\"frontPagination\"].firstChange)\n ) {\n // 分页模式切换需重建 nz-table(front / server / none)\n this.tablePageIndex = 1;\n this.applyTableScrollMode(true);\n this.cdr.markForCheck();\n }\n }\n\n /** 是否走前端分页(对 content 切片,不请求后端) */\n get useFrontPagination(): boolean {\n return !!this.pagination && !!this.frontPagination;\n }\n\n deleteHideItem() {\n // 首先把isShow为false数据剔除掉\n this.tableCols = this.tableCols.filter((item) => {\n // 如果对象没有 isShow 属性,则默认为 true,保留该对象\n if (!item.hasOwnProperty(\"isShow\")) {\n return true;\n }\n // 如果对象有 isShow 属性,则检查其值是否为 true\n return item.isShow === true;\n });\n }\n\n sort(sort: { key: string; value: string }) {\n this.currentSortKey = sort && sort.key;\n this.currentSortValue = sort && sort.value;\n this.sortEvent.emit(sort);\n }\n\n getColSort(col: HdTableColumn): string | null {\n if (!col || !col.canSort || !this.currentSortKey) {\n return null;\n }\n return col.name === this.currentSortKey ? this.currentSortValue : null;\n }\n\n toggleShowDetail(): void {\n this.showDetail = !this.showDetail;\n this.cdr.markForCheck();\n this.refreshVirtualScrollViewport(true);\n }\n\n get effectiveVirtualItemSize(): number {\n if (this.virtualItemSize != null && this.virtualItemSize > 0) {\n return this.virtualItemSize;\n }\n return this.measuredVirtualItemSize;\n }\n\n /**\n * 纵向可用高度扣减:按钮区/合计/分页等固定占位。\n * 必须与 dealScroll / presetScrollBeforeRemount 使用同一套,否则会误判「能放下」而不设 scroll.y。\n */\n private getScrollYMaxOffset(): number {\n return (this.tableTotal ? 180 : 140) + 216;\n }\n\n /**\n * 当前视口实际展示的行数。\n * 前端分页按 pageIndex/pageSize 切片估算,避免用全量 length 误判需要纵向滚动。\n */\n private getVisibleRowCount(): number {\n const content =\n this.tableData && this.tableData.content ? this.tableData.content : [];\n const total = content.length;\n if (!this.useFrontPagination) {\n return total;\n }\n if (total <= 0) {\n return 0;\n }\n const pageSize =\n Number(this.tablePageSize) > 0 ? Number(this.tablePageSize) : 10;\n const pageIndex =\n Number(this.tablePageIndex) > 0 ? Number(this.tablePageIndex) : 1;\n const start = (pageIndex - 1) * pageSize;\n if (start >= total) {\n return 0;\n }\n return Math.min(pageSize, total - start);\n }\n\n /** 当前页内容高度是否超出视口(需要表内纵向滚动) */\n get needsVerticalScroll(): boolean {\n const rowCount = this.getVisibleRowCount();\n if (rowCount <= 0) {\n return false;\n }\n const maxOffset = this.getScrollYMaxOffset();\n const estimatedHeight = rowCount * this.effectiveVirtualItemSize;\n if (typeof window !== \"undefined\") {\n return estimatedHeight > window.innerHeight - maxOffset;\n }\n return rowCount > 100;\n }\n\n /** 当前页数据能完整展示时不启用虚拟滚动,避免少量数据也出现滚动条 */\n get useVirtualScroll(): boolean {\n if (!this.virtualScroll) {\n return false;\n }\n return this.needsVerticalScroll;\n }\n\n getRightSticky(col: HdTableColumn): string | null {\n return col.fixed === \"right\" ? `${col.fixedRightWidth || 0}px` : null;\n }\n\n getLeftSticky(col: HdTableColumn): string | null {\n return col.fixed === \"left\" ? `${col.fixedWidth || 0}px` : null;\n }\n\n /**\n * 序号列固定宽(含 padding,可容纳 6 位如 199995)。\n * 不锁死时表体会随位数变宽(1→~64px,199995→~67px),合计行对不齐。\n */\n readonly lineNumberColWidth = 72;\n\n /** 开启合计时序号列的 left(勾选列占 40px) */\n get lineNumberLeft(): string {\n return this.showSelected ? \"40px\" : \"0px\";\n }\n\n get lineNumberColWidthPx(): string {\n return this.lineNumberColWidth + \"px\";\n }\n\n /**\n * 列总宽未超出容器:无横向 scroll,表体列会被撑满,合计走 fluid(width:100%)。\n * 列总宽超出:有 scroll.x,合计走固定表宽 + 横滚同步。\n */\n get isTotalFooterFluid(): boolean {\n return !(this.scroll && this.scroll.x);\n }\n\n /** fluid → 100%;固定 → scroll.x(与表体同一套横向宽度) */\n get totalFooterTableWidth(): string {\n if (this.isTotalFooterFluid) {\n return \"100%\";\n }\n return this.scroll && this.scroll.x\n ? String(this.scroll.x)\n : this.tableColWidthTotal > 0\n ? this.tableColWidthTotal + \"px\"\n : \"100%\";\n }\n\n /** 当前页行号(跨页连续,从 1 开始) */\n getLineNumber(index: number): number {\n const page = Number(this.tablePageIndex) > 0 ? Number(this.tablePageIndex) : 1;\n const size = Number(this.tablePageSize) > 0 ? Number(this.tablePageSize) : 0;\n const rowIndex = Number(index) >= 0 ? Number(index) : 0;\n return (page - 1) * size + rowIndex + 1;\n }\n\n trackByRow = (index: number, data: any): string => {\n const key = data && data[this.selectField];\n return key != null ? String(key) : `row-${index}`;\n };\n\n /** 虚拟滚动按数组下标追踪,避免业务主键 trackBy 导致 CDK 行复用错位 */\n virtualTrackByRow = (index: number): number => index;\n\n trackByCol = (_index: number, col: HdTableColumn): string => {\n return col.title;\n };\n\n getInitLocalforage() {\n // 首先获取当前hd-table存储的数据 如果没有,则初始化下当前的数据\n this.localforage\n .getItem(\n \"hd-table_\" +\n this.userSession.userCode +\n \"_\" +\n this.localtionTmp +\n \"_\" +\n this.uuid,\n )\n .then((value: TableCacheOption) => {\n if (value) {\n this.tableCacheOption = value;\n this.normalizeTableCacheOption();\n if (\n this.pagination &&\n this.tableCacheOption.pageSize &&\n this.tableCacheOption.pageSize > 10\n ) {\n this.tablePageSize = this.tableCacheOption.pageSize;\n this.tablePageSizeChange.emit(this.tablePageSize);\n }\n } else {\n this.tableCacheOption = new TableCacheOption();\n this.tableCacheOption.pageSize = this.tablePageSize;\n }\n // 服务端分页才在初始化时抛 pageSizeChangeEvent 触发父查询;前端分页不抛\n if (\n this.pagination &&\n !this.frontPagination &&\n this.isFirstEntrySearchLocal\n ) {\n this.tablePageSizeChangeEvent.emit(this.tablePageSize);\n } else {\n this.isFirstEntrySearchLocal = true;\n }\n this.initTable();\n })\n .catch((err) => {\n this.tableCacheOption = new TableCacheOption();\n this.tableCacheOption.pageSize = this.tablePageSize;\n this.initTable();\n });\n }\n\n initTable() {\n this.showTable = false;\n if (!this.uuid) {\n throw \"hd-table缺失uuid参数,请使用编辑器插件生成并给hd-table赋予uuid属性\";\n }\n if (this.judgeRepeatCols()) {\n this.dealCols();\n this.setCols();\n this.dealOperateBtn();\n this.virtualScrollActive = null;\n this.applyTableScrollMode(true);\n }\n }\n\n /** 虚拟/普通模式切换时重建表格,避免残留滚动容器 */\n applyTableScrollMode(forceRemount = false): void {\n const useVirtual = this.useVirtualScroll;\n const modeChanged =\n this.virtualScrollActive !== null &&\n this.virtualScrollActive !== useVirtual;\n this.virtualScrollActive = useVirtual;\n\n if (forceRemount || modeChanged) {\n // 必须先写好 scroll.y,再创建 nz-table。\n // ng-zorro 只在 AfterViewInit 绑一次 header/body 的 scroll 同步;\n // 若先以 y=null 创建再改成有 y,表头监听会丢,表现为列头不跟着横滚。\n this.presetScrollBeforeRemount(useVirtual);\n this.showTable = false;\n this.cdr.markForCheck();\n setTimeout(() => {\n this.showTable = true;\n this.cdr.markForCheck();\n setTimeout(() => {\n this.dealScroll();\n this.cdr.markForCheck();\n this.afterTableRender(useVirtual);\n });\n });\n return;\n }\n\n const prevHasY = !!(this.scroll && this.scroll.y);\n this.dealScroll();\n const nextHasY = !!(this.scroll && this.scroll.y);\n // 运行中 y 从有变无/从无变有时,也必须重建,否则同步监听仍指向旧 DOM\n if (prevHasY !== nextHasY) {\n this.showTable = false;\n this.cdr.markForCheck();\n setTimeout(() => {\n this.showTable = true;\n this.cdr.markForCheck();\n setTimeout(() => {\n this.afterTableRender(useVirtual);\n });\n });\n return;\n }\n\n this.cdr.markForCheck();\n this.afterTableRender(useVirtual);\n }\n\n /** 重建前预设 scroll,保证 AfterViewInit 时 header/body 结构已正确 */\n private presetScrollBeforeRemount(useVirtual: boolean): void {\n const maxOffset = this.getScrollYMaxOffset();\n const x = this.scroll ? this.scroll.x : null;\n if (this.virtualScroll && !useVirtual) {\n this.scroll = { x, y: null };\n return;\n }\n this.scroll = {\n x,\n y: `calc(100vh - ${maxOffset}px)`,\n };\n }\n\n private afterTableRender(useVirtual: boolean): void {\n if (useVirtual) {\n this.refreshVirtualScrollViewport(true);\n return;\n }\n if (this.virtualScroll) {\n this.measureVirtualItemSize(true);\n // 实测行高后可能从「能放下」变为「超出」,需切换滚动模式\n if (this.useVirtualScroll) {\n this.applyTableScrollMode(false);\n return;\n }\n }\n setTimeout(() => {\n this.syncHorizontalScroll();\n this.flushResetTableBodyScrollTop();\n });\n }\n\n refreshVirtualScrollViewport(forceMeasure = false): void {\n if (!this.useVirtualScroll) {\n if (forceMeasure) {\n this.measureVirtualItemSize(forceMeasure);\n this.dealScroll();\n this.cdr.markForCheck();\n }\n this.flushResetTableBodyScrollTop();\n return;\n }\n setTimeout(() => {\n const viewport =\n this.nzTableComponent && this.nzTableComponent.cdkVirtualScrollViewport;\n if (!viewport) {\n this.syncHorizontalScroll();\n this.flushResetTableBodyScrollTop();\n return;\n }\n const measured = this.measureVirtualItemSize(forceMeasure);\n if (measured) {\n this.dealScroll();\n this.cdr.markForCheck();\n viewport.checkViewportSize();\n setTimeout(() => {\n this.measureVirtualItemSize(forceMeasure);\n this.syncHorizontalScroll();\n viewport.checkViewportSize();\n this.flushResetTableBodyScrollTop();\n });\n } else {\n viewport.checkViewportSize();\n this.syncHorizontalScroll();\n this.flushResetTableBodyScrollTop();\n }\n });\n }\n\n /** 数据刷新后将表体纵向滚动复位到顶部 */\n private resetTableBodyScrollTop(): void {\n if (!this.nzTableComponent) {\n return;\n }\n const nzTable = this.nzTableComponent as any;\n const viewport = this.nzTableComponent.cdkVirtualScrollViewport;\n if (viewport) {\n if (typeof (viewport as any).scrollToOffset === \"function\") {\n (viewport as any).scrollToOffset(0);\n }\n if (typeof (viewport as any).scrollToIndex === \"function\") {\n (viewport as any).scrollToIndex(0);\n }\n const viewportEl =\n viewport.elementRef &&\n (viewport.elementRef.nativeElement as HTMLElement);\n if (viewportEl) {\n viewportEl.scrollTop = 0;\n }\n }\n const bodyCandidates = [\n nzTable.mixTableBodyNativeElement,\n nzTable.tableBodyNativeElement,\n nzTable.tableBodyElement && nzTable.tableBodyElement.nativeElement,\n ];\n bodyCandidates.forEach((el: HTMLElement) => {\n if (el) {\n el.scrollTop = 0;\n }\n });\n const tableMain =\n nzTable.tableMainElement &&\n (nzTable.tableMainElement.nativeElement as HTMLElement);\n if (!tableMain) {\n return;\n }\n const nodes = tableMain.querySelectorAll(\n \".ant-table-body, cdk-virtual-scroll-viewport\",\n );\n Array.prototype.forEach.call(nodes, (el: HTMLElement) => {\n el.scrollTop = 0;\n });\n }\n\n /**\n * 数据更新后多次尝试复位。\n * ng-zorro 8 + CDK 虚拟滚动会在数据刷新后异步改写 scrollTop,单次复位经常被覆盖。\n */\n private scheduleResetTableBodyScrollTop(): void {\n // 多次尝试:覆盖 nz-table / CDK 虚拟滚动异步改写 scrollTop\n const delays = [0, 50, 100];\n delays.forEach((ms, index) => {\n setTimeout(() => {\n this.resetTableBodyScrollTop();\n if (index === delays.length - 1) {\n this.pendingResetScrollTop = false;\n }\n }, ms);\n });\n }\n\n private flushResetTableBodyScrollTop(): void {\n if (!this.pendingResetScrollTop) {\n return;\n }\n this.resetTableBodyScrollTop();\n }\n\n /** 未手动传 virtualItemSize 时,从已渲染行测量真实高度 */\n measureVirtualItemSize(force = false): boolean {\n if (this.virtualItemSize != null && this.virtualItemSize > 0 && !force) {\n return false;\n }\n const viewport =\n this.nzTableComponent && this.nzTableComponent.cdkVirtualScrollViewport;\n const tableBody =\n this.nzTableComponent &&\n (this.nzTableComponent.tableBodyNativeElement as HTMLElement);\n const row =\n (viewport &&\n ((viewport.elementRef.nativeElement as HTMLElement).querySelector(\n \"tr.hd-table-virtual-row\",\n ) as HTMLElement)) ||\n (tableBody && (tableBody.querySelector(\"tbody tr\") as HTMLElement));\n if (!row || row.offsetHeight <= 0) {\n return false;\n }\n const height = row.offsetHeight;\n if (height === this.measuredVirtualItemSize) {\n return false;\n }\n this.measuredVirtualItemSize = height;\n return true;\n }\n\n // 设置列点击取消\n cancelDropdown(): void {\n this.isDropdownVisible = false;\n this.hideListNodes = JSON.parse(JSON.stringify(this.cancelHideListNodes));\n this.nowListNodes = JSON.parse(JSON.stringify(this.cancelNowListNodes));\n this.cdr.markForCheck();\n }\n\n // 点击触发设置列\n confirmDropdown(): void {\n // 临时存放下,取消的时候恢复原来的状态 深拷贝下对象数组\n this.cancelHideListNodes = JSON.parse(JSON.stringify(this.hideListNodes));\n this.cancelNowListNodes = JSON.parse(JSON.stringify(this.nowListNodes));\n this.isDropdownVisible = true;\n this.cdr.markForCheck();\n }\n\n submitGrids() {\n this.tableCacheOption.cols = [];\n this.nowListNodes.forEach((item) => {\n this.tableCacheOption.cols.push(item.title);\n });\n this.saveTableCacheOption();\n this.initTable();\n this.isDropdownVisible = false;\n this.cdr.markForCheck();\n }\n\n // 从缓存设置列\n setCols() {\n this.showListNodes = false;\n this.nowListNodes = [];\n this.hideListNodes = [];\n if (this.hasColsCache()) {\n let { notIncols, incols } = this.tableColsCache.reduce(\n (acc, item) => {\n if (this.tableCacheOption.cols.includes(item.title)) {\n acc.incols.push(item);\n } else {\n acc.notIncols.push(item);\n }\n return acc;\n },\n { notIncols: [], incols: [] },\n );\n incols.sort((a, b) => {\n return (\n this.tableCacheOption.cols.indexOf(a.title) -\n this.tableCacheOption.cols.indexOf(b.title)\n );\n });\n this.tableCols = incols.concat(notIncols);\n }\n\n this.tableCols.forEach((element, index) => {\n if (this.hasColsCache()) {\n element.isShow = this.tableCacheOption.cols.includes(element.title)\n ? true\n : false;\n if (element.isShow) {\n this.nowListNodes.push({\n title: element.title,\n key: element.title,\n disabled: element.fixed ? true : false,\n // selectable: false,\n checked: this.tableCacheOption.cols.includes(element.title)\n ? true\n : false,\n });\n } else {\n this.hideListNodes.push({\n title: element.title,\n key: element.title,\n disabled: element.fixed ? true : false,\n // selectable: false,\n checked: this.tableCacheOption.cols.includes(element.title)\n ? true\n : false,\n });\n }\n } else {\n element.isShow = true;\n this.nowListNodes.push({\n title: element.title,\n key: element.title,\n checked: true,\n // selectable: false,\n disabled: element.fixed ? true : false,\n });\n }\n });\n\n // 调整列宽为缓存宽度\n if (\n this.tableCacheOption &&\n this.tableCacheOption.colWidths &&\n this.tableCacheOption.colWidths.size !== 0\n ) {\n this.tableCols.forEach((col) => {\n if (this.tableCacheOption.colWidths.has(col.title)) {\n col.width = this.tableCacheOption.colWidths.get(col.title);\n }\n });\n }\n\n this.dealCols();\n setTimeout(() => {\n this.showListNodes = true;\n }, 0);\n }\n\n // 拖拽操作\n beforeDrop = (arg: NzFormatBeforeDropEvent): Observable<boolean> => {\n if (\n arg.node.origin.disabled ||\n !arg.dragNode.origin.checked ||\n arg.pos === 0\n ) {\n return of(false);\n } else {\n let node: TreeGrid = new TreeGrid();\n node.checked = arg.dragNode.origin.checked;\n node.disabled = arg.dragNode.origin.disabled;\n node.expanded = arg.dragNode.origin.expanded;\n node.isLeaf = arg.dragNode.origin.isLeaf;\n node.key = arg.dragNode.origin.key;\n node.selectable = arg.dragNode.origin.selectable;\n node.title = arg.dragNode.origin.title;\n // 拖拽元素下标\n let dragNodeIndex = this.nowListNodes.findIndex((item) => {\n return item.title == arg.dragNode.origin.title;\n });\n // 目标位置的下标\n let nodeIndex =\n this.nowListNodes.findIndex((item) => {\n return item.title == arg.node.origin.title;\n }) + (arg.pos === -1 ? 0 : arg.pos);\n this.nowListNodes.splice(nodeIndex, 0, node);\n this.nowListNodes.splice(\n nodeIndex >= dragNodeIndex ? dragNodeIndex : dragNodeIndex + 1,\n 1,\n );\n return of(true).pipe(delay(100));\n }\n };\n\n moveElementNearby(arr, elementToMoveTitle, targetElementTitle, pos) {\n const tmpArray = JSON.parse(JSON.stringify(arr));\n const targetIndex = tmpArray.findIndex(\n (item) => item.title === targetElementTitle,\n );\n const elementIndex = tmpArray.findIndex(\n (item) => item.title === elementToMoveTitle,\n );\n const newIndex = pos < 0 ? targetIndex + pos : targetIndex;\n // 移除目标元素,并插入到新的位置\n const removedElement = tmpArray.splice(elementIndex, 1);\n tmpArray.splice(newIndex + 1, 0, removedElement[0]);\n return tmpArray;\n }\n\n // 勾选操作\n checkAction(event: NzFormatEmitEvent): void {\n // 勾选只有在hideListNodes,取消勾选只有在nowListNodes\n if (event.node.origin.checked) {\n let node: TreeGrid = new TreeGrid();\n node = this.hideListNodes.find((item) => {\n return item.title === event.node.origin.title;\n });\n node.checked = true;\n // 找到第一个fixed属性为right的title,找到插入元素的位置\n let title = null;\n for (let i = this.tableColsCache.length - 1; i >= 0; i--) {\n if (this.tableColsCache[i].fixed === \"right\") {\n title = this.tableColsCache[i].title;\n break;\n }\n }\n let temporaryNodeList = this.nowListNodes.slice(0);\n if (!title) {\n temporaryNodeList.push(node);\n } else {\n const index = this.nowListNodes.findIndex(\n (node) => node.title === title,\n );\n temporaryNodeList.splice(index, 0, node);\n }\n this.nowListNodes = temporaryNodeList;\n this.hideListNodes = this.hideListNodes.filter((item) => {\n return item.title !== event.node.origin.title;\n });\n } else {\n // if (this.hideListNodes.length === 0 && this.tableCacheOption && this.tableCacheOption.cols) {\n // this.hideListNodes = this.getHideListNodes();\n // }\n let temporaryNodeList = this.hideListNodes.slice(0);\n this.nowListNodes.forEach((item) => {\n if (item.title === event.node.origin.title) {\n const innerItem = JSON.parse(JSON.stringify(item));\n innerItem.checked = false;\n temporaryNodeList.push(innerItem);\n }\n });\n this.hideListNodes = temporaryNodeList;\n\n // 为了防止未选择的数组顺序因为push方法而改变,通过初始数据获取显示的字段列表\n this.nowListNodes = this.nowListNodes.filter((item) => {\n return item.title !== event.node.origin.title;\n });\n }\n this.cdr.markForCheck();\n }\n\n // 防止未选择的数组顺序因为push方法而改变,从初始数据获取隐藏未显示的字段列表\n getHideListNodes(): Array<TreeGrid> {\n let temporaryNodeList: Array<TreeGrid> = [];\n // 从tableColsCache里面找没有在storage里面出现的字段,组成hideList\n this.tableColsCache.forEach((item) => {\n if (!this.tableCacheOption.cols.includes(item.title)) {\n let nodeItem: TreeGrid = new TreeGrid();\n nodeItem.title = item.title;\n nodeItem.key = item.title;\n nodeItem.disabled = item.fixed ? true : false;\n nodeItem.checked = false;\n temporaryNodeList.push(nodeItem);\n }\n });\n return temporaryNodeList;\n }\n\n dealCols() {\n if (!this.tableCols[0].minWidth) {\n this.tableCols.forEach((item) => {\n const span = document.createElement(\"span\");\n span.style.visibility = \"hidden\";\n span.style.position = \"absolute\";\n span.style.whiteSpace = \"nowrap\";\n span.style.fontSize = \"14px\";\n span.style.display = \"inline-block\"; // 将样式修改为 inline-block\n span.innerText = item.title;\n document.body.appendChild(span);\n item.minWidth = span.offsetWidth + 16;\n span.style.display = \"none\";\n document.body.removeChild(span);\n });\n }\n // 处理左右吸附的数据在数组中的位置\n const leftFixedCols = this.tableCols.filter((col) => col.fixed === \"left\");\n const rightFixedCols = this.tableCols.filter(\n (col) => col.fixed === \"right\",\n );\n const normalCols = this.tableCols.filter((col) => !col.fixed);\n const resultCols = leftFixedCols.concat(normalCols).concat(rightFixedCols);\n this.tableCols = resultCols;\n if (!this.tableColsCache || this.tableColsCache.length === 0) {\n // 缓存一下表格的数据\n this.tableColsCache = [...this.tableCols];\n }\n }\n\n normalizeTableCacheOption() {\n if (!this.tableCacheOption.colWidths) {\n this.tableCacheOption.colWidths = new Map<string, number>();\n } else if (!(this.tableCacheOption.colWidths instanceof Map)) {\n const colWidths = new Map<string, number>();\n Object.keys(this.tableCacheOption.colWidths).forEach((key) => {\n colWidths.set(key, (this.tableCacheOption.colWidths as any)[key]);\n });\n this.tableCacheOption.colWidths = colWidths;\n }\n }\n\n private hasColsCache(): boolean {\n return !!(\n this.tableCacheOption &&\n this.tableCacheOption.cols &&\n this.tableCacheOption.cols.length > 0\n );\n }\n\n saveTableCacheOption() {\n this.localforage.setItem(\n \"hd-table_\" +\n this.userSession.userCode +\n \"_\" +\n this.localtionTmp +\n \"_\" +\n this.uuid,\n this.tableCacheOption,\n );\n }\n\n judgeRepeatCols() {\n for (let i = 0; i < this.tableCols.length; i++) {\n for (let j = i + 1; j < this.tableCols.length; j++) {\n if (this.tableCols[i].title === this.tableCols[j].title) {\n throw `hd-table组件中列名 ${this.tableCols[i].title} 重复`;\n }\n }\n }\n return true;\n }\n\n onResize({ width }: NzResizeEvent, col: HdTableColumn): void {\n this.normalizeTableCacheOption();\n let tempWidth = 0;\n if (width > col.minWidth) {\n tempWidth = width;\n } else {\n tempWidth = col.minWidth;\n }\n this.tableCacheOption.colWidths.set(col.title, tempWidth);\n this.saveTableCacheOption();\n this.tableCols = this.tableCols.map((e) =>\n e.title === col.title ? { ...e, width: tempWidth } : e,\n );\n this.dealScroll();\n this.cdr.markForCheck();\n setTimeout(() => this.syncTotalFooterWithBody());\n }\n\n dealOperateBtn() {\n let operateCol = this.tableCols.find((col) => col.title === \"操作\") || null;\n if (operateCol) {\n let textStr = \"\";\n operateCol.btnList.forEach((btn) => {\n if (!btn.isRepeat) {\n textStr += typeof btn.name === \"function\" ? \"操作\" : btn.name;\n }\n });\n\n const span = document.createElement(\"a\");\n span.style.visibility = \"hidden\";\n span.style.position = \"absolute\";\n span.style.whiteSpace = \"nowrap\";\n span.style.fontSize = \"14px\";\n span.style.display = \"inline-block\"; // 将样式修改为 inline-block\n span.innerText = textStr;\n document.body.appendChild(span);\n operateCol.width =\n span.offsetWidth +\n (operateCol.btnList.filter((item) => !item.isRepeat).length - 1) * 4 +\n 16;\n span.style.display = \"none\";\n document.body.removeChild(span);\n }\n }\n\n triggerEvent(fn: any, event: any) {\n if (fn) {\n fn(event);\n }\n }\n\n needShowConfirm(btn: OperateBtn, data: any): boolean {\n if (typeof btn.showConfirm === \"function\") {\n return btn.showConfirm(data);\n }\n return !!btn.showConfirm;\n }\n\n getBtnName(btn: OperateBtn, data: any): string {\n if (typeof btn.name === \"function\") {\n return btn.name(data) || \"\";\n }\n return btn.name != null ? String(btn.name) : \"\";\n }\n\n isDangerBtn(btn: OperateBtn, data: any): boolean {\n return this.getBtnName(btn, data) === \"删除\";\n }\n\n /** 虚拟滚动开启时使用视口最大高度 */\n private getVirtualScrollY(maxOffset: number): string {\n return `calc(100vh - ${maxOffset}px)`;\n }\n\n private hasTableData(): boolean {\n return !!(\n this.tableData &&\n this.tableData.content &&\n this.tableData.content.length\n );\n }\n\n /**\n * 列总宽超出外层容器才启用横向 scroll。\n * 以 dealScroll 累计的声明列宽为准,不用 DOM 自然测宽(内容不截断会偏大,导致列能放下也开横滚)。\n */\n private resolveScrollX(colWidth: number): string | null {\n const autoScroll = resolveAutoTableScroll(\n this.nzTableComponent,\n this.hasTableData(),\n colWidth,\n );\n return autoScroll ? autoScroll.x : null;\n }\n\n /** 表格渲染后按实际容器宽度校正横向 scroll(只改 x,避免触发表头结构变化) */\n private syncHorizontalScroll(): void {\n const scrollX = this.resolveScrollX(this.tableColWidthTotal);\n const currentY = this.scroll ? this.scroll.y : null;\n if (\n this.scroll &&\n this.scroll.x === scrollX &&\n this.scroll.y === currentY\n ) {\n setTimeout(() => this.syncTotalFooterWithBody());\n return;\n }\n // 保持 y 不变,防止运行中拆/合 header 导致横向同步失效\n this.scroll = { x: scrollX, y: currentY };\n this.cdr.markForCheck();\n setTimeout(() => this.syncHeaderBodyScrollLeft());\n }\n\n /** 手动把表体横向滚动同步到表头 / 合计 footer(兜底 ng-zorro 监听丢失的情况) */\n private syncHeaderBodyScrollLeft(): void {\n if (!this.nzTableComponent) {\n return;\n }\n const header = (this.nzTableComponent as any).tableHeaderNativeElement as\n | HTMLElement\n | null;\n const body = this.getTableBodyScrollEl();\n if (this.scroll && this.scroll.x && header && body) {\n if (header.scrollLeft !== body.scrollLeft) {\n header.scrollLeft = body.scrollLeft;\n }\n }\n this.syncTotalFooterWithBody();\n }\n\n /** 取表体横向滚动容器(虚拟滚动优先 viewport) */\n private getTableBodyScrollEl(): HTMLElement | null {\n if (!this.nzTableComponent) {\n return null;\n }\n const mix = (this.nzTableComponent as any).mixTableBodyNativeElement as\n | HTMLElement\n | null;\n if (mix) {\n return mix;\n }\n const host = this.hostEl && (this.hostEl.nativeElement as HTMLElement);\n if (!host) {\n return null;\n }\n return (\n (host.querySelector(\n \"cdk-virtual-scroll-viewport.ant-table-body\",\n ) as HTMLElement) ||\n (host.querySelector(\".ant-table-body\") as HTMLElement) ||\n null\n );\n }\n\n private getTotalFooterScrollEl(): HTMLElement | null {\n const host = this.hostEl && (this.hostEl.nativeElement as HTMLElement);\n return host\n ? (host.querySelector(\".hd-table-total-footer\") as HTMLElement)\n : null;\n }\n\n /** 表体是否出现纵向滚动条(含滚动条槽宽) */\n private bodyHasVerticalScrollbar(body: HTMLElement): boolean {\n if (!body) {\n return false;\n }\n return (\n body.scrollHeight > body.clientHeight + 1 ||\n body.offsetWidth - body.clientWidth > 1\n );\n }\n\n /**\n * 合计 footer 与表体联动:\n * - fluid(列未撑满):不横滚、不测宽,表宽 100% 与表体同比例拉伸;\n * - fixed(有 scroll.x):同步 scrollLeft;\n * - 仅当表体有竖滚条时预留右侧槽,行少无竖滚时不占位。\n */\n private syncTotalFooterWithBody(): void {\n if (!this.showTableTotal) {\n this.unbindTotalFooterScrollSync();\n if (this.totalFooterNeedYGutter) {\n this.totalFooterNeedYGutter = false;\n this.cdr.markForCheck();\n }\n return;\n }\n const footer = this.getTotalFooterScrollEl();\n const body = this.getTableBodyScrollEl();\n if (!footer) {\n if (this.totalFooterSyncRetry < 10) {\n this.totalFooterSyncRetry++;\n setTimeout(() => this.syncTotalFooterWithBody(), 50);\n }\n return;\n }\n this.totalFooterSyncRetry = 0;\n const needYGutter = !!(body && this.bodyHasVerticalScrollbar(body));\n if (this.totalFooterNeedYGutter !== needYGutter) {\n this.totalFooterNeedYGutter = needYGutter;\n this.cdr.markForCheck();\n }\n if (this.isTotalFooterFluid) {\n this.unbindTotalFooterScrollSync();\n footer.scrollLeft = 0;\n return;\n }\n if (body) {\n this.syncTotalFooterScrollLeft(body.scrollLeft);\n this.bindTotalFooterScrollSync(body);\n }\n }\n\n private syncTotalFooterScrollLeft(scrollLeft: number): void {\n const footer = this.getTotalFooterScrollEl();\n if (footer && footer.scrollLeft !== scrollLeft) {\n footer.scrollLeft = scrollLeft;\n }\n }\n\n private bindTotalFooterScrollSync(body: HTMLElement): void {\n if (!this.showTableTotal || !body || this.isTotalFooterFluid) {\n return;\n }\n if (\n this.totalFooterScrollBoundBody === body &&\n this.totalFooterScrollHandler\n ) {\n return;\n }\n this.unbindTotalFooterScrollSync();\n this.totalFooterScrollBoundBody = body;\n this.totalFooterScrollHandler = () => {\n this.syncTotalFooterScrollLeft(body.scrollLeft);\n };\n body.addEventListener(\"scroll\", this.totalFooterScrollHandler, {\n passive: true,\n } as any);\n }\n\n private unbindTotalFooterScrollSync(): void {\n if (this.totalFooterScrollBoundBody && this.totalFooterScrollHandler) {\n this.totalFooterScrollBoundBody.removeEventListener(\n \"scroll\",\n this.totalFooterScrollHandler,\n );\n }\n this.totalFooterScrollBoundBody = null;\n this.totalFooterScrollHandler = null;\n }\n\n /**\n * 监听窗口 / 容器宽度变化:重新判定 scroll.x(fluid↔fixed)与合计右侧竖滚槽,\n * 避免拉宽/缩窄屏幕后合计行宽与表体错位。\n */\n private bindViewportResizeSync(): void {\n this.boundOnViewportResize = () => this.scheduleViewportScrollSync();\n if (typeof window !== \"undefined\") {\n window.addEventListener(\"resize\", this.boundOnViewportResize);\n }\n const RO =\n typeof window !== \"undefined\" ? (window as any).ResizeObserver : null;\n if (RO && this.hostEl && this.hostEl.nativeElement) {\n this.hostResizeObserver = new RO(() => this.scheduleViewportScrollSync());\n this.hostResizeObserver.observe(this.hostEl.nativeElement);\n }\n }\n\n private unbindViewportResizeSync(): void {\n if (this.boundOnViewportResize && typeof window !== \"undefined\") {\n window.removeEventListener(\"resize\", this.boundOnViewportResize);\n }\n this.boundOnViewportResize = null;\n if (this.hostResizeObserver) {\n this.hostResizeObserver.disconnect();\n this.hostResizeObserver = null;\n }\n if (this.viewportResizeTimer != null) {\n clearTimeout(this.viewportResizeTimer);\n this.viewportResizeTimer = null;\n }\n }\n\n private scheduleViewportScrollSync(): void {\n if (this.viewportResizeTimer != null) {\n clearTimeout(this.viewportResizeTimer);\n }\n this.viewportResizeTimer = setTimeout(() => {\n this.viewportResizeTimer = null;\n if (!this.tableCols || !this.tableCols.length) {\n return;\n }\n this.syncHorizontalScroll();\n // 等表体布局稳定后再校合计竖滚槽 / 横滚同步\n setTimeout(() => this.syncTotalFooterWithBody(), 50);\n }, 100);\n }\n\n dealScroll() {\n let colWidth = 0;\n if (this.showSelected) {\n colWidth += 40;\n }\n if (this.showTableTotal) {\n colWidth += this.lineNumberColWidth; // 序号列(固定宽,不随位数变化)\n }\n this.tableCols.forEach((item) => {\n if (!item.width) {\n item.width = ColWidth.fixColWidth;\n }\n if (item.isShow) {\n item.fixedWidth = colWidth;\n colWidth += item.width;\n }\n });\n\n // 右侧固定列:从右往左累计偏移,避免多列都 right:0 互相遮挡\n let rightOffset = 0;\n for (let i = this.tableCols.length - 1; i >= 0; i--) {\n const item = this.tableCols[i];\n if (!item.isShow) {\n continue;\n }\n if (item.fixed === \"right\") {\n item.fixedRightWidth = rightOffset;\n rightOffset += item.width;\n } else {\n item.fixedRightWidth = 0;\n }\n }\n\n this.tableColWidthTotal = colWidth;\n const maxOffset = this.getScrollYMaxOffset();\n const useVirtual = this.useVirtualScroll;\n const scrollX = this.resolveScrollX(colWidth);\n\n if (this.virtualScroll && !useVirtual) {\n this.scroll = {\n x: scrollX,\n y: null,\n };\n return;\n }\n\n if (!this.virtualScroll) {\n this.scroll = {\n x: scrollX,\n y: `calc(100vh - ${maxOffset}px)`,\n };\n return;\n }\n\n this.scroll = {\n x: scrollX,\n y: this.getVirtualScrollY(maxOffset),\n };\n }\n\n // 表格勾选逻辑\n currentPageDataChange($event: any): void {\n this.listOfDisplayData = $event;\n this.refreshStatus();\n if (!this.isCrossPageSelectLocal) {\n this.resetStatus();\n }\n this.cdr.markForCheck();\n }\n\n search(reset: boolean) {\n if (!this.pagination) {\n return;\n }\n // 前端分页:只同步页码/条数,不触发父组件查询\n if (this.frontPagination) {\n if (reset) {\n this.tablePageIndex = 1;\n this.tablePageSizeChange.emit(this.tablePageSize);\n } else {\n this.tablePageIndexChange.emit(this.tablePageIndex);\n }\n this.tableCacheOption.pageSize = this.tablePageSize;\n this.saveTableCacheOption();\n // 按当前页行数重算是否需要 scroll.y(末页数据少时去掉固定高度,避免留白)\n this.pendingResetScrollTop = true;\n this.applyTableScrollMode(false);\n this.scheduleResetTableBodyScrollTop();\n this.cdr.markForCheck();\n return;\n }\n this.tableCacheOption.pageSize = this.tablePageSize;\n this.saveTableCacheOption();\n if (reset) {\n this.tablePageSizeChange.emit(this.tablePageSize);\n this.tablePageSizeChangeEvent.emit(this.tablePageSize);\n } else {\n this.tablePageIndexChange.emit(this.tablePageIndex);\n // 触发父组件查询事件\n this.tableSearchEvent.emit(reset);\n }\n }\n\n /**\n * 底部合计:与 hd-detail-lines 相同,使用 TotalOption(insertIndex / insertValue)。\n * 开启后强制展示序号列,「合计」落在序号列下;\n * insertIndex 从 1 起对应可见数据列;未传 insertValue 时按该列 name 对 content 求和。\n */\n calculateTableTotal() {\n if (\n !this.showTableTotal ||\n !this.tableTotalOption ||\n !this.tableTotalOption.length\n ) {\n this.tableTotalOptionList = [];\n return;\n }\n const visibleCols = (this.tableCols || []).filter(\n (c) => c && c.isShow !== false,\n );\n // columnsNumber 含序号列(与 detail-lines 一致),数据槽位数 = columnsNumber - 1\n const configured = Number(this.columnsNumber);\n const columnNumber =\n configured > 1\n ? configured - 1\n : configured === 1\n ? 1\n : visibleCols.length;\n if (!columnNumber || columnNumber < 1) {\n this.tableTotalOptionList = [];\n return;\n }\n this.tableTotalOptionList = new Array(columnNumber).fill(\"\");\n const content =\n this.tableData && this.tableData.content ? this.tableData.content : [];\n this.tableTotalOption.forEach((item) => {\n if (item == null || !item.insertIndex || item.insertIndex < 1) {\n return;\n }\n let value: any = item.insertValue;\n // 未传 insertValue 时:按 insertIndex 对应可见列 name 自动求和\n if (value == null || value === \"\") {\n const col = visibleCols[item.insertIndex - 1];\n const field = col && typeof col.name === \"string\" ? col.name : null;\n if (!field) {\n return;\n }\n let sum = 0;\n let hasValue = false;\n content.forEach((row) => {\n const raw = row ? row[field] : null;\n if (raw == null || raw === \"\") {\n return;\n }\n const num = Number(raw);\n if (!isNaN(num)) {\n sum += num;\n hasValue = true;\n }\n });\n if (!hasValue) {\n return;\n }\n value = sum;\n }\n const colAtIndex = visibleCols[item.insertIndex - 1];\n this.tableTotalOptionList[item.insertIndex - 1] = {\n value,\n align: item.align || (colAtIndex && colAtIndex.align) || \"left\",\n showDecimal: item.showDecimal || false,\n preserveNumber:\n item.preserveNumber != null ? item.preserveNumber : 2,\n isHide: item.isHide || false,\n };\n });\n }\n\n private getTableTotalCellMeta(col: HdTableColumn, colIndex: number): any {\n if (!col || !this.tableTotalOptionList || !this.tableTotalOptionList.length) {\n return null;\n }\n let visibleIndex = -1;\n for (let i = 0; i <= colIndex; i++) {\n const c = this.tableCols[i];\n if (c && c.isShow !== false) {\n visibleIndex++;\n }\n }\n if (visibleIndex < 0 || visibleIndex >= this.tableTotalOptionList.length) {\n return null;\n }\n const meta = this.tableTotalOptionList[visibleIndex];\n return meta && typeof meta === \"object\" ? meta : null;\n }\n\n /** 合计单元格展示文案(对齐 detail-lines 小数规则) */\n getTableTotalCellValue(col: HdTableColumn, colIndex: number): any {\n const meta = this.getTableTotalCellMeta(col, colIndex);\n if (!meta || meta.isHide) {\n return \"\";\n }\n const value = meta.value;\n if (!(value || value === 0)) {\n return \"\";\n }\n const preserve =\n meta.preserveNumber != null ? Number(meta.preserveNumber) : 2;\n if (value % 1 === 0 && !meta.showDecimal) {\n return value;\n }\n const factor = Math.pow(10, preserve);\n return (Math.round(Number(value) * factor) / factor).toFixed(preserve);\n }\n\n getTableTotalCellAlign(col: HdTableColumn, colIndex: number): string {\n const meta = this.getTableTotalCellMeta(col, colIndex);\n const align =\n (meta && meta.align) || (col && col.align) || \"left\";\n if (align === \"right\" || align === \"center\" || align === \"left\") {\n return align;\n }\n return \"left\";\n }\n\n /** 底部「共 n 条」:非分页/前端分页用 content.length,服务端分页用 totalElements */\n getTableTotalCount(): number {\n if (!this.tableData) {\n return 0;\n }\n if (!this.pagination || this.frontPagination) {\n return this.tableData.content ? this.tableData.content.length : 0;\n }\n return this.tableData.totalElements != null\n ? this.tableData.totalElements\n : 0;\n }\n\n resetStatus() {\n this.isAllDisplayDataChecked = false;\n this.isIndeterminate = false;\n // 先显式置 false,避免 nz-checkbox 内部状态与 mapOfCheckedId 不同步(虚拟滚动复用行时常见)\n Object.keys(this.mapOfCheckList).forEach((key) => {\n this.mapOfCheckedId[key] = false;\n });\n this.listOfDisplayData.forEach((item) => {\n const key = item[this.selectField];\n if (key != null) {\n this.mapOfCheckedId[key] = false;\n }\n });\n this.mapOfCheckedId = {};\n this.mapOfCheckList = {};\n this.selectEvent.emit([]);\n this.cdr.markForCheck();\n }\n\n refreshStatus(event: boolean = false, data: any = null): void {\n if (data) {\n // 禁用行不允许勾选;取消勾选仍允许(例如数据变更前已勾选)\n if (event && this.isSelectDisabled(data)) {\n this.cdr.markForCheck();\n return;\n }\n this.mapOfCheckedId[data[this.selectField]] = event;\n if (event) {\n !this.mapOfCheckList[data[this.selectField]] &&\n (this.mapOfCheckList[data[this.selectField]] = data);\n } else {\n this.mapOfCheckList[data[this.selectField]] &&\n delete this.mapOfCheckList[data[this.selectField]];\n }\n }\n const selectableList = this.listOfDisplayData.filter(\n (item) => !this.isSelectDisabled(item),\n );\n this.isAllDisplayDataChecked =\n selectableList.length > 0 &&\n selectableList.every((item) => this.mapOfCheckedId[item[this.selectField]]);\n this.isIndeterminate =\n selectableList.some(\n (item) => this.mapOfCheckedId[item[this.selectField]],\n ) && !this.isAllDisplayDataChecked;\n // 触发select事件\n if (this.selectEvent) {\n const selectedList: Array<any> = Object.values(this.mapOfCheckList);\n this.selectEvent.emit(selectedList);\n }\n // 如果数据为空,则清空勾选标识\n if (this.tableData.content.length === 0) {\n this.isAllDisplayDataChecked = false;\n }\n this.cdr.markForCheck();\n }\n\n checkAll(value: boolean): void {\n this.listOfDisplayData.forEach((item) => {\n // 全选/取消全选均跳过禁用行(禁用行保持原勾选状态)\n if (this.isSelectDisabled(item)) {\n return;\n }\n if (value) {\n !this.mapOfCheckList[item[this.selectField]] &&\n (this.mapOfCheckList[item[this.selectField]] = item);\n } else {\n this.mapOfCheckList[item[this.selectField]] &&\n delete this.mapOfCheckList[item[this.selectField]];\n }\n\n this.mapOfCheckedId[item[this.selectField]] = value;\n });\n this.refreshStatus();\n this.cdr.markForCheck();\n }\n\n /** 当前行是否禁用勾选 */\n isSelectDisabled(data: any): boolean {\n return !!(\n this.selectDisabledField &&\n data &&\n data[this.selectDisabledField] === true\n );\n }\n\n /** 当前行是否失效 */\n isInvalidRow(data: any): boolean {\n return !!(\n this.rowInvalidField &&\n data &&\n data[this.rowInvalidField] === true\n );\n }\n\n /**\n * 列文字颜色:color 为函数时按行计算(用于某一行某一列标红),否则整列同色。\n */\n resolveCellColor(col: HdTableColumn, data: any): string {\n if (!col || col.color == null || col.color === \"\") {\n return null;\n }\n if (typeof col.color === \"function\") {\n const value = col.color(data);\n return value || null;\n }\n return col.color;\n }\n\n /** 可点击单元格颜色:空值固定灰,否则按列 color */\n getLinkCellColor(col: HdTableColumn, data: any, isEmpty: boolean): string {\n if (isEmpty) {\n return \"#2A3634\";\n }\n return this.resolveCellColor(col, data);\n }\n\n /** 普通文本单元格颜色:失效行统一灰,否则用列配置 color */\n getPlainCellColor(col: HdTableColumn, data: any): string {\n if (this.isInvalidRow(data)) {\n return \"#868A9C\";\n }\n return this.resolveCellColor(col, data);\n }\n\n judgeColEmpty(str: any) {\n if (str || str === 0) {\n return str;\n } else {\n return \"<空>\";\n }\n }\n\n getStateField(col: HdTableColumn): string {\n if (col.isState) {\n return col.name as string;\n }\n return col.stateField || \"state\";\n }\n\n /** 字段值后是否展示竖线行号 */\n hasRowNo(col: HdTableColumn): boolean {\n return !!(col && (col.rowNo === true || (typeof col.rowNo === \"string\" && col.rowNo)));\n }\n\n /**\n * 行号文案。rowNo 为字段名时取行数据;为 true 时按当前页序号(跨页连续,从 1 开始)。\n */\n getRowNoText(col: HdTableColumn, data: any, index: number): string {\n if (!this.hasRowNo(col)) {\n return \"\";\n }\n if (typeof col.rowNo === \"string\") {\n const value = data ? data[col.rowNo] : null;\n if (value == null || value === \"\") {\n return \"\";\n }\n return String(value);\n }\n const page = Number(this.tablePageIndex) > 0 ? Number(this.tablePageIndex) : 1;\n const size = Number(this.tablePageSize) > 0 ? Number(this.tablePageSize) : 0;\n const rowIndex = Number(index) >= 0 ? Number(index) : 0;\n return String((page - 1) * size + rowIndex + 1);\n }\n\n /** 表头「配送单号 | 行」拆成短竖线,避免字符 | 拉满行高 */\n getTitleParts(col: HdTableColumn): Array<string> {\n if (!this.hasRowNo(col) || !col || !col.title || String(col.title).indexOf(\"|\") < 0) {\n return null;\n }\n const raw = String(col.title).split(\"|\");\n if (raw.length < 2) {\n return null;\n }\n return [raw[0].trim(), raw.slice(1).join(\"|\").trim()];\n }\n\n /** 是否显示编辑笔图标(有 editType 时走行内控件,不再显示笔) */\n isEditable(col: HdTableColumn, data: any): boolean {\n if (!col || this.hasInlineEdit(col)) {\n return false;\n }\n if (col.editable == null || col.editable === false) {\n return false;\n }\n if (typeof col.editable === \"function\") {\n return !!col.editable(data);\n }\n return !!col.editable;\n }\n\n /** 点击编辑笔,回调父组件传入的 edit */\n onEditClick(event: Event, col: HdTableColumn, data: any): void {\n if (event) {\n event.preventDefault();\n event.stopPropagation();\n }\n this.triggerEvent(col.edit || null, data);\n }\n\n /** 列是否配置了可用的行内编辑(name 必须是 string) */\n hasInlineEdit(col: HdTableColumn): boolean {\n if (!col || !col.editType) {\n return false;\n }\n if (typeof col.name !== \"string\" || !col.name) {\n console.warn(\n \"[hd-table] editType 要求 name 为 string,列「\" +\n (col.title || \"\") +\n \"」已回退只读\",\n );\n return false;\n }\n return true;\n }\n\n isEditDisabled(col: HdTableColumn, data: any): boolean {\n if (!col || col.editDisabled == null || col.editDisabled === false) {\n return false;\n }\n if (typeof col.editDisabled === \"function\") {\n return !!col.editDisabled(data);\n }\n return !!col.editDisabled;\n }\n\n getSelectList(col: HdTableColumn, data: any): Array<any> {\n if (!col || !col.selectOption) {\n return [];\n }\n const opt = col.selectOption;\n if (opt.selectListName && data) {\n const list = data[opt.selectListName];\n return Array.isArray(list) ? list : [];\n }\n return Array.isArray(opt.selectList) ? opt.selectList : [];\n }\n\n getSelectOptionLabel(col: HdTableColumn, item: any): string {\n if (!col || !col.selectOption || !item) {\n return \"\";\n }\n const opt = col.selectOption;\n const value = item[opt.value];\n const label = item[opt.label];\n if (opt.showLabelAndValue || opt.hdShowItemCode) {\n return `[${value == null ? \"\" : value}]${label == null ? \"\" : label}`;\n }\n return label == null ? \"\" : String(label);\n }\n\n getInputNumberProp(\n col: HdTableColumn,\n key: \"min\" | \"max\" | \"step\" | \"precision\",\n fallback: number,\n ): number {\n if (!col || !col.inputNumber) {\n return fallback;\n }\n const val = col.inputNumber[key];\n return val != null ? Number(val) : fallback;\n }\n\n /** Input / InputNumber 变更:先记旧值再写回并通知父组件 */\n onCellChange(col: HdTableColumn, data: any, value: any): void {\n if (!this.hasInlineEdit(col) || !data) {\n return;\n }\n const name = col.name as string;\n const previousValue = data[name];\n data[name] = value;\n this.cellChange.emit({\n line: data,\n col,\n name,\n value,\n previousValue,\n });\n this.cdr.markForCheck();\n }\n\n /** Select 变更:双写 value + label,并带 previous* / option */\n onSelectChange(col: HdTableColumn, data: any, value: any): void {\n if (!this.hasInlineEdit(col) || !data) {\n return;\n }\n const name = col.name as string;\n const opt = col.selectOption;\n const labelField = opt && opt.label ? opt.label : null;\n const previousValue = data[name];\n const previousLabel = labelField ? data[labelField] : undefined;\n const list = this.getSelectList(col, data);\n const previousOption =\n previousValue == null || !opt\n ? null\n : list.find((item) => item && item[opt.value] === previousValue) ||\n null;\n const option =\n value == null || !opt\n ? null\n : list.find((item) => item && item[opt.value] === value) || null;\n\n data[name] = value;\n let label: any = undefined;\n if (labelField) {\n label = option ? option[opt.label] : null;\n data[labelField] = label;\n }\n\n this.cellChange.emit({\n line: data,\n col,\n name,\n value,\n previousValue,\n label,\n previousLabel,\n option,\n previousOption,\n });\n this.cdr.markForCheck();\n }\n}\n","import { CommonModule } from '@angular/common';\nimport { NgModule, NO_ERRORS_SCHEMA } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { NgZorroAntdModule } from 'ng-zorro-antd';\nimport { NzDropDownModule } from 'ng-zorro-antd/dropdown';\nimport { NzIconModule } from 'ng-zorro-antd/icon';\nimport { NzPopconfirmModule } from 'ng-zorro-antd/popconfirm';\nimport { NzResizableModule } from 'ng-zorro-antd/resizable';\nimport { NzTableModule } from 'ng-zorro-antd/table';\nimport { NzToolTipModule } from 'ng-zorro-antd/tooltip';\nimport { NzTreeModule } from 'ng-zorro-antd/tree';\nimport { HdButtonGroupModule } from '../hd-button-group/hd-button-group.module';\nimport { HdButtonModule } from '../hd-button/hd-button.module';\nimport { HdSpaceModule } from '../hd-space/hd-space.module';\nimport { HdStatusModule } from '../hd-status/hd-status.module';\nimport { CommonSessionService } from '../service/common-session.service';\nimport { HdTableCellPipe } from './hd-table-cell.pipe';\nimport { HdTableComponent } from './hd-table.component';\n@NgModule({\n imports: [\n CommonModule,\n FormsModule,\n NgZorroAntdModule,\n NzTableModule,\n HdSpaceModule,\n HdStatusModule,\n HdButtonModule,\n HdButtonGroupModule,\n NzToolTipModule,\n NzPopconfirmModule,\n NzResizableModule,\n NzDropDownModule,\n NzTreeModule,\n NzIconModule\n ],\n declarations: [HdTableComponent, HdTableCellPipe],\n providers: [CommonSessionService],\n exports: [HdTableComponent],\n schemas: [NO_ERRORS_SCHEMA]\n})\nexport class HdTableModule { }\n","import { Component, EventEmitter, Input, Output } from \"@angular/core\";\nimport { InputBoolean } from \"ng-zorro-antd\";\n\n@Component({\n selector: \"hd-tip\",\n templateUrl: \"./hd-tip.component.html\",\n styleUrls: [\"./hd-tip.component.less\"],\n})\nexport class HdTipComponent {\n @Input() showIcon: boolean = true;\n @Input() fontSize: number;\n @Input() title: string;\n /** 是否在右侧展示展开/收起,默认关闭 */\n @Input() @InputBoolean() showCollapse: boolean = false;\n /** 当前是否展开(父组件可用 [(expanded)] 控制其它区块显隐) */\n @Input() @InputBoolean() expanded: boolean = true;\n @Output() expandedChange = new EventEmitter<boolean>();\n\n /** 展开(供父组件 ViewChild 调用) */\n expand(): void {\n this.setExpanded(true);\n }\n\n /** 收起(供父组件 ViewChild 调用) */\n collapse(): void {\n this.setExpanded(false);\n }\n\n /** 切换展开/收起(供父组件 ViewChild 或点击触发) */\n toggle(): void {\n this.setExpanded(!this.expanded);\n }\n\n private setExpanded(value: boolean): void {\n if (this.expanded === value) {\n return;\n }\n this.expanded = value;\n this.expandedChange.emit(this.expanded);\n }\n}\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { HdTipComponent } from './hd-tip.component';\nimport {NgZorroAntdModule} from 'ng-zorro-antd';\n\n@NgModule({\n imports: [\n CommonModule,\n NgZorroAntdModule\n ],\n exports: [HdTipComponent],\n declarations: [HdTipComponent]\n})\nexport class HdTipModule { }\n","import {\n Component,\n EventEmitter,\n Input,\n OnInit,\n Output,\n} from \"@angular/core\";\nimport { HdAccessoryFile, HdAccessoryGroup } from \"./hd-accessory-list.service\";\n\n@Component({\n selector: \"hd-accessory-list\",\n templateUrl: \"./hd-accessory-list.component.html\",\n styleUrls: [\"./hd-accessory-list.component.less\"],\n})\nexport class HdAccessoryListComponent implements OnInit {\n /** 分组列表:每项含 name + accessoryList */\n @Input() groups: Array<HdAccessoryGroup> = [];\n /** 分组标签后是否自动加冒号,默认 true */\n @Input() labelColon: boolean = true;\n /** 点击附件时是否默认 window.open 下载/查看,默认 true */\n @Input() autoOpen: boolean = true;\n\n /** 点击附件回调(在 autoOpen 之前触发) */\n @Output() fileClick = new EventEmitter<{\n group: HdAccessoryGroup;\n file: HdAccessoryFile;\n path: string;\n }>();\n\n constructor() {}\n\n ngOnInit() {}\n\n getFileName(file: HdAccessoryFile): string {\n if (!file || file.name == null) {\n return \"\";\n }\n return String(file.name);\n }\n\n getFilePath(file: HdAccessoryFile): string {\n if (!file || file.path == null) {\n return \"\";\n }\n return String(file.path);\n }\n\n getFileSizeText(file: HdAccessoryFile): string {\n if (!file) {\n return \"\";\n }\n const raw = file.size;\n if (raw == null || raw === \"\") {\n return \"\";\n }\n if (typeof raw === \"string\") {\n return raw;\n }\n const bytes = Number(raw);\n if (isNaN(bytes) || bytes < 0) {\n return \"\";\n }\n if (bytes < 1024) {\n return bytes + \" B\";\n }\n if (bytes < 1024 * 1024) {\n return (bytes / 1024).toFixed(bytes < 10 * 1024 ? 1 : 0) + \" KB\";\n }\n return (\n (bytes / (1024 * 1024)).toFixed(bytes < 10 * 1024 * 1024 ? 1 : 0) + \" MB\"\n );\n }\n\n getLabelText(group: HdAccessoryGroup): string {\n const name = group && group.name != null ? String(group.name) : \"\";\n if (!name) {\n return \"\";\n }\n if (!this.labelColon) {\n return name;\n }\n return /[::]$/.test(name) ? name : name + \":\";\n }\n\n onFileClick(\n group: HdAccessoryGroup,\n file: HdAccessoryFile,\n event: Event,\n ): void {\n if (event) {\n event.preventDefault();\n }\n const path = this.getFilePath(file);\n this.fileClick.emit({ group, file, path });\n if (this.autoOpen && path) {\n window.open(path, \"_blank\");\n }\n }\n\n // 用箭头函数:ngFor 的 trackBy 调用时不会绑定组件 this\n trackByGroup = (index: number, group: HdAccessoryGroup): any => {\n return (group && group.name) || index;\n };\n\n trackByFile = (index: number, file: HdAccessoryFile): any => {\n return this.getFilePath(file) || this.getFileName(file) || index;\n };\n}\n","import { NgModule } from \"@angular/core\";\nimport { CommonModule } from \"@angular/common\";\nimport { NgZorroAntdModule } from \"ng-zorro-antd\";\nimport { HdAccessoryListComponent } from \"./hd-accessory-list.component\";\n\n@NgModule({\n imports: [CommonModule, NgZorroAntdModule],\n declarations: [HdAccessoryListComponent],\n exports: [HdAccessoryListComponent],\n})\nexport class HdAccessoryListModule {}\n","import { Injectable, Optional } from \"@angular/core\";\nimport { NavigationStart, Router } from \"@angular/router\";\nimport { filter } from \"rxjs/operators\";\n\n/**\n * 全局清理 ng-zorro tooltip 残留 overlay。\n * 典型场景:hover 出 tooltip 后立刻点击跳转/打开详情,CDK overlay 未销毁,飘到下一页。\n *\n * 引入 FantasyNgzorroModule 后自动生效,也可手动注入调用 clearStuckTooltips()。\n */\n@Injectable({ providedIn: \"root\" })\nexport class HdOverlayCleanupService {\n private started = false;\n\n constructor(@Optional() private router: Router) {\n this.start();\n }\n\n /** 启动全局监听(幂等) */\n start(): void {\n if (this.started || typeof document === \"undefined\") {\n return;\n }\n this.started = true;\n\n // 任意按下即清:覆盖跳路由、开抽屉/弹窗等不走 Navigation 的场景\n document.addEventListener(\n \"mousedown\",\n () => this.clearStuckTooltips(),\n true,\n );\n\n if (this.router) {\n this.router.events\n .pipe(filter((e) => e instanceof NavigationStart))\n .subscribe(() => this.clearStuckTooltips());\n }\n }\n\n /** 清理残留在 body 上的 ant-tooltip overlay */\n clearStuckTooltips(): void {\n if (typeof document === \"undefined\") {\n return;\n }\n const tooltips = document.querySelectorAll(\n \".cdk-overlay-container .ant-tooltip\",\n );\n tooltips.forEach((el) => {\n const pane = el.closest(\".cdk-overlay-pane\") as HTMLElement | null;\n if (pane && pane.parentNode) {\n pane.parentNode.removeChild(pane);\n }\n });\n }\n}\n","import { HdButtonGroupModule } from './hd-button-group/hd-button-group.module';\nimport { HdButtonModule } from './hd-button/hd-button.module';\n\nimport { HdDetailFormModule } from './hd-detail-form/hd-detail-form.module';\nimport { HdDetailLinesModule } from './hd-detail-lines/hd-detail-lines.module';\nimport { HdDetailLinesPageModule } from './hd-detail-lines-page/hd-detail-lines-page.module';\nimport { HdDetailTipModule } from './hd-detail-tip/hd-detail-tip.module';\n\nimport { HdFilterModule } from './hd-filter/hd-filter.module';\nimport { HdFormLinesModule } from './hd-form-lines/hd-form-lines.module';\nimport { HdFormModule } from './hd-form/hd-form.module';\n\nimport { NgModule } from '@angular/core';\nimport { HdCurrentTableModule } from './hd-current-table/hd-current-table.module';\nimport { HdLogModule } from './hd-log/hd-log.module';\nimport { HdPopconfirmModule } from './hd-popconfirm/hd-popconfirm.module';\nimport { HdSpaceModule } from './hd-space/hd-space.module';\nimport { HdStatusModule } from './hd-status/hd-status.module';\nimport { HdTableModule } from './hd-table/hd-table.module';\nimport { HdTipModule } from './hd-tip/hd-tip.module';\nimport { HdAccessoryListModule } from './hd-accessory-list/hd-accessory-list.module';\nimport { HdOverlayCleanupService } from './service/hd-overlay-cleanup.service';\n@NgModule({\n exports: [\n HdButtonModule,\n HdButtonGroupModule,\n\n HdDetailFormModule,\n HdDetailLinesModule,\n HdDetailLinesPageModule,\n HdDetailTipModule,\n\n HdFilterModule,\n HdFormModule,\n HdFormLinesModule,\n\n HdSpaceModule,\n HdStatusModule,\n HdCurrentTableModule,\n HdTableModule,\n HdTipModule,\n HdAccessoryListModule,\n HdPopconfirmModule,\n HdLogModule\n ]\n})\n\nexport class HdComponentModule {\n // 单独引入 HdComponentModule 时也启动全局 tooltip 清理\n constructor(_overlayCleanup: HdOverlayCleanupService) {}\n}\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { HdComponentModule } from \"./hd-component.module\";\nimport { HdLogComponent } from './hd-log/hd-log.component';\nimport { HdOverlayCleanupService } from './service/hd-overlay-cleanup.service';\n@NgModule({\n imports: [CommonModule],\n exports: [HdComponentModule],\n providers: [],\n entryComponents: [HdLogComponent]\n})\nexport class FantasyNgzorroModule {\n // 注入以启动全局 tooltip overlay 清理(providedIn: root,幂等)\n constructor(_overlayCleanup: HdOverlayCleanupService) {}\n}\n","/** 单个附件 */\nexport class HdAccessoryFile {\n /** 展示文件名 */\n name?: string;\n /** 完整下载/查看地址(由父组件直接传入) */\n path?: string;\n /** 文件大小(可缺省;有值才展示):数字按字节格式化,字符串原样展示 */\n size?: number | string;\n}\n\n/** 附件分组:标签 + 附件列表 */\nexport class HdAccessoryGroup {\n /** 分组标签,如「营业执照扫描件」 */\n name: string;\n /** 该分组下的附件 */\n accessoryList: Array<HdAccessoryFile> = [];\n}\n","import { HdOption } from \"../model/common-type\";\n\n// 表格行\nexport class TableColumn {\n label: string; // 文本\n name: string; // 字段名称\n value?: string | boolean | Array<string | Date> | null = null; // 值 不传默认为null\n selectList?: Array<HdOption>; // 控件为Select时,选项列表\n // 组件内部成员\n show?: boolean;\n}\n\n//\nexport class TableTotalOption {\n columnNumber: number; // 总列数\n insertIndex: number; // 插入下标\n insertName: string; // 插入字段\n}\n","export class TotalOption {\n insertIndex: number; // 插入下标\n /** 合计值;hd-table 可不传,按 insertIndex 对应列对 content 自动求和 */\n insertValue?: any;\n align?: string; // 靠左还是靠右\n showDecimal?: boolean; // 是否显示小数位\n preserveNumber?: number; // 保留小数位数,不传默认 2\n isHide?: boolean; // 是否隐藏, 这里只针对列会同步消失的场景\n}\n","export const StaticConst = {\n MaxPageSize: 99999999\n};\n","import { FormItem } from './hd-form/hd-form.service';\nimport { round } from 'lodash';\n// 工具类\nexport const Utils = {\n /**\n * 填充select控件选项\n * @param formList 入参数组 Array<any>\n * @param name 需要填充options的属性名称\n * @param options 选项列表\n */\n fillSelectOption(formList: Array<any>, name: string, options: Array<any>) {\n const returnData = formList;\n if (!returnData || !returnData.length) {\n return returnData;\n }\n const length = formList.length;\n for (let i = 0; i < length; i++) {\n if (returnData[i].name === name) {\n returnData[i].selectOption.selectList = options;\n }\n }\n return returnData;\n },\n\n /**\n * 填充FormItem数组:针对入参list的每一个FormItem,判断obj中是否有对应的name字段,如果有,则填充value。\n * @param list 入参数组 Array<FormItem>\n * @param obj 需要填充到list的属性\n */\n fillArrayFormItem(list: Array<FormItem>, obj: Object) {\n const returnData = [];\n if (!list || !list.length) {\n return returnData;\n }\n const length = list.length;\n for (let i = 0; i < length; i++) {\n if (obj[list[i].name]) {\n list[i].value = obj[list[i].name];\n }\n }\n return list;\n },\n\n /**\n * 数组转换成选择器的选项数组\n * @param list 入参数组 字符串数组或对象数组\n * @param option 转换选项\n * 注:list为字符串数组,option不需要传,按照标准的label、value转换\n */\n arrayToSelectOptionList(list: Array<any>, option?: {\n value: string,\n label: string,\n valueTip?: string,\n labelTip?: string\n }) {\n const returnData = [];\n if (!list || !list.length) {\n return returnData;\n }\n if (option) {\n if (option.labelTip && option.valueTip) {\n list.forEach((item) => {\n const returnItem: any = item;\n returnItem.label = item[option.label];\n returnItem.value = item[option.value];\n if (option.valueTip) {\n returnItem[option.valueTip] = item[option.value];\n }\n if (option.labelTip) {\n returnItem[option.labelTip] = item[option.label];\n }\n returnData.push(returnItem);\n });\n } else {\n list.forEach((item) => {\n const returnItem: any = item;\n returnItem.label = item[option.label];\n returnItem.value = item[option.value];\n returnData.push(returnItem);\n });\n }\n } else {\n list.forEach((item) => {\n const returnItem: any = {};\n returnItem.label = item;\n returnItem.value = item;\n returnData.push(returnItem);\n });\n }\n return returnData;\n },\n\n /**\n * 求和\n * @param nums 数组\n * @param precision 精度\n */\n add(nums: number[], precision: number = 2) {\n if (!Array.isArray(nums)) {\n throw new Error('参数必须是数组');\n }\n if (nums.some(num => typeof num !== 'number')) {\n throw new Error('数组元素必须是数字');\n }\n let result = 0;\n for (const num of nums) {\n result += num;\n }\n return round(result, precision);\n },\n\n /**\n * 减法\n * @param nums 数组\n * @param precision 精度\n */\n subtract(nums: number[], precision: number = 2) {\n if (!Array.isArray(nums)) {\n throw new Error('参数必须是数组');\n }\n if (nums.some(num => typeof num !== 'number')) {\n throw new Error('数组元素必须是数字');\n }\n if (nums.length < 2) {\n throw new Error('减法入参数量至少要2个!');\n }\n let result = nums.shift();\n for (const num of nums) {\n result -= num;\n }\n return round(result, precision);\n },\n\n /**\n * 乘法\n * @param nums 数组\n * @param precision 精度\n */\n multiply(nums: number[], precision: number = 2) {\n if (!Array.isArray(nums)) {\n throw new Error('参数必须是数组');\n }\n if (nums.some(num => typeof num !== 'number')) {\n throw new Error('数组元素必须是数字');\n }\n let result = 1;\n for (const num of nums) {\n result = result * num;\n }\n return round(result, precision);\n },\n\n /**\n * 除法\n * @param nums 数组\n * @param precision 精度\n */\n divide(nums: number[], precision: number = 2) {\n if (!Array.isArray(nums)) {\n throw new Error('参数必须是数组');\n }\n if (nums.some(num => typeof num !== 'number')) {\n throw new Error('数组元素必须是数字');\n }\n if (nums.length < 2) {\n throw new Error('除法入参数量至少要2个!');\n }\n let result = nums.shift();\n for (const num of nums) {\n if (num === 0) {\n throw new Error('除数不能为0!');\n }\n result = result / num;\n }\n return round(result, precision);\n }\n};\n"],"names":["tslib_1.__decorate","tslib_1.__values","InputBoolean","tslib_1.__spread","localforage.createInstance","localforage.INDEXEDDB"],"mappings":"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"}