import { IPublicTypeComponentMetadata, IPublicTypeSnippet } from '@alilc/lowcode-types'; const ProFormMeta: IPublicTypeComponentMetadata = { componentName: 'ProForm', title: '表单容器', category: '表单', docUrl: '', screenshot: '', devMode: 'proCode', npm: { package: 'pro-material', version: '0.1.0', exportName: 'ProForm', main: 'src\\index.tsx', destructuring: true, subName: '', }, configure: { props: [ { name: 'colon', title: { label: '展示冒号', tip: '' }, setter: { componentName: 'BoolSetter', isRequired: true, initialValue: true, }, defaultValue: true, }, { name: 'hideRequiredMark', title: { label: '隐藏必填标记', tip: '隐藏必填标记' }, setter: { componentName: 'BoolSetter', isRequired: true, initialValue: true, }, defaultValue: false, }, { type: 'group', title: '布局', display: 'accordion', items: [ { name: 'labelCol', title: '标签栅格布局设置', display: 'inline', setter: { componentName: 'ObjectSetter', props: { config: { items: [ { name: 'span', title: '宽度', setter: { componentName: 'NumberSetter', props: { min: 0, max: 24, }, }, }, { name: 'offset', title: '偏移', setter: { componentName: 'NumberSetter', props: { min: 0, max: 24, }, }, }, ], }, }, }, description: 'label 标签布局,同 `` 组件,设置 span offset 值,如 {span: 8, offset: 16},该项仅在垂直表单有效', }, { name: 'wrapperCol', title: '内容栅格布局设置', display: 'inline', setter: { componentName: 'ObjectSetter', props: { config: { items: [ { name: 'span', title: '宽度', setter: { componentName: 'NumberSetter', props: { min: 0, max: 24, }, }, }, { name: 'offset', title: '偏移', setter: { componentName: 'NumberSetter', props: { min: 0, max: 24, }, }, }, ], }, }, }, description: '需要为输入控件设置布局样式时,使用该属性,用法同 labelCol', }, ], }, { name: 'labelAlign', title: { label: '标签对齐', tip: 'label 标签的文本对齐方式', }, setter: { componentName: 'RadioGroupSetter', props: { options: [ { title: '左', value: 'left', }, { title: '右', value: 'right', }, ], }, }, defaultValue: 'right', }, { name: 'layout', title: { label: '表单布局', tip: '表单布局' }, setter: { componentName: 'RadioGroupSetter', props: { options: [ { title: '水平', value: 'horizontal', }, { title: '垂直', value: 'vertical', }, { title: '行内', value: 'inline', }, ], }, }, defaultValue: 'horizontal', }, { name: 'name', title: { label: '表单名称', tip: '表单名称,会作为表单字段 `id` 前缀使用', }, setter: { componentName: 'StringSetter', isRequired: false, initialValue: '', }, }, ], supports: { style: true, className: true, events: [ { name: 'onValuesChange', }, { name: 'onFinishFailed', }, { name: 'onFinish', description: '@name 表单结束后调用', }, { name: 'onInit', description: '@name 表单初始化成功,比如布局,label等计算完成', }, ], }, component: { isContainer: true, }, advanced: { callbacks: { onNodeAdd: (dragment, currentNode) => { const comps = ['ProFormText']; if ( !dragment || !dragment.componentMeta || !dragment.componentMeta.npm || !dragment.componentMeta.npm.package || dragment.componentMeta.npm.package.indexOf('@alilc/antd-lowcode-materials') === -1 || comps.every((comp) => dragment.componentName.indexOf(comp) === -1) ) { return; } // 为目标元素包裹一层P // const layoutPNode = currentNode.document.createNode({ // componentName: 'Form.Item', // props: { // label: '表单项: ', // }, // children: [dragment.exportSchema()], // }); // 当前dragment还未添加入node子节点,需要setTimeout处理 setTimeout(() => { currentNode.replaceChild( dragment, dragment.exportSchema(), // 避免生成新的 nodeId { reserveSchemaNodeId: true }, ); }, 1); }, }, }, }, }; const snippets: IPublicTypeSnippet[] = [ { "title": "表单容器", "screenshot": "https://alifd.alicdn.com/fusion-cool/icons/icon-antd/form-1.png", schema: { componentName: 'ProForm', }, }, ]; export default { ...ProFormMeta, snippets, };