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,912 @@
1
+ import printDesignerStyleHelper from "./print-designer-style-helper";
2
+ import { deepCopy } from "./print-designer-utils";
3
+ import useCreateHtml from "./use-create-html/index";
4
+ import useCreatePrintJs from "./use-create-print-js/index";
5
+ const createPrintDataByLayoutConfig = (layoutConfig) => {
6
+ // 通过布局配置生成打印数据
7
+ let printData = {};
8
+ if (!layoutConfig || layoutConfig.length <= 0) {
9
+ return printData;
10
+ }
11
+ layoutConfig.forEach((item, index) => {
12
+ if (item.type == "grid") {
13
+ item.children.forEach((gridItem, gridItemIndex) => {
14
+ gridItem.children.forEach((componentItem, componentIndex) => {
15
+ _createPrintDataItem(componentItem);
16
+ });
17
+ });
18
+ } else if (item.type == "tableLayout") {
19
+ item.children.forEach((componentItem, componentIndex) => {
20
+ _createPrintDataItem(componentItem);
21
+ });
22
+ } else {
23
+ _createPrintDataItem(item);
24
+ }
25
+ });
26
+ function _createPrintDataItem(componentItem) {
27
+ let componentItemProps = !!componentItem.props ? componentItem.props : {};
28
+ let componentItemField = componentItemProps.field;
29
+ if (!componentItemField) {
30
+ return;
31
+ }
32
+ if (componentItem.type == "table") {
33
+ printData[componentItemField] = [];
34
+ if (!!componentItem.columns && componentItem.columns.length > 0) {
35
+ let rowData = {};
36
+ componentItem.columns.forEach((columnItem, columnIndex) => {
37
+ if (!columnItem.props.field) {
38
+ return;
39
+ }
40
+ rowData[columnItem.props.field] = "";
41
+ });
42
+ printData[componentItemField].push(rowData);
43
+ }
44
+ return;
45
+ }
46
+ if (componentItem.type == "complexTable") {
47
+ printData[componentItemField] = [];
48
+ if (!!componentItemProps.columnsField && componentItemProps.columnsField.length > 0) {
49
+ let rowData = {};
50
+ componentItemProps.columnsField.forEach((columnItem, columnIndex) => {
51
+ if (!columnItem.field) {
52
+ return;
53
+ }
54
+ rowData[columnItem.field] = "";
55
+ });
56
+ printData[componentItemField].push(rowData);
57
+ }
58
+ return;
59
+ }
60
+ printData[componentItemField] = "";
61
+ }
62
+ return printData;
63
+ };
64
+ const createPrintHtmlByDesignerConfig = ({
65
+ renderType = "print",
66
+ printData = {},
67
+ printConfig,
68
+ formConfig,
69
+ layoutConfig,
70
+ printedRowCount = 0,
71
+ printedRows = [],
72
+ continuePrintElements,
73
+ tablePaginationElements,
74
+ enableZoom = false
75
+ }) => {
76
+ // 通过设计器配置生成打印html
77
+ let printHtml = "";
78
+ if (!printConfig || !formConfig || !layoutConfig) {
79
+ return printHtml;
80
+ }
81
+ if (!printData) {
82
+ printData = {};
83
+ }
84
+ const errorLogs = [];
85
+ const createHtmlInstance = useCreateHtml({
86
+ printData,
87
+ printConfig,
88
+ formConfig,
89
+ layoutConfig,
90
+ printedRowCount,
91
+ printedRows,
92
+ continuePrintElements,
93
+ tablePaginationElements,
94
+ errorLogs
95
+ });
96
+ if (createHtmlInstance.layoutConfig.length <= 0) {
97
+ return _getReturnStr();
98
+ }
99
+ createHtmlInstance.layoutConfig.forEach((item, index) => {
100
+ if (item.type == "grid") {
101
+ printHtml += createHtmlInstance.gridHelper.createGridHtml(item);
102
+ } else if (item.type == "tableLayout") {
103
+ printHtml += createHtmlInstance.tableLayoutHelper.createTableLayoutHtml(item);
104
+ } else {
105
+ printHtml += createHtmlInstance.createHtmlByComponentItem(item);
106
+ }
107
+ });
108
+ if (errorLogs.length > 0) {
109
+ console.warn(`创建打印文档异常日志:\n${errorLogs.join("\n")}`);
110
+ return false;
111
+ }
112
+ function _getReturnStr() {
113
+ // 返参
114
+ let containerClassStr = _getPrintContainerClass();
115
+ let containerStyle = printDesignerStyleHelper.createContainerStyle({
116
+ styleConfig: printConfig.style
117
+ });
118
+ containerStyle += printDesignerStyleHelper.createPageSizeStyle({
119
+ printConfig: printConfig
120
+ });
121
+ if (!!enableZoom) {
122
+ containerStyle += printDesignerStyleHelper.createContainerScaleStyle({
123
+ printConfig: printConfig
124
+ });
125
+ }
126
+ printHtml = `<div class="print-container ${containerClassStr}" style="${containerStyle}">${printHtml}</div>`;
127
+ return printHtml;
128
+ }
129
+ function _getPrintContainerClass() {
130
+ let containerClassList = [];
131
+ let pageSizeStr = !!printConfig.pageSize ? printConfig.pageSize : "";
132
+ containerClassList.push(`print-container--${renderType}`);
133
+ if (!!pageSizeStr && pageSizeStr != "custom" && !!printConfig.landscape) {
134
+ pageSizeStr += "-landscape";
135
+ }
136
+ containerClassList.push(`print-container--${pageSizeStr.toLowerCase()}`);
137
+ let formConfigProps = !!formConfig.props ? formConfig.props : {};
138
+ if (!!formConfigProps.size) {
139
+ containerClassList.push(`print-form-${formConfigProps.size}`);
140
+ }
141
+ if (!!formConfigProps.labelPosition) {
142
+ containerClassList.push(`print-form_label-${formConfigProps.labelPosition}`);
143
+ }
144
+ let containerClassStr = containerClassList.join(" ");
145
+ return containerClassStr;
146
+ }
147
+ return _getReturnStr();
148
+ };
149
+ const createPrintJsStringByDesignerConfig = ({ printData = {}, layoutConfig }) => {
150
+ // 通过设计器配置生成打印html
151
+ let jsString = "";
152
+ if (!printData || !layoutConfig) {
153
+ return jsString;
154
+ }
155
+ const createPrintJsInstance = useCreatePrintJs({ printData, layoutConfig });
156
+ jsString += createPrintJsInstance.createBaseJsString();
157
+ layoutConfig.forEach((item, index) => {
158
+ if (item.type == "grid") {
159
+ jsString += createPrintJsInstance.createJsStringOnGrid(item);
160
+ } else if (item.type == "tableLayout") {
161
+ jsString += createPrintJsInstance.createJsStringOnTablelayout(item);
162
+ } else if (item.type == "complexTable") {
163
+ jsString += createPrintJsInstance.createJsStringByComplexTable(item);
164
+ } else {
165
+ jsString += createPrintJsInstance.createJsStringByComponentItem(item);
166
+ }
167
+ });
168
+ return jsString;
169
+ };
170
+ export const createPrintSoketHtml = ({ printStyle = "", printHtml = "" } = {}) => {
171
+ let printSoketHml = `
172
+ <style>${printStyle}</style>
173
+ ${printHtml}
174
+ `;
175
+ return printSoketHml;
176
+ };
177
+ export const createPrintDocument = ({ title = "", printStyle = "", printHtml = "" } = {}) => {
178
+ let printHml = `
179
+ <!DOCTYPE html>
180
+ <html>
181
+ <head>
182
+ <title>${title}</title>
183
+ <style>${printStyle}</style>
184
+ </head>
185
+ <body>
186
+ ${printHtml}
187
+ </body>
188
+ </html>
189
+ `;
190
+ return printHml;
191
+ };
192
+ export const preview = ({ printData = {}, designerConfig = {}, printedRowCount = 0, printedRows = [] } = {}) => {
193
+ return new Promise(async (resolve, reject) => {
194
+ let designerConfigDemo = { printConfig: {}, layoutConfig: {} };
195
+ if (Array.isArray(designerConfig)) {
196
+ return reject(`参数【designerConfig】当前类型是数组,合法参数:${JSON.stringify(designerConfigDemo)}`);
197
+ }
198
+ if (typeof designerConfig != "object") {
199
+ return reject(`参数【designerConfig】的类型无效,合法参数:${JSON.stringify(designerConfigDemo)}`);
200
+ }
201
+ if (!printData) {
202
+ // 特意这样写避免printData存在时再次赋值
203
+ printData = {};
204
+ }
205
+ let { printConfig, formConfig, layoutConfig } = designerConfig;
206
+ if (!printConfig) {
207
+ return reject(`参数【designerConfig】缺少【printConfig】`);
208
+ }
209
+ if (!formConfig) {
210
+ return reject(`参数【designerConfig】缺少【formConfig】`);
211
+ }
212
+ if (!layoutConfig) {
213
+ return reject(`参数【designerConfig】缺少【layoutConfig】`);
214
+ }
215
+ let printMode = _getPrintMode({ layoutConfig }); // 获取打印模式
216
+ let continuePrintElements = false;
217
+ let tablePaginationElements = false;
218
+ let windowInstance = false;
219
+ if (printMode == "continuePrint_autoHeight") {
220
+ // 续打-自适应高度
221
+ let continuePrintDetails = await _getContinuePrintElementsOnAutoHeightMode({
222
+ printData,
223
+ printConfig,
224
+ formConfig,
225
+ layoutConfig,
226
+ printedRows,
227
+ windowTitle: "preview"
228
+ });
229
+ if (!!continuePrintDetails) {
230
+ continuePrintElements = continuePrintDetails.continuePrintElements;
231
+ windowInstance = continuePrintDetails.windowInstance;
232
+ }
233
+ } else if (printMode == "tablePagination") {
234
+ // 复杂表格分页模式
235
+ let tablePaginationDetails = await _getTablePaginationElements({
236
+ printData,
237
+ printConfig,
238
+ formConfig,
239
+ layoutConfig,
240
+ windowTitle: "preview"
241
+ });
242
+ if (!!tablePaginationDetails) {
243
+ tablePaginationElements = tablePaginationDetails.tablePaginationElements;
244
+ windowInstance = tablePaginationDetails.windowInstance;
245
+ }
246
+ }
247
+ let printHtml = createPrintHtmlByDesignerConfig({
248
+ renderType: "preview",
249
+ printData,
250
+ printConfig,
251
+ formConfig,
252
+ layoutConfig,
253
+ printedRowCount,
254
+ printedRows,
255
+ continuePrintElements,
256
+ tablePaginationElements,
257
+ enableZoom: true
258
+ });
259
+ if (!printHtml) {
260
+ return reject("创建文档失败");
261
+ }
262
+ let printStyle = printDesignerStyleHelper.createPrintStyle({ printConfig });
263
+ let printJsString = createPrintJsStringByDesignerConfig({
264
+ printData,
265
+ layoutConfig
266
+ });
267
+ await _webPrintPreview({
268
+ windowInstance,
269
+ designerConfig,
270
+ title: printConfig.title,
271
+ printStyle,
272
+ printHtml,
273
+ printJsString
274
+ });
275
+ return resolve();
276
+ });
277
+ };
278
+ export const previewInIframe = ({
279
+ iframeId = "",
280
+ printData = {},
281
+ designerConfig = {},
282
+ printedRowCount = 0,
283
+ printedRows = []
284
+ } = {}) => {
285
+ return new Promise(async (resolve, reject) => {
286
+ let designerConfigDemo = { printConfig: {}, layoutConfig: {} };
287
+ if (!iframeId) {
288
+ return reject(`参数【iframeId】无效`);
289
+ }
290
+ let iframeInstance = document.getElementById(iframeId);
291
+ if (!iframeInstance) {
292
+ return reject(`id为【iframeId】的元素不存在`);
293
+ }
294
+ if (Array.isArray(designerConfig)) {
295
+ return reject(`参数【designerConfig】当前类型是数组,合法参数:${JSON.stringify(designerConfigDemo)}`);
296
+ }
297
+ if (typeof designerConfig != "object") {
298
+ return reject(`参数【designerConfig】的类型无效,合法参数:${JSON.stringify(designerConfigDemo)}`);
299
+ }
300
+ if (!printData) {
301
+ // 特意这样写避免printData存在时再次赋值
302
+ printData = {};
303
+ }
304
+ let { printConfig, formConfig, layoutConfig } = designerConfig;
305
+ if (!printConfig) {
306
+ return reject(`参数【designerConfig】缺少【printConfig】`);
307
+ }
308
+ if (!formConfig) {
309
+ return reject(`参数【designerConfig】缺少【formConfig】`);
310
+ }
311
+ if (!layoutConfig) {
312
+ return reject(`参数【designerConfig】缺少【layoutConfig】`);
313
+ }
314
+ let printMode = _getPrintMode({ layoutConfig }); // 获取打印模式
315
+ let continuePrintElements = false;
316
+ let tablePaginationElements = false;
317
+ let windowInstance = false;
318
+ if (printMode == "continuePrint_autoHeight") {
319
+ // 续打-自适应高度
320
+ let continuePrintDetails = await _getContinuePrintElementsOnAutoHeightMode({
321
+ printData,
322
+ printConfig,
323
+ formConfig,
324
+ layoutConfig,
325
+ printedRows,
326
+ windowTitle: "preview"
327
+ });
328
+ if (!!continuePrintDetails) {
329
+ continuePrintElements = continuePrintDetails.continuePrintElements;
330
+ windowInstance = continuePrintDetails.windowInstance;
331
+ }
332
+ } else if (printMode == "tablePagination") {
333
+ // 复杂表格分页模式
334
+ let tablePaginationDetails = await _getTablePaginationElements({
335
+ printData,
336
+ printConfig,
337
+ formConfig,
338
+ layoutConfig,
339
+ windowTitle: "preview"
340
+ });
341
+ if (!!tablePaginationDetails) {
342
+ tablePaginationElements = tablePaginationDetails.tablePaginationElements;
343
+ windowInstance = tablePaginationDetails.windowInstance;
344
+ }
345
+ }
346
+ !!windowInstance && windowInstance.close();
347
+ let printHtml = createPrintHtmlByDesignerConfig({
348
+ renderType: "preview",
349
+ printData,
350
+ printConfig,
351
+ formConfig,
352
+ layoutConfig,
353
+ printedRowCount,
354
+ printedRows,
355
+ continuePrintElements,
356
+ tablePaginationElements,
357
+ enableZoom: true
358
+ });
359
+ if (!printHtml) {
360
+ return reject("创建文档失败");
361
+ }
362
+ let printStyle = printDesignerStyleHelper.createPrintStyle({ printConfig });
363
+ let printJsString = createPrintJsStringByDesignerConfig({
364
+ printData,
365
+ layoutConfig
366
+ });
367
+ let printDocment = createPrintDocument({ printStyle, printHtml });
368
+ let iframeWindowInstance = iframeInstance.contentWindow;
369
+ iframeWindowInstance.document.documentElement.innerHTML = printDocment;
370
+ _appendPlugins({
371
+ windowInstance: iframeWindowInstance,
372
+ designerConfig,
373
+ callback: () => {
374
+ let script = document.createElement("script");
375
+ script.type = "text/javascript";
376
+ script.text = `${printJsString}`;
377
+ iframeWindowInstance.document.body.appendChild(script);
378
+ }
379
+ });
380
+ return resolve(printDocment);
381
+ });
382
+ };
383
+ export const print = ({ type = "web", printData = {}, designerConfig = {}, printedRowCount = 0, printedRows = [] } = {}) => {
384
+ return new Promise(async (resolve, reject) => {
385
+ let ableTypeList = ["web", "soket"];
386
+ let designerConfigDemo = { printConfig: {}, layoutConfig: {} };
387
+ if (ableTypeList.indexOf(type) < 0) {
388
+ return reject(`参数【type】的值【${type}】无效,合法参数:【${ableTypeList.join(",")}】`);
389
+ }
390
+ if (Array.isArray(designerConfig)) {
391
+ return reject(`参数【designerConfig】当前类型是数组,合法参数:${JSON.stringify(designerConfigDemo)}`);
392
+ }
393
+ if (typeof designerConfig != "object") {
394
+ return reject(`参数【designerConfig】的类型无效,合法参数:${JSON.stringify(designerConfigDemo)}`);
395
+ }
396
+ if (!printData) {
397
+ // 特意这样写避免printData存在时再次赋值
398
+ printData = {};
399
+ }
400
+ let { printConfig, formConfig, layoutConfig } = designerConfig;
401
+ if (!printConfig) {
402
+ return reject(`参数【designerConfig】缺少【printConfig】`);
403
+ }
404
+ if (!formConfig) {
405
+ return reject(`参数【designerConfig】缺少【formConfig】`);
406
+ }
407
+ if (!layoutConfig) {
408
+ return reject(`参数【designerConfig】缺少【layoutConfig】`);
409
+ }
410
+ if (type == "web") {
411
+ // 浏览器打印
412
+ let printMode = _getPrintMode({ layoutConfig }); // 获取打印模式
413
+ let continuePrintElements = false;
414
+ let tablePaginationElements = false;
415
+ let windowInstance = false;
416
+ if (printMode == "continuePrint_autoHeight") {
417
+ // 续打-自适应高度
418
+ let continuePrintDetails = await _getContinuePrintElementsOnAutoHeightMode({
419
+ printData,
420
+ printConfig,
421
+ formConfig,
422
+ layoutConfig,
423
+ printedRows,
424
+ windowTitle: "print"
425
+ });
426
+ if (!!continuePrintDetails) {
427
+ continuePrintElements = continuePrintDetails.continuePrintElements;
428
+ windowInstance = continuePrintDetails.windowInstance;
429
+ }
430
+ } else if (printMode == "tablePagination") {
431
+ // 复杂表格分页模式
432
+ let tablePaginationDetails = await _getTablePaginationElements({
433
+ printData,
434
+ printConfig,
435
+ formConfig,
436
+ layoutConfig,
437
+ windowTitle: "print"
438
+ });
439
+ if (!!tablePaginationDetails) {
440
+ tablePaginationElements = tablePaginationDetails.tablePaginationElements;
441
+ windowInstance = tablePaginationDetails.windowInstance;
442
+ }
443
+ }
444
+ let printHtml = createPrintHtmlByDesignerConfig({
445
+ printData,
446
+ printConfig,
447
+ formConfig,
448
+ layoutConfig,
449
+ printedRowCount,
450
+ printedRows,
451
+ continuePrintElements,
452
+ tablePaginationElements
453
+ });
454
+ if (!printHtml) {
455
+ return reject("创建文档失败");
456
+ }
457
+ let printStyle = printDesignerStyleHelper.createPrintStyle({ printConfig });
458
+ let printJsString = createPrintJsStringByDesignerConfig({
459
+ printData,
460
+ layoutConfig
461
+ });
462
+ await _webPrint({
463
+ windowInstance,
464
+ designerConfig,
465
+ title: printConfig.title,
466
+ printStyle,
467
+ printHtml,
468
+ printJsString
469
+ });
470
+ return resolve();
471
+ }
472
+ if (type == "soket") {
473
+ // 静默打印
474
+ if (!window.WuiPrintSocket) {
475
+ return reject("未集成打印助手");
476
+ }
477
+ if (!!window.WuiPrintSocket && !window.WuiPrintSocket.connected) {
478
+ return reject("请检查【打印助手】是否正常运行");
479
+ }
480
+ await _soketPrint({
481
+ printData,
482
+ printConfig,
483
+ formConfig,
484
+ layoutConfig,
485
+ printedRowCount,
486
+ printedRows
487
+ }).catch((error) => {
488
+ return reject(error);
489
+ });
490
+ return resolve();
491
+ }
492
+ });
493
+ };
494
+ export const printGroup = () => {
495
+ // 打印分组
496
+ // 物资入库单打印解决方案
497
+ };
498
+ const _webPrint = ({ windowInstance, designerConfig, title = "", printStyle = "", printHtml = "", printJsString = "" } = {}) => {
499
+ // 浏览器打印
500
+ return new Promise(async (resolve, reject) => {
501
+ try {
502
+ if (!windowInstance) {
503
+ windowInstance = window.open("", "print", "height=700,width=1200");
504
+ } else {
505
+ windowInstance.resizeTo(1200, 700);
506
+ }
507
+ //windowInstance.document.write(createPrintDocument({ title, printStyle, printHtml }));
508
+ windowInstance.document.documentElement.innerHTML = createPrintDocument({ title, printStyle, printHtml });
509
+ _appendPlugins({
510
+ windowInstance,
511
+ designerConfig,
512
+ callback: () => {
513
+ let script = document.createElement("script");
514
+ script.type = "text/javascript";
515
+ script.text = `${printJsString}`;
516
+ windowInstance.document.body.appendChild(script);
517
+ windowInstance.print(); // 调用打印
518
+ windowInstance.close(); // 打印后关闭窗口
519
+ }
520
+ });
521
+ return resolve();
522
+ } catch (error) {
523
+ console.warn(error);
524
+ return reject(error);
525
+ }
526
+ });
527
+ };
528
+ const _webPrintPreview = ({
529
+ windowInstance,
530
+ designerConfig,
531
+ title = "",
532
+ printStyle = "",
533
+ printHtml = "",
534
+ printJsString = ""
535
+ } = {}) => {
536
+ // 浏览器打印预览
537
+ return new Promise(async (resolve, reject) => {
538
+ try {
539
+ if (!windowInstance) {
540
+ windowInstance = window.open("", "printPreview", "height=700,width=1200");
541
+ } else {
542
+ windowInstance.resizeTo(1200, 700);
543
+ }
544
+ windowInstance.document.documentElement.innerHTML = createPrintDocument({ title, printStyle, printHtml });
545
+ _appendPlugins({
546
+ windowInstance,
547
+ designerConfig,
548
+ callback: () => {
549
+ let script = document.createElement("script");
550
+ script.type = "text/javascript";
551
+ script.text = `${printJsString}`;
552
+ windowInstance.document.body.appendChild(script);
553
+ }
554
+ });
555
+ return resolve();
556
+ } catch (error) {
557
+ console.warn(error);
558
+ return reject(error);
559
+ }
560
+ });
561
+ };
562
+ const _soketPrint = ({
563
+ printData = {},
564
+ printConfig = {},
565
+ formConfig = {},
566
+ layoutConfig = {},
567
+ printedRowCount = 0,
568
+ printedRows
569
+ } = {}) => {
570
+ // 通过soket发起静默打印
571
+ // 未集成续打和分页,后期集成
572
+ return new Promise((resolve, reject) => {
573
+ let printHtml = createPrintHtmlByDesignerConfig({
574
+ printData,
575
+ printConfig,
576
+ formConfig,
577
+ layoutConfig,
578
+ printedRowCount,
579
+ printedRows
580
+ });
581
+ if (!printHtml) {
582
+ return reject("创建文档失败");
583
+ }
584
+ let printStyle = printDesignerStyleHelper.createPrintStyle({ printConfig });
585
+ let printJsString = createPrintJsStringByDesignerConfig({
586
+ printData,
587
+ layoutConfig
588
+ });
589
+ let printDocumentHtml = createPrintSoketHtml({
590
+ printStyle,
591
+ printHtml
592
+ });
593
+ let printOptions = {
594
+ templateId: printConfig.templateTitle,
595
+ type: printConfig.servePrintType,
596
+ html: printDocumentHtml,
597
+ pageSize: printConfig.pageSize, // 设置纸张
598
+ printer: printConfig.printer, // 可以指定打印机名称
599
+ silent: printConfig.silent, // 静默打印
600
+ landscape: !!printConfig.landscape, // 是否横向打印
601
+ margins: {
602
+ top: 0,
603
+ bottom: 0,
604
+ left: 0,
605
+ right: 0
606
+ },
607
+ printJsString
608
+ };
609
+ //调用打印
610
+ window.WuiPrintSocket.emit("news", printOptions);
611
+ return resolve();
612
+ });
613
+ };
614
+ const _appendPlugins = ({ windowInstance, designerConfig, callback } = {}) => {
615
+ let { printConfig, formConfig, layoutConfig } = designerConfig;
616
+ let { hasBarcode, hasQrcode } = __getPlugins();
617
+ if (!hasBarcode && !hasQrcode) {
618
+ !!callback && callback();
619
+ return;
620
+ }
621
+ let appendNum = 0;
622
+ let successNum = 0;
623
+ if (hasBarcode) {
624
+ appendNum++;
625
+ let scriptJsBarcode = windowInstance.document.createElement("script");
626
+ scriptJsBarcode.type = "text/javascript";
627
+ scriptJsBarcode.src = "/wui-print-designer-plugins/JsBarcode.all.min.js";
628
+ windowInstance.document.head.appendChild(scriptJsBarcode);
629
+ }
630
+ if (hasQrcode) {
631
+ appendNum++;
632
+ let scriptJsBarcode = windowInstance.document.createElement("script");
633
+ scriptJsBarcode.type = "text/javascript";
634
+ scriptJsBarcode.src = "/wui-print-designer-plugins/qrcode.min.js";
635
+ windowInstance.document.head.appendChild(scriptJsBarcode);
636
+ }
637
+ let intervalId = setInterval(() => {
638
+ successNum = 0;
639
+ if (hasBarcode && !!windowInstance.JsBarcode && typeof windowInstance.JsBarcode == "function") {
640
+ successNum++;
641
+ }
642
+ if (hasQrcode && !!windowInstance.QRCode && typeof windowInstance.QRCode == "function") {
643
+ successNum++;
644
+ }
645
+ __canCallback();
646
+ }, 100);
647
+ function __canCallback() {
648
+ if (successNum == appendNum) {
649
+ clearInterval(intervalId);
650
+ !!callback && callback();
651
+ }
652
+ }
653
+ function __getPlugins() {
654
+ let hasBarcode = false;
655
+ let hasQrcode = false;
656
+ layoutConfig.forEach((item, index) => {
657
+ if (!!hasBarcode && !!hasQrcode) {
658
+ return;
659
+ }
660
+ if (item.type == "grid" && !!item.children) {
661
+ item.children.forEach((cellItem, cellIndex) => {
662
+ if (!!cellItem.children) {
663
+ cellItem.children.forEach((componentItem, componentIndex) => {
664
+ __setState(componentItem);
665
+ });
666
+ }
667
+ });
668
+ return;
669
+ }
670
+ if (item.type == "tableLayout" && !!item.children) {
671
+ item.children.forEach((componentItem, componentIndex) => {
672
+ __setState(componentItem);
673
+ });
674
+ return;
675
+ }
676
+ __setState(item);
677
+ });
678
+ function __setState(componentItem) {
679
+ if (componentItem.type == "barcode") {
680
+ hasBarcode = true;
681
+ } else if (componentItem.type == "qrcode") {
682
+ hasQrcode = true;
683
+ }
684
+ }
685
+ return { hasBarcode, hasQrcode };
686
+ }
687
+ };
688
+ async function _getContinuePrintElementsOnAutoHeightMode({
689
+ printData,
690
+ printConfig,
691
+ formConfig,
692
+ layoutConfig,
693
+ printedRows,
694
+ windowTitle = "continuePrintElementsPreview"
695
+ }) {
696
+ return new Promise((resolve, reject) => {
697
+ let autoContinueDetails = _getAutoContinueDetails({ layoutConfig, printData, printedRows });
698
+ if (!autoContinueDetails.state) {
699
+ return resolve(false);
700
+ }
701
+ let printStyle = printDesignerStyleHelper.createPrintStyle({ printConfig });
702
+ let autoContinuePrintHtml = _createAutoContinuePrintHtml({
703
+ printData: autoContinueDetails.printData,
704
+ printConfig,
705
+ formConfig,
706
+ layoutConfig: autoContinueDetails.layoutConfig
707
+ });
708
+ const windowInstance = window.open("", windowTitle, "height=50,width=50");
709
+ //const windowInstance = window.open("", windowTitle, "height=700,width=1200");
710
+ windowInstance.document.documentElement.innerHTML = createPrintDocument({
711
+ title: "正在加载",
712
+ printStyle,
713
+ printHtml: autoContinuePrintHtml
714
+ });
715
+ const checkLoadStatus = setInterval(() => {
716
+ if (windowInstance.document.readyState === "complete") {
717
+ clearInterval(checkLoadStatus); // 加载完成后停止检查
718
+ let continuePrintElements = windowInstance.document.querySelectorAll(".print-complex-table")[0];
719
+ setTimeout(() => {
720
+ return resolve({
721
+ continuePrintElements,
722
+ windowInstance
723
+ });
724
+ }, 1000);
725
+ }
726
+ }, 100);
727
+ });
728
+ }
729
+ function _createAutoContinuePrintHtml({ printData, printConfig, formConfig, layoutConfig, printedRows }) {
730
+ const createHtmlInstance = useCreateHtml({
731
+ printData,
732
+ printConfig,
733
+ formConfig,
734
+ layoutConfig,
735
+ printedRows
736
+ });
737
+ let printHtml = "";
738
+ createHtmlInstance.layoutConfig.forEach((item, index) => {
739
+ printHtml += createHtmlInstance.createHtmlByComponentItem(item);
740
+ });
741
+ let containerClassList = [];
742
+ let renderType = "auto-continue-preview";
743
+ let pageSizeStr = !!printConfig.pageSize ? printConfig.pageSize : "";
744
+ if (!!pageSizeStr && !!printConfig.landscape) {
745
+ pageSizeStr += "-landscape";
746
+ }
747
+ containerClassList.push(`print-container--${renderType}`);
748
+ containerClassList.push(`print-container--${pageSizeStr.toLowerCase()}`);
749
+ let containerClassStr = containerClassList.join(" ");
750
+ printHtml = `<div class="print-container ${containerClassStr}" style="${printDesignerStyleHelper.createContainerStyle({
751
+ styleConfig: printConfig.style
752
+ })}">${printHtml}</div>`;
753
+ return printHtml;
754
+ }
755
+ function _getAutoContinueDetails({ layoutConfig, printData, printedRows = [] }) {
756
+ if (!printData) {
757
+ printData = {};
758
+ }
759
+ if (!printedRows) {
760
+ printedRows = [];
761
+ }
762
+ let autoContinueDetails = {
763
+ state: false,
764
+ layoutConfig: [],
765
+ printData: deepCopy(printData)
766
+ };
767
+ if (!layoutConfig || layoutConfig.length <= 0) {
768
+ return autoContinueDetails;
769
+ }
770
+ let autoContinueConfigItem = false;
771
+ layoutConfig.forEach((item, index) => {
772
+ if (!!autoContinueConfigItem) {
773
+ return;
774
+ }
775
+ let nowProps = !!item.props ? item.props : {};
776
+ if (item.type == "complexTable" && !!nowProps.canContinue && nowProps.continuePrintMode == "autoHeight") {
777
+ autoContinueConfigItem = deepCopy(item);
778
+ }
779
+ });
780
+ if (!autoContinueConfigItem) {
781
+ return autoContinueDetails;
782
+ }
783
+ autoContinueDetails.state = true;
784
+ autoContinueConfigItem.props.continuePrintMode = "_autoHeight_previewElements";
785
+ autoContinueDetails.layoutConfig.push(deepCopy(autoContinueConfigItem));
786
+ let dataField = autoContinueConfigItem.props.field;
787
+ if (!!dataField && !!autoContinueDetails.printData[dataField]) {
788
+ autoContinueDetails.printData[dataField].unshift(...printedRows);
789
+ }
790
+ return autoContinueDetails;
791
+ }
792
+ async function _getTablePaginationElements({
793
+ printData,
794
+ printConfig,
795
+ formConfig,
796
+ layoutConfig,
797
+ windowTitle = "tablePaginationElementsPreview"
798
+ }) {
799
+ return new Promise((resolve, reject) => {
800
+ let tablePaginationDetails = _getTablePaginationDetails({ layoutConfig, printData });
801
+ if (!tablePaginationDetails.state) {
802
+ return resolve(false);
803
+ }
804
+ let printStyle = printDesignerStyleHelper.createPrintStyle({ printConfig });
805
+ let paginationPrintHtml = _createTablePaginationPrintHtml({
806
+ printData,
807
+ printConfig,
808
+ formConfig,
809
+ layoutConfig: tablePaginationDetails.layoutConfig
810
+ });
811
+ const windowInstance = window.open("", windowTitle, "height=50,width=50");
812
+ //const windowInstance = window.open("", windowTitle, "height=700,width=1200");
813
+ windowInstance.document.documentElement.innerHTML = createPrintDocument({
814
+ title: "正在加载",
815
+ printStyle,
816
+ printHtml: paginationPrintHtml
817
+ });
818
+ const checkLoadStatus = setInterval(() => {
819
+ if (windowInstance.document.readyState === "complete") {
820
+ clearInterval(checkLoadStatus); // 加载完成后停止检查
821
+ let tablePaginationElements = windowInstance.document.querySelectorAll(".print-complex-table")[0];
822
+ setTimeout(() => {
823
+ return resolve({
824
+ tablePaginationElements,
825
+ windowInstance
826
+ });
827
+ }, 1000);
828
+ }
829
+ }, 100);
830
+ });
831
+ }
832
+ function _createTablePaginationPrintHtml({ printData, printConfig, formConfig, layoutConfig }) {
833
+ const createHtmlInstance = useCreateHtml({
834
+ printData,
835
+ printConfig,
836
+ formConfig,
837
+ layoutConfig
838
+ });
839
+ let printHtml = "";
840
+ createHtmlInstance.layoutConfig.forEach((item, index) => {
841
+ printHtml += createHtmlInstance.createHtmlByComponentItem(item);
842
+ });
843
+ let containerClassList = [];
844
+ let renderType = "table-pagination-preview";
845
+ let pageSizeStr = !!printConfig.pageSize ? printConfig.pageSize : "";
846
+ if (!!pageSizeStr && !!printConfig.landscape) {
847
+ pageSizeStr += "-landscape";
848
+ }
849
+ containerClassList.push(`print-container--${renderType}`);
850
+ containerClassList.push(`print-container--${pageSizeStr.toLowerCase()}`);
851
+ let containerClassStr = containerClassList.join(" ");
852
+ printHtml = `<div class="print-container ${containerClassStr}" style="${printDesignerStyleHelper.createContainerStyle({
853
+ styleConfig: printConfig.style
854
+ })}">${printHtml}</div>`;
855
+ return printHtml;
856
+ }
857
+ function _getTablePaginationDetails({ layoutConfig }) {
858
+ let tablePaginationDetails = {
859
+ state: false,
860
+ layoutConfig: []
861
+ };
862
+ if (!layoutConfig || layoutConfig.length <= 0) {
863
+ return tablePaginationDetails;
864
+ }
865
+ let tablePaginationConfigItem = false;
866
+ layoutConfig.forEach((item, index) => {
867
+ if (!!tablePaginationConfigItem) {
868
+ return;
869
+ }
870
+ let nowProps = !!item.props ? item.props : {};
871
+ if (item.type == "complexTable" && !!nowProps.isPaginationMode && !nowProps.canContinue) {
872
+ tablePaginationConfigItem = deepCopy(item);
873
+ }
874
+ });
875
+ if (!tablePaginationConfigItem) {
876
+ return tablePaginationDetails;
877
+ }
878
+ tablePaginationDetails.state = true;
879
+ tablePaginationConfigItem.props._paginationModePreview = true;
880
+ tablePaginationDetails.layoutConfig.push(deepCopy(tablePaginationConfigItem));
881
+ return tablePaginationDetails;
882
+ }
883
+ function _getPrintMode({ layoutConfig }) {
884
+ let printMode = "default";
885
+ if (!layoutConfig || layoutConfig.length <= 0) {
886
+ return printMode;
887
+ }
888
+ let complexTableConfigItem = false;
889
+ layoutConfig.forEach((item, index) => {
890
+ if (!!complexTableConfigItem) {
891
+ return;
892
+ }
893
+ let nowProps = !!item.props ? item.props : {};
894
+ if (item.type == "complexTable" && !!nowProps.canContinue && nowProps.continuePrintMode == "autoHeight") {
895
+ printMode = "continuePrint_autoHeight";
896
+ } else if (item.type == "complexTable" && !!nowProps.isPaginationMode) {
897
+ printMode = "tablePagination";
898
+ }
899
+ });
900
+ return printMode;
901
+ }
902
+ export default {
903
+ createPrintDataByLayoutConfig,
904
+ createPrintHtmlByDesignerConfig,
905
+ createPrintJsStringByDesignerConfig,
906
+ createPrintSoketHtml,
907
+ createPrintDocument,
908
+ preview,
909
+ previewInIframe,
910
+ print,
911
+ printGroup
912
+ };