@idooel/components 0.0.1 → 0.0.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 (107) hide show
  1. package/README.md +99 -0
  2. package/dist/@idooel/components.esm.js +13956 -1882
  3. package/dist/@idooel/components.umd.js +14000 -1891
  4. package/jsconfig.json +8 -0
  5. package/package.json +12 -6
  6. package/packages/alert/index.js +5 -0
  7. package/packages/alert/src/index.vue +46 -0
  8. package/packages/batch-export/index.js +5 -0
  9. package/packages/batch-export/src/index.vue +105 -0
  10. package/packages/business-components/modal-fsm/index.js +5 -0
  11. package/packages/business-components/modal-fsm/src/index.vue +164 -0
  12. package/packages/business-components/modal-import/index.js +5 -0
  13. package/packages/business-components/modal-import/src/index.vue +140 -0
  14. package/packages/business-components/modal-timeline/index.js +5 -0
  15. package/packages/business-components/modal-timeline/src/index.vue +78 -0
  16. package/packages/business-components/tabs-sub-center/index.js +5 -0
  17. package/packages/business-components/tabs-sub-center/src/index.vue +117 -0
  18. package/packages/button/index.js +4 -4
  19. package/packages/button/src/index.vue +65 -24
  20. package/packages/checkbox/index.js +5 -0
  21. package/packages/checkbox/src/index.vue +53 -0
  22. package/packages/composite-components/button-group/index.js +4 -4
  23. package/packages/composite-components/button-group/src/index.vue +151 -46
  24. package/packages/composite-components/form-attachment/src/index.vue +15 -0
  25. package/packages/composite-components/form-img-crop/index.js +5 -0
  26. package/packages/composite-components/form-img-crop/src/index.vue +121 -0
  27. package/packages/composite-components/modal-confirm/index.js +5 -0
  28. package/packages/composite-components/modal-confirm/src/index.vue +104 -0
  29. package/packages/composite-components/modal-form/index.js +5 -0
  30. package/packages/composite-components/modal-form/src/index.vue +231 -0
  31. package/packages/composite-components/modal-img-crop/index.js +5 -0
  32. package/packages/composite-components/modal-img-crop/src/index.vue +299 -0
  33. package/packages/composite-components/modal-table/index.js +5 -0
  34. package/packages/composite-components/modal-table/src/index.vue +156 -0
  35. package/packages/composite-components/modal-table-transfer/index.js +0 -0
  36. package/packages/composite-components/modal-tree/index.js +5 -0
  37. package/packages/composite-components/modal-tree/src/index.vue +76 -0
  38. package/packages/composite-components/search-area/index.js +4 -4
  39. package/packages/composite-components/search-area/src/index.vue +237 -128
  40. package/packages/composite-components/search-area/src/label.vue +35 -35
  41. package/packages/composite-components/select-entity-modal-table/index.js +5 -0
  42. package/packages/composite-components/select-entity-modal-table/src/index.vue +172 -0
  43. package/packages/composite-components/table-transfer/index.js +0 -0
  44. package/packages/date/index.js +4 -4
  45. package/packages/date/src/index.vue +113 -40
  46. package/packages/date-range/index.js +5 -0
  47. package/packages/date-range/src/index.vue +47 -0
  48. package/packages/form/index.js +5 -0
  49. package/packages/form/src/index.vue +319 -0
  50. package/packages/icon/index.js +5 -0
  51. package/packages/icon/src/index.vue +32 -0
  52. package/packages/index.js +153 -50
  53. package/packages/input/index.js +4 -4
  54. package/packages/input/src/index.vue +35 -23
  55. package/packages/input-number/index.js +5 -0
  56. package/packages/input-number/src/index.vue +24 -0
  57. package/packages/loading/index.js +5 -0
  58. package/packages/loading/src/index.vue +37 -0
  59. package/packages/modal/index.js +5 -0
  60. package/packages/modal/src/index.vue +185 -0
  61. package/packages/models/form-group-model/index.js +5 -0
  62. package/packages/models/form-group-model/src/index.vue +274 -0
  63. package/packages/models/form-model/index.js +5 -0
  64. package/packages/models/form-model/src/index.vue +233 -0
  65. package/packages/models/step-model/index.js +5 -0
  66. package/packages/models/step-model/src/index.vue +224 -0
  67. package/packages/{tree-table-model → models/tree-table-model}/index.js +4 -4
  68. package/packages/models/tree-table-model/src/index.vue +689 -0
  69. package/packages/radio/index.js +5 -0
  70. package/packages/radio/src/index.vue +57 -0
  71. package/packages/select/index.js +4 -4
  72. package/packages/select/src/index.vue +105 -34
  73. package/packages/select-entity/index.js +5 -0
  74. package/packages/select-entity/src/index.vue +120 -0
  75. package/packages/table/index.js +4 -4
  76. package/packages/table/src/action.vue +172 -103
  77. package/packages/table/src/index.vue +289 -88
  78. package/packages/tabs/index.js +5 -0
  79. package/packages/tabs/src/index.vue +56 -0
  80. package/packages/text/index.js +5 -0
  81. package/packages/text/src/index.vue +48 -0
  82. package/packages/text-editor/index.js +5 -0
  83. package/packages/text-editor/src/index.vue +73 -0
  84. package/packages/textarea/index.js +5 -0
  85. package/packages/textarea/src/index.vue +58 -0
  86. package/packages/theme/form.scss +22 -0
  87. package/packages/theme/index.scss +43 -0
  88. package/packages/theme/overrid.scss +8 -0
  89. package/packages/theme/styleClass.scss +3 -0
  90. package/packages/theme/variables.scss +56 -0
  91. package/packages/timeline/index.js +5 -0
  92. package/packages/timeline/src/index.vue +258 -0
  93. package/packages/tpl/index.js +4 -4
  94. package/packages/tpl/src/index.vue +56 -47
  95. package/packages/tree/index.js +4 -4
  96. package/packages/tree/src/TreeNode.vue +29 -29
  97. package/packages/tree/src/index.vue +101 -96
  98. package/packages/tree-select/index.js +5 -0
  99. package/packages/tree-select/src/index.vue +143 -0
  100. package/packages/upload/index.js +5 -0
  101. package/packages/upload/src/index.vue +445 -0
  102. package/packages/utils/index.js +63 -0
  103. package/scripts/rollup.config.js +42 -35
  104. package/scripts/rollup.esm.config.js +11 -11
  105. package/scripts/rollup.umd.config.js +14 -14
  106. package/packages/tree-table-model/src/index.vue +0 -290
  107. /package/packages/{tree-table-model/README.md → composite-components/form-attachment/index.js} +0 -0
@@ -0,0 +1,233 @@
1
+ <template>
2
+ <div class="form__model--wrapper">
3
+ <div class="form-model__title" v-if="title">
4
+ {{ title }}
5
+ </div>
6
+ <div class="form-model__content">
7
+ <ele-alert style="margin-bottom: 16px;" v-if="alertMeta" v-bind="alertMeta"></ele-alert>
8
+ <ele-form :ref="formRef" @change="onChangeFormStatus($event)" :elements="elements" :disabled="globalDisabled"></ele-form>
9
+ </div>
10
+ <div class="form-model__footer" v-if="footerMeta">
11
+ <ele-button-group v-on="assignAttrForEvents" :data-source="footerElements"></ele-button-group>
12
+ </div>
13
+ </div>
14
+ </template>
15
+
16
+ <script>
17
+ import { BUILT_IN_EVENT_NAMES, parseFieldMap, RESERVE_EVENT_NAMES, PAGE_STATUS, CONTEXT, BUILT_IN_METHODS_NAMES } from '../../../utils'
18
+ import { v4 as uuidv4 } from 'uuid'
19
+ import { net, type } from '@idooel/shared'
20
+ import { parse } from '@idooel/expression'
21
+ export default {
22
+ name: 'ele-form-model',
23
+ props: {
24
+ disabled: {
25
+ type: [Boolean, String],
26
+ default: '_routeMeta.disabled'
27
+ },
28
+ title: {
29
+ type: String
30
+ },
31
+ formMeta: {
32
+ type: Object
33
+ },
34
+ footerMeta: {
35
+ type: Object
36
+ }
37
+ },
38
+ data() {
39
+ return {}
40
+ },
41
+ provide () {
42
+ return {
43
+ [CONTEXT]: () => {
44
+ return {
45
+ exposed: this.exposed
46
+ }
47
+ }
48
+ }
49
+ },
50
+ computed: {
51
+ globalDisabled () {
52
+ return this.executeExpression(this.disabled)
53
+ },
54
+ formRef () {
55
+ return uuidv4()
56
+ },
57
+ exposed () {
58
+ return {
59
+ setFieldsValue: this.setFieldsValue,
60
+ validateFields: this.validateFields,
61
+ getFieldsValue: this.getFieldsValue,
62
+ route: this.$route,
63
+ [BUILT_IN_METHODS_NAMES.SUBMIT_FORM]: this.submitRequestTrigger
64
+ }
65
+ },
66
+ assignAttrForEvents () {
67
+ const events = this.footerElements.reduce((ret, ele) => {
68
+ ret[ele.eventName] = (e) => {
69
+ this.$emit(ele.eventName || 'click', { ...e, formModel: this.formModels(), exposed: this.exposed })
70
+ }
71
+ return ret
72
+ }, {})
73
+ return {
74
+ ...this.$listeners,
75
+ ...events,
76
+ [BUILT_IN_EVENT_NAMES.SUBMIT]: this[BUILT_IN_EVENT_NAMES.SUBMIT],
77
+ [BUILT_IN_EVENT_NAMES.CANCEL]: this[BUILT_IN_EVENT_NAMES.CANCEL]
78
+ }
79
+ },
80
+ elements () {
81
+ const { elements } = this.formMeta
82
+ return elements
83
+ },
84
+ preRequest () {
85
+ const { preRequest = {} } = this.formMeta
86
+ return preRequest
87
+ },
88
+ infoRequest () {
89
+ const { infoRequest = {} } = this.formMeta
90
+ return infoRequest
91
+ },
92
+ alertMeta () {
93
+ const { alert = {} } = this.formMeta
94
+ return type.isEmpty(alert) ? null : alert
95
+ },
96
+ submitRequest () {
97
+ const { submitRequest = {} } = this.formMeta
98
+ return submitRequest
99
+ },
100
+ footerElements () {
101
+ const { elements } = this.footerMeta
102
+ return elements.call(this)
103
+ },
104
+ expressionData () {
105
+ return {
106
+ _route: this.$route.query,
107
+ _routeMeta: this.$route.meta
108
+ }
109
+ },
110
+ routeMetaMode () {
111
+ return this.$route.meta.mode
112
+ }
113
+ },
114
+ methods: {
115
+ collectDefaultValues () {
116
+ const ret = this.elements.reduce((ret, props) => {
117
+ const { name, defaultValue } = props
118
+ if (defaultValue) {
119
+ ret[name] = defaultValue
120
+ }
121
+ return ret
122
+ }, {})
123
+ return ret
124
+ },
125
+ onChangeFormStatus (props) {
126
+ this.$emit(RESERVE_EVENT_NAMES.WATCH_FORM_STATUS, { ...props })
127
+ },
128
+ formModels (fieldNames) {
129
+ return this.$refs[this.formRef] ? this.$refs[this.formRef].getFieldsValue(fieldNames) : {}
130
+ },
131
+ executeExpression (expression, dataSource = {}) {
132
+ if (type.isBool(expression)) return expression
133
+ if (type.isEmpty(expression)) return false
134
+ return parse(expression, { ...this.expressionData, ...this.formModels(), ...dataSource })
135
+ },
136
+ execFieldMap (fieldMap = {}, dataSource = {}) {
137
+ const ret = parseFieldMap(fieldMap, { ...this.expressionData, ...dataSource})
138
+ return ret
139
+ },
140
+ async submitRequestTrigger (props = {}) {
141
+ const { url, requestType, headers = {}, params = {}, fieldMap = {} } = this.submitRequest
142
+ const currentUrl = this.executeExpressionForUrl(url)
143
+ if (!currentUrl) return
144
+ const ret = await net[requestType.toLowerCase()](currentUrl, { ...params, ...this.execFieldMap(fieldMap, { ...this.formModels() }), ...this.formModels() }, { headers }).then(resp => {
145
+ this.$emit(BUILT_IN_EVENT_NAMES.SUBMIT, { ...props, formModel: { ...this.formModels(), ...resp.data || {} } })
146
+ return resp.data
147
+ })
148
+ return ret
149
+ },
150
+ async infoRequestTrigger () {
151
+ if (PAGE_STATUS.CREATE == this.routeMetaMode) return
152
+ const { url, requestType, params = {}, fieldMap = {}, headers = {} } = this.infoRequest
153
+ const currentUrl = this.executeExpressionForUrl(url)
154
+ if (!currentUrl) return
155
+ net[requestType.toLowerCase()](currentUrl, { ...params, ...this.execFieldMap(fieldMap) }, { ...headers }).then(resp => {
156
+ const { data = {} } = resp
157
+ this.setFieldsValue(data)
158
+ this.$emit(RESERVE_EVENT_NAMES.INIT_FORM, { ...data })
159
+ })
160
+ },
161
+ async preRequestTrigger () {
162
+ const { url, requestType = 'GET', params = {}, fieldMap = {}, headers = {} } = this.preRequest
163
+ const currentUrl = this.executeExpressionForUrl(url)
164
+ if (!currentUrl) return
165
+ const { data } = await net[requestType.toLowerCase()](currentUrl, { ...params, ...this.execFieldMap(fieldMap) }, { ...headers })
166
+ this.setFieldsValue(data)
167
+ this.$emit(RESERVE_EVENT_NAMES.INIT_FORM, { ...data })
168
+ },
169
+ executeExpressionForUrl (url) {
170
+ return type.isApi(url) ? url : this.executeExpression(url)
171
+ },
172
+ setFieldsValue (props) {
173
+ this.$refs[this.formRef].setFieldsValue(props)
174
+ },
175
+ getFieldsValue (fieldNames) {
176
+ return this.$refs[this.formRef].getFieldsValue(fieldNames)
177
+ },
178
+ validateFields () {
179
+ return this.$refs[this.formRef].validateFields()
180
+ },
181
+ [BUILT_IN_EVENT_NAMES.SUBMIT] (props = {}) {
182
+ if (this.globalDisabled) return
183
+ const status = this.$refs[this.formRef].validateFields()
184
+ if (status) {
185
+ //TODO fieldMap
186
+ return this.submitRequestTrigger(props)
187
+ } else {
188
+ return false
189
+ }
190
+ },
191
+ [BUILT_IN_EVENT_NAMES.CANCEL] (props = {}) {
192
+ this.$emit(BUILT_IN_EVENT_NAMES.CANCEL, { ...props })
193
+ }
194
+ },
195
+ async mounted() {
196
+ this.setFieldsValue(this.collectDefaultValues())
197
+ await this.preRequestTrigger()
198
+ await this.infoRequestTrigger()
199
+ this.$emit(RESERVE_EVENT_NAMES.INIT_FORM, { exposed: this.exposed })
200
+ }
201
+ }
202
+ </script>
203
+
204
+ <style lang="scss" scoped>
205
+ .form__model--wrapper {
206
+ width: 100%;
207
+ height: 100%;
208
+ overflow: auto;
209
+ background: #fff;
210
+ .form-model__title {
211
+ height: 56px;
212
+ padding: 0 16px;
213
+ display: flex;
214
+ flex-direction: row;
215
+ align-items: center;
216
+ border-bottom: 1px solid var(--idooel-form-title-border-color);
217
+ }
218
+ .form-model__content {
219
+ padding: 16px;
220
+ }
221
+ .form-model__footer {
222
+ /* width: 100%; */
223
+ height: 64px;
224
+ position: fixed;
225
+ bottom: 0;
226
+ display: flex;
227
+ float: right;
228
+ flex-direction: row;
229
+ align-items: center;
230
+ justify-content: end;
231
+ }
232
+ }
233
+ </style>
@@ -0,0 +1,5 @@
1
+ import EleStepModel from './src/index.vue'
2
+
3
+ EleStepModel.install = Vue => Vue.component(EleStepModel.name, EleStepModel)
4
+
5
+ export default EleStepModel
@@ -0,0 +1,224 @@
1
+ <template>
2
+ <div class="ele-step-model__wrapper">
3
+ <div class="ele-step-model__step--wrapper">
4
+ <a-steps class="ele-steps" :current="current" size="small">
5
+ <a-step v-for="step in elements" :title="step.title" :key="step.key" />
6
+ </a-steps>
7
+ </div>
8
+ <div class="ele-step-model__content--wrapper">
9
+ <template v-for="name in scopedSlotsNames">
10
+ <div :key="name" v-if="currentSlotName == name" :class="['ele-step-model__slot', `ele-step-model__slot--${name}`]">
11
+ <slot :name="name"></slot>
12
+ </div>
13
+ </template>
14
+ </div>
15
+ <div class="ele-step-model__footer--wrapper">
16
+ <ele-button-group v-on="assignAttrForEvents" :data-source="footerElements"></ele-button-group>
17
+ </div>
18
+ </div>
19
+ </template>
20
+
21
+ <script>
22
+ import { BUILT_IN_EVENT_NAMES, CONTEXT } from '../../../utils'
23
+ import { parse } from '@idooel/expression'
24
+ import { type } from '@idooel/shared'
25
+ export default {
26
+ name: 'ele-step-model',
27
+ props: {
28
+ stepMeta: {
29
+ type: Object,
30
+ default: () => ({})
31
+ },
32
+ footerMeta: {
33
+ type: Object,
34
+ default: () => ({})
35
+ }
36
+ },
37
+ data() {
38
+ return {
39
+ current: 0,
40
+ currentSlotComponentRef: null,
41
+ innerFooterElements: []
42
+ }
43
+ },
44
+ provide() {
45
+ return {
46
+ [CONTEXT]: () => {
47
+ return {
48
+ ...this.expressionData
49
+ }
50
+ }
51
+ }
52
+ },
53
+ computed: {
54
+ routeMetaDisabled () {
55
+ return this.executeExpression(this.$route.meta.disabled)
56
+ },
57
+ expressionData () {
58
+ return {
59
+ current: this.current,
60
+ _route: this.$route.query,
61
+ _routeMeta: this.$route.meta
62
+ }
63
+ },
64
+ currentSlotName () {
65
+ return this.scopedSlotsNames[this.current]
66
+ },
67
+ footerElements () {
68
+ return this.innerFooterElements
69
+ },
70
+ assignAttrForEvents () {
71
+ const events = this.footerElements.reduce((ret, ele) => {
72
+ ret[ele.eventName] = (e) => {
73
+ this.evalShowExpressionForFooterElements()
74
+ this.$emit(ele.eventName || 'click', { ...e, exposed: this.exposedMethods })
75
+ }
76
+ return ret
77
+ }, {})
78
+ return {
79
+ ...this.$listeners,
80
+ ...events,
81
+ [BUILT_IN_EVENT_NAMES.NEXT]: this[BUILT_IN_EVENT_NAMES.NEXT],
82
+ [BUILT_IN_EVENT_NAMES.PREVIOUS]: this[BUILT_IN_EVENT_NAMES.PREVIOUS],
83
+ [BUILT_IN_EVENT_NAMES.SUBMIT]: this[BUILT_IN_EVENT_NAMES.SUBMIT]
84
+ }
85
+ },
86
+ activeIndex () {
87
+ const { activeIndex } = this.stepMeta
88
+ return activeIndex
89
+ },
90
+ elements () {
91
+ const { elements } = this.stepMeta
92
+ return elements
93
+ },
94
+ scopedSlotsNames () {
95
+ const slotNames = this.elements.map(item => item.key)
96
+ return slotNames
97
+ },
98
+ exposedMethods () {
99
+ return {
100
+ slotRef: this.currentSlotComponentRef,
101
+ setCurrentStep: this.setCurrentStep,
102
+ next: this.nextStep,
103
+ prev: this.prevStep,
104
+ current: this.current
105
+ }
106
+ }
107
+ },
108
+ watch: {
109
+ activeIndex: {
110
+ handler (idx) {
111
+ this.current = idx
112
+ },
113
+ immediate: true
114
+ },
115
+ current: {
116
+ handler () {
117
+ this.$nextTick(() => {
118
+ this.currentSlotComponentRef = this.getCurrentSlotComponentRef()
119
+ })
120
+ },
121
+ immediate: true
122
+ }
123
+ },
124
+ created () {
125
+ const { elements } = this.footerMeta
126
+ this.innerFooterElements = elements.call(this)
127
+ this.evalShowExpressionForFooterElements()
128
+ },
129
+ methods: {
130
+ executeExpression (expression) {
131
+ if (type.isBool(expression)) return expression
132
+ if (type.isEmpty(expression)) return false
133
+ return parse(expression, { ...this.expressionData })
134
+ },
135
+ evalShowExpressionForFooterElements () {
136
+ this.innerFooterElements = this.innerFooterElements.map(element => {
137
+ const { show = true, key, eventName } = element
138
+ if(key == BUILT_IN_EVENT_NAMES.SUBMIT || eventName == BUILT_IN_EVENT_NAMES.SUBMIT) {
139
+ // built in submit button should according to the route meta disabled
140
+ this.$set(element, '_show', this.executeExpression(show, this.expressionData) && !this.routeMetaDisabled)
141
+ return element
142
+ }
143
+ show && this.$set(element, '_show', this.executeExpression(show, this.expressionData))
144
+ return element
145
+ })
146
+ },
147
+ getCurrentSlotComponentRef () {
148
+ const includeMetaCmp = this.$children.find(child => child.meta)
149
+ if (!includeMetaCmp) return null
150
+ const { $children: components } = includeMetaCmp
151
+ const target = components.find(cmp => cmp.$options._componentTag === 'ele-tpl')
152
+ return target.getModel ? target.getModel() : null
153
+ },
154
+ setCurrentStep (index) {
155
+ this.current = index
156
+ this.evalShowExpressionForFooterElements()
157
+ },
158
+ nextStep () {
159
+ if (this.current >= this.elements.length - 1) return
160
+ this.current ++
161
+ this.evalShowExpressionForFooterElements()
162
+ },
163
+ prevStep () {
164
+ if (this.current <= 0) return
165
+ this.current --
166
+ this.evalShowExpressionForFooterElements()
167
+ },
168
+ [BUILT_IN_EVENT_NAMES.NEXT] (props) {
169
+ this.$emit(BUILT_IN_EVENT_NAMES.NEXT, { ...props, exposed: { ...this.exposedMethods } })
170
+ },
171
+ [BUILT_IN_EVENT_NAMES.PREVIOUS] (props) {
172
+ this.$emit(BUILT_IN_EVENT_NAMES.PREVIOUS, { ...props, exposed: { ...this.exposedMethods } })
173
+ },
174
+ [BUILT_IN_EVENT_NAMES.SUBMIT] (props) {
175
+ const currentComponent = this.getCurrentSlotComponentRef() || {}
176
+ const hasSubmitMethod = currentComponent.hasOwnProperty(BUILT_IN_EVENT_NAMES.SUBMIT)
177
+ hasSubmitMethod && currentComponent[BUILT_IN_EVENT_NAMES.SUBMIT]()
178
+ this.$emit(BUILT_IN_EVENT_NAMES.SUBMIT, { ...props, exposed: { ...this.exposedMethods } })
179
+ }
180
+ }
181
+ }
182
+ </script>
183
+
184
+ <style lang="scss" scoped>
185
+ .ele-step-model__wrapper {
186
+ width: 100%;
187
+ height: 100vh;
188
+ position: relative;
189
+ .ele-step-model__step--wrapper {
190
+ width: 100%;
191
+ height: 64px;
192
+ padding: 16px;
193
+ display: flex;
194
+ flex-direction: row;
195
+ align-items: center;
196
+ background: #fff;
197
+ .ele-steps {
198
+ .ant-steps-item {
199
+ text-align: left;
200
+ }
201
+ }
202
+ }
203
+ .ele-step-model__content--wrapper {
204
+ width: 100%;
205
+ width: 100%;
206
+ margin-top: 16px;
207
+ margin-bottom: 16px;
208
+ height: calc(100vh - 64px - 64px - 16px - 16px);
209
+ overflow: auto;
210
+ }
211
+ .ele-step-model__footer--wrapper {
212
+ width: 100%;
213
+ height: 64px;
214
+ background: #fff;
215
+ position: absolute;
216
+ bottom: 0;
217
+ display: flex;
218
+ flex-direction: row;
219
+ align-items: center;
220
+ justify-content: end;
221
+ }
222
+ }
223
+ </style>import meta from '@/views/tree-table-page/meta'import meta from '@/views/tree-table-page/meta'
224
+
@@ -1,5 +1,5 @@
1
- import EleTreeTableModel from './src/index.vue'
2
-
3
- EleTreeTableModel.install = Vue => Vue.component(EleTreeTableModel.name, EleTreeTableModel)
4
-
1
+ import EleTreeTableModel from './src/index.vue'
2
+
3
+ EleTreeTableModel.install = Vue => Vue.component(EleTreeTableModel.name, EleTreeTableModel)
4
+
5
5
  export default EleTreeTableModel