fantasy-ngzorro 2.2.36 → 2.2.38

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.
@@ -1502,7 +1502,8 @@
1502
1502
  return getTableViewportWidth(nzTable, hostClass);
1503
1503
  }
1504
1504
  /**
1505
- * 无数据或列宽未超出容器时不启用横向 scroll(fluid:表宽 100%,勾选/序号列由 CSS 锁宽)
1505
+ * 无数据或列宽未超出容器时不启用横向 scroll(表宽 100%、table-layout: auto)。
1506
+ * auto 布局下单元格 max-width 不生效,固定宽列会被均摊撑开;需要锁宽的场景见 hd-table 的横向布局。
1506
1507
  * @param {?} nzTable
1507
1508
  * @param {?} hasData
1508
1509
  * @param {?=} colWidth
@@ -5144,29 +5145,39 @@
5144
5145
  this.validateFilterForm.patchValue(patch);
5145
5146
  };
5146
5147
  /**
5147
- * 多选 / 日期范围空态用 [],避免 FormControl 为 null 时 nz-select multiple 不显示 placeholder。
5148
+ * 多选空态用 [],避免 FormControl 为 null 时 nz-select multiple 不显示 placeholder。
5149
+ * DateRange 必须保持 null(或把历史空数组归一为 null):业务侧大量用 !value 判断,
5150
+ * 若规范成 [] 会因 truthy 走进 moment(value[0]),被解析成「今天」。
5148
5151
  */
5149
5152
  /**
5150
- * 多选 / 日期范围空态用 [],避免 FormControl 为 null 时 nz-select multiple 不显示 placeholder。
5153
+ * 多选空态用 [],避免 FormControl 为 null 时 nz-select multiple 不显示 placeholder。
5154
+ * DateRange 必须保持 null(或把历史空数组归一为 null):业务侧大量用 !value 判断,
5155
+ * 若规范成 [] 会因 truthy 走进 moment(value[0]),被解析成「今天」。
5151
5156
  * @private
5152
5157
  * @param {?} filter
5153
5158
  * @param {?} value
5154
5159
  * @return {?}
5155
5160
  */
5156
5161
  HdFilterComponent.prototype.normalizeFilterControlValue = /**
5157
- * 多选 / 日期范围空态用 [],避免 FormControl 为 null 时 nz-select multiple 不显示 placeholder。
5162
+ * 多选空态用 [],避免 FormControl 为 null 时 nz-select multiple 不显示 placeholder。
5163
+ * DateRange 必须保持 null(或把历史空数组归一为 null):业务侧大量用 !value 判断,
5164
+ * 若规范成 [] 会因 truthy 走进 moment(value[0]),被解析成「今天」。
5158
5165
  * @private
5159
5166
  * @param {?} filter
5160
5167
  * @param {?} value
5161
5168
  * @return {?}
5162
5169
  */
5163
5170
  function (filter, value) {
5164
- if (filter &&
5165
- (filter.type === FilterListType.MultipleSelect ||
5166
- filter.type === FilterListType.DateRange) &&
5167
- value == null) {
5171
+ if (!filter) {
5172
+ return value;
5173
+ }
5174
+ if (filter.type === FilterListType.MultipleSelect && value == null) {
5168
5175
  return [];
5169
5176
  }
5177
+ if (filter.type === FilterListType.DateRange &&
5178
+ (value == null || (Array.isArray(value) && value.length === 0))) {
5179
+ return null;
5180
+ }
5170
5181
  return value;
5171
5182
  };
5172
5183
  /**
@@ -5188,6 +5199,9 @@
5188
5199
  }
5189
5200
  if (filter.type === FilterListType.DateRange) {
5190
5201
  if (Array.isArray(value)) {
5202
+ if (value.length === 0) {
5203
+ return null;
5204
+ }
5191
5205
  return value.map((/**
5192
5206
  * @param {?} v
5193
5207
  * @return {?}
@@ -10938,6 +10952,67 @@
10938
10952
  * @fileoverview added by tsickle
10939
10953
  * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
10940
10954
  */
10955
+ /**
10956
+ * 勾选列宽(px),与模板 nzWidth、less 兜底保持一致
10957
+ * @type {?}
10958
+ */
10959
+ var SELECT_COL_WIDTH = 40;
10960
+ /**
10961
+ * 横向布局计算结果
10962
+ * @record
10963
+ */
10964
+ function HdTableHorizontalLayout() { }
10965
+ if (false) {
10966
+ /**
10967
+ * 传给 nzScroll.x;只有列宽总和 <= 0 时为 null
10968
+ * @type {?}
10969
+ */
10970
+ HdTableHorizontalLayout.prototype.scrollX;
10971
+ /**
10972
+ * 补到最后一列业务列上的宽度,列多时为 0
10973
+ * @type {?}
10974
+ */
10975
+ HdTableHorizontalLayout.prototype.fluidExtra;
10976
+ /**
10977
+ * 实际渲染总宽 = 声明总宽 + fluidExtra
10978
+ * @type {?}
10979
+ */
10980
+ HdTableHorizontalLayout.prototype.displayTotal;
10981
+ /**
10982
+ * 列少、靠补宽吃满容器,不需要真正横滚
10983
+ * @type {?}
10984
+ */
10985
+ HdTableHorizontalLayout.prototype.isFluid;
10986
+ }
10987
+ /**
10988
+ * 列多(或量不到容器宽):scroll.x = 声明总宽,正常横滚
10989
+ * @param {?} declaredWidth
10990
+ * @return {?}
10991
+ */
10992
+ function fixedLayout(declaredWidth) {
10993
+ return {
10994
+ scrollX: Math.ceil(declaredWidth) + "px",
10995
+ fluidExtra: 0,
10996
+ displayTotal: declaredWidth,
10997
+ isFluid: false,
10998
+ };
10999
+ }
11000
+ /**
11001
+ * 列少:scroll.x = 容器宽,差额补到最后一列业务列
11002
+ * @param {?} containerWidth
11003
+ * @param {?} declaredWidth
11004
+ * @return {?}
11005
+ */
11006
+ function fluidLayout(containerWidth, declaredWidth) {
11007
+ /** @type {?} */
11008
+ var fluidExtra = Math.max(0, containerWidth - declaredWidth);
11009
+ return {
11010
+ scrollX: containerWidth + "px",
11011
+ fluidExtra: fluidExtra,
11012
+ displayTotal: declaredWidth + fluidExtra,
11013
+ isFluid: true,
11014
+ };
11015
+ }
10941
11016
  var HdTableComponent = /** @class */ (function () {
10942
11017
  function HdTableComponent(hostEl, cdr, commonSessionService) {
10943
11018
  var _this = this;
@@ -11023,21 +11098,19 @@
11023
11098
  */
11024
11099
  this.virtualScrollActive = null;
11025
11100
  /**
11026
- * 列宽合计(含勾选/序号 + fluid 补宽),footer 表宽与横向 scroll 共用
11101
+ * 实际渲染列宽合计(含勾选/序号 + 补宽),合计 footer 表宽用
11027
11102
  */
11028
11103
  this.tableColWidthTotal = 0;
11029
11104
  /**
11030
- * fluid:声明列总宽 < 容器时,把差额补到最后一列业务列(不改缓存宽),
11031
- * 并设 scroll.x = 容器宽,避免表宽 100% 均摊撑开勾选列;拖拽改宽仍写 col.width。
11105
+ * 补到 fluidExtraTargetCol 上的宽度;只影响展示,不写回 col.width(列宽缓存、拖拽仍用声明宽)
11032
11106
  */
11033
11107
  this.fluidExtraWidth = 0;
11034
11108
  /**
11035
- * 列总宽未超出容器(fluid 补宽吃满):不需要真正横滚,
11036
- * 用于关掉 ng-zorro fixed-header 带来的常驻 X 轴滚动条。
11109
+ * 列少、靠补宽吃满容器:模板据此加 hd-table--fluid-x,隐藏 fixed-header 常驻的横滚槽
11037
11110
  */
11038
11111
  this.fluidHorizontal = false;
11039
11112
  /**
11040
- * fluid 补宽目标列缓存,避免模板每格 CD 时反复扫 tableCols
11113
+ * 接收补宽的列,缓存起来避免模板每个单元格都扫一遍 tableCols
11041
11114
  */
11042
11115
  this.fluidExtraTargetCol = null;
11043
11116
  /**
@@ -11261,10 +11334,8 @@
11261
11334
  changes["tableData"]["currentValue"]["pageNumber"] !==
11262
11335
  changes["tableData"]["previousValue"]["pageNumber"]) {
11263
11336
  this.pendingResetScrollTop = true;
11264
- // pageSize/pageNumber 变化也要重算 scroll / fluid。
11265
- // 业务常把 Page.pageSize 写成 content.length(如收款编辑 toPage),
11266
- // virtualScroll=false 时若这里跳过,空表初始化后的 fluid 不会补上,勾选列被撑开。
11267
- // applyTableScrollMode(false) 在模式未变时只 dealScroll,不会强制重建清排序态。
11337
+ // 业务可能把 Page.pageSize 写成 content.length,换数据时就会走到这里,
11338
+ // 必须重算横向布局。滚动模式不变时不会重建,排序态不会被清掉。
11268
11339
  this.applyTableScrollMode(false);
11269
11340
  // 翻页/改 pageSize:主动多次复位,覆盖 CDK 异步渲染时序
11270
11341
  this.scheduleResetTableBodyScrollTop();
@@ -11276,9 +11347,7 @@
11276
11347
  }
11277
11348
  if (changes["tableData"]) {
11278
11349
  this.pendingResetScrollTop = true;
11279
- // 不论是否虚拟滚动都要重算 scroll / fluid。
11280
- // 收款/付款编辑等页 [virtualScroll]=false + 异步灌数据:原先跳过会导致
11281
- // 空表初始化后不再补宽,勾选列被均摊撑开。
11350
+ // 不论是否虚拟滚动,数据变化后都要重算横向布局
11282
11351
  this.applyTableScrollMode(false);
11283
11352
  // 数据更新后复位纵向滚动(含虚拟滚动场景)
11284
11353
  this.scheduleResetTableBodyScrollTop();
@@ -11519,13 +11588,13 @@
11519
11588
  return col.fixed === "left" ? (col.fixedWidth || 0) + "px" : null;
11520
11589
  };
11521
11590
  Object.defineProperty(HdTableComponent.prototype, "lineNumberLeft", {
11522
- /** 开启合计时序号列的 left(勾选列占 40px) */
11591
+ /** 开启合计时序号列的 left(跟在勾选列后面) */
11523
11592
  get: /**
11524
- * 开启合计时序号列的 left(勾选列占 40px)
11593
+ * 开启合计时序号列的 left(跟在勾选列后面)
11525
11594
  * @return {?}
11526
11595
  */
11527
11596
  function () {
11528
- return this.showSelected ? "40px" : "0px";
11597
+ return (this.showSelected ? SELECT_COL_WIDTH : 0) + "px";
11529
11598
  },
11530
11599
  enumerable: true,
11531
11600
  configurable: true
@@ -11556,62 +11625,141 @@
11556
11625
  enumerable: true,
11557
11626
  configurable: true
11558
11627
  });
11559
- /** 展示用列宽:fluid 时最后一列业务列 = 声明宽 + fluidExtraWidth */
11560
11628
  /**
11561
- * 展示用列宽:fluid 时最后一列业务列 = 声明宽 + fluidExtraWidth
11629
+ * @private
11630
+ * @param {?} col
11631
+ * @return {?}
11632
+ */
11633
+ HdTableComponent.prototype.isColVisible = /**
11634
+ * @private
11635
+ * @param {?} col
11636
+ * @return {?}
11637
+ */
11638
+ function (col) {
11639
+ return !!col && col.isShow !== false;
11640
+ };
11641
+ /** 业务列声明宽:未配置时按 fixColWidth */
11642
+ /**
11643
+ * 业务列声明宽:未配置时按 fixColWidth
11644
+ * @private
11645
+ * @param {?} col
11646
+ * @return {?}
11647
+ */
11648
+ HdTableComponent.prototype.getColDeclaredWidth = /**
11649
+ * 业务列声明宽:未配置时按 fixColWidth
11650
+ * @private
11651
+ * @param {?} col
11652
+ * @return {?}
11653
+ */
11654
+ function (col) {
11655
+ return col && col.width > 0 ? col.width : ColWidth.fixColWidth;
11656
+ };
11657
+ /** 声明列宽合计:勾选列 + 序号列 + 可见业务列,不含补宽 */
11658
+ /**
11659
+ * 声明列宽合计:勾选列 + 序号列 + 可见业务列,不含补宽
11660
+ * @private
11661
+ * @return {?}
11662
+ */
11663
+ HdTableComponent.prototype.getDeclaredColWidthTotal = /**
11664
+ * 声明列宽合计:勾选列 + 序号列 + 可见业务列,不含补宽
11665
+ * @private
11666
+ * @return {?}
11667
+ */
11668
+ function () {
11669
+ var _this = this;
11670
+ /** @type {?} */
11671
+ var total = 0;
11672
+ if (this.showSelected) {
11673
+ total += SELECT_COL_WIDTH;
11674
+ }
11675
+ if (this.showTableTotal) {
11676
+ total += this.lineNumberColWidth;
11677
+ }
11678
+ (this.tableCols || []).forEach((/**
11679
+ * @param {?} col
11680
+ * @return {?}
11681
+ */
11682
+ function (col) {
11683
+ if (_this.isColVisible(col)) {
11684
+ total += _this.getColDeclaredWidth(col);
11685
+ }
11686
+ }));
11687
+ return total;
11688
+ };
11689
+ /** 模板里 th / td / 合计 col 用的列宽:补宽目标列 = 声明宽 + fluidExtraWidth */
11690
+ /**
11691
+ * 模板里 th / td / 合计 col 用的列宽:补宽目标列 = 声明宽 + fluidExtraWidth
11562
11692
  * @param {?} col
11563
11693
  * @return {?}
11564
11694
  */
11565
11695
  HdTableComponent.prototype.getColDisplayWidth = /**
11566
- * 展示用列宽:fluid 时最后一列业务列 = 声明宽 + fluidExtraWidth
11696
+ * 模板里 th / td / 合计 col 用的列宽:补宽目标列 = 声明宽 + fluidExtraWidth
11567
11697
  * @param {?} col
11568
11698
  * @return {?}
11569
11699
  */
11570
11700
  function (col) {
11571
11701
  /** @type {?} */
11572
- var base = col && col.width != null && col.width > 0
11573
- ? col.width
11574
- : ColWidth.fixColWidth;
11575
- if (this.fluidExtraWidth <= 0 ||
11576
- !col ||
11577
- !this.fluidExtraTargetCol ||
11578
- col !== this.fluidExtraTargetCol) {
11579
- return base;
11702
+ var declared = this.getColDeclaredWidth(col);
11703
+ if (this.fluidExtraWidth > 0 && col && col === this.fluidExtraTargetCol) {
11704
+ return declared + this.fluidExtraWidth;
11580
11705
  }
11581
- return base + this.fluidExtraWidth;
11706
+ return declared;
11582
11707
  };
11583
- /** 按当前 layout 刷新 fluid 补宽目标列(仅 dealScroll / sync 时调用) */
11584
11708
  /**
11585
- * 按当前 layout 刷新 fluid 补宽目标列(仅 dealScroll / sync 时调用)
11709
+ * 选出接收补宽的列:优先最后一列「非右侧固定」的可见列,
11710
+ * 避免把操作列等右固定列拉宽;全是右固定列时退回最后一列可见列。
11711
+ */
11712
+ /**
11713
+ * 选出接收补宽的列:优先最后一列「非右侧固定」的可见列,
11714
+ * 避免把操作列等右固定列拉宽;全是右固定列时退回最后一列可见列。
11586
11715
  * @private
11587
11716
  * @return {?}
11588
11717
  */
11589
- HdTableComponent.prototype.refreshFluidExtraTargetCol = /**
11590
- * 按当前 layout 刷新 fluid 补宽目标列(仅 dealScroll / sync 时调用)
11718
+ HdTableComponent.prototype.findFluidExtraTargetCol = /**
11719
+ * 选出接收补宽的列:优先最后一列「非右侧固定」的可见列,
11720
+ * 避免把操作列等右固定列拉宽;全是右固定列时退回最后一列可见列。
11591
11721
  * @private
11592
11722
  * @return {?}
11593
11723
  */
11594
11724
  function () {
11595
- this.fluidExtraTargetCol = null;
11596
- if (this.fluidExtraWidth <= 0 || !this.tableCols || !this.tableCols.length) {
11597
- return;
11598
- }
11599
- for (var i = this.tableCols.length - 1; i >= 0; i--) {
11725
+ /** @type {?} */
11726
+ var cols = this.tableCols || [];
11727
+ /** @type {?} */
11728
+ var lastVisible = null;
11729
+ for (var i = cols.length - 1; i >= 0; i--) {
11600
11730
  /** @type {?} */
11601
- var c = this.tableCols[i];
11602
- if (c && c.isShow && c.fixed !== "right") {
11603
- this.fluidExtraTargetCol = c;
11604
- return;
11731
+ var col = cols[i];
11732
+ if (!this.isColVisible(col)) {
11733
+ continue;
11605
11734
  }
11606
- }
11607
- for (var i = this.tableCols.length - 1; i >= 0; i--) {
11608
- /** @type {?} */
11609
- var c = this.tableCols[i];
11610
- if (c && c.isShow) {
11611
- this.fluidExtraTargetCol = c;
11612
- return;
11735
+ if (col.fixed !== "right") {
11736
+ return col;
11737
+ }
11738
+ if (!lastVisible) {
11739
+ lastVisible = col;
11613
11740
  }
11614
11741
  }
11742
+ return lastVisible;
11743
+ };
11744
+ /** 把横向布局结果写回组件状态(dealScroll / syncHorizontalScroll 共用) */
11745
+ /**
11746
+ * 把横向布局结果写回组件状态(dealScroll / syncHorizontalScroll 共用)
11747
+ * @private
11748
+ * @param {?} layout
11749
+ * @return {?}
11750
+ */
11751
+ HdTableComponent.prototype.applyHorizontalLayout = /**
11752
+ * 把横向布局结果写回组件状态(dealScroll / syncHorizontalScroll 共用)
11753
+ * @private
11754
+ * @param {?} layout
11755
+ * @return {?}
11756
+ */
11757
+ function (layout) {
11758
+ this.fluidExtraWidth = layout.fluidExtra;
11759
+ this.fluidHorizontal = layout.isFluid;
11760
+ this.fluidExtraTargetCol =
11761
+ layout.fluidExtra > 0 ? this.findFluidExtraTargetCol() : null;
11762
+ this.tableColWidthTotal = layout.displayTotal;
11615
11763
  };
11616
11764
  Object.defineProperty(HdTableComponent.prototype, "totalFooterTableWidth", {
11617
11765
  /** fluid → 100%;固定 → scroll.x(与表体同一套横向宽度) */
@@ -11739,7 +11887,6 @@
11739
11887
  * @return {?}
11740
11888
  */
11741
11889
  function (forceRemount) {
11742
- var _this = this;
11743
11890
  if (forceRemount === void 0) { forceRemount = false; }
11744
11891
  /** @type {?} */
11745
11892
  var useVirtual = this.useVirtualScroll;
@@ -11752,23 +11899,7 @@
11752
11899
  // ng-zorro 只在 AfterViewInit 绑一次 header/body 的 scroll 同步;
11753
11900
  // 若先以 y=null 创建再改成有 y,表头监听会丢,表现为列头不跟着横滚。
11754
11901
  this.presetScrollBeforeRemount(useVirtual);
11755
- this.showTable = false;
11756
- this.cdr.markForCheck();
11757
- setTimeout((/**
11758
- * @return {?}
11759
- */
11760
- function () {
11761
- _this.showTable = true;
11762
- _this.cdr.markForCheck();
11763
- setTimeout((/**
11764
- * @return {?}
11765
- */
11766
- function () {
11767
- _this.dealScroll();
11768
- _this.cdr.markForCheck();
11769
- _this.afterTableRender(useVirtual);
11770
- }));
11771
- }));
11902
+ this.remountTable(useVirtual);
11772
11903
  return;
11773
11904
  }
11774
11905
  /** @type {?} */
@@ -11780,32 +11911,48 @@
11780
11911
  var nextHasX = !!(this.scroll && this.scroll.x);
11781
11912
  /** @type {?} */
11782
11913
  var nextHasY = !!(this.scroll && this.scroll.y);
11783
- // 运行中 x/y 从有变无/从无变有时,也必须重建:
11784
- // - y:ng-zorro 只在 AfterViewInit 绑一次 header/body 同步
11785
- // - x:空表 scroll.x=null(table-layout:auto)→ 有数据后设 scroll.x(fixed),
11786
- // 不重建时勾选列仍按 auto 均摊撑开(收款编辑等异步灌数页)
11914
+ // scroll.x / scroll.y 从无到有(或反过来)时必须重建,原地改值不生效:
11915
+ // - y:ng-zorro 8 只在 AfterViewInit 绑一次表头/表体滚动同步,且决定表头是否拆成独立 table
11916
+ // - x:决定是否带 ant-table-fixed(table-layout: fixed),勾选列锁宽依赖它
11787
11917
  if (prevHasY !== nextHasY || prevHasX !== nextHasX) {
11788
- this.showTable = false;
11789
- this.cdr.markForCheck();
11918
+ this.remountTable(useVirtual);
11919
+ return;
11920
+ }
11921
+ this.cdr.markForCheck();
11922
+ this.afterTableRender(useVirtual);
11923
+ };
11924
+ /** 销毁并重建 nz-table:等 DOM 出来后再按真实容器宽重算一次横向布局 */
11925
+ /**
11926
+ * 销毁并重建 nz-table:等 DOM 出来后再按真实容器宽重算一次横向布局
11927
+ * @private
11928
+ * @param {?} useVirtual
11929
+ * @return {?}
11930
+ */
11931
+ HdTableComponent.prototype.remountTable = /**
11932
+ * 销毁并重建 nz-table:等 DOM 出来后再按真实容器宽重算一次横向布局
11933
+ * @private
11934
+ * @param {?} useVirtual
11935
+ * @return {?}
11936
+ */
11937
+ function (useVirtual) {
11938
+ var _this = this;
11939
+ this.showTable = false;
11940
+ this.cdr.markForCheck();
11941
+ setTimeout((/**
11942
+ * @return {?}
11943
+ */
11944
+ function () {
11945
+ _this.showTable = true;
11946
+ _this.cdr.markForCheck();
11790
11947
  setTimeout((/**
11791
11948
  * @return {?}
11792
11949
  */
11793
11950
  function () {
11794
- _this.showTable = true;
11951
+ _this.dealScroll();
11795
11952
  _this.cdr.markForCheck();
11796
- setTimeout((/**
11797
- * @return {?}
11798
- */
11799
- function () {
11800
- _this.dealScroll();
11801
- _this.cdr.markForCheck();
11802
- _this.afterTableRender(useVirtual);
11803
- }));
11953
+ _this.afterTableRender(useVirtual);
11804
11954
  }));
11805
- return;
11806
- }
11807
- this.cdr.markForCheck();
11808
- this.afterTableRender(useVirtual);
11955
+ }));
11809
11956
  };
11810
11957
  /** 重建前预设 scroll,保证 AfterViewInit 时 header/body 结构已正确 */
11811
11958
  /**
@@ -12670,48 +12817,62 @@
12670
12817
  function (maxOffset) {
12671
12818
  return "calc(100vh - " + maxOffset + "px)";
12672
12819
  };
12673
- /**
12674
- * @private
12675
- * @return {?}
12676
- */
12677
- HdTableComponent.prototype.hasTableData = /**
12678
- * @private
12679
- * @return {?}
12680
- */
12681
- function () {
12682
- return !!(this.tableData &&
12683
- this.tableData.content &&
12684
- this.tableData.content.length);
12685
- };
12686
- /**
12687
- * 按声明列总宽 + 容器宽,计算 scroll.x 与 fluid 补宽。
12688
- * 列少:scroll.x = 内容区宽(clientWidth),差额加到最后业务列(勾选保持 40);
12689
- * 列多:scroll.x = 声明总宽。
12690
- * 比较是否超宽用 offsetWidth(含 Y 槽),避免「仅因纵滚条」误开横滚;
12691
- * 补宽目标用 clientWidth,且 scroll.x 用 floor,避免表宽多 1px 逼出 X 轴滚动条。
12692
- */
12693
- /**
12694
- * 按声明列总宽 + 容器宽,计算 scroll.x 与 fluid 补宽。
12695
- * 列少:scroll.x = 内容区宽(clientWidth),差额加到最后业务列(勾选保持 40);
12696
- * 列多:scroll.x = 声明总宽。
12697
- * 比较是否超宽用 offsetWidth(含 Y 槽),避免「仅因纵滚条」误开横滚;
12698
- * 补宽目标用 clientWidth,且 scroll.x 用 floor,避免表宽多 1px 逼出 X 轴滚动条。
12820
+ /*
12821
+ * 横向布局(勾选列锁 40px 的关键)
12822
+ *
12823
+ * 勾选列只有在 table-layout: fixed 下才锁得住:ng-zorro 8 仅在 nzScroll.x 有值时
12824
+ * 给 table 加 ant-table-fixed;auto 布局下 table 宽 100%、每列都有 nzWidth,
12825
+ * 剩余空间会按比例摊到所有列(含勾选列),单元格上的 max-width 也不生效。
12826
+ * 所以只要有列(无论有没有数据)就一定设置 scroll.x:
12827
+ * - 列少:scroll.x = 容器宽,差额补到最后一列业务列(fluid,不出真横滚)
12828
+ * - 列多:scroll.x = 声明总宽,正常横滚
12829
+ * less 里勾选列的 40px 只是 fixed 布局下的兜底。
12830
+ */
12831
+ /**
12832
+ * 按声明列宽合计 + 容器宽算出横向布局。
12833
+ * 判断「是否超宽」用 offsetWidth(含竖滚条槽),避免只因竖滚条就误开横滚;
12834
+ * 补宽目标用 clientWidth 并向下取整,避免表宽多 1px 逼出横滚条。
12835
+ */
12836
+ /*
12837
+ * 横向布局(勾选列锁 40px 的关键)
12838
+ *
12839
+ * 勾选列只有在 table-layout: fixed 下才锁得住:ng-zorro 8 仅在 nzScroll.x 有值时
12840
+ * 给 table 加 ant-table-fixed;auto 布局下 table 宽 100%、每列都有 nzWidth,
12841
+ * 剩余空间会按比例摊到所有列(含勾选列),单元格上的 max-width 也不生效。
12842
+ * 所以只要有列(无论有没有数据)就一定设置 scroll.x:
12843
+ * - 列少:scroll.x = 容器宽,差额补到最后一列业务列(fluid,不出真横滚)
12844
+ * - 列多:scroll.x = 声明总宽,正常横滚
12845
+ * less 里勾选列的 40px 只是 fixed 布局下的兜底。
12846
+ */
12847
+ /**
12848
+ * 按声明列宽合计 + 容器宽算出横向布局。
12849
+ * 判断「是否超宽」用 offsetWidth(含竖滚条槽),避免只因竖滚条就误开横滚;
12850
+ * 补宽目标用 clientWidth 并向下取整,避免表宽多 1px 逼出横滚条。
12699
12851
  * @private
12700
12852
  * @param {?} declaredColWidth
12701
12853
  * @return {?}
12702
12854
  */
12703
- HdTableComponent.prototype.resolveHorizontalLayout = /**
12704
- * 按声明列总宽 + 容器宽,计算 scroll.x 与 fluid 补宽。
12705
- * 列少:scroll.x = 内容区宽(clientWidth),差额加到最后业务列(勾选保持 40);
12706
- * 列多:scroll.x = 声明总宽。
12707
- * 比较是否超宽用 offsetWidth(含 Y 槽),避免「仅因纵滚条」误开横滚;
12708
- * 补宽目标用 clientWidth,且 scroll.x 用 floor,避免表宽多 1px 逼出 X 轴滚动条。
12855
+ HdTableComponent.prototype.resolveHorizontalLayout = /*
12856
+ * 横向布局(勾选列锁 40px 的关键)
12857
+ *
12858
+ * 勾选列只有在 table-layout: fixed 下才锁得住:ng-zorro 8 仅在 nzScroll.x 有值时
12859
+ * 给 table 加 ant-table-fixed;auto 布局下 table 宽 100%、每列都有 nzWidth,
12860
+ * 剩余空间会按比例摊到所有列(含勾选列),单元格上的 max-width 也不生效。
12861
+ * 所以只要有列(无论有没有数据)就一定设置 scroll.x:
12862
+ * - 列少:scroll.x = 容器宽,差额补到最后一列业务列(fluid,不出真横滚)
12863
+ * - 列多:scroll.x = 声明总宽,正常横滚
12864
+ * less 里勾选列的 40px 只是 fixed 布局下的兜底。
12865
+ */
12866
+ /**
12867
+ * 按声明列宽合计 + 容器宽算出横向布局。
12868
+ * 判断「是否超宽」用 offsetWidth(含竖滚条槽),避免只因竖滚条就误开横滚;
12869
+ * 补宽目标用 clientWidth 并向下取整,避免表宽多 1px 逼出横滚条。
12709
12870
  * @private
12710
12871
  * @param {?} declaredColWidth
12711
12872
  * @return {?}
12712
12873
  */
12713
12874
  function (declaredColWidth) {
12714
- if (!this.hasTableData() || declaredColWidth <= 0) {
12875
+ if (declaredColWidth <= 0) {
12715
12876
  return {
12716
12877
  scrollX: null,
12717
12878
  fluidExtra: 0,
@@ -12720,115 +12881,63 @@
12720
12881
  };
12721
12882
  }
12722
12883
  /** @type {?} */
12723
- var viewportCompare = this.nzTableComponent
12884
+ var compareWidth = this.nzTableComponent
12724
12885
  ? getTableScrollXViewportWidth(this.nzTableComponent)
12725
12886
  : 0;
12726
- // 表体尚未量到宽时(异步灌数 / spin / 刚 remount),用宿主宽兜底
12727
- if (viewportCompare <= 0 && this.hostEl && this.hostEl.nativeElement) {
12728
- /** @type {?} */
12729
- var hostW = ((/** @type {?} */ (this.hostEl.nativeElement))).offsetWidth;
12730
- if (hostW > 0) {
12731
- viewportCompare = hostW;
12732
- }
12887
+ // 表体还没渲染出来(刚重建 / 在 spin 里)时用宿主宽兜底
12888
+ if (compareWidth <= 0 && this.hostEl && this.hostEl.nativeElement) {
12889
+ compareWidth = ((/** @type {?} */ (this.hostEl.nativeElement))).offsetWidth;
12733
12890
  }
12734
- if (viewportCompare > 0) {
12735
- if (declaredColWidth > viewportCompare + 1) {
12736
- return {
12737
- scrollX: Math.ceil(declaredColWidth) + "px",
12738
- fluidExtra: 0,
12739
- displayTotal: declaredColWidth,
12740
- isFluid: false,
12741
- };
12742
- }
12743
- /** @type {?} */
12744
- var fillWidth = this.nzTableComponent
12745
- ? getTableViewportWidth(this.nzTableComponent)
12746
- : 0;
12747
- /** @type {?} */
12748
- var target = Math.floor(fillWidth > 0 ? fillWidth : viewportCompare);
12749
- /** @type {?} */
12750
- var fluidExtra = Math.max(0, target - declaredColWidth);
12751
- return {
12752
- scrollX: target + "px",
12753
- fluidExtra: fluidExtra,
12754
- displayTotal: declaredColWidth + fluidExtra,
12755
- isFluid: true,
12756
- };
12891
+ // 仍量不到(如宿主在 display:none 里):先按声明宽走 fixed,等 ResizeObserver 触发再转 fluid
12892
+ if (compareWidth <= 0) {
12893
+ return fixedLayout(declaredColWidth);
12757
12894
  }
12758
- // 视口仍测不到:至少用声明宽设 scroll.x,强制 fixed 布局锁勾选列,
12759
- // 避免落回 table-layout:auto 被均摊撑开;后续 sync/remount 再转 fluid。
12760
- return {
12761
- scrollX: Math.ceil(declaredColWidth) + "px",
12762
- fluidExtra: 0,
12763
- displayTotal: declaredColWidth,
12764
- isFluid: false,
12765
- };
12895
+ // 1px 容差,避免亚像素误判
12896
+ if (declaredColWidth > compareWidth + 1) {
12897
+ return fixedLayout(declaredColWidth);
12898
+ }
12899
+ /** @type {?} */
12900
+ var fillWidth = this.nzTableComponent
12901
+ ? getTableViewportWidth(this.nzTableComponent)
12902
+ : 0;
12903
+ /** @type {?} */
12904
+ var containerWidth = Math.floor(fillWidth > 0 ? fillWidth : compareWidth);
12905
+ return fluidLayout(containerWidth, declaredColWidth);
12766
12906
  };
12767
- /** 表格渲染后按实际容器宽度校正横向 scroll / fluid 补宽 */
12907
+ /** 表格渲染后按真实容器宽校正横向布局;只改 x,y 保持不变 */
12768
12908
  /**
12769
- * 表格渲染后按实际容器宽度校正横向 scroll / fluid 补宽
12909
+ * 表格渲染后按真实容器宽校正横向布局;只改 x,y 保持不变
12770
12910
  * @private
12771
12911
  * @return {?}
12772
12912
  */
12773
12913
  HdTableComponent.prototype.syncHorizontalScroll = /**
12774
- * 表格渲染后按实际容器宽度校正横向 scroll / fluid 补宽
12914
+ * 表格渲染后按真实容器宽校正横向布局;只改 x,y 保持不变
12775
12915
  * @private
12776
12916
  * @return {?}
12777
12917
  */
12778
12918
  function () {
12779
12919
  var _this = this;
12780
12920
  /** @type {?} */
12781
- var declared = 0;
12782
- if (this.showSelected) {
12783
- declared += 40;
12784
- }
12785
- if (this.showTableTotal) {
12786
- declared += this.lineNumberColWidth;
12787
- }
12788
- if (this.tableCols) {
12789
- this.tableCols.forEach((/**
12790
- * @param {?} item
12791
- * @return {?}
12792
- */
12793
- function (item) {
12794
- if (item && item.isShow !== false) {
12795
- declared += item.width > 0 ? item.width : ColWidth.fixColWidth;
12796
- }
12797
- }));
12798
- }
12799
- /** @type {?} */
12800
12921
  var prevHasX = !!(this.scroll && this.scroll.x);
12801
12922
  /** @type {?} */
12802
- var layout = this.resolveHorizontalLayout(declared);
12923
+ var layout = this.resolveHorizontalLayout(this.getDeclaredColWidthTotal());
12803
12924
  /** @type {?} */
12804
- var currentY = this.scroll ? this.scroll.y : null;
12805
- /** @type {?} */
12806
- var nextHasX = !!layout.scrollX;
12807
- /** @type {?} */
12808
- var sameX = this.scroll && this.scroll.x === layout.scrollX;
12809
- /** @type {?} */
12810
- var sameExtra = this.fluidExtraWidth === layout.fluidExtra;
12811
- /** @type {?} */
12812
- var sameFluid = this.fluidHorizontal === layout.isFluid;
12813
- if (sameX &&
12814
- sameExtra &&
12815
- sameFluid &&
12816
- this.scroll &&
12817
- this.scroll.y === currentY) {
12925
+ var unchanged = this.scroll &&
12926
+ this.scroll.x === layout.scrollX &&
12927
+ this.fluidExtraWidth === layout.fluidExtra &&
12928
+ this.fluidHorizontal === layout.isFluid;
12929
+ if (unchanged) {
12818
12930
  setTimeout((/**
12819
12931
  * @return {?}
12820
12932
  */
12821
12933
  function () { return _this.syncTotalFooterWithBody(); }));
12822
12934
  return;
12823
12935
  }
12824
- this.fluidExtraWidth = layout.fluidExtra;
12825
- this.fluidHorizontal = layout.isFluid;
12826
- this.refreshFluidExtraTargetCol();
12827
- this.tableColWidthTotal = layout.displayTotal;
12828
- this.scroll = { x: layout.scrollX, y: currentY };
12936
+ this.applyHorizontalLayout(layout);
12937
+ this.scroll = { x: layout.scrollX, y: this.scroll ? this.scroll.y : null };
12829
12938
  this.cdr.markForCheck();
12830
- // sync 阶段若补上了 scroll.x,需重建才能切到 fixed 布局
12831
- if (prevHasX !== nextHasX) {
12939
+ // x 从无到有(或反过来)要重建才能切换 table-layout
12940
+ if (prevHasX !== !!layout.scrollX) {
12832
12941
  this.applyTableScrollMode(true);
12833
12942
  return;
12834
12943
  }
@@ -12853,7 +12962,8 @@
12853
12962
  return;
12854
12963
  }
12855
12964
  /** @type {?} */
12856
- var header = (/** @type {?} */ (((/** @type {?} */ (this.nzTableComponent))).tableHeaderNativeElement));
12965
+ var header = (/** @type {?} */ (((/** @type {?} */ (this.nzTableComponent)))
12966
+ .tableHeaderNativeElement));
12857
12967
  /** @type {?} */
12858
12968
  var body = this.getTableBodyScrollEl();
12859
12969
  if (this.scroll && this.scroll.x && header && body) {
@@ -12879,7 +12989,8 @@
12879
12989
  return null;
12880
12990
  }
12881
12991
  /** @type {?} */
12882
- var mix = (/** @type {?} */ (((/** @type {?} */ (this.nzTableComponent))).mixTableBodyNativeElement));
12992
+ var mix = (/** @type {?} */ (((/** @type {?} */ (this.nzTableComponent)))
12993
+ .mixTableBodyNativeElement));
12883
12994
  if (mix) {
12884
12995
  return mix;
12885
12996
  }
@@ -13146,13 +13257,15 @@
13146
13257
  * @return {?}
13147
13258
  */
13148
13259
  function () {
13260
+ var _this = this;
13261
+ // 左侧固定列:从左往右累计偏移(勾选列、序号列在最前面)
13149
13262
  /** @type {?} */
13150
- var colWidth = 0;
13263
+ var leftOffset = 0;
13151
13264
  if (this.showSelected) {
13152
- colWidth += 40;
13265
+ leftOffset += SELECT_COL_WIDTH;
13153
13266
  }
13154
13267
  if (this.showTableTotal) {
13155
- colWidth += this.lineNumberColWidth; // 序号列(固定宽,不随位数变化)
13268
+ leftOffset += this.lineNumberColWidth;
13156
13269
  }
13157
13270
  this.tableCols.forEach((/**
13158
13271
  * @param {?} item
@@ -13162,9 +13275,9 @@
13162
13275
  if (!item.width) {
13163
13276
  item.width = ColWidth.fixColWidth;
13164
13277
  }
13165
- if (item.isShow !== false) {
13166
- item.fixedWidth = colWidth;
13167
- colWidth += item.width;
13278
+ if (_this.isColVisible(item)) {
13279
+ item.fixedWidth = leftOffset;
13280
+ leftOffset += item.width;
13168
13281
  }
13169
13282
  }));
13170
13283
  // 右侧固定列:从右往左累计偏移,避免多列都 right:0 互相遮挡
@@ -13173,7 +13286,7 @@
13173
13286
  for (var i = this.tableCols.length - 1; i >= 0; i--) {
13174
13287
  /** @type {?} */
13175
13288
  var item = this.tableCols[i];
13176
- if (item.isShow === false) {
13289
+ if (!this.isColVisible(item)) {
13177
13290
  continue;
13178
13291
  }
13179
13292
  if (item.fixed === "right") {
@@ -13185,11 +13298,8 @@
13185
13298
  }
13186
13299
  }
13187
13300
  /** @type {?} */
13188
- var layout = this.resolveHorizontalLayout(colWidth);
13189
- this.fluidExtraWidth = layout.fluidExtra;
13190
- this.fluidHorizontal = layout.isFluid;
13191
- this.refreshFluidExtraTargetCol();
13192
- this.tableColWidthTotal = layout.displayTotal;
13301
+ var layout = this.resolveHorizontalLayout(this.getDeclaredColWidthTotal());
13302
+ this.applyHorizontalLayout(layout);
13193
13303
  /** @type {?} */
13194
13304
  var maxOffset = this.getScrollYMaxOffset();
13195
13305
  /** @type {?} */
@@ -13393,7 +13503,9 @@
13393
13503
  * @return {?}
13394
13504
  */
13395
13505
  function (col, colIndex) {
13396
- if (!col || !this.tableTotalOptionList || !this.tableTotalOptionList.length) {
13506
+ if (!col ||
13507
+ !this.tableTotalOptionList ||
13508
+ !this.tableTotalOptionList.length) {
13397
13509
  return null;
13398
13510
  }
13399
13511
  /** @type {?} */
@@ -13795,7 +13907,8 @@
13795
13907
  * @return {?}
13796
13908
  */
13797
13909
  function (col) {
13798
- return !!(col && (col.rowNo === true || (typeof col.rowNo === "string" && col.rowNo)));
13910
+ return !!(col &&
13911
+ (col.rowNo === true || (typeof col.rowNo === "string" && col.rowNo)));
13799
13912
  };
13800
13913
  /**
13801
13914
  * 行号文案。rowNo 为字段名时取行数据;为 true 时按当前页序号(跨页连续,从 1 开始)。
@@ -13846,7 +13959,10 @@
13846
13959
  * @return {?}
13847
13960
  */
13848
13961
  function (col) {
13849
- if (!this.hasRowNo(col) || !col || !col.title || String(col.title).indexOf("|") < 0) {
13962
+ if (!this.hasRowNo(col) ||
13963
+ !col ||
13964
+ !col.title ||
13965
+ String(col.title).indexOf("|") < 0) {
13850
13966
  return null;
13851
13967
  }
13852
13968
  /** @type {?} */
@@ -14420,7 +14536,7 @@
14420
14536
  HdTableComponent.decorators = [
14421
14537
  { type: core.Component, args: [{
14422
14538
  selector: "hd-table",
14423
- template: "<ng-container>\n <hd-button-group>\n <ng-template #buttonGroupLeft>\n <ng-container *ngTemplateOutlet=\"tableLeftButton\"></ng-container>\n <hd-button *ngIf=\"showOperateColWarpButton\" type=\"default\" (click)=\"toggleShowDetail()\">{{showDetail ?\n '\u7F29\u7565\u663E\u793A': '\u5C55\u5F00\u663E\u793A'}}</hd-button>\n </ng-template> \n <ng-template #buttonGroupRight>\n <ng-container *ngTemplateOutlet=\"tableRightButton\"></ng-container>\n <ng-container *ngIf=\"showColSettings\">\n <span class=\"hd-table-col-settings\" nz-dropdown nzTrigger=\"click\" [nzDropdownMenu]=\"menu\"\n [nzVisible]=\"isDropdownVisible\" (click)=\"confirmDropdown()\" title=\"\u5217\u8BBE\u7F6E\">\n <svg class=\"hd-table-col-settings-icon\" width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\" aria-hidden=\"true\">\n <path fill-rule=\"evenodd\" clip-rule=\"evenodd\"\n d=\"M4.92031 1.80756C5.02551 1.42884 5.37033 1.16675 5.76339 1.16675H8.23667C8.62973 1.16675 8.97455 1.42884 9.07975 1.80756L9.37802 2.88133L10.4571 2.60273C10.8377 2.50448 11.2371 2.67206 11.4336 3.01245L12.6703 5.15438C12.8668 5.49478 12.8122 5.92445 12.5369 6.20491L11.7561 7.00008L12.5369 7.79525C12.8122 8.07572 12.8668 8.50539 12.6703 8.84579L11.4336 10.9877C11.2371 11.3281 10.8377 11.4957 10.4571 11.3974L9.37802 11.1188L9.07975 12.1926C8.97455 12.5713 8.62973 12.8334 8.23667 12.8334H5.76339C5.37033 12.8334 5.02551 12.5713 4.92031 12.1926L4.62206 11.1189L3.54315 11.3974C3.16258 11.4957 2.76318 11.3281 2.56666 10.9877L1.33001 8.84579C1.13349 8.50539 1.18806 8.07572 1.46343 7.79525L2.24419 7.00008L1.46344 6.20491C1.18806 5.92445 1.13349 5.49478 1.33002 5.15438L2.56666 3.01245C2.76319 2.67206 3.16258 2.50448 3.54316 2.60273L4.62206 2.88127L4.92031 1.80756ZM4.54541 10.843L4.54552 10.8433L4.54541 10.843ZM5.98508 2.33341L5.66952 3.46945C5.54185 3.92906 5.06958 4.20173 4.60771 4.08249L3.46618 3.78778L2.45122 5.54572L3.2773 6.38705C3.6115 6.72742 3.6115 7.27275 3.2773 7.61312L2.45122 8.45444L3.46617 10.2124L4.60771 9.91768C5.06958 9.79844 5.54185 10.0711 5.66952 10.5307L5.98508 11.6667H8.01498L8.33056 10.5307C8.45823 10.071 8.9305 9.79838 9.39237 9.91762L10.5341 10.2124L11.5491 8.45444L10.723 7.61312C10.3888 7.27275 10.3888 6.72742 10.723 6.38705L11.5491 5.54572L10.5341 3.78778L9.39237 4.08254C8.9305 4.20178 8.45823 3.92912 8.33056 3.46951L8.01498 2.33341H5.98508ZM7.00003 5.83342C6.3557 5.83342 5.83337 6.35575 5.83337 7.00008C5.83337 7.64441 6.3557 8.16675 7.00003 8.16675C7.64436 8.16675 8.1667 7.64441 8.1667 7.00008C8.1667 6.35575 7.64436 5.83342 7.00003 5.83342ZM4.6667 7.00008C4.6667 5.71142 5.71137 4.66675 7.00003 4.66675C8.2887 4.66675 9.33337 5.71142 9.33337 7.00008C9.33337 8.28875 8.2887 9.33342 7.00003 9.33342C5.71137 9.33342 4.6667 8.28875 4.6667 7.00008Z\"\n fill=\"currentColor\" />\n </svg>\n </span>\n <nz-dropdown-menu #menu=\"nzDropdownMenu\">\n <div class=\"hd-table-col-settings-dropdown\">\n <div class=\"hd-table-col-settings-list\">\n <div *ngIf=\"showListNodes && nowListNodes.length > 0\" nz-menu style=\"padding: 5px 10px;\">\n <nz-tree *ngIf=\"showListNodes\" [nzData]=\"nowListNodes\" nzCheckable nzDraggable nzBlockNode\n nzShowExpand=\"false\" (nzCheckBoxChange)=\"checkAction($event)\" [nzBeforeDrop]=\"beforeDrop\"\n [nzTreeTemplate]=\"nzTreeTemplate\">\n </nz-tree>\n <ng-template #nzTreeTemplate let-node>\n <span\n class=\"ng-tns-c31-110 draggable ng-star-inserted ant-tree-node-content-wrapper ant-tree-node-content-wrapper-close\"\n [title]=\"node.key\" draggable=\"true\" aria-grabbed=\"true\">\n <span class=\"ant-tree-title\">\n <div class=\"hd-table-tree-node\">\n <span>{{node.key}}</span>\n <div *ngIf=\"!node.origin.disabled\" class=\"hd-table-tree-node-img\">\n <i nz-icon nzType=\"caret-up\" nzTheme=\"outline\"></i>\n <i nz-icon nzType=\"caret-down\" nzTheme=\"outline\"></i>\n </div>\n </div>\n </span>\n </span>\n </ng-template>\n </div>\n <div *ngIf=\"showListNodes && hideListNodes.length > 0\" nz-menu style=\"padding: 5px 10px;\">\n <nz-tree *ngIf=\"showListNodes\" [nzData]=\"hideListNodes\" nzCheckable nzShowExpand=\"false\"\n (nzCheckBoxChange)=\"checkAction($event)\">\n </nz-tree>\n </div>\n </div>\n <div class=\"hd-table-col-settings-footer\">\n <hd-button style=\"margin-right: 4px;\" type=\"default\" size=\"small\" (clickAction)=\"cancelDropdown()\">\u53D6\u6D88\n </hd-button>\n <hd-button type=\"primary\" size=\"small\" (clickAction)=\"submitGrids()\">\u5B8C\u6210</hd-button>\n </div>\n </div>\n </nz-dropdown-menu>\n </ng-container>\n </ng-template>\n </hd-button-group>\n <hd-space type=\"row\" size=\"12\"></hd-space>\n <ng-container *ngTemplateOutlet=\"tableTotal\"></ng-container>\n <hd-space *ngIf=\"tableTotal\" type=\"row\" size=\"12\"></hd-space>\n <nz-table *ngIf=\"showTable\" #hdTable class=\"hd-table-container\" [class.hd-table--virtual]=\"useVirtualScroll\"\n [class.hd-table--scroll-y]=\"!!(scroll && scroll.y)\" [class.hd-table--scroll-x]=\"!!(scroll && scroll.x)\"\n [class.hd-table--fluid-x]=\"fluidHorizontal\"\n [class.hd-table--has-select]=\"showSelected\"\n [class.hd-table--has-total]=\"showTableTotal\"\n [nzScroll]=\"scroll\"\n [nzShowPagination]=\"pagination\" [nzShowSizeChanger]=\"pagination\" [nzShowQuickJumper]=\"pagination\"\n [nzFrontPagination]=\"useFrontPagination\" nzSize=\"middle\" [nzData]=\"tableData.content\"\n [nzTotal]=\"getTableTotalCount()\" [(nzPageIndex)]=\"tablePageIndex\" [nzLoading]=\"tableLoading\"\n [nzPageSizeOptions]=\"[ 10, 50, 100, 200, 500, 1000 ]\" [(nzPageSize)]=\"tablePageSize\"\n (nzPageSizeChange)=\"pagination ? search(true) : null\"\n (nzPageIndexChange)=\"pagination ? search(false) : null\"\n (nzCurrentPageDataChange)=\"showSelected ? currentPageDataChange($event) : null\"\n [nzShowTotal]=\"tableTotalTemplate\" [nzFooter]=\"showTableTotal ? tableTotalFooter : null\"\n [nzVirtualScroll]=\"useVirtualScroll\" [nzVirtualItemSize]=\"useVirtualScroll ? effectiveVirtualItemSize : 0\"\n [nzVirtualForTrackBy]=\"virtualTrackByRow\">\n <thead (nzSortChange)=\"sort($event)\" nzSingleSort>\n <tr>\n <th nzWidth=\"40px\" nzLeft=\"0px\" *ngIf=\"showSelected && selectType !== 'radio'\" nzShowCheckbox\n [(nzChecked)]=\"isAllDisplayDataChecked\" [nzIndeterminate]=\"isIndeterminate\"\n (nzCheckedChange)=\"checkAll($event)\"></th>\n <th nzWidth=\"40px\" nzLeft=\"0px\" *ngIf=\"showSelected && selectType === 'radio'\"></th>\n <th class=\"hd-table-line-no-col\" [nzWidth]=\"lineNumberColWidthPx\" [nzLeft]=\"lineNumberLeft\"\n *ngIf=\"showTableTotal\">\u5E8F\u53F7</th>\n <ng-container *ngFor=\"let col of tableCols\">\n <th *ngIf=\"col.isShow\" [nzWidth]=\"getColDisplayWidth(col) + 'px'\" [nzAlign]=\"col.align\"\n [nzLeft]=\"getLeftSticky(col)\"\n [nzRight]=\"getRightSticky(col)\" nz-resizable nzBounds=\"window\" nzPreview\n (nzResizeEnd)=\"onResize($event, col)\" [nzShowSort]=\"col.canSort\" [nzSortKey]=\"col.name\"\n [nzSort]=\"getColSort(col)\">\n <span class=\"hd-table-col-title\">\n <span class=\"hd-table-col-require\" *ngIf=\"col.require && col.editType\">*</span>\n <ng-container *ngIf=\"getTitleParts(col) as titleParts; else plainTitle\">\n <span class=\"hd-table-title-with-bar\">{{ titleParts[0] }}<i class=\"hd-table-row-no-bar\"></i>{{ titleParts[1] }}</span>\n </ng-container>\n <ng-template #plainTitle>{{ col.title }}</ng-template>\n </span>\n <nz-resize-handle nzDirection=\"right\">\n <div class=\"resize-trigger\"></div>\n </nz-resize-handle>\n </th>\n </ng-container>\n </tr>\n </thead>\n <tbody>\n <ng-template *ngIf=\"useVirtualScroll\" nz-virtual-scroll let-data let-index=\"index\">\n <tr class=\"hd-table-virtual-row\" [class.hd-table-row-invalid]=\"isInvalidRow(data)\">\n <ng-container *ngTemplateOutlet=\"tableCells; context: { $implicit: data, index: index }\"></ng-container>\n </tr>\n </ng-template>\n <ng-container *ngIf=\"!useVirtualScroll\">\n <tr *ngFor=\"let data of hdTable.data; trackBy: trackByRow; index as i\"\n [class.hd-table-row-invalid]=\"isInvalidRow(data)\">\n <ng-container *ngTemplateOutlet=\"tableCells; context: { $implicit: data, index: i }\"></ng-container>\n </tr>\n </ng-container>\n </tbody>\n <ng-template #tableTotalTemplate>\n \u5171 {{ getTableTotalCount() }} \u6761\u6570\u636E\n </ng-template>\n <ng-template #tableTotalFooter>\n <!--\n \u5217\u603B\u5BBD < \u5BB9\u5668\uFF1Ascroll.x=\u5BB9\u5668\u5BBD\uFF0C\u5DEE\u989D\u8865\u5230\u6700\u540E\u4E1A\u52A1\u5217\uFF08\u52FE\u9009\u4FDD\u6301 40\uFF09\uFF1B\u53EF\u62D6\u62FD\u3002\n \u5217\u603B\u5BBD > \u5BB9\u5668\uFF1Ascroll.x=\u58F0\u660E\u603B\u5BBD\uFF0C\u6A2A\u6EDA\u540C\u6B65\u3002\n -->\n <div class=\"hd-table-total-footer\"\n [class.hd-table-total-footer--fluid]=\"isTotalFooterFluid\"\n [class.hd-table-total-footer--y-gutter]=\"totalFooterNeedYGutter\">\n <table class=\"hd-table-total-footer-table\" [style.width]=\"totalFooterTableWidth\">\n <colgroup>\n <!-- \u52FE\u9009/\u5E8F\u53F7\u9501\u5BBD\uFF0C\u4E0D\u53C2\u4E0E\u5747\u644A -->\n <col *ngIf=\"showSelected\" style=\"width: 40px; min-width: 40px; max-width: 40px;\" />\n <col *ngIf=\"showTableTotal\"\n [style.width.px]=\"lineNumberColWidth\"\n [style.min-width.px]=\"lineNumberColWidth\"\n [style.max-width.px]=\"lineNumberColWidth\" />\n <ng-container *ngFor=\"let col of tableCols; trackBy: trackByCol\">\n <col *ngIf=\"col.isShow\" [style.width.px]=\"getColDisplayWidth(col)\" />\n </ng-container>\n </colgroup>\n <tr class=\"hd-table-total\">\n <td *ngIf=\"showSelected\" class=\"hd-table-total-footer-cell hd-table-total-footer-select\"\n [class.hd-table-total-footer-sticky-left]=\"!isTotalFooterFluid\"\n style=\"left: 0;\">&nbsp;</td>\n <td class=\"hd-table-total-footer-cell hd-table-total-footer-line-no\"\n [class.hd-table-total-footer-sticky-left]=\"!isTotalFooterFluid\"\n [style.left]=\"!isTotalFooterFluid ? lineNumberLeft : null\">\u5408\u8BA1</td>\n <ng-container *ngFor=\"let col of tableCols; let colIndex = index; trackBy: trackByCol\">\n <td *ngIf=\"col.isShow\" class=\"hd-table-total-footer-cell\"\n [class.hd-table-total-footer-sticky-left]=\"!isTotalFooterFluid && col.fixed === 'left'\"\n [class.hd-table-total-footer-sticky-right]=\"!isTotalFooterFluid && col.fixed === 'right'\"\n [class.hd-table-total-align-left]=\"getTableTotalCellAlign(col, colIndex) === 'left'\"\n [class.hd-table-total-align-center]=\"getTableTotalCellAlign(col, colIndex) === 'center'\"\n [class.hd-table-total-align-right]=\"getTableTotalCellAlign(col, colIndex) === 'right'\"\n [style.left]=\"!isTotalFooterFluid && col.fixed === 'left' ? (col.fixedWidth || 0) + 'px' : null\"\n [style.right]=\"!isTotalFooterFluid && col.fixed === 'right' ? (col.fixedRightWidth || 0) + 'px' : null\"\n [ngStyle]=\"{'text-align': getTableTotalCellAlign(col, colIndex)}\">\n {{ getTableTotalCellValue(col, colIndex) }}\n </td>\n </ng-container>\n </tr>\n </table>\n </div>\n </ng-template>\n </nz-table>\n</ng-container>\n\n<ng-template #tableCells let-data let-index=\"index\">\n <td nzWidth=\"40px\" nzLeft=\"0px\" *ngIf=\"showSelected && selectType !== 'radio'\" nzShowCheckbox\n [nzChecked]=\"mapOfCheckedId[data[selectField]]\" [nzDisabled]=\"isSelectDisabled(data)\"\n (nzCheckedChange)=\"refreshStatus($event, data)\"></td>\n <td nzWidth=\"40px\" nzLeft=\"0px\" class=\"hd-table-select-radio\" *ngIf=\"showSelected && selectType === 'radio'\">\n <label nz-radio [nzDisabled]=\"isSelectDisabled(data)\" [ngModel]=\"!!mapOfCheckedId[data[selectField]]\"\n (ngModelChange)=\"onRadioSelect($event, data)\"></label>\n </td>\n <td class=\"hd-table-line-no-col\" [nzWidth]=\"lineNumberColWidthPx\" [nzLeft]=\"lineNumberLeft\"\n *ngIf=\"showTableTotal\">{{ getLineNumber(index) }}</td>\n <ng-container *ngFor=\"let col of tableCols; trackBy: trackByCol\">\n <td *ngIf=\"col.isShow\" [style.max-width.px]=\"getColDisplayWidth(col)\" [nzAlign]=\"col.align\"\n [nzLeft]=\"getLeftSticky(col)\"\n [nzRight]=\"getRightSticky(col)\"\n [ngClass]=\"(col.canWarp && showDetail) ? 'common-td-wrap' : ''\">\n <ng-container *ngIf=\"col.title === '\u64CD\u4F5C';else notOperateTemplate\">\n <div class=\"common-btn-group\">\n <ng-container *ngFor=\"let btn of col.btnList\">\n <ng-container *ngIf=\"!needShowConfirm(btn, data);else showConfirmTemplate\">\n <a *ngIf=\"btn.permission ? btn.permission(data) : true\"\n [class]=\"isDangerBtn(btn, data) ? 'common-danger-btn': ''\"\n (click)=\"triggerEvent(btn.click || null, data)\">{{ getBtnName(btn, data) }}</a>\n </ng-container>\n <ng-template #showConfirmTemplate>\n <a *ngIf=\"btn.permission ? btn.permission(data) : true\"\n [class]=\"isDangerBtn(btn, data) ? 'common-danger-btn': ''\" nz-popconfirm\n [nzPopconfirmTitle]=\"'\u786E\u8BA4\u8981' + getBtnName(btn, data) + '\u5417?'\"\n (nzOnConfirm)=\"triggerEvent(btn.click || null, data)\">{{\n getBtnName(btn, data) }}</a>\n </ng-template>\n </ng-container>\n </div>\n </ng-container>\n <ng-template #notOperateTemplate>\n <ng-container *ngIf=\"hasInlineEdit(col); else displayCellTpl\">\n <div class=\"hd-table-cell-edit\">\n <ng-container [ngSwitch]=\"col.editType\">\n <input *ngSwitchCase=\"'input'\" nz-input class=\"hd-table-cell-edit-control\"\n [placeholder]=\"col.placeholder || ''\"\n [disabled]=\"isEditDisabled(col, data)\"\n [ngModel]=\"data[col.name]\"\n (ngModelChange)=\"onCellChange(col, data, $event)\" />\n <nz-input-number *ngSwitchCase=\"'inputNumber'\" class=\"hd-table-cell-edit-control\"\n [nzPlaceHolder]=\"col.placeholder || ''\"\n [nzDisabled]=\"isEditDisabled(col, data)\"\n [nzMin]=\"getInputNumberProp(col, 'min', 0)\"\n [nzMax]=\"getInputNumberProp(col, 'max', 99999999)\"\n [nzStep]=\"getInputNumberProp(col, 'step', 1)\"\n [nzPrecision]=\"getInputNumberProp(col, 'precision', 4)\"\n [ngModel]=\"data[col.name]\"\n (ngModelChange)=\"onCellChange(col, data, $event)\">\n </nz-input-number>\n <nz-select *ngSwitchCase=\"'select'\" class=\"hd-table-cell-edit-control\"\n [nzPlaceHolder]=\"col.placeholder || '\u8BF7\u9009\u62E9'\"\n [nzDisabled]=\"isEditDisabled(col, data)\"\n [nzAllowClear]=\"col.selectOption && col.selectOption.hdAllowClear !== false\"\n [nzShowSearch]=\"!col.selectOption || col.selectOption.hdShowSearch !== false\"\n [nzServerSearch]=\"!!(col.selectOption && col.selectOption.hdServerSearch)\"\n [ngModel]=\"data[col.name]\"\n (ngModelChange)=\"onSelectChange(col, data, $event)\"\n (nzOpenChange)=\"onSelectOpenChange(col, data, $event)\"\n (nzOnSearch)=\"onSelectSearch(col, data, $event)\">\n <nz-option *ngFor=\"let selectItem of getSelectList(col, data)\"\n [nzValue]=\"selectItem[col.selectOption.value]\"\n [nzLabel]=\"getSelectOptionLabel(col, selectItem)\">\n </nz-option>\n </nz-select>\n <nz-date-picker *ngSwitchCase=\"'date'\" class=\"hd-table-cell-edit-control\"\n [nzPlaceHolder]=\"col.placeholder || '\u8BF7\u9009\u62E9\u65E5\u671F'\"\n [nzDisabled]=\"isEditDisabled(col, data)\"\n [nzDisabledDate]=\"getDisabledDate(col)\"\n [nzShowToday]=\"isDateShowToday(col)\"\n [nzShowTime]=\"isDateShowTime(col)\"\n [nzFormat]=\"getDateFormat(col, false)\"\n [ngModel]=\"data[col.name]\"\n (ngModelChange)=\"onCellChange(col, data, $event)\">\n </nz-date-picker>\n <nz-range-picker *ngSwitchCase=\"'dateRange'\" class=\"hd-table-cell-edit-control\"\n [nzPlaceHolder]=\"getRangePlaceholder(col)\"\n [nzDisabled]=\"isEditDisabled(col, data)\"\n [nzDisabledDate]=\"getDisabledDate(col)\"\n [nzFormat]=\"getDateFormat(col, true)\"\n [ngModel]=\"data[col.name]\"\n (ngModelChange)=\"onCellChange(col, data, $event)\">\n </nz-range-picker>\n </ng-container>\n </div>\n </ng-container>\n <ng-template #displayCellTpl>\n <div [class.hd-table-cell-with-actions]=\"col.btnList && col.btnList.length\">\n <div class=\"hd-table-cell-value\"\n [class.hd-table-cell-value--rowno]=\"hasRowNo(col)\"\n [class.hd-table-cell-value--edit]=\"isEditable(col, data)\">\n <ng-container *ngIf=\"col.name === 'state' || col.isState;else otherTemplate\">\n <hd-status [status]=\"data[getStateField(col)]\">\n <ng-container *ngIf=\"(data | hdTableCell:col) as cell\">\n <span *ngIf=\"cell.overflow && !(col.canWarp && showDetail)\" class=\"hd-table-cell-ellipsis\" nz-tooltip\n [nzTooltipTitle]=\"cell.title\">{{ cell.display }}</span>\n <span *ngIf=\"!cell.overflow || (col.canWarp && showDetail)\">{{ cell.display }}</span>\n </ng-container>\n </hd-status>\n </ng-container>\n <ng-template #otherTemplate>\n <ng-container *ngIf=\"col.click && (!col.canClick || col.canClick(data));else noClickTemplate\">\n <ng-container *ngIf=\"(data | hdTableCell:col) as cell\">\n <a *ngIf=\"cell.overflow && !(col.canWarp && showDetail)\" class=\"hd-table-cell-ellipsis\" nz-tooltip\n [nzTooltipTitle]=\"cell.title\"\n [ngStyle]=\"{'color': getLinkCellColor(col, data, cell.isEmpty)}\"\n (click)=\"triggerEvent(col.click || null, data)\">{{ cell.display }}</a>\n <a *ngIf=\"!cell.overflow || (col.canWarp && showDetail)\"\n [ngStyle]=\"{'color': getLinkCellColor(col, data, cell.isEmpty)}\"\n (click)=\"triggerEvent(col.click || null, data)\">{{ cell.display }}</a>\n </ng-container>\n </ng-container>\n <ng-template #noClickTemplate>\n <ng-container *ngIf=\"(data | hdTableCell:col) as cell\">\n <span *ngIf=\"cell.overflow && !(col.canWarp && showDetail)\" class=\"hd-table-cell-ellipsis\" nz-tooltip\n [nzTooltipTitle]=\"cell.title\"\n [ngStyle]=\"{'color': getPlainCellColor(col, data)}\">{{ cell.display }}</span>\n <span *ngIf=\"!cell.overflow || (col.canWarp && showDetail)\"\n [ngStyle]=\"{'color': getPlainCellColor(col, data)}\">{{ cell.display }}</span>\n </ng-container>\n </ng-template>\n </ng-template>\n <span class=\"hd-table-row-no\" *ngIf=\"hasRowNo(col) && getRowNoText(col, data, index)\">\n <i class=\"hd-table-row-no-bar\"></i>{{ getRowNoText(col, data, index) }}\n </span>\n <a *ngIf=\"isEditable(col, data)\" class=\"hd-table-edit-icon\" href=\"javascript:;\" title=\"\u7F16\u8F91\"\n (click)=\"onEditClick($event, col, data)\">\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"\n aria-hidden=\"true\">\n <path fill-rule=\"evenodd\" clip-rule=\"evenodd\"\n d=\"M8.10797 1.42626C8.44968 1.08456 9.0037 1.08456 9.34541 1.42626L10.9746 3.05542C11.3163 3.39713 11.3163 3.95115 10.9746 4.29286L5.01002 10.2574C4.87077 10.3967 4.68863 10.4849 4.49305 10.5078L2.72936 10.7142C2.18281 10.7782 1.71357 10.3278 1.7551 9.77914L1.89441 7.93871C1.9102 7.73007 2.00024 7.53399 2.14819 7.38604L8.10797 1.42626ZM7.67304 3.51111L8.88972 4.72779L9.94337 3.67414L8.72669 2.45746L7.67304 3.51111ZM8.06477 5.55274L6.84808 4.33606L3.04959 8.13456L2.94515 9.51434L4.25672 9.36079L8.06477 5.55274ZM12.25 12.8333L1.75 12.8333V11.6666L12.25 11.6666V12.8333Z\"\n fill=\"currentColor\" />\n </svg>\n </a>\n </div>\n <div class=\"common-btn-group hd-table-cell-actions\" *ngIf=\"col.btnList && col.btnList.length\">\n <ng-container *ngFor=\"let btn of col.btnList\">\n <ng-container *ngIf=\"!needShowConfirm(btn, data);else cellActionConfirmTpl\">\n <a *ngIf=\"btn.permission ? btn.permission(data) : true\"\n [class]=\"isDangerBtn(btn, data) ? 'common-danger-btn': ''\"\n (click)=\"triggerEvent(btn.click || null, data)\">{{ getBtnName(btn, data) }}</a>\n </ng-container>\n <ng-template #cellActionConfirmTpl>\n <a *ngIf=\"btn.permission ? btn.permission(data) : true\"\n [class]=\"isDangerBtn(btn, data) ? 'common-danger-btn': ''\" nz-popconfirm\n [nzPopconfirmTitle]=\"'\u786E\u8BA4\u8981' + getBtnName(btn, data) + '\u5417?'\"\n (nzOnConfirm)=\"triggerEvent(btn.click || null, data)\">{{\n getBtnName(btn, data) }}</a>\n </ng-template>\n </ng-container>\n </div>\n </div>\n </ng-template>\n </ng-template>\n </td>\n </ng-container>\n</ng-template>\n",
14539
+ template: "<ng-container>\n <hd-button-group>\n <ng-template #buttonGroupLeft>\n <ng-container *ngTemplateOutlet=\"tableLeftButton\"></ng-container>\n <hd-button *ngIf=\"showOperateColWarpButton\" type=\"default\" (click)=\"toggleShowDetail()\">{{showDetail ?\n '\u7F29\u7565\u663E\u793A': '\u5C55\u5F00\u663E\u793A'}}</hd-button>\n </ng-template>\n <ng-template #buttonGroupRight>\n <ng-container *ngTemplateOutlet=\"tableRightButton\"></ng-container>\n <ng-container *ngIf=\"showColSettings\">\n <span class=\"hd-table-col-settings\" nz-dropdown nzTrigger=\"click\" [nzDropdownMenu]=\"menu\"\n [nzVisible]=\"isDropdownVisible\" (click)=\"confirmDropdown()\" title=\"\u5217\u8BBE\u7F6E\">\n <svg class=\"hd-table-col-settings-icon\" width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\" aria-hidden=\"true\">\n <path fill-rule=\"evenodd\" clip-rule=\"evenodd\"\n d=\"M4.92031 1.80756C5.02551 1.42884 5.37033 1.16675 5.76339 1.16675H8.23667C8.62973 1.16675 8.97455 1.42884 9.07975 1.80756L9.37802 2.88133L10.4571 2.60273C10.8377 2.50448 11.2371 2.67206 11.4336 3.01245L12.6703 5.15438C12.8668 5.49478 12.8122 5.92445 12.5369 6.20491L11.7561 7.00008L12.5369 7.79525C12.8122 8.07572 12.8668 8.50539 12.6703 8.84579L11.4336 10.9877C11.2371 11.3281 10.8377 11.4957 10.4571 11.3974L9.37802 11.1188L9.07975 12.1926C8.97455 12.5713 8.62973 12.8334 8.23667 12.8334H5.76339C5.37033 12.8334 5.02551 12.5713 4.92031 12.1926L4.62206 11.1189L3.54315 11.3974C3.16258 11.4957 2.76318 11.3281 2.56666 10.9877L1.33001 8.84579C1.13349 8.50539 1.18806 8.07572 1.46343 7.79525L2.24419 7.00008L1.46344 6.20491C1.18806 5.92445 1.13349 5.49478 1.33002 5.15438L2.56666 3.01245C2.76319 2.67206 3.16258 2.50448 3.54316 2.60273L4.62206 2.88127L4.92031 1.80756ZM4.54541 10.843L4.54552 10.8433L4.54541 10.843ZM5.98508 2.33341L5.66952 3.46945C5.54185 3.92906 5.06958 4.20173 4.60771 4.08249L3.46618 3.78778L2.45122 5.54572L3.2773 6.38705C3.6115 6.72742 3.6115 7.27275 3.2773 7.61312L2.45122 8.45444L3.46617 10.2124L4.60771 9.91768C5.06958 9.79844 5.54185 10.0711 5.66952 10.5307L5.98508 11.6667H8.01498L8.33056 10.5307C8.45823 10.071 8.9305 9.79838 9.39237 9.91762L10.5341 10.2124L11.5491 8.45444L10.723 7.61312C10.3888 7.27275 10.3888 6.72742 10.723 6.38705L11.5491 5.54572L10.5341 3.78778L9.39237 4.08254C8.9305 4.20178 8.45823 3.92912 8.33056 3.46951L8.01498 2.33341H5.98508ZM7.00003 5.83342C6.3557 5.83342 5.83337 6.35575 5.83337 7.00008C5.83337 7.64441 6.3557 8.16675 7.00003 8.16675C7.64436 8.16675 8.1667 7.64441 8.1667 7.00008C8.1667 6.35575 7.64436 5.83342 7.00003 5.83342ZM4.6667 7.00008C4.6667 5.71142 5.71137 4.66675 7.00003 4.66675C8.2887 4.66675 9.33337 5.71142 9.33337 7.00008C9.33337 8.28875 8.2887 9.33342 7.00003 9.33342C5.71137 9.33342 4.6667 8.28875 4.6667 7.00008Z\"\n fill=\"currentColor\" />\n </svg>\n </span>\n <nz-dropdown-menu #menu=\"nzDropdownMenu\">\n <div class=\"hd-table-col-settings-dropdown\">\n <div class=\"hd-table-col-settings-list\">\n <div *ngIf=\"showListNodes && nowListNodes.length > 0\" nz-menu style=\"padding: 5px 10px;\">\n <nz-tree *ngIf=\"showListNodes\" [nzData]=\"nowListNodes\" nzCheckable nzDraggable nzBlockNode\n nzShowExpand=\"false\" (nzCheckBoxChange)=\"checkAction($event)\" [nzBeforeDrop]=\"beforeDrop\"\n [nzTreeTemplate]=\"nzTreeTemplate\">\n </nz-tree>\n <ng-template #nzTreeTemplate let-node>\n <span\n class=\"ng-tns-c31-110 draggable ng-star-inserted ant-tree-node-content-wrapper ant-tree-node-content-wrapper-close\"\n [title]=\"node.key\" draggable=\"true\" aria-grabbed=\"true\">\n <span class=\"ant-tree-title\">\n <div class=\"hd-table-tree-node\">\n <span>{{node.key}}</span>\n <div *ngIf=\"!node.origin.disabled\" class=\"hd-table-tree-node-img\">\n <i nz-icon nzType=\"caret-up\" nzTheme=\"outline\"></i>\n <i nz-icon nzType=\"caret-down\" nzTheme=\"outline\"></i>\n </div>\n </div>\n </span>\n </span>\n </ng-template>\n </div>\n <div *ngIf=\"showListNodes && hideListNodes.length > 0\" nz-menu style=\"padding: 5px 10px;\">\n <nz-tree *ngIf=\"showListNodes\" [nzData]=\"hideListNodes\" nzCheckable nzShowExpand=\"false\"\n (nzCheckBoxChange)=\"checkAction($event)\">\n </nz-tree>\n </div>\n </div>\n <div class=\"hd-table-col-settings-footer\">\n <hd-button style=\"margin-right: 4px;\" type=\"default\" size=\"small\" (clickAction)=\"cancelDropdown()\">\u53D6\u6D88\n </hd-button>\n <hd-button type=\"primary\" size=\"small\" (clickAction)=\"submitGrids()\">\u5B8C\u6210</hd-button>\n </div>\n </div>\n </nz-dropdown-menu>\n </ng-container>\n </ng-template>\n </hd-button-group>\n <hd-space type=\"row\" size=\"12\"></hd-space>\n <ng-container *ngTemplateOutlet=\"tableTotal\"></ng-container>\n <hd-space *ngIf=\"tableTotal\" type=\"row\" size=\"12\"></hd-space>\n <nz-table *ngIf=\"showTable\" #hdTable class=\"hd-table-container\" [class.hd-table--virtual]=\"useVirtualScroll\"\n [class.hd-table--scroll-y]=\"!!(scroll && scroll.y)\" [class.hd-table--scroll-x]=\"!!(scroll && scroll.x)\"\n [class.hd-table--fluid-x]=\"fluidHorizontal\" [class.hd-table--has-select]=\"showSelected\"\n [class.hd-table--has-total]=\"showTableTotal\" [nzScroll]=\"scroll\" [nzShowPagination]=\"pagination\"\n [nzShowSizeChanger]=\"pagination\" [nzShowQuickJumper]=\"pagination\" [nzFrontPagination]=\"useFrontPagination\"\n nzSize=\"middle\" [nzData]=\"tableData.content\" [nzTotal]=\"getTableTotalCount()\" [(nzPageIndex)]=\"tablePageIndex\"\n [nzLoading]=\"tableLoading\" [nzPageSizeOptions]=\"[ 10, 50, 100, 200, 500, 1000 ]\" [(nzPageSize)]=\"tablePageSize\"\n (nzPageSizeChange)=\"pagination ? search(true) : null\" (nzPageIndexChange)=\"pagination ? search(false) : null\"\n (nzCurrentPageDataChange)=\"showSelected ? currentPageDataChange($event) : null\" [nzShowTotal]=\"tableTotalTemplate\"\n [nzFooter]=\"showTableTotal ? tableTotalFooter : null\" [nzVirtualScroll]=\"useVirtualScroll\"\n [nzVirtualItemSize]=\"useVirtualScroll ? effectiveVirtualItemSize : 0\" [nzVirtualForTrackBy]=\"virtualTrackByRow\">\n <thead (nzSortChange)=\"sort($event)\" nzSingleSort>\n <tr>\n <th nzWidth=\"40px\" nzLeft=\"0px\" *ngIf=\"showSelected && selectType !== 'radio'\" nzShowCheckbox\n [(nzChecked)]=\"isAllDisplayDataChecked\" [nzIndeterminate]=\"isIndeterminate\"\n (nzCheckedChange)=\"checkAll($event)\"></th>\n <th nzWidth=\"40px\" nzLeft=\"0px\" *ngIf=\"showSelected && selectType === 'radio'\"></th>\n <th class=\"hd-table-line-no-col\" [nzWidth]=\"lineNumberColWidthPx\" [nzLeft]=\"lineNumberLeft\"\n *ngIf=\"showTableTotal\">\u5E8F\u53F7</th>\n <ng-container *ngFor=\"let col of tableCols\">\n <th *ngIf=\"col.isShow\" [nzWidth]=\"getColDisplayWidth(col) + 'px'\" [nzAlign]=\"col.align\"\n [nzLeft]=\"getLeftSticky(col)\" [nzRight]=\"getRightSticky(col)\" nz-resizable nzBounds=\"window\" nzPreview\n (nzResizeEnd)=\"onResize($event, col)\" [nzShowSort]=\"col.canSort\" [nzSortKey]=\"col.name\"\n [nzSort]=\"getColSort(col)\">\n <span class=\"hd-table-col-title\">\n <span class=\"hd-table-col-require\" *ngIf=\"col.require && col.editType\">*</span>\n <ng-container *ngIf=\"getTitleParts(col) as titleParts; else plainTitle\">\n <span class=\"hd-table-title-with-bar\">{{ titleParts[0] }}<i class=\"hd-table-row-no-bar\"></i>{{\n titleParts[1] }}</span>\n </ng-container>\n <ng-template #plainTitle>{{ col.title }}</ng-template>\n </span>\n <nz-resize-handle nzDirection=\"right\">\n <div class=\"resize-trigger\"></div>\n </nz-resize-handle>\n </th>\n </ng-container>\n </tr>\n </thead>\n <tbody>\n <ng-template *ngIf=\"useVirtualScroll\" nz-virtual-scroll let-data let-index=\"index\">\n <tr class=\"hd-table-virtual-row\" [class.hd-table-row-invalid]=\"isInvalidRow(data)\">\n <ng-container *ngTemplateOutlet=\"tableCells; context: { $implicit: data, index: index }\"></ng-container>\n </tr>\n </ng-template>\n <ng-container *ngIf=\"!useVirtualScroll\">\n <tr *ngFor=\"let data of hdTable.data; trackBy: trackByRow; index as i\"\n [class.hd-table-row-invalid]=\"isInvalidRow(data)\">\n <ng-container *ngTemplateOutlet=\"tableCells; context: { $implicit: data, index: i }\"></ng-container>\n </tr>\n </ng-container>\n </tbody>\n <ng-template #tableTotalTemplate>\n \u5171 {{ getTableTotalCount() }} \u6761\u6570\u636E\n </ng-template>\n <ng-template #tableTotalFooter>\n <!--\n \u5217\u603B\u5BBD < \u5BB9\u5668\uFF1Ascroll.x=\u5BB9\u5668\u5BBD\uFF0C\u5DEE\u989D\u8865\u5230\u6700\u540E\u4E1A\u52A1\u5217\uFF08\u52FE\u9009\u4FDD\u6301 40\uFF09\uFF1B\u53EF\u62D6\u62FD\u3002\n \u5217\u603B\u5BBD > \u5BB9\u5668\uFF1Ascroll.x=\u58F0\u660E\u603B\u5BBD\uFF0C\u6A2A\u6EDA\u540C\u6B65\u3002\n -->\n <div class=\"hd-table-total-footer\" [class.hd-table-total-footer--fluid]=\"isTotalFooterFluid\"\n [class.hd-table-total-footer--y-gutter]=\"totalFooterNeedYGutter\">\n <table class=\"hd-table-total-footer-table\" [style.width]=\"totalFooterTableWidth\">\n <colgroup>\n <!-- \u52FE\u9009/\u5E8F\u53F7\u9501\u5BBD\uFF0C\u4E0D\u53C2\u4E0E\u5747\u644A -->\n <col *ngIf=\"showSelected\" style=\"width: 40px; min-width: 40px; max-width: 40px;\" />\n <col *ngIf=\"showTableTotal\" [style.width.px]=\"lineNumberColWidth\" [style.min-width.px]=\"lineNumberColWidth\"\n [style.max-width.px]=\"lineNumberColWidth\" />\n <ng-container *ngFor=\"let col of tableCols; trackBy: trackByCol\">\n <col *ngIf=\"col.isShow\" [style.width.px]=\"getColDisplayWidth(col)\" />\n </ng-container>\n </colgroup>\n <tr class=\"hd-table-total\">\n <td *ngIf=\"showSelected\" class=\"hd-table-total-footer-cell hd-table-total-footer-select\"\n [class.hd-table-total-footer-sticky-left]=\"!isTotalFooterFluid\" style=\"left: 0;\">&nbsp;</td>\n <td class=\"hd-table-total-footer-cell hd-table-total-footer-line-no\"\n [class.hd-table-total-footer-sticky-left]=\"!isTotalFooterFluid\"\n [style.left]=\"!isTotalFooterFluid ? lineNumberLeft : null\">\u5408\u8BA1</td>\n <ng-container *ngFor=\"let col of tableCols; let colIndex = index; trackBy: trackByCol\">\n <td *ngIf=\"col.isShow\" class=\"hd-table-total-footer-cell\"\n [class.hd-table-total-footer-sticky-left]=\"!isTotalFooterFluid && col.fixed === 'left'\"\n [class.hd-table-total-footer-sticky-right]=\"!isTotalFooterFluid && col.fixed === 'right'\"\n [class.hd-table-total-align-left]=\"getTableTotalCellAlign(col, colIndex) === 'left'\"\n [class.hd-table-total-align-center]=\"getTableTotalCellAlign(col, colIndex) === 'center'\"\n [class.hd-table-total-align-right]=\"getTableTotalCellAlign(col, colIndex) === 'right'\"\n [style.left]=\"!isTotalFooterFluid && col.fixed === 'left' ? (col.fixedWidth || 0) + 'px' : null\"\n [style.right]=\"!isTotalFooterFluid && col.fixed === 'right' ? (col.fixedRightWidth || 0) + 'px' : null\"\n [ngStyle]=\"{'text-align': getTableTotalCellAlign(col, colIndex)}\">\n {{ getTableTotalCellValue(col, colIndex) }}\n </td>\n </ng-container>\n </tr>\n </table>\n </div>\n </ng-template>\n </nz-table>\n</ng-container>\n\n<ng-template #tableCells let-data let-index=\"index\">\n <td nzWidth=\"40px\" nzLeft=\"0px\" *ngIf=\"showSelected && selectType !== 'radio'\" nzShowCheckbox\n [nzChecked]=\"mapOfCheckedId[data[selectField]]\" [nzDisabled]=\"isSelectDisabled(data)\"\n (nzCheckedChange)=\"refreshStatus($event, data)\"></td>\n <td nzWidth=\"40px\" nzLeft=\"0px\" class=\"hd-table-select-radio\" *ngIf=\"showSelected && selectType === 'radio'\">\n <label nz-radio [nzDisabled]=\"isSelectDisabled(data)\" [ngModel]=\"!!mapOfCheckedId[data[selectField]]\"\n (ngModelChange)=\"onRadioSelect($event, data)\"></label>\n </td>\n <td class=\"hd-table-line-no-col\" [nzWidth]=\"lineNumberColWidthPx\" [nzLeft]=\"lineNumberLeft\" *ngIf=\"showTableTotal\">{{\n getLineNumber(index) }}</td>\n <ng-container *ngFor=\"let col of tableCols; trackBy: trackByCol\">\n <td *ngIf=\"col.isShow\" [style.max-width.px]=\"getColDisplayWidth(col)\" [nzAlign]=\"col.align\"\n [nzLeft]=\"getLeftSticky(col)\" [nzRight]=\"getRightSticky(col)\"\n [ngClass]=\"(col.canWarp && showDetail) ? 'common-td-wrap' : ''\">\n <ng-container *ngIf=\"col.title === '\u64CD\u4F5C';else notOperateTemplate\">\n <div class=\"common-btn-group\">\n <ng-container *ngFor=\"let btn of col.btnList\">\n <ng-container *ngIf=\"!needShowConfirm(btn, data);else showConfirmTemplate\">\n <a *ngIf=\"btn.permission ? btn.permission(data) : true\"\n [class]=\"isDangerBtn(btn, data) ? 'common-danger-btn': ''\"\n (click)=\"triggerEvent(btn.click || null, data)\">{{ getBtnName(btn, data) }}</a>\n </ng-container>\n <ng-template #showConfirmTemplate>\n <a *ngIf=\"btn.permission ? btn.permission(data) : true\"\n [class]=\"isDangerBtn(btn, data) ? 'common-danger-btn': ''\" nz-popconfirm\n [nzPopconfirmTitle]=\"'\u786E\u8BA4\u8981' + getBtnName(btn, data) + '\u5417?'\"\n (nzOnConfirm)=\"triggerEvent(btn.click || null, data)\">{{\n getBtnName(btn, data) }}</a>\n </ng-template>\n </ng-container>\n </div>\n </ng-container>\n <ng-template #notOperateTemplate>\n <ng-container *ngIf=\"hasInlineEdit(col); else displayCellTpl\">\n <div class=\"hd-table-cell-edit\">\n <ng-container [ngSwitch]=\"col.editType\">\n <input *ngSwitchCase=\"'input'\" nz-input class=\"hd-table-cell-edit-control\"\n [placeholder]=\"col.placeholder || ''\" [disabled]=\"isEditDisabled(col, data)\" [ngModel]=\"data[col.name]\"\n (ngModelChange)=\"onCellChange(col, data, $event)\" />\n <nz-input-number *ngSwitchCase=\"'inputNumber'\" class=\"hd-table-cell-edit-control\"\n [nzPlaceHolder]=\"col.placeholder || ''\" [nzDisabled]=\"isEditDisabled(col, data)\"\n [nzMin]=\"getInputNumberProp(col, 'min', 0)\" [nzMax]=\"getInputNumberProp(col, 'max', 99999999)\"\n [nzStep]=\"getInputNumberProp(col, 'step', 1)\" [nzPrecision]=\"getInputNumberProp(col, 'precision', 4)\"\n [ngModel]=\"data[col.name]\" (ngModelChange)=\"onCellChange(col, data, $event)\">\n </nz-input-number>\n <nz-select *ngSwitchCase=\"'select'\" class=\"hd-table-cell-edit-control\"\n [nzPlaceHolder]=\"col.placeholder || '\u8BF7\u9009\u62E9'\" [nzDisabled]=\"isEditDisabled(col, data)\"\n [nzAllowClear]=\"col.selectOption && col.selectOption.hdAllowClear !== false\"\n [nzShowSearch]=\"!col.selectOption || col.selectOption.hdShowSearch !== false\"\n [nzServerSearch]=\"!!(col.selectOption && col.selectOption.hdServerSearch)\" [ngModel]=\"data[col.name]\"\n (ngModelChange)=\"onSelectChange(col, data, $event)\"\n (nzOpenChange)=\"onSelectOpenChange(col, data, $event)\" (nzOnSearch)=\"onSelectSearch(col, data, $event)\">\n <nz-option *ngFor=\"let selectItem of getSelectList(col, data)\"\n [nzValue]=\"selectItem[col.selectOption.value]\" [nzLabel]=\"getSelectOptionLabel(col, selectItem)\">\n </nz-option>\n </nz-select>\n <nz-date-picker *ngSwitchCase=\"'date'\" class=\"hd-table-cell-edit-control\"\n [nzPlaceHolder]=\"col.placeholder || '\u8BF7\u9009\u62E9\u65E5\u671F'\" [nzDisabled]=\"isEditDisabled(col, data)\"\n [nzDisabledDate]=\"getDisabledDate(col)\" [nzShowToday]=\"isDateShowToday(col)\"\n [nzShowTime]=\"isDateShowTime(col)\" [nzFormat]=\"getDateFormat(col, false)\" [ngModel]=\"data[col.name]\"\n (ngModelChange)=\"onCellChange(col, data, $event)\">\n </nz-date-picker>\n <nz-range-picker *ngSwitchCase=\"'dateRange'\" class=\"hd-table-cell-edit-control\"\n [nzPlaceHolder]=\"getRangePlaceholder(col)\" [nzDisabled]=\"isEditDisabled(col, data)\"\n [nzDisabledDate]=\"getDisabledDate(col)\" [nzFormat]=\"getDateFormat(col, true)\" [ngModel]=\"data[col.name]\"\n (ngModelChange)=\"onCellChange(col, data, $event)\">\n </nz-range-picker>\n </ng-container>\n </div>\n </ng-container>\n <ng-template #displayCellTpl>\n <div [class.hd-table-cell-with-actions]=\"col.btnList && col.btnList.length\">\n <div class=\"hd-table-cell-value\" [class.hd-table-cell-value--rowno]=\"hasRowNo(col)\"\n [class.hd-table-cell-value--edit]=\"isEditable(col, data)\">\n <ng-container *ngIf=\"col.name === 'state' || col.isState;else otherTemplate\">\n <hd-status [status]=\"data[getStateField(col)]\">\n <ng-container *ngIf=\"(data | hdTableCell:col) as cell\">\n <span *ngIf=\"cell.overflow && !(col.canWarp && showDetail)\" class=\"hd-table-cell-ellipsis\"\n nz-tooltip [nzTooltipTitle]=\"cell.title\">{{ cell.display }}</span>\n <span *ngIf=\"!cell.overflow || (col.canWarp && showDetail)\">{{ cell.display }}</span>\n </ng-container>\n </hd-status>\n </ng-container>\n <ng-template #otherTemplate>\n <ng-container *ngIf=\"col.click && (!col.canClick || col.canClick(data));else noClickTemplate\">\n <ng-container *ngIf=\"(data | hdTableCell:col) as cell\">\n <a *ngIf=\"cell.overflow && !(col.canWarp && showDetail)\" class=\"hd-table-cell-ellipsis\" nz-tooltip\n [nzTooltipTitle]=\"cell.title\" [ngStyle]=\"{'color': getLinkCellColor(col, data, cell.isEmpty)}\"\n (click)=\"triggerEvent(col.click || null, data)\">{{ cell.display }}</a>\n <a *ngIf=\"!cell.overflow || (col.canWarp && showDetail)\"\n [ngStyle]=\"{'color': getLinkCellColor(col, data, cell.isEmpty)}\"\n (click)=\"triggerEvent(col.click || null, data)\">{{ cell.display }}</a>\n </ng-container>\n </ng-container>\n <ng-template #noClickTemplate>\n <ng-container *ngIf=\"(data | hdTableCell:col) as cell\">\n <span *ngIf=\"cell.overflow && !(col.canWarp && showDetail)\" class=\"hd-table-cell-ellipsis\"\n nz-tooltip [nzTooltipTitle]=\"cell.title\" [ngStyle]=\"{'color': getPlainCellColor(col, data)}\">{{\n cell.display }}</span>\n <span *ngIf=\"!cell.overflow || (col.canWarp && showDetail)\"\n [ngStyle]=\"{'color': getPlainCellColor(col, data)}\">{{ cell.display }}</span>\n </ng-container>\n </ng-template>\n </ng-template>\n <span class=\"hd-table-row-no\" *ngIf=\"hasRowNo(col) && getRowNoText(col, data, index)\">\n <i class=\"hd-table-row-no-bar\"></i>{{ getRowNoText(col, data, index) }}\n </span>\n <a *ngIf=\"isEditable(col, data)\" class=\"hd-table-edit-icon\" href=\"javascript:;\" title=\"\u7F16\u8F91\"\n (click)=\"onEditClick($event, col, data)\">\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"\n aria-hidden=\"true\">\n <path fill-rule=\"evenodd\" clip-rule=\"evenodd\"\n d=\"M8.10797 1.42626C8.44968 1.08456 9.0037 1.08456 9.34541 1.42626L10.9746 3.05542C11.3163 3.39713 11.3163 3.95115 10.9746 4.29286L5.01002 10.2574C4.87077 10.3967 4.68863 10.4849 4.49305 10.5078L2.72936 10.7142C2.18281 10.7782 1.71357 10.3278 1.7551 9.77914L1.89441 7.93871C1.9102 7.73007 2.00024 7.53399 2.14819 7.38604L8.10797 1.42626ZM7.67304 3.51111L8.88972 4.72779L9.94337 3.67414L8.72669 2.45746L7.67304 3.51111ZM8.06477 5.55274L6.84808 4.33606L3.04959 8.13456L2.94515 9.51434L4.25672 9.36079L8.06477 5.55274ZM12.25 12.8333L1.75 12.8333V11.6666L12.25 11.6666V12.8333Z\"\n fill=\"currentColor\" />\n </svg>\n </a>\n </div>\n <div class=\"common-btn-group hd-table-cell-actions\" *ngIf=\"col.btnList && col.btnList.length\">\n <ng-container *ngFor=\"let btn of col.btnList\">\n <ng-container *ngIf=\"!needShowConfirm(btn, data);else cellActionConfirmTpl\">\n <a *ngIf=\"btn.permission ? btn.permission(data) : true\"\n [class]=\"isDangerBtn(btn, data) ? 'common-danger-btn': ''\"\n (click)=\"triggerEvent(btn.click || null, data)\">{{ getBtnName(btn, data) }}</a>\n </ng-container>\n <ng-template #cellActionConfirmTpl>\n <a *ngIf=\"btn.permission ? btn.permission(data) : true\"\n [class]=\"isDangerBtn(btn, data) ? 'common-danger-btn': ''\" nz-popconfirm\n [nzPopconfirmTitle]=\"'\u786E\u8BA4\u8981' + getBtnName(btn, data) + '\u5417?'\"\n (nzOnConfirm)=\"triggerEvent(btn.click || null, data)\">{{\n getBtnName(btn, data) }}</a>\n </ng-template>\n </ng-container>\n </div>\n </div>\n </ng-template>\n </ng-template>\n </td>\n </ng-container>\n</ng-template>",
14424
14540
  changeDetection: core.ChangeDetectionStrategy.OnPush,
14425
14541
  styles: ["::ng-deep .common-btn-group>a{font-size:14px;font-weight:400;color:#20b95d!important;white-space:nowrap}::ng-deep .common-btn-group .common-danger-btn:hover{color:#f05b24!important}::ng-deep .common-btn-group>a:hover{color:#20bd62!important}::ng-deep .common-btn-group>a:not(:last-child)::after{content:'';margin:0 2px}::ng-deep .common-billNumber>a{color:#3b77e3}button{box-shadow:unset;text-shadow:unset;padding:0 6px!important}::ng-deep .ant-form-item-label>label{color:#4b504e;font-size:14px}::ng-deep .ant-input-number-input{height:32px}::ng-deep .ant-input-number{height:32px}textarea.ant-input{height:auto;min-height:32px}::ng-deep .ant-select-selection--multiple{min-height:32px}::ng-deep .ant-select-selection--multiple .ant-select-selection__rendered>ul>li.ant-select-search--inline:only-child{margin-left:4px}::ng-deep .ant-select-selection__rendered>ul>li{height:26px!important;margin-top:3px!important;line-height:26px!important}::ng-deep .ant-advanced-search-form .ant-form-item{margin-bottom:0!important}::ng-deep .ant-select-selection--single{height:32px!important}::ng-deep .ant-input{height:32px}::ng-deep .ant-input[disabled]:hover{border-color:#d9d9d9!important}::ng-deep .ant-select-selection__rendered{line-height:32px!important}::ng-deep .ant-calendar-range-picker-input{text-align:left!important}::ng-deep .ant-calendar-picker{width:100%!important}::ng-deep .ant-row{margin-right:0!important;margin-left:0!important}::ng-deep .ant-col-6{padding-left:12px;padding-right:12px}::ng-deep .ant-col-12{padding-left:12px;padding-right:12px}::ng-deep .ant-col-18{padding-left:12px;padding-right:12px}::ng-deep .ant-col-24{padding-left:12px;padding-right:12px}::ng-deep .ant-alert-info{background-color:#f5f8f6;border:1px solid #cfe3d4}::ng-deep .hd-table-container .ant-table-td-left-sticky,::ng-deep .hd-table-container .ant-table-td-right-sticky,::ng-deep .hd-table-container .ant-table-th-left-sticky,::ng-deep .hd-table-container .ant-table-th-right-sticky{z-index:2;transform:translateZ(0)}::ng-deep .hd-table-container .ant-table-thead>tr>th.ant-table-th-left-sticky,::ng-deep .hd-table-container .ant-table-thead>tr>th.ant-table-th-right-sticky{background:#f5f8f6!important}::ng-deep .hd-table-container .ant-table-tbody>tr>td.ant-table-td-left-sticky,::ng-deep .hd-table-container .ant-table-tbody>tr>td.ant-table-td-right-sticky{background:#fff}::ng-deep .hd-table-container .ant-table-tbody>tr.ant-table-row-hover>td.ant-table-td-left-sticky,::ng-deep .hd-table-container .ant-table-tbody>tr.ant-table-row-hover>td.ant-table-td-right-sticky,::ng-deep .hd-table-container .ant-table-tbody>tr:hover>td.ant-table-td-left-sticky,::ng-deep .hd-table-container .ant-table-tbody>tr:hover>td.ant-table-td-right-sticky{background:#ecf8f1!important}::ng-deep .hd-table-container .ant-table-scroll-position-left .ant-table-td-right-sticky,::ng-deep .hd-table-container .ant-table-scroll-position-left .ant-table-th-right-sticky,::ng-deep .hd-table-container .ant-table-scroll-position-middle .ant-table-td-right-sticky,::ng-deep .hd-table-container .ant-table-scroll-position-middle .ant-table-th-right-sticky,::ng-deep .hd-table-container .ant-table-scroll-position-right .ant-table-td-right-sticky,::ng-deep .hd-table-container .ant-table-scroll-position-right .ant-table-th-right-sticky{box-shadow:none!important}::ng-deep .hd-table-container .ant-table-fixed-right{right:0!important}:host ::ng-deep th{background:#f5f8f6!important;font-weight:700!important;white-space:nowrap;font-size:14px;font-family:PingFangSC-Medium,PingFang SC;color:#2a3634;padding:8px!important;box-sizing:border-box}:host ::ng-deep td{font-weight:400;font-style:normal;font-size:14px;color:#2a3634;text-align:left;white-space:nowrap;padding:8px!important;box-sizing:border-box}::ng-deep .ant-pagination-options{display:inline-flex;align-items:center}::ng-deep .ant-pagination-options .ant-select,::ng-deep .ant-pagination-options .ant-select-selection--single{min-width:100px}::ng-deep .ant-pagination-options-size-changer.ant-select{min-width:100px}::ng-deep .ant-time-picker{width:100%}::ng-deep .cdk-overlay-pane .hd-cascader-menus.ant-cascader-menus>.ant-cascader-menu:only-child{width:-webkit-max-content!important;width:-moz-max-content!important;width:max-content!important;min-width:var(--hd-cascader-menu-min-width,auto);max-width:560px}::ng-deep .cdk-overlay-pane .hd-cascader-menus.ant-cascader-menus>.ant-cascader-menu:only-child .ant-cascader-menu-item{white-space:nowrap}.ant-input-number-disabled,.ant-input[disabled],.ant-select-disabled{color:#4b504e}.nz-resizable-preview{position:absolute;top:0;left:0;z-index:8;border:1px dashed #d1d1d1}.nz-resizable-handle{position:absolute;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;z-index:9}.nz-resizable-handle-top{width:100%;height:10px;top:-5px;left:0}.nz-resizable-handle-right{height:100%}.nz-resizable-handle-bottom{width:100%;height:10px;bottom:-5px;left:0}.nz-resizable-handle-left{width:10px;height:100%;top:0;left:-5px}.nz-resizable-handle-topRight{width:20px;height:20px;top:-5px;right:-5px;z-index:10}.nz-resizable-handle-bottomRight{width:20px;height:20px;right:-5px;bottom:-5px;z-index:10}.nz-resizable-handle-bottomLeft{width:20px;height:20px;bottom:-5px;left:-5px;z-index:10}.nz-resizable-handle-topLeft{width:20px;height:20px;top:-5px;left:-5px;z-index:10}.nz-resizable:not(.nz-resizable-resizing) .nz-resizable-handle-bottom,.nz-resizable:not(.nz-resizable-resizing) .nz-resizable-handle-top{cursor:row-resize}.nz-resizable:not(.nz-resizable-resizing) .nz-resizable-handle-left,.nz-resizable:not(.nz-resizable-resizing) .nz-resizable-handle-right{cursor:col-resize}.nz-resizable:not(.nz-resizable-resizing) .nz-resizable-handle-bottomRight,.nz-resizable:not(.nz-resizable-resizing) .nz-resizable-handle-topLeft{cursor:nwse-resize}.nz-resizable:not(.nz-resizable-resizing) .nz-resizable-handle-bottomLeft,.nz-resizable:not(.nz-resizable-resizing) .nz-resizable-handle-topRight{cursor:nesw-resize}.hd-table-col-settings{display:inline-flex;align-items:center;justify-content:center;box-sizing:border-box;width:32px;height:32px;padding:0;margin-left:12px;cursor:pointer;color:#2a3634;background:0 0;border:1px solid #e5e6eb;border-radius:4px;vertical-align:middle;flex-shrink:0}.hd-table-col-settings:hover{color:#20b95d;background:#f5f8f6;border-color:#20b95d}.hd-table-col-settings .hd-table-col-settings-icon{display:block;width:14px;height:14px;flex-shrink:0}.hd-table-cell-with-actions{display:inline-flex;flex-wrap:wrap;align-items:center;-moz-column-gap:12px;column-gap:12px;row-gap:6px;max-width:100%}.hd-table-cell-with-actions .hd-table-cell-value{min-width:0}.hd-table-cell-with-actions .hd-table-cell-actions{flex-shrink:0}.hd-table-col-settings-dropdown{background:#fff;border:1px solid #e5e6eb;border-radius:4px;box-shadow:0 6px 16px rgba(0,0,0,.08),0 3px 6px rgba(0,0,0,.06);overflow:hidden}.hd-table-col-settings-list{max-height:400px;overflow-y:auto}.hd-table-col-settings-footer{text-align:right;background:#fff;padding:4px;border-top:1px solid #f0f0f0}.hd-table-container ::ng-deep .ant-pagination-options-quick-jumper input{border-radius:2px;border:1px solid #d9d9d9}.hd-table-container ::ng-deep .ant-pagination-options .ant-select-selection{border-radius:2px}.hd-table-container ::ng-deep .ant-table-thead>tr>th{border-bottom:1px solid #ecf1ed;white-space:nowrap;text-overflow:ellipsis}.hd-table-container ::ng-deep .ant-table-tbody>tr>td{border-bottom:1px solid #ecf1ed;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.hd-table-container ::ng-deep .ant-table-tbody>tr>td.hd-table-line-no-col,.hd-table-container ::ng-deep .ant-table-thead>tr>th.hd-table-line-no-col{width:72px!important;min-width:72px!important;max-width:72px!important;box-sizing:border-box}.hd-table-container ::ng-deep .ant-table-tbody>tr>td.ant-table-selection-column,.hd-table-container ::ng-deep .ant-table-thead>tr>th.ant-table-selection-column{width:40px!important;min-width:40px!important;max-width:40px!important;box-sizing:border-box;padding-left:8px!important;padding-right:8px!important}.hd-table-container .hd-table-cell-value--edit,.hd-table-container .hd-table-cell-value--rowno{display:inline-flex;align-items:center;min-width:0}.hd-table-container .hd-table-cell-value--edit>a:not(.hd-table-edit-icon),.hd-table-container .hd-table-cell-value--edit>hd-status,.hd-table-container .hd-table-cell-value--edit>span:not(.hd-table-row-no),.hd-table-container .hd-table-cell-value--rowno>a:not(.hd-table-edit-icon),.hd-table-container .hd-table-cell-value--rowno>hd-status,.hd-table-container .hd-table-cell-value--rowno>span:not(.hd-table-row-no){min-width:0}.hd-table-container .hd-table-row-no{display:inline-flex;flex-shrink:0;align-items:center;margin-left:4px;color:#1d1f29;font-size:14px;line-height:22px}.hd-table-container .hd-table-row-no-bar{display:inline-block;flex:0 0 auto;align-self:center;width:1px;height:14px;margin-right:4px;background:#1d1f29;vertical-align:middle}.hd-table-container .hd-table-edit-icon{display:inline-flex;flex-shrink:0;align-items:center;justify-content:center;margin-left:2px;width:14px;height:14px;color:#20b95d;line-height:1;cursor:pointer}.hd-table-container .hd-table-edit-icon:hover{color:#20bd62}.hd-table-container .hd-table-edit-icon svg{display:block;width:14px;height:14px}.hd-table-container .hd-table-col-title{display:inline-flex;align-items:center}.hd-table-container .hd-table-col-require{margin-right:4px;color:#f5222d;font-family:SimSun,sans-serif}.hd-table-container .hd-table-title-with-bar{display:inline-flex;align-items:center}.hd-table-container .hd-table-title-with-bar .hd-table-row-no-bar{width:1px;height:14px;margin:0 4px;align-self:center}.hd-table-container ::ng-deep .ant-table-tbody>tr.hd-table-row-invalid.ant-table-row-hover>td,.hd-table-container ::ng-deep .ant-table-tbody>tr.hd-table-row-invalid.ant-table-row-hover>td.ant-table-td-left-sticky,.hd-table-container ::ng-deep .ant-table-tbody>tr.hd-table-row-invalid.ant-table-row-hover>td.ant-table-td-right-sticky,.hd-table-container ::ng-deep .ant-table-tbody>tr.hd-table-row-invalid:hover>td,.hd-table-container ::ng-deep .ant-table-tbody>tr.hd-table-row-invalid:hover>td.ant-table-td-left-sticky,.hd-table-container ::ng-deep .ant-table-tbody>tr.hd-table-row-invalid:hover>td.ant-table-td-right-sticky,.hd-table-container ::ng-deep .ant-table-tbody>tr.hd-table-row-invalid>td,.hd-table-container ::ng-deep .ant-table-tbody>tr.hd-table-row-invalid>td.ant-table-td-left-sticky,.hd-table-container ::ng-deep .ant-table-tbody>tr.hd-table-row-invalid>td.ant-table-td-right-sticky{background:#f7f8fa!important;color:#868a9c!important}.hd-table-container ::ng-deep .ant-table-tbody>tr.hd-table-row-invalid .common-btn-group>a{color:#20b95d!important}.hd-table-container ::ng-deep .ant-table-tbody>tr.hd-table-row-invalid .common-btn-group>a:hover{color:#20bd62!important}.hd-table-container ::ng-deep .ant-table-tbody>tr.hd-table-row-invalid .common-btn-group .common-danger-btn:hover{color:#f05b24!important}.hd-table-container ::ng-deep .ant-table-tbody>tr.hd-table-row-invalid .hd-table-cell-value>a{color:#20b95d}.hd-table-container ::ng-deep .ant-table-tbody>tr.hd-table-row-invalid .common-billNumber>a{color:#3b77e3}.hd-table-container ::ng-deep .ant-table-tbody>tr.hd-table-row-invalid .hd-status-text{color:#868a9c!important}.hd-table-container ::ng-deep cdk-virtual-scroll-viewport.ant-table-body .hd-table-virtual-row>td{box-sizing:border-box}.hd-table-container.hd-table--scroll-x ::ng-deep .ant-table-body>table,.hd-table-container.hd-table--scroll-x ::ng-deep .ant-table-header>table,.hd-table-container.hd-table--scroll-x ::ng-deep .cdk-virtual-scroll-content-wrapper>table{table-layout:fixed}.hd-table-container:not(.hd-table--scroll-y):not(.hd-table--scroll-x) ::ng-deep .ant-table-body{max-height:none!important;overflow-y:visible!important}.hd-table-container.hd-table--scroll-x:not(.hd-table--scroll-y) ::ng-deep .ant-table-body{overflow-y:hidden!important}.hd-table-container.hd-table--fluid-x ::ng-deep .ant-table-body{overflow-x:hidden!important}.hd-table-container.hd-table--fluid-x.hd-table--scroll-y ::ng-deep .ant-table-header{margin-bottom:0!important;padding-bottom:0!important;overflow-x:hidden!important}.hd-table-container.hd-table--has-total ::ng-deep .ant-table-footer{padding:0;overflow:hidden;background:#fafafa;border-top:1px solid #e8e8e8}.hd-table-total-footer{width:100%;box-sizing:border-box;overflow-x:auto;overflow-y:hidden;background:#fafafa;scrollbar-width:thin;scrollbar-color:transparent transparent}.hd-table-total-footer::-webkit-scrollbar{width:12px;height:0}.hd-table-total-footer::-webkit-scrollbar-track{background:0 0}.hd-table-total-footer::-webkit-scrollbar-thumb{background:padding-box;border:4px solid transparent}.hd-table-total-footer::-webkit-scrollbar-corner{background:0 0}.hd-table-total-footer.hd-table-total-footer--y-gutter{overflow-y:scroll}.hd-table-total-footer.hd-table-total-footer--fluid{overflow-x:hidden}.hd-table-total-footer-table{table-layout:fixed;border-collapse:separate;border-spacing:0}.hd-table-total-footer-cell{padding:12px 8px;font-weight:500;background:#fafafa;box-sizing:border-box;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;border-bottom:0}.hd-table-total-footer-cell.hd-table-total-align-left{text-align:left!important}.hd-table-total-footer-cell.hd-table-total-align-center{text-align:center!important}.hd-table-total-footer-cell.hd-table-total-align-right{text-align:right!important}.hd-table-select-radio{text-align:center}.hd-table-select-radio ::ng-deep .ant-radio-wrapper{margin-right:0}.hd-table-total-footer-select{width:40px;min-width:40px;max-width:40px;padding-left:8px;padding-right:8px;text-align:center}.hd-table-total-footer-line-no{width:72px;min-width:72px;max-width:72px}.hd-table-total-footer-sticky-left,.hd-table-total-footer-sticky-right{position:-webkit-sticky;position:sticky;z-index:2;background:#fafafa}::ng-deep .ant-dropdown-menu{border-radius:0}::ng-deep .ant-dropdown{margin-top:8px!important}.common-td-wrap{white-space:normal!important;word-break:break-all}.hd-table-cell-ellipsis{display:block;max-width:100%;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.nz-resizable-preview{border-width:0 1px 0 0}.resize-trigger{width:10px;height:15px;position:relative;top:calc((100% - 15px)/ 2)}.resize-trigger::after{position:absolute;top:calc((100% - 15px)/ 2);left:0;background:#d5d5d5;content:'';width:1px;height:15px;z-index:1}.nz-resizable-handle-right{position:absolute;width:10px;top:0;right:-5px;z-index:inherit}::ng-deep .ant-table-th-right-sticky .nz-resizable-handle-right{right:0}.hd-table-tree-node{display:inline-flex;align-items:center;padding-right:10px}.hd-table-tree-node .hd-table-tree-node-img{display:flex;flex-direction:column;position:absolute;right:0;margin-top:-2.5px}.hd-table-tree-node .hd-table-tree-node-img i{opacity:.3}.hd-table-tree-node .hd-table-tree-node-img i:last-child{margin-top:-5px}img{width:20px;height:20px}.ant-table-th-left-sticky{z-index:2}::ng-deep .ant-table-thead>tr>th .ant-table-header-column .ant-table-column-sorters>:not(.ant-table-column-sorter){position:unset}.hd-table-cell-edit{width:100%;min-width:0}.hd-table-cell-edit-control{width:100%!important}::ng-deep .hd-table-cell-edit .ant-calendar-picker,::ng-deep .hd-table-cell-edit .ant-input,::ng-deep .hd-table-cell-edit .ant-input-number,::ng-deep .hd-table-cell-edit .ant-select{width:100%}::ng-deep .hd-table-cell-edit .ant-input,::ng-deep .hd-table-cell-edit .ant-input-number,::ng-deep .hd-table-cell-edit .ant-select-selection{height:32px}::ng-deep .hd-table-cell-edit .ant-input-number-input{height:30px}::ng-deep .hd-table-cell-edit .ant-select-selection__rendered{line-height:30px}"]
14426
14542
  }] }
@@ -14658,24 +14774,22 @@
14658
14774
  */
14659
14775
  HdTableComponent.prototype.virtualScrollActive;
14660
14776
  /**
14661
- * 列宽合计(含勾选/序号 + fluid 补宽),footer 表宽与横向 scroll 共用
14777
+ * 实际渲染列宽合计(含勾选/序号 + 补宽),合计 footer 表宽用
14662
14778
  * @type {?}
14663
14779
  */
14664
14780
  HdTableComponent.prototype.tableColWidthTotal;
14665
14781
  /**
14666
- * fluid:声明列总宽 < 容器时,把差额补到最后一列业务列(不改缓存宽),
14667
- * 并设 scroll.x = 容器宽,避免表宽 100% 均摊撑开勾选列;拖拽改宽仍写 col.width。
14782
+ * 补到 fluidExtraTargetCol 上的宽度;只影响展示,不写回 col.width(列宽缓存、拖拽仍用声明宽)
14668
14783
  * @type {?}
14669
14784
  */
14670
14785
  HdTableComponent.prototype.fluidExtraWidth;
14671
14786
  /**
14672
- * 列总宽未超出容器(fluid 补宽吃满):不需要真正横滚,
14673
- * 用于关掉 ng-zorro fixed-header 带来的常驻 X 轴滚动条。
14787
+ * 列少、靠补宽吃满容器:模板据此加 hd-table--fluid-x,隐藏 fixed-header 常驻的横滚槽
14674
14788
  * @type {?}
14675
14789
  */
14676
14790
  HdTableComponent.prototype.fluidHorizontal;
14677
14791
  /**
14678
- * fluid 补宽目标列缓存,避免模板每格 CD 时反复扫 tableCols
14792
+ * 接收补宽的列,缓存起来避免模板每个单元格都扫一遍 tableCols
14679
14793
  * @type {?}
14680
14794
  * @private
14681
14795
  */