@idooel/components 0.0.1-beta.99 → 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 (105) hide show
  1. package/README.md +98 -98
  2. package/dist/@idooel/components.esm.js +256 -159
  3. package/dist/@idooel/components.umd.js +256 -159
  4. package/jsconfig.json +7 -7
  5. package/package.json +50 -50
  6. package/packages/alert/index.js +4 -4
  7. package/packages/alert/src/index.vue +45 -45
  8. package/packages/batch-export/index.js +4 -4
  9. package/packages/batch-export/src/index.vue +104 -104
  10. package/packages/business-components/modal-fsm/index.js +4 -4
  11. package/packages/business-components/modal-fsm/src/index.vue +163 -163
  12. package/packages/business-components/modal-import/index.js +4 -4
  13. package/packages/business-components/modal-import/src/index.vue +139 -139
  14. package/packages/business-components/modal-timeline/index.js +4 -4
  15. package/packages/business-components/modal-timeline/src/index.vue +77 -77
  16. package/packages/business-components/tabs-sub-center/index.js +4 -4
  17. package/packages/business-components/tabs-sub-center/src/index.vue +116 -116
  18. package/packages/button/index.js +4 -4
  19. package/packages/button/src/index.vue +65 -65
  20. package/packages/checkbox/index.js +4 -4
  21. package/packages/checkbox/src/index.vue +52 -52
  22. package/packages/composite-components/button-group/index.js +4 -4
  23. package/packages/composite-components/button-group/src/index.vue +151 -151
  24. package/packages/composite-components/form-attachment/src/index.vue +14 -14
  25. package/packages/composite-components/form-img-crop/index.js +4 -4
  26. package/packages/composite-components/form-img-crop/src/index.vue +120 -111
  27. package/packages/composite-components/modal-confirm/index.js +4 -4
  28. package/packages/composite-components/modal-confirm/src/index.vue +103 -103
  29. package/packages/composite-components/modal-form/index.js +4 -4
  30. package/packages/composite-components/modal-form/src/index.vue +230 -223
  31. package/packages/composite-components/modal-img-crop/index.js +4 -4
  32. package/packages/composite-components/modal-img-crop/src/index.vue +298 -289
  33. package/packages/composite-components/modal-table/index.js +4 -4
  34. package/packages/composite-components/modal-table/src/index.vue +155 -155
  35. package/packages/composite-components/modal-tree/index.js +4 -4
  36. package/packages/composite-components/modal-tree/src/index.vue +75 -75
  37. package/packages/composite-components/search-area/index.js +4 -4
  38. package/packages/composite-components/search-area/src/index.vue +237 -237
  39. package/packages/composite-components/search-area/src/label.vue +35 -35
  40. package/packages/composite-components/select-entity-modal-table/index.js +4 -4
  41. package/packages/composite-components/select-entity-modal-table/src/index.vue +171 -168
  42. package/packages/date/index.js +4 -4
  43. package/packages/date/src/index.vue +112 -112
  44. package/packages/date-range/index.js +4 -4
  45. package/packages/date-range/src/index.vue +47 -47
  46. package/packages/form/index.js +4 -4
  47. package/packages/form/src/index.vue +318 -302
  48. package/packages/icon/index.js +4 -4
  49. package/packages/icon/src/index.vue +31 -31
  50. package/packages/index.js +153 -153
  51. package/packages/input/index.js +4 -4
  52. package/packages/input/src/index.vue +35 -35
  53. package/packages/input-number/index.js +4 -4
  54. package/packages/input-number/src/index.vue +23 -23
  55. package/packages/loading/index.js +4 -4
  56. package/packages/loading/src/index.vue +36 -36
  57. package/packages/modal/index.js +4 -4
  58. package/packages/modal/src/index.vue +184 -184
  59. package/packages/models/form-group-model/index.js +4 -4
  60. package/packages/models/form-group-model/src/index.vue +273 -273
  61. package/packages/models/form-model/index.js +4 -4
  62. package/packages/models/form-model/src/index.vue +232 -221
  63. package/packages/models/step-model/index.js +4 -4
  64. package/packages/models/step-model/src/index.vue +224 -224
  65. package/packages/models/tree-table-model/index.js +4 -4
  66. package/packages/models/tree-table-model/src/index.vue +689 -681
  67. package/packages/radio/index.js +4 -4
  68. package/packages/radio/src/index.vue +56 -56
  69. package/packages/select/index.js +4 -4
  70. package/packages/select/src/index.vue +105 -105
  71. package/packages/select-entity/index.js +4 -4
  72. package/packages/select-entity/src/index.vue +119 -119
  73. package/packages/table/index.js +4 -4
  74. package/packages/table/src/action.vue +172 -172
  75. package/packages/table/src/index.vue +289 -335
  76. package/packages/tabs/index.js +4 -4
  77. package/packages/tabs/src/index.vue +55 -55
  78. package/packages/text/index.js +4 -4
  79. package/packages/text/src/index.vue +47 -47
  80. package/packages/text-editor/index.js +4 -4
  81. package/packages/text-editor/src/index.vue +72 -72
  82. package/packages/textarea/index.js +4 -4
  83. package/packages/textarea/src/index.vue +57 -57
  84. package/packages/theme/form.scss +21 -21
  85. package/packages/theme/index.scss +42 -42
  86. package/packages/theme/overrid.scss +7 -7
  87. package/packages/theme/styleClass.scss +2 -2
  88. package/packages/theme/variables.scss +55 -55
  89. package/packages/timeline/index.js +4 -4
  90. package/packages/timeline/src/index.vue +257 -257
  91. package/packages/tpl/index.js +4 -4
  92. package/packages/tpl/src/index.vue +55 -55
  93. package/packages/tree/index.js +4 -4
  94. package/packages/tree/src/TreeNode.vue +29 -29
  95. package/packages/tree/src/index.vue +101 -101
  96. package/packages/tree-select/index.js +4 -4
  97. package/packages/tree-select/src/index.vue +142 -142
  98. package/packages/upload/index.js +4 -4
  99. package/packages/upload/src/index.vue +444 -444
  100. package/packages/utils/index.js +62 -62
  101. package/scripts/rollup.config.js +42 -42
  102. package/scripts/rollup.esm.config.js +11 -11
  103. package/scripts/rollup.umd.config.js +14 -14
  104. package/dist/@idooel/components.esm.js.map +0 -1
  105. package/dist/@idooel/components.umd.js.map +0 -1
@@ -1,303 +1,319 @@
1
- <template>
2
- <div class="ele__form--wrapper">
3
- <a-form :form="form" layout="vertical" class="ant-advanced-search-form">
4
- <a-row :gutter="24">
5
- <template v-for="ele in elements">
6
- <a-col v-if="executeExpression(ele._show)" :span="ele.span" :key="ele.name">
7
- <template v-if="ele.type == 'Input'">
8
- <a-form-item :label="`${ele.label}:`">
9
- <ele-input
10
- @change="onChange($event, ele)"
11
- :disabled="executeExpression(ele._disabled)"
12
- :max-length="ele.maxLength"
13
- v-decorator="[ele.name, { rules: rebuildRules(ele.rules) }]"
14
- style="width:100%;">
15
- </ele-input>
16
- </a-form-item>
17
- </template>
18
- <template v-else-if="ele.type == 'Textarea'">
19
- <a-form-item :label="`${ele.label}:`">
20
- <ele-textarea
21
- @change="onChange($event, ele)"
22
- :max-length="ele.maxLength"
23
- :autosize="ele.autosize"
24
- :disabled="executeExpression(ele._disabled)"
25
- :allow-clear="ele.allowClear"
26
- :placeholder="ele.placeholder"
27
- v-decorator="[ele.name, { rules: rebuildRules(ele.rules) }]"
28
- style="width:100%;">
29
- </ele-textarea>
30
- </a-form-item>
31
- </template>
32
- <template v-else-if="ele.type == 'Select'">
33
- <a-form-item :label="`${ele.label}:`">
34
- <ele-select
35
- :data-source="ele.optionList"
36
- :disabled="executeExpression(ele._disabled)"
37
- :multiple="ele.multiple"
38
- :mode="ele.mode"
39
- :code="ele.code"
40
- :init="ele.init"
41
- :url="ele.url"
42
- :params="ele.params"
43
- @change="onChange($event, ele)"
44
- v-decorator="[ele.name, { rules: rebuildRules(ele.rules) }]"
45
- style="width:100%;">
46
- </ele-select>
47
- </a-form-item>
48
- </template>
49
- <template v-else-if="ele.type == 'ele-upload'">
50
- <a-form-item :label="`${ele.label}:`">
51
- <ele-upload v-decorator="[ele.name, { rules: rebuildRules(ele.rules) }]"
52
- :ext="ele.ext"
53
- :multiple="ele.multiple"
54
- :accept="ele.accept"
55
- :extensions="ele.extensions"
56
- :size="ele.size"
57
- :icon="ele.icon"
58
- :url="ele.url"
59
- :message="ele.message"
60
- style="width:100%;">
61
- </ele-upload>
62
- </a-form-item>
63
- </template>
64
- <template v-else-if="ele.type == 'ele-date-range'">
65
- <a-form-item :label="`${ele.label}:`">
66
- <ele-date-range
67
- :disabled="executeExpression(ele._disabled)"
68
- v-decorator="[ele.name, { rules: rebuildRules(ele.rules) }]"
69
- style="width:100%;">
70
- </ele-date-range>
71
- </a-form-item>
72
- </template>
73
- <template v-else-if="ele.type == 'ele-date'">
74
- <a-form-item :label="`${ele.label}:`">
75
- <ele-date
76
- :format="ele.format"
77
- :mode="ele.mode"
78
- :show-time="ele.showTime"
79
- :show-today="ele.showToday"
80
- :value-format="ele.valueFormat"
81
- :disabled="executeExpression(ele._disabled)"
82
- v-decorator="[ele.name, { rules: rebuildRules(ele.rules) }]"
83
- style="width:100%;">
84
- </ele-date>
85
- </a-form-item>
86
- </template>
87
- <template v-else-if="ele.type == 'SelectEntity'">
88
- <a-form-item :label="`${ele.label}:`">
89
- <ele-select-entity
90
- v-decorator="[ele.name, { rules: rebuildRules(ele.rules) }]"
91
- style="width:100%;">
92
- </ele-select-entity>
93
- </a-form-item>
94
- </template>
95
- <template v-else-if="ele.type == 'InputNumber' || ele.type == 'ele-input-number'">
96
- <a-form-item :label="`${ele.label}:`">
97
- <ele-input-number
98
- @change="onChange($event, ele)"
99
- :precision="ele.precision"
100
- :disabled="executeExpression(ele._disabled)"
101
- v-decorator="[ele.name, { rules: rebuildRules(ele.rules) }]"
102
- v-bind="ele.props"
103
- style="width:100%;">
104
- </ele-input-number>
105
- </a-form-item>
106
- </template>
107
- <template v-else-if="ele.type == 'Checkbox'">
108
- <a-form-item :label="`${ele.label}:`">
109
- <ele-checkbox
110
- :data-source="ele.optionList"
111
- :disabled="executeExpression(ele._disabled)"
112
- v-decorator="[ele.name, { rules: rebuildRules(ele.rules) }]"
113
- style="width:100%;">
114
- </ele-checkbox>
115
- </a-form-item>
116
- </template>
117
- <template v-else-if="ele.type == 'Radio'">
118
- <a-form-item :label="`${ele.label}:`">
119
- <ele-radio
120
- @change="onChange($event, ele)"
121
- :disabled="executeExpression(ele._disabled)"
122
- :data-source="ele.optionList"
123
- v-decorator="[ele.name, { rules: rebuildRules(ele.rules) }]"
124
- style="width:100%;">
125
- </ele-radio>
126
- </a-form-item>
127
- </template>
128
- <template v-else-if="ele.type == 'ele-form-img-crop'">
129
- <a-form-item :label="`${ele.label}:`">
130
- <ele-form-img-crop
131
- @change="onChange($event, ele)"
132
- :width="ele.width"
133
- :height="ele.height"
134
- :modal-title="ele.modalTitle"
135
- :oper-text="ele.operText"
136
- :disabled="executeExpression(ele._disabled)"
137
- v-decorator="[ele.name, { rules: rebuildRules(ele.rules) }]"
138
- style="width:100%;">
139
- </ele-form-img-crop>
140
- </a-form-item>
141
- </template>
142
- <template v-else-if="ele.type == 'ele-tree-select'">
143
- <a-form-item :label="`${ele.label}:`">
144
- <ele-tree-select
145
- @change="onChange($event, ele)"
146
- :disabled="executeExpression(ele._disabled)"
147
- v-bind="ele.meta"
148
- v-decorator="[ele.name, { rules: rebuildRules(ele.rules) }]"
149
- style="width:100%;">
150
- </ele-tree-select>
151
- </a-form-item>
152
- </template>
153
- <template v-else-if="ele.type == 'ele-select-entity-modal-table'">
154
- <a-form-item :label="`${ele.label}:`">
155
- <ele-select-entity-modal-table
156
- @change="onChange($event, ele)"
157
- :disabled="executeExpression(ele._disabled)"
158
- v-bind="ele.meta"
159
- v-decorator="[ele.name, { rules: rebuildRules(ele.rules) }]"
160
- style="width:100%;">
161
- </ele-select-entity-modal-table>
162
- </a-form-item>
163
- </template>
164
- </a-col>
165
- </template>
166
- </a-row>
167
- </a-form>
168
- </div>
169
- </template>
170
-
171
- <script>
172
- import { parse } from '@idooel/expression'
173
- import { type } from '@idooel/shared'
174
- import { CONTEXT } from '../../utils'
175
- export default {
176
- name: 'ele-form',
177
- props: {
178
- disabled: {
179
- type: [Boolean, String],
180
- default: '_routeMeta.disabled'
181
- },
182
- formName: {
183
- type: [Number, String],
184
- default: 'coordinated'
185
- },
186
- elements: {
187
- type: Array,
188
- default: () => []
189
- }
190
- },
191
- data () {
192
- return {}
193
- },
194
- inject: {
195
- [CONTEXT]: {
196
- default: () => (() => ({}))
197
- }
198
- },
199
- computed: {
200
- contextData () {
201
- return this[CONTEXT].call(this)
202
- },
203
- globalDisabled () {
204
- return this.executeExpression(this.disabled)
205
- },
206
- form () {
207
- return this.$form.createForm(this, { name: this.formName })
208
- },
209
- exposedMethods () {
210
- return {
211
- setFieldsValue: this.setFieldsValue,
212
- getFieldsValue: this.getFieldsValue
213
- }
214
- }
215
- },
216
- methods: {
217
- rebuildRules (rules = []) {
218
- //TODO
219
- rules.map(rule => {
220
- const { validator } = rule
221
- if (validator) {
222
- validator.formModel = this.getFieldsValue()
223
- validator.exposed = this.exposedMethods
224
- }
225
- })
226
- return rules
227
- },
228
- dispatchExpression () {
229
- this.evalDisabledExpression()
230
- this.evalShowExpression()
231
- },
232
- evalDisabledExpression () {
233
- this.elements.forEach(ele => {
234
- if (this.globalDisabled) return this.$set(ele, '_disabled', true)
235
- const { disabled } = ele
236
- const ret = this.executeExpression(disabled)
237
- this.$set(ele, '_disabled', ret)
238
- })
239
- },
240
- evalShowExpression () {
241
- this.elements.forEach(ele => {
242
- const { show = true } = ele
243
- const ret = this.executeExpression(show)
244
- this.$set(ele, '_show', ret)
245
- })
246
- },
247
- executeExpression (expression) {
248
- if (type.isBool(expression)) return expression
249
- if (type.isEmpty(expression)) return false
250
- return parse(expression, { ...this.getFieldsValue(), _route: this.$route.query, _routeMeta: this.$route.meta })
251
- },
252
- onChange (value, props) {
253
- const { name } = props
254
- this.dispatchExpression()
255
- this.setFieldsValue({ [name]: value })
256
- this.$emit('change', { value, props, exposed: { ...this.exposedMethods } })
257
- },
258
- collectDefaultValues () {
259
- const ret = this.elements.reduce((ret, props) => {
260
- const { name, defaultValue } = props
261
- if (defaultValue) {
262
- ret[name] = defaultValue
263
- }
264
- return ret
265
- }, {})
266
- return ret
267
- },
268
- setDefaultValues () {
269
- const defaultValues = this.collectDefaultValues()
270
- this.setFieldsValue(defaultValues)
271
- },
272
- validateFields () {
273
- let ret = false
274
- this.form.validateFields((error, values) => {
275
- ret = !error
276
- })
277
- return ret
278
- },
279
- setFieldsValue (props = {}) {
280
- this.$nextTick(() => {
281
- this.form.setFieldsValue(props)
282
- })
283
- },
284
- getFieldsValue (fieldNames) {
285
- return this.form.getFieldsValue(fieldNames)
286
- }
287
- },
288
- mounted() {
289
- this.$nextTick(() => {
290
- this.dispatchExpression()
291
- this.setDefaultValues()
292
- })
293
- }
294
- }
295
- </script>
296
-
297
- <style lang="scss" scoped>
298
- .ele__form--wrapper {
299
- background: #fff;
300
- .ant-form-item {
301
- }
302
- }
1
+ <template>
2
+ <div class="ele__form--wrapper">
3
+ <a-form :form="form" layout="vertical" class="ant-advanced-search-form">
4
+ <a-row :gutter="24">
5
+ <template v-for="ele in elements">
6
+ <a-col v-if="executeExpression(ele._show)" :span="ele.span" :key="ele.name">
7
+ <template v-if="ele.type == 'Input'">
8
+ <a-form-item :label="`${ele.label}:`">
9
+ <ele-input
10
+ @change="onChange($event, ele)"
11
+ :disabled="executeExpression(ele._disabled)"
12
+ :max-length="ele.maxLength"
13
+ v-decorator="[ele.name, { rules: rebuildRules(ele.rules) }]"
14
+ style="width:100%;">
15
+ </ele-input>
16
+ </a-form-item>
17
+ </template>
18
+ <template v-else-if="ele.type == 'Textarea'">
19
+ <a-form-item :label="`${ele.label}:`">
20
+ <ele-textarea
21
+ @change="onChange($event, ele)"
22
+ :max-length="ele.maxLength"
23
+ :autosize="ele.autosize"
24
+ :disabled="executeExpression(ele._disabled)"
25
+ :allow-clear="ele.allowClear"
26
+ :placeholder="ele.placeholder"
27
+ v-decorator="[ele.name, { rules: rebuildRules(ele.rules) }]"
28
+ style="width:100%;">
29
+ </ele-textarea>
30
+ </a-form-item>
31
+ </template>
32
+ <template v-else-if="ele.type == 'Select'">
33
+ <a-form-item :label="`${ele.label}:`">
34
+ <ele-select
35
+ :data-source="ele.optionList"
36
+ :disabled="executeExpression(ele._disabled)"
37
+ :multiple="ele.multiple"
38
+ :mode="ele.mode"
39
+ :code="ele.code"
40
+ :init="ele.init"
41
+ :url="ele.url"
42
+ :params="ele.params"
43
+ @change="onChange($event, ele)"
44
+ v-decorator="[ele.name, { rules: rebuildRules(ele.rules) }]"
45
+ style="width:100%;">
46
+ </ele-select>
47
+ </a-form-item>
48
+ </template>
49
+ <template v-else-if="ele.type == 'ele-upload'">
50
+ <a-form-item :label="`${ele.label}:`">
51
+ <ele-upload v-decorator="[ele.name, { rules: rebuildRules(ele.rules) }]"
52
+ :ext="ele.ext"
53
+ :multiple="ele.multiple"
54
+ :accept="ele.accept"
55
+ :extensions="ele.extensions"
56
+ :size="ele.size"
57
+ :icon="ele.icon"
58
+ :url="ele.url"
59
+ :message="ele.message"
60
+ style="width:100%;">
61
+ </ele-upload>
62
+ </a-form-item>
63
+ </template>
64
+ <template v-else-if="ele.type == 'ele-date-range'">
65
+ <a-form-item :label="`${ele.label}:`">
66
+ <ele-date-range
67
+ :disabled="executeExpression(ele._disabled)"
68
+ v-decorator="[ele.name, { rules: rebuildRules(ele.rules) }]"
69
+ style="width:100%;">
70
+ </ele-date-range>
71
+ </a-form-item>
72
+ </template>
73
+ <template v-else-if="ele.type == 'ele-date'">
74
+ <a-form-item :label="`${ele.label}:`">
75
+ <ele-date
76
+ :format="ele.format"
77
+ :mode="ele.mode"
78
+ :show-time="ele.showTime"
79
+ :show-today="ele.showToday"
80
+ :value-format="ele.valueFormat"
81
+ :disabled="executeExpression(ele._disabled)"
82
+ v-decorator="[ele.name, { rules: rebuildRules(ele.rules) }]"
83
+ style="width:100%;">
84
+ </ele-date>
85
+ </a-form-item>
86
+ </template>
87
+ <template v-else-if="ele.type == 'SelectEntity'">
88
+ <a-form-item :label="`${ele.label}:`">
89
+ <ele-select-entity
90
+ v-decorator="[ele.name, { rules: rebuildRules(ele.rules) }]"
91
+ style="width:100%;">
92
+ </ele-select-entity>
93
+ </a-form-item>
94
+ </template>
95
+ <template v-else-if="ele.type == 'InputNumber' || ele.type == 'ele-input-number'">
96
+ <a-form-item :label="`${ele.label}:`">
97
+ <ele-input-number
98
+ @change="onChange($event, ele)"
99
+ :precision="ele.precision"
100
+ :disabled="executeExpression(ele._disabled)"
101
+ v-decorator="[ele.name, { rules: rebuildRules(ele.rules) }]"
102
+ v-bind="ele.props"
103
+ style="width:100%;">
104
+ </ele-input-number>
105
+ </a-form-item>
106
+ </template>
107
+ <template v-else-if="ele.type == 'Checkbox'">
108
+ <a-form-item :label="`${ele.label}:`">
109
+ <ele-checkbox
110
+ :data-source="ele.optionList"
111
+ :disabled="executeExpression(ele._disabled)"
112
+ v-decorator="[ele.name, { rules: rebuildRules(ele.rules) }]"
113
+ style="width:100%;">
114
+ </ele-checkbox>
115
+ </a-form-item>
116
+ </template>
117
+ <template v-else-if="ele.type == 'Radio'">
118
+ <a-form-item :label="`${ele.label}:`">
119
+ <ele-radio
120
+ @change="onChange($event, ele)"
121
+ :disabled="executeExpression(ele._disabled)"
122
+ :data-source="ele.optionList"
123
+ v-decorator="[ele.name, { rules: rebuildRules(ele.rules) }]"
124
+ style="width:100%;">
125
+ </ele-radio>
126
+ </a-form-item>
127
+ </template>
128
+ <template v-else-if="ele.type == 'ele-form-img-crop'">
129
+ <a-form-item :label="`${ele.label}:`">
130
+ <ele-form-img-crop
131
+ @change="onChange($event, ele)"
132
+ :width="ele.width"
133
+ :height="ele.height"
134
+ :modal-title="ele.modalTitle"
135
+ :cropper-config="ele.cropperConfig"
136
+ :oper-text="ele.operText"
137
+ :disabled="executeExpression(ele._disabled)"
138
+ v-decorator="[ele.name, { rules: rebuildRules(ele.rules) }]"
139
+ style="width:100%;">
140
+ </ele-form-img-crop>
141
+ </a-form-item>
142
+ </template>
143
+ <template v-else-if="ele.type == 'ele-tree-select'">
144
+ <a-form-item :label="`${ele.label}:`">
145
+ <ele-tree-select
146
+ @change="onChange($event, ele)"
147
+ :disabled="executeExpression(ele._disabled)"
148
+ v-bind="ele.meta"
149
+ v-decorator="[ele.name, { rules: rebuildRules(ele.rules) }]"
150
+ style="width:100%;">
151
+ </ele-tree-select>
152
+ </a-form-item>
153
+ </template>
154
+ <template v-else-if="ele.type == 'ele-select-entity-modal-table'">
155
+ <a-form-item :label="`${ele.label}:`">
156
+ <ele-select-entity-modal-table
157
+ @change="onChange($event, ele)"
158
+ :disabled="executeExpression(ele._disabled)"
159
+ v-bind="ele.meta"
160
+ v-decorator="[ele.name, { rules: rebuildRules(ele.rules) }]"
161
+ style="width:100%;">
162
+ </ele-select-entity-modal-table>
163
+ </a-form-item>
164
+ </template>
165
+ </a-col>
166
+ </template>
167
+ </a-row>
168
+ </a-form>
169
+ </div>
170
+ </template>
171
+
172
+ <script>
173
+ import { parse } from '@idooel/expression'
174
+ import { type } from '@idooel/shared'
175
+ import { CONTEXT } from '../../utils'
176
+ export default {
177
+ name: 'ele-form',
178
+ props: {
179
+ value: {
180
+ type: Object,
181
+ default: () => ({})
182
+ },
183
+ disabled: {
184
+ type: [Boolean, String],
185
+ default: '_routeMeta.disabled'
186
+ },
187
+ formName: {
188
+ type: [Number, String],
189
+ default: 'coordinated'
190
+ },
191
+ elements: {
192
+ type: Array,
193
+ default: () => []
194
+ }
195
+ },
196
+ data () {
197
+ return {
198
+ formModel: {}
199
+ }
200
+ },
201
+ inject: {
202
+ [CONTEXT]: {
203
+ default: () => (() => ({}))
204
+ }
205
+ },
206
+ computed: {
207
+ contextData () {
208
+ return this[CONTEXT].call(this)
209
+ },
210
+ globalDisabled () {
211
+ return this.executeExpression(this.disabled)
212
+ },
213
+ form () {
214
+ const ref = this.$form.createForm(this, { name: this.formName })
215
+ return ref
216
+ },
217
+ exposedMethods () {
218
+ return {
219
+ setFieldsValue: this.setFieldsValue,
220
+ getFieldsValue: this.getFieldsValue
221
+ }
222
+ }
223
+ },
224
+ created () {
225
+ this.setDefaultValues()
226
+ },
227
+ methods: {
228
+ setFormModel (props = {}) {
229
+ this.formModel = props
230
+ this.dispatchExpression()
231
+ },
232
+ rebuildRules (rules = []) {
233
+ //TODO
234
+ rules.map(rule => {
235
+ const { validator } = rule
236
+ if (validator) {
237
+ validator.formModel = this.getFieldsValue()
238
+ validator.exposed = this.exposedMethods
239
+ }
240
+ })
241
+ return rules
242
+ },
243
+ dispatchExpression () {
244
+ this.evalDisabledExpression()
245
+ this.evalShowExpression()
246
+ },
247
+ evalDisabledExpression () {
248
+ this.elements.forEach(ele => {
249
+ if (this.globalDisabled) return this.$set(ele, '_disabled', true)
250
+ const { disabled } = ele
251
+ const ret = this.executeExpression(disabled)
252
+ this.$set(ele, '_disabled', ret)
253
+ })
254
+ },
255
+ evalShowExpression () {
256
+ this.elements.forEach(ele => {
257
+ const { show = true } = ele
258
+ const ret = this.executeExpression(show)
259
+ this.$set(ele, '_show', ret)
260
+ })
261
+ },
262
+ executeExpression (expression) {
263
+ if (type.isBool(expression)) return expression
264
+ if (type.isEmpty(expression)) return false
265
+ return parse(expression, { ...this.getFieldsValue(), ...this.formModel, _route: this.$route.query, _routeMeta: this.$route.meta })
266
+ },
267
+ onChange (value, props) {
268
+ const { name } = props
269
+ this.$set(this.formModel, name, value)
270
+ this.dispatchExpression()
271
+ this.setFieldsValue({ [name]: value })
272
+ this.$emit('change', { value, props, exposed: { ...this.exposedMethods } })
273
+ },
274
+ collectDefaultValues () {
275
+ const ret = this.elements.reduce((ret, props) => {
276
+ const { name, defaultValue } = props
277
+ if (defaultValue) {
278
+ ret[name] = defaultValue
279
+ }
280
+ return ret
281
+ }, {})
282
+ return ret
283
+ },
284
+ //TODO deprecated in the future, need to be implemented in the outer component
285
+ setDefaultValues () {
286
+ const defaultValues = this.collectDefaultValues()
287
+ this.setFormModel(defaultValues)
288
+ this.setFieldsValue(defaultValues)
289
+ },
290
+ validateFields () {
291
+ let ret = false
292
+ this.form.validateFields((error, values) => {
293
+ ret = !error
294
+ })
295
+ return ret
296
+ },
297
+ setFieldsValue (props = {}) {
298
+ this.$nextTick(() => {
299
+ this.form.setFieldsValue(props)
300
+ })
301
+ },
302
+ getFieldsValue (fieldNames) {
303
+ return this.form.getFieldsValue(fieldNames)
304
+ }
305
+ },
306
+ mounted() {
307
+ this.$emit('x:mounted', { setFormModel: this.setFormModel })
308
+ this.dispatchExpression()
309
+ }
310
+ }
311
+ </script>
312
+
313
+ <style lang="scss" scoped>
314
+ .ele__form--wrapper {
315
+ background: #fff;
316
+ .ant-form-item {
317
+ }
318
+ }
303
319
  </style>
@@ -1,5 +1,5 @@
1
- import EleIcon from './src/index.vue'
2
-
3
- EleIcon.install = Vue => Vue.component(EleIcon.name, EleIcon)
4
-
1
+ import EleIcon from './src/index.vue'
2
+
3
+ EleIcon.install = Vue => Vue.component(EleIcon.name, EleIcon)
4
+
5
5
  export default EleIcon