vue组件可视化 开源,vue关系图可视化插件

  vue组件可视化 开源,vue关系图可视化插件

  本文主要介绍使用vue比较两组数据差异的可视化组件的相关信息。通过示例代码详细介绍,对大家学习或使用vue有一定的参考价值。有需要的朋友可以参考一下。

  

目录

  要求:一般要点:根据刚才的要点,可以搭建组件的道具。组件的基本样式也非常简单。完成后,最后贴完整代码:使用示例:效果预览:扩展函数TODO: summary作为标题。我朋友有这样的要求,感觉挺普遍的。发出来供大家参考。

  

需求:

  El-table用于显示两组数据,有差异的单元格显示为红色,新增的单元格显示为绿色。

  

大概要点:

  需要一个数据集,包含两组要比较的数据。

  需要一个唯一键来确定某一行的数据是否存在于其他数据中(无论它是否是新的)

  接受一个表列的配置来渲染表,只根据配置的数据比较差异,其他数据不用比较。

  

根据刚才的要点可以建立一下组件的props:

  道具:{

  唯一键:{

  类型:字符串,

  默认值:“id”

  },

  数据组:{

  类型:数组,

  验证器:val=val.length===2

  },

  列:{

  类型:数组,

  必填:真

  }

  }

  唯一id默认为id;列的格式定义为{label,prop,}根据el-table-column。

  

组件的基本样式也很简单:

  模板

  div class=差异表容器

  el表

  v-for=(data,i) in completedData

  :key=i

  :data=data

  :row-style=markRowStyles

  :cell-style=markCellStyles

  El-table-column v-for= item in columns :key= ` $ { I } $ { item . prop } ` align= center v-bind= item /

  /el-table

  /div

  /模板

  style lang=scss 范围。差异表容器{

  显示器:flex

  align-items:flex-start;el表。el表{

  左边距:20px

  }

  }

  /风格

  如上图,两个表只是简单的水平排列。这里的CompletedData是指diff处理后的数据,格式与传入的dataGroup相同。MarkRowStyles和markRowStyles由el-table提供。它们指的是行和列的样式,值是对象或返回对象的函数。

  接下来,定义两个符号,然后在diff data时标记数据。用符号标记可以防止属性名冲突。

  data() {

  返回{

  diff _ cell _ key:symbol( diff cells ),//存储不同单元格属性名称的数组。

  completed _ key:symbol( completed )//标记已被处理。

  };

  }

  那么diff的风格处理也可以直接确定。

  方法:{

  //如果处理后没有标记,只出现在一组数据中,即增加了新的数据。

  markRowStyles({ row }) {

  返回(

  !划【这个。COMPLETED_KEY] {

  background color:“# e1f3d 8”

  }

  );

  },

  //根据当前行的唯一键,在地图中查找缓存的行数据。

  //是DataGroup [0]。find(item=item[唯一键]==row[唯一键])

  //然后判断DIFF_CELL_KEY数组是否包含当前列的属性名。

  markCellStyles({ row,column }) {

  const { $_cacheMap,uniqueKey,DIFF _ CELL _ KEY }=this

  const _ cache row=$ _ cache map . get(row[unique key]);

  返回(

  _cacheRow

  _cacheRow[DIFF_CELL_KEY]。包括(column.property) {

  background color:“# fde2e 2”

  }

  );

  }

  }

  最后是对diff的处理,直接用calculation属性完成。处理完成后,将返回新数据:

  计算值:{

  //处理后的数据

  completedData({ dataGroup,uniqueKey,columns,DIFF_CELL_KEY,COMPLETED_KEY }) {

  //这一步不是必须的。根据业务要求,如果按照规定不能修改原始数据,请进行深度复制。

  const _ data group=deep clone(data group);

  //Mapstringnumber,object,ts不熟悉。应该是这样写的,其实是row[unique]: row

  const cache Map=new Map();

  //遍历第一组数据一次,初始化DIFF_CELL_KEY数组,然后存储在map中。

  for (const _row of _dataGroup[0]) {

  _ row[DIFF _ CELL _ KEY]=[];

  cacheMap.set(_row[uniqueKey],_ row);

  }

  //遍历第二组数据,里面还有一次循环,因为只处理列里面定义的属性,其他属性不做对比

  for (const _row of _dataGroup[1]) {

  for (const { prop } of columns) {

  //如果是唯一键就直接跳过

  if (prop===uniqueKey)继续;

  //从缓存中查找相同的一条数据

  const original=缓存映射。get(_ row[唯一键]);

  //如果找不到就说明这条数据是新增的,直接跳过

  如果(!原文)继续;

  //否则就在两组数据中打一个标识表示已处理过,不是新增的

  _ row[COMPLETED _ KEY]=true;

  original[COMPLETED _ KEY]=true;

  //最后对比两个属性值,如果相同就推进差异单元格关键字数组中

  //注意这里差异单元格关键字数组只存在于第一组数据当中

  //因为只要有差异就会在所有表格中显示,所以不用每一组数据都存

  _ row[道具]!==original[prop]original[DIFF _ CELL _ KEY].推(道具);

  }

  }

  //将地图存一份到这中,因为会在处理样式的时候用到

  这个. cacheMap=cacheMap

  return _ dataGroup

  }

  }

  

完事了,最后贴一下完整代码:

  模板

  div class=差异表容器

  埃尔表

  v-for=(data,i) in completedData

  :key=i

  :data=data

  :row-style=markRowStyles

  :cell-style=markCellStyles

  El-table-column v-for= item in columns :key= ` $ { I } $ { item。prop } ` v-bind= item align= center /

  /el-table

  /div

  /模板

  脚本

  函数深度克隆(瓦尔){

  //看需求要不要做深拷贝

  返回英国压力单位

  }

  导出默认值{

  名称: DiffTable ,

  道具:{

  唯一键:{

  类型:字符串,

  默认值:" id "

  },

  数据组:{

  类型:数组,

  验证器:val=val.length===2

  },

  列:{

  类型:数组,

  必填:真

  }

  },

  data() {

  返回{

  DIFF _ CELL _ KEY:Symbol( DIFF cells ),

  COMPLETED_KEY:符号(“已完成”)

  };

  },

  计算值:{

  completedData({ dataGroup,uniqueKey,columns,DIFF_CELL_KEY,COMPLETED_KEY }) {

  const _ data group=深度克隆(数据组);

  const cache Map=new Map();

  for (const _row of _dataGroup[0]) {

  _ row[DIFF _ CELL _ KEY]=[];

  cacheMap.set(_row[uniqueKey],_ row);

  }

  for (const _row of _dataGroup[1]) {

  for (const { prop } of columns) {

  if (prop===uniqueKey)继续;

  const original=缓存映射。get(_ row[唯一键]);

  如果(!原文)继续;

  _ row[COMPLETED _ KEY]=true;

  original[COMPLETED _ KEY]=true;

  _ row[道具]!==original[prop]original[DIFF _ CELL _ KEY].推(道具);

  }

  }

  这个. cacheMap=cacheMap

  return _ dataGroup

  }

  },

  方法:{

  markRowStyles({ row }) {

  返回(

  !划【这个. COMPLETED_KEY] {

  背景颜色:" # e1f3d 8 "

  }

  );

  },

  markCellStyles({ row,column }) {

  const { $_cacheMap,uniqueKey,DIFF _ CELL _ KEY }=this

  const _ cache row=$ _ cache map。get(行[唯一键]);

  返回(

  _cacheRow

  _cacheRow[DIFF_CELL_KEY].包括(column.property) {

  背景颜色:" # fde2e 2 "

  }

  );

  }

  }

  };

  /脚本

  样式lang=scss 范围。差异表容器{

  显示器:flex

  align-items:flex-start;埃尔表100 . El表{

  左边距:20px

  }

  }

  /风格

  

使用示例:

  模板

  diff-table:data-group=[旧数据,新数据]:columns=表列/

  /模板

  脚本

  从导入不同的./diff表。vue ;

  导出默认值{

  名称:"索引",

  组件:{

  差异表

  },

  data() {

  返回{

  旧数据:[

  { id: 1,姓名:张三1 ,年龄:23,地址: zxczxczxc },

  { id: 2,姓名:张三2 ,年龄:23.5,地址: zxczxczxc },

  { id: 3,姓名:张三34 ,年龄:23,地址: zxczxczxc },

  { id: 4,姓名:张三4 ,年龄:23,地址: zxczxczxc },

  { id: 5,姓名:张三5 ,年龄:23,地址: zxczxczxc },

  { id: 6,姓名:张三5 ,年龄:23,地址: zxczxczxc }

  ],

  新数据:[

  { id: 1,姓名:张三1 ,年龄:23,地址: zxczxczxc },

  { id: 2,姓名:张三2 ,年龄:23,地址: zxczxczxc },

  {ID: 4,姓名:张三4 ,年龄:23,地址:地址地址地址 },

  { id: 3,姓名:张三3 ,年龄:23,地址: zxczxczxc },

  { id: 5,姓名:张三5 ,年龄:23,地址: zxczxczxc },

  { id: 7,姓名:张三5 ,年龄:23,地址: zxczxczxc },

  { id: 8,姓名:张三5 ,年龄:23,地址: zxczxczxc }

  ],

  表格列:[

  {label:唯一id ,prop: id},

  {label: name ,prop: name},

  {label: age ,prop: age},

  {标签:地址,属性:地址 }

  ]

  };

  }

  };

  /脚本

  

效果预览:

  

扩展功能TODO:

  可以配置n组数据进行比较。

  超过两组数据后,应添加DELETE_ROW_KEY来标记删除的数据。

  逻辑大致是这样的:仅存在于一组数据中的东西是新的;如果有多组数据,但不是全部,未包括的数据将被标记为已删除。

  您可以配置差异样式、自定义差异规则等。

  

总结

  就是这样。本文介绍了用vue比较两组数据差异的可视化组件。关于使用vue比较两组数据差异的更多信息,请搜索我们以前的文章或继续浏览下面的相关文章。希望大家以后能多多支持我们!

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: