# Table 表格2
3.4.28
表格2组件主要为了实现一个兼容element-plus表格API风格的多用途表格,方便开发者使用【部分功能暂未完全实现】。
# 平台差异说明
App | H5 | 微信小程序 | 支付宝小程序 | 百度小程序 | 头条小程序 | QQ小程序 |
---|---|---|---|---|---|---|
√ | √ | √ | √ | √ | √ | √ |
# 使用示例
<template>
<view class="u-page">
<view class="u-demo-block">
<view class="u-demo-block__title">基础表格(斑马纹 + 边框)</view>
<view class="u-demo-block__content">
<u-table2
:data="tableData"
:columns="columns"
stripe
border
@row-click="handleRowClick"
/>
</view>
</view>
<view class="u-demo-block">
<view class="u-demo-block__title">支持单选的表格</view>
<view class="u-demo-block__content">
<u-table2
:data="tableData"
:columns="columns"
highlight-current-row
:current-row-key="currentRowId"
@row-click="handleRowClick"
/>
</view>
</view>
<view class="u-demo-block">
<view class="u-demo-block__title">支持复选框的表格</view>
<view class="u-demo-block__content">
<u-table2
:data="tableData"
:columns="columnsCheck"
row-key="id"
@selection-change="handleSelectionChange"
/>
</view>
</view>
<view class="u-demo-block">
<view class="u-demo-block__title">支持排序与筛选</view>
<view class="u-demo-block__content">
<u-table2
:data="tableData"
:columns="columns2"
:sortable="true"
:multiSort="true"
:filters="filters"
@sort-change="onSortChange"
@filter-change="onFilterChange"
/>
</view>
</view>
<view class="u-demo-block">
<view class="u-demo-block__title">树形结构 + 固定列</view>
<view class="u-demo-block__content">
<u-table2
:data="tableData3"
:columns="columns3"
:tree-props="{ children: 'children' }"
:expand-row-keys="['1']"
@expand-change="onExpandChange"
/>
</view>
</view>
</view>
</template>
<script>
export default {
data() {
return {
currentRowId: '',
tableData: [
{ id: 1, name: '张三', age: 25 },
{ id: 2, name: '李四', age: 30 }
],
columns: [
{ title: '姓名', key: 'name' },
{ title: '年龄', key: 'age' }
],
columnsCheck: [
// 复选框列
{ type: 'selection', width: '50px'},
// 普通列
{ title: '姓名', key: 'name' },
{ title: '年龄', key: 'age' }
],
columns2: [
{ title: '姓名', key: 'name', sortable: true },
{ title: '年龄', key: 'age', sortable: true }
],
filters: { name: '张' },
tableData3: [
{
id: 1,
name: '部门A',
age: 25,
children: [
{ id: 2, name: '员工1', age: 22 },
{ id: 3, name: '员工2', age: 24 }
]
},
{ id: 4, name: '部门B', age: 30 }
],
columns3: [
{ title: '', type: 'expand', width: '50px' },
{ title: '名称', key: 'name', fixed: 'left' },
{ title: '年龄', key: 'age' }
]
}
},
methods: {
handleRowClick(row) {
this.currentRowId = row.id;
console.log('点击了行:', row);
},
handleSelectionChange(selection) {
console.log('当前选中的行:', JSON.stringify(selection));
},
onSortChange(conditions) {
console.log('排序条件:', conditions);
},
onFilterChange(filters) {
console.log('筛选条件:', filters);
},
onExpandChange(keys) {
console.log('展开行 keys:', keys);
}
}
}
</script>
<style lang="scss" scoped>
.wrap {
padding: 24rpx;
}
</style>
# API
# 📄 Props 参数说明
参数 | 说明 | 类型 | 默认值 | 可选值 |
---|---|---|---|---|
data | 表格的数据源,为一个数组 | Array | [] | - |
columns | 列定义配置,详见下文列属性说明 | Array | [] | - |
stripe | 是否显示斑马纹 | Boolean | false | true / false |
border | 是否显示边框 | Boolean | false | true / false |
height | 表格的高度,单位 px 或 auto | String / Number | null | - |
maxHeight | 表格的最大高度,单位 px 或 auto | String / Number | null | - |
showHeader | 是否显示表头 | Boolean | true | true / false |
highlightCurrentRow | 是否高亮当前行 | Boolean | false | true / false |
rowKey | 行数据唯一标识字段名(用于树形结构和复选框) | String | 'id' | - |
currentRowKey | 控制当前高亮行的 key 值 | String / Number | null | - |
rowStyle | 行内联样式,可以是对象或函数 | Object / Function | {} | - |
cellClassName | 单元格 class 名称,可以是字符串或函数 | Function | null | - |
headerCellClassName | 表头单元格 class 名称,可以是字符串或函数 | Function | null | - |
rowClassName | 行的 class 名称,可以是字符串或函数 | Function | null | - |
context | 插槽上下文对象 | Object | null | - |
showOverflowTooltip | 是否在内容过长时显示省略号并展示 tooltip | Boolean | false | true / false |
lazy | 是否懒加载子节点 | Boolean | false | true / false |
load | 懒加载子节点的方法 | Function | null | - |
treeProps | 树形结构配置项 | Object | { children: 'children', hasChildren: 'hasChildren' } | - |
defaultExpandAll | 是否默认展开所有树节点 | Boolean | false | true / false |
expandRowKeys | 控制展开的行 keys 数组 | Array | [] | - |
sortOrders | 排序顺序,默认支持 ascending 和 descending | Array | ['ascending', 'descending'] | - |
sortable | 是否可排序,也可以设置为 custom 表示自定义排序 | Boolean / String | false | true / false / 'custom' |
multiSort | 是否允许多列排序 | Boolean | false | true / false |
sortBy | 默认排序字段 | String | null | - |
sortMethod | 自定义排序方法 | Function | null | - |
filters | 筛选条件对象 | Object | {} | - |
fixedHeader | 是否固定表头 | Boolean | true | true / false |
# 🧩 columns
列定义参数说明
属性 | 说明 | 类型 | 默认值 | 可选值 |
---|---|---|---|---|
type | 列类型 | String | 'default' | 'default' / 'selection' / 'expand' |
title | 列标题 | String | - | - |
key | 对应数据源中的字段名 | String | - | - |
align | 对齐方式 | String | 'center' | 'left' / 'center' / 'right' |
width | 列宽度(px) | Number / String | auto | - |
fixed | 固定位置 | String | - | 'left' / 'right' |
sortable | 是否可排序 | Boolean / String | false | true / false / 'custom' |
# 🎨 样式相关 props(新增)
你可以通过以下 props 设置表格样式风格:
参数 | 说明 | 类型 | 默认值 |
---|---|---|---|
borderColor | 表格边框的颜色 | String | #e4e7ed |
bgColor | 表格的背景颜色 | String | #ffffff |
align | 单元格的内容对齐方式,作用类似 CSS 的 text-align | String | center |
padding | 单元格的内边距,同 CSS 的 padding 写法 | String | 10rpx 0 |
fontSize | 单元格字体大小,单位 rpx | String | 14px |
color | 单元格字体颜色 | String | #606266 |
thStyle | th 单元格的样式,对象形式(统一设置在 table 上) | Object | {} |
# 📢 Events 事件说明
事件名 | 说明 | 参数 |
---|---|---|
@select | 当用户勾选某一行时触发 | selection |
@select-all | 用户勾选全选时触发 | selection |
@selection-change | 选中项发生变化时触发 | selection |
@cell-click | 单元格点击事件 | row, column, cell, event |
@row-click | 行点击事件 | row, event |
@row-dblclick | 行双击事件 | row, event |
@header-click | 表头点击事件 | column, event |
@sort-change | 排序改变时触发 | conditions |
@filter-change | 筛选条件变化时触发 | filters |
@current-change | 当前行改变时触发 | currentRow, oldRow |
@expand-change | 展开/收起行时触发 | keys |
# 🧱 插槽说明
插槽名 | 说明 |
---|---|
default | 默认插槽,用于定义表格列内容 |
header | 自定义表头内容 |
append | 在表格最后插入额外内容(如分页) |
empty | 数据为空时显示的内容 |