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.
- package/README.md +29 -0
- package/dist/font/iconfont.css +151 -0
- package/dist/font/iconfont.js +1 -0
- package/dist/font/iconfont.json +247 -0
- package/dist/font/iconfont.ttf +0 -0
- package/dist/font/iconfont.woff +0 -0
- package/dist/font/iconfont.woff2 +0 -0
- package/dist/index.css +1 -0
- package/dist/index.es.js +51053 -0
- package/dist/index.umd.js +1030 -0
- package/dist/print-designer-api/create-style/create-base-component-style.js +116 -0
- package/dist/print-designer-api/create-style/create-complex-table-style.js +472 -0
- package/dist/print-designer-api/create-style/create-form-component-style.js +78 -0
- package/dist/print-designer-api/create-style/create-form-item-style.js +144 -0
- package/dist/print-designer-api/create-style/create-grid-style.js +49 -0
- package/dist/print-designer-api/create-style/create-table-layout-style.js +128 -0
- package/dist/print-designer-api/create-style/create-table-style.js +93 -0
- package/dist/print-designer-api/print-designer-helper.js +912 -0
- package/dist/print-designer-api/print-designer-style-helper.js +96 -0
- package/dist/print-designer-api/print-designer-utils.js +27 -0
- package/dist/print-designer-api/print-global-style/base.less +20 -0
- package/dist/print-designer-api/print-global-style/common.less +3 -0
- package/dist/print-designer-api/print-global-style/custom.less +4 -0
- package/dist/print-designer-api/print-global-style/index.css +812 -0
- package/dist/print-designer-api/print-global-style/index.js +813 -0
- package/dist/print-designer-api/print-global-style/index.less +9 -0
- package/dist/print-designer-api/print-global-style/print-base-component.less +123 -0
- package/dist/print-designer-api/print-global-style/print-container.less +57 -0
- package/dist/print-designer-api/print-global-style/print-continue/index.less +14 -0
- package/dist/print-designer-api/print-global-style/print-continue/print-complex-table/auto-continue-not-span.less +61 -0
- package/dist/print-designer-api/print-global-style/print-continue/print-complex-table/auto-continue-preview.less +12 -0
- package/dist/print-designer-api/print-global-style/print-continue/print-complex-table/auto-continue-span.less +88 -0
- package/dist/print-designer-api/print-global-style/print-continue/print-complex-table/fixed-continue.less +37 -0
- package/dist/print-designer-api/print-global-style/print-continue/print-complex-table/index.less +96 -0
- package/dist/print-designer-api/print-global-style/print-continue/print-complex-table/pagination-preview.less +12 -0
- package/dist/print-designer-api/print-global-style/print-continue/print-complex-table/pagination.less +61 -0
- package/dist/print-designer-api/print-global-style/print-form-component.less +161 -0
- package/dist/print-designer-api/print-global-style/print-form-item.less +162 -0
- package/dist/print-designer-api/print-global-style/printing.less +16 -0
- package/dist/print-designer-api/print-soket.js +31 -0
- package/dist/print-designer-api/use-create-html/create-html-utils.js +43 -0
- package/dist/print-designer-api/use-create-html/index.js +287 -0
- package/dist/print-designer-api/use-create-html/use-base-component-helper.js +129 -0
- package/dist/print-designer-api/use-create-html/use-complex-table-helper/complex-table-tools.js +129 -0
- package/dist/print-designer-api/use-create-html/use-complex-table-helper/create-table-header.js +111 -0
- package/dist/print-designer-api/use-create-html/use-complex-table-helper/index.js +87 -0
- package/dist/print-designer-api/use-create-html/use-complex-table-helper/use-auto-height-preview.js +84 -0
- package/dist/print-designer-api/use-create-html/use-complex-table-helper/use-auto-height.js +379 -0
- package/dist/print-designer-api/use-create-html/use-complex-table-helper/use-default.js +75 -0
- package/dist/print-designer-api/use-create-html/use-complex-table-helper/use-fixed-height.js +220 -0
- package/dist/print-designer-api/use-create-html/use-complex-table-helper/use-pagination-preview.js +84 -0
- package/dist/print-designer-api/use-create-html/use-complex-table-helper/use-pagination.js +272 -0
- package/dist/print-designer-api/use-create-html/use-form-component-helper.js +164 -0
- package/dist/print-designer-api/use-create-html/use-format/index.js +102 -0
- package/dist/print-designer-api/use-create-html/use-format/use-complex-table-auto.js +337 -0
- package/dist/print-designer-api/use-create-html/use-format/use-complex-table-fiexd.js +233 -0
- package/dist/print-designer-api/use-create-html/use-format/use-complex-table-pagination.js +286 -0
- package/dist/print-designer-api/use-create-html/use-grid-helper.js +35 -0
- package/dist/print-designer-api/use-create-html/use-table-layout-helper.js +213 -0
- package/dist/print-designer-api/use-create-print-js/index.js +147 -0
- package/dist/print-designer-api/use-create-print-js/use-base-component-helper.js +54 -0
- package/dist/print-designer-api/use-create-print-js/use-form-component-helper.js +4 -0
- package/dist/print-designer-api/use-create-print-js/use-table-layout-helper.js +5 -0
- package/dist/print-designer-images/demo.jpg +0 -0
- package/dist/print-designer-images/demo02.jpg +0 -0
- package/dist/style/default-style.css +137 -0
- package/dist/style/main.less +66 -0
- package/dist/test/base/designer-config.js +594 -0
- package/dist/test/base/index.js +3 -0
- package/dist/test/base/print-data.js +40 -0
- package/dist/test/complex-table/designer-config.js +1668 -0
- package/dist/test/complex-table/index.js +3 -0
- package/dist/test/complex-table/print-data.js +294 -0
- package/dist/test/form/designer-config.js +2057 -0
- package/dist/test/form/index.js +3 -0
- package/dist/test/form/print-data.js +38 -0
- package/dist/test/index.js +4 -0
- package/dist/wui-print-designer-plugins/JsBarcode.all.min.js +2 -0
- package/dist/wui-print-designer-plugins/qrcode.min.js +1 -0
- 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
|
+
};
|