@vxe-ui/plugin-render-antd 4.0.5 → 4.0.7

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.
package/src/form/index.ts CHANGED
@@ -1,244 +1,309 @@
1
- import { h, resolveComponent, ComponentOptions } from 'vue'
2
- import XEUtils from 'xe-utils'
3
-
4
- import type { VxeUIExport, VxeGlobalRendererHandles, FormItemContentRenderParams } from 'vxe-pc-ui'
5
-
6
- /**
7
- * 表单 - 渲染器
8
- */
9
- export function defineFormRender (VxeUI: VxeUIExport) {
10
- function isEmptyValue (cellValue: any) {
11
- return cellValue === null || cellValue === undefined || cellValue === ''
12
- }
13
-
14
- function getOnName (type: string) {
15
- return 'on' + type.substring(0, 1).toLocaleUpperCase() + type.substring(1)
16
- }
17
-
18
- function getModelProp (renderOpts: VxeGlobalRendererHandles.RenderOptions) {
19
- let prop = 'value'
20
- switch (renderOpts.name) {
21
- case 'ASwitch':
22
- prop = 'checked'
23
- break
24
- }
25
- return prop
26
- }
27
-
28
- function getModelEvent (renderOpts: VxeGlobalRendererHandles.RenderOptions) {
29
- let type = 'update:value'
30
- switch (renderOpts.name) {
31
- case 'ASwitch':
32
- type = 'update:checked'
33
- break
34
- }
35
- return type
36
- }
37
-
38
- function getChangeEvent (renderOpts: VxeGlobalRendererHandles.RenderOptions) {
39
- return 'change'
40
- }
41
-
42
- function getItemProps (renderOpts: VxeGlobalRendererHandles.RenderOptions, params: FormItemContentRenderParams, value: any, defaultProps?: { [prop: string]: any }) {
43
- return XEUtils.assign({}, defaultProps, renderOpts.props, { [getModelProp(renderOpts)]: value })
44
- }
45
-
46
- function formatText (cellValue: any) {
47
- return '' + (isEmptyValue(cellValue) ? '' : cellValue)
48
- }
49
-
50
- function getOns (renderOpts: VxeGlobalRendererHandles.RenderOptions, params: VxeGlobalRendererHandles.RenderParams, inputFunc?: Function, changeFunc?: Function) {
51
- const { events } = renderOpts
52
- const modelEvent = getModelEvent(renderOpts)
53
- const changeEvent = getChangeEvent(renderOpts)
54
- const isSameEvent = changeEvent === modelEvent
55
- const ons: { [type: string]: Function } = {}
56
- XEUtils.objectEach(events, (func: Function, key: string) => {
57
- ons[getOnName(key)] = function (...args: any[]) {
58
- func(params, ...args)
59
- }
60
- })
61
- if (inputFunc) {
62
- ons[getOnName(modelEvent)] = function (targetEvnt: any) {
63
- inputFunc(targetEvnt)
64
- if (events && events[modelEvent]) {
65
- events[modelEvent](params, targetEvnt)
66
- }
67
- if (isSameEvent && changeFunc) {
68
- changeFunc(targetEvnt)
69
- }
70
- }
71
- }
72
- if (!isSameEvent && changeFunc) {
73
- ons[getOnName(changeEvent)] = function (...args: any[]) {
74
- changeFunc(...args)
75
- if (events && events[changeEvent]) {
76
- events[changeEvent](params, ...args)
77
- }
78
- }
79
- }
80
- return ons
81
- }
82
-
83
- function getItemOns (renderOpts: VxeGlobalRendererHandles.RenderOptions, params: FormItemContentRenderParams) {
84
- const { $form, data, field } = params
85
- return getOns(renderOpts, params, (value: any) => {
86
- // 处理 model 值双向绑定
87
- XEUtils.set(data, field, value)
88
- }, () => {
89
- // 处理 change 事件相关逻辑
90
- $form.updateStatus(params)
91
- })
92
- }
93
-
94
- function cellText (cellValue: any): string[] {
95
- return [formatText(cellValue)]
96
- }
97
-
98
- function createFormItemRender (defaultProps?: { [key: string]: any }) {
99
- return function (renderOpts: VxeGlobalRendererHandles.RenderItemContentOptions & { name: string }, params: FormItemContentRenderParams) {
100
- const { data, field } = params
101
- const { name } = renderOpts
102
- const { attrs } = renderOpts
103
- const itemValue = XEUtils.get(data, field)
104
- return [
105
- h(resolveComponent(name), {
106
- ...attrs,
107
- ...getItemProps(renderOpts, params, itemValue, defaultProps),
108
- ...getItemOns(renderOpts, params)
109
- })
110
- ]
111
- }
112
- }
113
-
114
- function defaultButtonItemRender (renderOpts: VxeGlobalRendererHandles.RenderItemContentOptions, params: FormItemContentRenderParams) {
115
- const { attrs } = renderOpts
116
- const props = getItemProps(renderOpts, params, null)
117
- return [
118
- h(resolveComponent('a-button') as ComponentOptions, {
119
- ...attrs,
120
- ...props,
121
- ...getItemOns(renderOpts, params)
122
- }, {
123
- default: () => cellText(renderOpts.content || props.content)
124
- })
125
- ]
126
- }
127
-
128
- function defaultButtonsItemRender (renderOpts: VxeGlobalRendererHandles.RenderItemContentOptions, params: FormItemContentRenderParams) {
129
- const { children } = renderOpts
130
- if (children) {
131
- return children.map((childRenderOpts: VxeGlobalRendererHandles.RenderItemContentOptions) => defaultButtonItemRender(childRenderOpts, params)[0])
132
- }
133
- return []
134
- }
135
-
136
- function createFormItemRadioAndCheckboxRender () {
137
- return function (renderOpts: VxeGlobalRendererHandles.RenderItemContentOptions & { name: string }, params: FormItemContentRenderParams) {
138
- const { name, options = [], optionProps = {} } = renderOpts
139
- const { data, field } = params
140
- const { attrs } = renderOpts
141
- const labelProp = optionProps.label || 'label'
142
- const valueProp = optionProps.value || 'value'
143
- const itemValue = XEUtils.get(data, field)
144
- return [
145
- h(resolveComponent(`${name}Group`) as ComponentOptions, {
146
- ...attrs,
147
- ...getItemProps(renderOpts, params, itemValue),
148
- ...getItemOns(renderOpts, params)
149
- }, {
150
- default: () => {
151
- return options.map((option, oIndex) => {
152
- return h(resolveComponent(name) as ComponentOptions, {
153
- key: oIndex,
154
- value: option[valueProp],
155
- disabled: option.disabled
156
- }, {
157
- default: () => cellText(option[labelProp])
158
- })
159
- })
160
- }
161
- })
162
- ]
163
- }
164
- }
165
-
166
- VxeUI.renderer.mixin({
167
- AAutoComplete: {
168
- renderFormItemContent: createFormItemRender()
169
- },
170
- AInput: {
171
- renderFormItemContent: createFormItemRender()
172
- },
173
- AInputNumber: {
174
- renderFormItemContent: createFormItemRender()
175
- },
176
- ASelect: {
177
- renderFormItemContent (renderOpts, params) {
178
- const { options = [], optionGroups } = renderOpts
179
- const { data, field } = params
180
- const { attrs } = renderOpts
181
- const itemValue = XEUtils.get(data, field)
182
- const props = getItemProps(renderOpts, params, itemValue)
183
- const ons = getItemOns(renderOpts, params)
184
- if (optionGroups) {
185
- return [
186
- h(resolveComponent('a-select') as ComponentOptions, {
187
- ...attrs,
188
- ...props,
189
- options: optionGroups,
190
- ...ons
191
- })
192
- ]
193
- }
194
- return [
195
- h(resolveComponent('a-select') as ComponentOptions, {
196
- ...attrs,
197
- ...props,
198
- options: props.options || options,
199
- ...ons
200
- })
201
- ]
202
- }
203
- },
204
- ACascader: {
205
- renderFormItemContent: createFormItemRender()
206
- },
207
- ADatePicker: {
208
- renderFormItemContent: createFormItemRender()
209
- },
210
- AMonthPicker: {
211
- renderFormItemContent: createFormItemRender()
212
- },
213
- ARangePicker: {
214
- renderFormItemContent: createFormItemRender()
215
- },
216
- AWeekPicker: {
217
- renderFormItemContent: createFormItemRender()
218
- },
219
- ATimePicker: {
220
- renderFormItemContent: createFormItemRender()
221
- },
222
- ATreeSelect: {
223
- renderFormItemContent: createFormItemRender()
224
- },
225
- ARate: {
226
- renderFormItemContent: createFormItemRender()
227
- },
228
- ASwitch: {
229
- renderFormItemContent: createFormItemRender()
230
- },
231
- ARadio: {
232
- renderFormItemContent: createFormItemRadioAndCheckboxRender()
233
- },
234
- ACheckbox: {
235
- renderFormItemContent: createFormItemRadioAndCheckboxRender()
236
- },
237
- AButton: {
238
- renderFormItemContent: defaultButtonItemRender
239
- },
240
- AButtons: {
241
- renderFormItemContent: defaultButtonsItemRender
242
- }
243
- })
244
- }
1
+ import { h, resolveComponent, ComponentOptions } from 'vue'
2
+ import XEUtils from 'xe-utils'
3
+
4
+ import type { VxeUIExport, VxeGlobalRendererHandles, FormItemContentRenderParams } from 'vxe-pc-ui'
5
+
6
+ /**
7
+ * 表单 - 渲染器
8
+ */
9
+ export function defineFormRender (VxeUI: VxeUIExport) {
10
+ function isEmptyValue (cellValue: any) {
11
+ return cellValue === null || cellValue === undefined || cellValue === ''
12
+ }
13
+
14
+ function getOnName (type: string) {
15
+ return 'on' + type.substring(0, 1).toLocaleUpperCase() + type.substring(1)
16
+ }
17
+
18
+ function getModelProp (renderOpts: VxeGlobalRendererHandles.RenderOptions) {
19
+ let prop = 'value'
20
+ switch (renderOpts.name) {
21
+ case 'ASwitch':
22
+ prop = 'checked'
23
+ break
24
+ }
25
+ return prop
26
+ }
27
+
28
+ function getModelEvent (renderOpts: VxeGlobalRendererHandles.RenderOptions) {
29
+ let type = 'update:value'
30
+ switch (renderOpts.name) {
31
+ case 'ASwitch':
32
+ type = 'update:checked'
33
+ break
34
+ }
35
+ return type
36
+ }
37
+
38
+ function getChangeEvent (renderOpts: VxeGlobalRendererHandles.RenderOptions) {
39
+ return 'change'
40
+ }
41
+
42
+ function getItemProps (renderOpts: VxeGlobalRendererHandles.RenderOptions, params: FormItemContentRenderParams, value: any, defaultProps?: { [prop: string]: any }) {
43
+ return XEUtils.assign({}, defaultProps, renderOpts.props, { [getModelProp(renderOpts)]: value })
44
+ }
45
+
46
+ function formatText (cellValue: any) {
47
+ return '' + (isEmptyValue(cellValue) ? '' : cellValue)
48
+ }
49
+
50
+ function getOns (renderOpts: VxeGlobalRendererHandles.RenderOptions, params: VxeGlobalRendererHandles.RenderParams, inputFunc?: Function, changeFunc?: Function) {
51
+ const { events } = renderOpts
52
+ const modelEvent = getModelEvent(renderOpts)
53
+ const changeEvent = getChangeEvent(renderOpts)
54
+ const isSameEvent = changeEvent === modelEvent
55
+ const ons: { [type: string]: Function } = {}
56
+ XEUtils.objectEach(events, (func: Function, key: string) => {
57
+ ons[getOnName(key)] = function (...args: any[]) {
58
+ func(params, ...args)
59
+ }
60
+ })
61
+ if (inputFunc) {
62
+ ons[getOnName(modelEvent)] = function (targetEvnt: any) {
63
+ inputFunc(targetEvnt)
64
+ if (events && events[modelEvent]) {
65
+ events[modelEvent](params, targetEvnt)
66
+ }
67
+ if (isSameEvent && changeFunc) {
68
+ changeFunc(targetEvnt)
69
+ }
70
+ }
71
+ }
72
+ if (!isSameEvent && changeFunc) {
73
+ ons[getOnName(changeEvent)] = function (...args: any[]) {
74
+ changeFunc(...args)
75
+ if (events && events[changeEvent]) {
76
+ events[changeEvent](params, ...args)
77
+ }
78
+ }
79
+ }
80
+ return ons
81
+ }
82
+
83
+ function getItemOns (renderOpts: VxeGlobalRendererHandles.RenderOptions, params: FormItemContentRenderParams) {
84
+ const { $form, data, field } = params
85
+ return getOns(renderOpts, params, (value: any) => {
86
+ // 处理 model 值双向绑定
87
+ XEUtils.set(data, field, value)
88
+ }, () => {
89
+ // 处理 change 事件相关逻辑
90
+ $form.updateStatus(params)
91
+ })
92
+ }
93
+
94
+ function cellText (cellValue: any): string[] {
95
+ return [formatText(cellValue)]
96
+ }
97
+
98
+ function createFormItemRender (defaultProps?: { [key: string]: any }) {
99
+ return function (renderOpts: VxeGlobalRendererHandles.RenderItemContentOptions & { name: string }, params: FormItemContentRenderParams) {
100
+ const { data, field } = params
101
+ const { name } = renderOpts
102
+ const { attrs } = renderOpts
103
+ const itemValue = XEUtils.get(data, field)
104
+ return [
105
+ h(resolveComponent(name), {
106
+ ...attrs,
107
+ ...getItemProps(renderOpts, params, itemValue, defaultProps),
108
+ ...getItemOns(renderOpts, params)
109
+ })
110
+ ]
111
+ }
112
+ }
113
+
114
+ function defaultButtonItemRender (renderOpts: VxeGlobalRendererHandles.RenderItemContentOptions, params: FormItemContentRenderParams) {
115
+ const { attrs } = renderOpts
116
+ const props = getItemProps(renderOpts, params, null)
117
+ return [
118
+ h(resolveComponent('a-button') as ComponentOptions, {
119
+ ...attrs,
120
+ ...props,
121
+ ...getItemOns(renderOpts, params)
122
+ }, {
123
+ default: () => cellText(renderOpts.content || props.content)
124
+ })
125
+ ]
126
+ }
127
+
128
+ function defaultButtonsItemRender (renderOpts: VxeGlobalRendererHandles.RenderItemContentOptions, params: FormItemContentRenderParams) {
129
+ const { children } = renderOpts
130
+ if (children) {
131
+ return children.map((childRenderOpts: VxeGlobalRendererHandles.RenderItemContentOptions) => defaultButtonItemRender(childRenderOpts, params)[0])
132
+ }
133
+ return []
134
+ }
135
+
136
+ /**
137
+ *
138
+ * 已废弃
139
+ * @deprecated
140
+ */
141
+ function createOldFormItemRadioAndCheckboxRender () {
142
+ return function (renderOpts: VxeGlobalRendererHandles.RenderItemContentOptions & { name: string }, params: FormItemContentRenderParams) {
143
+ const { name, options = [], optionProps = {} } = renderOpts
144
+ const { data, field } = params
145
+ const { attrs } = renderOpts
146
+ const labelProp = optionProps.label || 'label'
147
+ const valueProp = optionProps.value || 'value'
148
+ const itemValue = XEUtils.get(data, field)
149
+ return [
150
+ h(resolveComponent(`${name}Group`) as ComponentOptions, {
151
+ ...attrs,
152
+ ...getItemProps(renderOpts, params, itemValue),
153
+ ...getItemOns(renderOpts, params)
154
+ }, {
155
+ default: () => {
156
+ return options.map((option, oIndex) => {
157
+ return h(resolveComponent(name) as ComponentOptions, {
158
+ key: oIndex,
159
+ value: option[valueProp],
160
+ disabled: option.disabled
161
+ }, {
162
+ default: () => cellText(option[labelProp])
163
+ })
164
+ })
165
+ }
166
+ })
167
+ ]
168
+ }
169
+ }
170
+
171
+ VxeUI.renderer.mixin({
172
+ AAutoComplete: {
173
+ renderFormItemContent: createFormItemRender()
174
+ },
175
+ AInput: {
176
+ renderFormItemContent: createFormItemRender()
177
+ },
178
+ AInputNumber: {
179
+ renderFormItemContent: createFormItemRender()
180
+ },
181
+ ASelect: {
182
+ renderFormItemContent (renderOpts, params) {
183
+ const { options = [], optionGroups } = renderOpts
184
+ const { data, field } = params
185
+ const { attrs } = renderOpts
186
+ const itemValue = XEUtils.get(data, field)
187
+ const props = getItemProps(renderOpts, params, itemValue)
188
+ const ons = getItemOns(renderOpts, params)
189
+ if (optionGroups) {
190
+ return [
191
+ h(resolveComponent('a-select') as ComponentOptions, {
192
+ ...attrs,
193
+ ...props,
194
+ options: optionGroups,
195
+ ...ons
196
+ })
197
+ ]
198
+ }
199
+ return [
200
+ h(resolveComponent('a-select') as ComponentOptions, {
201
+ ...attrs,
202
+ ...props,
203
+ options: props.options || options,
204
+ ...ons
205
+ })
206
+ ]
207
+ }
208
+ },
209
+ ACascader: {
210
+ renderFormItemContent: createFormItemRender()
211
+ },
212
+ ADatePicker: {
213
+ renderFormItemContent: createFormItemRender()
214
+ },
215
+ AMonthPicker: {
216
+ renderFormItemContent: createFormItemRender()
217
+ },
218
+ ARangePicker: {
219
+ renderFormItemContent: createFormItemRender()
220
+ },
221
+ AWeekPicker: {
222
+ renderFormItemContent: createFormItemRender()
223
+ },
224
+ ATimePicker: {
225
+ renderFormItemContent: createFormItemRender()
226
+ },
227
+ ATreeSelect: {
228
+ renderFormItemContent: createFormItemRender()
229
+ },
230
+ ARate: {
231
+ renderFormItemContent: createFormItemRender()
232
+ },
233
+ ASwitch: {
234
+ renderFormItemContent: createFormItemRender()
235
+ },
236
+ ARadioGroup: {
237
+ renderFormItemContent (renderOpts, params) {
238
+ const { options = [], optionProps = {} } = renderOpts
239
+ const { data, field } = params
240
+ const { attrs } = renderOpts
241
+ const labelProp = optionProps.label || 'label'
242
+ const valueProp = optionProps.value || 'value'
243
+ const itemValue = XEUtils.get(data, field)
244
+ return [
245
+ h(resolveComponent('a-radio-group'), {
246
+ ...attrs,
247
+ ...getItemProps(renderOpts, params, itemValue),
248
+ ...getItemOns(renderOpts, params)
249
+ }, {
250
+ default: () => {
251
+ return options.map((option, oIndex) => {
252
+ return h(resolveComponent('a-radio'), {
253
+ key: oIndex,
254
+ value: option[valueProp],
255
+ disabled: option.disabled
256
+ }, {
257
+ default: () => cellText(option[labelProp])
258
+ })
259
+ })
260
+ }
261
+ })
262
+ ]
263
+ }
264
+ },
265
+ ACheckboxGroup: {
266
+ renderFormItemContent (renderOpts, params) {
267
+ const { options = [], optionProps = {} } = renderOpts
268
+ const { data, field } = params
269
+ const { attrs } = renderOpts
270
+ const labelProp = optionProps.label || 'label'
271
+ const valueProp = optionProps.value || 'value'
272
+ const itemValue = XEUtils.get(data, field)
273
+ return [
274
+ h(resolveComponent('a-checkbox-group'), {
275
+ ...attrs,
276
+ ...getItemProps(renderOpts, params, itemValue),
277
+ ...getItemOns(renderOpts, params)
278
+ }, {
279
+ default: () => {
280
+ return options.map((option, oIndex) => {
281
+ return h(resolveComponent('a-checkbox'), {
282
+ key: oIndex,
283
+ value: option[valueProp],
284
+ disabled: option.disabled
285
+ }, {
286
+ default: () => cellText(option[labelProp])
287
+ })
288
+ })
289
+ }
290
+ })
291
+ ]
292
+ }
293
+ },
294
+ AButton: {
295
+ renderFormItemContent: defaultButtonItemRender
296
+ },
297
+
298
+ // 已废弃
299
+ ARadio: {
300
+ renderFormItemContent: createOldFormItemRadioAndCheckboxRender()
301
+ },
302
+ ACheckbox: {
303
+ renderFormItemContent: createOldFormItemRadioAndCheckboxRender()
304
+ },
305
+ AButtons: {
306
+ renderFormItemContent: defaultButtonsItemRender
307
+ }
308
+ })
309
+ }