@ywfe/materials-design
Version:
YwDesign for lowcode
1,730 lines (1,696 loc) • 50.5 kB
text/typescript
import { getPropValueWithPath, getPropsByDependence, hideProp, uuid } from '../_utils';
import { IPublicTypeFieldConfig } from '@alilc/lowcode-types';
// const primaryKeyConfig = {
// name: 'primaryKey',
// title: { label: '编号', tip: 'primaryKey | 编号' },
// // display: 'none',
// condition: hideProp,
// defaultValue: (val: any) => {
// if (val) return val;
// return mockId();
// },
// setter: 'StringSetter',
// };
// 基础组件
const baseComponent = [
{
label: '输入框',
value: 'Input',
},
{
label: '长文本输入框',
value: 'TextArea',
},
{
label: '选择器',
value: 'Select',
},
{
label: '搜索框',
value: 'SearchSelect',
},
{
label: '级联选择器',
value: 'CascaderSelect',
},
{
label: '类目选择器',
value: 'CategorySelect',
},
{
label: '开关',
value: 'Switch',
},
{
label: '复选框',
value: 'Checkbox',
},
{
label: '单选按钮',
value: 'RadioGroup',
},
{
label: '复选组合',
value: 'CheckboxGroup',
},
{
label: '数字输入框',
value: 'NumberPicker',
},
{
label: '数字范围输入框',
value: 'NumberRangePicker',
},
{
label: '时间',
value: 'TimePicker',
},
{
label: '日期时间',
value: 'DateTimePicker',
},
{
label: '日期',
value: 'DatePicker',
},
{
label: '月份',
value: 'MonthPicker',
},
{
label: '时间范围',
value: 'TimeRangePicker',
},
{
label: '日期范围',
value: 'DateRangePicker',
},
// {
// label: 'DateRangeGroup',
// value: 'DateRangeGroup',
// },
{
label: '月范围',
value: 'MonthRangePicker',
},
{
label: '日期时间范围',
value: 'DateTimeRangePicker',
},
{
label: '树选择器',
value: 'TreeSelect',
},
];
// 预览组件
const previewComponent = [
{
label: '文本',
value: 'PreviewText.Input',
},
{
label: '选择项',
value: 'PreviewText.Select',
},
{
label: '树选择项',
value: 'PreviewText.TreeSelect',
},
{
label: '级联选择项',
value: 'PreviewText.Cascader',
},
{
label: '日期',
value: 'PreviewText.DatePicker',
},
{
label: '日期范围',
value: 'PreviewText.DateRangePicker',
},
{
label: '时间',
value: 'PreviewText.TimePicker',
},
{
label: '时间范围',
value: 'PreviewText.TimeRangePicker',
},
{
label: '数字',
value: 'PreviewText.NumberPicker',
},
];
const formItemListProps = {
name: 'component',
title: { label: '表单项组件', tip: 'component | 表单项组件' },
defaultValue: 'Input',
// important: true,
supportVariable: false,
setter: {
componentName: 'SelectSetter',
props: {
options: [
...baseComponent,
{
label: 'InputGroup',
value: 'InputGroup',
},
{
label: 'RCArrayTable',
value: 'RCArrayTable',
},
{
label: 'RCArrayItems',
value: 'RCArrayItems',
},
{
label: 'FormGrid',
value: 'FormGrid',
},
{
label: 'FormGroup',
value: 'FormGroup',
},
// {
// label: 'OrgSeletor',
// value: 'OrgSeletor',
// },
// {
// label: 'EmpSelector',
// value: 'EmpSelector',
// },
{
label: '自定义组件',
value: '',
},
],
},
},
extraProps: {
// setValue: (target, value) => {
// console.log('value', value);
// // 组件补充
// switch (value) {
// case 'Upload':
// target.parent.setPropValue('customComponent', {
// type: 'JSSlot',
// params: ['props', 'value', 'field', 'schema'],
// value: [
// {
// componentName: 'YwUpload',
// id: `node_${uuid()}`,
// props: {
// isOss: true,
// securityType: 'public',
// ossDir: '/common',
// onChange: {
// type: 'JSExpression',
// value: '(res)=>{ this.field.setValue(res[0]?.url || "")}',
// },
// },
// },
// ],
// id: `node_${uuid()}`,
// });
// break;
// case '':
// default:
// break;
// }
// },
},
};
export const customComponentProps = {
title: { label: '自定义组件', tip: 'customComponent | 自定义组件' },
name: '_render',
supportVariable: false,
defaultValue: null,
setter: {
componentName: 'SlotSetter',
title: '自定义组件插槽',
hideParams: true,
initialValue: {
type: 'JSSlot',
params: ['props', 'value', 'field', 'schema'],
value: [],
},
},
condition: (target: any) => {
return !getPropValueWithPath(target, '.component');
},
};
// export const writeOnlyProps = {
// title: { label: '是否只写', tip: 'writeOnly | 自定义组件' },
// name: 'writeOnly',
// supportVariable: false,
// condition: (target: any) => {
// return [
// 'Input',
// 'Select',
// 'TreeSelect',
// 'DatePicker',
// 'DateRangePicker',
// 'TimePicker',
// 'TimeRangePicker',
// 'NumberPicker',
// ].includes(getPropValueWithPath(target, '.component'));
// },
// extraProps: {
// setValue: () => {},
// },
// };
const labelConfig = {
name: 'title',
title: { label: '标题', tip: 'title| 标题' },
display: 'inline',
defaultValue: '表单项',
isRequired: true,
supportVariable: false,
setter: {
componentName: 'StringSetter',
// props: {
// options: window.TitleOptions,
// },
},
important: true,
};
const nameConfig = {
name: 'name',
title: {
label: '表单关联字段',
tip: 'name | 表单关联字段',
},
important: false,
supportVariable: false,
defaultValue: uuid(),
setter: {
componentName: 'MixedSetter',
props: {
setters: [
{
componentName: 'StringSetter',
},
{
componentName: 'SelectSetter',
props: {
options: (window as any)?.NameOptions || [],
showSearch: true,
},
},
],
},
},
};
const typeConfig = {
name: 'type',
title: { label: '类型', tip: 'type | 类型' },
supportVariable: false,
setter: {
componentName: 'SelectSetter',
props: {
options: [
{
label: 'string',
value: 'string',
},
{
label: 'object',
value: 'object',
},
{
label: 'array',
value: 'array',
},
{
label: 'void',
value: 'void',
},
],
},
initialValue: 'string',
},
extraProps: {
setValue: (target, value) => {
target.parent.setPropValue('decorator', value === 'void' ? 'void' : 'FormItem');
},
},
};
export const sizeConfig = {
name: 'size',
title: {
label: '尺寸',
tip: 'size | 单个 Item 的 size 自定义,优先级高于 Form 的 size, 并且当组件与 Item 一起使用时,组件自身设置 size 属性无效。',
},
setter: {
componentName: 'RadioGroupSetter',
props: {
options: [
{ label: '小', value: 'small' },
{ label: '中', value: 'medium' },
{ label: '大', value: 'large' },
],
},
},
defaultValue: 'medium',
};
export const layoutConfig = {
items: [
{
name: 'labelCol',
title: { label: '标签宽度', tip: 'labelCol | 标签宽度' },
setter: {
componentName: 'NumberSetter',
initialValue: 6,
},
},
{
name: 'wrapperCol',
title: { label: '表单项宽度', tip: 'wrapperCol | 表单项宽度' },
setter: {
componentName: 'NumberSetter',
initialValue: 10,
},
},
],
};
// const childFormConfig = {
// name: 'childForm',
// title: '开启子表单',
// setter: {
// componentName: 'SlotSetter',
// initialValue: {
// type: 'JSSlot',
// visible: false,
// value: [
// {
// componentName: 'ChildForm',
// props: {
// primaryKey: String(Math.floor(Math.random() * 10000)),
// placeholder: '请在右侧面板添加表单项+',
// placeholderStyle: {
// height: '38px',
// color: '#0088FF',
// background: '#d8d8d836',
// border: 0,
// gridArea: 'span 4 / span 4',
// },
// columns: 3,
// labelCol: {
// fixedSpan: 4,
// },
// labelAlign: 'top',
// emptyContent: '添加表单项',
// },
// children: [...new Array(3).keys()].map((item) => ({
// componentName: 'FormInput',
// props: {
// formItemProps: {
// primaryKey: String(Math.floor(Math.random() * 10000) + item),
// label: '表单项',
// size: 'medium',
// device: 'desktop',
// fullWidth: true,
// },
// placeholder: '请输入',
// },
// })),
// },
// ],
// },
// },
// };
// const enumComponentsList = ['RadioGroup', 'Select', 'CheckboxGroup'];
const enumConfig: any = {
name: 'enum',
display: 'block',
title: { label: '枚举', tip: 'enum | 枚举出表单项可选择的值' },
supportVariable: false,
condition: (target: any) => {
const index = +target.parent.key;
const { items } = target.node.propsData;
if (enumComponentsList.indexOf(items[index].component) > -1) {
return true;
}
return false;
},
defaultValue: null,
setter: {
componentName: 'MixedSetter',
props: {
setters: [
{
componentName: 'ArraySetter',
props: {
itemSetter: {
componentName: 'ObjectSetter',
props: {
config: {
items: [
{
name: 'label',
display: 'inline',
title: { label: '名称', tip: 'label | 名称' },
setter: 'StringSetter',
important: true,
supportVariable: false,
},
{
name: 'value',
display: 'inline',
title: { label: '值', tip: 'value | 值' },
setter: {
componentName: 'MixedSetter',
props: {
setters: ['StringSetter', 'NumberSetter'],
},
},
important: true,
},
],
},
},
initialValue: () => {
return {
label: '选项',
value: `id-${uuid()}`,
};
},
},
},
},
{
componentName: 'JsonSetter',
},
],
},
},
};
// const FormSchemaReaction = {
// componentName: 'ObjectSetter',
// props: {
// config: {
// items: [
// {
// name: 'dependencies',
// title: {
// label: '依赖字段',
// tip: 'dependencies | 可以通过dependencies属性,设置关联字段。当关联字段的值发生变化时,会触发校验与更新',
// },
// supportVariable: false,
// setter: {
// componentName: 'StringSetter',
// // dataSource: [],
// },
// },
// {
// name: 'target',
// title: { label: '目标字段', tip: 'target | 主动联动配置项' },
// supportVariable: false,
// setter: {
// componentName: 'StringSetter',
// // dataSource: [],
// },
// },
// {
// name: 'effects',
// title: { label: '生命周期', tip: 'effects | 执行生命周期' },
// supportVariable: false,
// setter: {
// componentName: 'SelectSetter',
// props: {
// options: [
// {
// label: 'onFieldValueChange',
// value: 'onFieldValueChange',
// },
// {
// label: 'onFieldInputValueChange',
// value: 'onFieldInputValueChange',
// },
// {
// label: 'onFieldMount',
// value: 'onFieldMount',
// },
// {
// label: 'onFieldInit',
// value: 'onFieldInit',
// },
// ],
// },
// },
// },
// {
// name: 'fulfill',
// title: { label: '满足条件', tip: 'fulfill | 满足条件' },
// supportVariable: false,
// setter: {
// componentName: 'ObjectSetter',
// props: {
// config: {
// items: [
// {
// name: 'state',
// title: { label: '表单项状态', tip: 'state | 表单项状态' },
// setter: {
// componentName: 'ObjectSetter',
// props: {
// config: {
// items: [
// {
// name: 'value',
// title: { label: '值', tip: 'value | 值' },
// setter: 'StringSetter',
// supportVariable: false,
// },
// {
// name: 'visible',
// title: { label: '是否可见', tip: 'visible | 是否可见' },
// setter: 'StringSetter',
// supportVariable: false,
// },
// {
// name: 'disabled',
// title: { label: '是否禁用', tip: 'visible | 是否禁用' },
// setter: 'StringSetter',
// supportVariable: false,
// },
// ],
// },
// },
// },
// },
// {
// name: 'schema',
// title: { label: '表单项配置项', tip: 'schema | 表单项配置项' },
// supportVariable: false,
// setter: {
// componentName: 'SelectSetter',
// props: {
// options: [
// {
// label: 'x-component',
// value: 'x-component',
// },
// ],
// },
// },
// },
// {
// name: 'run',
// title: { label: '执行函数', tip: 'schema | 执行函数' },
// supportVariable: false,
// setter: {
// componentName: 'FunctionSetter',
// },
// },
// ],
// },
// },
// },
// },
// {
// name: 'otherwise',
// title: { label: '否则', tip: 'otherwise | 否则' },
// setter: {
// componentName: 'ObjectSetter',
// props: {
// config: {
// items: [
// {
// name: 'state',
// title: { label: '表单项状态', tip: 'state | 表单项状态' },
// supportVariable: false,
// setter: {
// componentName: 'SelectSetter',
// props: {
// options: [
// {
// label: 'visible',
// value: 'visible',
// },
// {
// label: 'value',
// value: 'value',
// },
// {
// label: 'disabled',
// value: 'disabled',
// },
// ],
// },
// },
// },
// {
// name: 'schema',
// title: { label: '表单项配置项', tip: 'schema | 表单项配置项' },
// supportVariable: false,
// setter: {
// componentName: 'SelectSetter',
// props: {
// options: [],
// },
// },
// },
// {
// name: 'run',
// title: { label: '执行函数', tip: 'schema | 执行函数' },
// supportVariable: false,
// setter: {
// componentName: 'FunctionSetter',
// },
// },
// ],
// },
// },
// },
// },
// ],
// },
// },
// };
export const descriptionProps = {
title: { label: '描述', tip: 'description | 描述' },
name: 'description',
setter: 'StringSetter',
};
export const defaultValueProps = {
title: { label: '默认值', tip: 'defaultValue | 默认值' },
name: 'defaultValue',
setter: {
componentName: 'CustomJsonSetter',
props: { btnText: '去配置', titleText: '配置数据' },
},
supportVariable: false,
};
export const readOnlyProps = {
title: { label: '只读', tip: 'readOnly | 只读' },
name: 'readOnly',
setter: 'BoolSetter',
supportVariable: false,
};
export const requiredProps = {
title: { label: '必填', tip: 'required | 必填' },
name: 'required',
setter: 'BoolSetter',
supportVariable: false,
};
export const disabledProps = {
title: { label: '禁用', tip: 'disabled | 禁用' },
name: 'disabled',
setter: 'BoolSetter',
};
export const previewProps = {
title: { label: '预览态', tip: '_preview | 预览态' },
name: '_preview',
setter: 'BoolSetter',
condition: (target) => {
return previewComponent
.map((v) => v.value.split('.')[1])
.includes(getPropValueWithPath(target, '.component'));
},
};
// export const minItemsProps = {
// title: { label: '最小条目数', tip: 'minItems | 最小条目数' },
// name: 'minItems',
// setter: 'NumberSetter',
// supportVariable: false,
// condition: (target: any) => {
// return selectComponentsList.includes(getPropValueWithPath(target, '..component'));
// },
// };
// export const maxItemsProps = {
// title: { label: '最大条目数', tip: 'maxItems | 最大条目数' },
// name: 'maxItems',
// setter: 'NumberSetter',
// supportVariable: false,
// condition: (target: any) => {
// return selectComponentsList.includes(getPropValueWithPath(target, '..component'));
// },
// };
export const rulesProps = {
title: { label: '校验规则', tip: 'rules | 校验规则' },
name: 'rules',
setter: {
componentName: 'CustomJsonSetter',
props: { btnText: '去配置', titleText: '配置数据' },
},
supportVariable: false,
};
export const decoratorProps = {
name: 'decorator',
title: { label: '表单装饰器', tip: 'decorator | 表单装饰器 默认通用,带字段校验布局配置等' },
defaultValue: 'FormItem',
setter: {
componentName: 'RadioGroupSetter',
props: {
options: [
{
label: '通用',
value: 'FormItem',
},
{
label: '无',
value: 'void',
},
],
},
},
supportVariable: false,
};
export const propsProps = {
title: { label: '属性配置', tip: 'props | 属性配置' },
name: 'props',
setter: {
componentName: 'CustomJsonSetter',
props: { btnText: '去配置', titleText: '配置数据' },
},
extraProps: {
setValue: (target, value) => {
target.parent.setPropValue('decorator', value ? 'FormItem' : null);
},
},
supportVariable: false,
condition: (target: any) => {
return getPropValueWithPath(target, '.decorator') === 'FormItem';
},
};
export const getDataSourceProps = {
title: { label: '动态数据源', tip: 'getDataSource | 动态数据源' },
name: 'getDataSource',
supportVariable: false,
setter: {
componentName: 'MixedSetter',
props: {
setters: [
{
componentName: 'SchemaFunctionSetter',
props: {
title: 'getDataSource',
async: true,
properties: {
input: {
type: 'object',
properties: {
value: {
type: 'string',
},
},
required: ['value'],
},
body: {
type: 'array',
items: [
{
type: 'Function',
properties: {
template: 'RequestFunction',
variable: 'requestRes',
extraProps: {},
},
},
{
type: 'Function',
properties: {
template: 'TransformFunction',
variable: 'transformRes',
extraProps: {
source: '{{requestRes}}',
rules: {
data: [
'$.list',
{
label: '$.name',
value: '$.code',
},
],
},
},
},
},
],
},
output: 'transformRes.data',
},
},
},
],
},
},
};
// 拥有枚举选项组件
const enumComponentsList = ['RadioGroup', 'Select', 'CheckboxGroup', 'CheckboxGroup', 'RadioGroup'];
// 拥有select独有属性的组件
const selectComponentsList = ['Select', 'SearchSelect', 'CascaderSelect'];
// 业务选择器
const bizSelectorComponentsList = ['OrgSelector', 'EmpSelector'];
// 数字类型组件配置
const numberComponentsList = ['NumberPicker', 'NumberRangePicker'];
// 级联组件
const cascaderComponentsList = ['CascaderSelect', 'CategorySelect'];
// 拥有子组件的组件 复杂类型
const childComponentList = [
'FormGroup',
'RCArrayTable',
'RCArrayItems',
'ArrayCards',
'InputGroup',
];
// const arrayComponentList = ['RCArrayTable', 'RCArrayItems'];
// 类input组件
const inputComponentsList = ['Input', 'NumberRangePicker'];
const inputComponentsProps = [
{
name: 'prefix',
title: { label: '前缀', tip: 'prefix | 前缀' },
supportVariable: false,
setter: 'StringSetter',
},
{
name: 'suffix',
title: { label: '后缀', tip: 'suffix | 后缀' },
supportVariable: false,
setter: 'StringSetter',
},
];
// TextArea专用componentProps
const textAreaComponentProps = [
{
title: { label: '显示文字个数', tip: 'showCount | 显示文字个数' },
name: 'showCount',
supportVariable: false,
setter: 'BoolSetter',
},
{
title: { label: '最长文字数量', tip: 'maxLength | 最长文字数量' },
name: 'maxLength',
supportVariable: false,
setter: 'NumberSetter',
},
];
const enumComponentProps = [
{
name: 'dict',
title: { label: '字典数据源', tip: 'dict | 字典数据源' },
supportVariable: true,
},
];
const selectComponentProps = [
{
name: 'mode',
title: { label: '设置Select的模式', tip: 'mode | 设置Select的模式' },
supportVariable: false,
setter: {
componentName: 'SelectSetter',
props: {
hasClear: true,
options: [
{
label: '多选 | multiple',
value: 'multiple',
},
{
label: '标签 | tags',
value: 'tags',
},
{
label: '单选 | single',
value: 'single',
},
],
},
},
},
{
title: {
label: '字段映射',
tip: 'fieldNames | 自定义options中label value children的字段',
},
name: 'fieldNames',
setter: {
componentName: 'ObjectSetter',
props: {
config: {
items: [
{
name: 'label',
title: { label: '名称', tip: 'label | options中的名称' },
propType: 'string',
setter: 'StringSetter',
supportVariable: false,
isRequired: true,
},
{
name: 'value',
title: { label: '值', tip: 'value | options中的值' },
propType: 'string',
setter: 'StringSetter',
supportVariable: false,
isRequired: true,
},
{
name: 'children',
title: { label: '当前节点的子节点', tip: 'children | 当前节点的子节点' },
propType: 'string',
supportVariable: false,
setter: 'StringSetter',
},
],
},
},
},
},
{
title: { label: '最多显示多少个标签', tip: 'maxTagCount | 最多显示多少个标签' },
name: 'maxTagCount',
setter: 'NumberSetter',
supportVariable: false,
},
{
title: { label: '可搜索', tip: 'showSearch | 可搜索' },
name: 'showSearch',
setter: 'BoolSetter',
supportVariable: false,
},
{
name: 'optionFilterProp',
title: { label: '搜索过滤属性', tip: 'optionFilterProp | 搜索时过滤对应的option属性' },
supportVariable: false,
setter: {
componentName: 'RadioGroupSetter',
props: {
options: [
{
label: 'label',
value: 'label',
},
{
label: 'value',
value: 'value',
},
],
},
},
},
{
title: {
label: '节点文本',
tip: 'labelInValue | 如果需要拿到选中的节点文本 label,可以使用 labelInValue 属性',
},
name: 'labelInValue',
setter: 'BoolSetter',
supportVariable: false,
},
getDataSourceProps,
];
const cascaderComponentsProps = [
{
title: { label: '支持多选节点', tip: 'multiple | 支持多选节点' },
name: 'multiple',
setter: 'BoolSetter',
supportVariable: false,
},
{
title: {
lable: '选中即发生改变',
tip: 'changeOnSelect | 通过changeOnSelect设置是否选中即发生改变,允许只选中父节点,该属性仅在单选模式下有效',
},
name: 'changeOnSelect',
setter: 'BoolSetter',
supportVariable: false,
},
{
title: 'loadData',
name: 'loadData',
setter: 'BoolSetter',
supportVariable: false,
},
{
title: {
lable: '动态加载选项',
tip: 'loadData | 用于动态加载选项,无法与 showSearch 一起使用',
},
name: 'loadData',
supportVariable: false,
setter: {
componentName: 'FunctionSetter',
props: {
template: '(item) => item.label || item.value',
},
},
},
];
const bizSelectorComponentProps = [
...selectComponentProps,
{
title: { label: '最小条目数', tip: 'minItems | 最小条目数' },
name: 'minItems',
setter: 'NumberSetter',
supportVariable: false,
},
{
title: { label: '最大条目数', tip: 'maxItems | 最大条目数' },
name: 'maxItems',
setter: 'NumberSetter',
supportVariable: false,
},
];
const numberComponentProps = [
{
name: 'formatter',
title: { label: '格式化数据', tip: 'formatter | 格式化数据' },
supportVariable: false,
propType: 'func',
setter: [
{
componentName: 'FunctionSetter',
props: {
template: 'formatter(value) { return "value + 1"}',
},
},
],
},
{
name: 'formatter',
title: { label: '格式化数据', tip: 'formatter | 格式化数据' },
supportVariable: false,
propType: 'func',
setter: [
{
componentName: 'FunctionSetter',
props: {
template: 'formatter(value) { return "value + 1"}',
},
},
],
},
];
const styleProps = {
title: { label: '组件样式', tip: 'style | 组件样式' },
name: 'style',
setter: {
componentName: 'CustomJsonSetter',
props: { btnText: '去配置', titleText: '配置数据' },
},
supportVariable: false,
};
const arrayComponentProps = [
{
title: { label: '是否有边框', tip: 'bordered | 建议关闭' },
name: 'bordered',
setter: 'BoolSetter',
supportVariable: false,
},
];
export const componentPropsProps = {
title: { label: '组件属性配置', tip: 'componentProps | 组件属性配置' },
name: 'componentProps',
display: 'accordion',
setter: {
componentName: 'MixedSetter',
props: {
setters: [
{
componentName: 'ObjectSetter',
props: {
config: {
items: [
styleProps,
{
name: 'placeholder',
title: { label: '空数据占位符', tip: 'placeholder | 空数据占位符' },
setter: 'StringSetter',
supportVariable: false,
},
{
title: { label: '是否支持清空', tip: 'allowClear | 是否支持清空' },
name: 'allowClear',
setter: 'BoolSetter',
supportVariable: false,
},
// 枚举相关字段
...getPropsByDependence(enumComponentProps, enumComponentsList, '..component'),
// select类似组件配置项
...getPropsByDependence(selectComponentProps, selectComponentsList, '..component'),
// 级联相关字段
...getPropsByDependence(
cascaderComponentsProps,
cascaderComponentsList,
'..component',
),
// 类input组件配置
...getPropsByDependence(inputComponentsProps, inputComponentsList, '..component'),
...getPropsByDependence(numberComponentProps, numberComponentsList, '..component'),
...getPropsByDependence(
bizSelectorComponentProps,
bizSelectorComponentsList,
'..component',
),
// TextArea Props
...getPropsByDependence(textAreaComponentProps, ['TextArea'], '..component'),
...getPropsByDependence(arrayComponentProps, ['RCArrayTable'], '..component'),
// {
// title: { label: '人员接口配置', tip: 'getDataSource | 人员接口配置' },
// name: 'getDataSource',
// defaultValue: () => ({
// type: 'JSFunction',
// schema: {
// title: 'getDataSource',
// type: 'JSFunction',
// name: 'getDataSource',
// async: true,
// properties: {
// input: {
// type: 'object',
// properties: {
// value: {
// type: 'string',
// defaultValue: '',
// },
// },
// required: ['value'],
// },
// body: {
// type: 'array',
// items: [
// {
// type: 'Function',
// properties: {
// template: 'RequestFunction',
// variable: 'result',
// extraProps: {
// apiId: 'API_88_59650_323217f643c3e3f1fe7532e72ac01bb0748c97be',
// params: { keyword: '{{value}}' },
// },
// },
// },
// ],
// },
// },
// required: ['input', 'body'],
// },
// }),
// setter: {
// componentName: 'FunctionSetter',
// },
// condition: (target: any) => {
// return ['EmpSelector'].includes(getPropValueWithPath(target, '..component'));
// },
// },
// {
// name: 'getOrgList',
// title: { label: '组织架构接口配置', tip: 'getOrgList | 组织架构接口配置' },
// supportVariable: false,
// defaultValue: () => ({
// type: 'JSFunction',
// schema: {
// title: 'getOrgList',
// type: 'JSFunction',
// name: 'getOrgList',
// async: true,
// properties: {
// input: {
// type: 'object',
// properties: {
// params: {
// type: 'object',
// defaultValue: {},
// },
// },
// required: ['params'],
// },
// body: {
// type: 'array',
// items: [
// {
// type: 'Function',
// properties: {
// template: 'RequestFunction',
// variable: 'result',
// returnResult: '0',
// extraProps: {
// apiId: 'API_88_59642_323217f643c3e3f1fe7532e72ac01bb0748c97be',
// params: {},
// },
// },
// },
// ],
// },
// },
// required: ['input', 'body'],
// },
// }),
// setter: {
// componentName: 'FunctionSetter',
// },
// condition: (target: any) => {
// return ['EmpSelector'].includes(getPropValueWithPath(target, '..component'));
// },
// },
// {
// title: {
// label: '通过部门id查询下级用户',
// tip: 'getUserListForOrg | 通过部门id查询下级用户',
// },
// name: 'getUserListForOrg',
// defaultValue: () => ({
// type: 'JSFunction',
// schema: {
// title: 'getUserListForOrg',
// type: 'JSFunction',
// name: 'getUserListForOrg',
// async: true,
// properties: {
// input: {
// type: 'object',
// properties: {
// params: {
// type: 'object',
// defaultValue: {},
// },
// },
// required: ['params'],
// },
// body: {
// type: 'array',
// items: [
// {
// type: 'Function',
// properties: {
// template: 'RequestFunction',
// variable: 'result',
// extraProps: {
// apiId: 'API_88_59658_323217f643c3e3f1fe7532e72ac01bb0748c97be',
// params: { orgId: '{{params.orgIds}}' },
// },
// },
// },
// ],
// },
// },
// required: ['input', 'body'],
// },
// }),
// setter: {
// componentName: 'FunctionSetter',
// },
// condition: (target: any) => {
// return ['EmpSelector'].includes(getPropValueWithPath(target, '..component'));
// },
// },
],
},
defaultValue: {},
},
},
{
componentName: 'CustomJsonSetter',
props: { btnText: '去配置', titleText: '配置数据' },
},
],
},
},
};
export const reactionsProps = {
title: { label: '联动逻辑', tip: 'reactions | 联动逻辑' },
name: 'reactions',
setter: {
componentName: 'CustomJsonSetter',
props: { btnText: '去配置', titleText: '配置数据' },
},
supportVariable: false,
// display: 'accordion',
// setter: [
// {
// componentName: 'ArraySetter',
// props: {
// itemSetter: FormSchemaReaction,
// },
// initialValue: [],
// },
// FormSchemaReaction,
// {
// componentName: 'FunctionSetter',
// },
// ],
};
export const tooltipProps = {
title: { label: '提示信息', tip: 'tooltip | 提示信息' },
name: 'tooltip',
setter: 'StringSetter',
supportVariable: false,
condition: hideProp,
};
export const visibleProps = {
title: { label: '显示', tip: 'visible | 是否显示' },
name: 'visible',
supportVariable: true,
};
export const childrenProps = {
title: { label: '子组件', tip: 'children | 子组件' },
name: 'children',
setter: {
componentName: 'CustomJsonSetter',
props: { btnText: '去配置', titleText: '配置数据' },
},
supportVariable: false,
condition: (target: any) => {
return childComponentList.includes(getPropValueWithPath(target, '.component'));
},
};
export const arrayTableItemsProps = {
type: 'object',
setter: {
componentName: 'ObjectSetter',
props: {
config: {
items: [
{
name: '_children',
condition: false,
title: { label: '表格项配置', tip: 'children | 表格项配置' },
setter: {
componentName: 'ArraySetter',
props: {
itemSetter: {
componentName: 'ObjectSetter',
props: {
config: {
items: [
labelConfig,
nameConfig,
typeConfig,
disabledProps,
previewProps,
requiredProps,
{
name: 'width',
title: { label: '列宽', tip: 'width | 列宽' },
supportVariable: false,
setter: 'NumberSetter',
},
defaultValueProps,
decoratorProps,
propsProps,
{
name: 'component',
title: { label: '表单项组件', tip: 'component | 表单项组件' },
defaultValue: 'Input',
// important: true,
supportVariable: false,
setter: {
componentName: 'SelectSetter',
props: {
options: [
...baseComponent,
{
label: '删除',
value: 'RCArrayTable.Remove',
},
{
label: '上移',
value: 'RCArrayTable.MoveUp',
},
{
label: '下移',
value: 'RCArrayTable.MoveDown',
},
{
label: '自定义组件',
value: '',
},
],
},
},
},
customComponentProps,
componentPropsProps,
],
},
},
initialValue: {
title: '标题',
name: uuid(),
component: 'PreviewText.Input',
props: {
feedbackLayout: 'terse',
},
},
},
},
},
},
],
},
},
},
extraProps: {
setValue: (target, value = []) => {
const children = value.map((v) => {
const { title = '标题', width, ...rest } = v;
return {
type: 'void',
component: 'RCArrayTable.Column',
decorator: 'void',
componentProps: { title, align: 'left', width },
children: [rest],
};
});
target.parent.setPropValue('items', {
type: 'object',
decorator: 'void',
children,
});
return children;
},
},
condition: (target: any) => {
return ['RCArrayTable'].includes(getPropValueWithPath(target, '.component'));
},
};
export const arrayItemsItemsProps = {
type: 'object',
setter: {
componentName: 'ObjectSetter',
props: {
config: {
items: [
// {
// name: '_type',
// title: { label: '配置项类型', tip: '_type | 配置项类型' },
// setter: {
// componentName: 'RadioGroupSetter',
// props: {
// options: [
// {
// title: '简单字符串',
// value: 'string',
// },
// {
// title: '复杂对象',
// value: 'object',
// },
// ],
// },
// },
// },
{
name: '_children',
condition: false,
title: { label: '子表单项配置', tip: 'children | 子表单项配置' },
setter: {
componentName: 'ArraySetter',
props: {
itemSetter: {
componentName: 'ObjectSetter',
props: {
config: {
items: [
labelConfig,
nameConfig,
typeConfig,
disabledProps,
previewProps,
requiredProps,
defaultValueProps,
decoratorProps,
propsProps,
{
name: 'component',
title: { label: '表单项组件', tip: 'component | 表单项组件' },
defaultValue: 'Input',
// important: true,
supportVariable: false,
setter: {
componentName: 'SelectSetter',
props: {
options: [
...baseComponent,
{
label: '删除',
value: 'RCArrayItems.Remove',
},
{
label: '上移',
value: 'RCArrayItems.MoveUp',
},
{
label: '下移',
value: 'RCArrayItems.MoveDown',
},
{
label: '自定义组件',
value: '',
},
],
},
},
},
componentPropsProps,
],
},
},
initialValue: {
name: uuid(),
component: 'Input',
props: {
feedbackLayout: 'terse',
},
},
},
},
},
},
],
},
},
},
extraProps: {
setValue: (target, value = []) => {
// const children = value.map((v) => {
// const { title = '标题', ...rest } = v;
// console.log('rest', rest);
// return {
// type: 'void',
// component: 'Space',
// decorator: null,
// children: [rest],
// };
// });
target.parent.setPropValue('items', {
type: 'void',
component: 'Space',
decorator: 'void',
children: value,
});
},
},
condition: (target: any) => {
return ['RCArrayItems'].includes(getPropValueWithPath(target, '.component'));
},
};
// gpt相关项
// const gptProps = {
// name: 'getTableData',
// title: '数据请求',
// supportVariable: false,
// gpt: {
// type: 'api',
// name: '数据请求',
// description: '数据请求',
// funcParams: ['value', 'field'], // 配置函数的参数名字
// },
// setter: {
// componentName: 'DatasourceSetter',
// },
// };
export const BaseFormItemProps = [
formItemListProps,
customComponentProps,
// primaryKeyConfig,
labelConfig,
nameConfig,
typeConfig,
requiredProps,
disabledProps,
previewProps,
defaultValueProps,
visibleProps,
descriptionProps,
rulesProps,
propsProps,
decoratorProps,
enumConfig,
arrayTableItemsProps,
arrayItemsItemsProps,
componentPropsProps,
reactionsProps,
childrenProps,
];
export const tableFormItemProps = [
formItemListProps,
nameConfig,
typeConfig,
descriptionProps,
defaultValueProps,
requiredProps,
disabledProps,
previewProps,
decoratorProps,
propsProps,
rulesProps,
reactionsProps,
componentPropsProps,
enumConfig,
];
export const FormItemsProps: IPublicTypeFieldConfig[] = [
{
name: 'items',
title: { label: '表单项配置', tip: 'items | 表单项配置' },
extraProps: {
display: 'accordion',
// defaultCollapsed: true,
},
setter: {
componentName: 'MixedSetter',
props: {
setters: [
{
componentName: 'ArraySetter',
props: {
itemSetter: {
componentName: 'ObjectSetter',
props: {
descriptor: 'name',
config: {
items: BaseFormItemProps,
},
},
// initialValue: () => {
// const mockProps: any = {};
// BaseFormItemProps.forEach((item) => {
// if (item.defaultValue) {
// if (typeof item.defaultValue === 'function') {
// mockProps[item.name] = item.defaultValue();
// } else {
// mockProps[item.name] = item.defaultValue;
// }
// }
// });
// return {
// component: 'Input',
// ...mockProps,
// };
// },
},
},
},
{
componentName: 'CustomJsonSetter',
props: { btnText: '去配置', titleText: '配置数据' },
},
],
},
},
},
];