|
|
|
@ -21,7 +21,16 @@ import { set } from 'lodash-es'
|
|
|
|
import { FormProps } from './types'
|
|
|
|
import { FormProps } from './types'
|
|
|
|
import { Icon } from '@/components/Icon'
|
|
|
|
import { Icon } from '@/components/Icon'
|
|
|
|
import { FormSchema, FormSetPropsType } from '@/types/form'
|
|
|
|
import { FormSchema, FormSetPropsType } from '@/types/form'
|
|
|
|
import { ComponentNameEnum, SelectComponentProps, SelectOption } from '@/types/components.d'
|
|
|
|
import {
|
|
|
|
|
|
|
|
ComponentNameEnum,
|
|
|
|
|
|
|
|
SelectComponentProps,
|
|
|
|
|
|
|
|
SelectOption,
|
|
|
|
|
|
|
|
RadioComponentProps
|
|
|
|
|
|
|
|
} from '@/types/components.d'
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
const { renderSelectOptions } = useRenderSelect()
|
|
|
|
|
|
|
|
const { renderRadioOptions } = useRenderRadio()
|
|
|
|
|
|
|
|
const { renderCheckboxOptions } = useRenderCheckbox()
|
|
|
|
|
|
|
|
|
|
|
|
const { getPrefixCls } = useDesign()
|
|
|
|
const { getPrefixCls } = useDesign()
|
|
|
|
|
|
|
|
|
|
|
|
@ -181,7 +190,7 @@ export default defineComponent({
|
|
|
|
// 如果是select组件,并且没有自定义模板,自动渲染options
|
|
|
|
// 如果是select组件,并且没有自定义模板,自动渲染options
|
|
|
|
if (item.component === ComponentNameEnum.SELECT) {
|
|
|
|
if (item.component === ComponentNameEnum.SELECT) {
|
|
|
|
slotsMap.default = !componentSlots.default
|
|
|
|
slotsMap.default = !componentSlots.default
|
|
|
|
? () => renderOptions(item)
|
|
|
|
? () => renderSelectOptions(item)
|
|
|
|
: () => {
|
|
|
|
: () => {
|
|
|
|
return componentSlots.default(
|
|
|
|
return componentSlots.default(
|
|
|
|
unref((item?.componentProps as SelectComponentProps)?.options)
|
|
|
|
unref((item?.componentProps as SelectComponentProps)?.options)
|
|
|
|
@ -231,15 +240,42 @@ export default defineComponent({
|
|
|
|
<ElFormItem {...(item.formItemProps || {})} prop={item.field} label={item.label || ''}>
|
|
|
|
<ElFormItem {...(item.formItemProps || {})} prop={item.field} label={item.label || ''}>
|
|
|
|
{{
|
|
|
|
{{
|
|
|
|
default: () => {
|
|
|
|
default: () => {
|
|
|
|
|
|
|
|
if (slots[item.field]) {
|
|
|
|
|
|
|
|
return getSlot(slots, item.field, formModel.value)
|
|
|
|
|
|
|
|
} else {
|
|
|
|
const Com = componentMap[item.component as string] as ReturnType<
|
|
|
|
const Com = componentMap[item.component as string] as ReturnType<
|
|
|
|
typeof defineComponent
|
|
|
|
typeof defineComponent
|
|
|
|
>
|
|
|
|
>
|
|
|
|
|
|
|
|
|
|
|
|
const { autoSetPlaceholder } = unref(getProps)
|
|
|
|
const { autoSetPlaceholder } = unref(getProps)
|
|
|
|
|
|
|
|
|
|
|
|
return slots[item.field] ? (
|
|
|
|
// 需要特殊处理的组件
|
|
|
|
getSlot(slots, item.field, formModel.value)
|
|
|
|
const specialComponents = [ComponentNameEnum.RADIO]
|
|
|
|
) : (
|
|
|
|
|
|
|
|
|
|
|
|
if (specialComponents.findIndex((v) => v === item.component) !== -1) {
|
|
|
|
|
|
|
|
switch (item.component) {
|
|
|
|
|
|
|
|
case ComponentNameEnum.RADIO:
|
|
|
|
|
|
|
|
const componentProps = item.componentProps as RadioComponentProps
|
|
|
|
|
|
|
|
const valueAlias = componentProps?.props?.value || 'value'
|
|
|
|
|
|
|
|
const labelAlias = componentProps?.props?.label || 'label'
|
|
|
|
|
|
|
|
const disabledAlias = componentProps?.props?.disabled || 'disabled'
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
return componentProps?.options?.map((v) => {
|
|
|
|
|
|
|
|
return (
|
|
|
|
|
|
|
|
<Com
|
|
|
|
|
|
|
|
vModel={formModel.value[item.field]}
|
|
|
|
|
|
|
|
{...setComponentProps(item)}
|
|
|
|
|
|
|
|
label={v[valueAlias]}
|
|
|
|
|
|
|
|
disabled={v[disabledAlias]}
|
|
|
|
|
|
|
|
>
|
|
|
|
|
|
|
|
{v[labelAlias]}
|
|
|
|
|
|
|
|
</Com>
|
|
|
|
|
|
|
|
)
|
|
|
|
|
|
|
|
})
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
return (
|
|
|
|
<Com
|
|
|
|
<Com
|
|
|
|
vModel={formModel.value[item.field]}
|
|
|
|
vModel={formModel.value[item.field]}
|
|
|
|
{...(autoSetPlaceholder && setTextPlaceholder(item))}
|
|
|
|
{...(autoSetPlaceholder && setTextPlaceholder(item))}
|
|
|
|
@ -250,29 +286,27 @@ export default defineComponent({
|
|
|
|
</Com>
|
|
|
|
</Com>
|
|
|
|
)
|
|
|
|
)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
}}
|
|
|
|
}}
|
|
|
|
</ElFormItem>
|
|
|
|
</ElFormItem>
|
|
|
|
)
|
|
|
|
)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// 渲染options
|
|
|
|
// 渲染options
|
|
|
|
const renderOptions = (item: FormSchema) => {
|
|
|
|
// const renderOptions = (item: FormSchema) => {
|
|
|
|
switch (item.component) {
|
|
|
|
// switch (item.component) {
|
|
|
|
case ComponentNameEnum.SELECT:
|
|
|
|
// case ComponentNameEnum.SELECT:
|
|
|
|
const { renderSelectOptions } = useRenderSelect()
|
|
|
|
// return renderSelectOptions(item)
|
|
|
|
return renderSelectOptions(item)
|
|
|
|
// case ComponentNameEnum.RADIO:
|
|
|
|
case 'Radio':
|
|
|
|
// case 'RadioButton':
|
|
|
|
case 'RadioButton':
|
|
|
|
// return renderRadioOptions(item)
|
|
|
|
const { renderRadioOptions } = useRenderRadio()
|
|
|
|
// case 'Checkbox':
|
|
|
|
return renderRadioOptions(item)
|
|
|
|
// case 'CheckboxButton':
|
|
|
|
case 'Checkbox':
|
|
|
|
// return renderCheckboxOptions(item)
|
|
|
|
case 'CheckboxButton':
|
|
|
|
// default:
|
|
|
|
const { renderCheckboxOptions } = useRenderCheckbox()
|
|
|
|
// break
|
|
|
|
return renderCheckboxOptions(item)
|
|
|
|
// }
|
|
|
|
default:
|
|
|
|
// }
|
|
|
|
break
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// 过滤传入Form组件的属性
|
|
|
|
// 过滤传入Form组件的属性
|
|
|
|
const getFormBindValue = () => {
|
|
|
|
const getFormBindValue = () => {
|
|
|
|
|