ztxkui 4.3.13 → 4.3.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.
- package/dist/components/PrintContainer/print-container.js +181 -25
- package/dist/components/ProTable/hooks.d.ts +18 -0
- package/dist/components/ProTable/hooks.js +178 -0
- package/dist/components/ProTable/index.d.ts +8 -0
- package/dist/components/ProTable/index.js +66 -0
- package/dist/components/ProTable/interface.d.ts +31 -0
- package/dist/components/ProTable/interface.js +1 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.js +1 -0
- package/package.json +1 -1
|
@@ -581,25 +581,109 @@ var PrintContainer = function (_a) {
|
|
|
581
581
|
LODOP.PREVIEW();
|
|
582
582
|
}
|
|
583
583
|
// 生成pdf
|
|
584
|
+
var onPdfHandleFn = function (_a) {
|
|
585
|
+
var pdfOptions = _a.pdfOptions, imgPositionX = _a.imgPositionX;
|
|
586
|
+
setSpinning(true);
|
|
587
|
+
htmlToPdf({
|
|
588
|
+
dom: containerRef.current,
|
|
589
|
+
pdfName: pdfName,
|
|
590
|
+
isShowPage: isAddExportPage,
|
|
591
|
+
pdfOptions: __assign({}, (pdfOptions || {})),
|
|
592
|
+
imgPositionX: imgPositionX,
|
|
593
|
+
})
|
|
594
|
+
.then(function () {
|
|
595
|
+
setSpinning(false);
|
|
596
|
+
})
|
|
597
|
+
.catch(function () {
|
|
598
|
+
setSpinning(false);
|
|
599
|
+
});
|
|
600
|
+
};
|
|
584
601
|
var onPdfHandle = function (_a) {
|
|
585
602
|
var pdfOptions = _a.pdfOptions, imgPositionX = _a.imgPositionX;
|
|
586
603
|
return __awaiter(void 0, void 0, void 0, function () {
|
|
604
|
+
var result, err_3, isOkSure_3;
|
|
587
605
|
return __generator(this, function (_b) {
|
|
588
|
-
|
|
589
|
-
|
|
590
|
-
|
|
591
|
-
|
|
592
|
-
|
|
593
|
-
|
|
594
|
-
|
|
595
|
-
|
|
596
|
-
|
|
597
|
-
|
|
598
|
-
|
|
599
|
-
|
|
600
|
-
|
|
601
|
-
|
|
602
|
-
|
|
606
|
+
switch (_b.label) {
|
|
607
|
+
case 0:
|
|
608
|
+
result = true;
|
|
609
|
+
if (!onPrintBeforeCallback) return [3 /*break*/, 4];
|
|
610
|
+
_b.label = 1;
|
|
611
|
+
case 1:
|
|
612
|
+
_b.trys.push([1, 3, , 4]);
|
|
613
|
+
return [4 /*yield*/, onPrintBeforeCallback()];
|
|
614
|
+
case 2:
|
|
615
|
+
result = _b.sent();
|
|
616
|
+
return [3 /*break*/, 4];
|
|
617
|
+
case 3:
|
|
618
|
+
err_3 = _b.sent();
|
|
619
|
+
result = null;
|
|
620
|
+
return [3 /*break*/, 4];
|
|
621
|
+
case 4:
|
|
622
|
+
if (!result) {
|
|
623
|
+
return [2 /*return*/];
|
|
624
|
+
}
|
|
625
|
+
if (showPrintMessage) {
|
|
626
|
+
isOkSure_3 = false;
|
|
627
|
+
Modal.confirm({
|
|
628
|
+
title: '打印提示',
|
|
629
|
+
content: '点击确认按钮后,将作为一次成功的打印,并记录到系统!你确认要打印吗?',
|
|
630
|
+
okText: '确认',
|
|
631
|
+
onOk: function () {
|
|
632
|
+
if (onPrintCallback) {
|
|
633
|
+
var result_3 = onPrintCallback();
|
|
634
|
+
if (result_3 instanceof Promise) {
|
|
635
|
+
var startTime_3 = Date.now();
|
|
636
|
+
result_3.then(function (res) {
|
|
637
|
+
if (res) {
|
|
638
|
+
if (Date.now() - startTime_3 > 1000) {
|
|
639
|
+
// 关闭打印页面
|
|
640
|
+
setTimeout(function () {
|
|
641
|
+
onPdfHandleFn({
|
|
642
|
+
pdfOptions: pdfOptions,
|
|
643
|
+
imgPositionX: imgPositionX,
|
|
644
|
+
});
|
|
645
|
+
});
|
|
646
|
+
}
|
|
647
|
+
else {
|
|
648
|
+
setTimeout(function () {
|
|
649
|
+
onPdfHandleFn({
|
|
650
|
+
pdfOptions: pdfOptions,
|
|
651
|
+
imgPositionX: imgPositionX,
|
|
652
|
+
});
|
|
653
|
+
}, 1000);
|
|
654
|
+
}
|
|
655
|
+
}
|
|
656
|
+
});
|
|
657
|
+
}
|
|
658
|
+
else {
|
|
659
|
+
isOkSure_3 = true;
|
|
660
|
+
}
|
|
661
|
+
}
|
|
662
|
+
else {
|
|
663
|
+
isOkSure_3 = true;
|
|
664
|
+
}
|
|
665
|
+
},
|
|
666
|
+
afterClose: function () {
|
|
667
|
+
if (isOkSure_3) {
|
|
668
|
+
setTimeout(function () {
|
|
669
|
+
onPdfHandleFn({
|
|
670
|
+
pdfOptions: pdfOptions,
|
|
671
|
+
imgPositionX: imgPositionX,
|
|
672
|
+
});
|
|
673
|
+
});
|
|
674
|
+
}
|
|
675
|
+
},
|
|
676
|
+
});
|
|
677
|
+
}
|
|
678
|
+
else {
|
|
679
|
+
onPrintCallback && onPrintCallback();
|
|
680
|
+
onPdfHandleFn({
|
|
681
|
+
pdfOptions: pdfOptions,
|
|
682
|
+
imgPositionX: imgPositionX,
|
|
683
|
+
});
|
|
684
|
+
}
|
|
685
|
+
return [2 /*return*/];
|
|
686
|
+
}
|
|
603
687
|
});
|
|
604
688
|
});
|
|
605
689
|
};
|
|
@@ -938,11 +1022,7 @@ var PrintContainer = function (_a) {
|
|
|
938
1022
|
});
|
|
939
1023
|
});
|
|
940
1024
|
};
|
|
941
|
-
var
|
|
942
|
-
if (!Array.isArray(autoSealList) || autoSealList.length === 0) {
|
|
943
|
-
message.info("\u5F53\u524D\u90E8\u95E8\u3001\u6D41\u7A0B\u4E0B\u672A\u914D\u7F6E\u81EA\u52A8\u76D6\u7AE0\u76F8\u5173\u5370\u7AE0\uFF0C\u8BF7\u8054\u7CFB\u7BA1\u7406\u5458\u914D\u7F6E!");
|
|
944
|
-
return;
|
|
945
|
-
}
|
|
1025
|
+
var onExportSealFileHandleFn = function (options, isZip) {
|
|
946
1026
|
setSpinning(true);
|
|
947
1027
|
// 文件还在加载中
|
|
948
1028
|
if (!fontTTF.data) {
|
|
@@ -962,7 +1042,7 @@ var PrintContainer = function (_a) {
|
|
|
962
1042
|
fileId: fileId,
|
|
963
1043
|
request: request,
|
|
964
1044
|
});
|
|
965
|
-
|
|
1045
|
+
onExportSealFileHandleFn(options, isZip);
|
|
966
1046
|
}, 2000);
|
|
967
1047
|
}
|
|
968
1048
|
else {
|
|
@@ -978,6 +1058,84 @@ var PrintContainer = function (_a) {
|
|
|
978
1058
|
exportSealPdf(options, isZip);
|
|
979
1059
|
}
|
|
980
1060
|
};
|
|
1061
|
+
var onExportSealFileHandle = function (options, isZip) { return __awaiter(void 0, void 0, void 0, function () {
|
|
1062
|
+
var result, err_4, isOkSure_4;
|
|
1063
|
+
return __generator(this, function (_a) {
|
|
1064
|
+
switch (_a.label) {
|
|
1065
|
+
case 0:
|
|
1066
|
+
if (!Array.isArray(autoSealList) || autoSealList.length === 0) {
|
|
1067
|
+
message.info("\u5F53\u524D\u90E8\u95E8\u3001\u6D41\u7A0B\u4E0B\u672A\u914D\u7F6E\u81EA\u52A8\u76D6\u7AE0\u76F8\u5173\u5370\u7AE0\uFF0C\u8BF7\u8054\u7CFB\u7BA1\u7406\u5458\u914D\u7F6E!");
|
|
1068
|
+
return [2 /*return*/];
|
|
1069
|
+
}
|
|
1070
|
+
result = true;
|
|
1071
|
+
if (!onPrintBeforeCallback) return [3 /*break*/, 4];
|
|
1072
|
+
_a.label = 1;
|
|
1073
|
+
case 1:
|
|
1074
|
+
_a.trys.push([1, 3, , 4]);
|
|
1075
|
+
return [4 /*yield*/, onPrintBeforeCallback()];
|
|
1076
|
+
case 2:
|
|
1077
|
+
result = _a.sent();
|
|
1078
|
+
return [3 /*break*/, 4];
|
|
1079
|
+
case 3:
|
|
1080
|
+
err_4 = _a.sent();
|
|
1081
|
+
result = null;
|
|
1082
|
+
return [3 /*break*/, 4];
|
|
1083
|
+
case 4:
|
|
1084
|
+
if (!result) {
|
|
1085
|
+
return [2 /*return*/];
|
|
1086
|
+
}
|
|
1087
|
+
if (showPrintMessage) {
|
|
1088
|
+
isOkSure_4 = false;
|
|
1089
|
+
Modal.confirm({
|
|
1090
|
+
title: '打印提示',
|
|
1091
|
+
content: '点击确认按钮后,将作为一次成功的打印,并记录到系统!你确认要打印吗?',
|
|
1092
|
+
okText: '确认',
|
|
1093
|
+
onOk: function () {
|
|
1094
|
+
if (onPrintCallback) {
|
|
1095
|
+
var result_4 = onPrintCallback();
|
|
1096
|
+
if (result_4 instanceof Promise) {
|
|
1097
|
+
var startTime_4 = Date.now();
|
|
1098
|
+
result_4.then(function (res) {
|
|
1099
|
+
if (res) {
|
|
1100
|
+
if (Date.now() - startTime_4 > 1000) {
|
|
1101
|
+
// 关闭打印页面
|
|
1102
|
+
setTimeout(function () {
|
|
1103
|
+
onExportSealFileHandleFn(options, isZip);
|
|
1104
|
+
});
|
|
1105
|
+
}
|
|
1106
|
+
else {
|
|
1107
|
+
setTimeout(function () {
|
|
1108
|
+
onExportSealFileHandleFn(options, isZip);
|
|
1109
|
+
}, 1000);
|
|
1110
|
+
}
|
|
1111
|
+
}
|
|
1112
|
+
});
|
|
1113
|
+
}
|
|
1114
|
+
else {
|
|
1115
|
+
isOkSure_4 = true;
|
|
1116
|
+
}
|
|
1117
|
+
}
|
|
1118
|
+
else {
|
|
1119
|
+
isOkSure_4 = true;
|
|
1120
|
+
}
|
|
1121
|
+
},
|
|
1122
|
+
afterClose: function () {
|
|
1123
|
+
if (isOkSure_4) {
|
|
1124
|
+
setTimeout(function () {
|
|
1125
|
+
onExportSealFileHandleFn(options, isZip);
|
|
1126
|
+
});
|
|
1127
|
+
}
|
|
1128
|
+
},
|
|
1129
|
+
});
|
|
1130
|
+
}
|
|
1131
|
+
else {
|
|
1132
|
+
onPrintCallback && onPrintCallback();
|
|
1133
|
+
onExportSealFileHandleFn(options, isZip);
|
|
1134
|
+
}
|
|
1135
|
+
return [2 /*return*/];
|
|
1136
|
+
}
|
|
1137
|
+
});
|
|
1138
|
+
}); };
|
|
981
1139
|
var onExportSealFileHandlePhoto = function (options, isZip) {
|
|
982
1140
|
if (!Array.isArray(autoSealList) || autoSealList.length === 0) {
|
|
983
1141
|
message.info("\u5F53\u524D\u90E8\u95E8\u3001\u6D41\u7A0B\u4E0B\u672A\u914D\u7F6E\u81EA\u52A8\u76D6\u7AE0\u76F8\u5173\u5370\u7AE0\uFF0C\u8BF7\u8054\u7CFB\u7BA1\u7406\u5458\u914D\u7F6E!");
|
|
@@ -1201,10 +1359,8 @@ var PrintContainer = function (_a) {
|
|
|
1201
1359
|
}, false);
|
|
1202
1360
|
}
|
|
1203
1361
|
} },
|
|
1204
|
-
React.createElement(Menu.Item, { key: "zip
|
|
1205
|
-
React.createElement(Menu.Item, { key: "nozip
|
|
1206
|
-
React.createElement(Menu.Item, { key: "zip" }, "\u538B\u7F29"),
|
|
1207
|
-
React.createElement(Menu.Item, { key: "nozip" }, "\u4E0D\u538B\u7F29"))); }, placement: "bottomLeft" },
|
|
1362
|
+
React.createElement(Menu.Item, { key: "zip" }, "\u538B\u7F29\u7248"),
|
|
1363
|
+
React.createElement(Menu.Item, { key: "nozip" }, "\u4E0D\u538B\u7F29\u7248"))); }, placement: "bottomLeft" },
|
|
1208
1364
|
React.createElement(Button, { type: "primary" }, "\u5BFC\u51FA\u76D6\u7AE0\u4EF6"))
|
|
1209
1365
|
// <Button type="primary" onClick={onAutoSealHandle}>
|
|
1210
1366
|
// 自动盖章
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/// <reference types="react" />
|
|
2
|
+
export declare function useDataSourceRef<D>(dataSource: D[]): import("react").MutableRefObject<D[]>;
|
|
3
|
+
export declare function useAddAndDelRow(showAddIcon: any, showDelIcon: any, dataSourceRef: any, addDataMode: any, onChange: any, rowKey: any, refreshScuCell: any): {
|
|
4
|
+
needAddAndDel: any;
|
|
5
|
+
onAddAndDelHandle: (type: 'add' | 'del', index: number) => void;
|
|
6
|
+
};
|
|
7
|
+
export declare function useMoveRow(onChange: any, dataSourceRef: any, refreshScuCell: any): (dragIndex: number, hoverIndex: number) => void;
|
|
8
|
+
export declare function useEditRow(onChange: any, dataSourceRef: any, { onBatchPastePre, onBatchPastePost }: {
|
|
9
|
+
onBatchPastePre: any;
|
|
10
|
+
onBatchPastePost: any;
|
|
11
|
+
}): {
|
|
12
|
+
onEditableSaveHandle: (record: any, index: number | undefined, _dataIndex?: string) => void;
|
|
13
|
+
onBatchPasteHandle: (records: any, startIndex: any) => void;
|
|
14
|
+
};
|
|
15
|
+
export declare function useScuRfresh(): {
|
|
16
|
+
refreshScuCell: () => void;
|
|
17
|
+
getRefreshScuCell: () => boolean;
|
|
18
|
+
};
|
|
@@ -0,0 +1,178 @@
|
|
|
1
|
+
var __assign = (this && this.__assign) || function () {
|
|
2
|
+
__assign = Object.assign || function(t) {
|
|
3
|
+
for (var s, i = 1, n = arguments.length; i < n; i++) {
|
|
4
|
+
s = arguments[i];
|
|
5
|
+
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
|
|
6
|
+
t[p] = s[p];
|
|
7
|
+
}
|
|
8
|
+
return t;
|
|
9
|
+
};
|
|
10
|
+
return __assign.apply(this, arguments);
|
|
11
|
+
};
|
|
12
|
+
var __spreadArray = (this && this.__spreadArray) || function (to, from) {
|
|
13
|
+
for (var i = 0, il = from.length, j = to.length; i < il; i++, j++)
|
|
14
|
+
to[j] = from[i];
|
|
15
|
+
return to;
|
|
16
|
+
};
|
|
17
|
+
import { useRef, useEffect, useMemo, useCallback } from 'react';
|
|
18
|
+
import update from 'immutability-helper';
|
|
19
|
+
// 设置数据源临时Ref对象
|
|
20
|
+
export function useDataSourceRef(dataSource) {
|
|
21
|
+
var dataSourceRef = useRef(dataSource);
|
|
22
|
+
useEffect(function () {
|
|
23
|
+
dataSourceRef.current = dataSource;
|
|
24
|
+
}, [dataSource]);
|
|
25
|
+
return dataSourceRef;
|
|
26
|
+
}
|
|
27
|
+
// 加减行相关
|
|
28
|
+
export function useAddAndDelRow(showAddIcon, showDelIcon, dataSourceRef, addDataMode, onChange, rowKey, refreshScuCell) {
|
|
29
|
+
var needAddAndDel = useMemo(function () {
|
|
30
|
+
return showAddIcon || showDelIcon;
|
|
31
|
+
}, [showAddIcon, showDelIcon]);
|
|
32
|
+
// 增减行回调
|
|
33
|
+
var onAddAndDelHandle = useCallback(function (type, index) {
|
|
34
|
+
var _a, _b;
|
|
35
|
+
if (typeof addDataMode === 'function') {
|
|
36
|
+
var newDataSource_1 = addDataMode(index, dataSourceRef.current);
|
|
37
|
+
onChange && onChange(newDataSource_1);
|
|
38
|
+
return;
|
|
39
|
+
}
|
|
40
|
+
var newDataSource = __spreadArray([], dataSourceRef.current);
|
|
41
|
+
var newRecord = {};
|
|
42
|
+
if (type === 'add') {
|
|
43
|
+
if (addDataMode === 'blank') {
|
|
44
|
+
// 生成一条空白数据
|
|
45
|
+
newRecord = (_a = {},
|
|
46
|
+
_a[rowKey] = Date.now() + "-" + index,
|
|
47
|
+
_a.__INNER__ADD__DATA = true,
|
|
48
|
+
_a);
|
|
49
|
+
}
|
|
50
|
+
else {
|
|
51
|
+
// 复制当前这条数据
|
|
52
|
+
var currentRecord = newDataSource[index];
|
|
53
|
+
newRecord = __assign(__assign({}, currentRecord), (_b = {}, _b[rowKey] = Date.now() + "-" + index, _b.__INNER__ADD__DATA = true, _b));
|
|
54
|
+
}
|
|
55
|
+
newDataSource.splice(index + 1, 0, newRecord);
|
|
56
|
+
}
|
|
57
|
+
else {
|
|
58
|
+
newDataSource.splice(index, 1);
|
|
59
|
+
}
|
|
60
|
+
refreshScuCell();
|
|
61
|
+
onChange && onChange(newDataSource);
|
|
62
|
+
}, [addDataMode, onChange, dataSourceRef, rowKey, refreshScuCell]);
|
|
63
|
+
return {
|
|
64
|
+
needAddAndDel: needAddAndDel,
|
|
65
|
+
onAddAndDelHandle: onAddAndDelHandle,
|
|
66
|
+
};
|
|
67
|
+
}
|
|
68
|
+
// 拖拽行相关
|
|
69
|
+
export function useMoveRow(onChange, dataSourceRef, refreshScuCell) {
|
|
70
|
+
var onMoveRowHandle = useCallback(function (dragIndex, hoverIndex) {
|
|
71
|
+
var copyDataSource = __spreadArray([], dataSourceRef.current);
|
|
72
|
+
var dragRow = copyDataSource[dragIndex];
|
|
73
|
+
var newDataSource = update(copyDataSource, {
|
|
74
|
+
$splice: [
|
|
75
|
+
[dragIndex, 1],
|
|
76
|
+
[hoverIndex, 0, dragRow],
|
|
77
|
+
],
|
|
78
|
+
});
|
|
79
|
+
refreshScuCell();
|
|
80
|
+
onChange && onChange(newDataSource);
|
|
81
|
+
}, [onChange, dataSourceRef, refreshScuCell]);
|
|
82
|
+
return onMoveRowHandle;
|
|
83
|
+
}
|
|
84
|
+
// 编辑行相关
|
|
85
|
+
function objIsEqual(newObj, oldObj) {
|
|
86
|
+
var keys = Object.keys(newObj);
|
|
87
|
+
for (var i = 0; i < keys.length; i++) {
|
|
88
|
+
var key = keys[i];
|
|
89
|
+
if (oldObj[key] !== newObj[key]) {
|
|
90
|
+
return false;
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
return true;
|
|
94
|
+
}
|
|
95
|
+
export function useEditRow(onChange, dataSourceRef, _a) {
|
|
96
|
+
var onBatchPastePre = _a.onBatchPastePre, onBatchPastePost = _a.onBatchPastePost;
|
|
97
|
+
var onEditableSaveHandle = useCallback(function (record, index, _dataIndex) {
|
|
98
|
+
var _a;
|
|
99
|
+
if (_dataIndex === void 0) { _dataIndex = ''; }
|
|
100
|
+
if (typeof index === 'number') {
|
|
101
|
+
var newDataSource = __spreadArray([], dataSourceRef.current);
|
|
102
|
+
var oldRecord = newDataSource[index];
|
|
103
|
+
// 如果新的record里面的值 老的Record里面有 那么不需要触发onChange
|
|
104
|
+
// 这里主要是为了优化物料组件带来的多次rerender导致的一些问题
|
|
105
|
+
if (objIsEqual(record, oldRecord)) {
|
|
106
|
+
return;
|
|
107
|
+
}
|
|
108
|
+
var newRecord = _dataIndex
|
|
109
|
+
? __assign(__assign(__assign({}, record), oldRecord), (_a = {}, _a[_dataIndex] = record[_dataIndex], _a)) : __assign(__assign({}, oldRecord), record);
|
|
110
|
+
newDataSource.splice(index, 1, newRecord);
|
|
111
|
+
onChange && onChange(newDataSource);
|
|
112
|
+
}
|
|
113
|
+
}, [dataSourceRef, onChange]);
|
|
114
|
+
var onBatchPasteHandle = useCallback(function (records, startIndex) {
|
|
115
|
+
if (!Array.isArray(records)) {
|
|
116
|
+
return;
|
|
117
|
+
}
|
|
118
|
+
// 前置处理
|
|
119
|
+
var pasteRecords = onBatchPastePre ? onBatchPastePre(records) : records;
|
|
120
|
+
// 计算结束位置
|
|
121
|
+
var endIndex = startIndex + pasteRecords.length - 1;
|
|
122
|
+
var currentRecords = Array.isArray(dataSourceRef.current)
|
|
123
|
+
? dataSourceRef.current.slice()
|
|
124
|
+
: [];
|
|
125
|
+
if (endIndex > currentRecords.length - 1) {
|
|
126
|
+
endIndex = currentRecords.length - 1;
|
|
127
|
+
}
|
|
128
|
+
// 从开始位置开始,替换对应的值
|
|
129
|
+
var currentIndex = 0;
|
|
130
|
+
var dataSource = currentRecords.map(function (record, index) {
|
|
131
|
+
if (index >= startIndex && index <= endIndex) {
|
|
132
|
+
var obj = __assign(__assign({}, record), pasteRecords[currentIndex]);
|
|
133
|
+
currentIndex++;
|
|
134
|
+
return obj;
|
|
135
|
+
}
|
|
136
|
+
return record;
|
|
137
|
+
});
|
|
138
|
+
// 后置处理
|
|
139
|
+
var newDataSource = onBatchPastePost
|
|
140
|
+
? onBatchPastePost(dataSource)
|
|
141
|
+
: dataSource;
|
|
142
|
+
// 触发onChange事件
|
|
143
|
+
onChange && onChange(newDataSource);
|
|
144
|
+
}, [dataSourceRef, onChange, onBatchPastePre, onBatchPastePost]);
|
|
145
|
+
return {
|
|
146
|
+
onEditableSaveHandle: onEditableSaveHandle,
|
|
147
|
+
onBatchPasteHandle: onBatchPasteHandle,
|
|
148
|
+
};
|
|
149
|
+
}
|
|
150
|
+
// SCU刷新逻辑
|
|
151
|
+
// 这么写的原因是 如果拖拽行 增减行后,并不能触发column的scu
|
|
152
|
+
// 之前的写法是,通过useState刷新。但是 setState会触发整个组件的刷新
|
|
153
|
+
// 设置数据后,本身会触发setState。导致执行两次rerender。每个单元格都会执行rerender
|
|
154
|
+
// 通过Ref并不会触发 setState 通过setTimeout也不会导致每一个单元格的刷新出现问题
|
|
155
|
+
export function useScuRfresh() {
|
|
156
|
+
var timeOutRef = useRef(null);
|
|
157
|
+
var tableSCURefreshRef = useRef();
|
|
158
|
+
var refreshScuCell = useCallback(function () {
|
|
159
|
+
tableSCURefreshRef.current = true;
|
|
160
|
+
}, []);
|
|
161
|
+
var getRefreshScuCell = useCallback(function () {
|
|
162
|
+
if (tableSCURefreshRef.current) {
|
|
163
|
+
if (timeOutRef.current) {
|
|
164
|
+
clearTimeout(timeOutRef.current);
|
|
165
|
+
timeOutRef.current = null;
|
|
166
|
+
}
|
|
167
|
+
timeOutRef.current = setTimeout(function () {
|
|
168
|
+
tableSCURefreshRef.current = false;
|
|
169
|
+
});
|
|
170
|
+
return true;
|
|
171
|
+
}
|
|
172
|
+
return false;
|
|
173
|
+
}, []);
|
|
174
|
+
return {
|
|
175
|
+
refreshScuCell: refreshScuCell,
|
|
176
|
+
getRefreshScuCell: getRefreshScuCell,
|
|
177
|
+
};
|
|
178
|
+
}
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
var __assign = (this && this.__assign) || function () {
|
|
2
|
+
__assign = Object.assign || function(t) {
|
|
3
|
+
for (var s, i = 1, n = arguments.length; i < n; i++) {
|
|
4
|
+
s = arguments[i];
|
|
5
|
+
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
|
|
6
|
+
t[p] = s[p];
|
|
7
|
+
}
|
|
8
|
+
return t;
|
|
9
|
+
};
|
|
10
|
+
return __assign.apply(this, arguments);
|
|
11
|
+
};
|
|
12
|
+
var __rest = (this && this.__rest) || function (s, e) {
|
|
13
|
+
var t = {};
|
|
14
|
+
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
|
|
15
|
+
t[p] = s[p];
|
|
16
|
+
if (s != null && typeof Object.getOwnPropertySymbols === "function")
|
|
17
|
+
for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
|
|
18
|
+
if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
|
|
19
|
+
t[p[i]] = s[p[i]];
|
|
20
|
+
}
|
|
21
|
+
return t;
|
|
22
|
+
};
|
|
23
|
+
/**
|
|
24
|
+
* 业务封装可编辑表格组件
|
|
25
|
+
*/
|
|
26
|
+
import React, { memo, useRef, useImperativeHandle } from 'react';
|
|
27
|
+
import { Table } from '../../index';
|
|
28
|
+
import { useDataSourceRef, useAddAndDelRow, useScuRfresh, useMoveRow, useEditRow, } from './hooks';
|
|
29
|
+
function ProEditTable(props) {
|
|
30
|
+
var rowKey = props.rowKey, dataSource = props.dataSource, columns = props.columns, onChange = props.onChange, showAddIcon = props.showAddIcon, showDelIcon = props.showDelIcon, _a = props.addDataMode, addDataMode = _a === void 0 ? 'blank' : _a, isMove = props.isMove, isEdit = props.isEdit, isPaste = props.isPaste, tableHandleRef = props.tableHandleRef, onBatchPastePre = props.onBatchPastePre, onBatchPastePost = props.onBatchPastePost, restProps = __rest(props, ["rowKey", "dataSource", "columns", "onChange", "showAddIcon", "showDelIcon", "addDataMode", "isMove", "isEdit", "isPaste", "tableHandleRef", "onBatchPastePre", "onBatchPastePost"]);
|
|
31
|
+
var tableColumns = columns.map(function (item) {
|
|
32
|
+
if (item.shouldCellUpdate) {
|
|
33
|
+
var fn_1 = item.shouldCellUpdate;
|
|
34
|
+
item.shouldCellUpdate = function (record, preRecord) {
|
|
35
|
+
if (getRefreshScuCell()) {
|
|
36
|
+
return true;
|
|
37
|
+
}
|
|
38
|
+
return fn_1(record, preRecord);
|
|
39
|
+
};
|
|
40
|
+
}
|
|
41
|
+
return item;
|
|
42
|
+
});
|
|
43
|
+
// 保存dataSource值存为Ref
|
|
44
|
+
var dataSourceRef = useDataSourceRef(dataSource);
|
|
45
|
+
// SCU逻辑
|
|
46
|
+
var _b = useScuRfresh(), refreshScuCell = _b.refreshScuCell, getRefreshScuCell = _b.getRefreshScuCell;
|
|
47
|
+
// 增减行相关hook
|
|
48
|
+
var _c = useAddAndDelRow(showAddIcon, showDelIcon, dataSourceRef, addDataMode, onChange, rowKey, refreshScuCell), needAddAndDel = _c.needAddAndDel, onAddAndDelHandle = _c.onAddAndDelHandle;
|
|
49
|
+
// 拖拽行相关hook
|
|
50
|
+
var onMoveRowHandle = useMoveRow(onChange, dataSourceRef, refreshScuCell);
|
|
51
|
+
// 修改行相关hook
|
|
52
|
+
var _d = useEditRow(onChange, dataSourceRef, {
|
|
53
|
+
onBatchPastePre: onBatchPastePre,
|
|
54
|
+
onBatchPastePost: onBatchPastePost,
|
|
55
|
+
}), onEditableSaveHandle = _d.onEditableSaveHandle, onBatchPasteHandle = _d.onBatchPasteHandle;
|
|
56
|
+
var innerTableHandleRef = useRef();
|
|
57
|
+
useImperativeHandle(tableHandleRef, function () { return ({
|
|
58
|
+
validate: innerTableHandleRef.current.validate,
|
|
59
|
+
clearErrorClass: innerTableHandleRef.current.clearErrorClass,
|
|
60
|
+
getCurrentPage: innerTableHandleRef.current.getCurrentPage,
|
|
61
|
+
getRealyIndex: innerTableHandleRef.current.getRealyIndex,
|
|
62
|
+
onEditableSaveHandle: onEditableSaveHandle,
|
|
63
|
+
}); });
|
|
64
|
+
return (React.createElement(Table, __assign({ rowKey: rowKey, dataSource: dataSource, columns: tableColumns, hideAddIcon: !showAddIcon, hideDelIcon: !showDelIcon, onAddAndDelHandle: needAddAndDel ? onAddAndDelHandle : undefined, onMoveRow: isMove ? onMoveRowHandle : undefined, onEditableSave: isEdit ? onEditableSaveHandle : undefined, tableHandleRef: innerTableHandleRef, onTableChange: isPaste ? onBatchPasteHandle : undefined }, restProps)));
|
|
65
|
+
}
|
|
66
|
+
export default memo(ProEditTable);
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
/// <reference types="react" />
|
|
2
|
+
import { ColumnsType } from '../../components/Table';
|
|
3
|
+
import { IProps as TableIProps } from '../../components/Table/table';
|
|
4
|
+
export interface IProps<RecordType> extends Omit<TableIProps<RecordType>, 'columns' | 'onChange' | 'onEditableSave'> {
|
|
5
|
+
dataSource: any[];
|
|
6
|
+
columns: ColumnsType<any>;
|
|
7
|
+
rowKey: string;
|
|
8
|
+
onChange?: (dataSource: any[]) => void;
|
|
9
|
+
showAddIcon?: boolean;
|
|
10
|
+
showDelIcon?: boolean;
|
|
11
|
+
/**
|
|
12
|
+
* 增加数据的模式 blank add空白数据; copy add复制数据; 自定义增加
|
|
13
|
+
*/
|
|
14
|
+
addDataMode?: 'blank' | 'copy' | ((index: number, dataSource: any[]) => any[]);
|
|
15
|
+
isMove?: boolean;
|
|
16
|
+
isEdit?: boolean;
|
|
17
|
+
isPaste?: boolean;
|
|
18
|
+
onBatchPastePre?: (data: any[]) => any[];
|
|
19
|
+
onBatchPastePost?: (data: any[]) => any[];
|
|
20
|
+
tableHandleRef?: React.Ref<{
|
|
21
|
+
validate: () => Promise<any>;
|
|
22
|
+
clearErrorClass: (index: number) => void;
|
|
23
|
+
getCurrentPage: () => {
|
|
24
|
+
page: number;
|
|
25
|
+
pageSize: number;
|
|
26
|
+
} | null;
|
|
27
|
+
getRealyIndex: (index: number) => number;
|
|
28
|
+
onEditableSaveHandle: (record: any, index: number | undefined, _dataIndex: string) => void;
|
|
29
|
+
[prop: string]: any;
|
|
30
|
+
}>;
|
|
31
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
package/dist/index.d.ts
CHANGED
|
@@ -17,6 +17,7 @@ export { default as Tabs } from './components/Tabs';
|
|
|
17
17
|
export { default as Modal } from './components/Modal';
|
|
18
18
|
export { default as Pagination } from './components/Pagination';
|
|
19
19
|
export { default as Table } from './components/Table';
|
|
20
|
+
export { default as ProTable } from './components/ProTable';
|
|
20
21
|
export { default as Sortable } from './components/Sortable';
|
|
21
22
|
export { default as SortableCancel } from './components/SortableCancel';
|
|
22
23
|
export { default as Container } from './components/business/Container';
|
package/dist/index.js
CHANGED
|
@@ -145,6 +145,7 @@ export { default as Tabs } from './components/Tabs';
|
|
|
145
145
|
export { default as Modal } from './components/Modal';
|
|
146
146
|
export { default as Pagination } from './components/Pagination';
|
|
147
147
|
export { default as Table } from './components/Table';
|
|
148
|
+
export { default as ProTable } from './components/ProTable';
|
|
148
149
|
export { default as Sortable } from './components/Sortable';
|
|
149
150
|
export { default as SortableCancel } from './components/SortableCancel';
|
|
150
151
|
export { default as Container } from './components/business/Container';
|