zmdms-webui 1.9.7 → 1.9.8
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.
- package/dist/es/dynamicsetting/index.css +1 -1
- package/dist/es/table/excel.js +128 -39
- package/dist/es/table/hooks.js +10 -1
- package/dist/es/table/interface.d.ts +12 -1
- package/dist/es/table/useColumns.js +11 -1
- package/dist/index.dark.css +1 -1
- package/dist/index.default.css +1 -1
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
.zt-sortable-new{cursor:move;font-size:13px;line-height:1.5;overflow:hidden;padding:8px 0;text-align:left}.zt-sortable-new .zt-sortable--item{align-items:center;display:flex;justify-content:space-between;padding:0 16px}.zt-sortable-new .zt-sortable--children{display:flex}.zt-sortable-new .zt-sortable--children .zt-sortable-new{border-bottom:none;padding:8px 26px}.zt-sortable-new.no-move{cursor:no-drop}.zt-sortable-new .zt-checkbox{font-size:13px}.zt-sortable-new:hover{background-color:#ebf3fe}.ztxk-dynamic--more{cursor:pointer;height:20px}.ant-dropdown-show-arrow.ztxk-dynamic--more--drop{padding-top:0}.ztxk-dynamic--more--drop.ant-dropdown-placement-bottomRight>.ant-dropdown-arrow{top:-5px}.dynamic-drawer .ant-drawer-header{padding:10px 12px}.dynamic-drawer .ant-drawer-header .ant-drawer-title>div{align-items:center;color:#768696;display:flex;font-size:16px}.dynamic-drawer .ant-drawer-header .ant-drawer-title>div .search-drawer--title-text{font-size:14px;margin-left:10px}.dynamic-drawer .ant-drawer-header .ant-drawer-title>div .search-drawer--title-text>span{font-size:13px}.dynamic-drawer .ant-drawer-body{padding:0}.dynamic-drawer .ant-drawer-body .ant-checkbox-group{width:100%}.dynamic-drawer .ant-drawer-footer{border-top:none;display:flex;justify-content:space-between;padding:0}.dynamic-drawer .ant-drawer-footer>button{border:none;border-radius:0;height:40px;width:33%}.dynamic-drawer-section-title{background:#f5f5f5;border-radius:6px;font-size:14px;font-weight:700;padding:4px}
|
|
1
|
+
.zt-sortable-new{cursor:move;font-size:13px;line-height:1.5;overflow:hidden;padding:8px 0;text-align:left}.zt-sortable-new .zt-sortable--item{align-items:center;display:flex;justify-content:space-between;padding:0 16px}.zt-sortable-new .zt-sortable--item span{white-space:break-spaces}.zt-sortable-new .zt-sortable--children{display:flex}.zt-sortable-new .zt-sortable--children .zt-sortable-new{border-bottom:none;padding:8px 26px}.zt-sortable-new .zt-sortable--children span{white-space:break-spaces}.zt-sortable-new.no-move{cursor:no-drop}.zt-sortable-new .zt-checkbox{font-size:13px}.zt-sortable-new:hover{background-color:#ebf3fe}.ztxk-dynamic--more{cursor:pointer;height:20px}.ant-dropdown-show-arrow.ztxk-dynamic--more--drop{padding-top:0}.ztxk-dynamic--more--drop.ant-dropdown-placement-bottomRight>.ant-dropdown-arrow{top:-5px}.dynamic-drawer .ant-drawer-header{padding:10px 12px}.dynamic-drawer .ant-drawer-header .ant-drawer-title>div{align-items:center;color:#768696;display:flex;font-size:16px}.dynamic-drawer .ant-drawer-header .ant-drawer-title>div .search-drawer--title-text{font-size:14px;margin-left:10px}.dynamic-drawer .ant-drawer-header .ant-drawer-title>div .search-drawer--title-text>span{font-size:13px}.dynamic-drawer .ant-drawer-body{padding:0}.dynamic-drawer .ant-drawer-body .ant-checkbox-group{width:100%}.dynamic-drawer .ant-drawer-footer{border-top:none;display:flex;justify-content:space-between;padding:0}.dynamic-drawer .ant-drawer-footer>button{border:none;border-radius:0;height:40px;width:33%}.dynamic-drawer-section-title{background:#f5f5f5;border-radius:6px;font-size:14px;font-weight:700;padding:4px}
|
package/dist/es/table/excel.js
CHANGED
|
@@ -1,15 +1,16 @@
|
|
|
1
1
|
import { __spreadArray, __assign, __awaiter, __generator } from '../_virtual/_tslib.js';
|
|
2
2
|
import ExcelJS from '../node_modules/exceljs/dist/exceljs.min.js';
|
|
3
|
-
import { useMergeKeys } from './hooks.js';
|
|
4
|
-
import { useMemo } from 'react';
|
|
3
|
+
import { useMergeKeys, useNumKeys } from './hooks.js';
|
|
5
4
|
import { useMemoizedFn } from 'ahooks';
|
|
6
5
|
import { IS_SUMMARY, MERGE_ROW_SPANS } from './constant.js';
|
|
6
|
+
import { exactRound } from 'zmdms-utils';
|
|
7
|
+
import dayjs from 'dayjs';
|
|
7
8
|
|
|
8
9
|
/**
|
|
9
10
|
* 使用 ExcelJS + 后处理添加批注
|
|
10
11
|
* 导出Excel,支持维度合并和小计,以及批注功能
|
|
11
12
|
*/
|
|
12
|
-
function exportToExcelWithMergeAndComments(records, columns, mergeKeys,
|
|
13
|
+
function exportToExcelWithMergeAndComments(records, columns, mergeKeys, numKeys, fileName, sheetName, columnHeaders, summaryConfig, topDescription, topDescriptionRowHeight) {
|
|
13
14
|
var _a;
|
|
14
15
|
var _this = this;
|
|
15
16
|
if (fileName === void 0) { fileName = "export.xlsx"; }
|
|
@@ -17,9 +18,9 @@ function exportToExcelWithMergeAndComments(records, columns, mergeKeys, summaryK
|
|
|
17
18
|
if (!records || records.length === 0) {
|
|
18
19
|
throw new Error("没有数据可导出");
|
|
19
20
|
}
|
|
20
|
-
var processedData = records;
|
|
21
|
+
var processedData = applyPrecisionToRecords(records, columns);
|
|
21
22
|
// 准备Excel数据
|
|
22
|
-
var excelData = prepareExcelData(processedData, columns, columnHeaders);
|
|
23
|
+
var excelData = prepareExcelData(processedData, columns, columnHeaders, topDescription);
|
|
23
24
|
// 创建工作簿
|
|
24
25
|
var workbook = new ExcelJS.Workbook();
|
|
25
26
|
// 计算末尾合计行
|
|
@@ -62,7 +63,7 @@ function exportToExcelWithMergeAndComments(records, columns, mergeKeys, summaryK
|
|
|
62
63
|
// 设置冻结窗格
|
|
63
64
|
setWorksheetFreeze(worksheet, excelData.leafColumns, excelData.headerRowCount);
|
|
64
65
|
// 添加样式
|
|
65
|
-
applyExcelStyles(worksheet, dataForStyles,
|
|
66
|
+
applyExcelStyles(worksheet, dataForStyles, numKeys, excelData.leafColumns, excelData.headerRowCount, !!excelData.topDescription, topDescriptionRowHeight);
|
|
66
67
|
// 添加批注 - 使用改进的方法
|
|
67
68
|
addCommentsToWorksheet(worksheet, dataForStyles, excelData.leafColumns, excelData.headerRowCount);
|
|
68
69
|
// 导出文件
|
|
@@ -101,6 +102,36 @@ function exportToExcelWithMergeAndComments(records, columns, mergeKeys, summaryK
|
|
|
101
102
|
fileName: fileName,
|
|
102
103
|
};
|
|
103
104
|
}
|
|
105
|
+
/**
|
|
106
|
+
* 根据列上的 precision 配置,格式化记录中的数值字段
|
|
107
|
+
*/
|
|
108
|
+
function applyPrecisionToRecords(records, columns) {
|
|
109
|
+
if (!Array.isArray(records) || !Array.isArray(columns))
|
|
110
|
+
return records || [];
|
|
111
|
+
var precisionMap = {};
|
|
112
|
+
columns.forEach(function (col) {
|
|
113
|
+
if (col && typeof col.dataIndex === "string") {
|
|
114
|
+
var precision = col.precision;
|
|
115
|
+
if (typeof precision === "number") {
|
|
116
|
+
precisionMap[col.dataIndex] = { precision: precision };
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
});
|
|
120
|
+
if (Object.keys(precisionMap).length === 0)
|
|
121
|
+
return records;
|
|
122
|
+
return records.map(function (record) {
|
|
123
|
+
if (record == null || typeof record !== "object")
|
|
124
|
+
return record;
|
|
125
|
+
var next = __assign({}, record);
|
|
126
|
+
for (var key in precisionMap) {
|
|
127
|
+
if (!Object.prototype.hasOwnProperty.call(next, key))
|
|
128
|
+
continue;
|
|
129
|
+
var precision = precisionMap[key].precision;
|
|
130
|
+
next[key] = exactRound(next[key], precision);
|
|
131
|
+
}
|
|
132
|
+
return next;
|
|
133
|
+
});
|
|
134
|
+
}
|
|
104
135
|
/**
|
|
105
136
|
* 改进的批注添加函数 - 使用 ExcelJS 的正确方法
|
|
106
137
|
*/
|
|
@@ -196,7 +227,7 @@ function setWorksheetFreeze(worksheet, leafColumns, headerRowCount) {
|
|
|
196
227
|
console.error("设置冻结窗格失败:", e);
|
|
197
228
|
}
|
|
198
229
|
}
|
|
199
|
-
function prepareExcelData(processedData, columns, columnHeaders) {
|
|
230
|
+
function prepareExcelData(processedData, columns, columnHeaders, topDescription) {
|
|
200
231
|
var getMaxDepth = function (cols) {
|
|
201
232
|
var max = 0;
|
|
202
233
|
var dfs = function (nodes, depth) {
|
|
@@ -220,10 +251,6 @@ function prepareExcelData(processedData, columns, columnHeaders) {
|
|
|
220
251
|
}
|
|
221
252
|
return 1;
|
|
222
253
|
};
|
|
223
|
-
var maxDepth = getMaxDepth(columns);
|
|
224
|
-
var headerRows = Array.from({ length: maxDepth }, function () { return []; });
|
|
225
|
-
var headerMerges = [];
|
|
226
|
-
var leafColumns = [];
|
|
227
254
|
var walkHeader = function (nodes, depth, startColIndexRef) {
|
|
228
255
|
nodes.forEach(function (node) {
|
|
229
256
|
var text = node.dynamicTitle || node.title;
|
|
@@ -265,13 +292,38 @@ function prepareExcelData(processedData, columns, columnHeaders) {
|
|
|
265
292
|
}
|
|
266
293
|
});
|
|
267
294
|
};
|
|
295
|
+
var maxDepth = getMaxDepth(columns);
|
|
296
|
+
var headerRows = Array.from({ length: maxDepth }, function () { return []; });
|
|
297
|
+
var headerMerges = [];
|
|
298
|
+
var leafColumns = [];
|
|
268
299
|
walkHeader(columns, 1, { value: 0 });
|
|
300
|
+
// 顶部说明行:插入到表头之前,并横向合并至所有叶子列
|
|
301
|
+
if (topDescription) {
|
|
302
|
+
var totalLeafCols = Math.max(1, leafColumns.length);
|
|
303
|
+
var topRow = Array.from({ length: totalLeafCols }, function () { return ""; });
|
|
304
|
+
topRow[0] = topDescription;
|
|
305
|
+
// 现有表头合并坐标整体下移一行
|
|
306
|
+
headerMerges.forEach(function (m) {
|
|
307
|
+
m.s.r += 1;
|
|
308
|
+
m.e.r += 1;
|
|
309
|
+
});
|
|
310
|
+
// 插入到最前面
|
|
311
|
+
headerRows.unshift(topRow);
|
|
312
|
+
// 新增顶行的横向合并(从第1列到最后一列)
|
|
313
|
+
if (totalLeafCols > 1) {
|
|
314
|
+
headerMerges.push({
|
|
315
|
+
s: { r: 0, c: 0 },
|
|
316
|
+
e: { r: 0, c: totalLeafCols - 1 },
|
|
317
|
+
});
|
|
318
|
+
}
|
|
319
|
+
}
|
|
269
320
|
return {
|
|
270
321
|
headerRows: headerRows,
|
|
271
322
|
headerMerges: headerMerges,
|
|
272
323
|
headerRowCount: headerRows.length,
|
|
273
324
|
data: processedData,
|
|
274
325
|
leafColumns: leafColumns,
|
|
326
|
+
topDescription: topDescription,
|
|
275
327
|
};
|
|
276
328
|
}
|
|
277
329
|
function createWorksheetWithMerge(workbook, excelData, mergeKeys, sheetName) {
|
|
@@ -324,9 +376,10 @@ function createWorksheetWithMerge(workbook, excelData, mergeKeys, sheetName) {
|
|
|
324
376
|
}
|
|
325
377
|
return worksheet;
|
|
326
378
|
}
|
|
327
|
-
function applyExcelStyles(worksheet, data,
|
|
328
|
-
var _a, _b;
|
|
379
|
+
function applyExcelStyles(worksheet, data, numKeys, columns, headerRowCount, hasTopDescription, topDescriptionRowHeight) {
|
|
380
|
+
var _a, _b, _c;
|
|
329
381
|
if (headerRowCount === void 0) { headerRowCount = 1; }
|
|
382
|
+
if (hasTopDescription === void 0) { hasTopDescription = false; }
|
|
330
383
|
var headerStyle = {
|
|
331
384
|
font: { bold: true, color: { argb: "FFFFFFFF" } },
|
|
332
385
|
fill: {
|
|
@@ -349,7 +402,7 @@ function applyExcelStyles(worksheet, data, mergeKeys, summaryKeys, columns, head
|
|
|
349
402
|
pattern: "solid",
|
|
350
403
|
fgColor: { argb: "FFE6F3FF" },
|
|
351
404
|
},
|
|
352
|
-
alignment: { horizontal: "
|
|
405
|
+
alignment: { horizontal: "left", vertical: "middle" },
|
|
353
406
|
border: {
|
|
354
407
|
top: { style: "thin", color: { argb: "FF000000" } },
|
|
355
408
|
bottom: { style: "thin", color: { argb: "FF000000" } },
|
|
@@ -364,7 +417,7 @@ function applyExcelStyles(worksheet, data, mergeKeys, summaryKeys, columns, head
|
|
|
364
417
|
pattern: "solid",
|
|
365
418
|
fgColor: { argb: "FFFFFFFF" },
|
|
366
419
|
},
|
|
367
|
-
alignment: { horizontal: "
|
|
420
|
+
alignment: { horizontal: "left", vertical: "middle" },
|
|
368
421
|
border: {
|
|
369
422
|
top: { style: "thin", color: { argb: "FF000000" } },
|
|
370
423
|
bottom: { style: "thin", color: { argb: "FF000000" } },
|
|
@@ -372,19 +425,50 @@ function applyExcelStyles(worksheet, data, mergeKeys, summaryKeys, columns, head
|
|
|
372
425
|
right: { style: "thin", color: { argb: "FF000000" } },
|
|
373
426
|
},
|
|
374
427
|
};
|
|
428
|
+
var descriptionStyle = {
|
|
429
|
+
font: { bold: true, size: 12, color: { argb: "FF333333" } },
|
|
430
|
+
alignment: { horizontal: "center", vertical: "middle", wrapText: true },
|
|
431
|
+
border: {
|
|
432
|
+
top: { style: "thin", color: { argb: "FF000000" } },
|
|
433
|
+
bottom: { style: "thin", color: { argb: "FF000000" } },
|
|
434
|
+
left: { style: "thin", color: { argb: "FF000000" } },
|
|
435
|
+
right: { style: "thin", color: { argb: "FF000000" } },
|
|
436
|
+
},
|
|
437
|
+
fill: undefined,
|
|
438
|
+
};
|
|
375
439
|
var totalCols = Math.max(1, (columns === null || columns === void 0 ? void 0 : columns.length) || 1);
|
|
376
|
-
// 表头样式
|
|
377
440
|
for (var r = 1; r <= headerRowCount; r++) {
|
|
378
441
|
for (var c = 1; c <= totalCols; c++) {
|
|
379
442
|
var cell = worksheet.getCell(r, c);
|
|
380
443
|
var currentColumn = columns && Array.isArray(columns) ? columns[c - 1] : undefined;
|
|
381
|
-
var
|
|
382
|
-
|
|
383
|
-
|
|
384
|
-
|
|
385
|
-
|
|
444
|
+
var isDescriptionRow = hasTopDescription && r === 1;
|
|
445
|
+
if (isDescriptionRow) {
|
|
446
|
+
cell.font = descriptionStyle.font;
|
|
447
|
+
cell.alignment = descriptionStyle.alignment;
|
|
448
|
+
cell.fill = descriptionStyle.fill;
|
|
449
|
+
cell.border = descriptionStyle.border;
|
|
450
|
+
}
|
|
451
|
+
else {
|
|
452
|
+
var customHeaderBgColor = (_a = currentColumn === null || currentColumn === void 0 ? void 0 : currentColumn.excelConfig) === null || _a === void 0 ? void 0 : _a.headerBgColor;
|
|
453
|
+
var customHeaderFontColor = (_b = currentColumn === null || currentColumn === void 0 ? void 0 : currentColumn.excelConfig) === null || _b === void 0 ? void 0 : _b.headerFontColor;
|
|
454
|
+
cell.font = __assign(__assign({}, headerStyle.font), { color: { argb: customHeaderFontColor || headerStyle.font.color.argb } });
|
|
455
|
+
cell.alignment = headerStyle.alignment;
|
|
456
|
+
cell.fill = __assign(__assign({}, headerStyle.fill), { fgColor: {
|
|
457
|
+
argb: customHeaderBgColor || headerStyle.fill.fgColor.argb,
|
|
458
|
+
} });
|
|
459
|
+
cell.border = headerStyle.border;
|
|
460
|
+
}
|
|
386
461
|
}
|
|
387
462
|
}
|
|
463
|
+
// 如果外部传入了顶端描述行高度,则强制设置第1行高度
|
|
464
|
+
if (hasTopDescription &&
|
|
465
|
+
typeof topDescriptionRowHeight === "number" &&
|
|
466
|
+
topDescriptionRowHeight > 0) {
|
|
467
|
+
try {
|
|
468
|
+
worksheet.getRow(1).height = topDescriptionRowHeight;
|
|
469
|
+
}
|
|
470
|
+
catch (_d) { }
|
|
471
|
+
}
|
|
388
472
|
// 数据行样式
|
|
389
473
|
for (var rowIndex = 0; rowIndex < data.length; rowIndex++) {
|
|
390
474
|
var rowData = data[rowIndex];
|
|
@@ -394,7 +478,7 @@ function applyExcelStyles(worksheet, data, mergeKeys, summaryKeys, columns, head
|
|
|
394
478
|
var currentColumn = columns && Array.isArray(columns) ? columns[c - 1] : undefined;
|
|
395
479
|
var base = isSubtotal ? summaryStyle : normalStyle;
|
|
396
480
|
var columnAlign = columns && Array.isArray(columns)
|
|
397
|
-
? (
|
|
481
|
+
? (_c = columns[c - 1]) === null || _c === void 0 ? void 0 : _c.align
|
|
398
482
|
: undefined;
|
|
399
483
|
var alignment = __assign({}, base.alignment);
|
|
400
484
|
if (columnAlign === "left" ||
|
|
@@ -409,23 +493,23 @@ function applyExcelStyles(worksheet, data, mergeKeys, summaryKeys, columns, head
|
|
|
409
493
|
}
|
|
410
494
|
}
|
|
411
495
|
// 数值列格式
|
|
412
|
-
if (
|
|
496
|
+
if (numKeys && numKeys.length > 0 && columns) {
|
|
413
497
|
for (var rowIndex = 0; rowIndex < data.length; rowIndex++) {
|
|
414
498
|
var rowData = data[rowIndex];
|
|
415
|
-
var _loop_2 = function (
|
|
416
|
-
var colIndex = columns.findIndex(function (col) { return col.dataIndex ===
|
|
499
|
+
var _loop_2 = function (numKey) {
|
|
500
|
+
var colIndex = columns.findIndex(function (col) { return col.dataIndex === numKey; });
|
|
417
501
|
if (colIndex === -1)
|
|
418
502
|
return "continue";
|
|
419
503
|
var cell = worksheet.getCell(headerRowCount + rowIndex + 1, colIndex + 1);
|
|
420
|
-
var cellValue = rowData[
|
|
504
|
+
var cellValue = rowData[numKey];
|
|
421
505
|
if (typeof cellValue === "number" || !isNaN(Number(cellValue))) {
|
|
422
506
|
cell.value = Number(cellValue);
|
|
423
507
|
cell.numFmt = "#,##0.00";
|
|
424
508
|
}
|
|
425
509
|
};
|
|
426
|
-
for (var _i = 0,
|
|
427
|
-
var
|
|
428
|
-
_loop_2(
|
|
510
|
+
for (var _i = 0, numKeys_1 = numKeys; _i < numKeys_1.length; _i++) {
|
|
511
|
+
var numKey = numKeys_1[_i];
|
|
512
|
+
_loop_2(numKey);
|
|
429
513
|
}
|
|
430
514
|
}
|
|
431
515
|
}
|
|
@@ -433,16 +517,16 @@ function applyExcelStyles(worksheet, data, mergeKeys, summaryKeys, columns, head
|
|
|
433
517
|
/**
|
|
434
518
|
* 主要的导出函数,使用改进的批注功能
|
|
435
519
|
*/
|
|
436
|
-
function exportToExcelWithMerge(records, columns, mergeKeys,
|
|
520
|
+
function exportToExcelWithMerge(records, columns, mergeKeys, numKeys, fileName, sheetName, columnHeaders, summaryConfig, topDescription, topDescriptionRowHeight) {
|
|
437
521
|
if (fileName === void 0) { fileName = "export.xlsx"; }
|
|
438
522
|
if (sheetName === void 0) { sheetName = "Sheet1"; }
|
|
439
|
-
return exportToExcelWithMergeAndComments(records, columns, mergeKeys,
|
|
523
|
+
return exportToExcelWithMergeAndComments(records, columns, mergeKeys, numKeys, fileName, sheetName, columnHeaders, summaryConfig, topDescription, topDescriptionRowHeight);
|
|
440
524
|
}
|
|
441
525
|
/**
|
|
442
526
|
* 简化版本的导出函数
|
|
443
527
|
*/
|
|
444
528
|
function exportToExcelSimple(records, config) {
|
|
445
|
-
return exportToExcelWithMerge(records, config.columns || [], config.mergeKeys, config.
|
|
529
|
+
return exportToExcelWithMerge(records, config.columns || [], config.mergeKeys, config.numKeys || [], config.fileName || "export.xlsx", config.sheetName || "Sheet1", config.columnHeaders, config.summaryConfig, config.topDescription, config.topDescriptionRowHeight);
|
|
446
530
|
}
|
|
447
531
|
/**
|
|
448
532
|
* Hook 版本,支持选择导出方式
|
|
@@ -450,19 +534,24 @@ function exportToExcelSimple(records, config) {
|
|
|
450
534
|
function useExcelExport(records, config) {
|
|
451
535
|
var columns = config.columns, isAutoMerge = config.isAutoMerge, columnHeaders = config.columnHeaders, summaryConfig = config.summaryConfig;
|
|
452
536
|
var mergeKeys = useMergeKeys(columns, isAutoMerge);
|
|
453
|
-
var
|
|
454
|
-
|
|
455
|
-
|
|
456
|
-
|
|
457
|
-
|
|
458
|
-
|
|
537
|
+
var numKeys = useNumKeys(columns);
|
|
538
|
+
var exportFunction = useMemoizedFn(function (fileName, _a) {
|
|
539
|
+
var topDescription = _a.topDescription, time = _a.time, topDescriptionRowHeight = _a.topDescriptionRowHeight;
|
|
540
|
+
if (!fileName.includes(".xlsx")) {
|
|
541
|
+
fileName = fileName + ".xlsx";
|
|
542
|
+
}
|
|
543
|
+
if (time) {
|
|
544
|
+
fileName = dayjs(time).format("YYYYMMDD") + "-" + fileName;
|
|
545
|
+
}
|
|
459
546
|
exportToExcelSimple(records, {
|
|
460
547
|
columns: columns,
|
|
461
548
|
mergeKeys: mergeKeys,
|
|
462
|
-
|
|
549
|
+
numKeys: numKeys,
|
|
463
550
|
fileName: fileName,
|
|
464
551
|
columnHeaders: columnHeaders,
|
|
465
552
|
summaryConfig: summaryConfig,
|
|
553
|
+
topDescription: topDescription,
|
|
554
|
+
topDescriptionRowHeight: topDescriptionRowHeight,
|
|
466
555
|
});
|
|
467
556
|
});
|
|
468
557
|
return exportFunction;
|
package/dist/es/table/hooks.js
CHANGED
|
@@ -385,6 +385,15 @@ var useMergeKeys = function (columns, isAutoMerge) {
|
|
|
385
385
|
}, [isAutoMerge, columns]);
|
|
386
386
|
return mergeKeys;
|
|
387
387
|
};
|
|
388
|
+
var useNumKeys = function (columns) {
|
|
389
|
+
var numKeys = useMemo(function () {
|
|
390
|
+
var leafColumns = getLeafColumns(columns);
|
|
391
|
+
return Array.from(new Set(leafColumns
|
|
392
|
+
.filter(function (item) { return item.precision !== undefined; })
|
|
393
|
+
.map(function (item) { return item.key; })));
|
|
394
|
+
}, [columns]);
|
|
395
|
+
return numKeys;
|
|
396
|
+
};
|
|
388
397
|
/**
|
|
389
398
|
* 自动合并的一些处理
|
|
390
399
|
*/
|
|
@@ -510,4 +519,4 @@ function useMergeAddAndDel(_a) {
|
|
|
510
519
|
return [newRowSelection, newAddAndDelProps];
|
|
511
520
|
}
|
|
512
521
|
|
|
513
|
-
export { useAddAndDelChange, useAutoMerge, useCalcScrollY, useCustomSort, useEditChange, useMergeAddAndDel, useMergeKeys, useMoveRowChange, useScuRfresh };
|
|
522
|
+
export { useAddAndDelChange, useAutoMerge, useCalcScrollY, useCustomSort, useEditChange, useMergeAddAndDel, useMergeKeys, useMoveRowChange, useNumKeys, useScuRfresh };
|
|
@@ -237,7 +237,14 @@ interface IColumnType<RecordType> extends Omit<ColumnType<RecordType>, "render">
|
|
|
237
237
|
* 表头背景色
|
|
238
238
|
*/
|
|
239
239
|
headerBgColor?: string;
|
|
240
|
+
/**
|
|
241
|
+
* 表头字体颜色
|
|
242
|
+
*/
|
|
243
|
+
headerFontColor?: string;
|
|
240
244
|
};
|
|
245
|
+
dateFormat?: string;
|
|
246
|
+
precision?: number;
|
|
247
|
+
thousand?: boolean;
|
|
241
248
|
}
|
|
242
249
|
interface IRenderOptions {
|
|
243
250
|
insertTableFromClipboard: IFuncInsertTableFromClipboard;
|
|
@@ -296,7 +303,11 @@ interface ITableRefHandel {
|
|
|
296
303
|
/**
|
|
297
304
|
* 导出excel
|
|
298
305
|
*/
|
|
299
|
-
exportExcel?: (fileName: string
|
|
306
|
+
exportExcel?: (fileName: string, config?: {
|
|
307
|
+
topDescription?: string;
|
|
308
|
+
time?: string;
|
|
309
|
+
topDescriptionRowHeight?: number;
|
|
310
|
+
}) => void;
|
|
300
311
|
}
|
|
301
312
|
interface ITableProps<RecordType> extends Omit<TableProps<RecordType>, "columns"> {
|
|
302
313
|
/**
|
|
@@ -15,6 +15,8 @@ import FilterDropdown, { createFilterValue, filterHandle } from './components/Fi
|
|
|
15
15
|
import Badge from './components/Badge.js';
|
|
16
16
|
import { PLACEHOLDER_NULL } from '../config/constant.js';
|
|
17
17
|
import { useMergeAddAndDel } from './hooks.js';
|
|
18
|
+
import dayjs from 'dayjs';
|
|
19
|
+
import { exactRound, addThousedSeparator } from 'zmdms-utils';
|
|
18
20
|
import SearchOutlined from '../node_modules/@ant-design/icons/es/icons/SearchOutlined.js';
|
|
19
21
|
import ModalComponent from '../modal/modal.js';
|
|
20
22
|
|
|
@@ -317,7 +319,15 @@ function useColumns(columns, options) {
|
|
|
317
319
|
if (typeof text === "object") {
|
|
318
320
|
return PLACEHOLDER_NULL;
|
|
319
321
|
}
|
|
320
|
-
|
|
322
|
+
if (text == null || text === "")
|
|
323
|
+
return PLACEHOLDER_NULL;
|
|
324
|
+
if (_column.dateFormat)
|
|
325
|
+
return dayjs(text).format(_column.dateFormat);
|
|
326
|
+
if (_column.precision)
|
|
327
|
+
text = exactRound(text, _column.precision);
|
|
328
|
+
if (_column.thousand)
|
|
329
|
+
text = addThousedSeparator(text);
|
|
330
|
+
return text;
|
|
321
331
|
};
|
|
322
332
|
}
|
|
323
333
|
if (_column.render) {
|