@vxe-ui/plugin-render-antd 3.0.0 → 3.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.
package/src/form/index.ts CHANGED
@@ -1,330 +1,356 @@
1
- import { CreateElement } 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 type
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 = 'change'
30
- switch (renderOpts.name) {
31
- case 'AInput':
32
- type = 'change.value'
33
- break
34
- case 'ARadio':
35
- case 'ACheckbox':
36
- type = 'input'
37
- break
38
- }
39
- return type
40
- }
41
-
42
- function getChangeEvent (renderOpts: VxeGlobalRendererHandles.RenderOptions) {
43
- return 'change'
44
- }
45
-
46
- function getItemProps (renderOpts: VxeGlobalRendererHandles.RenderOptions, params: FormItemContentRenderParams, value: any, defaultProps?: { [prop: string]: any }) {
47
- return XEUtils.assign({}, defaultProps, renderOpts.props, { [getModelProp(renderOpts)]: value })
48
- }
49
-
50
- function formatText (cellValue: any) {
51
- return '' + (isEmptyValue(cellValue) ? '' : cellValue)
52
- }
53
-
54
- function getOns (renderOpts: VxeGlobalRendererHandles.RenderOptions, params: VxeGlobalRendererHandles.RenderParams, inputFunc?: Function, changeFunc?: Function) {
55
- const { events } = renderOpts
56
- const modelEvent = getModelEvent(renderOpts)
57
- const changeEvent = getChangeEvent(renderOpts)
58
- const isSameEvent = changeEvent === modelEvent
59
- const ons: { [type: string]: Function } = {}
60
- XEUtils.objectEach(events, (func: Function, key: string) => {
61
- ons[getOnName(key)] = function (...args: any[]) {
62
- func(params, ...args)
63
- }
64
- })
65
- if (inputFunc) {
66
- ons[getOnName(modelEvent)] = function (targetEvnt: any) {
67
- inputFunc(targetEvnt)
68
- if (events && events[modelEvent]) {
69
- events[modelEvent](params, targetEvnt)
70
- }
71
- if (isSameEvent && changeFunc) {
72
- changeFunc(targetEvnt)
73
- }
74
- }
75
- }
76
- if (!isSameEvent && changeFunc) {
77
- ons[getOnName(changeEvent)] = function (...args: any[]) {
78
- changeFunc(...args)
79
- if (events && events[changeEvent]) {
80
- events[changeEvent](params, ...args)
81
- }
82
- }
83
- }
84
- return ons
85
- }
86
-
87
- function getItemOns (renderOpts: VxeGlobalRendererHandles.RenderOptions, params: FormItemContentRenderParams) {
88
- const { $form, data, field } = params
89
- return getOns(renderOpts, params, (value: any) => {
90
- // 处理 model 值双向绑定
91
- XEUtils.set(data, field, value)
92
- }, () => {
93
- // 处理 change 事件相关逻辑
94
- $form.updateStatus(params)
95
- })
96
- }
97
-
98
- function cellText (cellValue: any): string[] {
99
- return [formatText(cellValue)]
100
- }
101
-
102
- function createFormItemRender (defaultProps?: { [key: string]: any }) {
103
- return function (h: CreateElement, renderOpts: VxeGlobalRendererHandles.RenderItemContentOptions & { name: string }, params: FormItemContentRenderParams) {
104
- const { data, field } = params
105
- const { name } = renderOpts
106
- const { attrs } = renderOpts
107
- const itemValue = XEUtils.get(data, field)
108
- return [
109
- h(name, {
110
- attrs,
111
- props: getItemProps(renderOpts, params, itemValue, defaultProps),
112
- on: getItemOns(renderOpts, params)
113
- })
114
- ]
115
- }
116
- }
117
-
118
- function defaultButtonItemRender (h: CreateElement, renderOpts: VxeGlobalRendererHandles.RenderItemContentOptions, params: FormItemContentRenderParams) {
119
- const { attrs } = renderOpts
120
- const props = getItemProps(renderOpts, params, null)
121
- return [
122
- h('a-button', {
123
- attrs,
124
- props,
125
- on: getItemOns(renderOpts, params),
126
- scopedSlots: {
127
- default: () => cellText(renderOpts.content || props.content)
128
- }
129
- })
130
- ]
131
- }
132
-
133
- function defaultButtonsItemRender (h: CreateElement, renderOpts: VxeGlobalRendererHandles.RenderItemContentOptions, params: FormItemContentRenderParams) {
134
- const { children } = renderOpts
135
- if (children) {
136
- return children.map((childRenderOpts: VxeGlobalRendererHandles.RenderItemContentOptions) => defaultButtonItemRender(h, childRenderOpts, params)[0])
137
- }
138
- return []
139
- }
140
-
141
- /**
142
- *
143
- * 已废弃
144
- * @deprecated
145
- */
146
- function createOldFormItemRadioAndCheckboxRender () {
147
- return function (h: CreateElement, renderOpts: VxeGlobalRendererHandles.RenderItemContentOptions & { name: string }, params: FormItemContentRenderParams) {
148
- const { name, options = [], optionProps = {} } = renderOpts
149
- const { data, field } = params
150
- const { attrs } = renderOpts
151
- const labelProp = optionProps.label || 'label'
152
- const valueProp = optionProps.value || 'value'
153
- const itemValue = XEUtils.get(data, field)
154
- return [
155
- h(`${name}Group`, {
156
- attrs,
157
- props: getItemProps(renderOpts, params, itemValue),
158
- on: getItemOns(renderOpts, params),
159
- scopedSlots: {
160
- default: () => {
161
- return options.map((option, oIndex) => {
162
- return h(name, {
163
- key: oIndex,
164
- props: {
165
- value: option[valueProp],
166
- disabled: option.disabled
167
- },
168
- scopedSlots: {
169
- default: () => cellText(option[labelProp])
170
- }
171
- })
172
- })
173
- }
174
- }
175
- })
176
- ]
177
- }
178
- }
179
-
180
- VxeUI.renderer.mixin({
181
- AAutoComplete: {
182
- renderFormItemContent: createFormItemRender()
183
- },
184
- AInput: {
185
- renderFormItemContent: createFormItemRender()
186
- },
187
- AInputNumber: {
188
- renderFormItemContent: createFormItemRender()
189
- },
190
- ASelect: {
191
- renderFormItemContent (h, renderOpts, params) {
192
- const { options = [], optionGroups } = renderOpts
193
- const { data, field } = params
194
- const { attrs } = renderOpts
195
- const itemValue = XEUtils.get(data, field)
196
- const props = getItemProps(renderOpts, params, itemValue)
197
- const ons = getItemOns(renderOpts, params)
198
- if (optionGroups) {
199
- return [
200
- h('a-select', {
201
- attrs,
202
- props: {
203
- ...props,
204
- options: optionGroups
205
- },
206
- ...ons
207
- })
208
- ]
209
- }
210
- return [
211
- h('a-select', {
212
- attrs,
213
- props: {
214
- ...props,
215
- options: props.options || options
216
- },
217
- on: ons
218
- })
219
- ]
220
- }
221
- },
222
- ACascader: {
223
- renderFormItemContent: createFormItemRender()
224
- },
225
- ADatePicker: {
226
- renderFormItemContent: createFormItemRender()
227
- },
228
- AMonthPicker: {
229
- renderFormItemContent: createFormItemRender()
230
- },
231
- ARangePicker: {
232
- renderFormItemContent: createFormItemRender()
233
- },
234
- AWeekPicker: {
235
- renderFormItemContent: createFormItemRender()
236
- },
237
- ATimePicker: {
238
- renderFormItemContent: createFormItemRender()
239
- },
240
- ATreeSelect: {
241
- renderFormItemContent: createFormItemRender()
242
- },
243
- ARate: {
244
- renderFormItemContent: createFormItemRender()
245
- },
246
- ASwitch: {
247
- renderFormItemContent: createFormItemRender()
248
- },
249
- ARadioGroup: {
250
- renderFormItemContent (h, renderOpts, params) {
251
- const { options = [], optionProps = {} } = renderOpts
252
- const { data, field } = params
253
- const { attrs } = renderOpts
254
- const labelProp = optionProps.label || 'label'
255
- const valueProp = optionProps.value || 'value'
256
- const itemValue = XEUtils.get(data, field)
257
- return [
258
- h('a-radio-group', {
259
- attrs,
260
- props: getItemProps(renderOpts, params, itemValue),
261
- on: getItemOns(renderOpts, params),
262
- scopedSlots: {
263
- default: () => {
264
- return options.map((option, oIndex) => {
265
- return h('a-radio', {
266
- key: oIndex,
267
- props: {
268
- value: option[valueProp],
269
- disabled: option.disabled
270
- },
271
- scopedSlots: {
272
- default: () => cellText(option[labelProp])
273
- }
274
- })
275
- })
276
- }
277
- }
278
- })
279
- ]
280
- }
281
- },
282
- ACheckboxGroup: {
283
- renderFormItemContent (h, renderOpts, params) {
284
- const { options = [], optionProps = {} } = renderOpts
285
- const { data, field } = params
286
- const { attrs } = renderOpts
287
- const labelProp = optionProps.label || 'label'
288
- const valueProp = optionProps.value || 'value'
289
- const itemValue = XEUtils.get(data, field)
290
- return [
291
- h('a-checkbox-group', {
292
- attrs,
293
- props: getItemProps(renderOpts, params, itemValue),
294
- on: getItemOns(renderOpts, params),
295
- scopedSlots: {
296
- default: () => {
297
- return options.map((option, oIndex) => {
298
- return h('a-checkbox', {
299
- key: oIndex,
300
- props: {
301
- value: option[valueProp],
302
- disabled: option.disabled
303
- },
304
- scopedSlots: {
305
- default: () => cellText(option[labelProp])
306
- }
307
- })
308
- })
309
- }
310
- }
311
- })
312
- ]
313
- }
314
- },
315
- AButton: {
316
- renderFormItemContent: defaultButtonItemRender
317
- },
318
-
319
- // 已废弃
320
- ARadio: {
321
- renderFormItemContent: createOldFormItemRadioAndCheckboxRender()
322
- },
323
- ACheckbox: {
324
- renderFormItemContent: createOldFormItemRadioAndCheckboxRender()
325
- },
326
- AButtons: {
327
- renderFormItemContent: defaultButtonsItemRender
328
- }
329
- })
330
- }
1
+ import { CreateElement } 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 XEUtils.kebabCase(type)
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 = 'change'
30
+ switch (renderOpts.name) {
31
+ case 'AInput':
32
+ type = 'change.value'
33
+ break
34
+ case 'ARadio':
35
+ case 'ACheckbox':
36
+ type = 'input'
37
+ break
38
+ }
39
+ return type
40
+ }
41
+
42
+ function getChangeEvent (renderOpts: VxeGlobalRendererHandles.RenderOptions) {
43
+ return 'change'
44
+ }
45
+
46
+ function getItemProps (renderOpts: VxeGlobalRendererHandles.RenderOptions, params: FormItemContentRenderParams, value: any, defaultProps?: { [prop: string]: any }) {
47
+ return XEUtils.assign({}, defaultProps, renderOpts.props, { [getModelProp(renderOpts)]: value })
48
+ }
49
+
50
+ function formatText (cellValue: any) {
51
+ return '' + (isEmptyValue(cellValue) ? '' : cellValue)
52
+ }
53
+
54
+ function getOns (renderOpts: VxeGlobalRendererHandles.RenderOptions, params: VxeGlobalRendererHandles.RenderParams, inputFunc?: Function, changeFunc?: Function) {
55
+ const { events } = renderOpts
56
+ const modelEvent = getModelEvent(renderOpts)
57
+ const changeEvent = getChangeEvent(renderOpts)
58
+ const isSameEvent = changeEvent === modelEvent
59
+ const ons: { [type: string]: Function } = {}
60
+ XEUtils.objectEach(events, (func: Function, key: string) => {
61
+ ons[getOnName(key)] = function (...args: any[]) {
62
+ func(params, ...args)
63
+ }
64
+ })
65
+ if (inputFunc) {
66
+ ons[getOnName(modelEvent)] = function (targetEvnt: any) {
67
+ inputFunc(targetEvnt)
68
+ if (events && events[modelEvent]) {
69
+ events[modelEvent](params, targetEvnt)
70
+ }
71
+ if (isSameEvent && changeFunc) {
72
+ changeFunc(targetEvnt)
73
+ }
74
+ }
75
+ }
76
+ if (!isSameEvent && changeFunc) {
77
+ ons[getOnName(changeEvent)] = function (...args: any[]) {
78
+ changeFunc(...args)
79
+ if (events && events[changeEvent]) {
80
+ events[changeEvent](params, ...args)
81
+ }
82
+ }
83
+ }
84
+ return ons
85
+ }
86
+
87
+ function getItemOns (renderOpts: VxeGlobalRendererHandles.RenderOptions, params: FormItemContentRenderParams) {
88
+ const { $form, data, field } = params
89
+ return getOns(renderOpts, params, (value: any) => {
90
+ // 处理 model 值双向绑定
91
+ XEUtils.set(data, field, value)
92
+ }, () => {
93
+ // 处理 change 事件相关逻辑
94
+ $form.updateStatus(params)
95
+ })
96
+ }
97
+
98
+ function renderOptions (h: CreateElement, options: any[], optionProps: VxeGlobalRendererHandles.RenderOptionProps) {
99
+ const labelProp = optionProps.label || 'label'
100
+ const valueProp = optionProps.value || 'value'
101
+ return XEUtils.map(options, (item, oIndex) => {
102
+ return h('a-select-option', {
103
+ key: oIndex,
104
+ props: {
105
+ value: item[valueProp],
106
+ disabled: item.disabled
107
+ }
108
+ }, item[labelProp])
109
+ })
110
+ }
111
+
112
+ function cellText (cellValue: any): string[] {
113
+ return [formatText(cellValue)]
114
+ }
115
+
116
+ function createFormItemRender (defaultProps?: { [key: string]: any }) {
117
+ return function (h: CreateElement, renderOpts: VxeGlobalRendererHandles.RenderItemContentOptions & { name: string }, params: FormItemContentRenderParams) {
118
+ const { data, field } = params
119
+ const { name } = renderOpts
120
+ const { attrs } = renderOpts
121
+ const itemValue = XEUtils.get(data, field)
122
+ return [
123
+ h(name, {
124
+ attrs,
125
+ props: getItemProps(renderOpts, params, itemValue, defaultProps),
126
+ on: getItemOns(renderOpts, params)
127
+ })
128
+ ]
129
+ }
130
+ }
131
+
132
+ function defaultButtonItemRender (h: CreateElement, renderOpts: VxeGlobalRendererHandles.RenderItemContentOptions, params: FormItemContentRenderParams) {
133
+ const { attrs } = renderOpts
134
+ const props = getItemProps(renderOpts, params, null)
135
+ return [
136
+ h('a-button', {
137
+ attrs,
138
+ props,
139
+ on: getItemOns(renderOpts, params),
140
+ scopedSlots: {
141
+ default: () => cellText(renderOpts.content || props.content)
142
+ }
143
+ })
144
+ ]
145
+ }
146
+
147
+ function defaultButtonsItemRender (h: CreateElement, renderOpts: VxeGlobalRendererHandles.RenderItemContentOptions, params: FormItemContentRenderParams) {
148
+ const { children } = renderOpts
149
+ if (children) {
150
+ return children.map((childRenderOpts: VxeGlobalRendererHandles.RenderItemContentOptions) => defaultButtonItemRender(h, childRenderOpts, params)[0])
151
+ }
152
+ return []
153
+ }
154
+
155
+ /**
156
+ *
157
+ * 已废弃
158
+ * @deprecated
159
+ */
160
+ function createOldFormItemRadioAndCheckboxRender () {
161
+ return function (h: CreateElement, renderOpts: VxeGlobalRendererHandles.RenderItemContentOptions & { name: string }, params: FormItemContentRenderParams) {
162
+ const { name, options = [], optionProps = {} } = renderOpts
163
+ const { data, field } = params
164
+ const { attrs } = renderOpts
165
+ const labelProp = optionProps.label || 'label'
166
+ const valueProp = optionProps.value || 'value'
167
+ const itemValue = XEUtils.get(data, field)
168
+ return [
169
+ h(`${name}Group`, {
170
+ attrs,
171
+ props: getItemProps(renderOpts, params, itemValue),
172
+ on: getItemOns(renderOpts, params),
173
+ scopedSlots: {
174
+ default: () => {
175
+ return options.map((option, oIndex) => {
176
+ return h(name, {
177
+ key: oIndex,
178
+ props: {
179
+ value: option[valueProp],
180
+ disabled: option.disabled
181
+ },
182
+ scopedSlots: {
183
+ default: () => cellText(option[labelProp])
184
+ }
185
+ })
186
+ })
187
+ }
188
+ }
189
+ })
190
+ ]
191
+ }
192
+ }
193
+
194
+ VxeUI.renderer.mixin({
195
+ AAutoComplete: {
196
+ renderFormItemContent: createFormItemRender()
197
+ },
198
+ AInput: {
199
+ renderFormItemContent: createFormItemRender()
200
+ },
201
+ AInputNumber: {
202
+ renderFormItemContent: createFormItemRender()
203
+ },
204
+ ASelect: {
205
+ renderFormItemContent (h, renderOpts, params) {
206
+ const { options = [], optionGroups, optionProps = {}, optionGroupProps = {} } = renderOpts
207
+ const { data, field } = params
208
+ const { attrs } = renderOpts
209
+ const itemValue = XEUtils.get(data, field)
210
+ const props = getItemProps(renderOpts, params, itemValue)
211
+ const ons = getItemOns(renderOpts, params)
212
+ if (optionGroups) {
213
+ const groupOptions = optionGroupProps.options || 'options'
214
+ const groupLabel = optionGroupProps.label || 'label'
215
+ return [
216
+ h('a-select', {
217
+ attrs,
218
+ props: {
219
+ ...props,
220
+ options: undefined
221
+ },
222
+ on: ons
223
+ }, XEUtils.map(optionGroups, (group: any, gIndex: any) => {
224
+ return h('a-select-opt-group', {
225
+ key: gIndex
226
+ }, [
227
+ h('span', {
228
+ slot: 'label'
229
+ }, group[groupLabel])
230
+ ].concat(
231
+ renderOptions(h, group[groupOptions], optionProps)
232
+ ))
233
+ }))
234
+ ]
235
+ }
236
+ return [
237
+ h('a-select', {
238
+ attrs,
239
+ props: {
240
+ ...props,
241
+ options: props.options || options
242
+ },
243
+ on: ons
244
+ })
245
+ ]
246
+ }
247
+ },
248
+ ACascader: {
249
+ renderFormItemContent: createFormItemRender()
250
+ },
251
+ ADatePicker: {
252
+ renderFormItemContent: createFormItemRender()
253
+ },
254
+ AMonthPicker: {
255
+ renderFormItemContent: createFormItemRender()
256
+ },
257
+ ARangePicker: {
258
+ renderFormItemContent: createFormItemRender()
259
+ },
260
+ AWeekPicker: {
261
+ renderFormItemContent: createFormItemRender()
262
+ },
263
+ ATimePicker: {
264
+ renderFormItemContent: createFormItemRender()
265
+ },
266
+ ATreeSelect: {
267
+ renderFormItemContent: createFormItemRender()
268
+ },
269
+ ARate: {
270
+ renderFormItemContent: createFormItemRender()
271
+ },
272
+ ASwitch: {
273
+ renderFormItemContent: createFormItemRender()
274
+ },
275
+ ARadioGroup: {
276
+ renderFormItemContent (h, renderOpts, params) {
277
+ const { options = [], optionProps = {} } = renderOpts
278
+ const { data, field } = params
279
+ const { attrs } = renderOpts
280
+ const labelProp = optionProps.label || 'label'
281
+ const valueProp = optionProps.value || 'value'
282
+ const itemValue = XEUtils.get(data, field)
283
+ return [
284
+ h('a-radio-group', {
285
+ attrs,
286
+ props: getItemProps(renderOpts, params, itemValue),
287
+ on: getItemOns(renderOpts, params),
288
+ scopedSlots: {
289
+ default: () => {
290
+ return options.map((option, oIndex) => {
291
+ return h('a-radio', {
292
+ key: oIndex,
293
+ props: {
294
+ value: option[valueProp],
295
+ disabled: option.disabled
296
+ },
297
+ scopedSlots: {
298
+ default: () => cellText(option[labelProp])
299
+ }
300
+ })
301
+ })
302
+ }
303
+ }
304
+ })
305
+ ]
306
+ }
307
+ },
308
+ ACheckboxGroup: {
309
+ renderFormItemContent (h, renderOpts, params) {
310
+ const { options = [], optionProps = {} } = renderOpts
311
+ const { data, field } = params
312
+ const { attrs } = renderOpts
313
+ const labelProp = optionProps.label || 'label'
314
+ const valueProp = optionProps.value || 'value'
315
+ const itemValue = XEUtils.get(data, field)
316
+ return [
317
+ h('a-checkbox-group', {
318
+ attrs,
319
+ props: getItemProps(renderOpts, params, itemValue),
320
+ on: getItemOns(renderOpts, params),
321
+ scopedSlots: {
322
+ default: () => {
323
+ return options.map((option, oIndex) => {
324
+ return h('a-checkbox', {
325
+ key: oIndex,
326
+ props: {
327
+ value: option[valueProp],
328
+ disabled: option.disabled
329
+ },
330
+ scopedSlots: {
331
+ default: () => cellText(option[labelProp])
332
+ }
333
+ })
334
+ })
335
+ }
336
+ }
337
+ })
338
+ ]
339
+ }
340
+ },
341
+ AButton: {
342
+ renderFormItemContent: defaultButtonItemRender
343
+ },
344
+
345
+ // 已废弃
346
+ ARadio: {
347
+ renderFormItemContent: createOldFormItemRadioAndCheckboxRender()
348
+ },
349
+ ACheckbox: {
350
+ renderFormItemContent: createOldFormItemRadioAndCheckboxRender()
351
+ },
352
+ AButtons: {
353
+ renderFormItemContent: defaultButtonsItemRender
354
+ }
355
+ })
356
+ }