@cainiaofe/cn-ui-lowcode
Version:
228 lines (224 loc) • 6.1 kB
JavaScript
import { Bundle } from '@ali/visualengine';
import React from 'react';
// import { createSlot } from '@ali/vu-slot-property';
import Icon from './logo.tsx';
import {
createDataSourceSetters,
createDynamicConfigSetter,
createDynamicFormConfigSetter,
createFormDataSourceSetters,
createFormDefaultValueSetters,
createFormItemSetters,
createFormStyleSetters,
} from './prototype/form-item';
import { getItemInitialValue } from '@/common/manager/filter-item';
import { DisplayPosition } from '@/common/manager/position/display-position';
import { createButtonListSetters } from '@/common/manager/button';
import { ButtonPosition } from '@/common/manager/position/button-position';
import { getBizExtendPrototype } from '@/common/manager/plugin';
import {
handleDesignFormConfig,
isFormListCurrent,
removeDataSourceByNode,
} from '@/common/util/util';
import { CnMessage, CnIcon, CnTooltip } from '@cainiaofe/cn-ui';
import DocLinkSetter from '@/common/setter/doc-link-setter';
import IdSetter from '@/common/setter/id-setter';
import {
getCnFormStepConfigSnippet,
getNodeIdSetterSnippet,
} from '@/common/manager/setter-snippet';
import { getJSExpressionPrototype } from '@/common/manager/common-style';
const CnFormBundle = Bundle.createPrototype({
title: '表单(CnForm)',
componentName: 'CnForm',
category: '表单',
enableCopy: true,
// disableBehaviors: ['copy'],
icon: Icon,
docUrl:
'https://cone.cainiao-inc.com/market/awesome?business=internationality&id=3313',
isInline: false,
isContainer: false,
hasSlot: true,
snippets: [
{
screenshot:
'https://img.alicdn.com/tfs/TB1gaZrr.T1gK0jSZFhXXaAtVXa-1048-366.png',
label: 'CnForm',
schema: {
componentName: 'CnForm',
props: {},
},
},
],
onNodeRemoveByUser(node) {
removeDataSourceByNode(node);
},
configure: [
{
name: 'isCnForm',
title: 'cnForm',
initialValue: true,
display: 'none',
},
{
name: '_context',
title: '上下文',
initialValue: {
type: 'JSExpression',
value: 'this',
},
display: 'none',
},
{
name: 'title',
title: '表单名称',
display: 'inline',
initialValue: '表单1',
tip: '当前表单的名称,方便检索使用',
setter: 'StringSetter',
},
{
name: 'doc',
title: '使用文档',
display: 'inline',
setter: (
<DocLinkSetter
link={
'https://alidocs.dingtalk.com/i/nodes/NkPaj7GAXdpWOkPeZ6p0Wqwgylnomz9B?iframeQuery=anchorId%3Dlc5ux3tsgrby21r5jjt'
}
content={'点击查看表单的正确使用姿势'}
/>
),
},
{
name: 'config',
title: '表单项配置',
display: 'accordion',
initialValue: [
{
label: '卡片',
name: 'card',
componentName: 'CnCard',
options: {
title: '卡片标题',
},
},
{
label: '子卡片',
name: 'subCard',
componentName: 'CnCardSubCard',
options: {
subTitle: '二级标题',
},
},
getItemInitialValue({
position: DisplayPosition.form,
}),
],
mutator(value) {
const nodeId = this?.getNode?.()?._id;
setTimeout(() => {
if (nodeId && Array.isArray(value)) {
handleDesignFormConfig({
newFormConfig: value,
nodeId,
});
}
});
// const current = isFormListCurrent(value);
// if(!current) {
// CnMessage.error('表单项不能位于卡片外面')
// }
},
setter: createFormItemSetters({ position: DisplayPosition.form }),
// supportVariable: true,
},
{
name: 'buttons',
title: '底部按钮栏',
display: 'accordion',
// collapsed:false,
initialValue: [
{
primaryKey: 'reset',
children: '重置',
optType: 'reset',
},
{
children: '提交',
optType: 'submit',
primaryKey: 'submit',
type: 'primary',
},
],
// supportVariable: true,
setter: createButtonListSetters({ position: ButtonPosition.form }),
},
{
name: 'formStyle',
display: 'accordion',
title: '表单样式',
collapsed: true,
extraProps: {
defaultCollapsed: true,
},
setter: {
componentName: 'ObjectSetter',
props: {
config: {
items: [
...createFormStyleSetters({
position: DisplayPosition.form,
}),
],
},
},
},
},
...createFormDefaultValueSetters({
afterRequestSuccessPosition:
ButtonPosition.formDefaultValueAfterRequestSuccess,
position: DisplayPosition.form,
}),
...createDynamicFormConfigSetter(),
...getCnFormStepConfigSnippet(),
...getBizExtendPrototype({
componentName: 'CnForm',
}),
{
title: '高级配置',
type: 'group',
collapsed: true,
display: 'accordion',
items: [
getNodeIdSetterSnippet(),
{
name: 'handleProps',
title: '手动设置组件props',
display: 'inline',
setter: getJSExpressionPrototype({
type: 'props',
}),
},
...createDataSourceSetters(),
{
name: 'beta',
tip: '测试中,不建议存量页面直接开启',
title:{
label:<div style={{display:'flex',alignItems:'center'}}>高性能版<CnTooltip
trigger={<CnIcon type='exclamation-r'/>}
>
测试中,不建议存量页面直接开启
</CnTooltip></div>
},
display: 'inline',
setter: 'BoolSetter'
},
...createDynamicConfigSetter(),
],
},
],
});
export default CnFormBundle;