|
|
|
|
@ -12,7 +12,6 @@ import {
|
|
|
|
|
setModel
|
|
|
|
|
} from './helper'
|
|
|
|
|
import { useRenderSelect } from './components/useRenderSelect'
|
|
|
|
|
import { useRenderCascader } from './components/useRenderCascader'
|
|
|
|
|
|
|
|
|
|
export default defineComponent({
|
|
|
|
|
name: 'VForm',
|
|
|
|
|
@ -90,7 +89,13 @@ export default defineComponent({
|
|
|
|
|
// 渲染formItem
|
|
|
|
|
function renderFormItem(item: VFormSchema) {
|
|
|
|
|
// 单独给只有options属性的组件做判断
|
|
|
|
|
const notRenderOptions = ['SelectV2', 'Cascader']
|
|
|
|
|
const notRenderOptions = ['SelectV2', 'Cascader', 'Transfer']
|
|
|
|
|
const slotsMap: Recordable = {
|
|
|
|
|
...setItemComponentSlots(slots, item?.componentProps?.slots, item.field)
|
|
|
|
|
}
|
|
|
|
|
if (item?.component !== 'SelectV2' && item.options) {
|
|
|
|
|
slotsMap.default = () => renderOptions(item)
|
|
|
|
|
}
|
|
|
|
|
return (
|
|
|
|
|
<ElFormItem {...(item.formItemProps || {})} prop={item.field} label={item.label}>
|
|
|
|
|
{() => {
|
|
|
|
|
@ -99,20 +104,12 @@ export default defineComponent({
|
|
|
|
|
<Com
|
|
|
|
|
vModel={formModel[item.field]}
|
|
|
|
|
{...(autoSetPlaceholder && setTextPlaceholder(item))}
|
|
|
|
|
{...setComponentProps(item.componentProps)}
|
|
|
|
|
options={
|
|
|
|
|
notRenderOptions.includes(item?.component as string)
|
|
|
|
|
? item.options || []
|
|
|
|
|
: undefined
|
|
|
|
|
}
|
|
|
|
|
{...setComponentProps(item)}
|
|
|
|
|
{...(notRenderOptions.includes(item?.component as string) && item.options
|
|
|
|
|
? { options: item.options || [] }
|
|
|
|
|
: {})}
|
|
|
|
|
>
|
|
|
|
|
{{
|
|
|
|
|
default: (data: Recordable) =>
|
|
|
|
|
item.options && item?.component !== 'SelectV2'
|
|
|
|
|
? renderOptions(item, data)
|
|
|
|
|
: undefined,
|
|
|
|
|
...setItemComponentSlots(slots, item?.componentProps?.slots, item.field)
|
|
|
|
|
}}
|
|
|
|
|
{{ ...slotsMap }}
|
|
|
|
|
</Com>
|
|
|
|
|
)
|
|
|
|
|
}}
|
|
|
|
|
@ -121,14 +118,11 @@ export default defineComponent({
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// 渲染options
|
|
|
|
|
function renderOptions(item: VFormSchema, data: Recordable) {
|
|
|
|
|
function renderOptions(item: VFormSchema) {
|
|
|
|
|
switch (item.component) {
|
|
|
|
|
case 'Select':
|
|
|
|
|
const { renderSelectOptions } = useRenderSelect(slots)
|
|
|
|
|
return renderSelectOptions(item)
|
|
|
|
|
case 'Cascader':
|
|
|
|
|
const { useRenderCascaderOptions } = useRenderCascader(slots)
|
|
|
|
|
return useRenderCascaderOptions(item, data)
|
|
|
|
|
default:
|
|
|
|
|
break
|
|
|
|
|
}
|
|
|
|
|
|