更新记录

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 回调。
  • 多选增强方法:暴露 selectionAlltoggleRowSelectionclearSelectiontoggleAllSelection 等方法。
  • 插槽支持:自定义列内容、操作栏等,灵活扩展。

📁 文件结构

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-thfilter-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 || {} })),
)

📌 注意事项

  • widthminWidth:建议至少设置一个,避免列宽被内容无限撑开导致省略号失效。
  • 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-table
  • uni-tr / uni-th / uni-td
  • uni-icons
  • uni-popup
  • uni-tooltip

若未自动安装,请手动执行: 推荐直接去官网下载并安装:插件市场

npm install @dcloudio/uni-ui


📄 License

MIT


🤝 贡献与反馈

如果你在使用中遇到问题或有功能建议,欢迎在插件市场留言或提交 Issue。


文档版本:v1.0.0 最后更新:2026-04-22


这份文档涵盖了组件的所有关键功能和使用方式,你可以直接复制到项目 README.md 或插件市场描述中。

有些不懂得,可以去看看uni-table的文档 文档

插件市场地址:插件市场

隐私、权限声明

1. 本插件需要申请的系统权限列表:

2. 本插件采集的数据、发送的服务器地址、以及数据用途说明:

3. 本插件是否包含广告,如包含需详细说明广告表达方式、展示频率:

许可协议

MIT协议

暂无用户评论。