sh-view 2.8.1 → 2.8.3

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 (91) hide show
  1. package/.eslintrc.js +25 -20
  2. package/other.js +8 -8
  3. package/package.json +9 -6
  4. package/packages/components/index.js +91 -91
  5. package/packages/components/sh-alert/alert.ts +30 -0
  6. package/packages/components/sh-alert/index.vue +143 -168
  7. package/packages/components/sh-badge/index.vue +242 -242
  8. package/packages/components/sh-calendar/index.vue +650 -650
  9. package/packages/components/sh-card/index.vue +148 -148
  10. package/packages/components/sh-code-editor/index.vue +19 -19
  11. package/packages/components/sh-col/index.vue +92 -92
  12. package/packages/components/sh-corner/index.vue +230 -230
  13. package/packages/components/sh-count-to/index.vue +131 -131
  14. package/packages/components/sh-date/index.vue +301 -301
  15. package/packages/components/sh-drawer/index.vue +579 -579
  16. package/packages/components/sh-drawer/scrollbar.js +78 -78
  17. package/packages/components/sh-empty/index.vue +42 -42
  18. package/packages/components/sh-form/js/props.js +76 -76
  19. package/packages/components/sh-form/js/useForm.js +229 -229
  20. package/packages/components/sh-header/index.vue +261 -260
  21. package/packages/components/sh-icon/css/default/ionicons.svg +869 -869
  22. package/packages/components/sh-icon/css/font/iconfont.json +247 -247
  23. package/packages/components/sh-icon/index.vue +41 -41
  24. package/packages/components/sh-image/index.vue +133 -133
  25. package/packages/components/sh-list/index.vue +146 -146
  26. package/packages/components/sh-loading/index.vue +53 -53
  27. package/packages/components/sh-modal/index.vue +188 -188
  28. package/packages/components/sh-noticebar/index.vue +215 -215
  29. package/packages/components/sh-poptip/index.vue +597 -597
  30. package/packages/components/sh-progress/index.vue +276 -276
  31. package/packages/components/sh-pull-refresh/index.vue +289 -289
  32. package/packages/components/sh-result/index.vue +114 -114
  33. package/packages/components/sh-row/index.vue +66 -66
  34. package/packages/components/sh-split/components/trigger.vue +33 -33
  35. package/packages/components/sh-split/index.vue +342 -342
  36. package/packages/components/sh-table/components/importModal.vue +363 -363
  37. package/packages/components/sh-table/components/sh-column.vue +68 -68
  38. package/packages/components/sh-table/js/excel_to_json.js +313 -313
  39. package/packages/components/sh-table/js/props.js +305 -305
  40. package/packages/components/sh-table/js/tableMethods.js +167 -167
  41. package/packages/components/sh-table/js/useTable.js +636 -636
  42. package/packages/components/sh-table/table.vue +217 -217
  43. package/packages/components/sh-tabs/index.vue +426 -426
  44. package/packages/components/sh-tag/index.vue +168 -168
  45. package/packages/components/sh-toolbar/index.vue +182 -182
  46. package/packages/components/sh-tree/components/table-tree.vue +289 -289
  47. package/packages/components/sh-tree/mixin/treeProps.js +122 -122
  48. package/packages/components/sh-upload/index.vue +535 -535
  49. package/packages/components/sh-water-fall/index.vue +80 -80
  50. package/packages/components/sh-water-mark/index.vue +96 -96
  51. package/packages/css/index.js +4 -4
  52. package/packages/directive/index.js +19 -19
  53. package/packages/directive/module/click-out.js +14 -14
  54. package/packages/directive/module/draggable.js +42 -42
  55. package/packages/directive/module/line-clamp.js +22 -22
  56. package/packages/directive/module/prevent-click.js +18 -18
  57. package/packages/directive/module/resize.js +14 -14
  58. package/packages/directive/module/ripple.js +166 -166
  59. package/packages/index.js +39 -39
  60. package/packages/mixin/index.js +86 -86
  61. package/packages/other/sh-cron-modal/components/cron-content.vue +294 -294
  62. package/packages/other/sh-cron-modal/index.vue +81 -81
  63. package/packages/other/sh-cron-modal/mixin/cron-emits.js +1 -1
  64. package/packages/other/sh-cron-modal/mixin/cron-props.js +9 -9
  65. package/packages/other/sh-cron-modal/tabs/cron-week-box.vue +126 -126
  66. package/packages/other/sh-menu/index.vue +326 -326
  67. package/packages/other/sh-menu/menu-group-content.vue +136 -136
  68. package/packages/other/sh-menu/menu-item-content.vue +71 -71
  69. package/packages/other/sh-menu-card/index.vue +250 -250
  70. package/packages/other/sh-menu-card/menu-box.vue +87 -87
  71. package/packages/other/sh-preview/components/sh-excel.vue +163 -163
  72. package/packages/other/sh-preview/js/data-hook.js +41 -41
  73. package/packages/other/sh-preview/js/data-props.js +15 -15
  74. package/packages/other/sh-system-tip/index.vue +115 -115
  75. package/packages/utils/resize.js +69 -70
  76. package/packages/utils/transfer-queue.js +12 -12
  77. package/packages/vxeTable/index.js +193 -184
  78. package/packages/vxeTable/plugins/export.js +450 -450
  79. package/packages/vxeTable/render/cell/vxe-render-img.vue +27 -27
  80. package/packages/vxeTable/render/cell/vxe-render-table.vue +51 -51
  81. package/packages/vxeTable/render/cell/vxe-render-time.vue +44 -44
  82. package/packages/vxeTable/render/cell/vxe-render-tree.vue +70 -70
  83. package/packages/vxeTable/render/filters/vxe-filter-input.vue +26 -26
  84. package/packages/vxeTable/render/filters/vxe-filter-time.vue +26 -26
  85. package/packages/vxeTable/render/globalRenders.jsx +514 -514
  86. package/packages/vxeTable/render/mixin/cell-hooks.js +198 -198
  87. package/packages/vxeTable/render/mixin/cell-props.js +23 -23
  88. package/packages/vxeTable/render/mixin/filter-hooks.js +46 -46
  89. package/tsconfig.json +25 -0
  90. package/types/component.d.ts +1 -0
  91. package/types/index.ts +0 -0
@@ -1,313 +1,313 @@
1
- var SSF = {}
2
- var basedate = new Date(1899, 11, 30, 0, 0, 0) // 2209161600000
3
-
4
- export default {
5
- safe_decode_range(range) {
6
- var o = { s: { c: 0, r: 0 }, e: { c: 0, r: 0 } }
7
- var idx = 0,
8
- i = 0,
9
- cc = 0
10
- var len = range.length
11
- for (idx = 0; i < len; ++i) {
12
- if ((cc = range.charCodeAt(i) - 64) < 1 || cc > 26) break
13
- idx = 26 * idx + cc
14
- }
15
- o.s.c = --idx
16
-
17
- for (idx = 0; i < len; ++i) {
18
- if ((cc = range.charCodeAt(i) - 48) < 0 || cc > 9) break
19
- idx = 10 * idx + cc
20
- }
21
- o.s.r = --idx
22
-
23
- if (i === len || range.charCodeAt(++i) === 58) {
24
- o.e.c = o.s.c
25
- o.e.r = o.s.r
26
- return o
27
- }
28
-
29
- for (idx = 0; i !== len; ++i) {
30
- if ((cc = range.charCodeAt(i) - 64) < 1 || cc > 26) break
31
- idx = 26 * idx + cc
32
- }
33
- o.e.c = --idx
34
-
35
- for (idx = 0; i !== len; ++i) {
36
- if ((cc = range.charCodeAt(i) - 48) < 0 || cc > 9) break
37
- idx = 10 * idx + cc
38
- }
39
- o.e.r = --idx
40
- return o
41
- },
42
-
43
- encode_row(row) {
44
- return '' + (row + 1)
45
- },
46
- encode_col(col) {
47
- if (col < 0) throw new Error('invalid column ' + col)
48
- var s = ''
49
- for (++col; col; col = Math.floor((col - 1) / 26)) s = String.fromCharCode(((col - 1) % 26) + 65) + s
50
- return s
51
- },
52
-
53
- format_cell(cell, v, o) {
54
- if (cell == null || cell.t == null || cell.t === 'z') return ''
55
- if (cell.w !== undefined) return cell.w
56
- if (cell.t === 'd' && !cell.z && o && o.dateNF) cell.z = o.dateNF
57
- if (v === undefined) return this.safe_format_cell(cell, cell.v)
58
- return this.safe_format_cell(cell, v)
59
- },
60
-
61
- safe_format_cell(cell, v) {
62
- var q = cell.t === 'd' && v instanceof Date
63
- if (cell.z != null)
64
- try {
65
- return (cell.w = SSF.format(cell.z, q ? this.datenum(v) : v))
66
- } catch (e) {}
67
- try {
68
- return (cell.w = SSF.format((cell.XF || {}).numFmtId || (q ? 14 : 0), q ? this.datenum(v) : v))
69
- } catch (e) {
70
- return '' + v
71
- }
72
- },
73
- /**
74
- * @param {Number} num: excel存储的数字
75
- * @param {String} format: 年月日的间隔符,默认为'-'
76
- * 格式化Excel表格中存储的时间
77
- */
78
- formatExcelDate(num, format = '-') {
79
- num = Number(num) // 强制类型转化,以防传来的值是字符串
80
- let millisecond = 0 // 转化后的毫秒数
81
- if (num > 60) {
82
- millisecond = (num - 25569) * 60 * 60 * 24 * 1000
83
- } else {
84
- // 对小于61的错误日期进行处理
85
- millisecond = (num - 25568) * 60 * 60 * 24 * 1000
86
- }
87
- let date = new Date(millisecond) // 根据转化后的毫秒数获取对应的时间
88
- let yy = date.getFullYear()
89
- let mm = date.getMonth() + 1 < 10 ? '0' + (date.getMonth() + 1) : date.getMonth() + 1
90
- let dd = date.getDate() < 10 ? '0' + date.getDate() : date.getDate()
91
- return yy + format + mm + format + dd // 返回格式化后的日期
92
- },
93
- datenum(v, date1904) {
94
- var epoch = v.getTime()
95
- if (date1904) epoch -= 1462 * 24 * 60 * 60 * 1000
96
- var dnthresh = basedate.getTime() + (v.getTimezoneOffset() - basedate.getTimezoneOffset()) * 60000
97
- return (epoch - dnthresh) / (24 * 60 * 60 * 1000)
98
- },
99
-
100
- make_json_row(sheet, r, R, cols, header, hdr, dense, o) {
101
- var rr = this.encode_row(R)
102
- var defval = o.defval,
103
- raw = o.raw || !Object.prototype.hasOwnProperty.call(o, 'raw')
104
- var isempty = true
105
- var row = header === 1 ? [] : {}
106
- if (header !== 1) {
107
- if (Object.defineProperty)
108
- try {
109
- Object.defineProperty(row, '__rowNum__', {
110
- value: R,
111
- enumerable: false
112
- })
113
- } catch (e) {
114
- row.__rowNum__ = R
115
- }
116
- else row.__rowNum__ = R
117
- }
118
- if (!dense || sheet[R])
119
- for (var C = r.s.c; C <= r.e.c; ++C) {
120
- var val = dense ? sheet[R][C] : sheet[cols[C] + rr]
121
- if (val === undefined || val.t === undefined) {
122
- if (defval === undefined) continue
123
- if (hdr[C] != null) {
124
- row[hdr[C]] = defval
125
- }
126
- continue
127
- }
128
- var v = val.v
129
- switch (val.t) {
130
- case 'z':
131
- if (v == null) break
132
- continue
133
- case 'e':
134
- v = void 0
135
- break
136
- case 's':
137
- case 'd':
138
- case 'b':
139
- break
140
- case 'n':
141
- let isDateType
142
- if (val.w.indexOf('-') !== -1 || val.w.indexOf('/') !== -1) isDateType = true
143
- if (isDateType) v = this.formatExcelDate(val.v)
144
-
145
- break
146
- default:
147
- throw new Error('unrecognized type ' + val.t)
148
- }
149
- if (hdr[C] != null) {
150
- if (v == null) {
151
- if (defval !== undefined) row[hdr[C]] = defval
152
- else if (raw && v === null) row[hdr[C]] = null
153
- else continue
154
- } else {
155
- row[hdr[C]] = raw || (o.rawNumbers && val.t === 'n') ? v : this.format_cell(val, v, o)
156
- }
157
- if (v != null) isempty = false
158
- }
159
- }
160
- return { row: row, isempty: isempty }
161
- },
162
-
163
- sheet_to_json(sheet, opts) {
164
- if (sheet == null || sheet['!ref'] == null) return []
165
- var val = { t: 'n', v: 0 },
166
- header = 0,
167
- offset = 1,
168
- hdr = [],
169
- v = 0,
170
- vv = ''
171
- var r = { s: { r: 0, c: 0 }, e: { r: 0, c: 0 } }
172
- var o = opts || {}
173
- var range = o.range != null ? o.range : sheet['!ref']
174
- if (o.header === 1) header = 1
175
- else if (o.header === 'A') header = 2
176
- else if (Array.isArray(o.header)) header = 3
177
- else if (o.header == null) header = 0
178
- switch (typeof range) {
179
- case 'string':
180
- r = this.safe_decode_range(range)
181
- break
182
- case 'number':
183
- r = this.safe_decode_range(sheet['!ref'])
184
- r.s.r = range
185
- break
186
- default:
187
- r = range
188
- }
189
- if (header > 0) offset = 0
190
- var rr = this.encode_row(r.s.r)
191
- var cols = []
192
- var out = []
193
- var outi = 0,
194
- counter = 0
195
- var dense = Array.isArray(sheet)
196
- var R = r.s.r,
197
- C = 0,
198
- CC = 0
199
- if (dense && !sheet[R]) sheet[R] = []
200
- let arrs = sheet['!merges']
201
- if (arrs) {
202
- const mergeRowMax = Math.max.apply(
203
- null,
204
- arrs.map(v => v.e.r - v.s.r)
205
- )
206
- offset += mergeRowMax
207
- let cccc = [] //获取合并行的所有单元格除去第一个
208
- const arrat = arrs.filter(v => {
209
- return v.e.r - v.s.r > 0
210
- })
211
- arrat.forEach((item, index) => {
212
- if (item.e.r - item.s.r === 1) {
213
- cccc.push(this.encode_col(item.e.c) + this.encode_row(item.e.r))
214
- } else {
215
- console.log(item.e.r - item.s.r)
216
- for (let indexI = item.s.r + 1; indexI <= item.e.r; indexI++) {
217
- cccc.push(this.encode_col(item.e.c) + this.encode_row(indexI))
218
- }
219
- }
220
- })
221
- if (mergeRowMax) {
222
- let newRR = rr
223
- let newTitleArrs = []
224
- for (let i = 0; i <= mergeRowMax; i++) {
225
- let newTitle = []
226
- for (C = r.s.c; C <= r.e.c; ++C) {
227
- cols[C] = this.encode_col(C)
228
- val = dense ? sheet[R][C] : sheet[cols[C] + newRR]
229
- switch (header) {
230
- case 1:
231
- newTitle[C] = C - r.s.c
232
- break
233
- case 2:
234
- newTitle[C] = cols[C]
235
- break
236
- case 3:
237
- newTitle[C] = o.header[C - r.s.c]
238
- break
239
- default:
240
- if (val == null || val.h === '') {
241
- val = { w: '__EMPTY', t: 's' }
242
- }
243
- vv = v = this.format_cell(val, null, o)
244
- counter = 0
245
- for (CC = 0; CC < newTitle.length; ++CC) {
246
- if (newTitle[CC] === vv) {
247
- if (vv === '__EMPTY') vv = v + '_' + ++counter
248
- }
249
- }
250
- if (cccc.indexOf(cols[C] + newRR) !== -1) {
251
- vv = ''
252
- }
253
- newTitle[C] = vv
254
- }
255
- if (C === r.e.c) {
256
- newTitleArrs.push(newTitle)
257
- }
258
- }
259
- newRR++
260
- }
261
- // console.log(newTitleArrs)
262
- for (let i1 = 0; i1 < newTitleArrs.length; i1++) {
263
- for (let i2 = 0; i2 < newTitleArrs[i1].length - 1; i2++) {
264
- if (newTitleArrs[i1][i2 + 1].indexOf('EMPTY') !== -1) {
265
- newTitleArrs[i1][i2 + 1] = newTitleArrs[i1][i2]
266
- }
267
- }
268
- }
269
- for (let j = 0; j < newTitleArrs[0].length; j++) {
270
- let obj = ''
271
- for (let i = 0; i < newTitleArrs.length; i++) {
272
- if (newTitleArrs[i][j]) {
273
- if (i) {
274
- obj = obj + '.' + newTitleArrs[i][j]
275
- } else {
276
- obj = obj + newTitleArrs[i][j]
277
- }
278
- }
279
- }
280
- hdr.push(obj)
281
- }
282
- }
283
- } else {
284
- for (C = r.s.c; C <= r.e.c; ++C) {
285
- cols[C] = this.encode_col(C)
286
- val = dense ? sheet[R][C] : sheet[cols[C] + rr]
287
- switch (header) {
288
- case 1:
289
- hdr[C] = C - r.s.c
290
- break
291
- case 2:
292
- hdr[C] = cols[C]
293
- break
294
- case 3:
295
- hdr[C] = o.header[C - r.s.c]
296
- break
297
- default:
298
- if (val == null) val = { w: '__EMPTY', t: 's' }
299
- vv = v = this.format_cell(val, null, o)
300
- counter = 0
301
- for (CC = 0; CC < hdr.length; ++CC) if (hdr[CC] === vv) vv = v + '_' + ++counter
302
- hdr[C] = vv
303
- }
304
- }
305
- }
306
- for (R = r.s.r + offset; R <= r.e.r; ++R) {
307
- var row = this.make_json_row(sheet, r, R, cols, header, hdr, dense, o)
308
- if (row.isempty === false || (header === 1 ? o.blankrows !== false : !!o.blankrows)) out[outi++] = row.row
309
- }
310
- out.length = outi
311
- return out
312
- }
313
- }
1
+ var SSF = {}
2
+ var basedate = new Date(1899, 11, 30, 0, 0, 0) // 2209161600000
3
+
4
+ export default {
5
+ safe_decode_range(range) {
6
+ var o = { s: { c: 0, r: 0 }, e: { c: 0, r: 0 } }
7
+ var idx = 0,
8
+ i = 0,
9
+ cc = 0
10
+ var len = range.length
11
+ for (idx = 0; i < len; ++i) {
12
+ if ((cc = range.charCodeAt(i) - 64) < 1 || cc > 26) break
13
+ idx = 26 * idx + cc
14
+ }
15
+ o.s.c = --idx
16
+
17
+ for (idx = 0; i < len; ++i) {
18
+ if ((cc = range.charCodeAt(i) - 48) < 0 || cc > 9) break
19
+ idx = 10 * idx + cc
20
+ }
21
+ o.s.r = --idx
22
+
23
+ if (i === len || range.charCodeAt(++i) === 58) {
24
+ o.e.c = o.s.c
25
+ o.e.r = o.s.r
26
+ return o
27
+ }
28
+
29
+ for (idx = 0; i !== len; ++i) {
30
+ if ((cc = range.charCodeAt(i) - 64) < 1 || cc > 26) break
31
+ idx = 26 * idx + cc
32
+ }
33
+ o.e.c = --idx
34
+
35
+ for (idx = 0; i !== len; ++i) {
36
+ if ((cc = range.charCodeAt(i) - 48) < 0 || cc > 9) break
37
+ idx = 10 * idx + cc
38
+ }
39
+ o.e.r = --idx
40
+ return o
41
+ },
42
+
43
+ encode_row(row) {
44
+ return '' + (row + 1)
45
+ },
46
+ encode_col(col) {
47
+ if (col < 0) throw new Error('invalid column ' + col)
48
+ var s = ''
49
+ for (++col; col; col = Math.floor((col - 1) / 26)) s = String.fromCharCode(((col - 1) % 26) + 65) + s
50
+ return s
51
+ },
52
+
53
+ format_cell(cell, v, o) {
54
+ if (cell == null || cell.t == null || cell.t === 'z') return ''
55
+ if (cell.w !== undefined) return cell.w
56
+ if (cell.t === 'd' && !cell.z && o && o.dateNF) cell.z = o.dateNF
57
+ if (v === undefined) return this.safe_format_cell(cell, cell.v)
58
+ return this.safe_format_cell(cell, v)
59
+ },
60
+
61
+ safe_format_cell(cell, v) {
62
+ var q = cell.t === 'd' && v instanceof Date
63
+ if (cell.z != null)
64
+ try {
65
+ return (cell.w = SSF.format(cell.z, q ? this.datenum(v) : v))
66
+ } catch (e) {}
67
+ try {
68
+ return (cell.w = SSF.format((cell.XF || {}).numFmtId || (q ? 14 : 0), q ? this.datenum(v) : v))
69
+ } catch (e) {
70
+ return '' + v
71
+ }
72
+ },
73
+ /**
74
+ * @param {Number} num: excel存储的数字
75
+ * @param {String} format: 年月日的间隔符,默认为'-'
76
+ * 格式化Excel表格中存储的时间
77
+ */
78
+ formatExcelDate(num, format = '-') {
79
+ num = Number(num) // 强制类型转化,以防传来的值是字符串
80
+ let millisecond = 0 // 转化后的毫秒数
81
+ if (num > 60) {
82
+ millisecond = (num - 25569) * 60 * 60 * 24 * 1000
83
+ } else {
84
+ // 对小于61的错误日期进行处理
85
+ millisecond = (num - 25568) * 60 * 60 * 24 * 1000
86
+ }
87
+ let date = new Date(millisecond) // 根据转化后的毫秒数获取对应的时间
88
+ let yy = date.getFullYear()
89
+ let mm = date.getMonth() + 1 < 10 ? '0' + (date.getMonth() + 1) : date.getMonth() + 1
90
+ let dd = date.getDate() < 10 ? '0' + date.getDate() : date.getDate()
91
+ return yy + format + mm + format + dd // 返回格式化后的日期
92
+ },
93
+ datenum(v, date1904) {
94
+ var epoch = v.getTime()
95
+ if (date1904) epoch -= 1462 * 24 * 60 * 60 * 1000
96
+ var dnthresh = basedate.getTime() + (v.getTimezoneOffset() - basedate.getTimezoneOffset()) * 60000
97
+ return (epoch - dnthresh) / (24 * 60 * 60 * 1000)
98
+ },
99
+
100
+ make_json_row(sheet, r, R, cols, header, hdr, dense, o) {
101
+ var rr = this.encode_row(R)
102
+ var defval = o.defval,
103
+ raw = o.raw || !Object.prototype.hasOwnProperty.call(o, 'raw')
104
+ var isempty = true
105
+ var row = header === 1 ? [] : {}
106
+ if (header !== 1) {
107
+ if (Object.defineProperty)
108
+ try {
109
+ Object.defineProperty(row, '__rowNum__', {
110
+ value: R,
111
+ enumerable: false
112
+ })
113
+ } catch (e) {
114
+ row.__rowNum__ = R
115
+ }
116
+ else row.__rowNum__ = R
117
+ }
118
+ if (!dense || sheet[R])
119
+ for (var C = r.s.c; C <= r.e.c; ++C) {
120
+ var val = dense ? sheet[R][C] : sheet[cols[C] + rr]
121
+ if (val === undefined || val.t === undefined) {
122
+ if (defval === undefined) continue
123
+ if (hdr[C] != null) {
124
+ row[hdr[C]] = defval
125
+ }
126
+ continue
127
+ }
128
+ var v = val.v
129
+ switch (val.t) {
130
+ case 'z':
131
+ if (v == null) break
132
+ continue
133
+ case 'e':
134
+ v = void 0
135
+ break
136
+ case 's':
137
+ case 'd':
138
+ case 'b':
139
+ break
140
+ case 'n':
141
+ let isDateType
142
+ if (val.w.indexOf('-') !== -1 || val.w.indexOf('/') !== -1) isDateType = true
143
+ if (isDateType) v = this.formatExcelDate(val.v)
144
+
145
+ break
146
+ default:
147
+ throw new Error('unrecognized type ' + val.t)
148
+ }
149
+ if (hdr[C] != null) {
150
+ if (v == null) {
151
+ if (defval !== undefined) row[hdr[C]] = defval
152
+ else if (raw && v === null) row[hdr[C]] = null
153
+ else continue
154
+ } else {
155
+ row[hdr[C]] = raw || (o.rawNumbers && val.t === 'n') ? v : this.format_cell(val, v, o)
156
+ }
157
+ if (v != null) isempty = false
158
+ }
159
+ }
160
+ return { row: row, isempty: isempty }
161
+ },
162
+
163
+ sheet_to_json(sheet, opts) {
164
+ if (sheet == null || sheet['!ref'] == null) return []
165
+ var val = { t: 'n', v: 0 },
166
+ header = 0,
167
+ offset = 1,
168
+ hdr = [],
169
+ v = 0,
170
+ vv = ''
171
+ var r = { s: { r: 0, c: 0 }, e: { r: 0, c: 0 } }
172
+ var o = opts || {}
173
+ var range = o.range != null ? o.range : sheet['!ref']
174
+ if (o.header === 1) header = 1
175
+ else if (o.header === 'A') header = 2
176
+ else if (Array.isArray(o.header)) header = 3
177
+ else if (o.header == null) header = 0
178
+ switch (typeof range) {
179
+ case 'string':
180
+ r = this.safe_decode_range(range)
181
+ break
182
+ case 'number':
183
+ r = this.safe_decode_range(sheet['!ref'])
184
+ r.s.r = range
185
+ break
186
+ default:
187
+ r = range
188
+ }
189
+ if (header > 0) offset = 0
190
+ var rr = this.encode_row(r.s.r)
191
+ var cols = []
192
+ var out = []
193
+ var outi = 0,
194
+ counter = 0
195
+ var dense = Array.isArray(sheet)
196
+ var R = r.s.r,
197
+ C = 0,
198
+ CC = 0
199
+ if (dense && !sheet[R]) sheet[R] = []
200
+ let arrs = sheet['!merges']
201
+ if (arrs) {
202
+ const mergeRowMax = Math.max.apply(
203
+ null,
204
+ arrs.map(v => v.e.r - v.s.r)
205
+ )
206
+ offset += mergeRowMax
207
+ let cccc = [] //获取合并行的所有单元格除去第一个
208
+ const arrat = arrs.filter(v => {
209
+ return v.e.r - v.s.r > 0
210
+ })
211
+ arrat.forEach((item, index) => {
212
+ if (item.e.r - item.s.r === 1) {
213
+ cccc.push(this.encode_col(item.e.c) + this.encode_row(item.e.r))
214
+ } else {
215
+ console.log(item.e.r - item.s.r)
216
+ for (let indexI = item.s.r + 1; indexI <= item.e.r; indexI++) {
217
+ cccc.push(this.encode_col(item.e.c) + this.encode_row(indexI))
218
+ }
219
+ }
220
+ })
221
+ if (mergeRowMax) {
222
+ let newRR = rr
223
+ let newTitleArrs = []
224
+ for (let i = 0; i <= mergeRowMax; i++) {
225
+ let newTitle = []
226
+ for (C = r.s.c; C <= r.e.c; ++C) {
227
+ cols[C] = this.encode_col(C)
228
+ val = dense ? sheet[R][C] : sheet[cols[C] + newRR]
229
+ switch (header) {
230
+ case 1:
231
+ newTitle[C] = C - r.s.c
232
+ break
233
+ case 2:
234
+ newTitle[C] = cols[C]
235
+ break
236
+ case 3:
237
+ newTitle[C] = o.header[C - r.s.c]
238
+ break
239
+ default:
240
+ if (val == null || val.h === '') {
241
+ val = { w: '__EMPTY', t: 's' }
242
+ }
243
+ vv = v = this.format_cell(val, null, o)
244
+ counter = 0
245
+ for (CC = 0; CC < newTitle.length; ++CC) {
246
+ if (newTitle[CC] === vv) {
247
+ if (vv === '__EMPTY') vv = v + '_' + ++counter
248
+ }
249
+ }
250
+ if (cccc.indexOf(cols[C] + newRR) !== -1) {
251
+ vv = ''
252
+ }
253
+ newTitle[C] = vv
254
+ }
255
+ if (C === r.e.c) {
256
+ newTitleArrs.push(newTitle)
257
+ }
258
+ }
259
+ newRR++
260
+ }
261
+ // console.log(newTitleArrs)
262
+ for (let i1 = 0; i1 < newTitleArrs.length; i1++) {
263
+ for (let i2 = 0; i2 < newTitleArrs[i1].length - 1; i2++) {
264
+ if (newTitleArrs[i1][i2 + 1].indexOf('EMPTY') !== -1) {
265
+ newTitleArrs[i1][i2 + 1] = newTitleArrs[i1][i2]
266
+ }
267
+ }
268
+ }
269
+ for (let j = 0; j < newTitleArrs[0].length; j++) {
270
+ let obj = ''
271
+ for (let i = 0; i < newTitleArrs.length; i++) {
272
+ if (newTitleArrs[i][j]) {
273
+ if (i) {
274
+ obj = obj + '.' + newTitleArrs[i][j]
275
+ } else {
276
+ obj = obj + newTitleArrs[i][j]
277
+ }
278
+ }
279
+ }
280
+ hdr.push(obj)
281
+ }
282
+ }
283
+ } else {
284
+ for (C = r.s.c; C <= r.e.c; ++C) {
285
+ cols[C] = this.encode_col(C)
286
+ val = dense ? sheet[R][C] : sheet[cols[C] + rr]
287
+ switch (header) {
288
+ case 1:
289
+ hdr[C] = C - r.s.c
290
+ break
291
+ case 2:
292
+ hdr[C] = cols[C]
293
+ break
294
+ case 3:
295
+ hdr[C] = o.header[C - r.s.c]
296
+ break
297
+ default:
298
+ if (val == null) val = { w: '__EMPTY', t: 's' }
299
+ vv = v = this.format_cell(val, null, o)
300
+ counter = 0
301
+ for (CC = 0; CC < hdr.length; ++CC) if (hdr[CC] === vv) vv = v + '_' + ++counter
302
+ hdr[C] = vv
303
+ }
304
+ }
305
+ }
306
+ for (R = r.s.r + offset; R <= r.e.r; ++R) {
307
+ var row = this.make_json_row(sheet, r, R, cols, header, hdr, dense, o)
308
+ if (row.isempty === false || (header === 1 ? o.blankrows !== false : !!o.blankrows)) out[outi++] = row.row
309
+ }
310
+ out.length = outi
311
+ return out
312
+ }
313
+ }