oadp-material
Version:
oadp-material
569 lines (558 loc) • 20.1 kB
text/typescript
import { IPublicTypeComponentMetadata, IPublicTypeSnippet } from '@alilc/lowcode-types';
import { common } from '@alilc/lowcode-engine';
const OadpTableMeta: IPublicTypeComponentMetadata = {
"componentName": "OadpTable",
"title": "高级表格",
"category": "高级组件",
"group": "低代码组件",
"docUrl": "",
"screenshot": "https://img.alicdn.com/tfs/TB1ZU1HuVT7gK0jSZFpXXaTkpXa-112-64.png",
"devMode": "proCode",
"npm": {
"package": "oadp-material",
"version": "{{version}}",
"exportName": "OadpTable",
"main": "src/index.tsx",
"destructuring": true,
"subName": ""
},
"configure": {
"props": [
{
"name": "DataSetting",
"title": "数据设置",
"type": "group",
"display": "block",
"items": [
{
"title": {
"label": {
"type": "i18n",
"en-US": "DataSource",
"zh-CN": "数据源"
},
"tip": {
"type": "i18n",
"zh_CN": "属性: dataSource | 说明:设置表格数据源。",
"en_US": "prop: dataSource | description: Set Table DataSource.",
},
},
"name": "dataSource",
"description": "数据源",
"setter": {
"componentName": "MixedSetter",
"props": {
"setters": ["JsonSetter", "ExpressionSetter"],
},
},
"supportVariable": true,
},
{
"title": {
"label": {
"type": "i18n",
"en-US": "PrimaryKey",
"zh-CN": "数据主键"
},
"tip": {
"type": "i18n",
"zh_CN": "属性: primaryKey | 说明:设置表格数据主键。dataSource当中数据的主键,如果给定的数据源中的属性不包含该主键,会造成选择状态全部选中",
"en_US": "prop: primaryKey | description: Set Table PrimaryKey.",
},
},
"name": "primaryKey",
"description": "数据源",
"setter": "StringSetter",
"supportVariable": true,
},
]
},
{
"name": "DisplaySetting",
"title": "显示设置",
"type": "group",
"display": "block",
"items": [
{
"title": {
"label": {
"type": "i18n",
"en-US": "Table Layout",
"zh-CN": "表格布局"
},
"tip": {
"type": "i18n",
"zh_CN": "属性: table-layout | 说明:设为 fixed 表示内容不会影响列的布局,可选值:fixed=固定模式, auto=自动模式。默认为:auto。",
"en_US": "prop: table-layout | description: Set to fixed to indicate that the content will not affect the layout of the column. Optional values: fixed=fixed mode, auto=automatic mode. The default is: auto.",
},
},
"name": "tableLayout",
"description": "表格元素的 table-layout 属性,设为 fixed 表示内容不会影响列的布局,可选值:fixed=固定模式, auto=自动模式。默认为:auto。",
"setter": {
"componentName": "RadioGroupSetter",
"props": {
"dataSource": [
{
"label": "自动模式",
"value": "auto"
},
{
"label": "固定模式",
"value": "fixed"
}
],
"options": [
{
"label": "自动模式",
"value": "auto"
},
{
"label": "固定模式",
"value": "fixed"
}
]
},
"initialValue": "auto"
}
},
{
"title": {
"label": {
"type": "i18n",
"en-US": "Size",
"zh-CN": "尺寸模式"
},
"tip": {
"type": "i18n",
"zh_CN": "属性: size | 说明: 尺寸模式,可选值:small=紧凑模式, medium=普通模式。默认为:medium。",
"en_US": "prop: size | description: Size mode, optional values: small=compact mode, medium=normal mode. The default is: medium.",
},
},
"name": "size",
"description": "属性: size | 说明: 尺寸模式,可选值:small=紧凑模式, medium=普通模式。默认为:medium。",
"setter": {
"componentName": "RadioGroupSetter",
"props": {
"dataSource": [
{
"label": "普通模式",
"value": "medium"
},
{
"label": "紧凑模式",
"value": "small"
}
],
"options": [
{
"label": "普通模式",
"value": "medium"
},
{
"label": "紧凑模式",
"value": "small"
}
]
},
"initialValue": "medium"
}
},
{
"title": {
"label": {
"type": "i18n",
"zh_CN": "表格长度",
"en_US": "TableWidth",
},
"tip": {
"type": "i18n",
"zh_CN": "属性: tableWidth | 说明: 表格的总长度,可以这么用:设置表格总长度 、设置部分列的宽度,这样表格会按照剩余空间大小,自动其他列分配宽度",
"en_US": "prop: tableWidth | description: The total length of the table, instructions for use: Set the total length of the table, set the width of some columns, so that the table will automatically allocate width to other columns according to the remaining space size",
},
},
"name": "tableWidth",
"description": "表格长度",
"setter": "NumberSetter",
"supportVariable": true,
},
{
"title": {
"label": {
"type": "i18n",
"en-US": "Display Header",
"zh-CN": "显示表头"
},
"tip": {
"type": "i18n",
"zh_CN": "属性: hasHeader | 说明: 显示表头 | 类型: boolean | 默认值: true",
"en_US": "prop: hasHeader | description: Display Header | type: boolean | default: true",
},
},
"name": "hasHeader",
"description": "显示表头",
"setter": {
"componentName": "BoolSetter",
"isRequired": false,
"initialValue": true
}
},
{
"title": {
"label": {
"type": "i18n",
"en-US": "Fixed Header",
"zh-CN": "固定表头"
},
"tip": {
"type": "i18n",
"zh_CN": "属性: fixedHeader | 说明: 固定表头,该属性配合maxBodyHeight使用,当内容区域的高度超过maxBodyHeight的时候,在内容区域会出现滚动条 | 类型: boolean | 默认值: false",
"en_US": "prop: fixedHeader | description: Fixed Header This attribute is used in conjunction with maxBodyHeight. When the height of the content area exceeds maxBodyHeight, a scrollbar will appear in the content area | type: boolean | default: false",
},
},
"name": "fixedHeader",
"description": "固定表头",
"setter": {
"componentName": "BoolSetter",
"isRequired": false,
"initialValue": false
},
"supportVariable": true,
},
{
"title": {
"label": {
"type": "i18n",
"en-US": "Sticky Header",
"zh-CN": "置顶表头"
},
"tip": {
"type": "i18n",
"zh_CN": "属性: stickyHeader | 说明: 置顶表头 滚动时锁定表头。 | 类型: boolean | 默认值: false",
"en_US": "prop: stickyHeader | description: Sticky Header Lock the header when scrolling. | type: boolean | default: false",
},
},
"name": "stickyHeader",
"description": "置顶表头",
"setter": {
"componentName": "BoolSetter",
"isRequired": false,
"initialValue": false
},
"supportVariable": true,
},
{
"title": {
"label": {
"type": "i18n",
"zh_CN": "滚动高度",
"en_US": "Max Body Height",
},
"tip": {
"type": "i18n",
"zh_CN": "属性: maxBodyHeight | 说明: 最大内容区域的高度,在fixedHeader为true的时候,超过这个高度会出现滚动条。",
"en_US": "prop: maxBodyHeight | description: The height of the maximum content area. When fixedHeader is true, a scrollbar will appear if it exceeds this height",
},
},
"name": "maxBodyHeight",
"description": "表格长度",
"setter": "NumberSetter",
"supportVariable": true,
},
{
"title": {
"label": {
"type": "i18n",
"en-US": "Display Border",
"zh-CN": "显示边框"
},
"tip": {
"type": "i18n",
"zh_CN": "属性: hasBorder | 说明: 显示边框 | 类型: boolean | 默认值: true",
"en_US": "prop: hasBorder | description: Display Border | type: boolean | default: true",
},
},
"name": "hasBorder",
"description": "显示边框",
"setter": {
"componentName": "BoolSetter",
"isRequired": false,
"initialValue": true
}
},
{
"title": {
"label": {
"type": "i18n",
"en-US": "Display Zebra",
"zh-CN": "显示条纹"
},
"tip": {
"type": "i18n",
"zh_CN": "属性: isZebra | 说明: 显示条纹 | 类型: boolean | 默认值: false",
"en_US": "prop: isZebra | description: Display Zebra | type: boolean | default: false",
},
},
"name": "isZebra",
"description": "显示条纹",
"setter": {
"componentName": "BoolSetter",
"isRequired": false,
"initialValue": false
}
},
{
"title": {
"label": {
"type": "i18n",
"en-US": "Crossline",
"zh-CN": "交叉显示"
},
"tip": {
"type": "i18n",
"zh_CN": "属性: crossline | 说明: 交叉显示,在 hover 时出现十字参考轴,适用于表头比较复杂,需要做表头分类的场景。 | 类型: boolean | 默认值: false",
"en_US": "prop: crossline | description: Crossline When hovering, a cross reference axis appears, which is suitable for scenarios where the header is complex and requires header classification. | type: boolean | default: false",
},
},
"name": "crossline",
"description": "交叉显示",
"setter": {
"componentName": "BoolSetter",
"isRequired": false,
"initialValue": false
},
"supportVariable": true,
},
{
"title": {
"label": {
"type": "i18n",
"en-US": "setEmptyContent",
"zh-CN": "显示空占位符"
},
"tip": {
"type": "i18n",
"zh_CN": "属性: setEmptyContent | 说明: 数据为空时显示空数据。 | 类型: boolean | 默认值: true",
"en_US": "prop: setEmptyContent | description: Display empty data when the data is empty.. | type: boolean | default: true",
},
},
"name": "setEmptyContent",
"description": "显示空占位符",
"setter": {
"componentName": "BoolSetter",
"isRequired": false,
"initialValue": true
},
"supportVariable": true,
},
],
},
],
"supports": {
"style": true
},
"component": {
"isContainer": true
},
"advanced": {
"callbacks": {
"onNodeAdd": (dragment, currentNode) => {
console.log('onNodeAdd', dragment, currentNode);
// 检查 dragment 是否为 null
if (!dragment) {
console.error('dragment is null');
return;
}
// 检查 currentNode 是否为 null
if (!currentNode) {
console.error('currentNode is null');
return;
}
// 检查 currentNode.document 是否为 null
if (!currentNode.document) {
console.error('currentNode.document is null');
return;
}
const dragmentSchema = dragment?.exportSchema(common.designerCabin.TransformStage.Save);
console.log('dragment.exportSchema()', dragmentSchema);
const name = dragmentSchema?.props?.name ?? "默认名称";
const logicalName = dragmentSchema?.props?.logicalName ?? "默认逻辑名称";
const attributeType = dragmentSchema?.props?.attributeType ?? "STRING";
const referEntity = dragmentSchema?.props?.referEntity;
const referAttribute = dragmentSchema?.props?.referAttribute;
let dataIndex = logicalName;
if (attributeType === "REFER" && referAttribute && typeof referAttribute === 'object' && 'logicalName' in referAttribute) {
dataIndex = logicalName + '.name' ;
}
// 如果拖拽到表格内,需要转换元素为表格列
const layoutPNode = currentNode.document.createNode({
"componentName": "OadpTableColumn",
"props": {
"title": name,
"dataIndex": dataIndex,
"htmlTitle": logicalName,
"alignHeader": "center",
"align": "center",
"wordBreak": "all",
}
});
console.log('onNodeAdd OadpTable layoutPNode', layoutPNode);
// 检查 layoutPNode 是否为 null
if (!layoutPNode) {
console.error('layoutPNode is null');
return;
}
// 当前dragment还未添加入node子节点,需要setTimeout处理
setTimeout(() => {
currentNode.replaceChild(
dragment,
layoutPNode.exportSchema(common.designerCabin.TransformStage.Save)
);
}, 1);
},
},
},
}
};
const snippets: IPublicTypeSnippet[] = [
{
"title": "表格",
"screenshot": "https://img.alicdn.com/tfs/TB1ZU1HuVT7gK0jSZFpXXaTkpXa-112-64.png",
"schema": {
"componentName": "OadpTable",
"props": {
"dataSource": [
{
"name": "王小",
"id": "1",
"age": 15000,
"role": "开发"
}, {
"name": "王中",
"id": "2",
"age": 25000,
"role": "产品"
}, {
"name": "王大",
"id": "3",
"age": 35000,
"role": "设计"
}
],
"size": "medium",
"hasBorder": false,
"hasHeader": true,
"isZebra": false,
"fixedHeader": false,
"stickyHeader": true,
"crossline": false,
"style": {
"marginTop": "5px",
"marginBottom": "5px",
"marginLeft": "10px",
"marginRight": "10px",
}
},
"children": [
{
"componentName": "OadpTableColumn",
"props": {
"dataIndex": "name",
"title": "名称",
"htmlTitle": "name",
"alignHeader": "center",
"align": "center",
"lock": false,
"wordBreak": "all",
},
"hidden": false,
"isLocked": false,
"condition": true,
"conditionGroup": ""
},
{
"componentName": "OadpTableColumn",
"props": {
"dataIndex": "action",
"title": "操作",
"htmlTitle": "action",
"width": 50,
"alignHeader": "center",
"align": "center",
"lock": false,
"wordBreak": "all",
"cell": {
"type": "JSSlot",
"params": ["value", "index", "record"],
"value": [
{
"componentName": "OadpButtonBar",
"props": {
"direction": "row",
"justify": "center",
"align": "center",
// "style": {
// "width": "100px"
// }
},
"hidden": false,
"title": "",
"isLocked": false,
"condition": true,
"conditionGroup": "",
"children": [
{
"componentName": "OadpButton",
"props": {
"label": "编辑",
"type": "primary",
"size": "medium",
"disabled": false,
"style": {
"marginLeft": "5px",
"marginRight": "5px"
},
"text": true
},
"hidden": false,
"title": "",
"isLocked": false,
"condition": true,
"conditionGroup": ""
},
{
"componentName": "OadpButton",
"props": {
"label": "删除",
"type": "primary",
"size": "medium",
"disabled": false,
"style": {
"marginLeft": "5px",
"marginRight": "5px"
},
"text": true
},
"hidden": false,
"title": "",
"isLocked": false,
"condition": true,
"conditionGroup": ""
}
]
}
]
}
},
"hidden": false,
"isLocked": false,
"condition": true,
"conditionGroup": ""
}
]
}
}
];
export default {
...OadpTableMeta,
snippets
};