cui-print 1.0.28

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.
Files changed (80) hide show
  1. package/README.md +29 -0
  2. package/dist/font/iconfont.css +151 -0
  3. package/dist/font/iconfont.js +1 -0
  4. package/dist/font/iconfont.json +247 -0
  5. package/dist/font/iconfont.ttf +0 -0
  6. package/dist/font/iconfont.woff +0 -0
  7. package/dist/font/iconfont.woff2 +0 -0
  8. package/dist/index.css +1 -0
  9. package/dist/index.es.js +51053 -0
  10. package/dist/index.umd.js +1030 -0
  11. package/dist/print-designer-api/create-style/create-base-component-style.js +116 -0
  12. package/dist/print-designer-api/create-style/create-complex-table-style.js +472 -0
  13. package/dist/print-designer-api/create-style/create-form-component-style.js +78 -0
  14. package/dist/print-designer-api/create-style/create-form-item-style.js +144 -0
  15. package/dist/print-designer-api/create-style/create-grid-style.js +49 -0
  16. package/dist/print-designer-api/create-style/create-table-layout-style.js +128 -0
  17. package/dist/print-designer-api/create-style/create-table-style.js +93 -0
  18. package/dist/print-designer-api/print-designer-helper.js +912 -0
  19. package/dist/print-designer-api/print-designer-style-helper.js +96 -0
  20. package/dist/print-designer-api/print-designer-utils.js +27 -0
  21. package/dist/print-designer-api/print-global-style/base.less +20 -0
  22. package/dist/print-designer-api/print-global-style/common.less +3 -0
  23. package/dist/print-designer-api/print-global-style/custom.less +4 -0
  24. package/dist/print-designer-api/print-global-style/index.css +812 -0
  25. package/dist/print-designer-api/print-global-style/index.js +813 -0
  26. package/dist/print-designer-api/print-global-style/index.less +9 -0
  27. package/dist/print-designer-api/print-global-style/print-base-component.less +123 -0
  28. package/dist/print-designer-api/print-global-style/print-container.less +57 -0
  29. package/dist/print-designer-api/print-global-style/print-continue/index.less +14 -0
  30. package/dist/print-designer-api/print-global-style/print-continue/print-complex-table/auto-continue-not-span.less +61 -0
  31. package/dist/print-designer-api/print-global-style/print-continue/print-complex-table/auto-continue-preview.less +12 -0
  32. package/dist/print-designer-api/print-global-style/print-continue/print-complex-table/auto-continue-span.less +88 -0
  33. package/dist/print-designer-api/print-global-style/print-continue/print-complex-table/fixed-continue.less +37 -0
  34. package/dist/print-designer-api/print-global-style/print-continue/print-complex-table/index.less +96 -0
  35. package/dist/print-designer-api/print-global-style/print-continue/print-complex-table/pagination-preview.less +12 -0
  36. package/dist/print-designer-api/print-global-style/print-continue/print-complex-table/pagination.less +61 -0
  37. package/dist/print-designer-api/print-global-style/print-form-component.less +161 -0
  38. package/dist/print-designer-api/print-global-style/print-form-item.less +162 -0
  39. package/dist/print-designer-api/print-global-style/printing.less +16 -0
  40. package/dist/print-designer-api/print-soket.js +31 -0
  41. package/dist/print-designer-api/use-create-html/create-html-utils.js +43 -0
  42. package/dist/print-designer-api/use-create-html/index.js +287 -0
  43. package/dist/print-designer-api/use-create-html/use-base-component-helper.js +129 -0
  44. package/dist/print-designer-api/use-create-html/use-complex-table-helper/complex-table-tools.js +129 -0
  45. package/dist/print-designer-api/use-create-html/use-complex-table-helper/create-table-header.js +111 -0
  46. package/dist/print-designer-api/use-create-html/use-complex-table-helper/index.js +87 -0
  47. package/dist/print-designer-api/use-create-html/use-complex-table-helper/use-auto-height-preview.js +84 -0
  48. package/dist/print-designer-api/use-create-html/use-complex-table-helper/use-auto-height.js +379 -0
  49. package/dist/print-designer-api/use-create-html/use-complex-table-helper/use-default.js +75 -0
  50. package/dist/print-designer-api/use-create-html/use-complex-table-helper/use-fixed-height.js +220 -0
  51. package/dist/print-designer-api/use-create-html/use-complex-table-helper/use-pagination-preview.js +84 -0
  52. package/dist/print-designer-api/use-create-html/use-complex-table-helper/use-pagination.js +272 -0
  53. package/dist/print-designer-api/use-create-html/use-form-component-helper.js +164 -0
  54. package/dist/print-designer-api/use-create-html/use-format/index.js +102 -0
  55. package/dist/print-designer-api/use-create-html/use-format/use-complex-table-auto.js +337 -0
  56. package/dist/print-designer-api/use-create-html/use-format/use-complex-table-fiexd.js +233 -0
  57. package/dist/print-designer-api/use-create-html/use-format/use-complex-table-pagination.js +286 -0
  58. package/dist/print-designer-api/use-create-html/use-grid-helper.js +35 -0
  59. package/dist/print-designer-api/use-create-html/use-table-layout-helper.js +213 -0
  60. package/dist/print-designer-api/use-create-print-js/index.js +147 -0
  61. package/dist/print-designer-api/use-create-print-js/use-base-component-helper.js +54 -0
  62. package/dist/print-designer-api/use-create-print-js/use-form-component-helper.js +4 -0
  63. package/dist/print-designer-api/use-create-print-js/use-table-layout-helper.js +5 -0
  64. package/dist/print-designer-images/demo.jpg +0 -0
  65. package/dist/print-designer-images/demo02.jpg +0 -0
  66. package/dist/style/default-style.css +137 -0
  67. package/dist/style/main.less +66 -0
  68. package/dist/test/base/designer-config.js +594 -0
  69. package/dist/test/base/index.js +3 -0
  70. package/dist/test/base/print-data.js +40 -0
  71. package/dist/test/complex-table/designer-config.js +1668 -0
  72. package/dist/test/complex-table/index.js +3 -0
  73. package/dist/test/complex-table/print-data.js +294 -0
  74. package/dist/test/form/designer-config.js +2057 -0
  75. package/dist/test/form/index.js +3 -0
  76. package/dist/test/form/print-data.js +38 -0
  77. package/dist/test/index.js +4 -0
  78. package/dist/wui-print-designer-plugins/JsBarcode.all.min.js +2 -0
  79. package/dist/wui-print-designer-plugins/qrcode.min.js +1 -0
  80. package/package.json +65 -0
@@ -0,0 +1,337 @@
1
+ import { deepCopy, extractNumbers } from "../../print-designer-utils";
2
+ export default ({ printData, printConfig, formConfig, layoutConfig, printedRows, continuePrintElements } = {}) => {
3
+ const formatLayoutConfig = () => {
4
+ console.log("【自适应高度续打】formatLayoutConfig入参===>", {
5
+ printData: deepCopy(printData),
6
+ printConfig: deepCopy(printConfig),
7
+ formConfig: deepCopy(formConfig),
8
+ layoutConfig: deepCopy(layoutConfig),
9
+ printedRows,
10
+ continuePrintElements
11
+ });
12
+ let continueDetails = _getContinueDetails();
13
+ console.log("【自适应高度续打】获取续打信息====>continueDetails", continueDetails);
14
+ if (!continueDetails.continueState || !continueDetails.dataField) {
15
+ return layoutConfig;
16
+ }
17
+ printData[continueDetails.dataField] = _formatTableData({ continueDetails });
18
+ let continueAllData = printData[continueDetails.dataField];
19
+ if (!continueAllData && printedRows <= 0) {
20
+ // 没有续打数据 之前未打印数据
21
+ return layoutConfig;
22
+ }
23
+ if (!continueAllData && printedRows > 0) {
24
+ // 没有续打数据 之前已打印数据
25
+ return [];
26
+ }
27
+ console.log("【自适应高度续打】处理后的数据====>continueAllData", deepCopy(continueAllData));
28
+ let continueSplitData = _splitContinueAllData({
29
+ continueAllData,
30
+ pageMaxRow: continueDetails.pageMaxRow,
31
+ continueBeforeRowCount: continueDetails.continueBeforeRowCount
32
+ });
33
+ console.log("【自适应高度续打】拆分数据====>continueSplitData", continueSplitData);
34
+ let oldLayoutConfig = _filterLayoutConfig();
35
+ let newLayoutConfig = [];
36
+ if (printedRows.length <= 0) {
37
+ // 不是续打
38
+ continueSplitData.forEach((item, index) => {
39
+ let currentPage = continueDetails.continueBeginPageNum + index;
40
+ let pageLayoutConfig = _createPageLayoutConfig({
41
+ oldLayoutConfig,
42
+ continueDetails,
43
+ pageComplateTableData: item,
44
+ currentPage: currentPage,
45
+ pageCount: continueSplitData.length
46
+ });
47
+ newLayoutConfig.push(...pageLayoutConfig);
48
+ });
49
+ }
50
+ if (printedRows.length > 0) {
51
+ // 是续打
52
+ continueSplitData.forEach((item, index) => {
53
+ let currentPage = continueDetails.continueBeginPageNum + index;
54
+ let pageLayoutConfig = _createContinuePageLayoutConfig({
55
+ oldLayoutConfig,
56
+ continueDetails,
57
+ pageComplateTableData: item,
58
+ currentPage: currentPage,
59
+ pageCount: continueDetails.continueBeginPageNum + continueSplitData.length - 1,
60
+ continueBeforeRowCount: continueDetails.continueBeforeRowCount
61
+ });
62
+ newLayoutConfig.push(...pageLayoutConfig);
63
+ });
64
+ }
65
+ if (!newLayoutConfig) {
66
+ newLayoutConfig = [];
67
+ }
68
+ return newLayoutConfig;
69
+ };
70
+ function _createPageLayoutConfig({ oldLayoutConfig, continueDetails, pageComplateTableData, currentPage, pageCount } = {}) {
71
+ let pageLayoutConfig = deepCopy(oldLayoutConfig);
72
+ let newField = `_continue_${continueDetails.dataField}_${currentPage}`;
73
+ let nowContinueConfig = {
74
+ type: "auto_default",
75
+ currentPage,
76
+ blankRowCount: 0
77
+ };
78
+ pageLayoutConfig[continueDetails.layoutConfigIndex].props.field = newField;
79
+ printData[newField] = deepCopy(pageComplateTableData);
80
+ // 最后一页还有空白行
81
+ if (currentPage == pageCount && pageComplateTableData.length < continueDetails.pageMaxRow) {
82
+ nowContinueConfig.blankRowCount = continueDetails.pageMaxRow - pageComplateTableData.length;
83
+ nowContinueConfig.type = "auto_afterBlankRow";
84
+ }
85
+ pageLayoutConfig[continueDetails.layoutConfigIndex]._continueConfig = nowContinueConfig;
86
+ if (pageCount > 1) {
87
+ if (currentPage > 1) {
88
+ // 添加分页上边距
89
+ pageLayoutConfig.unshift({
90
+ type: "pageTop"
91
+ });
92
+ }
93
+ if (currentPage < pageCount) {
94
+ // 添加分页下边距
95
+ pageLayoutConfig.push({
96
+ type: "pageBottom"
97
+ });
98
+ // 添加分页
99
+ pageLayoutConfig.push({
100
+ type: "pageBreak"
101
+ });
102
+ }
103
+ }
104
+ return pageLayoutConfig;
105
+ }
106
+ function _createContinuePageLayoutConfig({
107
+ oldLayoutConfig,
108
+ continueDetails,
109
+ pageComplateTableData,
110
+ currentPage,
111
+ pageCount,
112
+ continueBeforeRowCount
113
+ } = {}) {
114
+ let continuePageLayoutConfig = deepCopy(oldLayoutConfig);
115
+ let newField = `_continue_${continueDetails.dataField}_${currentPage}`;
116
+ continuePageLayoutConfig[continueDetails.layoutConfigIndex].props.field = newField;
117
+ printData[newField] = deepCopy(pageComplateTableData);
118
+ // _continueConfig先赋值
119
+ continuePageLayoutConfig[continueDetails.layoutConfigIndex]._continueConfig = {
120
+ type: "auto_default",
121
+ currentPage,
122
+ blankRowCount: 0
123
+ };
124
+ if (currentPage === continueDetails.continueBeginPageNum && continueBeforeRowCount > 0) {
125
+ // 第一页是续打页
126
+ continuePageLayoutConfig.forEach((item, index) => {
127
+ if (index < continueDetails.layoutConfigIndex) {
128
+ item._continueConfig = {
129
+ isBefore: true
130
+ };
131
+ } else if (index > continueDetails.layoutConfigIndex) {
132
+ item._continueConfig = {
133
+ isAfter: true
134
+ };
135
+ }
136
+ });
137
+ continuePageLayoutConfig[continueDetails.layoutConfigIndex]._continueConfig = {
138
+ type: "auto_continuingContent",
139
+ currentPage,
140
+ continueBeforeRowCount: continueBeforeRowCount,
141
+ blankRowCount: 0
142
+ };
143
+ } else if (
144
+ pageCount > continueDetails.continueBeginPageNum &&
145
+ currentPage == pageCount &&
146
+ pageComplateTableData.length < continueDetails.pageMaxRow
147
+ ) {
148
+ // 最后一页还有空白行
149
+ continuePageLayoutConfig[continueDetails.layoutConfigIndex]._continueConfig = {
150
+ type: "auto_afterBlankRow",
151
+ currentPage,
152
+ blankRowCount: continueDetails.pageMaxRow - pageComplateTableData.length
153
+ };
154
+ }
155
+ if (currentPage > continueDetails.continueBeginPageNum) {
156
+ // 添加分页上边距
157
+ continuePageLayoutConfig.unshift({
158
+ type: "pageTop"
159
+ });
160
+ }
161
+ if (currentPage < pageCount) {
162
+ // 添加分页下边距
163
+ continuePageLayoutConfig.push({
164
+ type: "pageBottom"
165
+ });
166
+ // 添加分页
167
+ continuePageLayoutConfig.push({
168
+ type: "pageBreak"
169
+ });
170
+ }
171
+ return continuePageLayoutConfig;
172
+ }
173
+ function _filterLayoutConfig() {
174
+ // 只保留第一个续打表格
175
+ let newLayoutConfig = [];
176
+ let continueConfigItem = false;
177
+ layoutConfig.forEach((item, index) => {
178
+ let nowProps = !!item.props ? item.props : {};
179
+ if (item.type == "complexTable" && !!nowProps.canContinue && !!continueConfigItem) {
180
+ return;
181
+ }
182
+ if (item.type == "complexTable" && !!nowProps.canContinue) {
183
+ continueConfigItem = item;
184
+ }
185
+ newLayoutConfig.push(item);
186
+ });
187
+ return newLayoutConfig;
188
+ }
189
+ function _getContinueDetails() {
190
+ let continueDetails = {
191
+ continueState: false
192
+ };
193
+ if (!layoutConfig || layoutConfig.length <= 0) {
194
+ return continueDetails;
195
+ }
196
+ let continueConfigItem = false;
197
+ layoutConfig.forEach((item, index) => {
198
+ if (!!continueConfigItem) {
199
+ return;
200
+ }
201
+ let nowProps = !!item.props ? item.props : {};
202
+ if (item.type == "complexTable" && !!nowProps.canContinue) {
203
+ continueConfigItem = item;
204
+ continueDetails.layoutConfigIndex = index;
205
+ }
206
+ });
207
+ if (!continueConfigItem) {
208
+ return continueDetails;
209
+ }
210
+ let continueConfigItemProps = !!continueConfigItem.props ? continueConfigItem.props : {};
211
+ let continueConfigItemStyle = !!continueConfigItem.style ? continueConfigItem.style : {};
212
+ continueDetails.continueState = true;
213
+ continueDetails.continueConfigItem = deepCopy(continueConfigItem);
214
+ continueDetails.dataField = !!continueConfigItemProps.field ? continueConfigItemProps.field : "";
215
+ continueDetails.pageMaxRow = !!continueConfigItemProps.perPageMaxRow ? continueConfigItemProps.perPageMaxRow : 0;
216
+ continueDetails.contentRowHeight = !!continueConfigItemProps.contentRowHeight ? continueConfigItemProps.contentRowHeight : 0;
217
+ if (!continueConfigItemStyle.contentCell_borderWidth && !!continueConfigItemStyle.contentCell_borderTopWidth) {
218
+ continueDetails.contentRowBorderTop = extractNumbers(continueConfigItemStyle.contentCell_borderTopWidth);
219
+ } else if (!!continueConfigItemStyle.contentCell_borderWidth) {
220
+ continueDetails.contentRowBorderTop = extractNumbers(continueConfigItemStyle.contentCell_borderWidth);
221
+ } else {
222
+ continueDetails.contentRowBorderTop = 0;
223
+ }
224
+ if (!continueConfigItemStyle.contentCell_borderWidth && !!continueConfigItemStyle.contentCell_borderBottomWidth) {
225
+ continueDetails.contentRowBorderBottom = extractNumbers(continueConfigItemStyle.contentCell_borderBottomWidth);
226
+ } else if (!!continueConfigItemStyle.contentCell_borderWidth) {
227
+ continueDetails.contentRowBorderBottom = extractNumbers(continueConfigItemStyle.contentCell_borderWidth);
228
+ } else {
229
+ continueDetails.contentRowBorderBottom = 0;
230
+ }
231
+ continueDetails.continueBeginPageNum = 1; //页码从1开始,1代表第一页
232
+ continueDetails.continueBeforeRowCount = 0;
233
+ // 页尾向上合并行数
234
+ if (!!continueConfigItemProps.mergedFooterRowCount || continueConfigItemProps.mergedFooterRowCount === 0) {
235
+ continueDetails.mergedFooterRowCount = continueConfigItemProps.mergedFooterRowCount;
236
+ } else {
237
+ continueDetails.mergedFooterRowCount = 1;
238
+ }
239
+ //_printDataTotal内部逻辑使用
240
+ continueDetails._printDataTotal = 0;
241
+ return continueDetails;
242
+ }
243
+ function _formatTableData({ continueDetails } = {}) {
244
+ let oldTableData = [];
245
+ let tempTableData = [];
246
+ let tableDataGroup = [];
247
+ if (!!printData[continueDetails.dataField]) {
248
+ oldTableData = deepCopy(printData[continueDetails.dataField]);
249
+ }
250
+ if (!printedRows) {
251
+ printedRows = [];
252
+ }
253
+ tempTableData.push(...printedRows, ...oldTableData);
254
+ tempTableData.forEach((item, index) => {
255
+ let groupItem = [];
256
+ let excessRows = _getContentTrExcessRows({ continueDetails, index, rowData: item });
257
+ item._autoHeightMode_excessRowsLength = excessRows.length;
258
+ groupItem.push(item, ...excessRows);
259
+ tableDataGroup.push(groupItem);
260
+ });
261
+ let newTableData = [];
262
+ let nowPrintedRowCount = 0;
263
+ tableDataGroup.forEach((groupItem, groupIndex) => {
264
+ if (groupIndex < printedRows.length) {
265
+ nowPrintedRowCount += groupItem.length;
266
+ return;
267
+ }
268
+ if (groupIndex.length > 1) {
269
+ groupItem[0]._autoHeightMode_type = "excessContentRow";
270
+ } else {
271
+ groupItem[0]._autoHeightMode_type = "notExcess";
272
+ }
273
+ newTableData.push(...groupItem);
274
+ });
275
+ continueDetails.continueBeforeRowCount = nowPrintedRowCount % continueDetails.pageMaxRow;
276
+ if (continueDetails.continueBeforeRowCount === 0) {
277
+ continueDetails.continueBeginPageNum = nowPrintedRowCount / continueDetails.pageMaxRow + 1;
278
+ } else {
279
+ continueDetails.continueBeginPageNum = Math.ceil(nowPrintedRowCount / continueDetails.pageMaxRow);
280
+ }
281
+ return newTableData;
282
+ }
283
+ function _getContentTrExcessRows({ continueDetails, index, rowData }) {
284
+ // 获取超出行数
285
+ const trElement = continuePrintElements.querySelector(`[content-index="${index}"]`);
286
+ let trContentMinHeight =
287
+ trElement.clientHeight - continueDetails.contentRowBorderTop - continueDetails.contentRowBorderBottom;
288
+ let trContentHeight = trContentMinHeight;
289
+ let contentTextElements = trElement.querySelectorAll(".content-text");
290
+ for (let i = 0; i < contentTextElements.length; i++) {
291
+ let element = contentTextElements[i];
292
+ if (element.offsetHeight > trContentHeight) {
293
+ trContentHeight = element.offsetHeight;
294
+ }
295
+ }
296
+ let excessRows = [];
297
+ let excessRowsLength = (trContentHeight - continueDetails.contentRowHeight) / continueDetails.contentRowHeight;
298
+ excessRowsLength = Math.ceil(excessRowsLength);
299
+ continueDetails._printDataTotal += excessRowsLength + 1;
300
+ // 剩余行数
301
+ let pageSurplus = continueDetails.pageMaxRow - (continueDetails._printDataTotal % continueDetails.pageMaxRow);
302
+ if (pageSurplus >= 0 && pageSurplus <= continueDetails.mergedFooterRowCount) {
303
+ excessRowsLength += pageSurplus;
304
+ continueDetails._printDataTotal += pageSurplus;
305
+ }
306
+ for (let i = 0; i < excessRowsLength; i++) {
307
+ let newRowData = deepCopy(rowData);
308
+ newRowData._autoHeightMode_type = "excessBlankRow";
309
+ newRowData._autoHeightMode_excessIndex = i;
310
+ newRowData._autoHeightMode_excessRowsLength = excessRowsLength;
311
+ if (index < printedRows.length) {
312
+ newRowData._autoHeightMode_isPrinted = true;
313
+ } else {
314
+ newRowData._autoHeightMode_isPrinted = false;
315
+ }
316
+ excessRows.push(newRowData);
317
+ }
318
+ return excessRows;
319
+ }
320
+ function _splitContinueAllData({ continueAllData, pageMaxRow, continueBeforeRowCount }) {
321
+ let result = [];
322
+ let newAllData = continueAllData;
323
+ if (printedRows.length > 0) {
324
+ let endIndex = pageMaxRow - continueBeforeRowCount;
325
+ let firstContinueData = continueAllData.slice(0, endIndex);
326
+ result.push(firstContinueData);
327
+ newAllData = continueAllData.slice(endIndex, continueAllData.length);
328
+ }
329
+ for (let i = 0; i < newAllData.length; i += pageMaxRow) {
330
+ result.push(newAllData.slice(i, i + pageMaxRow));
331
+ }
332
+ return result;
333
+ }
334
+ return {
335
+ formatLayoutConfig
336
+ };
337
+ };
@@ -0,0 +1,233 @@
1
+ import { deepCopy } from "../../print-designer-utils";
2
+ export default ({ printData, printConfig, formConfig, layoutConfig, printedRowCount } = {}) => {
3
+ const formatLayoutConfig = () => {
4
+ console.log("【固定高度续打】formatLayoutConfig入参===>", {
5
+ printData: deepCopy(printData),
6
+ printConfig: deepCopy(printConfig),
7
+ formConfig: deepCopy(formConfig),
8
+ layoutConfig: deepCopy(layoutConfig),
9
+ printedRowCount
10
+ });
11
+ let continueDetails = _getContinueDetails();
12
+ console.log("【固定高度续打】获取续打信息====>continueDetails", continueDetails);
13
+ let continueAllData = printData[continueDetails.dataField];
14
+ if (!continueAllData && printedRowCount <= 0) {
15
+ // 没有续打数据 之前未打印数据
16
+ return layoutConfig;
17
+ }
18
+ if (!continueAllData && printedRowCount > 0) {
19
+ // 没有续打数据 之前已打印数据
20
+ return [];
21
+ }
22
+ let continueSplitData = _splitContinueAllData({
23
+ continueAllData,
24
+ pageMaxRow: continueDetails.pageMaxRow,
25
+ continueBeforeRowCount: continueDetails.continueBeforeRowCount
26
+ });
27
+ let oldLayoutConfig = _filterLayoutConfig();
28
+ let newLayoutConfig = [];
29
+ if (printedRowCount <= 0) {
30
+ // 不是续打
31
+ continueSplitData.forEach((item, index) => {
32
+ let pageLayoutConfig = _createPageLayoutConfig({
33
+ oldLayoutConfig,
34
+ continueDetails,
35
+ pageComplateTableData: item,
36
+ currentPage: continueDetails.continueBeginPageNum + index,
37
+ pageCount: continueSplitData.length
38
+ });
39
+ newLayoutConfig.push(...pageLayoutConfig);
40
+ });
41
+ }
42
+ if (printedRowCount > 0) {
43
+ // 是续打
44
+ continueSplitData.forEach((item, index) => {
45
+ let pageLayoutConfig = _createContinuePageLayoutConfig({
46
+ oldLayoutConfig,
47
+ continueDetails,
48
+ pageComplateTableData: item,
49
+ currentPage: continueDetails.continueBeginPageNum + index,
50
+ pageCount: continueDetails.continueBeginPageNum + continueSplitData.length - 1,
51
+ continueBeforeRowCount: continueDetails.continueBeforeRowCount
52
+ });
53
+ newLayoutConfig.push(...pageLayoutConfig);
54
+ });
55
+ }
56
+ if (!newLayoutConfig) {
57
+ newLayoutConfig = [];
58
+ }
59
+ return newLayoutConfig;
60
+ };
61
+ function _createPageLayoutConfig({ oldLayoutConfig, continueDetails, pageComplateTableData, currentPage, pageCount } = {}) {
62
+ let pageLayoutConfig = deepCopy(oldLayoutConfig);
63
+ let newField = `_continue_${continueDetails.dataField}_${currentPage}`;
64
+ let nowContinueConfig = {
65
+ type: "fixed_default",
66
+ currentPage,
67
+ blankRowCount: 0
68
+ };
69
+ pageLayoutConfig[continueDetails.layoutConfigIndex].props.field = newField;
70
+ printData[newField] = deepCopy(pageComplateTableData);
71
+ // 最后一页还有空白行
72
+ if (currentPage == pageCount && pageComplateTableData.length < continueDetails.pageMaxRow) {
73
+ nowContinueConfig.blankRowCount = continueDetails.pageMaxRow - pageComplateTableData.length;
74
+ nowContinueConfig.type = "fixed_afterBlankRow";
75
+ }
76
+ pageLayoutConfig[continueDetails.layoutConfigIndex]._continueConfig = nowContinueConfig;
77
+ if (pageCount > 1) {
78
+ if (currentPage > 1) {
79
+ // 添加分页上边距
80
+ pageLayoutConfig.unshift({
81
+ type: "pageTop"
82
+ });
83
+ }
84
+ if (currentPage < pageCount) {
85
+ // 添加分页下边距
86
+ pageLayoutConfig.push({
87
+ type: "pageBottom"
88
+ });
89
+ // 添加分页
90
+ pageLayoutConfig.push({
91
+ type: "pageBreak"
92
+ });
93
+ }
94
+ }
95
+ return pageLayoutConfig;
96
+ }
97
+ function _createContinuePageLayoutConfig({
98
+ oldLayoutConfig,
99
+ continueDetails,
100
+ pageComplateTableData,
101
+ currentPage,
102
+ pageCount,
103
+ continueBeforeRowCount
104
+ } = {}) {
105
+ let continuePageLayoutConfig = deepCopy(oldLayoutConfig);
106
+ let newField = `_continue_${continueDetails.dataField}_${currentPage}`;
107
+ continuePageLayoutConfig[continueDetails.layoutConfigIndex].props.field = newField;
108
+ printData[newField] = deepCopy(pageComplateTableData);
109
+ // _continueConfig先赋值
110
+ continuePageLayoutConfig[continueDetails.layoutConfigIndex]._continueConfig = {
111
+ type: "fixed_default",
112
+ currentPage,
113
+ blankRowCount: 0
114
+ };
115
+ if (currentPage === continueDetails.continueBeginPageNum && continueBeforeRowCount > 0) {
116
+ // 第一页是续打页
117
+ continuePageLayoutConfig.forEach((item, index) => {
118
+ if (index < continueDetails.layoutConfigIndex) {
119
+ item._continueConfig = {
120
+ isBefore: true
121
+ };
122
+ } else if (index > continueDetails.layoutConfigIndex) {
123
+ item._continueConfig = {
124
+ isAfter: true
125
+ };
126
+ }
127
+ });
128
+ continuePageLayoutConfig[continueDetails.layoutConfigIndex]._continueConfig = {
129
+ type: "fixed_continuingContent",
130
+ currentPage,
131
+ continueBeforeRowCount: continueBeforeRowCount,
132
+ blankRowCount: 0
133
+ };
134
+ } else if (
135
+ pageCount > continueDetails.continueBeginPageNum &&
136
+ currentPage == pageCount &&
137
+ pageComplateTableData.length < continueDetails.pageMaxRow
138
+ ) {
139
+ // 最后一页还有空白行
140
+ continuePageLayoutConfig[continueDetails.layoutConfigIndex]._continueConfig = {
141
+ type: "fixed_afterBlankRow",
142
+ currentPage,
143
+ blankRowCount: continueDetails.pageMaxRow - pageComplateTableData.length
144
+ };
145
+ }
146
+ if (currentPage > continueDetails.continueBeginPageNum) {
147
+ // 添加分页上边距
148
+ continuePageLayoutConfig.unshift({
149
+ type: "pageTop"
150
+ });
151
+ }
152
+ if (currentPage < pageCount) {
153
+ // 添加分页下边距
154
+ continuePageLayoutConfig.push({
155
+ type: "pageBottom"
156
+ });
157
+ // 添加分页
158
+ continuePageLayoutConfig.push({
159
+ type: "pageBreak"
160
+ });
161
+ }
162
+ return continuePageLayoutConfig;
163
+ }
164
+ function _filterLayoutConfig() {
165
+ // 只保留第一个续打表格
166
+ let newLayoutConfig = [];
167
+ let continueConfigItem = false;
168
+ layoutConfig.forEach((item, index) => {
169
+ let nowProps = !!item.props ? item.props : {};
170
+ if (item.type == "complexTable" && !!nowProps.canContinue && !!continueConfigItem) {
171
+ return;
172
+ }
173
+ if (item.type == "complexTable" && !!nowProps.canContinue) {
174
+ continueConfigItem = item;
175
+ }
176
+ newLayoutConfig.push(item);
177
+ });
178
+ return newLayoutConfig;
179
+ }
180
+ function _getContinueDetails() {
181
+ let continueDetails = {
182
+ continueState: false
183
+ };
184
+ if (!layoutConfig || layoutConfig.length <= 0) {
185
+ return continueDetails;
186
+ }
187
+ let continueConfigItem = false;
188
+ layoutConfig.forEach((item, index) => {
189
+ if (!!continueConfigItem) {
190
+ return;
191
+ }
192
+ let nowProps = !!item.props ? item.props : {};
193
+ if (item.type == "complexTable" && !!nowProps.canContinue) {
194
+ continueConfigItem = item;
195
+ continueDetails.layoutConfigIndex = index;
196
+ }
197
+ });
198
+ if (!continueConfigItem) {
199
+ return continueDetails;
200
+ }
201
+ let continueConfigItemProps = !!continueConfigItem.props ? continueConfigItem.props : {};
202
+ continueDetails.continueState = true;
203
+ continueDetails.continueConfigItem = deepCopy(continueConfigItem);
204
+ continueDetails.dataField = !!continueConfigItemProps.field ? continueConfigItemProps.field : "";
205
+ continueDetails.pageMaxRow = !!continueConfigItemProps.perPageMaxRow ? continueConfigItemProps.perPageMaxRow : 0;
206
+ continueDetails.continueBeforeRowCount = printedRowCount % continueDetails.pageMaxRow;
207
+ if (printedRowCount <= 0) {
208
+ continueDetails.continueBeginPageNum = 1;
209
+ } else if (continueDetails.continueBeforeRowCount === 0) {
210
+ continueDetails.continueBeginPageNum = printedRowCount / continueDetails.pageMaxRow + 1;
211
+ } else {
212
+ continueDetails.continueBeginPageNum = Math.ceil(printedRowCount / continueDetails.pageMaxRow);
213
+ }
214
+ return continueDetails;
215
+ }
216
+ function _splitContinueAllData({ continueAllData, pageMaxRow, continueBeforeRowCount }) {
217
+ let result = [];
218
+ let newAllData = continueAllData;
219
+ if (printedRowCount > 0) {
220
+ let endIndex = pageMaxRow - continueBeforeRowCount;
221
+ let firstContinueData = continueAllData.slice(0, endIndex);
222
+ result.push(firstContinueData);
223
+ newAllData = continueAllData.slice(endIndex, continueAllData.length);
224
+ }
225
+ for (let i = 0; i < newAllData.length; i += pageMaxRow) {
226
+ result.push(newAllData.slice(i, i + pageMaxRow));
227
+ }
228
+ return result;
229
+ }
230
+ return {
231
+ formatLayoutConfig
232
+ };
233
+ };