shuyilink-ui

0.2.60 • Public • Published

定制表格组件技术文档

简介

目的: 定制表格组件开发是为解决三方表格组件在性能低的平台下,出现渲染慢、卡顿现象。

思路: 该组件基于div + flex布局,模拟表格布局及操作。实行单层数据传递,减少组件多层嵌套、数据传递监听带来的性能损耗。

优化: 尽可能传入配置数据,减少单组件内部计算及样式重排重绘,提升大数据量情况下的性能。

安装

npm install shuyilink-ui

引入组件

import Vue from 'vue'
import ShuyilinkUI from 'shuyilink-ui'
import 'shuyilink-ui/shuyilink-ui.css'
Vue.use(ShuyilinkUI)

插入组件

<sy-table
  :data="tableData"
  :setting="tableSetting"
/>

<script>
export default {
  data: {
    return {
      tableData: [],
      tableSetting: []
    }
  },
  mounted() {
    this.getTableTitles()
  },
  methods: {
    getTableTitles() {
      this.tableSetting = [
        {
          label: '呼叫人',
          val: 'callStaffName'
        },
        {
          label: '被呼叫人',
          width: 100,
          val: 'calledStaffName'
        },
        {
          label: '呼叫时间',
          width: 160,
          val: 'callTime'
        }
      ]
    }
  }
}
</script>

配置参数 [props]

  • data: type: Array default: [] 接口获取的表格数据列表,格式如下:
[
  {id: '', productName: '', productCode: '', ...},
  ...
]
  • setting: 表格配置 type: Array default: [] 示例

    [
      {
        label: '产品名称', // 表头标题
        width: 60, // 单元格列宽: Number || String
        val: 'productName', // 取值属性
        fixed: true, // 是否固定列
        fixedLeft: 90, // 固定左侧距离(左侧固定)
        fixedRight: 60, // 固定右侧距离(右侧固定)
        fixedLast: true, // 是否为单侧最后一个固定项
        template: true // 是否为html字符串模板
      },
      ...
    ]
  • selectionMultiple: 是否为多选 type: Boolean default: false 示例

    <sy-table
      :data="tableData"
      :setting="tableSetting"
      selection-multiple
    />
  • selectionToggle: 单选情况下: 是否可切换选择/不选择 type: Boolean default: true 示例

    <sy-table
      :data="tableData"
      :setting="tableSetting"
      :selection-toggle="false"
    />
  • selectionAllShow: 是否显示表头全勾选框 type: Boolean default: false 示例

    <sy-table
      :data="tableData"
      :setting="tableSetting"
      selection-all-show
    />
  • selectionShow: 是否显示勾选列 type: Boolean default: false 示例

    <sy-table
      :data="tableData"
      :setting="tableSetting"
      selection-show
    />
  • selectionFixed: 勾选列固定左侧 type: Boolean default: false 示例

    <sy-table
      :data="tableData"
      :setting="tableSetting"
      selection-fixed
    />
  • selectionHighlight: 勾选高亮当前行 type: Boolean default: false 示例

    <sy-table
      :data="tableData"
      :setting="tableSetting"
      click-to-select
      selection-highlight
    />
  • indexShow: 是否显示索引列 type: Boolean default: true 示例

    <sy-table
      :data="tableData"
      :setting="tableSetting"
      :index-show="false"
    />
  • indexFixed: 索引列固定左侧 type: Boolean default: false 示例

    <sy-table
      :data="tableData"
      :setting="tableSetting"
      index-fixed
    />
  • highlightCurrentRow: 是否高亮当前行 type: Boolean default: false 示例

    <sy-table
      :data="tableData"
      :setting="tableSetting"
      highlight-current-row
    />
  • clickToSelect: 点击行的时候是否要选中行 type: Boolean default: false 示例

    <sy-table
      :data="tableData"
      :setting="tableSetting"
      click-to-select
    />
  • height: 表格高度 type: String default: '' // 样式表默认100% 示例

    <sy-table
      :data="tableData"
      :setting="tableSetting"
      height="500px"
    />
  • scrollSize: 表格主体滚动条尺寸 [宽度, 高度] type: Array default: [10, 10] // 默认宽高10px 示例

    <sy-table
      :data="tableData"
      :setting="tableSetting"
      :scroll-size="[20, 20]"
    />
  • indexText: 索引列表头文字 type: String default: 'NO.' 示例

    <sy-table
      :data="tableData"
      :setting="tableSetting"
      index-text="序号"
    />
  • cellWrap: 表格主体单元格字符换行 type: Boolean default: false 示例

    <sy-table
      :data="tableData"
      :setting="tableSetting"
      cell-wrap
    />
  • headWrap: 表格头部单元格字符换行 type: Boolean default: false 示例

    <sy-table
      :data="tableData"
      :setting="tableSetting"
      head-wrap
    />

事件触发

  • row-click: 行点击 参数: row 当前行数据 示例

    <sy-table
      :data="tableData"
      :setting="tableSetting"
      @row-click="rowClick"
    />
    
    <script>
    export default {
      data() {
        return {
          clickedRow: null
        }
      },
      methods: {
        rowClick(row) {
          this.clickedRow = row
        }
      }
    }
    </script>
  • select: 选择/取消选择 参数: selectedRows 勾选的列表 示例

    <sy-table
      :data="tableData"
      :setting="tableSetting"
      selection-show
      @select="select"
    />
    
    <script>
    export default {
      data() {
        return {
          checkRow: {}
        }
      },
      methods: {
        // 选择行中的复选框
        select(selectedRows) {
          this.checkRow = selectedRows.length ? selectedRows[0] : {}
        },
      }
    }
    </script>
  • select-all: 全选/全不选 参数: selectAllChecked 全选状态 示例

    <sy-table
      :data="tableData"
      :setting="tableSetting"
      selection-show
      selection-all-show
      selection-multiple
      @select="select"
      @select-all="selectAll"
    />
    
    <script>
    export default {
      data() {
        return {
          selectedRows: []
        }
      },
      methods: {
        // 列表勾选
        select() {
          this.selectedRows = this.tableData.filter(item => item.checked)
        },
        // 选择全选/全不选
        selectAll(selectedRows) {
          this.selectedRows = selectedRows
        }
      }
    }
    </script>

样式调整

需针对子组件样式穿透,进行表格样式重置修改 以下component-root-class样式名为当前组件根样式类名

  • 表头
    .component-root-class ::v-deep .div-table .div-table-head .item .col {
      height: 80px;
      font-size: 12px;
      ...
    }
  • 表格主体单元格
    .component-root-class ::v-deep .div-table .div-table-body .item .col {
      height: 80px;
      font-size: 16px;
      ...
    }

更多样式调整请参看表格样式源码

Readme

Keywords

Package Sidebar

Install

npm i shuyilink-ui

Weekly Downloads

61

Version

0.2.60

License

ISC

Unpacked Size

7.36 MB

Total Files

10

Last publish

Collaborators

  • shuyilink