更新记录
1.0.0(2026-04-22) 下载此版本
根据你的要求,以下是 xq-table 组件 v1.0.0 版本的更新日志内容,可直接复制到插件根目录的 changelog.md 文件中,保持同步。
Changelog
[1.0.0] - 2026-04-22
平台兼容性
uni-app(4.13)
| Vue2 | Vue3 | Chrome | Safari | app-vue | app-nvue | Android | iOS | 鸿蒙 |
|---|---|---|---|---|---|---|---|---|
| - | √ | √ | - | √ | √ | √ | - | - |
| 微信小程序 | 支付宝小程序 | 抖音小程序 | 百度小程序 | 快手小程序 | 京东小程序 | 鸿蒙元服务 | QQ小程序 | 飞书小程序 | 小红书小程序 | 快应用-华为 | 快应用-联盟 |
|---|---|---|---|---|---|---|---|---|---|---|---|
| √ | - | - | - | - | - | - | - | - | - | - | - |
uni-app x(4.76)
| Chrome | Safari | Android | iOS | 鸿蒙 | 微信小程序 |
|---|---|---|---|---|---|
| - | - | - | - | - | - |
xq-table
📦 xq-table - 多功能增强型表格组件
一个基于 uni-app 官方 uni-table 深度封装的增强型表格组件,支持自定义全选/半选样式、列显示隐藏(本地持久化)、多端固定列宽省略号、排序/筛选事件代理等特性,适用于后台管理系统数据展示。
组件已按 easycom 规范编写,导入即可自动识别,无需手动 import
✨ 核心特性
- ✅ 自定义全选复选框:支持半选(横线)、全选(对勾)、未选(空)三种状态,样式统一可控。
- ✅ 列显示/隐藏:内置齿轮按钮弹窗,用户可自由选择要显示的列,支持按
prop禁用某些列。 - ✅ 本地存储列配置:传入
local-cloumn-keys即可自动保存/读取用户列设置,刷新页面保持。 - ✅ 跨端省略号适配:内置
u-line-1~u-line-5样式类,nvue 与非 nvue 自动兼容。 - ✅ 事件代理机制:排序、筛选事件统一通过
execEvent代理,支持列配置中直接声明events回调。 - ✅ 多选增强方法:暴露
selectionAll、toggleRowSelection、clearSelection、toggleAllSelection等方法。 - ✅ 插槽支持:自定义列内容、操作栏等,灵活扩展。
📁 文件结构
components/xq-table/
├── index.vue # 组件主文件
├── utils.js # 本地存储工具函数(getStorage / setStorage)
└── README.md # 使用文档
🚀 快速上手
1. 引入组件
<script setup>
import { tableColumns, tableRes } from './tableData.js'
const columns = ref(tableColumns)
const tableData = ref([])
</script>
<template>
<xq-table
v-model:columns="columns"
:table-data="tableData"
type="selection"
row-key="postId"
local-cloumn-keys="my_table_columns"
@selection-change="ionChange"
@sort-change="onSortChange"
/>
</template>
2. 列配置示例(tableData.js)
export const tableColumns = [
{ prop: 'postId', label: '岗位编号', width: 100, sortable: true, visible: true },
{ prop: 'postName', label: '岗位名称', minWidth: 120, visible: true },
{ prop: 'status', label: '状态', slot: 'status', visible: true, disabled: false },
{ prop: 'action', label: '操作', slot: 'action', visible: true, disabled: true }
]
📋 Props
| 参数 | 类型 | 默认值 | 必填 | 说明 |
|---|---|---|---|---|
v-model:columns |
Array |
[] |
是 | 列配置数组,支持双向绑定 |
tableData |
Array |
[] |
否 | 表格数据源 |
type |
String |
'' |
否 | 设为 'selection' 时开启多选列(自定义复选框) |
rowKey |
String |
'' |
否 | 行数据唯一标识字段,多选时建议提供 |
selectionKey |
String |
'_checked' |
否 | 选中状态在行数据中的字段名 |
border |
Boolean |
true |
否 | 是否显示纵向边框 |
stripe |
Boolean |
true |
否 | 是否显示斑马纹 |
loading |
Boolean |
false |
否 | 是否显示加载中 |
emptyText |
String |
'暂无数据' |
否 | 无数据时显示文本 |
index |
Boolean |
true |
否 | 是否显示序号列 |
localCloumnKeys |
String |
'' |
否 | 本地存储列配置的 key,传入则自动存取 |
📤 Events
| 事件名 | 参数 | 说明 |
|---|---|---|
selection-change |
(selectRows) |
选中行变化时触发,返回选中行数组 |
sort-change |
{ column, event } |
点击排序时触发 |
filter-change |
{ column, event } |
筛选条件变化时触发 |
update:columns |
(newColumns) |
列配置变化时触发(用于 v-model) |
🧩 Slots
| 插槽名 | 作用域 | 说明 |
|---|---|---|
| 动态插槽 | { row, column, rowIndex } |
根据列配置中的 slot 字段动态生成插槽,用于自定义列内容 |
使用示例:
<template>
<xq-table v-model:columns="columns" :table-data="tableData">
<template #status="{ row }">
<u-tag v-if="row.status === '0'" text="启用" type="success" />
<u-tag v-else text="禁用" type="error" />
</template>
</xq-table>
</template>
🛠️ 方法 (通过 ref 调用)
| 方法名 | 参数 | 说明 |
|---|---|---|
selectionAll() |
- | 选中全部行 |
toggleRowSelection(arrIndex, selected?) |
arrIndex: [行索引]selected: 可选,强制指定选中状态 |
切换指定索引行的选中状态 |
clearSelection() |
- | 清空所有选中行 |
toggleAllSelection() |
- | 反转所有行的选中状态 |
getSelectionRows() |
- | 获取当前所有选中的行数据 |
调用示例:
const tableRef = ref(null)
tableRef.value.selectionAll()
tableRef.value.toggleRowSelection([0]) // 切换第一行
tableRef.value.toggleRowSelection([0], true) // 强制选中第一行
💡 高级用法
列配置对象支持 events 属性,用于定义列的事件处理逻辑。
详细的列属性说明文档。
📋 xq-table 列配置属性说明
每个列对象支持以下属性,用于定义表头和数据单元格的展示及行为。
🔧 通用属性
| 属性名 | 类型 | 默认值 | 必填 | 说明 |
|---|---|---|---|---|
prop |
String |
- | 是 | 对应数据源中的字段名,用于取值显示。 |
label |
String |
- | 是 | 表头显示的文本。 |
visible |
Boolean |
true |
否 | 是否显示该列。配合列显隐弹窗使用,可动态控制。 |
width |
Number \| String |
- | 否 | 列宽度,传入数字时单位为 px,会被自动解析。推荐使用数字,如 80。 |
minWidth |
Number \| String |
- | 否 | 最小宽度,当内容过长时列宽不会小于该值。传入数字时单位需手动加 rpx,如 :minWidth="120" 会解析为 120rpx。 |
tooltip |
Boolean |
true |
否 | 当单元格内容溢出时,是否通过 uni-tooltip 显示完整内容气泡(插槽默认关闭)。设为 false 可关闭。 |
align |
String |
'center' |
否 | 同时设置表头和单元格内容的对齐方式,可选 'left' / 'center' / 'right'。 |
thAlign |
String |
继承 align |
否 | 单独控制表头对齐方式。 |
tdAlign |
String |
继承 align |
否 | 单独控制单元格内容对齐方式。 |
disabled |
Boolean |
false |
否 | 在列显隐弹窗中,该列是否禁止取消勾选(即强制显示)。 |
slot |
String |
- | 否 | 自定义插槽名称。当需要自定义单元格内容时设置,父组件通过 <template #slotName> 渲染。 |
🔀 排序属性
| 属性名 | 类型 | 默认值 | 说明 |
|---|---|---|---|
sortable |
Boolean |
false |
是否开启该列的排序功能。开启后表头会显示排序图标,点击触发 sort-change 事件。 |
🔍 筛选属性
| 属性名 | 类型 | 默认值 | 说明 |
|---|---|---|---|
filterType |
String |
- | 筛选类型,例如 'select' 表示下拉筛选。对应 uni-th 的 filter-type 属性。 |
filterData |
Array |
[] |
筛选选项数据,格式为 [{ text: '显示文本', value: '值' }]。点击筛选图标时展示。 |
⚡ 事件属性
| 属性名 | 类型 | 默认值 | 说明 |
|---|---|---|---|
events |
Object |
- | 该列的事件监听器集合。键为事件名(如 'sort-change'、'filter-change'、'header-click'),值为回调函数。组件内部会统一代理,触发时调用并传递 { column, event } 参数。 |
📝 完整列配置示例
以下可以直接在页面中书写,也可以放到统一列配置中.
列配置1
export const tableColumns = [
{
prop: 'postId',
label: '岗位编号',
visible: true,
width: 80,
tooltip: false,
sortable: true,
disabled: true, // 强制显示,不可取消
events: {
'sort-change': ({ column, event }) => {
console.log('排序变化', event.order)
}
}
},
{
prop: 'postName',
label: '岗位名称',
visible: true,
minWidth: 120, // 最小宽度 120rpx
tooltip: true
},
{
prop: 'status',
label: '状态',
slot: 'status', // 使用插槽自定义内容
visible: true,
filterType: 'select', // 筛选类型为下拉
filterData: [ // 下拉的内容
{ text: '全部', value: '' },
{ text: '启用', value: '0' },
{ text: '禁用', value: '1' }
],
events: {
'filter-change': ({ column, event }) => {
console.log('筛选值', event.value)
}
}
},
{
prop: 'action',
label: '操作',
slot: 'action',
visible: true,
width: 200
}
]
列配置2
import { tableColumns } from './xxx.js'
// 定义事件处理器(只关注业务逻辑)
const eventHandlers = {
postId: {
'sort-change': (e) => {
console.log('岗位编号排序', e)
// 直接调用接口、更新 state
},
},
status: {
'filter-change': (e) => {
console.log('岗位状态过滤', e)
// 直接调用接口、更新 state
},
},
}
// 最好是做一个深拷贝, 确保不会影响其他页面的引用
const columns = ref(
tableColumns.map(col => ({ ...col, events: eventHandlers[col.prop] || col.events || {} })),
)
📌 注意事项
width与minWidth:建议至少设置一个,避免列宽被内容无限撑开导致省略号失效。tooltip:仅在内容溢出(设置了u-line-1等省略类)且tooltip不为false时生效。events:事件回调中可通过emit向父组件通信,但通常推荐在父组件监听表格的全局事件(如@sort-change)统一处理。
2. 列显示/隐藏本地持久化
传入 local-cloumn-keys="unique_key",用户勾选列后自动存入本地缓存,刷新页面后保留设置。
<xq-table local-cloumn-keys="user_table_columns" ... />
3. 文本溢出省略(u-line-1 ~ u-line-5)
组件内置了跨端多行省略样式类,直接在模板中使用:其实是抄的uview-pro开源项目的!!! 有兴趣的可以去看看这个不错的开源组件库text
<text class="u-line-2">
{{ longText }}
</text>
支持 1~5 行,nvue 与 vue 页面自动适配。
🎨 自定义全选样式覆盖
如需调整复选框颜色、尺寸,可覆盖以下 CSS 变量或直接修改 .checkbox-custom 样式:
.checkbox-custom {
width: 32rpx;
height: 32rpx;
border: 2rpx solid #ccc;
border-radius: 6rpx;
&.checked,
&.indeterminate {
background-color: #007aff;
border-color: #007aff;
}
}
📱 平台兼容性
| 平台 | 支持情况 |
|---|---|
| H5 | ✅ |
| 微信小程序 | ✅ |
| App-Vue | ✅ |
| App-nvue | ✅(注意:省略号样式使用 lines 属性) |
| 支付宝/百度/字节小程序 | ✅ |
注意:在 nvue 页面中,文本省略请使用
u-line-1~u-line-5类,组件已做条件编译处理。
📦 依赖说明
本组件依赖以下 uni-ui 组件,已在 package.json 中声明,导入插件时 HBuilderX 会自动安装:
uni-tableuni-tr/uni-th/uni-tduni-iconsuni-popupuni-tooltip
若未自动安装,请手动执行: 推荐直接去官网下载并安装:插件市场
npm install @dcloudio/uni-ui
📄 License
MIT
🤝 贡献与反馈
如果你在使用中遇到问题或有功能建议,欢迎在插件市场留言或提交 Issue。
文档版本:v1.0.0 最后更新:2026-04-22
这份文档涵盖了组件的所有关键功能和使用方式,你可以直接复制到项目 README.md 或插件市场描述中。
有些不懂得,可以去看看uni-table的文档 文档
插件市场地址:插件市场

收藏人数:
xq-table 是一个基于 uni-table 封装的增强型表格组件。它在保留原生表格能力的同时,新增了自定义全选/半选样式、列显示隐藏(本地持久化)等实用功能。
下载插件并导入HBuilderX
赞赏(0)
下载 4
赞赏 0
下载 11638265
赞赏 1907
赞赏
京公网安备:11010802035340号