element-plus-jsx
Version:
基于 Element Plus 扩展 JSX 语法的组件库
43 lines (40 loc) • 1.5 kB
JavaScript
import { createVNode, mergeProps } from 'vue';
import { _get, _set } from '../../_utils/index.js';
import { defineFormFnPlugin, useFnOrRefProp } from '../../hooks.js';
import { ElSelect, ElOptionGroup, ElOption } from 'element-plus';
var selectPlugins = defineFormFnPlugin(props => {
return props.formFn.map(item => {
if (!item.slots?.default && item.type === 'select') {
return {
...item,
slots: {
default: () => createVNode(ElSelect, mergeProps({
"style": {
width: '100%'
},
"modelValue": _get(props.form.value, item.prop),
"onUpdate:modelValue": val => {
_set(props.form.value, item.prop, val);
},
"placeholder": item.placeholder,
"disabled": useFnOrRefProp(item.disabled, props)
}, item.selectProps), {
default: () => [item.selectGroupOptions?.map(groupOption => {
return createVNode(ElOptionGroup, groupOption, {
default: () => [groupOption.selectOptions?.map(option => {
return createVNode(ElOption, option, option.slots);
})],
...groupOption.slots
});
}), item.selectOptions?.map(option => {
return createVNode(ElOption, option, option.slots);
})],
...item.selectProps?.slots
})
}
};
}
return item;
});
});
export { selectPlugins as default };