1.0.2 • Published 1 month ago

@tanzhenxing/zx-table-v2 v1.0.2

Weekly downloads
-
License
ISC
Repository
-
Last release
1 month ago

zx-table-v2 虚拟化表格组件

zx-table-v2 是一个基于 UniApp 的高性能虚拟化表格组件,专为处理大量数据而设计,确保在 H5、小程序和 App 端都能流畅运行。

特性

  • 虚拟滚动: 只渲染可视区域内的数据,高效处理万级甚至十万级数据量。
  • 固定表头: 表头在内容滚动时保持固定。
  • 固定列: 支持左右固定列(待实现)。
  • 自定义单元格渲染: 灵活定义单元格显示内容与样式。
  • 自动高度/宽度: 支持根据父容器自动调整大小(待实现)。
  • 多平台兼容: 专为 UniApp 设计,兼容 H5、小程序、App。

安装

# npm
npm install @tanzhenxing/zx-table-v2

# yarn
yarn add @tanzhenxing/zx-table-v2

使用方法

pages.json 中配置:

{
  "easycom": {
    "^zx-(.*)": "@tanzhenxing/zx-ui/components/zx-$1/zx-$1.vue"
  },
  "usingComponents": {
    "zx-table-v2": "/src/components/zx-table-v2/zx-table-v2"
  }
}

在页面中使用:

<template>
  <view style="height: 400px;">
    <zx-table-v2
      :columns="columns"
      :data="data"
      :width="tableWidth"
      :height="tableHeight"
      fixed
    />
  </view>
</template>

<script setup>
import { ref, onMounted } from 'vue';

const columns = ref([
  { key: 'id', dataKey: 'id', title: 'ID', width: 150 },
  { key: 'name', dataKey: 'name', title: '名称', width: 200 },
  { key: 'value', dataKey: 'value', title: '值', width: 100 },
  // 更多列...
]);

const data = ref([]);
const tableWidth = ref(750); // rpx or px
const tableHeight = ref(400); // rpx or px, 对应外层容器高度

onMounted(() => {
  // 模拟加载大量数据
  const generatedData = [];
  for (let i = 0; i < 1000; i++) {
    generatedData.push({
      id: `row-${i}`,
      name: `Name ${i}`,
      value: Math.floor(Math.random() * 1000),
    });
  }
  data.value = generatedData;
});
</script>

API

Props

属性名类型默认值说明
columnsArray<Column>[]表格列的配置,详见 Column 配置
dataArray<Object>[]表格数据源
widthNumber0表格总宽度,单位 rpx 或 px。如果为 0,则尝试自适应父容器(部分平台可能不完美)
heightNumber300表格高度,单位 rpx 或 px。虚拟滚动依赖此固定高度。
row-heightNumber50每行的大致高度,单位 rpx 或 px。用于虚拟滚动计算。
header-heightNumber50表头高度,单位 rpx 或 px。
fixedBooleanfalse是否固定表头(目前仅垂直方向滚动时表头固定)
row-keyStringid行数据的唯一标识符字段名
borderBooleanfalse是否显示纵向边框
stripeBooleanfalse是否为斑马纹 table
loadingBooleanfalse是否显示加载中
empty-textString暂无数据空数据时显示的文本

Column 配置

属性名类型说明
keyString列的唯一标识
dataKeyString对应 data 数组中对象的属性名
titleString列头显示文字
widthNumber列宽度,单位 rpx 或 px
minWidthNumber最小列宽度,单位 rpx 或 px
alignString对齐方式 (left, center, right)
fixedString / Boolean列是否固定在左侧或者右侧,true 表示固定在左侧,left / right (待实现)
renderCellFunction自定义单元格渲染函数,参数为 { row, column, rowIndex, columnIndex }
renderHeaderFunction自定义表头单元格渲染函数,参数为 { column, columnIndex }
sortableBoolean该列是否可排序 (待实现)

Events

事件名回调参数说明
row-click(row, column, event)当某一行被点击时触发
header-click(column, event)当某一列的表头被点击时触发
scroll({ scrollLeft, scrollTop, scrollHeight, scrollWidth, ...eventDetail })表格滚动时触发

注意事项

  • 为实现虚拟滚动,表格容器必须具有明确的高度 (height prop)。
  • row-height 属性对虚拟滚动的计算至关重要,请尽量提供准确的预估行高。
  • 跨平台兼容性是首要考虑,避免使用 H5 特有的 DOM API。

待办事项

  • 实现左右固定列
  • 实现列排序功能
  • 实现 AutoResizer 功能,自动获取父容器宽高
  • 更精细的虚拟滚动优化
  • 单元测试

贡献

欢迎提交 PR 和 Issue。

1.0.2

1 month ago

1.0.1

2 months ago