@cainiaofe/cn-ui-m-lowcode
Version:
349 lines (347 loc) • 13.5 kB
JSX
import React from 'react';
import { Bundle } from '@ali/visualengine';
import Icon from './logo';
import {
createDataSource,
generateIndex,
getDataSourceById,
getDataSourceList,
uuid,
} from '@/common/util/util';
import {
dataOriginRequest,
dataOriginStatic,
pageDataSource,
} from '@/common/util/const';
import IdSetter from '@/common/setter/id-setter';
import { getJSExpressionPrototype } from '@/common/manager/common-style';
import { createFlowListSetters } from '@/common/manager/button';
import { ButtonPosition } from '@/type/button-position';
import CheckboxSetter from '@/common/setter/checkbox-setter';
import ExprSetter from '@/common/setter/expr-setter';
import { __dataSource__ } from '@/common/util/expr-const';
import {
getDataOriginSetterSnippet,
getStaticDataSourceSnippet,
} from '@/common/manager/setter-snippet';
export default Bundle.createPrototype({
title: '页面',
componentName: 'CnPage',
// category: '自定义',
canOperating: false,
icon: Icon,
docUrl: '',
isInline: false,
isContainer: true,
snippets: [
{
screenshot:
'https://img.alicdn.com/tfs/TB1gaZrr.T1gK0jSZFhXXaAtVXa-1048-366.png',
label: 'CnPage',
schema: {
componentName: 'CnPage',
props: {},
},
},
],
configure: [
{
name: 'isCnPage',
title: 'isCnPage',
initialValue: true,
display: 'none',
},
{
name: '_context',
title: '上下文',
initialValue: {
type: 'JSExpression',
value: 'this',
},
display: 'none',
},
{
title: '样式',
type: 'group',
display: 'accordion',
items: [
{
name: 'noPadding',
title: '页面无内边距模式',
display: 'inline',
setter: 'BoolSetter',
},
{
name: 'hasCnFormFooterSubmit',
title: '预留表单吸底按钮空间',
display: 'inline',
setter: 'BoolSetter',
},
],
},
{
title: '页面渲染完成的回调',
name: 'componentDidMount',
display: 'plain',
setter: {
componentName: 'ObjectSetter',
props: {
config: {
items: [
{
name: 'requestList',
title: '页面数据源列表(state)',
display: 'block',
extraProps: {
setValue(target, value) {
if (value && Array.isArray(value)) {
let dataSourceList = getDataSourceList() || [];
dataSourceList = dataSourceList.filter((item) => {
if (
item?.dataSourceId &&
item.dataSourceId?.startsWith?.(pageDataSource)
) {
return true;
}
});
const existPageDataSourceMap = {};
const toRemovePageDataSourceMap = {};
dataSourceList.forEach((item) => {
const { dataSourceId } = item;
if (dataSourceId) {
existPageDataSourceMap[dataSourceId] = item;
toRemovePageDataSourceMap[dataSourceId] = item;
}
});
for (const item of value) {
if (item) {
const { id, name, description } = item;
if (id) {
if (existPageDataSourceMap[id]) {
const {
value: dsValue,
label,
id: realDsId,
} = existPageDataSourceMap[id];
delete toRemovePageDataSourceMap[id];
if (label === description && name === dsValue) {
} else {
const ds = getDataSourceById(realDsId);
if (ds) {
const oldDsConfig = ds.getConfig();
if (oldDsConfig) {
ds.setConfig({
...oldDsConfig,
name,
description,
});
}
}
}
} else {
const newDs = createDataSource(item);
}
}
}
}
for (const pageDsId in toRemovePageDataSourceMap) {
const toRemoveItem =
toRemovePageDataSourceMap[pageDsId];
if (toRemoveItem?.id) {
VisualEngine?.context
?.getManager?.('dataPool')
?.removeItem?.(toRemoveItem.id);
}
}
}
},
},
// mutator(value) {
// },
setter: {
componentName: 'ArraySetter',
props: {
mode: 'list',
itemSetter: {
componentName: 'ObjectSetter',
initialValue(prop) {
const defaultName = 'data';
const defaultDescription = '数据';
const initialValue = {
id: `${pageDataSource}_${uuid(6)}`,
description: defaultDescription,
name: defaultName,
dataOrigin: dataOriginRequest,
};
if (prop) {
const existFields = prop.getValue() || [];
if (existFields?.length > 0) {
const newNameIndex = generateIndex(
existFields,
defaultName,
'name',
);
initialValue.description = `${defaultDescription}${newNameIndex}`;
initialValue.name = `${defaultName}${newNameIndex}`;
}
}
return initialValue;
},
props: {
config: {
items: [
{
name: 'id',
title: 'id',
display: 'inline',
setter: <IdSetter />,
},
{
name: 'description',
display: 'inline',
title: '数据名称',
isRequired: true,
setter: 'StringSetter',
},
{
name: 'name',
display: 'inline',
title: '数据编码',
isRequired: true,
setter: 'StringSetter',
},
getDataOriginSetterSnippet({
initialValue: 'request',
display: 'inline',
defaultValue: 'request',
}),
{
condition(prop) {
return (
prop?.parent?.getValue?.().dataOrigin !==
dataOriginStatic
);
},
name: 'requestConfig',
display: 'inline',
isRequired: true,
title: '请求API',
setter: {
componentName: 'ServiceChoiceSetter',
props: {
mockDataTemplate: {
success: true,
data: {
tableData: [
{
name: 'aa',
age: 18,
},
],
paging: {
currentPage: 1,
pageSize: 10,
totalCount: 1,
},
},
},
buttonText: 'API',
params: {
env: 'pre',
pageSize: 999,
// serviceType: 'HSF',
},
resultProcessFuncTemplate: `function(res, state) {
// 当前函数会将请求结果存储到当前数据上
return res.data;
}`,
paramSetter: [
{
componentName: 'ParamSelectSetter',
props: {
dataKey: 'aa',
labelKey: 'aa',
valueKey: 'aa',
groupName: '参数列表',
},
title: '选择参数',
},
{
componentName: 'StringSetter',
title: '字符串',
},
getJSExpressionPrototype({ type: 'base' }),
],
},
},
},
{
name: 'dataSource',
title: '编辑静态数据',
display: 'plain',
className: 'cn-datasource-relative-setter',
setter: getStaticDataSourceSnippet(),
condition(prop) {
return (
prop?.parent?.getValue?.().dataOrigin ===
dataOriginStatic
);
},
},
{
// condition(prop){
// return prop?.parent?.getValue?.().dataOrigin !== dataOriginStatic
// },
name: 'deferPageRender',
display: 'inline',
title: '请求完成后再渲染页面',
setter: 'BoolSetter',
},
],
},
},
},
},
},
},
{
title: '页面初始动作列表',
name: 'actionList',
display: 'block',
setter: createFlowListSetters({
position: ButtonPosition.pageDidMount,
activeSetter: {
componentName: 'MixedSetter',
props: {
setters: [
{
componentName: (
<ExprSetter
configList={[
{
groupName: '其他数据',
groupExprName: __dataSource__,
needSecondParam: true,
},
]}
/>
),
title: '简单表达式',
},
{
componentName: <CheckboxSetter />,
title: '启用/禁用',
},
getJSExpressionPrototype({ type: 'base' }),
],
},
},
}),
},
],
},
},
},
},
],
});