fantasy-ngzorro 2.2.13 → 2.2.15

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.
@@ -1103,6 +1103,28 @@ function measureTableColWidth(nzTable) {
1103
1103
  }
1104
1104
  return max;
1105
1105
  }
1106
+ /**
1107
+ * 用于判断是否需要 scroll.x 的视口宽。
1108
+ * 有纵向滚动条时 clientWidth 会少一截,若直接拿去比列宽,会「竖滚条导致误开横滚」;
1109
+ * 这里用 offsetWidth(含滚动条槽)作为屏幕可展示宽度。
1110
+ * @param {?} nzTable
1111
+ * @param {?=} hostClass
1112
+ * @return {?}
1113
+ */
1114
+ function getTableScrollXViewportWidth(nzTable, hostClass = "hd-table-container") {
1115
+ if (!nzTable || !nzTable.tableMainElement) {
1116
+ return 0;
1117
+ }
1118
+ /** @type {?} */
1119
+ const tableMain = (/** @type {?} */ (nzTable.tableMainElement.nativeElement));
1120
+ /** @type {?} */
1121
+ const scrollBody = ((/** @type {?} */ (tableMain.querySelector("cdk-virtual-scroll-viewport.ant-table-body")))) ||
1122
+ ((/** @type {?} */ (tableMain.querySelector(".ant-table-body"))));
1123
+ if (scrollBody && scrollBody.offsetWidth > 0) {
1124
+ return scrollBody.offsetWidth;
1125
+ }
1126
+ return getTableViewportWidth(nzTable, hostClass);
1127
+ }
1106
1128
  /**
1107
1129
  * 无数据或列宽未超出容器时不启用横向 scroll
1108
1130
  * @param {?} nzTable
@@ -1122,9 +1144,10 @@ function resolveAutoTableScroll(nzTable, hasData, colWidth) {
1122
1144
  return null;
1123
1145
  }
1124
1146
  /** @type {?} */
1125
- const viewportWidth = getTableViewportWidth(nzTable);
1147
+ const viewportWidth = getTableScrollXViewportWidth(nzTable);
1126
1148
  if (viewportWidth > 0) {
1127
- return width > viewportWidth ? { x: `${Math.ceil(width)}px` } : null;
1149
+ // 允许 1px 误差,避免亚像素导致误开横滚
1150
+ return width > viewportWidth + 1 ? { x: `${Math.ceil(width)}px` } : null;
1128
1151
  }
1129
1152
  if (typeof window !== "undefined" && width > window.innerWidth - 32) {
1130
1153
  return { x: `${Math.ceil(width)}px` };
@@ -8778,16 +8801,6 @@ if (false) {
8778
8801
  /** @type {?} */
8779
8802
  OperateBtn.prototype.permission;
8780
8803
  }
8781
- class HdTableTotalOption {
8782
- }
8783
- if (false) {
8784
- /** @type {?} */
8785
- HdTableTotalOption.prototype.columnNumber;
8786
- /** @type {?} */
8787
- HdTableTotalOption.prototype.insertIndex;
8788
- /** @type {?} */
8789
- HdTableTotalOption.prototype.insertName;
8790
- }
8791
8804
  class TableCacheOption {
8792
8805
  constructor() {
8793
8806
  this.colWidths = new Map(); // name -> width
@@ -8836,10 +8849,12 @@ if (false) {
8836
8849
  */
8837
8850
  class HdTableComponent {
8838
8851
  /**
8852
+ * @param {?} hostEl
8839
8853
  * @param {?} cdr
8840
8854
  * @param {?} commonSessionService
8841
8855
  */
8842
- constructor(cdr, commonSessionService) {
8856
+ constructor(hostEl, cdr, commonSessionService) {
8857
+ this.hostEl = hostEl;
8843
8858
  this.cdr = cdr;
8844
8859
  this.commonSessionService = commonSessionService;
8845
8860
  this.tableCols = [];
@@ -8847,7 +8862,7 @@ class HdTableComponent {
8847
8862
  this.showOperateColWarpButton = false;
8848
8863
  this.virtualScroll = true;
8849
8864
  this.selectField = "billNumber";
8850
- // 合计区域
8865
+ // 合计区域(类型与 hd-detail-lines 的 TotalOption 一致)
8851
8866
  this.showTableTotal = false;
8852
8867
  this.sortEvent = new EventEmitter();
8853
8868
  this.selectEvent = new EventEmitter();
@@ -8912,8 +8927,9 @@ class HdTableComponent {
8912
8927
  * 记录当前是否处于虚拟滚动模式,用于切换 pageSize 时重建表格
8913
8928
  */
8914
8929
  this.virtualScrollActive = null;
8930
+ /** 可见列总宽,用于判断是否需要横向滚动 */
8915
8931
  /**
8916
- * 可见列总宽,用于判断是否需要横向滚动
8932
+ * 列宽合计(含勾选/序号),footer 表宽与横向 scroll 共用
8917
8933
  */
8918
8934
  this.tableColWidthTotal = 0;
8919
8935
  /**
@@ -8925,6 +8941,24 @@ class HdTableComponent {
8925
8941
  */
8926
8942
  this.currentSortKey = null;
8927
8943
  this.currentSortValue = null;
8944
+ this.totalFooterScrollBoundBody = null;
8945
+ this.totalFooterScrollHandler = null;
8946
+ this.totalFooterSyncRetry = 0;
8947
+ /**
8948
+ * 表体有竖滚条时合计 footer 才预留右侧滚动条槽
8949
+ */
8950
+ this.totalFooterNeedYGutter = false;
8951
+ /**
8952
+ * 视口/容器尺寸变化时重算 scroll.x 与合计对齐
8953
+ */
8954
+ this.viewportResizeTimer = null;
8955
+ this.boundOnViewportResize = null;
8956
+ this.hostResizeObserver = null;
8957
+ /**
8958
+ * 序号列固定宽(含 padding,可容纳 6 位如 199995)。
8959
+ * 不锁死时表体会随位数变宽(1→~64px,199995→~67px),合计行对不齐。
8960
+ */
8961
+ this.lineNumberColWidth = 72;
8928
8962
  this.trackByRow = (/**
8929
8963
  * @param {?} index
8930
8964
  * @param {?} data
@@ -9004,6 +9038,13 @@ class HdTableComponent {
9004
9038
  storeName: "hd-fscm-store",
9005
9039
  });
9006
9040
  }
9041
+ /**
9042
+ * @return {?}
9043
+ */
9044
+ ngOnDestroy() {
9045
+ this.unbindTotalFooterScrollSync();
9046
+ this.unbindViewportResizeSync();
9047
+ }
9007
9048
  /**
9008
9049
  * @return {?}
9009
9050
  */
@@ -9025,6 +9066,7 @@ class HdTableComponent {
9025
9066
  userCode: "dev",
9026
9067
  };
9027
9068
  }
9069
+ this.bindViewportResizeSync();
9028
9070
  this.deleteHideItem();
9029
9071
  if (!this.tableCols || this.tableCols.length === 0) {
9030
9072
  return;
@@ -9051,6 +9093,13 @@ class HdTableComponent {
9051
9093
  * @return {?}
9052
9094
  */
9053
9095
  ngOnChanges(changes) {
9096
+ if (changes["tableData"] ||
9097
+ changes["tableTotalOption"] ||
9098
+ changes["showTableTotal"] ||
9099
+ changes["columnsNumber"] ||
9100
+ changes["tableCols"]) {
9101
+ this.calculateTableTotal();
9102
+ }
9054
9103
  if (changes &&
9055
9104
  changes["tableData"] &&
9056
9105
  changes["tableData"]["currentValue"] &&
@@ -9255,6 +9304,55 @@ class HdTableComponent {
9255
9304
  getLeftSticky(col) {
9256
9305
  return col.fixed === "left" ? `${col.fixedWidth || 0}px` : null;
9257
9306
  }
9307
+ /**
9308
+ * 开启合计时序号列的 left(勾选列占 40px)
9309
+ * @return {?}
9310
+ */
9311
+ get lineNumberLeft() {
9312
+ return this.showSelected ? "40px" : "0px";
9313
+ }
9314
+ /**
9315
+ * @return {?}
9316
+ */
9317
+ get lineNumberColWidthPx() {
9318
+ return this.lineNumberColWidth + "px";
9319
+ }
9320
+ /**
9321
+ * 列总宽未超出容器:无横向 scroll,表体列会被撑满,合计走 fluid(width:100%)。
9322
+ * 列总宽超出:有 scroll.x,合计走固定表宽 + 横滚同步。
9323
+ * @return {?}
9324
+ */
9325
+ get isTotalFooterFluid() {
9326
+ return !(this.scroll && this.scroll.x);
9327
+ }
9328
+ /**
9329
+ * fluid → 100%;固定 → scroll.x(与表体同一套横向宽度)
9330
+ * @return {?}
9331
+ */
9332
+ get totalFooterTableWidth() {
9333
+ if (this.isTotalFooterFluid) {
9334
+ return "100%";
9335
+ }
9336
+ return this.scroll && this.scroll.x
9337
+ ? String(this.scroll.x)
9338
+ : this.tableColWidthTotal > 0
9339
+ ? this.tableColWidthTotal + "px"
9340
+ : "100%";
9341
+ }
9342
+ /**
9343
+ * 当前页行号(跨页连续,从 1 开始)
9344
+ * @param {?} index
9345
+ * @return {?}
9346
+ */
9347
+ getLineNumber(index) {
9348
+ /** @type {?} */
9349
+ const page = Number(this.tablePageIndex) > 0 ? Number(this.tablePageIndex) : 1;
9350
+ /** @type {?} */
9351
+ const size = Number(this.tablePageSize) > 0 ? Number(this.tablePageSize) : 0;
9352
+ /** @type {?} */
9353
+ const rowIndex = Number(index) >= 0 ? Number(index) : 0;
9354
+ return (page - 1) * size + rowIndex + 1;
9355
+ }
9258
9356
  /**
9259
9357
  * @return {?}
9260
9358
  */
@@ -10005,6 +10103,10 @@ class HdTableComponent {
10005
10103
  (e) => e.title === col.title ? Object.assign({}, e, { width: tempWidth }) : e));
10006
10104
  this.dealScroll();
10007
10105
  this.cdr.markForCheck();
10106
+ setTimeout((/**
10107
+ * @return {?}
10108
+ */
10109
+ () => this.syncTotalFooterWithBody()));
10008
10110
  }
10009
10111
  /**
10010
10112
  * @return {?}
@@ -10108,23 +10210,15 @@ class HdTableComponent {
10108
10210
  this.tableData.content.length);
10109
10211
  }
10110
10212
  /**
10111
- * 列总宽超出外层容器才启用横向 scroll(不能用 table 自身宽度,会被 scroll.x 撑宽)
10213
+ * 列总宽超出外层容器才启用横向 scroll。
10214
+ * 以 dealScroll 累计的声明列宽为准,不用 DOM 自然测宽(内容不截断会偏大,导致列能放下也开横滚)。
10112
10215
  * @private
10113
10216
  * @param {?} colWidth
10114
10217
  * @return {?}
10115
10218
  */
10116
10219
  resolveScrollX(colWidth) {
10117
10220
  /** @type {?} */
10118
- let width = colWidth;
10119
- if (this.nzTableComponent) {
10120
- /** @type {?} */
10121
- const measured = measureTableColWidth(this.nzTableComponent);
10122
- if (measured > width) {
10123
- width = measured;
10124
- }
10125
- }
10126
- /** @type {?} */
10127
- const autoScroll = resolveAutoTableScroll(this.nzTableComponent, this.hasTableData(), width);
10221
+ const autoScroll = resolveAutoTableScroll(this.nzTableComponent, this.hasTableData(), colWidth);
10128
10222
  return autoScroll ? autoScroll.x : null;
10129
10223
  }
10130
10224
  /**
@@ -10140,6 +10234,10 @@ class HdTableComponent {
10140
10234
  if (this.scroll &&
10141
10235
  this.scroll.x === scrollX &&
10142
10236
  this.scroll.y === currentY) {
10237
+ setTimeout((/**
10238
+ * @return {?}
10239
+ */
10240
+ () => this.syncTotalFooterWithBody()));
10143
10241
  return;
10144
10242
  }
10145
10243
  // 保持 y 不变,防止运行中拆/合 header 导致横向同步失效
@@ -10151,25 +10249,234 @@ class HdTableComponent {
10151
10249
  () => this.syncHeaderBodyScrollLeft()));
10152
10250
  }
10153
10251
  /**
10154
- * 手动把表体横向滚动同步到表头(兜底 ng-zorro 监听丢失的情况)
10252
+ * 手动把表体横向滚动同步到表头 / 合计 footer(兜底 ng-zorro 监听丢失的情况)
10155
10253
  * @private
10156
10254
  * @return {?}
10157
10255
  */
10158
10256
  syncHeaderBodyScrollLeft() {
10159
- if (!this.nzTableComponent || !this.scroll || !this.scroll.x) {
10257
+ if (!this.nzTableComponent) {
10160
10258
  return;
10161
10259
  }
10162
10260
  /** @type {?} */
10163
10261
  const header = (/** @type {?} */ (((/** @type {?} */ (this.nzTableComponent))).tableHeaderNativeElement));
10164
10262
  /** @type {?} */
10165
- const body = (/** @type {?} */ (((/** @type {?} */ (this.nzTableComponent))).mixTableBodyNativeElement));
10166
- if (!header || !body) {
10263
+ const body = this.getTableBodyScrollEl();
10264
+ if (this.scroll && this.scroll.x && header && body) {
10265
+ if (header.scrollLeft !== body.scrollLeft) {
10266
+ header.scrollLeft = body.scrollLeft;
10267
+ }
10268
+ }
10269
+ this.syncTotalFooterWithBody();
10270
+ }
10271
+ /**
10272
+ * 取表体横向滚动容器(虚拟滚动优先 viewport)
10273
+ * @private
10274
+ * @return {?}
10275
+ */
10276
+ getTableBodyScrollEl() {
10277
+ if (!this.nzTableComponent) {
10278
+ return null;
10279
+ }
10280
+ /** @type {?} */
10281
+ const mix = (/** @type {?} */ (((/** @type {?} */ (this.nzTableComponent))).mixTableBodyNativeElement));
10282
+ if (mix) {
10283
+ return mix;
10284
+ }
10285
+ /** @type {?} */
10286
+ const host = this.hostEl && ((/** @type {?} */ (this.hostEl.nativeElement)));
10287
+ if (!host) {
10288
+ return null;
10289
+ }
10290
+ return (((/** @type {?} */ (host.querySelector("cdk-virtual-scroll-viewport.ant-table-body")))) ||
10291
+ ((/** @type {?} */ (host.querySelector(".ant-table-body")))) ||
10292
+ null);
10293
+ }
10294
+ /**
10295
+ * @private
10296
+ * @return {?}
10297
+ */
10298
+ getTotalFooterScrollEl() {
10299
+ /** @type {?} */
10300
+ const host = this.hostEl && ((/** @type {?} */ (this.hostEl.nativeElement)));
10301
+ return host
10302
+ ? ((/** @type {?} */ (host.querySelector(".hd-table-total-footer"))))
10303
+ : null;
10304
+ }
10305
+ /**
10306
+ * 表体是否出现纵向滚动条(含滚动条槽宽)
10307
+ * @private
10308
+ * @param {?} body
10309
+ * @return {?}
10310
+ */
10311
+ bodyHasVerticalScrollbar(body) {
10312
+ if (!body) {
10313
+ return false;
10314
+ }
10315
+ return (body.scrollHeight > body.clientHeight + 1 ||
10316
+ body.offsetWidth - body.clientWidth > 1);
10317
+ }
10318
+ /**
10319
+ * 合计 footer 与表体联动:
10320
+ * - fluid(列未撑满):不横滚、不测宽,表宽 100% 与表体同比例拉伸;
10321
+ * - fixed(有 scroll.x):同步 scrollLeft;
10322
+ * - 仅当表体有竖滚条时预留右侧槽,行少无竖滚时不占位。
10323
+ * @private
10324
+ * @return {?}
10325
+ */
10326
+ syncTotalFooterWithBody() {
10327
+ if (!this.showTableTotal) {
10328
+ this.unbindTotalFooterScrollSync();
10329
+ if (this.totalFooterNeedYGutter) {
10330
+ this.totalFooterNeedYGutter = false;
10331
+ this.cdr.markForCheck();
10332
+ }
10167
10333
  return;
10168
10334
  }
10169
- if (header.scrollLeft !== body.scrollLeft) {
10170
- header.scrollLeft = body.scrollLeft;
10335
+ /** @type {?} */
10336
+ const footer = this.getTotalFooterScrollEl();
10337
+ /** @type {?} */
10338
+ const body = this.getTableBodyScrollEl();
10339
+ if (!footer) {
10340
+ if (this.totalFooterSyncRetry < 10) {
10341
+ this.totalFooterSyncRetry++;
10342
+ setTimeout((/**
10343
+ * @return {?}
10344
+ */
10345
+ () => this.syncTotalFooterWithBody()), 50);
10346
+ }
10347
+ return;
10348
+ }
10349
+ this.totalFooterSyncRetry = 0;
10350
+ /** @type {?} */
10351
+ const needYGutter = !!(body && this.bodyHasVerticalScrollbar(body));
10352
+ if (this.totalFooterNeedYGutter !== needYGutter) {
10353
+ this.totalFooterNeedYGutter = needYGutter;
10354
+ this.cdr.markForCheck();
10355
+ }
10356
+ if (this.isTotalFooterFluid) {
10357
+ this.unbindTotalFooterScrollSync();
10358
+ footer.scrollLeft = 0;
10359
+ return;
10360
+ }
10361
+ if (body) {
10362
+ this.syncTotalFooterScrollLeft(body.scrollLeft);
10363
+ this.bindTotalFooterScrollSync(body);
10364
+ }
10365
+ }
10366
+ /**
10367
+ * @private
10368
+ * @param {?} scrollLeft
10369
+ * @return {?}
10370
+ */
10371
+ syncTotalFooterScrollLeft(scrollLeft) {
10372
+ /** @type {?} */
10373
+ const footer = this.getTotalFooterScrollEl();
10374
+ if (footer && footer.scrollLeft !== scrollLeft) {
10375
+ footer.scrollLeft = scrollLeft;
10171
10376
  }
10172
10377
  }
10378
+ /**
10379
+ * @private
10380
+ * @param {?} body
10381
+ * @return {?}
10382
+ */
10383
+ bindTotalFooterScrollSync(body) {
10384
+ if (!this.showTableTotal || !body || this.isTotalFooterFluid) {
10385
+ return;
10386
+ }
10387
+ if (this.totalFooterScrollBoundBody === body &&
10388
+ this.totalFooterScrollHandler) {
10389
+ return;
10390
+ }
10391
+ this.unbindTotalFooterScrollSync();
10392
+ this.totalFooterScrollBoundBody = body;
10393
+ this.totalFooterScrollHandler = (/**
10394
+ * @return {?}
10395
+ */
10396
+ () => {
10397
+ this.syncTotalFooterScrollLeft(body.scrollLeft);
10398
+ });
10399
+ body.addEventListener("scroll", this.totalFooterScrollHandler, (/** @type {?} */ ({
10400
+ passive: true,
10401
+ })));
10402
+ }
10403
+ /**
10404
+ * @private
10405
+ * @return {?}
10406
+ */
10407
+ unbindTotalFooterScrollSync() {
10408
+ if (this.totalFooterScrollBoundBody && this.totalFooterScrollHandler) {
10409
+ this.totalFooterScrollBoundBody.removeEventListener("scroll", this.totalFooterScrollHandler);
10410
+ }
10411
+ this.totalFooterScrollBoundBody = null;
10412
+ this.totalFooterScrollHandler = null;
10413
+ }
10414
+ /**
10415
+ * 监听窗口 / 容器宽度变化:重新判定 scroll.x(fluid↔fixed)与合计右侧竖滚槽,
10416
+ * 避免拉宽/缩窄屏幕后合计行宽与表体错位。
10417
+ * @private
10418
+ * @return {?}
10419
+ */
10420
+ bindViewportResizeSync() {
10421
+ this.boundOnViewportResize = (/**
10422
+ * @return {?}
10423
+ */
10424
+ () => this.scheduleViewportScrollSync());
10425
+ if (typeof window !== "undefined") {
10426
+ window.addEventListener("resize", this.boundOnViewportResize);
10427
+ }
10428
+ /** @type {?} */
10429
+ const RO = typeof window !== "undefined" ? ((/** @type {?} */ (window))).ResizeObserver : null;
10430
+ if (RO && this.hostEl && this.hostEl.nativeElement) {
10431
+ this.hostResizeObserver = new RO((/**
10432
+ * @return {?}
10433
+ */
10434
+ () => this.scheduleViewportScrollSync()));
10435
+ this.hostResizeObserver.observe(this.hostEl.nativeElement);
10436
+ }
10437
+ }
10438
+ /**
10439
+ * @private
10440
+ * @return {?}
10441
+ */
10442
+ unbindViewportResizeSync() {
10443
+ if (this.boundOnViewportResize && typeof window !== "undefined") {
10444
+ window.removeEventListener("resize", this.boundOnViewportResize);
10445
+ }
10446
+ this.boundOnViewportResize = null;
10447
+ if (this.hostResizeObserver) {
10448
+ this.hostResizeObserver.disconnect();
10449
+ this.hostResizeObserver = null;
10450
+ }
10451
+ if (this.viewportResizeTimer != null) {
10452
+ clearTimeout(this.viewportResizeTimer);
10453
+ this.viewportResizeTimer = null;
10454
+ }
10455
+ }
10456
+ /**
10457
+ * @private
10458
+ * @return {?}
10459
+ */
10460
+ scheduleViewportScrollSync() {
10461
+ if (this.viewportResizeTimer != null) {
10462
+ clearTimeout(this.viewportResizeTimer);
10463
+ }
10464
+ this.viewportResizeTimer = setTimeout((/**
10465
+ * @return {?}
10466
+ */
10467
+ () => {
10468
+ this.viewportResizeTimer = null;
10469
+ if (!this.tableCols || !this.tableCols.length) {
10470
+ return;
10471
+ }
10472
+ this.syncHorizontalScroll();
10473
+ // 等表体布局稳定后再校合计竖滚槽 / 横滚同步
10474
+ setTimeout((/**
10475
+ * @return {?}
10476
+ */
10477
+ () => this.syncTotalFooterWithBody()), 50);
10478
+ }), 100);
10479
+ }
10173
10480
  /**
10174
10481
  * @return {?}
10175
10482
  */
@@ -10179,6 +10486,9 @@ class HdTableComponent {
10179
10486
  if (this.showSelected) {
10180
10487
  colWidth += 40;
10181
10488
  }
10489
+ if (this.showTableTotal) {
10490
+ colWidth += this.lineNumberColWidth; // 序号列(固定宽,不随位数变化)
10491
+ }
10182
10492
  this.tableCols.forEach((/**
10183
10493
  * @param {?} item
10184
10494
  * @return {?}
@@ -10286,6 +10596,164 @@ class HdTableComponent {
10286
10596
  this.tableSearchEvent.emit(reset);
10287
10597
  }
10288
10598
  }
10599
+ /**
10600
+ * 底部合计:与 hd-detail-lines 相同,使用 TotalOption(insertIndex / insertValue)。
10601
+ * 开启后强制展示序号列,「合计」落在序号列下;
10602
+ * insertIndex 从 1 起对应可见数据列;未传 insertValue 时按该列 name 对 content 求和。
10603
+ * @return {?}
10604
+ */
10605
+ calculateTableTotal() {
10606
+ if (!this.showTableTotal ||
10607
+ !this.tableTotalOption ||
10608
+ !this.tableTotalOption.length) {
10609
+ this.tableTotalOptionList = [];
10610
+ return;
10611
+ }
10612
+ /** @type {?} */
10613
+ const visibleCols = (this.tableCols || []).filter((/**
10614
+ * @param {?} c
10615
+ * @return {?}
10616
+ */
10617
+ (c) => c && c.isShow !== false));
10618
+ // columnsNumber 含序号列(与 detail-lines 一致),数据槽位数 = columnsNumber - 1
10619
+ /** @type {?} */
10620
+ const configured = Number(this.columnsNumber);
10621
+ /** @type {?} */
10622
+ const columnNumber = configured > 1
10623
+ ? configured - 1
10624
+ : configured === 1
10625
+ ? 1
10626
+ : visibleCols.length;
10627
+ if (!columnNumber || columnNumber < 1) {
10628
+ this.tableTotalOptionList = [];
10629
+ return;
10630
+ }
10631
+ this.tableTotalOptionList = new Array(columnNumber).fill("");
10632
+ /** @type {?} */
10633
+ const content = this.tableData && this.tableData.content ? this.tableData.content : [];
10634
+ this.tableTotalOption.forEach((/**
10635
+ * @param {?} item
10636
+ * @return {?}
10637
+ */
10638
+ (item) => {
10639
+ if (item == null || !item.insertIndex || item.insertIndex < 1) {
10640
+ return;
10641
+ }
10642
+ /** @type {?} */
10643
+ let value = item.insertValue;
10644
+ // 未传 insertValue 时:按 insertIndex 对应可见列 name 自动求和
10645
+ if (value == null || value === "") {
10646
+ /** @type {?} */
10647
+ const col = visibleCols[item.insertIndex - 1];
10648
+ /** @type {?} */
10649
+ const field = col && typeof col.name === "string" ? col.name : null;
10650
+ if (!field) {
10651
+ return;
10652
+ }
10653
+ /** @type {?} */
10654
+ let sum = 0;
10655
+ /** @type {?} */
10656
+ let hasValue = false;
10657
+ content.forEach((/**
10658
+ * @param {?} row
10659
+ * @return {?}
10660
+ */
10661
+ (row) => {
10662
+ /** @type {?} */
10663
+ const raw = row ? row[field] : null;
10664
+ if (raw == null || raw === "") {
10665
+ return;
10666
+ }
10667
+ /** @type {?} */
10668
+ const num = Number(raw);
10669
+ if (!isNaN(num)) {
10670
+ sum += num;
10671
+ hasValue = true;
10672
+ }
10673
+ }));
10674
+ if (!hasValue) {
10675
+ return;
10676
+ }
10677
+ value = sum;
10678
+ }
10679
+ /** @type {?} */
10680
+ const colAtIndex = visibleCols[item.insertIndex - 1];
10681
+ this.tableTotalOptionList[item.insertIndex - 1] = {
10682
+ value,
10683
+ align: item.align || (colAtIndex && colAtIndex.align) || "left",
10684
+ showDecimal: item.showDecimal || false,
10685
+ preserveNumber: item.preserveNumber != null ? item.preserveNumber : 2,
10686
+ isHide: item.isHide || false,
10687
+ };
10688
+ }));
10689
+ }
10690
+ /**
10691
+ * @private
10692
+ * @param {?} col
10693
+ * @param {?} colIndex
10694
+ * @return {?}
10695
+ */
10696
+ getTableTotalCellMeta(col, colIndex) {
10697
+ if (!col || !this.tableTotalOptionList || !this.tableTotalOptionList.length) {
10698
+ return null;
10699
+ }
10700
+ /** @type {?} */
10701
+ let visibleIndex = -1;
10702
+ for (let i = 0; i <= colIndex; i++) {
10703
+ /** @type {?} */
10704
+ const c = this.tableCols[i];
10705
+ if (c && c.isShow !== false) {
10706
+ visibleIndex++;
10707
+ }
10708
+ }
10709
+ if (visibleIndex < 0 || visibleIndex >= this.tableTotalOptionList.length) {
10710
+ return null;
10711
+ }
10712
+ /** @type {?} */
10713
+ const meta = this.tableTotalOptionList[visibleIndex];
10714
+ return meta && typeof meta === "object" ? meta : null;
10715
+ }
10716
+ /**
10717
+ * 合计单元格展示文案(对齐 detail-lines 小数规则)
10718
+ * @param {?} col
10719
+ * @param {?} colIndex
10720
+ * @return {?}
10721
+ */
10722
+ getTableTotalCellValue(col, colIndex) {
10723
+ /** @type {?} */
10724
+ const meta = this.getTableTotalCellMeta(col, colIndex);
10725
+ if (!meta || meta.isHide) {
10726
+ return "";
10727
+ }
10728
+ /** @type {?} */
10729
+ const value = meta.value;
10730
+ if (!(value || value === 0)) {
10731
+ return "";
10732
+ }
10733
+ /** @type {?} */
10734
+ const preserve = meta.preserveNumber != null ? Number(meta.preserveNumber) : 2;
10735
+ if (value % 1 === 0 && !meta.showDecimal) {
10736
+ return value;
10737
+ }
10738
+ /** @type {?} */
10739
+ const factor = Math.pow(10, preserve);
10740
+ return (Math.round(Number(value) * factor) / factor).toFixed(preserve);
10741
+ }
10742
+ /**
10743
+ * @param {?} col
10744
+ * @param {?} colIndex
10745
+ * @return {?}
10746
+ */
10747
+ getTableTotalCellAlign(col, colIndex) {
10748
+ /** @type {?} */
10749
+ const meta = this.getTableTotalCellMeta(col, colIndex);
10750
+ /** @type {?} */
10751
+ const align = (meta && meta.align) || (col && col.align) || "left";
10752
+ if (align === "right" || align === "center" || align === "left") {
10753
+ return align;
10754
+ }
10755
+ return "left";
10756
+ }
10289
10757
  /**
10290
10758
  * 底部「共 n 条」:非分页/前端分页用 content.length,服务端分页用 totalElements
10291
10759
  * @return {?}
@@ -10750,13 +11218,14 @@ class HdTableComponent {
10750
11218
  HdTableComponent.decorators = [
10751
11219
  { type: Component, args: [{
10752
11220
  selector: "hd-table",
10753
- 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 <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-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 [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\" [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\" nzShowCheckbox [(nzChecked)]=\"isAllDisplayDataChecked\"\n [nzIndeterminate]=\"isIndeterminate\" (nzCheckedChange)=\"checkAll($event)\"></th>\n <ng-container *ngFor=\"let col of tableCols\">\n <th *ngIf=\"col.isShow\" [nzWidth]=\"col.width + '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 <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 <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 <tfoot *ngIf=\"showTableTotal\">\n <tr class=\"hd-table-total\">\n <td>\u5408\u8BA1</td>\n <ng-container *ngFor=\"let tableTotalOption of tableTotalOptionList\">\n <td>{{ tableTotalOption }}</td>\n </ng-container>\n </tr>\n </tfoot>\n <ng-template #tableTotalTemplate>\n \u5171 {{ getTableTotalCount() }} \u6761\u6570\u636E\n </ng-template>\n </nz-table>\n</ng-container>\n\n<ng-template #tableCells let-data let-index=\"index\">\n <td nzLeft=\"0px\" *ngIf=\"showSelected\" nzShowCheckbox [nzChecked]=\"mapOfCheckedId[data[selectField]]\"\n [nzDisabled]=\"isSelectDisabled(data)\" (nzCheckedChange)=\"refreshStatus($event, data)\"></td>\n <ng-container *ngFor=\"let col of tableCols; trackBy: trackByCol\">\n <td *ngIf=\"col.isShow\" [ngStyle]=\"{'max-width': col.width + 'px'}\" [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 [ngModel]=\"data[col.name]\"\n (ngModelChange)=\"onSelectChange(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 </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",
11221
+ 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 <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-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--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\" nzShowCheckbox [(nzChecked)]=\"isAllDisplayDataChecked\"\n [nzIndeterminate]=\"isIndeterminate\" (nzCheckedChange)=\"checkAll($event)\"></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]=\"col.width + '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 <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 <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\uFF1Afluid\uFF0C\u8868\u5BBD 100%\uFF0C\u4E0E\u8868\u4F53\u540C\u6BD4\u4F8B\u88AB\u6491\u5F00\uFF0C\u4E0D\u518D\u6309\u58F0\u660E px \u9501\u6B7B\uFF1B\n \u5217\u603B\u5BBD > \u5BB9\u5668\uFF1Afixed\uFF0C\u8868\u5BBD = scroll.x\uFF0C\u6A2A\u6EDA\u4E0E\u8868\u4F53\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]=\"col.width\" />\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\" nzShowCheckbox [nzChecked]=\"mapOfCheckedId[data[selectField]]\"\n [nzDisabled]=\"isSelectDisabled(data)\" (nzCheckedChange)=\"refreshStatus($event, data)\"></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\" [ngStyle]=\"{'max-width': col.width + 'px'}\" [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 [ngModel]=\"data[col.name]\"\n (ngModelChange)=\"onSelectChange(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 </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",
10754
11222
  changeDetection: ChangeDetectionStrategy.OnPush,
10755
- 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__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 .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-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 .hd-table-total>td{border:0!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}::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-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}"]
11223
+ 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__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 .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-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--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-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-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}"]
10756
11224
  }] }
10757
11225
  ];
10758
11226
  /** @nocollapse */
10759
11227
  HdTableComponent.ctorParameters = () => [
11228
+ { type: ElementRef },
10760
11229
  { type: ChangeDetectorRef },
10761
11230
  { type: CommonSessionService }
10762
11231
  ];
@@ -10773,6 +11242,7 @@ HdTableComponent.propDecorators = {
10773
11242
  rowInvalidField: [{ type: Input }],
10774
11243
  showTableTotal: [{ type: Input }],
10775
11244
  tableTotalOption: [{ type: Input }],
11245
+ columnsNumber: [{ type: Input }],
10776
11246
  sortEvent: [{ type: Output }],
10777
11247
  selectEvent: [{ type: Output }],
10778
11248
  tableSearchEvent: [{ type: Output }],
@@ -10852,6 +11322,12 @@ if (false) {
10852
11322
  HdTableComponent.prototype.showTableTotal;
10853
11323
  /** @type {?} */
10854
11324
  HdTableComponent.prototype.tableTotalOption;
11325
+ /**
11326
+ * 合计列总数(含序号列,与 hd-detail-lines 一致);
11327
+ * 不传则按当前可见数据列数 + 1(序号)推算。
11328
+ * @type {?}
11329
+ */
11330
+ HdTableComponent.prototype.columnsNumber;
10855
11331
  /** @type {?} */
10856
11332
  HdTableComponent.prototype.sortEvent;
10857
11333
  /** @type {?} */
@@ -10962,9 +11438,8 @@ if (false) {
10962
11438
  */
10963
11439
  HdTableComponent.prototype.virtualScrollActive;
10964
11440
  /**
10965
- * 可见列总宽,用于判断是否需要横向滚动
11441
+ * 列宽合计(含勾选/序号),footer 表宽与横向 scroll 共用
10966
11442
  * @type {?}
10967
- * @private
10968
11443
  */
10969
11444
  HdTableComponent.prototype.tableColWidthTotal;
10970
11445
  /**
@@ -10986,6 +11461,48 @@ if (false) {
10986
11461
  HdTableComponent.prototype.currentSortValue;
10987
11462
  /** @type {?} */
10988
11463
  HdTableComponent.prototype.nzTableComponent;
11464
+ /**
11465
+ * @type {?}
11466
+ * @private
11467
+ */
11468
+ HdTableComponent.prototype.totalFooterScrollBoundBody;
11469
+ /**
11470
+ * @type {?}
11471
+ * @private
11472
+ */
11473
+ HdTableComponent.prototype.totalFooterScrollHandler;
11474
+ /**
11475
+ * @type {?}
11476
+ * @private
11477
+ */
11478
+ HdTableComponent.prototype.totalFooterSyncRetry;
11479
+ /**
11480
+ * 表体有竖滚条时合计 footer 才预留右侧滚动条槽
11481
+ * @type {?}
11482
+ */
11483
+ HdTableComponent.prototype.totalFooterNeedYGutter;
11484
+ /**
11485
+ * 视口/容器尺寸变化时重算 scroll.x 与合计对齐
11486
+ * @type {?}
11487
+ * @private
11488
+ */
11489
+ HdTableComponent.prototype.viewportResizeTimer;
11490
+ /**
11491
+ * @type {?}
11492
+ * @private
11493
+ */
11494
+ HdTableComponent.prototype.boundOnViewportResize;
11495
+ /**
11496
+ * @type {?}
11497
+ * @private
11498
+ */
11499
+ HdTableComponent.prototype.hostResizeObserver;
11500
+ /**
11501
+ * 序号列固定宽(含 padding,可容纳 6 位如 199995)。
11502
+ * 不锁死时表体会随位数变宽(1→~64px,199995→~67px),合计行对不齐。
11503
+ * @type {?}
11504
+ */
11505
+ HdTableComponent.prototype.lineNumberColWidth;
10989
11506
  /** @type {?} */
10990
11507
  HdTableComponent.prototype.trackByRow;
10991
11508
  /**
@@ -10997,6 +11514,11 @@ if (false) {
10997
11514
  HdTableComponent.prototype.trackByCol;
10998
11515
  /** @type {?} */
10999
11516
  HdTableComponent.prototype.beforeDrop;
11517
+ /**
11518
+ * @type {?}
11519
+ * @private
11520
+ */
11521
+ HdTableComponent.prototype.hostEl;
11000
11522
  /**
11001
11523
  * @type {?}
11002
11524
  * @private
@@ -11581,7 +12103,10 @@ class TotalOption {
11581
12103
  if (false) {
11582
12104
  /** @type {?} */
11583
12105
  TotalOption.prototype.insertIndex;
11584
- /** @type {?} */
12106
+ /**
12107
+ * 合计值;hd-table 可不传,按 insertIndex 对应列对 content 自动求和
12108
+ * @type {?}
12109
+ */
11585
12110
  TotalOption.prototype.insertValue;
11586
12111
  /** @type {?} */
11587
12112
  TotalOption.prototype.align;
@@ -11836,5 +12361,5 @@ const Utils = {
11836
12361
  * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
11837
12362
  */
11838
12363
 
11839
- export { ButtonSize, ButtonType, CascaderOption, CheckboxOption, ColWidth, ColorOption, ExplainOption, FantasyNgzorroModule, Filter, FilterListType, FormItem, FormLine, FormLineType, FormLinesCacheOption, FormListType, HD_CASCADER_MENU_CLASS, HD_FILTER_DEFAULT_SCHEME_NAME, HD_FILTER_SCHEME_STORE, HdAccessoryFile, HdAccessoryGroup, HdAccessoryListComponent, HdButtonService, HdCurrentTableComponent, HdDetailFormFieldType, HdDetailFormService, HdFilterScheme, HdFilterSchemeStore, HdFilterService, HdFormLinesService, HdFormService, HdLogComponent, HdLogService, HdOption, HdOverlayCleanupService, HdTableCellChange, HdTableColumn, HdTableTotalOption, InputNumber, OperateBtn, Page, RadioOption, SelectOption, SelectOptionTableColumn, SelectOptionTableColumnIcon, StaticConst, TableCacheOption, TableColumn, TableTotalOption, TotalOption, TreeGrid, Utils, ValidatorKey, cascaderPinyinFilter, getCascaderMenuClassName, getCascaderMenuStyle, getCascaderShowSearch, HdComponentModule as ɵa, HdButtonModule as ɵb, HdTableComponent as ɵba, HdTableCellPipe as ɵbb, HdTipModule as ɵbc, HdTipComponent as ɵbd, HdAccessoryListModule as ɵbe, HdPopconfirmModule as ɵbf, HdPopconfirmComponent as ɵbg, HdLogModule as ɵbh, HdButtonComponent as ɵc, HdButtonGroupModule as ɵd, HdButtonGroupComponent as ɵe, HdDetailFormModule as ɵf, HdDetailFormComponent as ɵg, HdDetailLinesModule as ɵh, HdSpaceModule as ɵi, HdSpaceComponent as ɵj, HdDetailLinesComponent as ɵk, HdDetailLinesPageModule as ɵl, HdDetailLinesPageComponent as ɵm, HdDetailTipModule as ɵn, HdDetailTipComponent as ɵo, HdFilterModule as ɵp, HdFormModule as ɵq, HdFormComponent as ɵr, HdFilterComponent as ɵs, HdFormLinesModule as ɵt, HdFormLinesComponent as ɵu, CommonSessionService as ɵv, HdStatusModule as ɵw, HdStatusComponent as ɵx, HdCurrentTableModule as ɵy, HdTableModule as ɵz };
12364
+ export { ButtonSize, ButtonType, CascaderOption, CheckboxOption, ColWidth, ColorOption, ExplainOption, FantasyNgzorroModule, Filter, FilterListType, FormItem, FormLine, FormLineType, FormLinesCacheOption, FormListType, HD_CASCADER_MENU_CLASS, HD_FILTER_DEFAULT_SCHEME_NAME, HD_FILTER_SCHEME_STORE, HdAccessoryFile, HdAccessoryGroup, HdAccessoryListComponent, HdButtonService, HdCurrentTableComponent, HdDetailFormFieldType, HdDetailFormService, HdFilterScheme, HdFilterSchemeStore, HdFilterService, HdFormLinesService, HdFormService, HdLogComponent, HdLogService, HdOption, HdOverlayCleanupService, HdTableCellChange, HdTableColumn, InputNumber, OperateBtn, Page, RadioOption, SelectOption, SelectOptionTableColumn, SelectOptionTableColumnIcon, StaticConst, TableCacheOption, TableColumn, TableTotalOption, TotalOption, TreeGrid, Utils, ValidatorKey, cascaderPinyinFilter, getCascaderMenuClassName, getCascaderMenuStyle, getCascaderShowSearch, HdComponentModule as ɵa, HdButtonModule as ɵb, HdTableComponent as ɵba, HdTableCellPipe as ɵbb, HdTipModule as ɵbc, HdTipComponent as ɵbd, HdAccessoryListModule as ɵbe, HdPopconfirmModule as ɵbf, HdPopconfirmComponent as ɵbg, HdLogModule as ɵbh, HdButtonComponent as ɵc, HdButtonGroupModule as ɵd, HdButtonGroupComponent as ɵe, HdDetailFormModule as ɵf, HdDetailFormComponent as ɵg, HdDetailLinesModule as ɵh, HdSpaceModule as ɵi, HdSpaceComponent as ɵj, HdDetailLinesComponent as ɵk, HdDetailLinesPageModule as ɵl, HdDetailLinesPageComponent as ɵm, HdDetailTipModule as ɵn, HdDetailTipComponent as ɵo, HdFilterModule as ɵp, HdFormModule as ɵq, HdFormComponent as ɵr, HdFilterComponent as ɵs, HdFormLinesModule as ɵt, HdFormLinesComponent as ɵu, CommonSessionService as ɵv, HdStatusModule as ɵw, HdStatusComponent as ɵx, HdCurrentTableModule as ɵy, HdTableModule as ɵz };
11840
12365
  //# sourceMappingURL=fantasy-ngzorro.js.map