zmdms-webui 2.6.1 → 2.6.3
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/canvastable/canvasTable.js +63 -21
- package/dist/es/canvastable/hooks/renderers/BadgeRenderer.js +58 -0
- package/dist/es/canvastable/hooks/renderers/BorderRenderer.js +229 -0
- package/dist/es/canvastable/hooks/renderers/DataRowRenderer.js +358 -0
- package/dist/es/canvastable/hooks/renderers/ExpandIconRenderer.js +97 -0
- package/dist/es/canvastable/hooks/renderers/FixedColumnRenderer.js +71 -0
- package/dist/es/canvastable/hooks/renderers/FixedRowRenderer.js +192 -0
- package/dist/es/canvastable/hooks/renderers/HeaderRenderer.js +395 -0
- package/dist/es/canvastable/hooks/renderers/ScrollbarRenderer.js +85 -0
- package/dist/es/canvastable/hooks/renderers/SelectionRenderer.js +181 -0
- package/dist/es/canvastable/hooks/useExpandable.js +185 -0
- package/dist/es/canvastable/hooks/useTableInteraction.js +37 -1
- package/dist/es/canvastable/hooks/useTableRender.js +172 -1464
- package/dist/es/canvastable/interface.d.ts +71 -1
- package/dist/es/canvastable/utils/renderHelpers.js +118 -0
- package/dist/es/modal/interface.d.ts +0 -4
- package/dist/es/modal/modal.js +13 -13
- package/dist/es/modal/useResizable.js +1 -1
- package/dist/es/table/excel.js +1 -1
- package/package.json +1 -1
|
@@ -228,6 +228,52 @@ interface ICanvasRowSelection<RecordType = any> {
|
|
|
228
228
|
*/
|
|
229
229
|
fixed?: boolean;
|
|
230
230
|
}
|
|
231
|
+
interface IExpandable<RecordType = any> {
|
|
232
|
+
/**
|
|
233
|
+
* 展开的keys集合
|
|
234
|
+
*/
|
|
235
|
+
expandedRowKeys?: React__default.Key[];
|
|
236
|
+
/**
|
|
237
|
+
* 默认展开的keys集合
|
|
238
|
+
*/
|
|
239
|
+
defaultExpandedRowKeys?: React__default.Key[];
|
|
240
|
+
/**
|
|
241
|
+
* 展开状态改变时的回调
|
|
242
|
+
*/
|
|
243
|
+
onExpandedRowsChange?: (expandedKeys: React__default.Key[], row: RecordType, action: 'expand' | 'collapse') => void;
|
|
244
|
+
/**
|
|
245
|
+
* 是否默认展开所有行
|
|
246
|
+
*/
|
|
247
|
+
defaultExpandAllRows?: boolean;
|
|
248
|
+
/**
|
|
249
|
+
* 展开图标的列索引(默认0,第一列)
|
|
250
|
+
*/
|
|
251
|
+
expandIconColumnIndex?: number;
|
|
252
|
+
/**
|
|
253
|
+
* 自定义展开图标
|
|
254
|
+
*/
|
|
255
|
+
expandIcon?: (params: {
|
|
256
|
+
expanded: boolean;
|
|
257
|
+
record: RecordType;
|
|
258
|
+
onExpand: (record: RecordType, expanded: boolean) => void;
|
|
259
|
+
}) => React__default.ReactNode;
|
|
260
|
+
/**
|
|
261
|
+
* 展开行的自定义渲染
|
|
262
|
+
*/
|
|
263
|
+
expandedRowRender?: (params: {
|
|
264
|
+
record: RecordType;
|
|
265
|
+
index: number;
|
|
266
|
+
expanded: boolean;
|
|
267
|
+
}) => React__default.ReactNode;
|
|
268
|
+
/**
|
|
269
|
+
* 展开行的类名
|
|
270
|
+
*/
|
|
271
|
+
expandedRowClassName?: (record: RecordType, index: number) => string;
|
|
272
|
+
/**
|
|
273
|
+
* 子节点数据的字段名(默认为'children')
|
|
274
|
+
*/
|
|
275
|
+
childrenColumnName?: string;
|
|
276
|
+
}
|
|
231
277
|
interface ICanvasTableProps<RecordType = any> {
|
|
232
278
|
/**
|
|
233
279
|
* 数据源
|
|
@@ -273,6 +319,10 @@ interface ICanvasTableProps<RecordType = any> {
|
|
|
273
319
|
* 勾选配置
|
|
274
320
|
*/
|
|
275
321
|
rowSelection?: ICanvasRowSelection<RecordType>;
|
|
322
|
+
/**
|
|
323
|
+
* 树形展开配置
|
|
324
|
+
*/
|
|
325
|
+
expandable?: IExpandable<RecordType>;
|
|
276
326
|
/**
|
|
277
327
|
* 排序改变回调
|
|
278
328
|
*/
|
|
@@ -473,6 +523,26 @@ interface ICanvasTableRefHandle {
|
|
|
473
523
|
* 设置选中的行keys
|
|
474
524
|
*/
|
|
475
525
|
setSelectedRowKeys: (keys: React__default.Key[]) => void;
|
|
526
|
+
/**
|
|
527
|
+
* 获取展开的keys
|
|
528
|
+
*/
|
|
529
|
+
getExpandedRowKeys: () => React__default.Key[];
|
|
530
|
+
/**
|
|
531
|
+
* 设置展开的keys
|
|
532
|
+
*/
|
|
533
|
+
setExpandedRowKeys: (keys: React__default.Key[]) => void;
|
|
534
|
+
/**
|
|
535
|
+
* 展开指定行
|
|
536
|
+
*/
|
|
537
|
+
expandRow: (key: React__default.Key) => void;
|
|
538
|
+
/**
|
|
539
|
+
* 收起指定行
|
|
540
|
+
*/
|
|
541
|
+
collapseRow: (key: React__default.Key) => void;
|
|
542
|
+
/**
|
|
543
|
+
* 切换指定行展开状态
|
|
544
|
+
*/
|
|
545
|
+
toggleExpandRow: (key: React__default.Key) => void;
|
|
476
546
|
/**
|
|
477
547
|
* 滚动到指定位置
|
|
478
548
|
*/
|
|
@@ -511,4 +581,4 @@ interface ICanvasTableRefHandle {
|
|
|
511
581
|
clearFilter: () => void;
|
|
512
582
|
}
|
|
513
583
|
|
|
514
|
-
export { ColumnDataType, FilterConfig, IBadgeProps, ICanvasColumnType, ICanvasColumnsType, ICanvasRowSelection, ICanvasTableProps, ICanvasTableRefHandle, SortOrder };
|
|
584
|
+
export { ColumnDataType, FilterConfig, IBadgeProps, ICanvasColumnType, ICanvasColumnsType, ICanvasRowSelection, ICanvasTableProps, ICanvasTableRefHandle, IExpandable, SortOrder };
|
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
import { TEXT_PADDING, COLORS } from './constants.js';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* 渲染辅助工具函数
|
|
5
|
+
* 提供通用的渲染计算和绘制功能
|
|
6
|
+
*/
|
|
7
|
+
/**
|
|
8
|
+
* 计算文本X坐标(根据对齐方式)
|
|
9
|
+
*/
|
|
10
|
+
var calculateTextX = function (drawX, actualWidth, align, padding) {
|
|
11
|
+
if (align === void 0) { align = "left"; }
|
|
12
|
+
if (padding === void 0) { padding = TEXT_PADDING; }
|
|
13
|
+
if (align === "center") {
|
|
14
|
+
return drawX + actualWidth / 2;
|
|
15
|
+
}
|
|
16
|
+
else if (align === "right") {
|
|
17
|
+
return drawX + actualWidth - padding;
|
|
18
|
+
}
|
|
19
|
+
return drawX + padding;
|
|
20
|
+
};
|
|
21
|
+
/**
|
|
22
|
+
* 设置Canvas文本对齐方式
|
|
23
|
+
*/
|
|
24
|
+
var setTextAlign = function (ctx, align) {
|
|
25
|
+
if (align === void 0) { align = "left"; }
|
|
26
|
+
ctx.textAlign = align;
|
|
27
|
+
};
|
|
28
|
+
/**
|
|
29
|
+
* 计算固定列的右边界
|
|
30
|
+
*/
|
|
31
|
+
var calculateFixedColumnsRightEdge = function (columnRenderInfos, getColumnWidth) {
|
|
32
|
+
var rightEdge = 0;
|
|
33
|
+
columnRenderInfos.forEach(function (info, index) {
|
|
34
|
+
if (info.fixed) {
|
|
35
|
+
var actualWidth = getColumnWidth ? getColumnWidth(index) : info.width;
|
|
36
|
+
rightEdge = Math.max(rightEdge, info.fixedLeft + actualWidth);
|
|
37
|
+
}
|
|
38
|
+
});
|
|
39
|
+
return rightEdge;
|
|
40
|
+
};
|
|
41
|
+
/**
|
|
42
|
+
* 判断是否应该在Canvas中渲染
|
|
43
|
+
* 检查render函数的返回值类型
|
|
44
|
+
*/
|
|
45
|
+
var shouldRenderInCanvas = function (renderFn, cellValue, record, rowIndex, isSummaryRow) {
|
|
46
|
+
if (isSummaryRow === void 0) { isSummaryRow = false; }
|
|
47
|
+
// 合计行不应用 render 函数
|
|
48
|
+
if (isSummaryRow) {
|
|
49
|
+
return true;
|
|
50
|
+
}
|
|
51
|
+
// 如果没有 render 函数,在 Canvas 中渲染
|
|
52
|
+
if (!renderFn) {
|
|
53
|
+
return true;
|
|
54
|
+
}
|
|
55
|
+
var rendered = renderFn(cellValue, record, rowIndex);
|
|
56
|
+
// 如果返回的是字符串或数字,在 Canvas 中渲染
|
|
57
|
+
if (typeof rendered === "string" ||
|
|
58
|
+
typeof rendered === "number" ||
|
|
59
|
+
rendered === null ||
|
|
60
|
+
rendered === undefined) {
|
|
61
|
+
return true;
|
|
62
|
+
}
|
|
63
|
+
// 否则是自定义组件,应该在覆盖层渲染
|
|
64
|
+
return false;
|
|
65
|
+
};
|
|
66
|
+
var setupCellClip = function (params) {
|
|
67
|
+
var ctx = params.ctx, drawX = params.drawX, y = params.y, width = params.width, cellHeight = params.cellHeight, headerHeight = params.headerHeight, effectiveHeight = params.effectiveHeight, _a = params.fixedColumnsRightEdge, fixedColumnsRightEdge = _a === void 0 ? 0 : _a, isFixed = params.isFixed;
|
|
68
|
+
// 裁剪区域:确保不覆盖表头,从 headerHeight 开始
|
|
69
|
+
var clipY = Math.max(y, headerHeight);
|
|
70
|
+
// 计算单元格实际底部位置,并限制在可视区域内
|
|
71
|
+
var cellBottom = Math.min(y + cellHeight, effectiveHeight);
|
|
72
|
+
// 裁剪高度 = 单元格可见底部 - 裁剪起始位置
|
|
73
|
+
var clipHeight = Math.max(0, cellBottom - clipY);
|
|
74
|
+
// 对于非fixed列,还需要裁剪掉被fixed列遮挡的部分
|
|
75
|
+
var clipX = drawX;
|
|
76
|
+
var clipWidth = width;
|
|
77
|
+
if (!isFixed && fixedColumnsRightEdge > 0 && drawX < fixedColumnsRightEdge) {
|
|
78
|
+
// 调整裁剪区域,去掉被fixed列遮挡的部分
|
|
79
|
+
var overlap = fixedColumnsRightEdge - drawX;
|
|
80
|
+
if (overlap < width) {
|
|
81
|
+
clipX = fixedColumnsRightEdge;
|
|
82
|
+
clipWidth = width - overlap;
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
ctx.beginPath();
|
|
86
|
+
ctx.rect(clipX, clipY, clipWidth, clipHeight);
|
|
87
|
+
ctx.clip();
|
|
88
|
+
return { clipX: clipX, clipY: clipY, clipWidth: clipWidth, clipHeight: clipHeight };
|
|
89
|
+
};
|
|
90
|
+
var drawCellBackground = function (params) {
|
|
91
|
+
var ctx = params.ctx, clipX = params.clipX, clipY = params.clipY, clipWidth = params.clipWidth, clipHeight = params.clipHeight, isSelected = params.isSelected, isHover = params.isHover, isSummaryRow = params.isSummaryRow, isStriped = params.isStriped, rowIndex = params.rowIndex, customBgColor = params.customBgColor;
|
|
92
|
+
if (clipHeight > 0 && clipWidth > 0) {
|
|
93
|
+
var bgColor = void 0;
|
|
94
|
+
if (customBgColor) {
|
|
95
|
+
bgColor = customBgColor;
|
|
96
|
+
}
|
|
97
|
+
else if (isSelected) {
|
|
98
|
+
bgColor = COLORS.selectedBg;
|
|
99
|
+
}
|
|
100
|
+
else if (isSummaryRow) {
|
|
101
|
+
// 合计行使用表头背景色
|
|
102
|
+
bgColor = COLORS.headerBg;
|
|
103
|
+
}
|
|
104
|
+
else if (isHover) {
|
|
105
|
+
bgColor = COLORS.hoverBg;
|
|
106
|
+
}
|
|
107
|
+
else if (isStriped && rowIndex % 2 === 1) {
|
|
108
|
+
bgColor = COLORS.stripedBg;
|
|
109
|
+
}
|
|
110
|
+
else {
|
|
111
|
+
bgColor = COLORS.white;
|
|
112
|
+
}
|
|
113
|
+
ctx.fillStyle = bgColor;
|
|
114
|
+
ctx.fillRect(clipX, clipY, clipWidth, clipHeight);
|
|
115
|
+
}
|
|
116
|
+
};
|
|
117
|
+
|
|
118
|
+
export { calculateFixedColumnsRightEdge, calculateTextX, drawCellBackground, setTextAlign, setupCellClip, shouldRenderInCanvas };
|
package/dist/es/modal/modal.js
CHANGED
|
@@ -9,18 +9,18 @@ import useResizable from './useResizable.js';
|
|
|
9
9
|
import myMessage from '../message/index.js';
|
|
10
10
|
|
|
11
11
|
var Modal = function (_a, ref) {
|
|
12
|
-
var className = _a.className, defaultOpen = _a.defaultOpen, defaultTitle = _a.defaultTitle, defaultConfirmMsg = _a.defaultConfirmMsg, defaultConfirmOkText = _a.defaultConfirmOkText, defaultType = _a.defaultType, confirmPreHandle = _a.confirmPreHandle, confirmOnOk = _a.confirmOnOk, onOk = _a.onOk, footer = _a.footer, onOkValidate = _a.onOkValidate, _b = _a.isDrag, isDrag = _b === void 0 ? true : _b, _c = _a.isResize, isResize = _c === void 0 ? false : _c, minWidth = _a.minWidth, minHeight = _a.minHeight, maxWidth = _a.maxWidth, maxHeight = _a.maxHeight,
|
|
12
|
+
var className = _a.className, defaultOpen = _a.defaultOpen, defaultTitle = _a.defaultTitle, defaultConfirmMsg = _a.defaultConfirmMsg, defaultConfirmOkText = _a.defaultConfirmOkText, defaultType = _a.defaultType, confirmPreHandle = _a.confirmPreHandle, confirmOnOk = _a.confirmOnOk, onOk = _a.onOk, footer = _a.footer, onOkValidate = _a.onOkValidate, _b = _a.isDrag, isDrag = _b === void 0 ? true : _b, _c = _a.isResize, isResize = _c === void 0 ? false : _c, minWidth = _a.minWidth, minHeight = _a.minHeight, maxWidth = _a.maxWidth, maxHeight = _a.maxHeight, defaultHeight = _a.defaultHeight, modalTitle = _a.title, modalRender = _a.modalRender, resetProps = __rest(_a, ["className", "defaultOpen", "defaultTitle", "defaultConfirmMsg", "defaultConfirmOkText", "defaultType", "confirmPreHandle", "confirmOnOk", "onOk", "footer", "onOkValidate", "isDrag", "isResize", "minWidth", "minHeight", "maxWidth", "maxHeight", "defaultHeight", "title", "modalRender"]);
|
|
13
13
|
var classes = classNames("ztxk-modal", isResize && "ztxk-modal-resize", className);
|
|
14
14
|
// 模态框基本属性
|
|
15
|
-
var
|
|
16
|
-
var
|
|
17
|
-
var
|
|
15
|
+
var _d = useState(defaultOpen), open = _d[0], setOpen = _d[1];
|
|
16
|
+
var _e = useState(defaultTitle), title = _e[0], setTitle = _e[1];
|
|
17
|
+
var _f = useState(), loading = _f[0], setLoading = _f[1];
|
|
18
18
|
// 二次确认框相关配置
|
|
19
|
-
var
|
|
20
|
-
var
|
|
21
|
-
var
|
|
19
|
+
var _g = useState(confirmOnOk ? true : false), isConfirm = _g[0], setIsConfirm = _g[1];
|
|
20
|
+
var _h = useState(defaultConfirmMsg), confirmMsg = _h[0], setConfirmMsg = _h[1];
|
|
21
|
+
var _j = useState(defaultConfirmOkText), confirmOkText = _j[0], setConfirmOkText = _j[1];
|
|
22
22
|
// 模态框类型
|
|
23
|
-
var
|
|
23
|
+
var _k = useState(defaultType), type = _k[0], setType = _k[1];
|
|
24
24
|
var close = useCallback(function () {
|
|
25
25
|
setOpen(false);
|
|
26
26
|
}, []);
|
|
@@ -142,21 +142,21 @@ var Modal = function (_a, ref) {
|
|
|
142
142
|
setConfirmMsg: setConfirmOkText,
|
|
143
143
|
};
|
|
144
144
|
});
|
|
145
|
-
var
|
|
145
|
+
var _l = useResizable({
|
|
146
146
|
isResize: isResize,
|
|
147
147
|
minWidth: minWidth,
|
|
148
148
|
minHeight: minHeight,
|
|
149
149
|
maxWidth: maxWidth,
|
|
150
150
|
maxHeight: maxHeight,
|
|
151
|
-
defaultWidth:
|
|
151
|
+
defaultWidth: resetProps.width,
|
|
152
152
|
defaultHeight: defaultHeight,
|
|
153
153
|
modalRender: modalRender,
|
|
154
|
-
}), resizableWidth =
|
|
155
|
-
var
|
|
154
|
+
}), resizableWidth = _l.width, resizableModalRender = _l.resizableModalRender;
|
|
155
|
+
var _m = useDraggable({
|
|
156
156
|
isDrag: isDrag,
|
|
157
157
|
title: modalTitle || title,
|
|
158
158
|
modalRender: modalRender,
|
|
159
|
-
}), dragTitle =
|
|
159
|
+
}), dragTitle = _m.dragTitle, dragModalRender = _m.dragModalRender;
|
|
160
160
|
var finalWidth = isResize ? resizableWidth : resetProps.width || "70%";
|
|
161
161
|
return (jsx(Modal$1, __assign({ open: open, onCancel: close, className: classes, okText: "\u4FDD\u5B58", onOk: footer ? undefined : onOkHandle, title: dragTitle, keyboard: false, maskClosable: false, confirmLoading: loading, cancelButtonProps: { loading: loading }, footer: footer, modalRender: function (modal) {
|
|
162
162
|
var resized = resizableModalRender(modal);
|
|
@@ -3,7 +3,7 @@ import { jsxs, jsx } from 'react/jsx-runtime';
|
|
|
3
3
|
import React__default, { useState, useRef, useCallback } from 'react';
|
|
4
4
|
|
|
5
5
|
var useResizable = function (options) {
|
|
6
|
-
var isResize = options.isResize, _a = options.minWidth, minWidth = _a === void 0 ?
|
|
6
|
+
var isResize = options.isResize, _a = options.minWidth, minWidth = _a === void 0 ? 100 : _a, _b = options.minHeight, minHeight = _b === void 0 ? 100 : _b, maxWidth = options.maxWidth, maxHeight = options.maxHeight, _c = options.defaultWidth, defaultWidth = _c === void 0 ? "70%" : _c, _d = options.defaultHeight, defaultHeight = _d === void 0 ? "auto" : _d;
|
|
7
7
|
var _e = useState({
|
|
8
8
|
width: defaultWidth,
|
|
9
9
|
height: defaultHeight,
|
package/dist/es/table/excel.js
CHANGED
|
@@ -551,7 +551,7 @@ function applyExcelStyles(worksheet, data, numKeys, dateKeys, columns, headerRow
|
|
|
551
551
|
var cellValue = rowData[dateKey.dataIndex];
|
|
552
552
|
if (cellValue) {
|
|
553
553
|
try {
|
|
554
|
-
var date = dayjs(cellValue).toDate();
|
|
554
|
+
var date = dayjs(String(cellValue)).toDate();
|
|
555
555
|
cell.value = date;
|
|
556
556
|
cell.numFmt = columns[colIndex].dateFormat;
|
|
557
557
|
}
|