一个vue-table的组件

说明:

1.基于element-ui开发的vue表格组件。

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

功能:

1.支持树形数据的展示

2.行拖拽排序

3.单元格拖拽排序

github

使用方法:

1.下载npm包:
你的VUE项目的根目录底下运行:
    npm install ele-table
```
2.引入本npm包并注册为vue的组件:
例如:在需要使用的vue页面中:
```<template>
    &lt;!-- 里面写ele-table组件--&gt;
    &lt;ele-table :data="tableData" treetable style="width: 100%"&gt;
      &lt;ele-table-column prop="id" label="姓名"&gt;
        &lt;template slot-scope="scope"&gt;
          &lt;div :style="`padding-left:${20*(scope.row._indent-1)}px`"&gt;
            &lt;span  v-if="scope.row.children"&gt;
              &lt;i v-if="scope.row._expand" &gt;-&lt;/i&gt;&lt;i v-else&gt;+&lt;/i&gt;
            &lt;/span&gt;
            &lt;span&gt;{{scope.row.id}}&lt;/span&gt;
          &lt;/div&gt;
        &lt;/template&gt;
      &lt;/ele-table-column&gt;
      &lt;ele-table-column prop="id" label="年龄" width="180"&gt;
      &lt;/ele-table-column&gt;
      &lt;ele-table-column
        prop="label"
        label="地址"&gt;
      &lt;/ele-table-column&gt;
    &lt;/ele-table&gt;
    &lt;ele-table
      draggablerow //能否行拖拽
      :allow-drag="allowdrag" //能否被拖拽
      :allow-drop="allowDrop" //能否被放置
      :data="tableData"
      @node-drag-start="handleDragStart"
      @node-drag-enter="handleDragEnter"
      @node-drag-leave="handleDragLeave"
      @node-drag-over="handleDragOver"
      @node-drag-end="handleDragEnd"
      style="width: 100%"&gt;
      &lt;ele-table-column prop="id" label="姓名"   width="180"&gt;
      &lt;/ele-table-column&gt;
      &lt;ele-table-column
        prop="id"
        label="年龄"
        width="180"&gt;
      &lt;/ele-table-column&gt;
      &lt;ele-table-column
        prop="label"
        label="地址"&gt;
      &lt;/ele-table-column&gt;
    &lt;/ele-table&gt;
&lt;/template&gt;

&lt;script&gt;
import { eleTable, eleTableColumn } from "ele-table";
import 'ele-table/dist/ele-table.css'; 
//项目引入element-ui 不需要引入样式,但需要class类指定拖拽样式
//&lt;style&gt;
    //.el-table--dropNode{
     // background-color: #409eff !important;
    //}
   // .el-tree__drop-indicator {
   //     position: absolute;
    //    left: 0;
    //    right: 0;
    //    height: 2px !important;
    //    background-color: #409eff;
    //    z-index: 10000;
    //} 
//&lt;/style&gt;
export default {
    data(){
        return{
            tableData: [{
              id: 1,
              label: '一级 1',
              _expand:true,   //设置默认展开节点
              children: [{
                id: 4,
                label: '二级 1-1',
                _expand:true,
                children: [{
                  id: 9,
                  label: '三级 1-1-1'
                }, {
                  id: 10,
                  label: '三级 1-1-2'
                }]
             }]
           }, {
             id: 2,
             label: '一级 2',
             children: [{
                id: 5,
                label: '二级 2-1'
             }, {
                id: 6,
                label: '二级 2-2'
             }]
           }]
        }
    },
    components: {
        eleTable,
        eleTableColumn 
    },
    methods: {
        handleDragEnd(row, column, cell, event) {
          let data = this.tableData[row.draggingcolumn];
          if (cell == "after") {
            this.tableData.splice(column.dropcolumn + 1, 0, data);
            if (row.draggingcolumn &gt; column.dropcolumn) {
              this.tableData.splice(row.draggingcolumn + 1, 1);
            } else {
              this.tableData.splice(row.draggingcolumn, 1);
            }
          }
          if (cell == "before") {
            this.tableData.splice(column.dropcolumn, 0, data);
            if (row.draggingcolumn &gt; column.dropcolumn) {
              this.tableData.splice(row.draggingcolumn + 1, 1);
            } else {
              this.tableData.splice(row.draggingcolumn, 1);
            }
          }
          if (cell == "inner") {
            this.$set(
              this.tableData,
              row.draggingcolumn,
              this.tableData[column.dropcolumn]
            );
            this.$set(this.tableData, column.dropcolumn, data);
          }
        },
    },
   }
}
&lt;/script&gt;

<h3>Calendar Attributes</h3>
<table>
<thead><tr>
<th>参数</th>
<th>说明</th>
<th>类型</th>
<th>可选值</th>
<th>默认值</th>
</tr></thead>
<tbody>
<tr>
<td>data</td>
<td>显示的数据</td>
<td>array</td>
<td>—</td>
<td>—</td>
</tr>
<tr>
<td>treetable</td>
<td>是否树形数据</td>
<td>boolean</td>
<td>—</td>
<td>false</td>
</tr>
<tr>
<td>_expand</td>
<td>树形数据默认展开节点(不支持递归关联)</td>
<td>boolean</td>
<td>—</td>
<td>false</td>
</tr>
<tr>
<td>draggablerow</td>
<td>是否开启行拖拽</td>
<td>boolean</td>
<td>—</td>
<td>false</td>
</tr>
<tr>
<td>draggable</td>
<td>是否开启单元格拖拽</td>
<td>boolean</td>
<td>—</td>
<td>false</td>
</tr>
<tr>
<td>allow-drag</td>
<td>能否被拖拽</td>
<td>Function(row(行数据), column(行拖拽为index,单元格为所在列), cell(节点), event)</td>
<td>—</td>
<td>要求返回boolean</td>
</tr>
<tr>
<td>allow-drop</td>
<td>能否被放置</td>
<td>Function(row, column, cell, event, type)</td>
<td>—</td>
<td>要求返回boolean</td>
</tr>
</tbody>
</table>
<h3>Calendar Events</h3>
<table>
<thead><tr>
<th>事件名</th>
<th>说明</th>
<th>参数</th>
</tr></thead>
<tbody>
<tr>
<td>node-drag-start</td>
<td>节点开始拖拽时触发的事件</td>
<td>Function(row(行数据), column(行拖拽为index,单元格为所在列), cell(节点), event)</td>
</tr>
<tr>
<td>node-drag-enter</td>
<td>拖拽进入其他节点时触发的事件</td>
<td>Function(row(行数据), column(行拖拽为index,单元格为所在列), cell(节点), event, draggingNode(被拖拽节点)</td>
</tr>
<tr>
<td>node-drag-leave</td>
<td>拖拽离开某个节点时触发的事件</td>
<td>Function(row(行数据), column(行拖拽为index,单元格为所在列), cell(节点), event, draggingNode(被拖拽节点)</td>
</tr>
<tr>
<td>node-drag-over</td>
<td>在拖拽节点时触发的事件</td>
<td>Function(row(行数据), column(行拖拽为index,单元格为所在列), cell(节点), event, draggingNode(被拖拽节点)</td>
</tr>
<tr>
<td>node-drag-end</td>
<td>拖拽结束时触发的事件</td>
<td>Function(dragging(被拖拽节点对象), drop(放置节点对象), dropType(放置位置(before、after、inner)), event)</td>
</tr>
<tr>
<td>node-drop</td>
<td>拖拽完成时触发的事件</td>
<td>Function(dragging(被拖拽节点对象), drop(放置节点对象), dropType(放置位置(before、after、inner)), event)</td>
</tr>
</tbody>
</table>

来源:https://segmentfault.com/a/1190000016123145
Logo

前往低代码交流专区

更多推荐