@idooel/components 0.0.1-beta.39 → 0.0.1-beta.40

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 (95) hide show
  1. package/dist/@idooel/components.esm.js +4667 -4273
  2. package/dist/@idooel/components.umd.js +4609 -4191
  3. package/jsconfig.json +8 -0
  4. package/package.json +3 -3
  5. package/packages/alert/index.js +4 -4
  6. package/packages/alert/src/index.vue +45 -45
  7. package/packages/batch-export/index.js +4 -4
  8. package/packages/batch-export/src/index.vue +104 -108
  9. package/packages/business-components/modal-fsm/index.js +5 -0
  10. package/packages/business-components/modal-fsm/src/index.vue +164 -0
  11. package/packages/{composite-components → business-components}/modal-import/index.js +4 -4
  12. package/packages/{composite-components → business-components}/modal-import/src/index.vue +139 -145
  13. package/packages/{composite-components → business-components}/modal-timeline/index.js +4 -4
  14. package/packages/{composite-components → business-components}/modal-timeline/src/index.vue +77 -76
  15. package/packages/button/index.js +4 -4
  16. package/packages/button/src/index.vue +54 -54
  17. package/packages/checkbox/index.js +4 -4
  18. package/packages/checkbox/src/index.vue +52 -52
  19. package/packages/composite-components/button-group/index.js +4 -4
  20. package/packages/composite-components/button-group/src/index.vue +88 -53
  21. package/packages/composite-components/{attachment → form-attachment}/src/index.vue +14 -14
  22. package/packages/composite-components/modal-confirm/index.js +5 -0
  23. package/packages/composite-components/modal-confirm/src/index.vue +69 -0
  24. package/packages/composite-components/modal-form/index.js +4 -4
  25. package/packages/composite-components/modal-form/src/index.vue +202 -202
  26. package/packages/{img-crop → composite-components/modal-img-crop}/index.js +4 -4
  27. package/packages/{img-crop → composite-components/modal-img-crop}/src/index.vue +284 -290
  28. package/packages/composite-components/modal-table/index.js +0 -0
  29. package/packages/composite-components/modal-tree/index.js +4 -4
  30. package/packages/composite-components/modal-tree/src/index.vue +75 -75
  31. package/packages/composite-components/search-area/index.js +4 -4
  32. package/packages/composite-components/search-area/src/index.vue +218 -229
  33. package/packages/composite-components/search-area/src/label.vue +35 -35
  34. package/packages/composite-components/table-transfer/index.js +0 -0
  35. package/packages/date/index.js +4 -4
  36. package/packages/date/src/index.vue +95 -39
  37. package/packages/date-range/index.js +4 -4
  38. package/packages/date-range/src/index.vue +47 -47
  39. package/packages/form/index.js +4 -4
  40. package/packages/form/src/index.vue +236 -240
  41. package/packages/icon/index.js +4 -4
  42. package/packages/icon/src/index.vue +31 -31
  43. package/packages/index.js +132 -99
  44. package/packages/input/index.js +4 -4
  45. package/packages/input/src/index.vue +35 -35
  46. package/packages/input-number/index.js +4 -4
  47. package/packages/input-number/src/index.vue +23 -23
  48. package/packages/modal/index.js +4 -4
  49. package/packages/modal/src/index.vue +184 -162
  50. package/packages/{form-group-model → models/form-group-model}/index.js +4 -4
  51. package/packages/{form-group-model → models/form-group-model}/src/index.vue +273 -279
  52. package/packages/{form-model → models/form-model}/index.js +4 -4
  53. package/packages/{form-model → models/form-model}/src/index.vue +201 -189
  54. package/packages/{step-model → models/step-model}/index.js +4 -4
  55. package/packages/{step-model → models/step-model}/src/index.vue +215 -219
  56. package/packages/models/tree-table-model/README.md +0 -0
  57. package/packages/{tree-table-model → models/tree-table-model}/index.js +4 -4
  58. package/packages/{tree-table-model → models/tree-table-model}/src/index.vue +494 -493
  59. package/packages/radio/index.js +4 -4
  60. package/packages/radio/src/index.vue +56 -56
  61. package/packages/select/index.js +4 -4
  62. package/packages/select/src/index.vue +92 -92
  63. package/packages/select-entity/index.js +4 -4
  64. package/packages/select-entity/src/index.vue +113 -113
  65. package/packages/table/index.js +4 -4
  66. package/packages/table/src/action.vue +164 -134
  67. package/packages/table/src/index.vue +257 -257
  68. package/packages/tabs/index.js +4 -4
  69. package/packages/tabs/src/index.vue +55 -55
  70. package/packages/text/index.js +4 -4
  71. package/packages/text/src/index.vue +47 -47
  72. package/packages/text-editor/index.js +4 -4
  73. package/packages/text-editor/src/index.vue +72 -72
  74. package/packages/textarea/index.js +4 -4
  75. package/packages/textarea/src/index.vue +57 -57
  76. package/packages/theme/form.scss +21 -21
  77. package/packages/theme/index.scss +42 -42
  78. package/packages/theme/overrid.scss +7 -7
  79. package/packages/theme/styleClass.scss +2 -2
  80. package/packages/theme/variables.scss +55 -55
  81. package/packages/timeline/index.js +4 -4
  82. package/packages/timeline/src/index.vue +253 -234
  83. package/packages/tpl/index.js +4 -4
  84. package/packages/tpl/src/index.vue +55 -55
  85. package/packages/tree/index.js +4 -4
  86. package/packages/tree/src/TreeNode.vue +29 -29
  87. package/packages/tree/src/index.vue +101 -101
  88. package/packages/upload/index.js +4 -4
  89. package/packages/upload/src/index.vue +440 -442
  90. package/packages/utils/index.js +48 -47
  91. package/scripts/rollup.config.js +42 -40
  92. package/scripts/rollup.esm.config.js +11 -11
  93. package/scripts/rollup.umd.config.js +14 -14
  94. /package/packages/composite-components/{attachment → form-attachment}/index.js +0 -0
  95. /package/packages/{tree-table-model/README.md → composite-components/modal-table-transfer/index.js} +0 -0
@@ -1,235 +1,254 @@
1
- <template>
2
- <div class="ele-timeline__wrapper">
3
- <div class="ele-timeline__item" v-for="item in innerDataSource" :key="item.key">
4
- <div class="ele-timeline__left">
5
- <div class="titleline-left__date">{{ item.date }}</div>
6
- </div>
7
- <div class="ele-timeline__middle">
8
- <div class="ele-timeline__circle"></div>
9
- <div class="ele-timeline__traline"></div>
10
- </div>
11
- <div class="ele-timeline__right">
12
- <div class="timeline-right__title">
13
- <span class="title">{{ item.title }}</span>
14
- <span :class="['title-info', item.state == 1 && 'success', item.state == 2 && 'warning', item.state == 3 && 'error']">{{ item.stateName }}</span>
15
- </div>
16
- <div class="timeline-right__oper">
17
-
18
- <span class="oper-name">{{ item.userName }}</span>
19
- 操作
20
- </div>
21
- <div class="timeline-right__subtitle" v-for="label in item.labelList" :key="label.value">
22
- <div class="right-subtitle__field">{{ label.label }}:</div>
23
- <div class="right-subtitle__content">{{ label.value }}</div>
24
- </div>
25
- </div>
26
- </div>
27
- </div>
28
- </template>
29
-
30
- <script>
31
- import { net, type } from '@idooel/shared'
32
- import { v4 as uuidv4 } from 'uuid'
33
- import { CONTEXT, parseFieldMap } from '../../utils'
34
- export default {
35
- name: 'ele-timeline',
36
- props: {
37
- url: {
38
- type: String
39
- },
40
- params: {
41
- type: Object,
42
- default: () => ({})
43
- },
44
- requestType: {
45
- type: String,
46
- default: 'GET'
47
- },
48
- fieldMap: {
49
- type: Object,
50
- default: () => ({})
51
- },
52
- dataSource: {
53
- type: Array,
54
- default: () => []
55
- }
56
- },
57
- data () {
58
- return {
59
- innerDataSource: []
60
- }
61
- },
62
- inject: {
63
- [CONTEXT]: {
64
- default: () => (() => ({}))
65
- }
66
- },
67
- computed: {
68
- expressionData () {
69
- return {
70
- _route: this.$route.query,
71
- ...this[CONTEXT]()
72
- }
73
- }
74
- },
75
- async created() {
76
- if (this.url) {
77
- this.innerDataSource = await this.requestData()
78
- } else if (!type.isEmpty(this.dataSource)) {
79
- this.innerDataSource = this.dataSource
80
- } else {
81
- console.warn('ele-timeline: 请传入数据源')
82
- }
83
- },
84
- methods: {
85
- async requestData () {
86
- const ret = await net[this.requestType.toLowerCase()](
87
- this.url,
88
- { ...this.params, ...parseFieldMap(this.fieldMap, this.expressionData) }
89
- ).then(resp => {
90
- const { data } = resp || {}
91
- return data.map(item => {
92
- return {
93
- key: uuidv4(),
94
- ...item
95
- }
96
- })
97
- })
98
- return ret
99
- }
100
- }
101
- }
102
- </script>
103
- <style lang="scss">
104
- @import '../../theme/index.scss';
105
- </style>
106
- <style lang="scss" scoped>
107
- .ele-timeline__wrapper {
108
- width: 100%;
109
- height: 100%;
110
- .ele-timeline__item {
111
- display: flex;
112
- flex-direction: row;
113
- &:last-child {
114
- .ele-timeline__middle {
115
- .ele-timeline__traline {
116
- display: none;
117
- }
118
- }
119
- }
120
- .ele-timeline__left {
121
- flex: 1;
122
- padding-right: 12px;
123
- padding-top: 16px;
124
- padding-bottom: 16px;
125
- text-align: right;
126
- display: flex;
127
- flex-direction: row;
128
- justify-content: end;
129
- .titleline-left__date {
130
- width: 100px;
131
- font-size: 14px;
132
- color: var(--idoole-black-064);
133
- }
134
- }
135
- .ele-timeline__middle {
136
- width: 10px;
137
- display: flex;
138
- flex-direction: column;
139
- align-items: center;
140
- transform: translate(0, 20px);
141
- .ele-timeline__circle {
142
- width: 100%;
143
- height: 10px;
144
- border-radius: 50%;
145
- border-width: 2px;
146
- border-style: solid;
147
- border-color: var(--idooel-primary-color);
148
- }
149
- .ele-timeline__traline {
150
- width: 1px;
151
- height: calc(100% - 10px);
152
- border-width: 1px;
153
- border-style: solid;
154
- border-color: var(--idoole-black-016);
155
- }
156
- }
157
- .ele-timeline__right {
158
- text-align: left;
159
- flex: 1;
160
- padding-left: 12px;
161
- padding-top: 16px;
162
- padding-bottom: 16px;
163
- .timeline-right__title {
164
- line-height: 22px;
165
- display: flex;
166
- flex-direction: row;
167
- .title {
168
- color: var(--idoole-black-088);
169
- font-size: 14px;
170
- font-weight: bold;
171
- }
172
- .title-info {
173
- font-size: 14px;
174
- color: var(--idoole-black-064);
175
- margin-left: 16px;
176
- display: flex;
177
- flex-direction: row;
178
- align-items: center;
179
- &::before {
180
- content: '';
181
- display: inline-block;
182
- width: 6px;
183
- height: 6px;
184
- border-radius: 50%;
185
- margin-right: 8px;
186
- }
187
- &.success {
188
- &::before {
189
- background: var(--idoole-success-06);
190
- }
191
- }
192
- &.warning {
193
- &::before {
194
- background: var(--idoole-warning-06);
195
- }
196
- }
197
- &.error {
198
- &::before {
199
- background: var(--idoole-error-06);
200
- }
201
- }
202
- }
203
- }
204
- .timeline-right__oper {
205
- line-height: 22px;
206
- margin-top: 8px;
207
- margin-left: 12px;
208
- .oper-name {
209
- color: var(--idoole-black-088);
210
- font-size: 14px;
211
- font-weight: bold;
212
- }
213
- }
214
- .timeline-right__subtitle {
215
- margin-left: 12px;
216
- display: flex;
217
- flex-direction: row;
218
- line-height: 22px;
219
- margin-top: 4px;
220
- .right-subtitle__field {
221
- flex-shrink: 0;
222
- font-size: 14px;
223
- color: var(--idoole-black-064);
224
- }
225
- .right-subtitle__content {
226
- font-size: 14px;
227
- color: var(--idoole-black-088);
228
- font-weight: bold;
229
- margin-left: 4px;
230
- }
231
- }
232
- }
233
- }
234
- }
1
+ <template>
2
+ <div class="ele-timeline__wrapper">
3
+ <div class="ele-timeline__item" v-for="item in innerDataSource" :key="item.key">
4
+ <div class="ele-timeline__left">
5
+ <div class="titleline-left__date">{{ item.date }}</div>
6
+ </div>
7
+ <div class="ele-timeline__middle">
8
+ <div class="ele-timeline__circle"></div>
9
+ <div class="ele-timeline__traline"></div>
10
+ </div>
11
+ <div class="ele-timeline__right">
12
+ <slot v-if="$scopedSlots.right" name="right" :data="item"></slot>
13
+ <template v-else>
14
+ <div class="timeline-right__title">
15
+ <span class="title">{{ item.title }}</span>
16
+ <span :class="['title-info', item.state == 1 && 'success', item.state == 2 && 'warning', item.state == 3 && 'error']">{{ item.stateName }}</span>
17
+ </div>
18
+ <div class="timeline-right__oper">
19
+
20
+ <span class="oper-name">{{ item.userName }}</span>
21
+ 操作
22
+ </div>
23
+ <div class="timeline-right__subtitle" v-for="label in item.labelList" :key="label.value">
24
+ <div class="right-subtitle__field">{{ label.label }}:</div>
25
+ <div class="right-subtitle__content">{{ label.value }}</div>
26
+ </div>
27
+ </template>
28
+ </div>
29
+ </div>
30
+ </div>
31
+ </template>
32
+
33
+ <script>
34
+ import { net, type } from '@idooel/shared'
35
+ import { v4 as uuidv4 } from 'uuid'
36
+ import { CONTEXT, parseFieldMap } from '../../utils'
37
+ export default {
38
+ name: 'ele-timeline',
39
+ props: {
40
+ url: {
41
+ type: String
42
+ },
43
+ params: {
44
+ type: Object,
45
+ default: () => ({})
46
+ },
47
+ requestType: {
48
+ type: String,
49
+ default: 'GET'
50
+ },
51
+ fieldMap: {
52
+ type: Object,
53
+ default: () => ({})
54
+ },
55
+ dataSource: {
56
+ type: Array,
57
+ default: () => ([
58
+ // {
59
+ // date: '2023/05/09 03:34:56',
60
+ // title: 123,
61
+ // state: 1,
62
+ // stateName: '成功',
63
+ // userName: 'Name',
64
+ // labelList: [
65
+ // {
66
+ // label: 'label',
67
+ // value: 'value'
68
+ // }
69
+ // ],
70
+ // action: '结班',
71
+ // opinion: '意见'
72
+ // }
73
+ ])
74
+ }
75
+ },
76
+ data () {
77
+ return {
78
+ innerDataSource: []
79
+ }
80
+ },
81
+ inject: {
82
+ [CONTEXT]: {
83
+ default: () => (() => ({}))
84
+ }
85
+ },
86
+ computed: {
87
+ expressionData () {
88
+ return {
89
+ _route: this.$route.query,
90
+ ...this[CONTEXT]()
91
+ }
92
+ }
93
+ },
94
+ async created() {
95
+ if (this.url) {
96
+ this.innerDataSource = await this.requestData()
97
+ } else if (!type.isEmpty(this.dataSource)) {
98
+ this.innerDataSource = this.dataSource
99
+ } else {
100
+ console.warn('ele-timeline: 请传入数据源')
101
+ }
102
+ },
103
+ methods: {
104
+ async requestData () {
105
+ const ret = await net[this.requestType.toLowerCase()](
106
+ this.url,
107
+ { ...this.params, ...parseFieldMap(this.fieldMap, this.expressionData) }
108
+ ).then(resp => {
109
+ const { data } = resp || {}
110
+ return data.map(item => {
111
+ return {
112
+ key: uuidv4(),
113
+ ...item
114
+ }
115
+ })
116
+ })
117
+ return ret
118
+ }
119
+ }
120
+ }
121
+ </script>
122
+ <style lang="scss">
123
+ @import '../../theme/index';
124
+ </style>
125
+ <style lang="scss" scoped>
126
+ .ele-timeline__wrapper {
127
+ width: 100%;
128
+ height: 100%;
129
+ .ele-timeline__item {
130
+ display: flex;
131
+ flex-direction: row;
132
+ &:last-child {
133
+ .ele-timeline__middle {
134
+ .ele-timeline__traline {
135
+ display: none;
136
+ }
137
+ }
138
+ }
139
+ .ele-timeline__left {
140
+ flex: 1;
141
+ padding-right: 12px;
142
+ padding-top: 16px;
143
+ padding-bottom: 16px;
144
+ text-align: right;
145
+ display: flex;
146
+ flex-direction: row;
147
+ justify-content: end;
148
+ .titleline-left__date {
149
+ width: 100px;
150
+ font-size: 14px;
151
+ color: var(--idoole-black-064);
152
+ }
153
+ }
154
+ .ele-timeline__middle {
155
+ width: 10px;
156
+ display: flex;
157
+ flex-direction: column;
158
+ align-items: center;
159
+ transform: translate(0, 20px);
160
+ .ele-timeline__circle {
161
+ width: 100%;
162
+ height: 10px;
163
+ border-radius: 50%;
164
+ border-width: 2px;
165
+ border-style: solid;
166
+ border-color: var(--idooel-primary-color);
167
+ }
168
+ .ele-timeline__traline {
169
+ width: 1px;
170
+ height: calc(100% - 10px);
171
+ border-width: 1px;
172
+ border-style: solid;
173
+ border-color: var(--idoole-black-016);
174
+ }
175
+ }
176
+ .ele-timeline__right {
177
+ text-align: left;
178
+ flex: 2;
179
+ padding-left: 12px;
180
+ padding-top: 16px;
181
+ padding-bottom: 16px;
182
+ .timeline-right__title {
183
+ line-height: 22px;
184
+ display: flex;
185
+ flex-direction: row;
186
+ .title {
187
+ color: var(--idoole-black-088);
188
+ font-size: 14px;
189
+ font-weight: bold;
190
+ }
191
+ .title-info {
192
+ font-size: 14px;
193
+ color: var(--idoole-black-064);
194
+ margin-left: 16px;
195
+ display: flex;
196
+ flex-direction: row;
197
+ align-items: center;
198
+ &::before {
199
+ content: '';
200
+ display: inline-block;
201
+ width: 6px;
202
+ height: 6px;
203
+ border-radius: 50%;
204
+ margin-right: 8px;
205
+ }
206
+ &.success {
207
+ &::before {
208
+ background: var(--idoole-success-06);
209
+ }
210
+ }
211
+ &.warning {
212
+ &::before {
213
+ background: var(--idoole-warning-06);
214
+ }
215
+ }
216
+ &.error {
217
+ &::before {
218
+ background: var(--idoole-error-06);
219
+ }
220
+ }
221
+ }
222
+ }
223
+ .timeline-right__oper {
224
+ line-height: 22px;
225
+ margin-top: 8px;
226
+ margin-left: 12px;
227
+ .oper-name {
228
+ color: var(--idoole-black-088);
229
+ font-size: 14px;
230
+ font-weight: bold;
231
+ }
232
+ }
233
+ .timeline-right__subtitle {
234
+ margin-left: 12px;
235
+ display: flex;
236
+ flex-direction: row;
237
+ line-height: 22px;
238
+ margin-top: 4px;
239
+ .right-subtitle__field {
240
+ flex-shrink: 0;
241
+ font-size: 14px;
242
+ color: var(--idoole-black-064);
243
+ }
244
+ .right-subtitle__content {
245
+ font-size: 14px;
246
+ color: var(--idoole-black-088);
247
+ font-weight: bold;
248
+ margin-left: 4px;
249
+ }
250
+ }
251
+ }
252
+ }
253
+ }
235
254
  </style>
@@ -1,5 +1,5 @@
1
- import EleTpl from './src/index.vue'
2
-
3
- EleTpl.install = Vue => Vue.component(EleTpl.name, EleTpl)
4
-
1
+ import EleTpl from './src/index.vue'
2
+
3
+ EleTpl.install = Vue => Vue.component(EleTpl.name, EleTpl)
4
+
5
5
  export default EleTpl
@@ -1,56 +1,56 @@
1
- <template>
2
- <component
3
- v-if="modelNameValidator.existed"
4
- :is="modelName"
5
- :ref="genModelRef"
6
- v-bind="$attrs"
7
- v-on="$listeners">
8
- <template v-for="(idx, name) in $scopedSlots" v-slot:[name]="data">
9
- <slot :name="name" v-bind="data"></slot>
10
- </template>
11
- </component>
12
- <div v-else v-html="modelNameValidator.message"></div>
13
- </template>
14
-
15
- <script>
16
- import EleTreeTableModel from '../../tree-table-model/src/index.vue'
17
- import EleFormGroupModel from '../../form-group-model/src/index.vue'
18
- import EleFormModel from '../../form-model/src/index.vue'
19
- import EleStepModel from '../../step-model/src/index.vue'
20
- import { v4 as uuidv4 } from 'uuid'
21
- import { models } from '../../index.js'
22
- export default {
23
- name: 'ele-tpl',
24
- props: {
25
- modelName: {
26
- type: String
27
- }
28
- },
29
- components: {
30
- [EleTreeTableModel.name]: EleTreeTableModel,
31
- [EleFormGroupModel.name]: EleFormGroupModel,
32
- [EleStepModel.name]: EleStepModel,
33
- [EleFormModel.name]: EleFormModel
34
- },
35
- computed: {
36
- modelNameValidator () {
37
- const target = models.find(model => model.name === this.modelName)
38
- return {
39
- existed: !!target,
40
- message: !!target ? '' : `Model <span style="color:red;">${this.modelName}</span> not found`
41
- }
42
- },
43
- genModelRef () {
44
- return uuidv4()
45
- }
46
- },
47
- methods: {
48
- getModel () {
49
- return this.$refs[this.genModelRef]
50
- }
51
- }
52
- }
53
- </script>
54
- <style lang="scss">
55
- @import '../../theme/index.scss';
1
+ <template>
2
+ <component
3
+ v-if="modelNameValidator.existed"
4
+ :is="modelName"
5
+ :ref="genModelRef"
6
+ v-bind="$attrs"
7
+ v-on="$listeners">
8
+ <template v-for="(idx, name) in $scopedSlots" v-slot:[name]="data">
9
+ <slot :name="name" v-bind="data"></slot>
10
+ </template>
11
+ </component>
12
+ <div v-else v-html="modelNameValidator.message"></div>
13
+ </template>
14
+
15
+ <script>
16
+ import EleTreeTableModel from '../../models/tree-table-model/src/index.vue'
17
+ import EleFormGroupModel from '../../models/form-group-model/src/index.vue'
18
+ import EleFormModel from '../../models/form-model/src/index.vue'
19
+ import EleStepModel from '../../models/step-model/src/index.vue'
20
+ import { v4 as uuidv4 } from 'uuid'
21
+ import { models } from '../../index.js'
22
+ export default {
23
+ name: 'ele-tpl',
24
+ props: {
25
+ modelName: {
26
+ type: String
27
+ }
28
+ },
29
+ components: {
30
+ [EleTreeTableModel.name]: EleTreeTableModel,
31
+ [EleFormGroupModel.name]: EleFormGroupModel,
32
+ [EleStepModel.name]: EleStepModel,
33
+ [EleFormModel.name]: EleFormModel
34
+ },
35
+ computed: {
36
+ modelNameValidator () {
37
+ const target = models.find(model => model.name === this.modelName)
38
+ return {
39
+ existed: !!target,
40
+ message: !!target ? '' : `Model <span style="color:red;">${this.modelName}</span> not found`
41
+ }
42
+ },
43
+ genModelRef () {
44
+ return uuidv4()
45
+ }
46
+ },
47
+ methods: {
48
+ getModel () {
49
+ return this.$refs[this.genModelRef]
50
+ }
51
+ }
52
+ }
53
+ </script>
54
+ <style lang="scss">
55
+ @import '../../theme/index';
56
56
  </style>
@@ -1,5 +1,5 @@
1
- import EleTree from './src/index.vue'
2
-
3
- EleTree.install = Vue => Vue.component(EleTree.name, EleTree)
4
-
1
+ import EleTree from './src/index.vue'
2
+
3
+ EleTree.install = Vue => Vue.component(EleTree.name, EleTree)
4
+
5
5
  export default EleTree