Home

Awesome

<h3 align="center"> 一个基于React的数据/字段映射组件 </h3>

npm version download gzip size license

English | 简体中文

<p align="center"> <img width="400" src="https://img.alicdn.com/imgextra/i4/O1CN012ecl7n25IsnZeXw1d_!!6000000007504-1-tps-595-411.gif"> <img width="400" src="https://img.alicdn.com/imgextra/i2/O1CN017Gcu0Y1mbgIHcgqwr_!!6000000004973-1-tps-595-411.gif"> </p> <p align="center"> <img width="400" src="https://img.alicdn.com/imgextra/i2/O1CN011xYzxM1ZenzfVE0Xq_!!6000000003220-1-tps-595-411.gif"> <img width="400" src="https://img.alicdn.com/imgextra/i4/O1CN01Nt9rpo25y6NlRMUtR_!!6000000007594-1-tps-595-411.gif"> </p>

✨ 特性

🔨快速本地DEMO


git clone git@github.com:aliyun/react-data-mapping.git
npm install
cd example
npm install
npm start

📦 安装


npm install react-data-mapping

API<a name='canvas-attr'></a>

<b>DataMapping属性</b>

参数说明类型默认值
width组件宽度<font color="c41d7f">number</font>默认500,自适应的话可以设置"auto"
height组件高度<font color="c41d7f">number</font>默认500,自适应的话可以设置"auto"
<a name='data-mapping-type'></a>type映射类型<font color="c41d7f">string</font>single | mutiply ,默认 single
className组件类名<font color="c41d7f">string</font>-
sourceClassName来源表类名<font color="c41d7f">string</font>-
targetClassName目标表类名<font color="c41d7f">string</font>-
columns每列的属性<font color="c41d7f">Columns | Array<Columns> </font>undefined
sourceData来源表数据<font color="c41d7f">SourceData | Object | Array<SourceData></font>undefined
targetData目标表数据<font color="c41d7f">TargetData | Object | Array<TargetData></font>undefined
mappingData初始映射关系,见mappingData Prop<font color="c41d7f">array</font>[ ]
emptyContent当表字段为空时显示内容string | ReactNode-
emptyWidth当表字段为空时,表容器的宽度string | number150
config组件的额外属性配置,见config Prop<font color="c41d7f">object</font>{ }
isConnect每次连线前触发,判断是否可以连线<font color="c41d7f">function(edge): boolean</font>
onChange每次连线触发事件<font color="c41d7f">function</font>
onRowMouseOver鼠标移入某一行数据时触发<font color="c41d7f">function(row)</font>
onRowMouseOut鼠标移出某一行数据时触发<font color="c41d7f">function(row)</font>
onEdgeClick点击连线时触发<font color="c41d7f">function(row)</font>
readonly是否只读<font color="c41d7f">boolean</font>默认false
<br>

<a name='columns-type'></a><b>Column</b>

列描述数据对象,是Columns中的一项

参数说明类型默认值
key列数据在数据项中对应的路径<font color="c41d7f">string</font>-
title列头显示文字<font color="c41d7f">string</font>-
width列宽度<font color="c41d7f">number</font>-
primaryKey此属性是否为该组数据唯一标识<font color="c41d7f">boolean</font>必须且仅有一个属性为true
render自定义渲染函数,参数分别为当前行的值,当前行数据,行索引<font color="c41d7f">function(text, record, index) {}</font>-
<br>

<a name='source-data'></a><b>sourceData</b>

来源表数据,当typesingle 时,sourceData的类型为<font color='#c41d7f'>{ }</font>;当typemutiply 时,sourceData的类型为<font color='#c41d7f'>[ ]</font>

参数说明类型默认值
<a name='source-data-id'><a>id列标识, single 类型下,id可不填, mutiply 为必填<font color="c41d7f">string</font>-
title列标题<font color="c41d7f">string</font>-
fileds数据数组<font color="c41d7f">array</font>-
checked勾选框是否已勾选<font color="c41d7f">boolean</font>false
disable禁止连线<font color="c41d7f">boolean</font>false
<br>

<a name='target-data'></a><b>targetData</b>

目标表数据,当typesingle 时,targetData的类型为<font color='#c41d7f'>{ }</font>;当typemutiply 时,targetData的类型为<font color='#c41d7f'>[ ]</font>,属性详情见sourceData

<br>

<a name='mapping-data'></a><b>mappingData</b>

参数说明类型
source来源表当前行数据的唯一标识<font color="c41d7f">-</font>
target目标表当前行数据的唯一标识<font color="c41d7f">-</font>
sourceNode来源表的id,见sourceData ID<font color="c41d7f">string</font>
targetNode目标表的id,见targetData ID<font color="c41d7f">string</font>
<br>

<a name='config'></a><b>config</b>

组件的额外属性配置

参数说明类型默认值
delayDraw延迟渲染,此组件一定要确保画布容器渲染(包括动画执行)完毕才能渲染, 否则坐标都产生偏移, 如:antd的modal的动画<font color="c41d7f">number</font>0
extraPos画布渲染的时候会留padding,extraPos Prop<font color="c41d7f"> { }</font>-
sortable排序支持<font color="c41d7f">boolean | object</font>-
linkNumLimit连线数量支持<font color="c41d7f">number | object</font>-
checkable来源表,目标表是否有勾选框checkable Prop<font color="c41d7f"> { }</font>-
<br>

<a name='extraPos-prop'></a><b>extraPos</b>

画布渲染的时候预留padding

参数说明类型默认值
paddingLeft左侧padding间距number0
paddingRight右侧padding间距number0
paddingTop顶部padding间距number0
paddingBottom底部padding间距number0
paddingCenter水平间距number150
nodeVerticalPadding节点垂直间距number10
rowHeight节点每行的高度number26
<br>

<a name='checkable-prop'></a><b>checkable</b>

来源表,目标表是否有勾选框

参数说明类型默认值
source源表是否有勾选框booleanfalse
target目标表是否有勾选框booleanfalse

🔗API

interface columns { // 设置每列的属性
  title ? : string; // 每列的title,类似thead的概念
  key: string; // 每列的唯一标志,对应数据上的key值
  width ? : number; // 每列宽度
  primaryKey: boolean // 这列的key对应的value是否作为键值对
}

interface config {
  delayDraw: number; // 延迟渲染,此组件一定要确保画布容器渲染(包括动画执行)完毕才能渲染,否则坐标都产生偏移,如:antd的modal的动画
  extraPos ? : { // 画布渲染的时候会留padding
      paddingLeft ? : number,
      paddingRight ? : number,
      paddingTop ? : number,
      paddingBottom ? : number,
      paddingCenter ? : number,
    },
    sortable ? : boolean | { // 排序支持,假如是true,会整个画布都支持排序
      source ? : boolean, // 假如是true,单纯左侧来源表支持排序
      target ? : boolean // 假如是true,单纯左侧目标表支持排序
    },
    linkNumLimit ? : number | { // 连线数量支持,假如是number,会整个画布都支持n条连线
      source ? : number, // 假如是number,单纯左侧来源表支持n条连线
      target ? : number // 假如是number,单纯左侧来源表支持n条连线
    },
    checkable ?: {  // 源表目标表是否有勾选框
      source ? : boolean, // 假如是true,单纯左侧来源表支持勾选框
      target ? : boolean
    }
}

interface ComProps { // 组件props属性
  width ? : number | string; // 组件的宽度,自适应的话可以设置"auto"
  height ? : number | string; // 组件的高度,自适应的话可以设置"auto"
  type ? : string; // "single"or"mutiply",单表映射(上图一) or 多表映射(上图二)
  className ? : string; // 组件类名
  sourceClassName ? : string; // 来源表类名
  targetClassName ? : string; // 目标表类名
  columns: Array < columns > ; // 请参考上述interface columns
  sourceData: Array < any > | Object; // 单表映射对应Object,多表映射Array,可参考demo
  targetData: Array < any > | Object; // 单表映射对应Object,多表映射Array,可参考demo
  mappingData: Array < any > ; // 初始化对应关系数据,可参考demo
  emptyContent ? : string | JSX.Element; // 当表字段为空时显示内容
  emptyWidth ? : number | string; // 当表字段为空时表容器宽度
  isConnect?(edge: any): boolean; // 每次连线前触发isConnect,返回true则进行连线,false则不会
  onChange(data: any): void; // 每次连线都是触发onChange事件
  onRowMouseOver?(row:any):void, // 鼠标移入某一行数据时触发
  onRowMouseOut?(row:any):void, // 鼠标移出某一行数据时触发
};
import ButterflyDataMapping from 'react-data-mapping';
import 'react-data-mapping/dist/index.css';

<ButterflyDataMapping
  width={500}
  height={1000}
  type={'single'}
  columns={columns}
  sourceData={sourceData}
  targetData={targetData}
  mappingData={mappingData}
  className={'butterfly-data-mappint'}
  sourceClassName={'source-column'}
  targetClassName={'target-column'}
/>

如需要更多定制的需求,您可以提issue或者参考Butterfly来定制您需要的需求