import { DisplayPosition } from './position/display-position';
import { ButtonPosition } from './position/button-position';
import {
__record__,
condition,
handleOriginList,
isArrayNotEmpty,
isRecursionComponent,
getJSExpressionPrototype2,
} from '../util/util';
import React from 'react';
import {
__arrayTableCurrentRow__,
__dataSource__,
__extraParam__,
__flowData__,
__permission_point_list__,
__permissionGranted__,
__tableCurrentRow__,
button_view,
currentFormCardLabel,
currentFormStepLabel,
currentPageLabel,
formDialogStateLabel,
formStateLabel,
getFormExprNameByPosition,
leftTreeAfterDropDataSourceLabel,
leftTreeStateLabel,
openDialogModeLabel,
pageSizeLabel,
} from '@/common/util/expr-const';
import ExprSetter from '@/common/setter/expr-setter';
import { getItem } from '@/common/manager/button';
import {
getFormStateSetterSnippet,
getJSXTemplate,
} from '@/common/manager/setter-snippet';
import { ParamSelectSetter } from '@/common/setter/param-select-setter';
import DocSetter from '@/common/setter/doc-setter';
import DocLinkSetter from '@/common/setter/doc-link-setter';
const type = {
name: 'type',
title: '按钮样式',
// supportVariable: true,
display: 'inline',
initialValue: 'normal',
position: [
ButtonPosition.dialog,
ButtonPosition.formDialog,
ButtonPosition.form,
ButtonPosition.tableOperate,
ButtonPosition.tableBatchArea,
ButtonPosition.tableToolArea,
ButtonPosition.cardAction,
ButtonPosition.subCardAction,
ButtonPosition.result,
ButtonPosition.step,
ButtonPosition.pageRightButton,
ButtonPosition.listItemRightButton,
ButtonPosition.subCardActionNotInForm,
ButtonPosition.filterExtendButton,
ButtonPosition.blockButton,
],
setter: {
componentName: 'SelectSetter',
props: {
options: [
{
title: '普通按钮',
value: 'normal',
},
{
title: '主按钮',
value: 'primary',
},
{
title: '次按钮',
value: 'secondary',
},
],
},
},
};
const text = {
name: 'text',
title: '是否文本按钮',
// supportVariable: true,
display: 'inline',
position: [
ButtonPosition.listItemRightButton,
ButtonPosition.tileRightButton,
ButtonPosition.statisticCardRightButton,
ButtonPosition.subCardActionNotInForm,
ButtonPosition.blockButton,
],
setter: {
componentName: 'BoolSetter',
},
};
const size = {
name: 'size',
title: '按钮尺寸',
display: 'inline',
position: [ButtonPosition.listItemRightButton],
setter: {
componentName: 'RadioGroupSetter',
props: {
options: [
{ title: '大', value: 'large' },
{ title: '中', value: 'medium' },
{ title: '小', value: 'small' },
],
},
},
};
const btnPosition = {
name: 'btnPosition',
title: '按钮位置',
display: 'inline',
position: [ButtonPosition.form, ButtonPosition.blockButton],
setter: {
componentName: 'CnSelectSetter',
props: {
options: [
{
title: '在底部按钮栏的左侧',
value: 'left',
},
{
title: '在底部按钮栏的右侧',
value: 'right',
},
],
selectProps: {
hasClear: true,
placeholder: '默认在底部按钮栏的右侧',
},
},
},
};
const tableOperateHidden = {
name: 'hidden',
title: '隐藏',
display: 'inline',
// supportVariable: true,
setter: {
componentName: 'MixedSetter',
props: {
setters: [
{
componentName: 'BoolSetter',
title: '布尔(true/false)',
},
{
// componentName: ,
componentName: (
),
title: '简单表达式',
},
getJSExpressionPrototype({ type: 'table' }),
getPermissionListPrototype(),
],
},
},
position: [ButtonPosition.tableOperate, ButtonPosition.listItemRightButton],
};
const tableOperateDisabled = {
name: 'disabled',
title: '禁用',
display: 'inline',
// supportVariable: true,
setter: {
componentName: 'MixedSetter',
props: {
setters: [
{
componentName: 'BoolSetter',
title: '布尔(true/false)',
},
{
// componentName: ,
componentName: (
),
title: '简单表达式',
},
getJSExpressionPrototype({ type: 'table' }),
],
},
},
position: [ButtonPosition.tableOperate, ButtonPosition.listItemRightButton],
};
const arrayTableOperateHidden = (position) => {
return {
name: 'hidden',
title: '隐藏',
display: 'inline',
// supportVariable: true,
setter: {
componentName: 'MixedSetter',
props: {
setters: [
{
componentName: 'BoolSetter',
title: '布尔(true/false)',
},
{
componentName: (
),
title: '简单表达式',
},
getJSExpressionPrototype({ type: 'arrayTableOperate' }),
getPermissionListPrototype(),
],
},
},
position: [
ButtonPosition.arrayTableOperate,
ButtonPosition.arraySubAreaCardOperate,
],
};
};
const arrayTableOperateDisabled = (position) => {
return {
name: 'disabled',
title: '禁用',
display: 'inline',
// supportVariable: true,
setter: {
componentName: 'MixedSetter',
props: {
setters: [
{
componentName: 'BoolSetter',
title: '布尔(true/false)',
},
{
componentName: (
),
title: '简单表达式',
},
getJSExpressionPrototype({ type: 'arrayTableOperate' }),
],
},
},
position: [
ButtonPosition.arrayTableOperate,
ButtonPosition.arraySubAreaCardOperate,
],
};
};
const span = {
name: 'span',
display: 'inline',
title: '网格数',
// setter: ,
position: [DisplayPosition.filter],
setter: {
componentName: 'RadioGroupSetter',
props: {
options: [
{
title: '1格(窄)',
value: 1,
},
{
title: '2格(宽)',
value: 2,
},
],
},
},
};
const required = {
name: 'required',
position: [],
display: 'inline',
title: '必填',
// supportVariable: true,
setter: 'BoolSetter',
};
const requiredMessage = {
position: [],
name: 'requiredMessage',
display: 'inline',
title: '必填提示',
tip: '未填写时报的错误提示文案',
// supportVariable: true,
setter: 'CnI18nSetter',
};
const hidden = {
name: 'hidden',
title: '隐藏',
display: 'inline',
// position: [DisplayPosition.form, DisplayPosition.filter,DisplayPosition.formDialog],
// supportVariable: true,
setter: 'BoolSetter',
};
const placeholder = {
position: [
DisplayPosition.filter,
DisplayPosition.form,
DisplayPosition.formDialog,
DisplayPosition.cnArrayTable,
DisplayPosition.cnArraySubAreaCard,
],
name: 'placeholder',
title: '空提示信息',
display: 'inline',
// supportVariable: true,
setter: {
componentName: 'MixedSetter',
props: {
setters: [
{
componentName: 'CnI18nSetter',
title: '多语言设置器',
},
getJSExpressionPrototype({ type: 'formRequest' }),
],
},
},
};
const tip = {
position: [
DisplayPosition.form,
DisplayPosition.formDialog,
DisplayPosition.filter,
DisplayPosition.cnArrayTable,
DisplayPosition.cnArraySubAreaCard,
],
name: 'tip',
title: '标签提示信息',
display: 'inline',
// supportVariable: true,
setter: {
componentName: 'MixedSetter',
props: {
setters: [
{
title: '文本',
componentName: 'CnI18nSetter',
},
getJSXTemplate({
position: ButtonPosition.form,
}),
],
},
},
};
const extra = () => {
const linkGetPrototypeList = getItem(
ButtonPosition.form,
'link',
'getPrototypeList',
);
return {
position: [DisplayPosition.form, DisplayPosition.formDialog],
name: 'extra',
title: '底部额外提示信息',
display: 'inline',
// supportVariable: true,
setter: {
componentName: 'MixedSetter',
props: {
setters: [
{
title: '文本',
condition() {
return true;
},
componentName: 'CnI18nSetter',
props: {},
},
{
title: '超链接',
componentName: 'ObjectSetter',
props: {
config: {
items: [
{
name: 'text',
title: '链接文案',
display: 'inline',
setter: {
componentName: 'MixedSetter',
props: {
setters: [
{
componentName: 'CnI18nSetter',
title: '文本',
},
getJSExpressionPrototype({ type: 'formRequest' }),
],
},
},
},
...linkGetPrototypeList(ButtonPosition.form),
],
},
},
},
getJSXTemplate({
position: ButtonPosition.form,
}),
],
},
},
};
};
// const disabled = {
// name: 'disabled',
// title: '禁用',
// display: 'inline',
// // supportVariable: true,
// // setter: {
// // componentName: "MixedSetter",
// // props: {
// // setters: ["BoolSetter"],
// // },
// // },
// setter: 'BoolSetter',
// position: [DisplayPosition.formDialog],
// };
const filterItemHidden = (position) => {
const configList = [
{
dataKey: 'config',
labelKey: 'label',
valueKey: 'name',
groupName: '表单字段',
groupExprName: getFormExprNameByPosition({ position }),
needSecondParam: false,
},
{
groupName: '其他数据',
groupExprName: __dataSource__,
needSecondParam: true,
},
];
if (DisplayPosition.formDialog === position) {
configList.splice(1, 0, getFormStateSetterSnippet());
}
let jsExpressionPrototype = getJSExpressionPrototype({ type: 'form' });
if (DisplayPosition.cnArrayTable === position) {
configList.unshift({
dataKey: 'arrayTable',
labelKey: 'label',
valueKey: 'name',
groupName: '表格当前行数据',
groupExprName: __arrayTableCurrentRow__,
needSecondParam: false,
});
jsExpressionPrototype = getJSExpressionPrototype({ type: 'arrayTable' });
} else if (DisplayPosition.cnArraySubAreaCard === position) {
configList.unshift({
dataKey: 'arrayTable',
labelKey: 'label',
valueKey: 'name',
groupName: currentFormCardLabel,
groupExprName: __arrayTableCurrentRow__,
needSecondParam: false,
});
jsExpressionPrototype = getJSExpressionPrototype({ type: 'arrayTable' });
}
return {
name: 'hidden',
title: '隐藏',
display: 'inline',
// supportVariable: true,
className: 'cn-text-expr-setter',
setter: {
componentName: 'MixedSetter',
props: {
setters: [
{
componentName: 'BoolSetter',
title: '布尔(true/false)',
},
{
// componentName: ,
componentName: ,
title: '简单表达式',
},
jsExpressionPrototype,
],
},
},
position: [
DisplayPosition.filter,
DisplayPosition.formDialog,
DisplayPosition.form,
DisplayPosition.cnArrayTable,
DisplayPosition.cnArraySubAreaCard,
],
};
};
const arrayTableColumnHidden = (position) => {
const configList = [
{
dataKey: 'config',
labelKey: 'label',
valueKey: 'name',
groupName: '表单字段',
groupExprName: getFormExprNameByPosition({ position }),
needSecondParam: false,
},
{
groupName: '其他数据',
groupExprName: __dataSource__,
needSecondParam: true,
},
];
const jsExpressionPrototype = getJSExpressionPrototype({ type: 'form' });
return {
name: 'arrayTableColumnHidden',
title: '整列隐藏',
display: 'inline',
// supportVariable: true,
className: 'cn-text-expr-setter',
setter: {
componentName: 'MixedSetter',
props: {
setters: [
{
componentName: 'BoolSetter',
title: '布尔(true/false)',
},
{
componentName: ,
title: '简单表达式',
},
jsExpressionPrototype,
],
},
},
position: [DisplayPosition.cnArrayTable],
};
};
const filterItemDisabled = (position) => {
const configList = [
{
dataKey: 'config',
labelKey: 'label',
valueKey: 'name',
groupName: '表单字段',
groupExprName: getFormExprNameByPosition({ position }),
needSecondParam: false,
},
{
groupName: '其他数据',
groupExprName: __dataSource__,
needSecondParam: true,
},
];
if (DisplayPosition.formDialog === position) {
configList.splice(1, 0, getFormStateSetterSnippet());
}
let jsExpressionPrototype = getJSExpressionPrototype({ type: 'form' });
if (DisplayPosition.cnArrayTable === position) {
configList.unshift({
dataKey: 'arrayTable',
labelKey: 'label',
valueKey: 'name',
groupName: '表格当前行数据',
groupExprName: __arrayTableCurrentRow__,
needSecondParam: false,
});
jsExpressionPrototype = getJSExpressionPrototype({ type: 'arrayTable' });
} else if (DisplayPosition.cnArraySubAreaCard === position) {
configList.unshift({
dataKey: 'arrayTable',
labelKey: 'label',
valueKey: 'name',
groupName: currentFormCardLabel,
groupExprName: __arrayTableCurrentRow__,
needSecondParam: false,
});
jsExpressionPrototype = getJSExpressionPrototype({ type: 'arrayTable' });
}
return {
name: 'disabled',
title: '禁用',
display: 'inline',
// supportVariable: true,
className: 'cn-text-expr-setter',
setter: {
componentName: 'MixedSetter',
props: {
setters: [
{
componentName: 'BoolSetter',
title: '布尔(true/false)',
},
{
// componentName: ,
componentName: ,
title: '简单表达式',
},
jsExpressionPrototype,
],
},
},
position: [
DisplayPosition.filter,
DisplayPosition.formDialog,
DisplayPosition.form,
DisplayPosition.cnArrayTable,
DisplayPosition.cnArraySubAreaCard,
],
};
};
const filterItemReadOnly = (position) => {
const configList = [
{
dataKey: 'config',
labelKey: 'label',
valueKey: 'name',
groupName: '表单字段',
groupExprName: getFormExprNameByPosition({ position }),
needSecondParam: false,
},
{
groupName: '其他数据',
groupExprName: __dataSource__,
needSecondParam: true,
},
];
if (DisplayPosition.formDialog === position) {
configList.splice(1, 0, getFormStateSetterSnippet());
}
let jsExpressionPrototype = getJSExpressionPrototype({ type: 'form' });
if (DisplayPosition.cnArrayTable === position) {
configList.unshift({
dataKey: 'arrayTable',
labelKey: 'label',
valueKey: 'name',
groupName: '表格当前行数据',
groupExprName: __arrayTableCurrentRow__,
needSecondParam: false,
});
jsExpressionPrototype = getJSExpressionPrototype({ type: 'arrayTable' });
} else if (DisplayPosition.cnArraySubAreaCard === position) {
configList.unshift({
dataKey: 'arrayTable',
labelKey: 'label',
valueKey: 'name',
groupName: currentFormCardLabel,
groupExprName: __arrayTableCurrentRow__,
needSecondParam: false,
});
jsExpressionPrototype = getJSExpressionPrototype({ type: 'arrayTable' });
}
return {
name: 'readOnly',
title: '只读',
display: 'inline',
// supportVariable: true,
className: 'cn-text-expr-setter',
setter: {
componentName: 'MixedSetter',
props: {
setters: [
{
componentName: 'RadioGroupSetter',
props: {
options: [
{
title: '是',
value: true,
},
{
title: '否',
value: false,
},
{
title: '不设置',
},
],
},
title: '布尔(true/false)',
},
{
// componentName: ,
componentName: ,
title: '简单表达式',
},
jsExpressionPrototype,
],
},
},
position: [
DisplayPosition.formDialog,
DisplayPosition.form,
DisplayPosition.cnArrayTable,
DisplayPosition.cnArraySubAreaCard,
],
};
};
const filterItemNotSubmitWhenHidden = (position) => {
return {
name: 'notSubmitWhenHidden',
title: '隐藏时数据不提交',
display: 'inline',
// supportVariable: true,
// className: 'cn-text-expr-setter',
// setter: {
// componentName: 'MixedSetter',
// props: {
// setters: [
// {
// componentName: 'RadioGroupSetter',
// props: {
// options: [
// { title: '是', value: 'none' },
// { title: '否', value: '' },
// { title: '不设置' },
// ],
// },
// },
// ],
// },
// },
setter: 'BoolSetter',
condition(prop) {
return prop?.parent?.getPropValue?.('hidden') !== undefined;
},
position: [
DisplayPosition.filter,
DisplayPosition.formDialog,
DisplayPosition.form,
DisplayPosition.cnArrayTable,
],
};
};
const hasClear = {
position: [
DisplayPosition.filter,
DisplayPosition.form,
DisplayPosition.formDialog,
DisplayPosition.cnArrayTable,
DisplayPosition.cnArraySubAreaCard,
],
name: 'hasClear',
title: '允许清空',
display: 'inline',
// supportVariable: true,
tip: '设计规范规定,不建议修改',
setter: 'BoolSetter',
};
// const readOnly = {
// position: [DisplayPosition.form, DisplayPosition.formDialog,DisplayPosition.cnArrayTable],
// name: 'readOnly',
// title: '只读',
// display: 'inline',
// // supportVariable: true,
// tip: '',
// className: 'cn-text-expr-setter',
// setter: {
// componentName: 'MixedSetter',
// props: {
// setters: [
// {
// // componentName: 'BoolSetter',
// // title: '布尔(true/false)',
// title: '是 或 否',
// componentName: 'RadioGroupSetter',
// props: {
// options: [
// { value: true, title: '是' },
// { value: false, title: '否' },
// { title: '不设置' },
// ],
// },
// },
// {
// // componentName: ,
// componentName: ,
// title: '简单表达式',
// },
// getJSExpressionPrototype({ type: 'form' }),
// ],
// },
// },
// };
const tableToolbarHidden = {
name: 'hidden',
title: '隐藏',
display: 'inline',
// supportVariable: true,
setter: {
componentName: 'MixedSetter',
props: {
setters: [
{
componentName: 'BoolSetter',
title: '布尔(true/false)',
},
{
// componentName: ,
componentName: (
),
title: '简单表达式',
},
getJSExpressionPrototype({ type: 'form' }),
getPermissionListPrototype(),
],
},
},
position: [ButtonPosition.tableToolArea, ButtonPosition.tableBatchArea],
};
const tableToolbarDisabled = {
name: 'disabled',
title: '禁用',
display: 'inline',
// supportVariable: true,
setter: {
componentName: 'MixedSetter',
props: {
setters: [
{
componentName: 'BoolSetter',
title: '布尔(true/false)',
},
{
// componentName: ,
componentName: (
),
title: '简单表达式',
},
getJSExpressionPrototype({ type: 'tableBatchArea' }),
],
},
},
position: [ButtonPosition.tableToolArea, ButtonPosition.tableBatchArea],
};
const formButtonHidden = (position) => {
const configList = [
{
dataKey: 'config',
labelKey: 'label',
valueKey: 'name',
groupName: '表单字段',
groupExprName: getFormExprNameByPosition({}),
needSecondParam: false,
},
{
groupName: '其他数据',
groupExprName: __dataSource__,
needSecondParam: true,
},
];
if ([ButtonPosition.form, ButtonPosition.formDialog].includes(position)) {
const stateConfig = {
title: formStateLabel,
children: [
{
label: currentFormStepLabel,
value: `${__extraParam__}.currentFormStep`,
},
],
extraConfig: {
renderTypeDom: undefined,
renderValueDom: undefined,
},
};
configList.splice(1, 0, getFormStateSetterSnippet(stateConfig));
}
return {
name: 'hidden',
title: '隐藏',
display: 'inline',
// supportVariable: true,
setter: {
componentName: 'MixedSetter',
props: {
setters: [
{
componentName: 'BoolSetter',
title: '布尔(true/false)',
},
{
// componentName: ,
componentName: ,
title: '简单表达式',
},
getJSExpressionPrototype({ type: 'form' }),
getPermissionListPrototype(),
],
},
},
position: [
ButtonPosition.formDialog,
ButtonPosition.form,
ButtonPosition.cardAction,
ButtonPosition.subCardAction,
],
};
};
const formButtonDisabled = {
name: 'disabled',
title: '禁用',
display: 'inline',
// supportVariable: true,
setter: {
componentName: 'MixedSetter',
props: {
setters: [
{
componentName: 'BoolSetter',
title: '布尔(true/false)',
},
{
// componentName: ,
componentName: (
),
title: '简单表达式',
},
getJSExpressionPrototype({ type: 'form' }),
],
},
},
position: [
ButtonPosition.formDialog,
ButtonPosition.form,
ButtonPosition.cardAction,
ButtonPosition.subCardAction,
],
};
const dialogButtonHidden = (position) => {
return {
name: 'hidden',
title: '隐藏',
display: 'inline',
setter: {
componentName: 'MixedSetter',
props: {
setters: [
{
componentName: 'BoolSetter',
title: '布尔(true/false)',
},
{
componentName: (
),
title: '简单表达式',
},
getJSExpressionPrototype({ type: 'base' }),
getPermissionListPrototype(),
],
},
},
position: [
ButtonPosition.dialog,
ButtonPosition.treeNode,
ButtonPosition.blockButton,
],
};
};
const dialogButtonDisabled = {
name: 'disabled',
title: '禁用',
display: 'inline',
setter: {
componentName: 'MixedSetter',
props: {
setters: [
{
componentName: 'BoolSetter',
title: '布尔(true/false)',
},
{
componentName: (
),
title: '简单表达式',
},
getJSExpressionPrototype({ type: 'base' }),
],
},
},
position: [
ButtonPosition.dialog,
ButtonPosition.treeNode,
ButtonPosition.blockButton,
],
};
const stepButtonHidden = {
name: 'hidden',
title: '隐藏',
display: 'inline',
// supportVariable: true,
setter: {
componentName: 'MixedSetter',
props: {
setters: [
{
componentName: 'BoolSetter',
title: '布尔(true/false)',
},
{
componentName: (
),
title: '简单表达式',
},
getJSExpressionPrototype({ type: 'step' }),
getPermissionListPrototype(),
],
},
},
position: [ButtonPosition.step],
};
const stepButtonDisabled = {
name: 'disabled',
title: '禁用',
display: 'inline',
// supportVariable: true,
setter: {
componentName: 'MixedSetter',
props: {
setters: [
{
componentName: 'BoolSetter',
title: '布尔(true/false)',
},
{
componentName: (
),
title: '简单表达式',
},
getJSExpressionPrototype({ type: 'step' }),
],
},
},
position: [ButtonPosition.step],
};
const width = {
name: 'width',
title: '列宽度',
display: 'inline',
setter: 'NumberSetter',
position: [DisplayPosition.cnArrayTable],
};
const iconType = {
name: 'iconType',
title: '按钮图标',
display: 'inline',
setter: 'CnIconSetter',
position: [
ButtonPosition.dialog,
ButtonPosition.formDialog,
ButtonPosition.form,
ButtonPosition.tableBatchArea,
ButtonPosition.tableToolArea,
ButtonPosition.cardAction,
ButtonPosition.filterExtendButton,
ButtonPosition.blockButton,
],
};
const iconTypeHelp = {
display: 'none',
setter: (
请到{' '}
图标库
{' '}
中寻找想用的图标,填写图标type即可。
体验Demo
}
/>
),
position: [
ButtonPosition.dialog,
ButtonPosition.formDialog,
ButtonPosition.form,
ButtonPosition.tableBatchArea,
ButtonPosition.tableToolArea,
ButtonPosition.cardAction,
ButtonPosition.filterExtendButton,
ButtonPosition.blockButton,
],
};
const colSpan = {
name: 'colSpan',
title: '当前组件在一行占几列',
display: 'inline',
setter: {
componentName: 'RadioGroupSetter',
props: {
options: [
{ title: '无', value: undefined },
{ title: '一', value: 1 },
{ title: '二', value: 2 },
{ title: '三', value: 3 },
{ title: '四', value: 4 },
{ title: '五', value: 5 },
{ title: '六', value: 6 },
],
},
},
position: [
DisplayPosition.formDialog,
DisplayPosition.form,
DisplayPosition.cnArraySubAreaCard,
],
};
const buttonHoverInfo = (position) => {
const paramSelectSetter = getParamSetterPrototype({
type: 'filter',
prototypeConfig: {},
});
const jsExpressionSetter = getJSExpressionPrototype({
type: [ButtonPosition.cardAction, ButtonPosition.subCardAction].includes(
position,
)
? 'form'
: 'tableBatchArea',
prototypeConfig: {},
});
return {
name: 'buttonHoverInfo',
title: '气泡提示',
display: 'plain',
setter: {
componentName: 'ObjectSetter',
props: {
config: {
items: [
{
name: 'needHover',
title: '气泡提示',
display: 'inline',
setter: {
componentName: 'BoolSetter',
},
},
{
name: 'hoverInfo',
display: 'plain',
title: '悬浮配置项',
setter: {
componentName: 'ObjectSetter',
props: {
config: {
items: [
{
name: 'title',
title: '气泡提示标题',
display: 'inline',
setter: {
componentName: 'MixedSetter',
props: {
setters: [
{
componentName: 'CnI18nSetter',
title: '字符串',
},
paramSelectSetter,
jsExpressionSetter ||
getJSExpressionPrototype({
type: 'tableRequest',
}),
],
},
},
condition(prop) {
return condition(prop, true, 'needHover');
},
},
{
name: 'content',
title: '气泡提示内容',
display: 'inline',
setter: {
componentName: 'MixedSetter',
props: {
setters: [
{
componentName: 'CnI18nSetter',
title: '字符串',
},
paramSelectSetter,
jsExpressionSetter ||
getJSExpressionPrototype({
type: 'tableRequest',
}),
getJSXTemplate({ position }),
],
},
},
condition(prop) {
return condition(prop, true, 'needHover');
},
},
{
name: 'align',
title: '气泡位置',
display: 'inline',
setter: {
componentName: 'SelectSetter',
props: {
options: [
{
label: '左',
value: 'l',
},
{
label: '上左',
value: 'tl',
},
{
label: '上',
value: 't',
},
{
label: '上右',
value: 'tr',
},
{
label: '右',
value: 'r',
},
{
label: '下右',
value: 'br',
},
{
label: '下',
value: 'b',
},
{
label: '下左',
value: 'bl',
},
],
},
},
condition(prop) {
return condition(prop, true, 'needHover');
},
},
{
name: 'handleProps',
title: '手动设置气泡组件props',
display: 'inline',
setter: getJSExpressionPrototype({
type: 'props',
}),
condition(prop) {
return condition(prop, true, 'needHover');
},
},
],
},
},
},
},
],
},
},
},
position: [
ButtonPosition.tableBatchArea,
ButtonPosition.tableToolArea,
ButtonPosition.cardAction,
ButtonPosition.subCardAction,
],
};
};
const fixed = {
name: 'fixed',
title: '列固定',
display: 'inline',
setter: {
componentName: 'RadioGroupSetter',
props: {
options: [
{ title: '不固定' },
{ value: 'left', title: '左侧' },
{ value: 'right', title: '右侧' },
],
},
},
position: [DisplayPosition.cnArrayTable],
};
const allStyleMap = {
width,
type,
text,
size,
btnPosition,
tableOperateHidden,
tableOperateDisabled,
span,
required,
requiredMessage,
hidden,
placeholder,
tip,
extra,
hasClear,
// disabled,
filterItemHidden,
filterItemNotSubmitWhenHidden,
arrayTableColumnHidden,
filterItemDisabled,
filterItemReadOnly,
fixed,
// readOnly,
tableToolbarHidden,
tableToolbarDisabled,
formButtonHidden,
formButtonDisabled,
dialogButtonHidden,
dialogButtonDisabled,
arrayTableOperateHidden,
arrayTableOperateDisabled,
stepButtonDisabled,
stepButtonHidden,
buttonHoverInfo,
iconType,
iconTypeHelp,
colSpan,
};
// 注册样式
export function registerStyle(plugin) {
const { name } = plugin || {};
if (name) {
allStyleMap[name] = plugin;
}
}
// 获取样式列表
export function getStyleListByPosition(position) {
const defaultStyleList = Object.keys(allStyleMap);
const result = [];
if (position !== undefined) {
defaultStyleList.forEach((name) => {
let item = allStyleMap[name];
if (typeof item === 'function') {
item = item(position);
}
if (item && item.position && item.position.includes(position)) {
result.push(item);
}
});
}
return result;
}
export function getJSExpressionPrototype(config) {
return getJSExpressionPrototype2(config)
}
export function getPermissionListPrototype() {
return {
name: 'permissionHidden',
componentName: 'CnSelectSetter',
title: '权限控制',
props(prop) {
const permissionList =
window.getCnLowcodeStoreItem?.(__permission_point_list__) || [];
return {
selectProps: {
hasClear: true,
showSearch: true,
menuProps: {
header: (
),
},
onChange: (v: string) => {
if (!v) {
prop?.parent?.setPropValue?.('hidden', undefined);
return;
}
prop?.parent?.setPropValue?.('hidden', {
group: __dataSource__,
param: `valueOf.${__permissionGranted__}`,
secondParam: `${v}`,
thirdParam: button_view,
symbol: '!=',
type: 'boolean',
value: true,
});
},
value: prop?.parent?.getPropValue?.('hidden')?.secondParam,
},
options: permissionList.filter((i: any) => i.type === button_view),
};
},
};
}
export function getParamSetterPrototype(config) {
const { type, prototypeConfig } = config || {};
const { flowList, currentFlowIndex, additionalPosition } =
prototypeConfig || {};
if (type === 'formDialog') {
return {
componentName: 'ParamSelectSetter',
props: {
ParamSelectSetterComponent: ParamSelectSetter,
configList: [
{
dataKey: 'config',
labelKey: 'label',
valueKey: 'name',
groupName: '当前表单',
},
{
groupName: formDialogStateLabel,
handleCustomGroup: (extra) => {
if (Array.isArray(extra?.children)) {
extra.children.push({
label: openDialogModeLabel,
value: `${__extraParam__}.openDialogMode`,
});
}
},
},
{
groupName: '动作编排的数据',
groupExprName: __flowData__,
needSecondParam: true,
flowList,
currentFlowIndex,
},
{
groupName: '其他数据',
groupExprName: __dataSource__,
needSecondParam: true,
},
],
},
title: '选择参数',
};
} else if (type === 'form') {
return {
componentName: 'ParamSelectSetter',
// props: {
// dataKey: 'config',
// labelKey: 'label',
// valueKey: 'name',
// groupName: '当前表单',
// },
props: {
ParamSelectSetterComponent: ParamSelectSetter,
configList: [
{
dataKey: 'config',
labelKey: 'label',
valueKey: 'name',
groupName: '当前表单',
},
{
groupName: '动作编排的数据',
groupExprName: __flowData__,
needSecondParam: true,
flowList,
currentFlowIndex,
},
{
groupName: '其他数据',
groupExprName: __dataSource__,
needSecondParam: true,
},
],
},
title: '选择参数',
};
} else if (type === 'table') {
const configList = [
{
dataKey: 'columns',
labelKey: 'title',
valueKey: 'dataIndex',
groupName: '当前行数据',
// groupExprName: __tableCurrentRow__,
needSecondParam: false,
},
{
groupName: '动作编排的数据',
groupExprName: __flowData__,
needSecondParam: true,
flowList,
currentFlowIndex,
},
{
groupName: '其他数据',
groupExprName: __dataSource__,
needSecondParam: true,
},
];
if (additionalPosition === ButtonPosition.childTableOperate) {
configList[0] = {
groupName: '当前行数据',
groupExprName: __record__,
handleCustomGroup: (extra, field) => {
if (Array.isArray(extra?.children) && field) {
const originList = field
?.getNode?.()
?.getPropValue?.('childTable')?.columns;
if (isArrayNotEmpty(configList)) {
extra.children = handleOriginList(
originList,
'title',
'dataIndex',
__record__,
);
}
}
},
};
}
return {
componentName: 'ParamSelectSetter',
// props: {
// dataKey: 'columns',
// labelKey: 'title',
// valueKey: 'dataIndex',
// groupName: '当前行数据',
// },
props: {
ParamSelectSetterComponent: ParamSelectSetter,
configList,
},
title: '选择参数',
};
} else if (type === 'filter') {
return {
componentName: 'ParamSelectSetter',
props: {
dataKey: 'config',
labelKey: 'label',
valueKey: 'name',
groupName: '筛选栏',
relativeDataSourceName: '_bindFilterDataSourceName',
relativeDataSourceNameKey: '_dataSourceName',
},
// props: {
// configList:[
// {
// dataKey: 'config',
// labelKey: 'label',
// valueKey: 'name',
// groupName: '筛选栏',
// relativeDataSourceName: '_bindFilterDataSourceName',
// relativeDataSourceNameKey: '_dataSourceName',
// },
// {
// groupName:'动作编排的数据',
// groupExprName: __flowData__,
// needSecondParam:true,
// flowList,
// currentFlowIndex,
// },
// {
// groupName:'其他数据',
// groupExprName: __dataSource__,
// needSecondParam:true,
// },
// ]
// },
title: '选择参数',
};
} else if (type === 'arrayTable') {
return {
componentName: 'ParamSelectSetter',
props: {
dataKey: 'arrayTable',
labelKey: 'label',
valueKey: 'name',
groupName: '当前行数据',
},
title: '选择参数',
};
} else if (type === 'arrayTableItemEvent') {
return {
componentName: 'ParamSelectSetter',
// props: {
// dataKey: 'arrayTable',
// labelKey: 'label',
// valueKey: 'name',
// groupName: '当前行数据',
// },
props: {
configList: [
{
groupName: '当前行数据',
groupExprName: __arrayTableCurrentRow__,
handleCustomGroup: (extra, field) => {
const path = field?.path;
if (
Array.isArray(path) &&
path.length > 5 &&
path[0] === 'config' &&
path[2] === 'options' &&
(path[3] === 'config' || path[3] === 'buttons')
) {
const arrayTableIndex = path[1];
if (typeof arrayTableIndex === 'number') {
const formConfig = field
?.getNode?.()
?.getPropValue?.('config');
const arrayTableConfig = formConfig?.[arrayTableIndex] || {};
if (
isRecursionComponent(arrayTableConfig?.componentName) &&
arrayTableConfig?.options?.config?.length > 0
) {
const originList = arrayTableConfig?.options?.config;
const tempList = handleOriginList(
originList,
'label',
'name',
`${__extraParam__}.${__arrayTableCurrentRow__}`,
);
if (isArrayNotEmpty(tempList)) {
extra.children = tempList;
}
}
}
}
},
},
{
groupName: '动作编排的数据',
groupExprName: __flowData__,
needSecondParam: true,
flowList,
currentFlowIndex,
},
{
groupName: '其他数据',
groupExprName: __dataSource__,
needSecondParam: true,
},
],
},
title: '选择参数',
};
} else if (type === 'base') {
return {
componentName: 'ParamSelectSetter',
// props: {
// dataKey: 'aa',
// labelKey: 'aa',
// valueKey: 'aa',
// groupName: '参数列表',
// },
props: {
ParamSelectSetterComponent: ParamSelectSetter,
configList: [
{
groupName: '动作编排的数据',
groupExprName: __flowData__,
needSecondParam: true,
flowList,
currentFlowIndex,
},
{
groupName: '其他数据',
groupExprName: __dataSource__,
needSecondParam: true,
},
],
},
title: '选择参数',
};
} else if (type === 'filterWithPagination') {
return {
componentName: 'ParamSelectSetter',
props: {
ParamSelectSetterComponent: ParamSelectSetter,
configList: [
{
dataKey: 'config',
labelKey: 'label',
valueKey: 'name',
groupName: '筛选栏',
relativeDataSourceName: '_bindFilterDataSourceName',
relativeDataSourceNameKey: '_dataSourceName',
},
{
groupName: '当前表格的的分页信息',
groupExprName: __extraParam__,
handleCustomGroup: (extra) => {
if (Array.isArray(extra?.children)) {
extra.children.push({
label: currentPageLabel,
value: `${__extraParam__}.currentPage`,
});
extra.children.push({
label: pageSizeLabel,
value: `${__extraParam__}.pageSize`,
});
}
},
},
{
groupName: '其他数据',
groupExprName: __dataSource__,
needSecondParam: true,
},
],
},
title: '选择参数',
};
} else if (type === 'tree') {
return {
componentName: 'ParamSelectSetter',
props: {
ParamSelectSetterComponent: ParamSelectSetter,
configList: [
{
groupName: leftTreeStateLabel,
handleCustomGroup: (extra) => {
if (Array.isArray(extra?.children)) {
extra.children.push({
label: leftTreeAfterDropDataSourceLabel,
value: `${__extraParam__}.afterDropDataSource`,
});
}
},
},
{
groupName: '动作编排的数据',
groupExprName: __flowData__,
needSecondParam: true,
flowList,
currentFlowIndex,
},
{
groupName: '其他数据',
groupExprName: __dataSource__,
needSecondParam: true,
},
],
},
title: '选择参数',
};
} else if (type === 'arrayCardSubCardButton') {
return {
componentName: 'ParamSelectSetter',
props: {
configList: [
{
groupName: '当前卡片数据',
groupExprName: __arrayTableCurrentRow__,
handleCustomGroup: (extra, field) => {
const path = field?.path;
if (
Array.isArray(path) &&
path.length > 5 &&
path[0] === 'config' &&
path[2] === 'options' &&
(path[3] === 'config' || path[3] === 'buttons')
) {
const arrayTableIndex = path[1];
if (typeof arrayTableIndex === 'number') {
const formConfig = field
?.getNode?.()
?.getPropValue?.('config');
const arrayTableConfig = formConfig?.[arrayTableIndex] || {};
if (
isRecursionComponent(arrayTableConfig?.componentName) &&
arrayTableConfig?.options?.config?.length > 0
) {
const originList = arrayTableConfig?.options?.config;
const tempList = handleOriginList(
originList,
'label',
'name',
`${__extraParam__}.${__arrayTableCurrentRow__}`,
);
if (isArrayNotEmpty(tempList)) {
extra.children = tempList;
}
}
}
}
},
},
{
dataKey: 'config',
labelKey: 'label',
valueKey: 'name',
groupName: '当前表单',
},
{
groupName: '动作编排的数据',
groupExprName: __flowData__,
needSecondParam: true,
flowList,
currentFlowIndex,
},
{
groupName: '其他数据',
groupExprName: __dataSource__,
needSecondParam: true,
},
],
},
title: '选择参数',
};
}
}