@lambo-design/shared 1.0.0-beta.27 → 1.0.0-beta.270

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 (211) hide show
  1. package/config/config.js +17 -2
  2. package/config/index.js +7 -2
  3. package/config/themes/atrovirens/atrovirens.css +578 -0
  4. package/config/themes/atrovirens/atrovirens.css.map +1 -0
  5. package/config/themes/atrovirens/atrovirens.less +673 -0
  6. package/config/themes/atrovirens/var.less +680 -0
  7. package/config/themes/blue/blue.css +578 -0
  8. package/config/themes/blue/blue.css.map +1 -0
  9. package/config/themes/blue/blue.less +675 -0
  10. package/config/themes/blue/var.less +683 -0
  11. package/config/themes/blue-white/blue-white.css +582 -0
  12. package/config/themes/blue-white/blue-white.css.map +1 -0
  13. package/config/themes/blue-white/blue-white.less +675 -0
  14. package/config/themes/blue-white/var.less +681 -0
  15. package/config/themes/blue-white-tight/blue-white-tight.css +579 -0
  16. package/config/themes/blue-white-tight/blue-white-tight.css.map +1 -0
  17. package/config/themes/blue-white-tight/blue-white-tight.less +676 -0
  18. package/config/themes/blue-white-tight/var.less +683 -0
  19. package/config/themes/cuiwei/cuiwei.css +578 -0
  20. package/config/themes/cuiwei/cuiwei.css.map +10 -0
  21. package/config/themes/cuiwei/cuiwei.less +673 -0
  22. package/config/themes/cuiwei/var.less +683 -0
  23. package/config/themes/danqing/danqing.css +578 -0
  24. package/config/themes/danqing/danqing.css.map +1 -0
  25. package/config/themes/danqing/danqing.less +673 -0
  26. package/config/themes/danqing/danqing.wxss +576 -0
  27. package/config/themes/danqing/var.less +684 -0
  28. package/config/themes/deep/deep.css +578 -0
  29. package/config/themes/deep/deep.css.map +1 -0
  30. package/config/themes/deep/deep.less +673 -0
  31. package/config/themes/deep/var.less +683 -0
  32. package/config/themes/default/default.css +393 -58
  33. package/config/themes/default/default.css.map +1 -1
  34. package/config/themes/default/default.less +371 -16
  35. package/config/themes/default/var.less +380 -11
  36. package/config/themes/eap/eap.css +578 -0
  37. package/config/themes/eap/eap.css.map +1 -0
  38. package/config/themes/eap/eap.less +676 -0
  39. package/config/themes/eap/var.less +683 -0
  40. package/config/themes/gold/gold.css +578 -0
  41. package/config/themes/gold/gold.css.map +1 -0
  42. package/config/themes/gold/gold.less +676 -0
  43. package/config/themes/gold/var.less +374 -5
  44. package/config/themes/index.js +20 -3
  45. package/config/themes/lime/lime.css +578 -0
  46. package/config/themes/lime/lime.css.map +1 -0
  47. package/config/themes/lime/lime.less +676 -0
  48. package/config/themes/lime/var.less +374 -5
  49. package/config/themes/orange/orange.css +343 -8
  50. package/config/themes/orange/orange.css.map +1 -1
  51. package/config/themes/orange/orange.less +356 -0
  52. package/config/themes/orange/var.less +375 -5
  53. package/config/themes/red/red.css +343 -8
  54. package/config/themes/red/red.css.map +1 -1
  55. package/config/themes/red/red.less +356 -0
  56. package/config/themes/red/var.less +374 -5
  57. package/config/themes/theme-atrovirens.js +563 -0
  58. package/config/themes/theme-blue.js +563 -0
  59. package/config/themes/theme-bw.js +567 -0
  60. package/config/themes/theme-bwt.js +564 -0
  61. package/config/themes/theme-cuiwei.js +564 -0
  62. package/config/themes/theme-danqing.js +567 -0
  63. package/config/themes/theme-deep.js +563 -0
  64. package/config/themes/theme-default.js +369 -59
  65. package/config/themes/theme-eap.js +563 -0
  66. package/config/themes/theme-gold.js +317 -7
  67. package/config/themes/theme-lime.js +317 -7
  68. package/config/themes/theme-orange.js +551 -28
  69. package/config/themes/theme-red.js +555 -33
  70. package/config/themes/theme-white.js +563 -0
  71. package/config/themes/white/var.less +683 -0
  72. package/config/themes/white/white.css +578 -0
  73. package/config/themes/white/white.css.map +1 -0
  74. package/config/themes/white/white.less +675 -0
  75. package/directives/module/print.js +1 -0
  76. package/directives/module/vue-print-nb/README.md +63 -0
  77. package/directives/module/vue-print-nb/print.js +94 -0
  78. package/directives/module/vue-print-nb/printarea.js +532 -0
  79. package/index.js +7 -1
  80. package/nstyles/common.less +197 -0
  81. package/nstyles/components/404.less +46 -0
  82. package/nstyles/components/button.less +34 -0
  83. package/nstyles/components/date-picker.less +37 -0
  84. package/nstyles/components/drawer.less +20 -0
  85. package/nstyles/components/dropdown.less +18 -0
  86. package/nstyles/components/excel-flow.less +72 -0
  87. package/nstyles/components/form.less +313 -0
  88. package/nstyles/components/index.less +23 -0
  89. package/nstyles/components/layout/collect.less +10 -0
  90. package/nstyles/components/layout/detail-view.less +107 -0
  91. package/nstyles/components/layout/full-screen.less +7 -0
  92. package/nstyles/components/layout/index.less +7 -0
  93. package/nstyles/components/layout/other-menu.less +142 -0
  94. package/nstyles/components/layout/page-view.less +101 -0
  95. package/nstyles/components/layout/sider-trigger.less +41 -0
  96. package/nstyles/components/layout/tags-nav.less +113 -0
  97. package/nstyles/components/modal.less +90 -0
  98. package/nstyles/components/n-button.less +131 -0
  99. package/nstyles/components/n-image-preview.less +131 -0
  100. package/nstyles/components/n-model/index.less +19 -0
  101. package/nstyles/components/n-model/report-index.less +43 -0
  102. package/nstyles/components/n-panel.less +41 -0
  103. package/nstyles/components/n-picker.less +37 -0
  104. package/nstyles/components/n-sign.less +17 -0
  105. package/nstyles/components/n-tooltip.less +10 -0
  106. package/nstyles/components/panel.less +31 -0
  107. package/nstyles/components/select.less +3 -0
  108. package/nstyles/components/sign.less +27 -0
  109. package/nstyles/components/table.less +315 -0
  110. package/nstyles/components/tree.less +159 -0
  111. package/nstyles/components/upload.less +164 -0
  112. package/nstyles/index.less +5 -0
  113. package/nstyles/reset.less +73 -0
  114. package/nstyles/third/ag.less +174 -0
  115. package/nstyles/third/icons/sort-desc.svg +1 -0
  116. package/nstyles/third/icons/sort-up.svg +1 -0
  117. package/nstyles/third/icons/sorting.svg +1 -0
  118. package/nstyles/third/index.less +11 -0
  119. package/nstyles/third/view-design.less +375 -0
  120. package/nstyles/variables/base.less +143 -0
  121. package/nstyles/variables/index.less +4 -0
  122. package/nstyles/variables/theme/default/button.less +7 -0
  123. package/nstyles/variables/theme/default/common.less +57 -0
  124. package/nstyles/variables/theme/default/index.less +7 -0
  125. package/nstyles/variables/theme/default/layout.less +40 -0
  126. package/nstyles/variables/theme/default/table.less +37 -0
  127. package/nstyles/variables/theme/default/tag.less +3 -0
  128. package/nstyles/variables/theme/default/upload.less +3 -0
  129. package/nstyles/variables/theme/index.less +13 -0
  130. package/nstyles/variables/theme/lsv/button.less +7 -0
  131. package/nstyles/variables/theme/lsv/common.less +39 -0
  132. package/nstyles/variables/theme/lsv/index.less +5 -0
  133. package/nstyles/variables/theme/lsv/layout.less +21 -0
  134. package/nstyles/variables/theme/lsv/table.less +20 -0
  135. package/nstyles/variables/theme/lsv/tag.less +3 -0
  136. package/nstyles/variables/theme/small/button.less +7 -0
  137. package/nstyles/variables/theme/small/common.less +39 -0
  138. package/nstyles/variables/theme/small/index.less +5 -0
  139. package/nstyles/variables/theme/small/layout.less +21 -0
  140. package/nstyles/variables/theme/small/table.less +17 -0
  141. package/nstyles/variables/theme/small/tag.less +3 -0
  142. package/package.json +28 -7
  143. package/plugin/index.js +12 -0
  144. package/plugin/module/date-format.js +30 -0
  145. package/plugin/module/loading.js +26 -0
  146. package/plugin/module/warn-handler.js +11 -0
  147. package/styles/image/inspur.png +0 -0
  148. package/styles/image/lan_navigator.png +0 -0
  149. package/styles/image/layout-header-bg-cuiwei.png +0 -0
  150. package/styles/image/lv_navigator.png +0 -0
  151. package/utils/ajax/content-type.js +30 -0
  152. package/utils/ajax/headers.js +11 -0
  153. package/utils/ajax/interceptors.js +12 -4
  154. package/utils/ajax/sseFetchUtil.js +118 -0
  155. package/utils/assist.js +155 -27
  156. package/utils/base64.js +126 -0
  157. package/utils/blob.js +47 -0
  158. package/utils/crypto/aes.js +23 -0
  159. package/utils/crypto/index.js +10 -0
  160. package/utils/crypto/rsa.js +23 -0
  161. package/utils/date.js +334 -305
  162. package/utils/dict/built-in-dict.js +20 -0
  163. package/utils/dict/index.js +191 -0
  164. package/utils/event.js +72 -0
  165. package/utils/excel.js +373 -241
  166. package/utils/file.js +19 -0
  167. package/utils/form/validate.js +29 -0
  168. package/utils/half-year.js +68 -0
  169. package/utils/index.js +37 -0
  170. package/utils/json.js +29 -0
  171. package/utils/lodop.js +5 -0
  172. package/utils/menu/index.js +292 -15
  173. package/utils/mime_type.js +67 -0
  174. package/utils/modelerUtil.js +4 -1
  175. package/utils/n/api.js +22 -0
  176. package/utils/n/date.js +57 -0
  177. package/utils/n/index.js +10 -0
  178. package/utils/n/is-type.js +176 -0
  179. package/utils/n/number.js +144 -0
  180. package/utils/n/permission-cache.js +11 -0
  181. package/utils/n/reuqest/axiosN.js +17 -0
  182. package/utils/n/reuqest/content-type.js +19 -0
  183. package/utils/n/reuqest/interceptors.js +95 -0
  184. package/utils/n/reuqest/url-params.js +12 -0
  185. package/utils/n/storage.js +51 -0
  186. package/utils/n/token.js +51 -0
  187. package/utils/n/user-cache.js +11 -0
  188. package/utils/n/user.js +34 -0
  189. package/utils/n/uuid.js +16 -0
  190. package/utils/n-generator-routers.js +208 -0
  191. package/utils/n-router.js +205 -0
  192. package/utils/n-theme.js +30 -0
  193. package/utils/number.js +72 -15
  194. package/utils/oss.js +57 -0
  195. package/utils/platform.js +807 -30
  196. package/utils/quarter.js +58 -0
  197. package/utils/storage.js +198 -0
  198. package/utils/style.js +24 -0
  199. package/utils/theme.js +98 -3
  200. package/utils/transfer-queue.js +7 -0
  201. package/utils/transform.js +205 -0
  202. package/utils/type.js +102 -0
  203. package/utils/util.js +795 -0
  204. package/utils/vForm.js +349 -0
  205. package/utils/validator.js +181 -0
  206. package/config/themes/gold/default.css +0 -243
  207. package/config/themes/gold/default.css.map +0 -1
  208. package/config/themes/gold/default.less +0 -320
  209. package/config/themes/lime/default.css +0 -243
  210. package/config/themes/lime/default.css.map +0 -1
  211. package/config/themes/lime/default.less +0 -320
package/utils/excel.js CHANGED
@@ -1,8 +1,9 @@
1
1
  /* eslint-disable */
2
- import XLSX from 'xlsx';
3
- import * as cpexcel from 'xlsx/dist/cpexcel.full.mjs';
2
+ import XLSX from '@e965/xlsx';
3
+ import * as cpexcel from '@e965/xlsx/dist/cpexcel.full.mjs';
4
4
  XLSX.set_cptable(cpexcel);
5
5
  import {deepCopy} from "./assist";
6
+ import XLSXStyle from 'xlsx-style'
6
7
 
7
8
  const titleRules = {
8
9
  '': '',
@@ -15,7 +16,228 @@ const typeRules = {
15
16
  'index': 'index',
16
17
  'select': 'select',
17
18
  'selection': 'selection',
18
- 'single-selection': 'single-selection'
19
+ 'single-selection': 'single-selection',
20
+ 'checkbox': 'checkbox',
21
+ 'radio': 'radio'
22
+ }
23
+
24
+ /**
25
+ * 过滤掉filterData中titleRules、typeRules相关的列
26
+ * @param filterData
27
+ * @param key 包含typeRules内容的属性名
28
+ * @param name 包含titleRules内容的属性名
29
+ * @returns {*}
30
+ */
31
+ function title_filter_base(filterData,key,name) {
32
+ for (var i = 0; i < filterData.length; i++) {
33
+ if ((filterData[i].hasOwnProperty(key) && filterData[i][key]
34
+ && filterData[i][key] === typeRules[filterData[i][key]])
35
+ || filterData[i][name] === titleRules[filterData[i][name]]) {
36
+ filterData.splice(i, 1)
37
+ i--
38
+ }
39
+ }
40
+ return filterData
41
+ }
42
+
43
+ function title_filter(data) {
44
+ let filterData = deepCopy(data);
45
+ return title_filter_base(filterData,'type','title')
46
+ }
47
+
48
+ function title_el_filter(data) {
49
+ let filterData = deepCopy(data);
50
+ return title_filter_base(filterData,'property','label')
51
+ }
52
+
53
+ /**
54
+ * 组织表格导出时需要的表头单元格内容
55
+ * @param treeData 列描述
56
+ * @param key 单元格显示内容对应列描述中的属性名
57
+ * @returns {*[][]}
58
+ */
59
+ function title_transform_base(treeData,key) {
60
+ // 找到树的最大深度
61
+ const maxDepth = findMaxDepth(treeData);
62
+
63
+ // 初始化结果数组,每一层都是一个空数组
64
+ const result = Array.from({ length: maxDepth }, () => []);
65
+
66
+ // 辅助函数,用于找到树的最大深度
67
+ function findMaxDepth(nodes) {
68
+ let maxDepth = 0;
69
+
70
+ function traverse(node, depth = 1) {
71
+ maxDepth = Math.max(maxDepth, depth);
72
+ if (node.children) {
73
+ node.children.forEach(child => traverse(child, depth + 1));
74
+ }
75
+ }
76
+
77
+ nodes.forEach(node => traverse(node));
78
+
79
+ return maxDepth;
80
+ }
81
+
82
+ // 辅助函数,用于创建并返回从根节点到当前节点的路径
83
+ function getPath(node, path = [], key) {
84
+ path.unshift(node[key]); // 将当前节点的标题添加到路径的开头
85
+ if (node.parent) {
86
+ return getPath(node.parent, path, key); // 递归调用,直到根节点
87
+ }
88
+ return path;
89
+ }
90
+
91
+ // 递归函数,用于遍历树的每个节点并收集标题
92
+ function traverseTree(node, depth = 0, parent = null, key) {
93
+ // 给节点添加 parent 属性,方便后续创建路径
94
+ node.parent = parent;
95
+
96
+ // 确保当前深度的结果数组已初始化
97
+ if (result.length <= depth) {
98
+ result.push([]);
99
+ }
100
+
101
+ // 获取从根节点到当前节点的路径
102
+ const path = getPath(node,[],key);
103
+
104
+ // 当前层级和子层级都增加当前节点
105
+ for (let i = depth; i < maxDepth; i++) {
106
+ result[i].push(node[key])
107
+ }
108
+ // 当前层级的父层级增加对应的父节点
109
+ for (let j = 0; j < depth; j++) {
110
+ result[j].push(path[j])
111
+ }
112
+
113
+
114
+ // 如果还有子节点,递归遍历子节点
115
+ if (node.children) {
116
+ for (let i = 0; i < maxDepth; i++) {
117
+ result[i].pop()
118
+ }
119
+ node.children.forEach(child => {
120
+ traverseTree(child, depth + 1, node, key)
121
+ });
122
+ }
123
+ }
124
+
125
+ // 遍历所有根节点并收集标题
126
+ treeData.forEach(rootNode => traverseTree(rootNode,0,null,key));
127
+
128
+ // 去除每个节点上的 parent 属性(如果需要)
129
+ function removeParentProps(nodes) {
130
+ nodes.forEach(node => {
131
+ delete node.parent;
132
+ if (node.children) {
133
+ removeParentProps(node.children);
134
+ }
135
+ });
136
+ }
137
+ removeParentProps(treeData); // 清理 treeData 中的 parent 属性(可选)
138
+
139
+ return result;
140
+ }
141
+
142
+ export const title_transform = (paramData) => {
143
+ let data = title_filter(paramData)
144
+ return title_transform_base(data,'title')
145
+ }
146
+ export const title_el_transform = (paramData) => {
147
+ let data = title_el_filter(paramData)
148
+ return title_transform_base(data,'label')
149
+ }
150
+
151
+ /**
152
+ * 表格导出时数据区域内容对应的属性名列表
153
+ * @param data 列描述
154
+ * @param key 表格导出时数据区域内容对应列描述中的属性名
155
+ * @returns {*[]}
156
+ */
157
+ export const key_transform_base = (data,key) => {
158
+ let result = []
159
+ function traverse(node,key) {
160
+ if (node.children) {
161
+ node.children.forEach(child => traverse(child,key));
162
+ }else{
163
+ result.push(node[key])
164
+ }
165
+ }
166
+
167
+ data.forEach(node => traverse(node,key));
168
+
169
+ return result;
170
+ }
171
+
172
+ export const key_transform = (paramData) => {
173
+ let data = title_filter(paramData)
174
+ // let data = paramData
175
+ return key_transform_base(data,'key')
176
+ }
177
+
178
+ export const key_el_transform = (paramData) => {
179
+ let data = title_el_filter(paramData)
180
+ // let data = paramData
181
+ return key_transform_base(data,'property')
182
+ }
183
+
184
+ export const key_vxe_transform = (paramData) => {
185
+ let data = title_filter(paramData)
186
+ // let data = paramData
187
+ return key_transform_base(data,'field')
188
+ }
189
+
190
+ /**
191
+ * 表格导出时,表头数据中存储的枚举信息汇总
192
+ * @param data 列描述
193
+ * @param key 表格数据内容对应列描述的key
194
+ * @returns {*[]}
195
+ */
196
+ export const enums_transform_base = (data,key) => {
197
+ let result = []
198
+ function traverse(node,key) {
199
+ if (node.children) {
200
+ node.children.forEach(child => traverse(child,key));
201
+ }else if (node.enums){
202
+ result.push({key:node[key],enums:node.enums})
203
+ }
204
+ }
205
+
206
+ data.forEach(node => traverse(node,key));
207
+ return result
208
+ }
209
+
210
+ export const enums_transform = (paramData) => {
211
+ let result = []
212
+ let data = title_filter(paramData)
213
+ // let data = paramData
214
+ return enums_transform_base(data,'key')
215
+ }
216
+
217
+ export const enums_el_transform = (paramData) => {
218
+ let result = []
219
+ let data = title_el_filter(paramData)
220
+ // let data = paramData
221
+ return enums_transform_base(data,'property')
222
+ }
223
+
224
+ export const enums_vxe_transform = (paramData) => {
225
+ let result = []
226
+ let data = title_filter(paramData)
227
+ // let data = paramData
228
+ return enums_transform_base(data,'field')
229
+ }
230
+
231
+
232
+ export const enums_to_value = (enums,jsonData)=>{
233
+ if(enums&&enums.length>0){
234
+ return jsonData.map(v => enums.map(e =>{
235
+ v[e.key] = e.enums[v[e.key]]
236
+ return v
237
+ })[0])
238
+ }else{
239
+ return jsonData
240
+ }
19
241
  }
20
242
 
21
243
  function auto_width(ws, data) {
@@ -44,30 +266,75 @@ function auto_width(ws, data) {
44
266
  ws['!cols'] = result;
45
267
  }
46
268
 
47
- function merge_title(ws, title) {
48
- let mergeData = []
49
- let flag = false
50
- let row = 1, col = 1
269
+ function merge_title(ws,title) {
270
+ let mergeData = [];
271
+
51
272
  for (let i = 0; i < title.length; i++) {
52
273
  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
274
+ let currentCellValue = title[i][j];
275
+ let merge = { s: { r: i, c: j }, e: { r: i, c: j } };
276
+
277
+ // Check horizontal direction for merges
278
+ while (
279
+ j + 1 < title[i].length &&
280
+ title[i][j + 1] === currentCellValue &&
281
+ !isCellMerged(mergeData, { r: i, c: j + 1 })
282
+ ) {
283
+ merge.e.c = j + 1;
284
+ j++;
59
285
  }
60
- while ((i + col) < title.length && title[i][j] === title[i + col][j]) {
61
- merge.e.r = i + col
62
- col++
63
- flag = true
286
+
287
+ // Check vertical direction for merges
288
+ let originalRow = i;
289
+ while (
290
+ i + 1 < title.length &&
291
+ title[i + 1][j] === currentCellValue &&
292
+ !isCellMerged(mergeData, { r: i + 1, c: j })
293
+ ) {
294
+ i++;
295
+
296
+ // Update the starting row if it's the first iteration of the vertical loop
297
+ // if (i === originalRow + 1) {
298
+ // merge.s.r = i;
299
+ // }
300
+
301
+ // Expand the end row
302
+ merge.e.r = i;
64
303
  }
65
- if (flag) {
66
- mergeData.push(merge)
304
+
305
+ // Add the merge object to the array if it's not empty
306
+ if (merge.e.c > merge.s.c || merge.e.r > merge.s.r) {
307
+ mergeData.push(merge);
308
+
309
+ // Adjust the outer loop variables since we might have incremented i inside the loop
310
+ i = originalRow;
311
+ j = merge.e.c;
67
312
  }
68
313
  }
69
314
  }
70
- ws['!merges'] = ws['!merges'].concat(mergeData)
315
+
316
+ // return mergeData
317
+ // Add the merge ranges to the worksheet
318
+ if (ws['!merges']) {
319
+ ws['!merges'] = ws['!merges'].concat(mergeData);
320
+ } else {
321
+ ws['!merges'] = mergeData;
322
+ }
323
+
324
+ // Helper function to check if a cell is already part of a merge range
325
+ function isCellMerged(mergeData, cell) {
326
+ for (let merge of mergeData) {
327
+ if (
328
+ cell.r >= merge.s.r &&
329
+ cell.r <= merge.e.r &&
330
+ cell.c >= merge.s.c &&
331
+ cell.c <= merge.e.c
332
+ ) {
333
+ return true;
334
+ }
335
+ }
336
+ return false;
337
+ }
71
338
  }
72
339
 
73
340
  function merge_content(ws, tableData, spanColumnKeys, titleLen) {
@@ -127,7 +394,7 @@ function add_style(ws, title) {
127
394
  Object.keys(ws).forEach(item => {
128
395
  if (/^[A-Z]+\d+$/.test(item)) {
129
396
  var alphabet = item.replace(/[^a-z]+/ig, "");
130
- if (colhash.indexOf(alphabet) == -1) {
397
+ if (colhash.indexOf(alphabet) === -1) {
131
398
  colhash.push(alphabet)
132
399
  for (var i = 1; i <= rowSum; i++) {
133
400
  if (!ws.hasOwnProperty(alphabet + i)) {
@@ -141,7 +408,7 @@ function add_style(ws, title) {
141
408
  }
142
409
  })
143
410
 
144
- let titlestyle = {
411
+ let titleStyle = {
145
412
  border: {
146
413
  left: {style: 'thin', color: {rgb: "000000"}},
147
414
  top: {style: 'thin', color: {rgb: "000000"}},
@@ -177,14 +444,14 @@ function add_style(ws, title) {
177
444
  */
178
445
  var reg = new RegExp("^[A-Z]+[1 -" + title.length + "]$", "gim");
179
446
  if (reg.test(item)) {
180
- ws[item].s = titlestyle
447
+ ws[item].s = titleStyle
181
448
  } else
182
449
 
183
- /**
184
- * 表体样式: 垂直居中,边框
185
- */
450
+ /**
451
+ * 表体样式: 垂直居中,边框
452
+ */
186
453
  if (/^[A-Z]+\d+$/.test(item)) {
187
- if (parseInt(item.replace(/[^0-9]/ig, "")) % 2 == 0) {
454
+ if (parseInt(item.replace(/[^0-9]/ig, "")) % 2 === 0) {
188
455
  ws[item].s = bodyStyle
189
456
  } else {
190
457
  ws[item].s = bodyPairStyle
@@ -200,210 +467,6 @@ function add_style(ws, title) {
200
467
 
201
468
  }
202
469
 
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
470
  export const export_table_to_excel = (id, filename) => {
408
471
  const table = document.getElementById(id);
409
472
  const wb = XLSX.utils.table_to_book(table);
@@ -417,6 +480,11 @@ export const export_table_to_excel = (id, filename) => {
417
480
  // XLSX.writeFile(wb, filename);
418
481
  }
419
482
 
483
+ function json_to_array(key, jsonData) {
484
+ return jsonData.map(v => key.map(j => {
485
+ return v[j]
486
+ }));
487
+ }
420
488
  export const export_json_to_excel = ({data, key, title, filename, spanColumns, autoWidth, format}) => {
421
489
  const wb = XLSX.utils.book_new();
422
490
  const ws = XLSX.utils.json_to_sheet(data, {header: key, skipHeader: false});
@@ -428,14 +496,13 @@ export const export_json_to_excel = ({data, key, title, filename, spanColumns, a
428
496
  auto_width(ws, arr);
429
497
  }
430
498
  merge_content(ws, data, spanColumns)
431
- XLSX.utils.book_append_sheet(wb, ws, filename);
499
+ XLSX.utils.book_append_sheet(wb, ws, '');
432
500
  XLSX.writeFile(wb, filename + '.' + format);
433
501
  }
434
502
 
435
503
  export const export_array_to_excel = ({key, data, title, filename, spanColumns, autoWidth, format}) => {
436
504
  const wb = XLSX.utils.book_new();
437
505
  const arr = json_to_array(key, data);
438
- console.log(arr)
439
506
  for (var i = title.length; i > 0; i--) {
440
507
  arr.unshift(title[i - 1])
441
508
  }
@@ -450,23 +517,69 @@ export const export_array_to_excel = ({key, data, title, filename, spanColumns,
450
517
  }
451
518
  merge_content(ws, data, spanColumns, title.length)
452
519
  add_style(ws, title)
453
- XLSX.utils.book_append_sheet(wb, ws, filename);
454
- XLSX.writeFileXLSX(wb, filename + '.' + "xlsx");
520
+ XLSX.utils.book_append_sheet(wb, ws, '');
521
+ if(format === 'csv'){
522
+ XLSX.writeFile(wb, filename + '.' + format,{
523
+ // 要生成的文件类型
524
+ bookType: "csv",
525
+ // // 是否生成Shared String Table,官方解释是,如果开启生成速度会下降,但在低版本IOS设备上有更好的兼容性
526
+ bookSST: false});
527
+ }else{
528
+ // XLSX.writeFileXLSX(wb, filename + '.' + format);
529
+ const workbookBlob = workbook2blob(wb);
530
+ saveAs(workbookBlob, filename + '.' + format);
531
+ }
455
532
  }
456
533
 
534
+ /**
535
+ * 将一个字符串 s 转换为一个 ArrayBuffer 对象(如果可用)或一个普通数组(如果 ArrayBuffer 不可用)
536
+ * @param s
537
+ * @returns {any[]|ArrayBuffer}
538
+ */
457
539
  function s2ab(s) {
458
540
  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;
541
+ let buf = new ArrayBuffer(s.length);
542
+ let view = new Uint8Array(buf);
543
+ for (let i = 0; i !== s.length; ++i) view[i] = s.charCodeAt(i) & 0xFF;
462
544
  return buf;
463
545
  } else {
464
- var buf = new Array(s.length);
465
- for (var i = 0; i != s.length; ++i) buf[i] = s.charCodeAt(i) & 0xFF;
546
+ let buf = new Array(s.length);
547
+ for (let i = 0; i !== s.length; ++i) buf[i] = s.charCodeAt(i) & 0xFF;
466
548
  return buf;
467
549
  }
468
550
  }
469
551
 
552
+ /**
553
+ * 将一个 ArrayBuffer 或 TypedArray 对象转换为一个字符串
554
+ * @param data
555
+ * @returns {string}
556
+ */
557
+ function ab2s(data) {
558
+ let o = ''
559
+ let l = 0
560
+ const w = 10240
561
+ for (; l < data.byteLength / w; ++l) o += String.fromCharCode.apply(null, new Uint8Array(data.slice(l * w, l * w + w)))
562
+ o += String.fromCharCode.apply(null, new Uint8Array(data.slice(l * w)))
563
+ return o
564
+ }
565
+
566
+ // 将workbook装化成blob对象
567
+ function workbook2blob(workbook) {
568
+ // 生成excel的配置项
569
+ const wopts = {
570
+ // 要生成的文件类型
571
+ bookType: "xlsx",
572
+ // // 是否生成Shared String Table,官方解释是,如果开启生成速度会下降,但在低版本IOS设备上有更好的兼容性
573
+ bookSST: false,
574
+ type: "binary"
575
+ };
576
+ let wbout = XLSXStyle.write(workbook, wopts);
577
+ let blob = new Blob([s2ab(wbout)], {
578
+ type: "application/octet-stream"
579
+ });
580
+ return blob;
581
+ }
582
+
470
583
  export const saveAs = function(blob, fileName) {
471
584
  // IE10+
472
585
  if (window.navigator.msSaveOrOpenBlob) {
@@ -494,9 +607,26 @@ export const saveAs = function(blob, fileName) {
494
607
  }
495
608
  }
496
609
 
610
+ // get head from excel file,return array
611
+ function get_header_row(sheet) {
612
+ const headers = []
613
+ const range = XLSX.utils.decode_range(sheet['!ref'])
614
+ let C
615
+ const R = range.s.r
616
+ /* start in the first row */
617
+ for (C = range.s.c; C <= range.e.c; ++C) { /* walk every column in the range */
618
+ var cell = sheet[XLSX.utils.encode_cell({c: C, r: R})]
619
+ /* find the cell in the first row */
620
+ var hdr = 'UNKNOWN ' + C // <-- replace with your desired default
621
+ if (cell && cell.t) hdr = XLSX.utils.format_cell(cell)
622
+ headers.push(hdr)
623
+ }
624
+ return headers
625
+ }
626
+
497
627
  export const read = (data, type) => {
498
628
  /* if type == 'base64' must fix data first */
499
- // const fixedData = fixdata(data)
629
+ // const fixedData = ab2s(data)
500
630
  // const workbook = XLSX.read(btoa(fixedData), { type: 'base64' })
501
631
  const workbook = XLSX.read(data, {type: type});
502
632
  const firstSheetName = workbook.SheetNames[0];
@@ -512,10 +642,12 @@ export default {
512
642
  export_json_to_excel,
513
643
  key_transform,
514
644
  key_el_transform,
645
+ key_vxe_transform,
515
646
  title_transform,
516
647
  title_el_transform,
517
648
  enums_transform,
518
649
  enums_el_transform,
650
+ enums_vxe_transform,
519
651
  enums_to_value,
520
652
  read,
521
653
  s2ab,