@lambo-design/shared 1.0.0-beta.1

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/utils/excel.js ADDED
@@ -0,0 +1,523 @@
1
+ /* eslint-disable */
2
+ import XLSX from 'xlsx';
3
+ import * as cpexcel from 'xlsx/dist/cpexcel.full.mjs';
4
+ XLSX.set_cptable(cpexcel);
5
+ import {deepCopy} from "./assist";
6
+
7
+ const titleRules = {
8
+ '': '',
9
+ '#': '#',
10
+ '序号': '序号',
11
+ '编号': '编号',
12
+ '操作': '操作',
13
+ }
14
+ const typeRules = {
15
+ 'index': 'index',
16
+ 'select': 'select',
17
+ 'selection': 'selection',
18
+ 'single-selection': 'single-selection'
19
+ }
20
+
21
+ function auto_width(ws, data) {
22
+ /*set worksheet max width per col*/
23
+ const colWidth = data.map(row => row.map(val => {
24
+ /*if null/undefined*/
25
+ if (val == null) {
26
+ return {'wch': 10};
27
+ }
28
+ /*if chinese*/
29
+ else if (val.toString().charCodeAt(0) > 255) {
30
+ return {'wch': val.toString().length * 2};
31
+ } else {
32
+ return {'wch': val.toString().length > 7 ? val.toString().length : 7};
33
+ }
34
+ }))
35
+ /*start in the first row*/
36
+ let result = colWidth[0];
37
+ for (let i = 1; i < colWidth.length; i++) {
38
+ for (let j = 0; j < colWidth[i].length; j++) {
39
+ if (result[j]['wch'] < colWidth[i][j]['wch']) {
40
+ result[j]['wch'] = colWidth[i][j]['wch'] > 7 ? colWidth[i][j]['wch'] : 7;
41
+ }
42
+ }
43
+ }
44
+ ws['!cols'] = result;
45
+ }
46
+
47
+ function merge_title(ws, title) {
48
+ let mergeData = []
49
+ let flag = false
50
+ let row = 1, col = 1
51
+ for (let i = 0; i < title.length; i++) {
52
+ for (let j = 0; j < title[i].length; j++) {
53
+ flag = false, row = 1, col = 1
54
+ let merge = {s: {r: i, c: j}, e: {r: i, c: j}}
55
+ while ((j + row) < title[i].length && title[i][j] === title[i][j + row]) {
56
+ merge.e.c = j + row
57
+ row++
58
+ flag = true
59
+ }
60
+ while ((i + col) < title.length && title[i][j] === title[i + col][j]) {
61
+ merge.e.r = i + col
62
+ col++
63
+ flag = true
64
+ }
65
+ if (flag) {
66
+ mergeData.push(merge)
67
+ }
68
+ }
69
+ }
70
+ ws['!merges'] = ws['!merges'].concat(mergeData)
71
+ }
72
+
73
+ function merge_content(ws, tableData, spanColumnKeys, titleLen) {
74
+ if (spanColumnKeys == null || spanColumnKeys.length === 0) {
75
+ return null;
76
+ }
77
+ let flag = false
78
+ let mergeData = []
79
+ let sck = spanColumnKeys, dLen = tableData.length, kLen = sck.length, params = [];
80
+ for (let i = 0; i < dLen; i++) {
81
+ params[i] = []
82
+ for (let j = 0; j < kLen; j++) {
83
+ params[i][j] = {}
84
+ }
85
+ }
86
+ for (let i = 0; i < dLen; i++) {
87
+ for (let j = 0; j < kLen; j++) {
88
+ let merge = {s: {r: i + titleLen, c: j}, e: {r: i + titleLen, c: j}}
89
+ flag = false
90
+ //如果单元格和右侧内容相同则合并
91
+ let n = 1;
92
+ while (j + n < kLen && tableData[i][sck[j]] === tableData[i][sck[j + n]]) {
93
+ if (params[i][j + n].hasOwnProperty('disable')) {
94
+ break
95
+ }
96
+ params[i][j + n].disable = true
97
+ merge.e.c = j + n
98
+ flag = true
99
+ n++;
100
+ }
101
+ //如果单元格和下侧内容相同则合并
102
+ let m = 1;
103
+ while (i + m < dLen && tableData[i][sck[j]] === tableData[i + m][sck[j]] && tableData[i + m][sck[j]] !== '小计') {
104
+ if (params[i + m][j].hasOwnProperty('disable')) {
105
+ break
106
+ }
107
+ params[i + m][j].disable = true
108
+ merge.e.r = i + titleLen + m
109
+ flag = true
110
+ m++;
111
+ }
112
+ if (flag) {
113
+ mergeData.push(merge)
114
+ params[i][j].disable = true
115
+ }
116
+ }
117
+ }
118
+ ws['!merges'] = ws['!merges'].concat(mergeData)
119
+ }
120
+
121
+ function add_style(ws, title) {
122
+
123
+ // 补充空白数据
124
+ let rangs = ws['!ref'].split(":");
125
+ let rowSum = parseInt(rangs[1].replace(/[^0-9]/ig, ""))
126
+ let colhash = []
127
+ Object.keys(ws).forEach(item => {
128
+ if (/^[A-Z]+\d+$/.test(item)) {
129
+ var alphabet = item.replace(/[^a-z]+/ig, "");
130
+ if (colhash.indexOf(alphabet) == -1) {
131
+ colhash.push(alphabet)
132
+ for (var i = 1; i <= rowSum; i++) {
133
+ if (!ws.hasOwnProperty(alphabet + i)) {
134
+ ws[alphabet + i] = {
135
+ v: '',
136
+ t: 's'
137
+ }
138
+ }
139
+ }
140
+ }
141
+ }
142
+ })
143
+
144
+ let titlestyle = {
145
+ border: {
146
+ left: {style: 'thin', color: {rgb: "000000"}},
147
+ top: {style: 'thin', color: {rgb: "000000"}},
148
+ right: {style: 'thin', color: {rgb: "000000"}},
149
+ bottom: {style: 'thin', color: {rgb: "000000"}},
150
+ },
151
+ alignment: {horizontal: "center", vertical: "center"},
152
+ fill: {bgColor: {indexed: 64}, fgColor: {rgb: "5A9BD5"}}
153
+ }
154
+ let bodyPairStyle = {
155
+ border: {
156
+ left: {style: 'thin', color: {rgb: "000000"}},
157
+ top: {style: 'thin', color: {rgb: "000000"}},
158
+ right: {style: 'thin', color: {rgb: "000000"}},
159
+ bottom: {style: 'thin', color: {rgb: "000000"}},
160
+ },
161
+ alignment: {vertical: "center"},
162
+ fill: {bgColor: {indexed: 64}, fgColor: {rgb: "DDEBF7"}}
163
+ }
164
+ let bodyStyle = {
165
+ border: {
166
+ left: {style: 'thin', color: {rgb: "000000"}},
167
+ top: {style: 'thin', color: {rgb: "000000"}},
168
+ right: {style: 'thin', color: {rgb: "000000"}},
169
+ bottom: {style: 'thin', color: {rgb: "000000"}},
170
+ },
171
+ alignment: {vertical: "center"}
172
+ }
173
+ Object.keys(ws).forEach(item => {
174
+
175
+ /**
176
+ * 加载表头样式:蓝色背景,水平垂直居中,边框
177
+ */
178
+ var reg = new RegExp("^[A-Z]+[1 -" + title.length + "]$", "gim");
179
+ if (reg.test(item)) {
180
+ ws[item].s = titlestyle
181
+ } else
182
+
183
+ /**
184
+ * 表体样式: 垂直居中,边框
185
+ */
186
+ if (/^[A-Z]+\d+$/.test(item)) {
187
+ if (parseInt(item.replace(/[^0-9]/ig, "")) % 2 == 0) {
188
+ ws[item].s = bodyStyle
189
+ } else {
190
+ ws[item].s = bodyPairStyle
191
+ }
192
+
193
+ }
194
+ })
195
+ /* ws.B2 = {
196
+ v:'',
197
+ t:'s',
198
+ s:bodyPairStyle
199
+ }*/
200
+
201
+ }
202
+
203
+ function title_filter(data) {
204
+ let filterData = deepCopy(data);
205
+ for (var i = 0; i < filterData.length; i++) {
206
+ if ((filterData[i].hasOwnProperty('type') && filterData[i].type == typeRules[filterData[i].type]) ||
207
+ // !filterData[i].hasOwnProperty('title') ||
208
+ filterData[i].title == titleRules[filterData[i].title]) {
209
+ filterData.splice(i, 1)
210
+ i--
211
+ }
212
+ }
213
+ return filterData
214
+ }
215
+
216
+ function title_el_filter(data) {
217
+ let filterData = deepCopy(data);
218
+
219
+ for (var i = 0; i < filterData.length; i++) {
220
+ if ((filterData[i].hasOwnProperty('property') && filterData[i].property == typeRules[filterData[i].property]) ||
221
+ // !filterData[i].hasOwnProperty('title') ||
222
+ filterData[i].label == titleRules[filterData[i].label]) {
223
+ filterData.splice(i, 1)
224
+ i--
225
+ }
226
+ }
227
+ return filterData
228
+ }
229
+
230
+ function json_to_array(key, jsonData) {
231
+ return jsonData.map(v => key.map(j => {
232
+ return v[j]
233
+ }));
234
+ }
235
+
236
+ export const enums_to_value = (enums,jsonData)=>{
237
+ if(enums&&enums.length>0){
238
+ return jsonData.map(v => enums.map(e =>{
239
+ v[e.key] = e.enums[v[e.key]]
240
+ return v
241
+ })[0])
242
+ }else{
243
+ return jsonData
244
+ }
245
+ }
246
+
247
+ // fix data,return string
248
+ function fixdata(data) {
249
+ let o = ''
250
+ let l = 0
251
+ const w = 10240
252
+ for (; l < data.byteLength / w; ++l) o += String.fromCharCode.apply(null, new Uint8Array(data.slice(l * w, l * w + w)))
253
+ o += String.fromCharCode.apply(null, new Uint8Array(data.slice(l * w)))
254
+ return o
255
+ }
256
+
257
+ // get head from excel file,return array
258
+ function get_header_row(sheet) {
259
+ const headers = []
260
+ const range = XLSX.utils.decode_range(sheet['!ref'])
261
+ let C
262
+ const R = range.s.r
263
+ /* start in the first row */
264
+ for (C = range.s.c; C <= range.e.c; ++C) { /* walk every column in the range */
265
+ var cell = sheet[XLSX.utils.encode_cell({c: C, r: R})]
266
+ /* find the cell in the first row */
267
+ var hdr = 'UNKNOWN ' + C // <-- replace with your desired default
268
+ if (cell && cell.t) hdr = XLSX.utils.format_cell(cell)
269
+ headers.push(hdr)
270
+ }
271
+ return headers
272
+ }
273
+
274
+ export const title_transform = (paramData) => {
275
+ let result = []
276
+ let data1 = []
277
+ let data2 = []
278
+ let flag = false
279
+ let data = title_filter(paramData)
280
+ // let data = paramData
281
+ for (var i = 0; i < data.length; i++) {
282
+ data1.push(data[i].title)
283
+ data2.push(data[i].title)
284
+ if ('children' in data[i]) {
285
+ flag = true
286
+ data2.pop()
287
+ let children = data[i].children
288
+ for (var j = 0; j < children.length; j++) {
289
+ data1.push(data[i].title)
290
+ data2.push(children[j].title)
291
+ }
292
+ data1.pop()
293
+ }
294
+ }
295
+ result.push(data1)
296
+ if (flag) {
297
+ result.push(data2)
298
+ }
299
+ return result
300
+ }
301
+
302
+
303
+ export const title_el_transform = (paramData) => {
304
+ let result = []
305
+ let data1 = []
306
+ let data2 = []
307
+ let flag = false
308
+ let data = title_el_filter(paramData)
309
+ // let data = paramData
310
+ for (var i = 0; i < data.length; i++) {
311
+ data1.push(data[i].label)
312
+ data2.push(data[i].label)
313
+ if ('children' in data[i]) {
314
+ flag = true
315
+ data2.pop()
316
+ let children = data[i].children
317
+ for (var j = 0; j < children.length; j++) {
318
+ data1.push(data[i].label)
319
+ data2.push(children[j].label)
320
+ }
321
+ data1.pop()
322
+ }
323
+ }
324
+ result.push(data1)
325
+ if (flag) {
326
+ result.push(data2)
327
+ }
328
+ return result
329
+ }
330
+
331
+ export const key_transform = (paramData) => {
332
+ let result = []
333
+ let data = title_filter(paramData)
334
+ // let data = paramData
335
+ for (var i = 0; i < data.length; i++) {
336
+ if ("children" in data[i]) {
337
+ let children = data[i].children
338
+ for (var j = 0; j < children.length; j++) {
339
+ result.push(children[j].key)
340
+ }
341
+ } else {
342
+ result.push(data[i].key)
343
+ }
344
+ }
345
+ return result
346
+ }
347
+
348
+ export const key_el_transform = (paramData) => {
349
+ let result = []
350
+ let data = title_el_filter(paramData)
351
+ // let data = paramData
352
+ for (var i = 0; i < data.length; i++) {
353
+ if ("children" in data[i]) {
354
+ let children = data[i].children
355
+ for (var j = 0; j < children.length; j++) {
356
+ result.push(children[j].property)
357
+ }
358
+ } else {
359
+ result.push(data[i].property)
360
+ }
361
+ }
362
+ return result
363
+ }
364
+
365
+ export const enums_transform = (paramData) => {
366
+ let result = []
367
+ let data = title_filter(paramData)
368
+ // let data = paramData
369
+ for (var i = 0; i < data.length; i++) {
370
+ if ("children" in data[i]) {
371
+ let children = data[i].children
372
+ for (var j = 0; j < children.length; j++) {
373
+ if("enums" in children[j]){
374
+ result.push({key:children[j].key,enums:children[j].enums})
375
+ }
376
+ }
377
+ } else {
378
+ if("enums" in data[i]){
379
+ result.push({key:data[i].key,enums:data[i].enums})
380
+ }
381
+ }
382
+ }
383
+ return result
384
+ }
385
+
386
+ export const enums_el_transform = (paramData) => {
387
+ let result = []
388
+ let data = title_el_filter(paramData)
389
+ // let data = paramData
390
+ for (var i = 0; i < data.length; i++) {
391
+ if ("children" in data[i]) {
392
+ let children = data[i].children
393
+ for (var j = 0; j < children.length; j++) {
394
+ if("enums" in children[j]){
395
+ result.push({key:children[j].property,enums:children[j].enums})
396
+ }
397
+ }
398
+ } else {
399
+ if("enums" in data[i]){
400
+ result.push({key:data[i].property,enums:data[i].enums})
401
+ }
402
+ }
403
+ }
404
+ return result
405
+ }
406
+
407
+ export const export_table_to_excel = (id, filename) => {
408
+ const table = document.getElementById(id);
409
+ const wb = XLSX.utils.table_to_book(table);
410
+ XLSX.writeFile(wb, filename + ".xlsx");
411
+
412
+ /* the second way */
413
+ // const table = document.getElementById(id);
414
+ // const wb = XLSX.utils.book_new();
415
+ // const ws = XLSX.utils.table_to_sheet(table);
416
+ // XLSX.utils.book_append_sheet(wb, ws, filename);
417
+ // XLSX.writeFile(wb, filename);
418
+ }
419
+
420
+ export const export_json_to_excel = ({data, key, title, filename, spanColumns, autoWidth, format}) => {
421
+ const wb = XLSX.utils.book_new();
422
+ const ws = XLSX.utils.json_to_sheet(data, {header: key, skipHeader: false});
423
+ for (var i = title.length; i > 0; i--) {
424
+ data.unshift(title[i - 1])
425
+ }
426
+ if (autoWidth) {
427
+ const arr = json_to_array(key, data);
428
+ auto_width(ws, arr);
429
+ }
430
+ merge_content(ws, data, spanColumns)
431
+ XLSX.utils.book_append_sheet(wb, ws, filename);
432
+ XLSX.writeFile(wb, filename + '.' + format);
433
+ }
434
+
435
+ export const export_array_to_excel = ({key, data, title, filename, spanColumns, autoWidth, format}) => {
436
+ const wb = XLSX.utils.book_new();
437
+ const arr = json_to_array(key, data);
438
+ console.log(arr)
439
+ for (var i = title.length; i > 0; i--) {
440
+ arr.unshift(title[i - 1])
441
+ }
442
+ const ws = XLSX.utils.aoa_to_sheet(arr);
443
+ if (autoWidth) {
444
+ auto_width(ws, arr);
445
+ }
446
+ // 合并表头
447
+ if (!ws['!merges']) ws['!merges'] = [];
448
+ if (title.length > 1) {
449
+ merge_title(ws, title)
450
+ }
451
+ merge_content(ws, data, spanColumns, title.length)
452
+ add_style(ws, title)
453
+ XLSX.utils.book_append_sheet(wb, ws, filename);
454
+ XLSX.writeFileXLSX(wb, filename + '.' + "xlsx");
455
+ }
456
+
457
+ function s2ab(s) {
458
+ if (typeof ArrayBuffer !== 'undefined') {
459
+ var buf = new ArrayBuffer(s.length);
460
+ var view = new Uint8Array(buf);
461
+ for (var i = 0; i != s.length; ++i) view[i] = s.charCodeAt(i) & 0xFF;
462
+ return buf;
463
+ } else {
464
+ var buf = new Array(s.length);
465
+ for (var i = 0; i != s.length; ++i) buf[i] = s.charCodeAt(i) & 0xFF;
466
+ return buf;
467
+ }
468
+ }
469
+
470
+ export const saveAs = function(blob, fileName) {
471
+ // IE10+
472
+ if (window.navigator.msSaveOrOpenBlob) {
473
+ navigator.msSaveBlob(blob, fileName)
474
+ } else {
475
+ if (typeof blob == "object" && blob instanceof Blob) {
476
+ blob = URL.createObjectURL(blob); // 创建blob地址
477
+ }
478
+ let aLink = document.createElement("a");
479
+ aLink.href = blob;
480
+ // HTML5新增的属性,指定保存文件名,可以不要后缀,注意,有时候 file:///模式下不会生效
481
+ aLink.download = fileName || "下载";
482
+ let event;
483
+ if (window.MouseEvent) event = new MouseEvent("click");
484
+ //移动端
485
+ else {
486
+ event = document.createEvent("MouseEvents");
487
+ event.initMouseEvent("click", true, false, window, 0, 0, 0, 0, 0, false, false, false, false, 0, null);
488
+ }
489
+ aLink.dispatchEvent(event);
490
+ setTimeout(function () {
491
+ aLink.remove();
492
+ URL.revokeObjectURL(blob);
493
+ }, 100);
494
+ }
495
+ }
496
+
497
+ export const read = (data, type) => {
498
+ /* if type == 'base64' must fix data first */
499
+ // const fixedData = fixdata(data)
500
+ // const workbook = XLSX.read(btoa(fixedData), { type: 'base64' })
501
+ const workbook = XLSX.read(data, {type: type});
502
+ const firstSheetName = workbook.SheetNames[0];
503
+ const worksheet = workbook.Sheets[firstSheetName];
504
+ const header = get_header_row(worksheet);
505
+ const results = XLSX.utils.sheet_to_json(worksheet);
506
+ return {header, results};
507
+ }
508
+
509
+ export default {
510
+ export_table_to_excel,
511
+ export_array_to_excel,
512
+ export_json_to_excel,
513
+ key_transform,
514
+ key_el_transform,
515
+ title_transform,
516
+ title_el_transform,
517
+ enums_transform,
518
+ enums_el_transform,
519
+ enums_to_value,
520
+ read,
521
+ s2ab,
522
+ saveAs
523
+ }
package/utils/index.js ADDED
@@ -0,0 +1,5 @@
1
+ const sum = (a, b) => {
2
+ return a + b;
3
+ };
4
+
5
+ export { sum };
package/utils/lodop.js ADDED
@@ -0,0 +1,160 @@
1
+ var CreatedOKLodop7766 = null, CLodopIsLocal;
2
+
3
+ //====判断是否需要 Web打印服务CLodop:===
4
+ //===(不支持插件的浏览器版本需要用它)===
5
+ function needCLodop() {
6
+ try {
7
+ var ua = navigator.userAgent;
8
+ if (ua.match(/Windows\sPhone/i))
9
+ return true;
10
+ if (ua.match(/iPhone|iPod|iPad/i))
11
+ return true;
12
+ if (ua.match(/Android/i))
13
+ return true;
14
+ if (ua.match(/Edge\D?\d+/i))
15
+ return true;
16
+
17
+ var verTrident = ua.match(/Trident\D?\d+/i);
18
+ var verIE = ua.match(/MSIE\D?\d+/i);
19
+ var verOPR = ua.match(/OPR\D?\d+/i);
20
+ var verFF = ua.match(/Firefox\D?\d+/i);
21
+ var x64 = ua.match(/x64/i);
22
+ if ((!verTrident) && (!verIE) && (x64))
23
+ return true;
24
+ else if (verFF) {
25
+ verFF = verFF[0].match(/\d+/);
26
+ if ((verFF[0] >= 41) || (x64))
27
+ return true;
28
+ } else if (verOPR) {
29
+ verOPR = verOPR[0].match(/\d+/);
30
+ if (verOPR[0] >= 32)
31
+ return true;
32
+ } else if ((!verTrident) && (!verIE)) {
33
+ var verChrome = ua.match(/Chrome\D?\d+/i);
34
+ if (verChrome) {
35
+ verChrome = verChrome[0].match(/\d+/);
36
+ if (verChrome[0] >= 41)
37
+ return true;
38
+ }
39
+ }
40
+ return false;
41
+ } catch (err) {
42
+ return true;
43
+ }
44
+ }
45
+
46
+ //====页面引用CLodop云打印必须的JS文件,用双端口(8000和18000)避免其中某个被占用:====
47
+ if (needCLodop()) {
48
+ var src1 = "http://localhost:8000/CLodopfuncs.js?priority=1";
49
+ var src2 = "http://localhost:18000/CLodopfuncs.js?priority=0";
50
+
51
+ var head = document.head || document.getElementsByTagName("head")[0] || document.documentElement;
52
+ var oscript = document.createElement("script");
53
+ oscript.src = src1;
54
+ head.insertBefore(oscript, head.firstChild);
55
+ oscript = document.createElement("script");
56
+ oscript.src = src2;
57
+ head.insertBefore(oscript, head.firstChild);
58
+ CLodopIsLocal = !!((src1 + src2).match(/\/\/localho|\/\/127.0.0./i));
59
+ }
60
+
61
+ //====获取LODOP对象的主过程:====
62
+ export function getLodop(oOBJECT, oEMBED) {
63
+ // var printHint = "<div class='print-hint' ></div>"
64
+ // printHint.className = 'print-hint'
65
+ var strHtmInstall = "<div >打印控件未安装!点击这里<a href='file/install_lodop32.exe' target='view_window'>执行安装</a>,安装后请刷新页面或重新进入。</div>";
66
+ var strHtmUpdate = "<div >打印控件需要升级!点击这里<a href='file/install_lodop32.exe' target='view_window'>执行升级</a>,升级后请重新进入。</div>";
67
+ var strHtm64_Install = "<div >打印控件未安装!点击这里<a href='file/install_lodop64.exe' target='view_window'>执行安装</a>,安装后请刷新页面或重新进入。</div>";
68
+ var strHtm64_Update = "<div >打印控件需要升级!点击这里<a href='file/install_lodop64.exe' target='view_window'>执行升级</a>,升级后请重新进入。</div>";
69
+ var strHtmFireFox = "<div >(注意:如曾安装过Lodop旧版附件npActiveXPLugin,请在【工具】->【附加组件】->【扩展】中先卸它)</div>";
70
+ var strHtmChrome = "<div >(如果此前正常,仅因浏览器升级或重安装而出问题,需重新执行以上安装)</div>";
71
+ var strCLodopInstall_1 = "<div >Web打印服务CLodop未安装启动,点击这里<a href='file/CLodop_Setup_for_Win32NT.exe' target='view_window'>下载执行安装</a></div>";
72
+ var strCLodopInstall_2 = "<div >(若此前已安装过,可<a href='CLodop.protocol:setup' target='_self'>点这里直接再次启动</a>)";
73
+ var strCLodopInstall_3 = ",成功后请刷新本页面。</div>";
74
+ var strCLodopUpdate = "<div >Web打印服务CLodop需升级!点击这里<a href='file/CLodop_Setup_for_Win32NT.exe' target='view_window'>执行升级</a>,升级后请刷新页面。</div>";
75
+ var LODOP;
76
+ try {
77
+ var ua = navigator.userAgent;
78
+ var isIE = !!(ua.match(/MSIE/i)) || !!(ua.match(/Trident/i));
79
+ if (needCLodop()) {
80
+ try {
81
+ LODOP = getCLodop();
82
+ } catch (err) {
83
+ }
84
+ if (!LODOP && document.readyState !== "complete") {
85
+ alert("网页还没下载完毕,请稍等一下再操作.");
86
+ return;
87
+ }
88
+ if (!LODOP) {
89
+ let info = "<div class='print-hint'>" + (strCLodopInstall_1 + (CLodopIsLocal ? strCLodopInstall_2 : "") + strCLodopInstall_3) + "</div>";
90
+ let html = document.getElementById("app").innerHTML
91
+ document.getElementById("app").innerHTML = info + html
92
+ return;
93
+ } else {
94
+ if (CLODOP.CVERSION < "3.0.7.5") {
95
+ let info = "<div class='print-hint'>" + strCLodopUpdate + "</div>";
96
+ let html = document.getElementById("app").innerHTML
97
+ document.getElementById("app").innerHTML = info + html
98
+ // document.body.innerHTML = strCLodopUpdate + document.body.innerHTML;
99
+ }
100
+ if (oEMBED && oEMBED.parentNode)
101
+ oEMBED.parentNode.removeChild(oEMBED);
102
+ if (oOBJECT && oOBJECT.parentNode)
103
+ oOBJECT.parentNode.removeChild(oOBJECT);
104
+ }
105
+ } else {
106
+ var is64IE = isIE && !!(ua.match(/x64/i));
107
+ //=====如果页面有Lodop就直接使用,没有则新建:==========
108
+ if (oOBJECT || oEMBED) {
109
+ if (isIE)
110
+ LODOP = oOBJECT;
111
+ else
112
+ LODOP = oEMBED;
113
+ } else if (!CreatedOKLodop7766) {
114
+ LODOP = document.createElement("object");
115
+ LODOP.setAttribute("width", 0);
116
+ LODOP.setAttribute("height", 0);
117
+ LODOP.setAttribute("style", "position:absolute;left:0px;top:-100px;width:0px;height:0px;");
118
+ if (isIE)
119
+ LODOP.setAttribute("classid", "clsid:2105C259-1E0C-4534-8141-A753534CB4CA");
120
+ else
121
+ LODOP.setAttribute("type", "application/x-print-lodop");
122
+ document.documentElement.appendChild(LODOP);
123
+ CreatedOKLodop7766 = LODOP;
124
+ } else
125
+ LODOP = CreatedOKLodop7766;
126
+ //=====Lodop插件未安装时提示下载地址:==========
127
+ if ((!LODOP) || (!LODOP.VERSION)) {
128
+ if (ua.indexOf('Chrome') >= 0) {
129
+ let info = "<div class='print-hint'>" + strHtmChrome + "</div>";
130
+ let html = document.getElementById("app").innerHTML
131
+ document.getElementById("app").innerHTML = info + html
132
+ }
133
+ if (ua.indexOf('Firefox') >= 0) {
134
+ let info = "<div class='print-hint'>" + strHtmFireFox + "</div>";
135
+ let html = document.getElementById("app").innerHTML
136
+ document.getElementById("app").innerHTML = info + html
137
+ }
138
+ let info = "<div class='print-hint'>" + (is64IE ? strHtm64_Install : strHtmInstall) + "</div>";
139
+ let html = document.getElementById("app").innerHTML
140
+ document.getElementById("app").innerHTML = info + html
141
+ return LODOP;
142
+ }
143
+ }
144
+ if (LODOP.VERSION < "6.2.2.6") {
145
+ if (!needCLodop()) {
146
+ let info = "<div class='print-hint'>" + (is64IE ? strHtm64_Update : strHtmUpdate) + "</div>";
147
+ let html = document.getElementById("app").innerHTML
148
+ document.getElementById("app").innerHTML = info + html
149
+ }
150
+ return LODOP;
151
+ }
152
+ //===如下空白位置适合调用统一功能(如注册语句、语言选择等):==
153
+ LODOP.SET_LICENSES("浪潮软件股份有限公司", "E06FBED5C95F9D41C185E57C393C53F6AE2", "浪潮軟件股份有限公司", "410D0FEB0AABCBD335D53B757C0BF007CFE");
154
+ LODOP.SET_LICENSES("THIRD LICENSE", "", "Inspur software Co., Ltd", "DB58BD6748AE0A151B3648415F61251084E");
155
+ //=======================================================
156
+ return LODOP;
157
+ } catch (err) {
158
+ alert("getLodop出错:" + err);
159
+ }
160
+ }