UNPKG

@lljj/vue3-form-core

Version:

基于 Vue3 、JsonSchema快速构建一个带完整校验的form表单,vue3版本基础框架

56 lines (47 loc) 1.89 kB
/** * Created by Liu.Jun on 2020/4/21 9:24. */ import { h, computed } from 'vue'; import { getWidgetConfig, isSelect, optionsList } from '@lljj/vjsf-utils/formUtils'; import vueProps from '../props'; import Widget from '../../components/Widget'; export default { name: 'StringField', props: vueProps, setup(props, { attrs }) { const widgetConfig = computed(() => { // 可能是枚举数据使用select组件,否则使用 input const enumOptions = isSelect(props.schema) && optionsList(props.schema, props.uiSchema, props.curNodePath, props.rootFormData); const tempWidgetConfig = getWidgetConfig({ schema: props.schema, uiSchema: props.uiSchema, curNodePath: props.curNodePath, rootFormData: props.rootFormData, }, () => { const isNumber = props.schema.type === 'number' || props.schema.type === 'integer'; return { widget: enumOptions ? props.globalOptions.WIDGET_MAP.common.select : ( props.globalOptions.WIDGET_MAP.formats[props.schema.format] || (isNumber ? props.globalOptions.WIDGET_MAP.types.number : props.globalOptions.WIDGET_MAP.types.string) ) }; }); // 存在枚举数据列表 传入 enumOptions if (enumOptions && !tempWidgetConfig.uiProps.enumOptions) { tempWidgetConfig.uiProps.enumOptions = enumOptions; } return tempWidgetConfig; }); return () => h( Widget, { ...props, ...attrs, ...widgetConfig.value } ); } };