vxe-design
Version:
A PC-based visual designer based on Vxe UI, used for building zero-code and low-code platforms
79 lines (72 loc) • 2.63 kB
text/typescript
import { PropType, h } from 'vue'
import { defineVxeComponent } from '../../ui/src/comp'
import { VxeUI, getI18n } from '@vxe-ui/core'
import { WidgetSelectFormObjVO } from './select-data'
import { useWidgetName, useWidgetPropDataSource } from '../../form-design/src/use'
import type { VxeGlobalRendererHandles } from '../../../types'
export const WidgetSelectFormComponent = defineVxeComponent({
props: {
renderOpts: {
type: Object as PropType<VxeGlobalRendererHandles.RenderFormDesignWidgetFormViewOptions>,
default: () => ({})
},
renderParams: {
type: Object as PropType<VxeGlobalRendererHandles.RenderFormDesignWidgetFormViewParams<WidgetSelectFormObjVO>>,
default: () => ({})
}
},
emits: [],
setup (props) {
const VxeUIFormComponent = VxeUI.getComponent('vxe-form')
const VxeUIFormItemComponent = VxeUI.getComponent('vxe-form-item')
const VxeUIInputComponent = VxeUI.getComponent('vxe-input')
const VxeUISwitchComponent = VxeUI.getComponent('vxe-switch')
const { renderDataSourceFormItem } = useWidgetPropDataSource(props, {
isSubOption: true
})
const { computeKebabCaseName } = useWidgetName(props)
return () => {
const { renderParams } = props
const { widget } = renderParams
const kebabCaseName = computeKebabCaseName.value
return h(VxeUIFormComponent, {
class: ['vxe-form-design--widget-render-form-wrapper', `widget-${kebabCaseName}`],
vertical: true,
span: 24,
titleBold: true,
titleOverflow: true,
data: widget.options
}, {
default () {
return [
h(VxeUIFormItemComponent, {
title: getI18n('vxe.formDesign.widgetProp.name')
}, {
default () {
return h(VxeUIInputComponent, {
modelValue: widget.title,
'onUpdate:modelValue' (val) {
widget.title = val as string
}
})
}
}),
h(VxeUIFormItemComponent, {
title: getI18n('vxe.formDesign.widgetProp.required')
}, {
default () {
return h(VxeUISwitchComponent, {
modelValue: widget.required,
'onUpdate:modelValue' (val) {
widget.required = val as boolean
}
})
}
}),
renderDataSourceFormItem()
]
}
})
}
}
})