adtec-core-package 1.2.0 → 1.2.2

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 (149) 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/env.d.ts +1 -1
  6. package/eslint.config.js +56 -56
  7. package/index.html +13 -13
  8. package/package.json +1 -1
  9. package/src/App.vue +9 -9
  10. package/src/assets/base.css +86 -86
  11. package/src/assets/logo.svg +1 -1
  12. package/src/assets/main.css +35 -35
  13. package/src/assets/style/transition.scss +49 -49
  14. package/src/components/icon/ElIcons.vue +38 -38
  15. package/src/components/workflow/components/CheckDialog.vue +1 -0
  16. package/src/css/elementUI/affix.scss +7 -7
  17. package/src/css/elementUI/alert.scss +115 -115
  18. package/src/css/elementUI/anchor-link.scss +41 -41
  19. package/src/css/elementUI/anchor.scss +88 -88
  20. package/src/css/elementUI/aside.scss +8 -8
  21. package/src/css/elementUI/avatar.scss +55 -55
  22. package/src/css/elementUI/backtop.scss +29 -29
  23. package/src/css/elementUI/badge.scss +58 -58
  24. package/src/css/elementUI/base.scss +3 -3
  25. package/src/css/elementUI/breadcrumb.scss +62 -62
  26. package/src/css/elementUI/button-group.scss +80 -80
  27. package/src/css/elementUI/button.scss +304 -304
  28. package/src/css/elementUI/calendar.scss +80 -80
  29. package/src/css/elementUI/card.scss +45 -45
  30. package/src/css/elementUI/carousel-item.scss +58 -58
  31. package/src/css/elementUI/carousel.scss +188 -188
  32. package/src/css/elementUI/cascader-panel.scss +138 -138
  33. package/src/css/elementUI/cascader.scss +230 -230
  34. package/src/css/elementUI/check-tag.scss +60 -60
  35. package/src/css/elementUI/checkbox-button.scss +140 -140
  36. package/src/css/elementUI/checkbox-group.scss +7 -7
  37. package/src/css/elementUI/checkbox.scss +298 -298
  38. package/src/css/elementUI/col.scss +48 -48
  39. package/src/css/elementUI/collapse.scss +70 -70
  40. package/src/css/elementUI/color/index.scss +20 -20
  41. package/src/css/elementUI/color-picker.scss +392 -392
  42. package/src/css/elementUI/common/popup.scss +47 -47
  43. package/src/css/elementUI/common/transition.scss +122 -122
  44. package/src/css/elementUI/container.scss +14 -14
  45. package/src/css/elementUI/dark/css-vars.scss +39 -39
  46. package/src/css/elementUI/dark/var.scss +222 -222
  47. package/src/css/elementUI/date-picker/date-picker.scss +110 -110
  48. package/src/css/elementUI/date-picker/date-range-picker.scss +113 -113
  49. package/src/css/elementUI/date-picker/date-table.scss +158 -158
  50. package/src/css/elementUI/date-picker/month-table.scss +112 -112
  51. package/src/css/elementUI/date-picker/picker-panel.scss +131 -131
  52. package/src/css/elementUI/date-picker/time-picker.scss +90 -90
  53. package/src/css/elementUI/date-picker/time-range-picker.scss +33 -33
  54. package/src/css/elementUI/date-picker/time-spinner.scss +111 -111
  55. package/src/css/elementUI/date-picker/year-table.scss +108 -108
  56. package/src/css/elementUI/date-picker.scss +9 -9
  57. package/src/css/elementUI/descriptions-item.scss +73 -73
  58. package/src/css/elementUI/dialog.scss +199 -199
  59. package/src/css/elementUI/display.scss +12 -12
  60. package/src/css/elementUI/divider.scss +48 -48
  61. package/src/css/elementUI/dropdown.scss +208 -208
  62. package/src/css/elementUI/empty.scss +49 -49
  63. package/src/css/elementUI/footer.scss +12 -12
  64. package/src/css/elementUI/form.scss +243 -243
  65. package/src/css/elementUI/header.scss +12 -12
  66. package/src/css/elementUI/icon.scss +45 -45
  67. package/src/css/elementUI/image-viewer.scss +139 -139
  68. package/src/css/elementUI/image.scss +49 -49
  69. package/src/css/elementUI/index.scss +110 -110
  70. package/src/css/elementUI/input-number.scss +178 -178
  71. package/src/css/elementUI/input.scss +478 -478
  72. package/src/css/elementUI/link.scss +90 -90
  73. package/src/css/elementUI/loading.scss +104 -104
  74. package/src/css/elementUI/main.scss +14 -14
  75. package/src/css/elementUI/mention.scss +88 -88
  76. package/src/css/elementUI/menu.scss +339 -339
  77. package/src/css/elementUI/message-box.scss +213 -213
  78. package/src/css/elementUI/message.scss +98 -98
  79. package/src/css/elementUI/mixins/_button.scss +165 -165
  80. package/src/css/elementUI/mixins/_col.scss +33 -33
  81. package/src/css/elementUI/mixins/_var.scss +67 -67
  82. package/src/css/elementUI/mixins/config.scss +5 -5
  83. package/src/css/elementUI/mixins/function.scss +88 -88
  84. package/src/css/elementUI/mixins/mixins.scss +237 -237
  85. package/src/css/elementUI/mixins/utils.scss +39 -39
  86. package/src/css/elementUI/notification.scss +104 -104
  87. package/src/css/elementUI/option-group.scss +33 -33
  88. package/src/css/elementUI/option.scss +71 -71
  89. package/src/css/elementUI/overlay.scss +17 -17
  90. package/src/css/elementUI/page-header.scss +60 -60
  91. package/src/css/elementUI/pagination.scss +238 -238
  92. package/src/css/elementUI/popconfirm.scss +16 -16
  93. package/src/css/elementUI/popover.scss +61 -61
  94. package/src/css/elementUI/popper.scss +106 -106
  95. package/src/css/elementUI/progress.scss +179 -179
  96. package/src/css/elementUI/radio-button.scss +169 -169
  97. package/src/css/elementUI/radio-group.scss +9 -9
  98. package/src/css/elementUI/radio.scss +215 -215
  99. package/src/css/elementUI/rate.scss +108 -108
  100. package/src/css/elementUI/reset.scss +98 -98
  101. package/src/css/elementUI/result.scss +57 -57
  102. package/src/css/elementUI/row.scss +35 -35
  103. package/src/css/elementUI/scrollbar.scss +97 -97
  104. package/src/css/elementUI/segmented.scss +183 -183
  105. package/src/css/elementUI/select-dropdown-v2.scss +1 -1
  106. package/src/css/elementUI/select-dropdown.scss +57 -57
  107. package/src/css/elementUI/select-v2.scss +4 -4
  108. package/src/css/elementUI/select.scss +253 -253
  109. package/src/css/elementUI/skeleton-item.scss +83 -83
  110. package/src/css/elementUI/skeleton.scss +44 -44
  111. package/src/css/elementUI/slider.scss +212 -212
  112. package/src/css/elementUI/space.scss +20 -20
  113. package/src/css/elementUI/spinner.scss +43 -43
  114. package/src/css/elementUI/statistic.scss +35 -35
  115. package/src/css/elementUI/step.scss +316 -316
  116. package/src/css/elementUI/steps.scss +21 -21
  117. package/src/css/elementUI/switch.scss +300 -300
  118. package/src/css/elementUI/table-column.scss +98 -98
  119. package/src/css/elementUI/table-v2.scss +236 -236
  120. package/src/css/elementUI/tag.scss +181 -181
  121. package/src/css/elementUI/text.scss +51 -51
  122. package/src/css/elementUI/time-picker.scss +5 -5
  123. package/src/css/elementUI/time-select.scss +37 -37
  124. package/src/css/elementUI/timeline-item.scss +84 -84
  125. package/src/css/elementUI/timeline.scss +46 -46
  126. package/src/css/elementUI/tooltip-v2.scss +95 -95
  127. package/src/css/elementUI/tour.scss +187 -187
  128. package/src/css/elementUI/transfer.scss +203 -203
  129. package/src/css/elementUI/tree-select.scss +41 -41
  130. package/src/css/elementUI/tree.scss +134 -134
  131. package/src/css/elementUI/upload.scss +654 -654
  132. package/src/css/elementUI/var.scss +87 -87
  133. package/src/css/elementUI/virtual-list.scss +40 -40
  134. package/src/hooks/useFileView.ts +2 -25
  135. package/src/interface/enum/FlexEnum.ts +85 -85
  136. package/src/interface/workflow/IWfReturnNodeVo.ts +1 -0
  137. package/src/interface/workflow/IWfTaskAskVo.ts +4 -0
  138. package/src/main.ts +14 -14
  139. package/src/router/index.ts +23 -23
  140. package/src/utils/FrameworkUtils.ts +335 -335
  141. package/src/utils/encrypt.ts +10 -10
  142. package/tsconfig.app.json +12 -12
  143. package/tsconfig.json +11 -11
  144. package/tsconfig.node.json +18 -18
  145. package/vite.config.ts +38 -38
  146. package/adtec-core-package/adtec-core-package.css +0 -1
  147. package/adtec-core-package/adtec-core-package.js +0 -41605
  148. package/adtec-core-package/adtec-core-package.umd.cjs +0 -79
  149. package/adtec-core-package/favicon.ico +0 -0
@@ -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
+ }