adtec-core-package 1.2.2 → 1.2.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 (146) hide show
  1. package/.editorconfig +6 -6
  2. package/.prettierrc.json +7 -7
  3. package/.vscode/extensions.json +8 -8
  4. package/README.md +39 -39
  5. package/adtec-core-package/adtec-core-package.css +1 -0
  6. package/adtec-core-package/adtec-core-package.js +41605 -0
  7. package/adtec-core-package/adtec-core-package.umd.cjs +79 -0
  8. package/adtec-core-package/favicon.ico +0 -0
  9. package/env.d.ts +1 -1
  10. package/eslint.config.js +56 -56
  11. package/index.html +13 -13
  12. package/package.json +1 -1
  13. package/src/App.vue +9 -9
  14. package/src/assets/base.css +86 -86
  15. package/src/assets/logo.svg +1 -1
  16. package/src/assets/main.css +35 -35
  17. package/src/assets/style/transition.scss +49 -49
  18. package/src/components/Table/ElTableColumnEdit.vue +1 -1
  19. package/src/components/icon/ElIcons.vue +38 -38
  20. package/src/css/elementUI/affix.scss +7 -7
  21. package/src/css/elementUI/alert.scss +115 -115
  22. package/src/css/elementUI/anchor-link.scss +41 -41
  23. package/src/css/elementUI/anchor.scss +88 -88
  24. package/src/css/elementUI/aside.scss +8 -8
  25. package/src/css/elementUI/avatar.scss +55 -55
  26. package/src/css/elementUI/backtop.scss +29 -29
  27. package/src/css/elementUI/badge.scss +58 -58
  28. package/src/css/elementUI/base.scss +3 -3
  29. package/src/css/elementUI/breadcrumb.scss +62 -62
  30. package/src/css/elementUI/button-group.scss +80 -80
  31. package/src/css/elementUI/button.scss +304 -304
  32. package/src/css/elementUI/calendar.scss +80 -80
  33. package/src/css/elementUI/card.scss +45 -45
  34. package/src/css/elementUI/carousel-item.scss +58 -58
  35. package/src/css/elementUI/carousel.scss +188 -188
  36. package/src/css/elementUI/cascader-panel.scss +138 -138
  37. package/src/css/elementUI/cascader.scss +230 -230
  38. package/src/css/elementUI/check-tag.scss +60 -60
  39. package/src/css/elementUI/checkbox-button.scss +140 -140
  40. package/src/css/elementUI/checkbox-group.scss +7 -7
  41. package/src/css/elementUI/checkbox.scss +298 -298
  42. package/src/css/elementUI/col.scss +48 -48
  43. package/src/css/elementUI/collapse.scss +70 -70
  44. package/src/css/elementUI/color/index.scss +20 -20
  45. package/src/css/elementUI/color-picker.scss +392 -392
  46. package/src/css/elementUI/common/popup.scss +47 -47
  47. package/src/css/elementUI/common/transition.scss +122 -122
  48. package/src/css/elementUI/container.scss +14 -14
  49. package/src/css/elementUI/dark/css-vars.scss +39 -39
  50. package/src/css/elementUI/dark/var.scss +222 -222
  51. package/src/css/elementUI/date-picker/date-picker.scss +110 -110
  52. package/src/css/elementUI/date-picker/date-range-picker.scss +113 -113
  53. package/src/css/elementUI/date-picker/date-table.scss +158 -158
  54. package/src/css/elementUI/date-picker/month-table.scss +112 -112
  55. package/src/css/elementUI/date-picker/picker-panel.scss +131 -131
  56. package/src/css/elementUI/date-picker/time-picker.scss +90 -90
  57. package/src/css/elementUI/date-picker/time-range-picker.scss +33 -33
  58. package/src/css/elementUI/date-picker/time-spinner.scss +111 -111
  59. package/src/css/elementUI/date-picker/year-table.scss +108 -108
  60. package/src/css/elementUI/date-picker.scss +9 -9
  61. package/src/css/elementUI/descriptions-item.scss +73 -73
  62. package/src/css/elementUI/dialog.scss +199 -199
  63. package/src/css/elementUI/display.scss +12 -12
  64. package/src/css/elementUI/divider.scss +48 -48
  65. package/src/css/elementUI/dropdown.scss +208 -208
  66. package/src/css/elementUI/empty.scss +49 -49
  67. package/src/css/elementUI/footer.scss +12 -12
  68. package/src/css/elementUI/form.scss +243 -243
  69. package/src/css/elementUI/header.scss +12 -12
  70. package/src/css/elementUI/icon.scss +45 -45
  71. package/src/css/elementUI/image-viewer.scss +139 -139
  72. package/src/css/elementUI/image.scss +49 -49
  73. package/src/css/elementUI/index.scss +110 -110
  74. package/src/css/elementUI/input-number.scss +178 -178
  75. package/src/css/elementUI/input.scss +478 -478
  76. package/src/css/elementUI/link.scss +90 -90
  77. package/src/css/elementUI/loading.scss +104 -104
  78. package/src/css/elementUI/main.scss +14 -14
  79. package/src/css/elementUI/mention.scss +88 -88
  80. package/src/css/elementUI/menu.scss +339 -339
  81. package/src/css/elementUI/message-box.scss +213 -213
  82. package/src/css/elementUI/message.scss +98 -98
  83. package/src/css/elementUI/mixins/_button.scss +165 -165
  84. package/src/css/elementUI/mixins/_col.scss +33 -33
  85. package/src/css/elementUI/mixins/_var.scss +67 -67
  86. package/src/css/elementUI/mixins/config.scss +5 -5
  87. package/src/css/elementUI/mixins/function.scss +88 -88
  88. package/src/css/elementUI/mixins/mixins.scss +237 -237
  89. package/src/css/elementUI/mixins/utils.scss +39 -39
  90. package/src/css/elementUI/notification.scss +104 -104
  91. package/src/css/elementUI/option-group.scss +33 -33
  92. package/src/css/elementUI/option.scss +71 -71
  93. package/src/css/elementUI/overlay.scss +17 -17
  94. package/src/css/elementUI/page-header.scss +60 -60
  95. package/src/css/elementUI/pagination.scss +238 -238
  96. package/src/css/elementUI/popconfirm.scss +16 -16
  97. package/src/css/elementUI/popover.scss +61 -61
  98. package/src/css/elementUI/popper.scss +106 -106
  99. package/src/css/elementUI/progress.scss +179 -179
  100. package/src/css/elementUI/radio-button.scss +169 -169
  101. package/src/css/elementUI/radio-group.scss +9 -9
  102. package/src/css/elementUI/radio.scss +215 -215
  103. package/src/css/elementUI/rate.scss +108 -108
  104. package/src/css/elementUI/reset.scss +98 -98
  105. package/src/css/elementUI/result.scss +57 -57
  106. package/src/css/elementUI/row.scss +35 -35
  107. package/src/css/elementUI/scrollbar.scss +97 -97
  108. package/src/css/elementUI/segmented.scss +183 -183
  109. package/src/css/elementUI/select-dropdown-v2.scss +1 -1
  110. package/src/css/elementUI/select-dropdown.scss +57 -57
  111. package/src/css/elementUI/select-v2.scss +4 -4
  112. package/src/css/elementUI/select.scss +253 -253
  113. package/src/css/elementUI/skeleton-item.scss +83 -83
  114. package/src/css/elementUI/skeleton.scss +44 -44
  115. package/src/css/elementUI/slider.scss +212 -212
  116. package/src/css/elementUI/space.scss +20 -20
  117. package/src/css/elementUI/spinner.scss +43 -43
  118. package/src/css/elementUI/statistic.scss +35 -35
  119. package/src/css/elementUI/step.scss +316 -316
  120. package/src/css/elementUI/steps.scss +21 -21
  121. package/src/css/elementUI/switch.scss +300 -300
  122. package/src/css/elementUI/table-column.scss +98 -98
  123. package/src/css/elementUI/table-v2.scss +236 -236
  124. package/src/css/elementUI/tag.scss +181 -181
  125. package/src/css/elementUI/text.scss +51 -51
  126. package/src/css/elementUI/time-picker.scss +5 -5
  127. package/src/css/elementUI/time-select.scss +37 -37
  128. package/src/css/elementUI/timeline-item.scss +84 -84
  129. package/src/css/elementUI/timeline.scss +46 -46
  130. package/src/css/elementUI/tooltip-v2.scss +95 -95
  131. package/src/css/elementUI/tour.scss +187 -187
  132. package/src/css/elementUI/transfer.scss +203 -203
  133. package/src/css/elementUI/tree-select.scss +41 -41
  134. package/src/css/elementUI/tree.scss +134 -134
  135. package/src/css/elementUI/upload.scss +654 -654
  136. package/src/css/elementUI/var.scss +87 -87
  137. package/src/css/elementUI/virtual-list.scss +40 -40
  138. package/src/interface/enum/FlexEnum.ts +85 -85
  139. package/src/main.ts +14 -14
  140. package/src/router/index.ts +23 -23
  141. package/src/utils/FrameworkUtils.ts +335 -335
  142. package/src/utils/encrypt.ts +10 -10
  143. package/tsconfig.app.json +12 -12
  144. package/tsconfig.json +11 -11
  145. package/tsconfig.node.json +18 -18
  146. package/vite.config.ts +38 -38
@@ -1,335 +1,335 @@
1
- import elTableTool from '../components/Table/ElTableTool.ts'
2
- import { ElMessage } from 'element-plus'
3
- import * as XLSX from 'xlsx-js-style'
4
- import { Linq } from 'linq-to-ts'
5
- /**
6
- * Create by丁盼
7
- * 说明: FrameworkUtils
8
- * 创建时间: 2025/3/12 09:24
9
- * 修改时间: 2025/3/12 09:24
10
- */
11
- export default {
12
- /**
13
- * 校验表格数据是否为空
14
- * @param table 表格对象
15
- * @param rules 校验规则
16
- */
17
- validateTableData(table: any, rules: any): Boolean {
18
- return elTableTool.validateTableData(table, rules)
19
- },
20
- /**
21
- * 获取系统分页数
22
- */
23
- getPageSize(): number {
24
- try {
25
- const systemConfig = JSON.parse(localStorage.getItem('systemConfig') + '')
26
- if (systemConfig && systemConfig['pageSize'] + '') {
27
- return Number(systemConfig['pageSize'] + '')
28
- } else {
29
- return 50
30
- }
31
- } catch {
32
- return 50
33
- }
34
- },
35
- /**
36
- * 提示错误信息
37
- * @param err
38
- */
39
- messageError(err: any) {
40
- if (err.code) {
41
- if (err.code === '500') {
42
- ElMessage.error('系统错误,请与管理员联系!')
43
- } else if (
44
- err.code === '10402' ||
45
- err.code === '10403' ||
46
- err.code === '10404' ||
47
- err.code === '10500' ||
48
- err.code === '10505' ||
49
- err.code === '10506' ||
50
- err.code === '10507'
51
- ) {
52
- ElMessage.error(err.msg)
53
- } else if (err.code === '10504') {
54
- ElMessage.warning(err.msg)
55
- }
56
- } else {
57
- ElMessage.error(err.message)
58
- }
59
- },
60
- /**
61
- * 导出excel
62
- * @param title 标题
63
- * @param fileName 文件名
64
- * @param sheetName 工作表名
65
- * @param columns 表头,参考ElTable列属性{property:'',width:'',label:'',colSpan:'',colSpan:'',level:'',children:[]}
66
- * @param data 数据
67
- * @param rowMerges 行合并配置
68
- * [{
69
- * conditions: ['groupNo'],//条件
70
- * fields: ['groupNo', 'seMeetingSampleName'],//需要合并的列
71
- * }]
72
- * @param colMerges 列合并配置
73
- * [
74
- * {
75
- * conditions: ['groupNo', 'seMeetingSampleName']//条件
76
- * },
77
- * ]
78
- * @param customHeaderCallback 自定义标题回调函数
79
- * rows: any[], 当前行对象
80
- * dataColumns: any[],列对象
81
- * merges: any[] 合并对象
82
- * @param customFooterCallback 自定义页脚回调函数
83
- * @constructor
84
- */
85
- exportExcel(
86
- title: string,
87
- fileName: string,
88
- sheetName: string,
89
- columns: any,
90
- data: any,
91
- rowMerges?: any[],
92
- colMerges?: any[],
93
- customHeaderCallback?: any,
94
- customFooterCallback?: any,
95
- ) {
96
- const cl = columns
97
- let rows: any[] = []
98
- const cols: any[] = []
99
- const dataColumns: any[] = []
100
- const merges: any = []
101
- this.generateColumns(cl, dataColumns)
102
- //设置表头
103
- if (customHeaderCallback) {
104
- customHeaderCallback(rows, dataColumns, merges)
105
- } else {
106
- rows.push([
107
- {
108
- v: title,
109
- t: 's',
110
- s: {
111
- font: { bold: true },
112
- alignment: {
113
- vertical: 'center', // 垂直居中
114
- horizontal: 'center', // 水平居中
115
- },
116
- // border 边框属性
117
- border: {
118
- top: { style: 'thin' },
119
- bottom: { style: 'thin' },
120
- left: { style: 'thin' },
121
- right: { style: 'thin' },
122
- },
123
- },
124
- },
125
- ])
126
- //表头合并
127
- merges.push({
128
- s: { c: 0, r: 0 },
129
- e: { c: dataColumns.length - 1, r: 0 },
130
- })
131
- }
132
- //@ts-ignore
133
- this.generateHeader(cl, rows, 0, merges)
134
- //设置缺失单元格对象
135
- let max = 0
136
- rows.forEach((r: any) => {
137
- if (max < r.length) {
138
- max = r.length
139
- }
140
- })
141
- const rowsS = [{ hpx: 30 }]
142
- rows.forEach((r: any, index: number) => {
143
- if (index > 0) {
144
- rowsS.push({ hpx: 20 })
145
- }
146
- for (let i = 0; i < max; i++) {
147
- if (!r[i]) {
148
- r[i] = {
149
- v: '',
150
- t: 's',
151
- s: {
152
- font: { bold: true },
153
- alignment: {
154
- vertical: 'center', // 垂直居中
155
- horizontal: 'center', // 水平居中
156
- },
157
- // border 边框属性
158
- border: {
159
- top: { style: 'thin' },
160
- bottom: { style: 'thin' },
161
- left: { style: 'thin' },
162
- right: { style: 'thin' },
163
- },
164
- },
165
- }
166
- }
167
- }
168
- })
169
- const data1 = JSON.parse(JSON.stringify(data))
170
- data1.forEach((r: any, index: any) => {
171
- r._orderNum = index + rows.length
172
- })
173
- //col单元格合并
174
- if (colMerges) {
175
- colMerges.forEach((m: any) => {
176
- data1.forEach((r: any) => {
177
- const set = new Set()
178
- m.conditions.forEach((c: any) => {
179
- set.add(r[c])
180
- })
181
- if (set.size === 1) {
182
- const sIndes = dataColumns.indexOf(
183
- dataColumns.find((c) => c.property === m.conditions[0]),
184
- )
185
- const eIndes = dataColumns.indexOf(
186
- dataColumns.find((c) => c.property === m.conditions[m.conditions.length - 1]),
187
- )
188
- merges.push({
189
- s: { c: sIndes, r: r._orderNum },
190
- e: { c: eIndes, r: r._orderNum },
191
- })
192
- }
193
- })
194
- })
195
- }
196
- //row单元格合并
197
- if (rowMerges) {
198
- rowMerges.forEach((m: any) => {
199
- const groupList = new Linq(data1).groupBy((r: any) => {
200
- const obj: any = {}
201
- m.conditions.forEach((c: any) => {
202
- obj[c] = r[c]
203
- })
204
- return obj
205
- })
206
- //@ts-ignore
207
- groupList.forEach((c: any) => {
208
- m.fields.forEach((m1: any) => {
209
- const cIndex = dataColumns.indexOf(dataColumns.find((c) => c.property === m1))
210
- let minOrderNum = 0
211
- let maxOrderNum = 0
212
- minOrderNum = new Linq(c.elements).min((c: any) => c._orderNum)
213
- maxOrderNum = new Linq(c.elements).max((c: any) => c._orderNum)
214
- merges.push({
215
- s: { c: cIndex, r: minOrderNum },
216
- e: { c: cIndex, r: maxOrderNum },
217
- })
218
- })
219
- })
220
- })
221
- }
222
- data1?.forEach((r: any) => {
223
- const row: any = []
224
- dataColumns.forEach((c) => {
225
- row.push({
226
- v: r[c.property] ? r[c.property] : '',
227
- t: 's',
228
- s: {
229
- alignment: {
230
- vertical: 'center', // 垂直居中
231
- horizontal: 'center', // 水平居中
232
- },
233
- // border 边框属性
234
- border: {
235
- top: { style: 'thin' },
236
- bottom: { style: 'thin' },
237
- left: { style: 'thin' },
238
- right: { style: 'thin' },
239
- },
240
- },
241
- })
242
- })
243
- rows.push(row)
244
- })
245
- //设置行高
246
- rows.forEach((r: any, index: number) => {
247
- if (index > 0) {
248
- rowsS.push({ hpx: 20 })
249
- }
250
- })
251
- //设置列宽
252
- dataColumns.forEach((c) => {
253
- cols.push({ wpx: c.width })
254
- })
255
- if (customFooterCallback) {
256
- customFooterCallback(rows, dataColumns, merges)
257
- }
258
- const wb = XLSX.utils.book_new()
259
- const ws = XLSX.utils.aoa_to_sheet(rows)
260
- ws['!cols'] = cols
261
- ws['!merges'] = merges
262
- ws['!rows'] = rowsS
263
- XLSX.utils.book_append_sheet(wb, ws, sheetName)
264
- // STEP 4: Write Excel file to browser
265
- XLSX.writeFile(wb, fileName+'.xlsx')
266
- },
267
- generateHeader(
268
- columns: any[],
269
- rows: any[],
270
- columnIndex: number,
271
- merges: any,
272
- ){
273
- //@ts-ignore
274
- columns.forEach((c: any) => {
275
- let row: any = []
276
- if (rows[c.level]) {
277
- row = rows[c.level]
278
- } else {
279
- row = []
280
- rows.push(row)
281
- }
282
- row[columnIndex] = {
283
- v: c.label,
284
- t: 's',
285
- s: {
286
- font: { bold: true },
287
- alignment: {
288
- vertical: 'center', // 垂直居中
289
- horizontal: 'center', // 水平居中
290
- },
291
- // border 边框属性
292
- border: {
293
- top: { style: 'thin' },
294
- bottom: { style: 'thin' },
295
- left: { style: 'thin' },
296
- right: { style: 'thin' },
297
- },
298
- },
299
- }
300
- if (c.children) {
301
- merges.push({
302
- s: { c: columnIndex, r: c.level },
303
- e: { c: columnIndex + c.colSpan - 1, r: c.level },
304
- })
305
- this.generateHeader(c.children, rows, columnIndex, merges)
306
- } else {
307
- if (c.rowSpan > 1) {
308
- merges.push({
309
- s: { c: columnIndex, r: c.level },
310
- e: { c: columnIndex, r: c.level + c.rowSpan - 1 },
311
- })
312
- }
313
- }
314
- columnIndex = columnIndex + c.colSpan
315
- })
316
- },
317
- generateColumns(columns: any[], dataColumns: any[]){
318
- //@ts-ignore
319
- columns.forEach((c: any) => {
320
- if (c.children) {
321
- this.generateColumns(c.children, dataColumns)
322
- } else {
323
- dataColumns.push({ property: c.property, width: c.width ? c.width : c.minWidth })
324
- }
325
- })
326
- }
327
- // /**
328
- // * 判断是否有操作权限
329
- // * @param operCode
330
- // * @constructor
331
- // */
332
- // IsOperationAuth(operCode:string): Boolean {
333
- // return permission.IsOperationAuth(operCode)
334
- // }
335
- }
1
+ import elTableTool from '../components/Table/ElTableTool.ts'
2
+ import { ElMessage } from 'element-plus'
3
+ import * as XLSX from 'xlsx-js-style'
4
+ import { Linq } from 'linq-to-ts'
5
+ /**
6
+ * Create by丁盼
7
+ * 说明: FrameworkUtils
8
+ * 创建时间: 2025/3/12 09:24
9
+ * 修改时间: 2025/3/12 09:24
10
+ */
11
+ export default {
12
+ /**
13
+ * 校验表格数据是否为空
14
+ * @param table 表格对象
15
+ * @param rules 校验规则
16
+ */
17
+ validateTableData(table: any, rules: any): Boolean {
18
+ return elTableTool.validateTableData(table, rules)
19
+ },
20
+ /**
21
+ * 获取系统分页数
22
+ */
23
+ getPageSize(): number {
24
+ try {
25
+ const systemConfig = JSON.parse(localStorage.getItem('systemConfig') + '')
26
+ if (systemConfig && systemConfig['pageSize'] + '') {
27
+ return Number(systemConfig['pageSize'] + '')
28
+ } else {
29
+ return 50
30
+ }
31
+ } catch {
32
+ return 50
33
+ }
34
+ },
35
+ /**
36
+ * 提示错误信息
37
+ * @param err
38
+ */
39
+ messageError(err: any) {
40
+ if (err.code) {
41
+ if (err.code === '500') {
42
+ ElMessage.error('系统错误,请与管理员联系!')
43
+ } else if (
44
+ err.code === '10402' ||
45
+ err.code === '10403' ||
46
+ err.code === '10404' ||
47
+ err.code === '10500' ||
48
+ err.code === '10505' ||
49
+ err.code === '10506' ||
50
+ err.code === '10507'
51
+ ) {
52
+ ElMessage.error(err.msg)
53
+ } else if (err.code === '10504') {
54
+ ElMessage.warning(err.msg)
55
+ }
56
+ } else {
57
+ ElMessage.error(err.message)
58
+ }
59
+ },
60
+ /**
61
+ * 导出excel
62
+ * @param title 标题
63
+ * @param fileName 文件名
64
+ * @param sheetName 工作表名
65
+ * @param columns 表头,参考ElTable列属性{property:'',width:'',label:'',colSpan:'',colSpan:'',level:'',children:[]}
66
+ * @param data 数据
67
+ * @param rowMerges 行合并配置
68
+ * [{
69
+ * conditions: ['groupNo'],//条件
70
+ * fields: ['groupNo', 'seMeetingSampleName'],//需要合并的列
71
+ * }]
72
+ * @param colMerges 列合并配置
73
+ * [
74
+ * {
75
+ * conditions: ['groupNo', 'seMeetingSampleName']//条件
76
+ * },
77
+ * ]
78
+ * @param customHeaderCallback 自定义标题回调函数
79
+ * rows: any[], 当前行对象
80
+ * dataColumns: any[],列对象
81
+ * merges: any[] 合并对象
82
+ * @param customFooterCallback 自定义页脚回调函数
83
+ * @constructor
84
+ */
85
+ exportExcel(
86
+ title: string,
87
+ fileName: string,
88
+ sheetName: string,
89
+ columns: any,
90
+ data: any,
91
+ rowMerges?: any[],
92
+ colMerges?: any[],
93
+ customHeaderCallback?: any,
94
+ customFooterCallback?: any,
95
+ ) {
96
+ const cl = columns
97
+ let rows: any[] = []
98
+ const cols: any[] = []
99
+ const dataColumns: any[] = []
100
+ const merges: any = []
101
+ this.generateColumns(cl, dataColumns)
102
+ //设置表头
103
+ if (customHeaderCallback) {
104
+ customHeaderCallback(rows, dataColumns, merges)
105
+ } else {
106
+ rows.push([
107
+ {
108
+ v: title,
109
+ t: 's',
110
+ s: {
111
+ font: { bold: true },
112
+ alignment: {
113
+ vertical: 'center', // 垂直居中
114
+ horizontal: 'center', // 水平居中
115
+ },
116
+ // border 边框属性
117
+ border: {
118
+ top: { style: 'thin' },
119
+ bottom: { style: 'thin' },
120
+ left: { style: 'thin' },
121
+ right: { style: 'thin' },
122
+ },
123
+ },
124
+ },
125
+ ])
126
+ //表头合并
127
+ merges.push({
128
+ s: { c: 0, r: 0 },
129
+ e: { c: dataColumns.length - 1, r: 0 },
130
+ })
131
+ }
132
+ //@ts-ignore
133
+ this.generateHeader(cl, rows, 0, merges)
134
+ //设置缺失单元格对象
135
+ let max = 0
136
+ rows.forEach((r: any) => {
137
+ if (max < r.length) {
138
+ max = r.length
139
+ }
140
+ })
141
+ const rowsS = [{ hpx: 30 }]
142
+ rows.forEach((r: any, index: number) => {
143
+ if (index > 0) {
144
+ rowsS.push({ hpx: 20 })
145
+ }
146
+ for (let i = 0; i < max; i++) {
147
+ if (!r[i]) {
148
+ r[i] = {
149
+ v: '',
150
+ t: 's',
151
+ s: {
152
+ font: { bold: true },
153
+ alignment: {
154
+ vertical: 'center', // 垂直居中
155
+ horizontal: 'center', // 水平居中
156
+ },
157
+ // border 边框属性
158
+ border: {
159
+ top: { style: 'thin' },
160
+ bottom: { style: 'thin' },
161
+ left: { style: 'thin' },
162
+ right: { style: 'thin' },
163
+ },
164
+ },
165
+ }
166
+ }
167
+ }
168
+ })
169
+ const data1 = JSON.parse(JSON.stringify(data))
170
+ data1.forEach((r: any, index: any) => {
171
+ r._orderNum = index + rows.length
172
+ })
173
+ //col单元格合并
174
+ if (colMerges) {
175
+ colMerges.forEach((m: any) => {
176
+ data1.forEach((r: any) => {
177
+ const set = new Set()
178
+ m.conditions.forEach((c: any) => {
179
+ set.add(r[c])
180
+ })
181
+ if (set.size === 1) {
182
+ const sIndes = dataColumns.indexOf(
183
+ dataColumns.find((c) => c.property === m.conditions[0]),
184
+ )
185
+ const eIndes = dataColumns.indexOf(
186
+ dataColumns.find((c) => c.property === m.conditions[m.conditions.length - 1]),
187
+ )
188
+ merges.push({
189
+ s: { c: sIndes, r: r._orderNum },
190
+ e: { c: eIndes, r: r._orderNum },
191
+ })
192
+ }
193
+ })
194
+ })
195
+ }
196
+ //row单元格合并
197
+ if (rowMerges) {
198
+ rowMerges.forEach((m: any) => {
199
+ const groupList = new Linq(data1).groupBy((r: any) => {
200
+ const obj: any = {}
201
+ m.conditions.forEach((c: any) => {
202
+ obj[c] = r[c]
203
+ })
204
+ return obj
205
+ })
206
+ //@ts-ignore
207
+ groupList.forEach((c: any) => {
208
+ m.fields.forEach((m1: any) => {
209
+ const cIndex = dataColumns.indexOf(dataColumns.find((c) => c.property === m1))
210
+ let minOrderNum = 0
211
+ let maxOrderNum = 0
212
+ minOrderNum = new Linq(c.elements).min((c: any) => c._orderNum)
213
+ maxOrderNum = new Linq(c.elements).max((c: any) => c._orderNum)
214
+ merges.push({
215
+ s: { c: cIndex, r: minOrderNum },
216
+ e: { c: cIndex, r: maxOrderNum },
217
+ })
218
+ })
219
+ })
220
+ })
221
+ }
222
+ data1?.forEach((r: any) => {
223
+ const row: any = []
224
+ dataColumns.forEach((c) => {
225
+ row.push({
226
+ v: r[c.property] ? r[c.property] : '',
227
+ t: 's',
228
+ s: {
229
+ alignment: {
230
+ vertical: 'center', // 垂直居中
231
+ horizontal: 'center', // 水平居中
232
+ },
233
+ // border 边框属性
234
+ border: {
235
+ top: { style: 'thin' },
236
+ bottom: { style: 'thin' },
237
+ left: { style: 'thin' },
238
+ right: { style: 'thin' },
239
+ },
240
+ },
241
+ })
242
+ })
243
+ rows.push(row)
244
+ })
245
+ //设置行高
246
+ rows.forEach((r: any, index: number) => {
247
+ if (index > 0) {
248
+ rowsS.push({ hpx: 20 })
249
+ }
250
+ })
251
+ //设置列宽
252
+ dataColumns.forEach((c) => {
253
+ cols.push({ wpx: c.width })
254
+ })
255
+ if (customFooterCallback) {
256
+ customFooterCallback(rows, dataColumns, merges)
257
+ }
258
+ const wb = XLSX.utils.book_new()
259
+ const ws = XLSX.utils.aoa_to_sheet(rows)
260
+ ws['!cols'] = cols
261
+ ws['!merges'] = merges
262
+ ws['!rows'] = rowsS
263
+ XLSX.utils.book_append_sheet(wb, ws, sheetName)
264
+ // STEP 4: Write Excel file to browser
265
+ XLSX.writeFile(wb, fileName+'.xlsx')
266
+ },
267
+ generateHeader(
268
+ columns: any[],
269
+ rows: any[],
270
+ columnIndex: number,
271
+ merges: any,
272
+ ){
273
+ //@ts-ignore
274
+ columns.forEach((c: any) => {
275
+ let row: any = []
276
+ if (rows[c.level]) {
277
+ row = rows[c.level]
278
+ } else {
279
+ row = []
280
+ rows.push(row)
281
+ }
282
+ row[columnIndex] = {
283
+ v: c.label,
284
+ t: 's',
285
+ s: {
286
+ font: { bold: true },
287
+ alignment: {
288
+ vertical: 'center', // 垂直居中
289
+ horizontal: 'center', // 水平居中
290
+ },
291
+ // border 边框属性
292
+ border: {
293
+ top: { style: 'thin' },
294
+ bottom: { style: 'thin' },
295
+ left: { style: 'thin' },
296
+ right: { style: 'thin' },
297
+ },
298
+ },
299
+ }
300
+ if (c.children) {
301
+ merges.push({
302
+ s: { c: columnIndex, r: c.level },
303
+ e: { c: columnIndex + c.colSpan - 1, r: c.level },
304
+ })
305
+ this.generateHeader(c.children, rows, columnIndex, merges)
306
+ } else {
307
+ if (c.rowSpan > 1) {
308
+ merges.push({
309
+ s: { c: columnIndex, r: c.level },
310
+ e: { c: columnIndex, r: c.level + c.rowSpan - 1 },
311
+ })
312
+ }
313
+ }
314
+ columnIndex = columnIndex + c.colSpan
315
+ })
316
+ },
317
+ generateColumns(columns: any[], dataColumns: any[]){
318
+ //@ts-ignore
319
+ columns.forEach((c: any) => {
320
+ if (c.children) {
321
+ this.generateColumns(c.children, dataColumns)
322
+ } else {
323
+ dataColumns.push({ property: c.property, width: c.width ? c.width : c.minWidth })
324
+ }
325
+ })
326
+ }
327
+ // /**
328
+ // * 判断是否有操作权限
329
+ // * @param operCode
330
+ // * @constructor
331
+ // */
332
+ // IsOperationAuth(operCode:string): Boolean {
333
+ // return permission.IsOperationAuth(operCode)
334
+ // }
335
+ }