@idooel/components 0.0.2-beta.3 → 0.0.2-beta.30

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 (113) hide show
  1. package/README.md +98 -98
  2. package/dist/@idooel/components.esm.js +3622 -1592
  3. package/dist/@idooel/components.umd.js +3676 -1647
  4. package/jsconfig.json +7 -7
  5. package/package.json +64 -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 +222 -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 +131 -131
  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 -230
  31. package/packages/composite-components/modal-img-crop/index.js +4 -4
  32. package/packages/composite-components/modal-img-crop/src/index.vue +298 -298
  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 +239 -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 -171
  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 +393 -319
  48. package/packages/icon/index.js +4 -4
  49. package/packages/icon/src/index.vue +31 -31
  50. package/packages/index.js +159 -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/meta/provider.js +4 -0
  58. package/packages/modal/index.js +4 -4
  59. package/packages/modal/src/index.vue +184 -184
  60. package/packages/models/form-group-model/index.js +4 -4
  61. package/packages/models/form-group-model/src/index.vue +271 -273
  62. package/packages/models/form-model/index.js +4 -4
  63. package/packages/models/form-model/src/index.vue +236 -232
  64. package/packages/models/step-model/index.js +4 -4
  65. package/packages/models/step-model/src/index.vue +224 -224
  66. package/packages/models/tree-table-model/README.md +0 -0
  67. package/packages/models/tree-table-model/index.js +4 -4
  68. package/packages/models/tree-table-model/src/index.vue +964 -689
  69. package/packages/pagination/index.js +5 -0
  70. package/packages/pagination/src/index.vue +372 -0
  71. package/packages/radio/index.js +4 -4
  72. package/packages/radio/src/index.vue +56 -56
  73. package/packages/select/index.js +4 -4
  74. package/packages/select/src/index.vue +113 -105
  75. package/packages/select-entity/index.js +4 -4
  76. package/packages/select-entity/src/index.vue +119 -119
  77. package/packages/table/index.js +4 -4
  78. package/packages/table/src/action.vue +176 -172
  79. package/packages/table/src/index.vue +605 -319
  80. package/packages/tabs/index.js +4 -4
  81. package/packages/tabs/src/index.vue +55 -55
  82. package/packages/text/index.js +4 -4
  83. package/packages/text/src/index.vue +47 -47
  84. package/packages/text-editor/index.js +4 -4
  85. package/packages/text-editor/src/index.vue +72 -72
  86. package/packages/textarea/index.js +4 -4
  87. package/packages/textarea/src/index.vue +57 -57
  88. package/packages/theme/form.scss +21 -21
  89. package/packages/theme/index.scss +43 -43
  90. package/packages/theme/overrid.scss +7 -7
  91. package/packages/theme/styleClass.scss +2 -2
  92. package/packages/theme/variables.scss +55 -55
  93. package/packages/timeline/index.js +4 -4
  94. package/packages/timeline/src/index.vue +257 -257
  95. package/packages/tpl/index.js +4 -4
  96. package/packages/tpl/src/index.vue +55 -55
  97. package/packages/tree/index.js +4 -4
  98. package/packages/tree/src/TreeNode.vue +29 -29
  99. package/packages/tree/src/index.vue +101 -101
  100. package/packages/tree-select/index.js +4 -4
  101. package/packages/tree-select/src/index.vue +142 -142
  102. package/packages/upload/index.js +4 -4
  103. package/packages/upload/src/index.vue +998 -494
  104. package/packages/utils/README.md +172 -0
  105. package/packages/utils/index.js +66 -62
  106. package/packages/utils/runtime-context/dataPoolAPI.js +501 -0
  107. package/packages/utils/runtime-context/globalDataPool.js +279 -0
  108. package/packages/utils/runtime-context/index.js +76 -0
  109. package/packages/utils/runtime-context/modelSchema.js +174 -0
  110. package/scripts/rollup.config.js +42 -42
  111. package/scripts/rollup.esm.config.js +11 -11
  112. package/scripts/rollup.umd.config.js +17 -14
  113. package/vitest.config.js +17 -0
@@ -1,104 +1,104 @@
1
- <template>
2
- <ele-modal :title="title" :value="value" :size="size" @cancel="onCancel" v-on="overrideEvents" :buttonGroupMeta="buttonGroupMeta">
3
- <ele-alert v-if="alert" v-bind="alert"></ele-alert>
4
- <div v-if="contentText" class="ele-modal-confirm__content">
5
- {{ contentText }}
6
- </div>
7
- </ele-modal>
8
- </template>
9
-
10
- <script>
11
- import { CONTEXT } from '../../../utils'
12
- export default {
13
- name: 'ele-modal-confirm',
14
- model: {
15
- event: 'change',
16
- prop: 'value'
17
- },
18
- props: {
19
- title: {
20
- type: String
21
- },
22
- size: {
23
- type: String,
24
- default: 'small'
25
- },
26
- alert: {
27
- type: [Object, Boolean],
28
- default: () => ({
29
- type: 'warning',
30
- message: '确定要删除吗?',
31
- description: '删除后将无法恢复',
32
- closable: false
33
- })
34
- },
35
- contentText: {
36
- type: String
37
- },
38
- value: {
39
- type: Boolean,
40
- default: false
41
- },
42
- buttonGroupMeta: {
43
- type: Object
44
- },
45
- //!deprecated
46
- contextProp: {
47
- type: Object,
48
- default: () => ({})
49
- }
50
- },
51
- inject: {
52
- [CONTEXT]: {
53
- default: () => (() => ({}))
54
- }
55
- },
56
- data () {
57
- return {}
58
- },
59
- computed: {
60
- currentContext () {
61
- const { exposed: exposedData = {} } = this[CONTEXT]()
62
- const exposed = Object.assign({}, exposedData, { closeModalConfirm: this.closeModalConfirm })
63
- return {
64
- _route: this.$route.query,
65
- _routeMeta: this.$route.meta,
66
- ...this[CONTEXT](),
67
- exposed
68
- }
69
- },
70
- overrideEvents () {
71
- if (!this.buttonGroupMeta) return {}
72
- const { elements = [] } = this.buttonGroupMeta
73
- const events = elements.reduce((ret, ele) =>{
74
- ret[ele.eventName || 'click'] = (e) => {
75
- this.$emit(ele.eventName || 'click', { ...e, ...this.currentContext })
76
- }
77
- return ret
78
- }, {})
79
- return {
80
- ...events
81
- }
82
- }
83
- },
84
- methods: {
85
- closeModalConfirm () {
86
- this.$emit('change', false)
87
- },
88
- onCancel () {
89
- this.$emit('change', false)
90
- }
91
- }
92
- }
93
- </script>
94
- <style lang="scss">
95
- @import '../../../theme/index';
96
- </style>
97
- <style lang="scss" scoped>
98
- .ele-modal-confirm__content {
99
- margin-top: 8px;
100
- color: var(--idoole-black-088);
101
- font-size: 14px;
102
- line-height: 22px;
103
- }
1
+ <template>
2
+ <ele-modal :title="title" :value="value" :size="size" @cancel="onCancel" v-on="overrideEvents" :buttonGroupMeta="buttonGroupMeta">
3
+ <ele-alert v-if="alert" v-bind="alert"></ele-alert>
4
+ <div v-if="contentText" class="ele-modal-confirm__content">
5
+ {{ contentText }}
6
+ </div>
7
+ </ele-modal>
8
+ </template>
9
+
10
+ <script>
11
+ import { CONTEXT } from '../../../utils'
12
+ export default {
13
+ name: 'ele-modal-confirm',
14
+ model: {
15
+ event: 'change',
16
+ prop: 'value'
17
+ },
18
+ props: {
19
+ title: {
20
+ type: String
21
+ },
22
+ size: {
23
+ type: String,
24
+ default: 'small'
25
+ },
26
+ alert: {
27
+ type: [Object, Boolean],
28
+ default: () => ({
29
+ type: 'warning',
30
+ message: '确定要删除吗?',
31
+ description: '删除后将无法恢复',
32
+ closable: false
33
+ })
34
+ },
35
+ contentText: {
36
+ type: String
37
+ },
38
+ value: {
39
+ type: Boolean,
40
+ default: false
41
+ },
42
+ buttonGroupMeta: {
43
+ type: Object
44
+ },
45
+ //!deprecated
46
+ contextProp: {
47
+ type: Object,
48
+ default: () => ({})
49
+ }
50
+ },
51
+ inject: {
52
+ [CONTEXT]: {
53
+ default: () => (() => ({}))
54
+ }
55
+ },
56
+ data () {
57
+ return {}
58
+ },
59
+ computed: {
60
+ currentContext () {
61
+ const { exposed: exposedData = {} } = this[CONTEXT]()
62
+ const exposed = Object.assign({}, exposedData, { closeModalConfirm: this.closeModalConfirm })
63
+ return {
64
+ _route: this.$route.query,
65
+ _routeMeta: this.$route.meta,
66
+ ...this[CONTEXT](),
67
+ exposed
68
+ }
69
+ },
70
+ overrideEvents () {
71
+ if (!this.buttonGroupMeta) return {}
72
+ const { elements = [] } = this.buttonGroupMeta
73
+ const events = elements.reduce((ret, ele) =>{
74
+ ret[ele.eventName || 'click'] = (e) => {
75
+ this.$emit(ele.eventName || 'click', { ...e, ...this.currentContext })
76
+ }
77
+ return ret
78
+ }, {})
79
+ return {
80
+ ...events
81
+ }
82
+ }
83
+ },
84
+ methods: {
85
+ closeModalConfirm () {
86
+ this.$emit('change', false)
87
+ },
88
+ onCancel () {
89
+ this.$emit('change', false)
90
+ }
91
+ }
92
+ }
93
+ </script>
94
+ <style lang="scss">
95
+ @import '../../../theme/index';
96
+ </style>
97
+ <style lang="scss" scoped>
98
+ .ele-modal-confirm__content {
99
+ margin-top: 8px;
100
+ color: var(--idoole-black-088);
101
+ font-size: 14px;
102
+ line-height: 22px;
103
+ }
104
104
  </style>
@@ -1,5 +1,5 @@
1
- import EleModalForm from './src/index.vue'
2
-
3
- EleModalForm.install = Vue => Vue.component(EleModalForm.name, EleModalForm)
4
-
1
+ import EleModalForm from './src/index.vue'
2
+
3
+ EleModalForm.install = Vue => Vue.component(EleModalForm.name, EleModalForm)
4
+
5
5
  export default EleModalForm
@@ -1,231 +1,231 @@
1
- <template>
2
- <ele-modal
3
- :title="modalTitle"
4
- :value="innerValue"
5
- :size="modalSize"
6
- v-on="assignAttrForEvents"
7
- :button-group-meta="buildButtonGroupMeta">
8
- <ele-form :ref="formRef" :elements="elements" @x:mounted="formMounted"></ele-form>
9
- </ele-modal>
10
- </template>
11
-
12
- <script>
13
- import { v4 as uuidv4 } from 'uuid'
14
- import { net, type } from '@idooel/shared'
15
- import { parse } from '@idooel/expression'
16
- import { BUILT_IN_EVENT_NAMES, BUILT_IN_METHODS_NAMES, parseFieldMap, RESERVE_EVENT_NAMES, PAGE_STATUS, CONTEXT } from '../../../utils'
17
- export default {
18
- name: 'ele-modal-form',
19
- model: {
20
- prop: 'value',
21
- event: 'change'
22
- },
23
- props: {
24
- title: {
25
- type: String,
26
- default: 'ModalForm'
27
- },
28
- size: {
29
- type: String
30
- },
31
- value: {
32
- type: Boolean,
33
- default: false
34
- },
35
- meta: {
36
- type: Object
37
- }
38
- },
39
- data() {
40
- return {
41
- innerValue: false,
42
- formModel: {}
43
- }
44
- },
45
- inject: {
46
- context: {
47
- default: () => ({})
48
- },
49
- [CONTEXT]: {
50
- default: () => (() => {})
51
- }
52
- },
53
- computed: {
54
- currentExposed () {
55
- return {
56
- formModel: this.formModels(),
57
- validateFields: this.validateFields,
58
- setFieldsValue: this.setFieldsValue,
59
- submitForm: this.submitRequestTrigger
60
- }
61
- },
62
- globalDisabled () {
63
- return this.executeExpression(this.disabled)
64
- },
65
- assignAttrForEvents () {
66
- const events = this.footerMetaElements.reduce((ret, ele) => {
67
- ret[ele.eventName] = (e) => {
68
- const { exposed = {} } = e
69
- Object.assign(exposed, { ...this.currentExposed })
70
- this.$emit(ele.eventName || 'click', { ...e, formModel: this.formModels() })
71
- }
72
- return ret
73
- }, {})
74
- return {
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
- expressionData () {
81
- return {
82
- _route: this.$route.query,
83
- _routeMeta: this.$route.meta
84
- }
85
- },
86
- formRef () {
87
- return uuidv4()
88
- },
89
- buttonGroupMeta () {
90
- const { footerMeta = {} } = this.meta
91
- return footerMeta
92
- },
93
- footerMetaElements () {
94
- const { elements = [] } = this.buttonGroupMeta
95
- if (type.isFunction(elements)) {
96
- return elements.call(this)
97
- }
98
- return elements
99
- },
100
- buildButtonGroupMeta () {
101
- return { ...this.buttonGroupMeta, elements: this.footerMetaElements }
102
- },
103
- formMeta () {
104
- const { formMeta = {} } = this.meta
105
- return formMeta
106
- },
107
- preRequest () {
108
- const { preRequest } = this.formMeta
109
- return preRequest
110
- },
111
- infoRequest () {
112
- const { infoRequest } = this.formMeta
113
- return infoRequest
114
- },
115
- submitRequest () {
116
- const { submitRequest } = this.formMeta
117
- return submitRequest
118
- },
119
- elements () {
120
- const { elements = [] } = this.formMeta
121
- return elements
122
- },
123
- modalSize () {
124
- const { size } = this.meta
125
- return size ? size : this.size
126
- },
127
- modalTitle () {
128
- const { title } = this.meta
129
- return title ? title : this.title
130
- },
131
- exposedMethods () {
132
- return {
133
- [BUILT_IN_METHODS_NAMES.CLOSE_MODAL]: this[BUILT_IN_METHODS_NAMES.CLOSE_MODAL]
134
- }
135
- },
136
- contextData () {
137
- return this[CONTEXT].call(this)
138
- }
139
- },
140
- watch: {
141
- value: {
142
- async handler (value) {
143
- this.innerValue = value
144
- },
145
- immediate: true
146
- }
147
- },
148
- methods: {
149
- async formMounted (ref) {
150
- const { setFormModel } = ref
151
- await this.preRequestTrigger({ setFormModel })
152
- await this.infoRequestTrigger({ setFormModel })
153
- },
154
- [BUILT_IN_METHODS_NAMES.CLOSE_MODAL] () {
155
- this.innerValue = false
156
- this.$emit('change', this.innerValue)
157
- },
158
- formModels () {
159
- return this.$refs[this.formRef] ? this.$refs[this.formRef].getFieldsValue() : {}
160
- },
161
- execFieldMap (fieldMap = {}, dataSource = {}) {
162
- const contxtData = this[CONTEXT].call(this)
163
- const { exposed = {} } = contxtData
164
- const ret = parseFieldMap(fieldMap, { _route: this.$route.query, exposed: exposed, ...exposed, ...dataSource})
165
- return ret
166
- },
167
- executeExpression (expression, dataSource = {}) {
168
- if (type.isBool(expression)) return expression
169
- if (type.isEmpty(expression)) return false
170
- return parse(expression, { ...this.expressionData, ...this.formModels(), ...dataSource })
171
- },
172
- async submitRequestTrigger (props = {}) {
173
- const { exposed = {} } = this.contextData
174
- const { requestTableData } = exposed
175
- const { url, requestType, headers = {}, params = {}, fieldMap = {} } = this.submitRequest
176
- if (!url) return
177
- const ret = await net[requestType.toLowerCase()](url, { ...params, ...this.execFieldMap(fieldMap, { ...this.formModels() }), ...this.formModels() }, { headers }).then(resp => {
178
- this.$emit(BUILT_IN_EVENT_NAMES.SUBMIT, { ...props, formModel: { ...this.formModels(), ...resp.data || {} } })
179
- requestTableData && requestTableData()
180
- this.innerValue = false
181
- this.$emit('change', this.innerValue)
182
- return resp.data
183
- })
184
- return ret
185
- },
186
- async infoRequestTrigger ({ setFormModel }) {
187
- if (PAGE_STATUS.CREATE == this.routeMetaMode) return
188
- if (!this.infoRequest) return
189
- const { url, requestType, params = {}, fieldMap = {}, headers = {} } = this.infoRequest
190
- if (!url) return
191
- net[requestType.toLowerCase()](url, { ...params, ...this.execFieldMap(fieldMap) }, { ...headers }).then(resp => {
192
- const { data = {} } = resp
193
- this.setFieldsValue(data)
194
- setFormModel(data)
195
- this.$emit(RESERVE_EVENT_NAMES.INIT_FORM, { ...data })
196
- })
197
- },
198
- async preRequestTrigger ({ setFormModel }) {
199
- const { url, requestType = 'GET', params = {}, fieldMap = {}, headers = {} } = this.preRequest
200
- if (!url) return
201
- const { data } = await net[requestType.toLowerCase()](url, { ...params, ...this.execFieldMap(fieldMap) }, { ...headers })
202
- this.setFieldsValue(data)
203
- setFormModel(data)
204
- this.$emit(RESERVE_EVENT_NAMES.INIT_FORM, { ...data })
205
- },
206
- setFieldsValue (props) {
207
- this.$nextTick(() => {
208
- this.$refs[this.formRef].setFieldsValue(props)
209
- })
210
- },
211
- validateFields () {
212
- return this.$refs[this.formRef].validateFields()
213
- },
214
- [BUILT_IN_EVENT_NAMES.SUBMIT] (props = {}) {
215
- if (this.globalDisabled) return
216
- const status = this.$refs[this.formRef].validateFields()
217
- if (status) {
218
- //TODO fieldMap
219
- return this.submitRequestTrigger(props)
220
- } else {
221
- return false
222
- }
223
- },
224
- [BUILT_IN_EVENT_NAMES.CANCEL] (props = {}) {
225
- this.innerValue = false
226
- this.$emit('change', this.innerValue)
227
- this.$emit(BUILT_IN_EVENT_NAMES.CANCEL, { ...props })
228
- }
229
- }
230
- }
1
+ <template>
2
+ <ele-modal
3
+ :title="modalTitle"
4
+ :value="innerValue"
5
+ :size="modalSize"
6
+ v-on="assignAttrForEvents"
7
+ :button-group-meta="buildButtonGroupMeta">
8
+ <ele-form :ref="formRef" :elements="elements" @x:mounted="formMounted"></ele-form>
9
+ </ele-modal>
10
+ </template>
11
+
12
+ <script>
13
+ import { v4 as uuidv4 } from 'uuid'
14
+ import { net, type } from '@idooel/shared'
15
+ import { parse } from '@idooel/expression'
16
+ import { BUILT_IN_EVENT_NAMES, BUILT_IN_METHODS_NAMES, parseFieldMap, RESERVE_EVENT_NAMES, PAGE_STATUS, CONTEXT } from '../../../utils'
17
+ export default {
18
+ name: 'ele-modal-form',
19
+ model: {
20
+ prop: 'value',
21
+ event: 'change'
22
+ },
23
+ props: {
24
+ title: {
25
+ type: String,
26
+ default: 'ModalForm'
27
+ },
28
+ size: {
29
+ type: String
30
+ },
31
+ value: {
32
+ type: Boolean,
33
+ default: false
34
+ },
35
+ meta: {
36
+ type: Object
37
+ }
38
+ },
39
+ data() {
40
+ return {
41
+ innerValue: false,
42
+ formModel: {}
43
+ }
44
+ },
45
+ inject: {
46
+ context: {
47
+ default: () => ({})
48
+ },
49
+ [CONTEXT]: {
50
+ default: () => (() => {})
51
+ }
52
+ },
53
+ computed: {
54
+ currentExposed () {
55
+ return {
56
+ formModel: this.formModels(),
57
+ validateFields: this.validateFields,
58
+ setFieldsValue: this.setFieldsValue,
59
+ submitForm: this.submitRequestTrigger
60
+ }
61
+ },
62
+ globalDisabled () {
63
+ return this.executeExpression(this.disabled)
64
+ },
65
+ assignAttrForEvents () {
66
+ const events = this.footerMetaElements.reduce((ret, ele) => {
67
+ ret[ele.eventName] = (e) => {
68
+ const { exposed = {} } = e
69
+ Object.assign(exposed, { ...this.currentExposed })
70
+ this.$emit(ele.eventName || 'click', { ...e, formModel: this.formModels() })
71
+ }
72
+ return ret
73
+ }, {})
74
+ return {
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
+ expressionData () {
81
+ return {
82
+ _route: this.$route.query,
83
+ _routeMeta: this.$route.meta
84
+ }
85
+ },
86
+ formRef () {
87
+ return uuidv4()
88
+ },
89
+ buttonGroupMeta () {
90
+ const { footerMeta = {} } = this.meta
91
+ return footerMeta
92
+ },
93
+ footerMetaElements () {
94
+ const { elements = [] } = this.buttonGroupMeta
95
+ if (type.isFunction(elements)) {
96
+ return elements.call(this)
97
+ }
98
+ return elements
99
+ },
100
+ buildButtonGroupMeta () {
101
+ return { ...this.buttonGroupMeta, elements: this.footerMetaElements }
102
+ },
103
+ formMeta () {
104
+ const { formMeta = {} } = this.meta
105
+ return formMeta
106
+ },
107
+ preRequest () {
108
+ const { preRequest } = this.formMeta
109
+ return preRequest
110
+ },
111
+ infoRequest () {
112
+ const { infoRequest } = this.formMeta
113
+ return infoRequest
114
+ },
115
+ submitRequest () {
116
+ const { submitRequest } = this.formMeta
117
+ return submitRequest
118
+ },
119
+ elements () {
120
+ const { elements = [] } = this.formMeta
121
+ return elements
122
+ },
123
+ modalSize () {
124
+ const { size } = this.meta
125
+ return size ? size : this.size
126
+ },
127
+ modalTitle () {
128
+ const { title } = this.meta
129
+ return title ? title : this.title
130
+ },
131
+ exposedMethods () {
132
+ return {
133
+ [BUILT_IN_METHODS_NAMES.CLOSE_MODAL]: this[BUILT_IN_METHODS_NAMES.CLOSE_MODAL]
134
+ }
135
+ },
136
+ contextData () {
137
+ return this[CONTEXT].call(this)
138
+ }
139
+ },
140
+ watch: {
141
+ value: {
142
+ async handler (value) {
143
+ this.innerValue = value
144
+ },
145
+ immediate: true
146
+ }
147
+ },
148
+ methods: {
149
+ async formMounted (ref) {
150
+ const { setFormModel } = ref
151
+ await this.preRequestTrigger({ setFormModel })
152
+ await this.infoRequestTrigger({ setFormModel })
153
+ },
154
+ [BUILT_IN_METHODS_NAMES.CLOSE_MODAL] () {
155
+ this.innerValue = false
156
+ this.$emit('change', this.innerValue)
157
+ },
158
+ formModels () {
159
+ return this.$refs[this.formRef] ? this.$refs[this.formRef].getFieldsValue() : {}
160
+ },
161
+ execFieldMap (fieldMap = {}, dataSource = {}) {
162
+ const contxtData = this[CONTEXT].call(this)
163
+ const { exposed = {} } = contxtData
164
+ const ret = parseFieldMap(fieldMap, { _route: this.$route.query, exposed: exposed, ...exposed, currentRowData: exposed.getCurrentRowData(), ...dataSource})
165
+ return ret
166
+ },
167
+ executeExpression (expression, dataSource = {}) {
168
+ if (type.isBool(expression)) return expression
169
+ if (type.isEmpty(expression)) return false
170
+ return parse(expression, { ...this.expressionData, ...this.formModels(), ...dataSource })
171
+ },
172
+ async submitRequestTrigger (props = {}) {
173
+ const { exposed = {} } = this.contextData
174
+ const { requestTableData } = exposed
175
+ const { url, requestType, headers = {}, params = {}, fieldMap = {} } = this.submitRequest
176
+ if (!url) return
177
+ const ret = await net[requestType.toLowerCase()](url, { ...params, ...this.execFieldMap(fieldMap, { ...this.formModels() }), ...this.formModels() }, { headers }).then(resp => {
178
+ this.$emit(BUILT_IN_EVENT_NAMES.SUBMIT, { ...props, formModel: { ...this.formModels(), ...resp.data || {} } })
179
+ requestTableData && requestTableData()
180
+ this.innerValue = false
181
+ this.$emit('change', this.innerValue)
182
+ return resp.data
183
+ })
184
+ return ret
185
+ },
186
+ async infoRequestTrigger ({ setFormModel }) {
187
+ if (PAGE_STATUS.CREATE == this.routeMetaMode) return
188
+ if (!this.infoRequest) return
189
+ const { url, requestType, params = {}, fieldMap = {}, headers = {} } = this.infoRequest
190
+ if (!url) return
191
+ net[requestType.toLowerCase()](url, { ...params, ...this.execFieldMap(fieldMap) }, { ...headers }).then(resp => {
192
+ const { data = {} } = resp
193
+ this.setFieldsValue(data)
194
+ setFormModel(data)
195
+ this.$emit(RESERVE_EVENT_NAMES.INIT_FORM, { ...data })
196
+ })
197
+ },
198
+ async preRequestTrigger ({ setFormModel }) {
199
+ const { url, requestType = 'GET', params = {}, fieldMap = {}, headers = {} } = this.preRequest
200
+ if (!url) return
201
+ const { data } = await net[requestType.toLowerCase()](url, { ...params, ...this.execFieldMap(fieldMap) }, { ...headers })
202
+ this.setFieldsValue(data)
203
+ setFormModel(data)
204
+ this.$emit(RESERVE_EVENT_NAMES.INIT_FORM, { ...data })
205
+ },
206
+ setFieldsValue (props) {
207
+ this.$nextTick(() => {
208
+ this.$refs[this.formRef].setFieldsValue(props)
209
+ })
210
+ },
211
+ validateFields () {
212
+ return this.$refs[this.formRef].validateFields()
213
+ },
214
+ async [BUILT_IN_EVENT_NAMES.SUBMIT] (props = {}) {
215
+ if (this.globalDisabled) return
216
+ const status = await this.$refs[this.formRef].validateFields()
217
+ if (status) {
218
+ //TODO fieldMap
219
+ return this.submitRequestTrigger(props)
220
+ } else {
221
+ return false
222
+ }
223
+ },
224
+ [BUILT_IN_EVENT_NAMES.CANCEL] (props = {}) {
225
+ this.innerValue = false
226
+ this.$emit('change', this.innerValue)
227
+ this.$emit(BUILT_IN_EVENT_NAMES.CANCEL, { ...props })
228
+ }
229
+ }
230
+ }
231
231
  </script>