handsontable的二次封装

介绍

基于vue-handsontable的二次封装。

在线编辑表格组件中,handsontable功能强大,而且有免费版,但是英文版技术文档和外网官网让人一言难尽。本次封装基于vue-handsontable的二次封装(根据handsontable的属性制作简单快捷功能,如固定表头,字段显隐,合并表格。

码云地址:https://gitee.com/yiforget/vue-encapsulation-handsontable

gitHub地址:https://github.com/yi1104647079/vue-encapsulation-handsontable

效果图

case2.png

Gif较大,请稍等

gifhome_1600x780_21s.gif

功能简介

1.固定表头

  • handsontable中规定组件父元素height必须为准确值,但是数据为动态时高度无法确定。

  • 当数据数据过多时候,滚动条出现,下滑时表头无法查看,查阅起来很不方便。

    本功能可设置一个默认高度,为400px,当数据过多,滚动条出现。也可默认不固定表头,则handsontable的父元素高度为数据量计算而来,实现动态高度

2.字段显隐

顾名思义,可将表头字段隐藏或者显示

3.合并表格

handsontable的属性mergeCells可以进行表格合并,但需按照特定规则将所需要合并的单元格位置已数组形式存储。

[
    {row:0, col:2, rowspan:5, colspan:1},
    {row:0, col:5, rowspan:6, colspan:1},
]

当数据为调取后端时候,需要动态的计算出合并位置。所以根据此属性需要将数据重组成以下类型,才可合并。

//所需要合并的字段必须每一个的都需要有值,可能需要个人的数据处理
[
    {typeName: '测试1', name: '名称1', targetMoney:'10', actualMoney: '20'},
    {typeName: '测试1', name: '名称2', targetMoney:'11', actualMoney: '10'},
    {typeName: '测试1', name: '名称3', targetMoney:'1010', actualMoney: '10'},
    {typeName: '测试1', name: '名称4', targetMoney:'10', actualMoney: '10'},
    {typeName: '测试2', name: '名称1', targetMoney:'22', actualMoney: '10'},
    {typeName: '测试2', name: '名称2', targetMoney:'10', actualMoney: '10'},
]

合并的字段可能不为一,则需要将合并的字段组成数据

//若字段需要依据某个字段的模块来合并,受限制时候,既父子关系,则需放入前一个字段的children中即可,参照效果图
let countField = [
   {
     field: 'typeName',
     children: [{
       field: 'name',
       children: [{
          field: 'targetMoney'
       }]
      }]
    }
];
//引入工具类
import { merge, spanMethod} from './mergeClass';


//在data中声明一个对象,用来存储计算出来后的每一个需要合并的字段的规则
this.merge = {};

//利用对象的浅拷贝赋值给一个值
let das = this.merge;

//new一个对象,并将  合并字段,存储对象, 数据  格式传入
let merges = new merge(countField, das, data);

//开始计算,并得出this.merge的结果,可console.log打印出this.merge,观察数据
merges.startCalculation();



/*
* 因为数据对比较大,需要时间。且涉及到三层级联,则需要在半秒后进行数据整合,为第三级以后setTimeout提供计算时间
*/

// 根据所在handsontable合并规则计算最终合并数据
// spanMethod(合并字段计算出的规则,所在handsontable显示的索引)

let mergeCells = this.hotSettings.mergeCells;
setTimeout(() => {
    
  //每一次spanMethod后得出的都是指定字段合并规则,所以多个字段需要多次将数据拼接到mergeCells
  mergeCells = mergeCells.concat(spanMethod(this.merge.typeName,1));
  mergeCells = mergeCells.concat(spanMethod(this.merge.name,2));
  mergeCells = mergeCells.concat(spanMethod(this.merge.targetMoney,3));
  
  //需要将所有合并数据计算完成后才能将数据赋值给handsontable,否则会使布局错乱
  this.hotSettings.data = JSON.parse(JSON.stringify(data));
  
  //在获取数据时候就将loading打开,提升用户体验
  this.contentLoading = false;
    
},500);

使用建议

  • handsontable使用较为复杂,不建议二次封装成组件来使用

  • j建议:直接将代码复制使用

  • 本源码中涵盖大部分handsontable常用属性,并标注释,可以自行查看

  • 源码中使用部分element-ui的组件,可替换成你所使用的组件,保留点击事件即可

  • 所开发功能大部分使用逻辑开发,可以稍微改后用于其他框架

开发者 & 其他

  • @title handsontable的简单二次封装
  • @author 遗忘
  • @time 2020-03-13
  • @QQ 1786787613
  • @other 欢迎提交bug,请写清楚遇到问题的原因,开发环境,复显步骤。
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,293评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,604评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,958评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,729评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,719评论 5 366
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,630评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,000评论 3 397
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,665评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,909评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,646评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,726评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,400评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,986评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,959评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,197评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,996评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,481评论 2 342

推荐阅读更多精彩内容

  • 要招一个会vue的开发者: 作为面试官的你,你还会每次都只是问这些老土的问题吗?你对MVVM的理解是什么?你知道什...
    浪子神剑阅读 23,025评论 0 259
  • 基于Vue的一些资料 内容 UI组件 开发框架 实用库 服务端 辅助工具 应用实例 Demo示例 element★...
    尝了又尝阅读 1,140评论 0 1
  • UI组件 element- 饿了么出品的Vue2的web UI工具套件 Vux- 基于Vue和WeUI的组件库 m...
    柴东啊阅读 15,846评论 2 140
  • UI组件 element- 饿了么出品的Vue2的web UI工具套件 Vux- 基于Vue和WeUI的组件库 m...
    小姜先森o0O阅读 9,390评论 0 72
  • UI组件 element- 饿了么出品的Vue2的web UI工具套件 Vux- 基于Vue和WeUI的组件库 m...
    王喂马_阅读 6,441评论 1 77