# SelectTable 组件使用文档
# 组件概述
SelectTable 是一个基于 Vue2 + Element UI 的高级表格选择器组件,支持本地数据筛选和远程 API 搜索两种模式,提供丰富的交互体验和性能优化。
# 特性
- 🔍 智能搜索:支持本地数据筛选和远程 API 搜索
- 📊 表格展示:以表格形式展示选项,支持多列显示
- ✅ 单选/多选:支持单选和多选模式
- 🎯 高亮搜索:搜索关键词高亮显示
- 📄 分页支持:支持前端和后端分页
- 💾 智能缓存:API 模式下支持请求缓存,提升性能
- 🔄 数据回显:支持通过回显接口快速加载选中数据
- 🎨 自定义配置:支持自定义列配置、空状态文案等
- ⚡ 性能优化:防抖搜索、虚拟滚动等性能优化
# 基础用法
# 本地数据模式-单选
# 本地数据模式-多选
# API模式(带缓存)
回显数据
多选
回显数据
# Attributes
| 参数 | 说明 | 类型 | 可选值 | 默认值 |
|---|---|---|---|---|
| value / v-model | 绑定值 | string / number / array | — | — |
| data | 静态数据源(本地模式) | array | — | [] |
| columns | 表格列配置 | array | — | [] |
| search-props | 搜索字段数组 | array | — | [] |
| table-max-height | 表格最大高度 | string / number | — | 300 |
| page-size | 分页大小 | number | — | 100 |
| highlight-search | 是否高亮搜索词 | boolean | — | true |
| multiple | 是否多选 | boolean | — | false |
| prop | 字段映射配置 | object | — | {id: 'id', label: '', value: ''} |
| collapse-tags | 多选时是否折叠标签 | boolean | — | true |
| use-local-data | 是否使用本地数据模式 | boolean | — | false |
| request-api | 远程搜索API函数 | function | — | null |
| external-params | 额外的请求参数 | object | — | {} |
| show-pagination | 是否显示分页 | boolean | — | false |
| enable-virtual-scroll | 是否启用虚拟滚动 | boolean | — | false |
| virtual-scroll-threshold | 虚拟滚动触发阈值 | number | — | 500 |
| cache-enabled | 是否启用请求缓存 | boolean | — | true |
| cache-duration | 缓存时长(毫秒) | number | — | 60000 |
| empty-text | 自定义空状态文案 | object | — | 见下方说明 |
| error-handler | 自定义错误处理函数 | function | — | null |
| echo-api | 回显数据接口 | function | — | null |
| disabled | 是否禁用 | boolean | — | false |
# prop 对象说明
| 属性 | 说明 | 类型 | 默认值 |
|---|---|---|---|
| id | 唯一标识字段名 | string | 'id' |
| label | 显示标签字段名 | string | '' |
| value | 值字段名 | string | '' |
# columns 数组说明
| 属性 | 说明 | 类型 | 默认值 |
|---|---|---|---|
| field | 字段名 | string | — |
| title | 列标题 | string | — |
| minWidth | 最小宽度 | number | 120 |
# empty-text 对象说明
| 属性 | 说明 | 类型 | 默认值 |
|---|---|---|---|
| initial | 初始状态文案 | string | '请输入关键词搜索' |
| noResult | 无结果状态文案 | string | '未找到相关数据' |
| loadError | 加载错误状态文案 | string | '加载失败,请重试' |
# Events
| 事件名称 | 说明 | 回调参数 |
|---|---|---|
| input | 值改变时触发 | (value) |
| change | 选择改变时触发 | (value, selectedData) |
| search | 搜索时触发 | (keyword) |
| selection-change | 多选模式下选择改变时触发 | (selectedRows) |
| current-change | 单选模式下当前行改变时触发 | (currentRow) |
| clear | 清空选择时触发 | — |
| load-success | API模式下数据加载成功时触发 | (data) |
| load-error | API模式下数据加载失败时触发 | (error) |
# API 接口规范
# request-api 函数参数
{
value: '', // 搜索关键词
currentPage: 1, // 当前页码
pageSize: 100, // 每页数量
...externalParams // 额外参数
}
# request-api 返回格式
{
data: [], // 数据数组
total: 0 // 总数量
}
# 使用注意事项
# 数据模式选择
本地数据模式 (
use-local-data="true")- 适用于数据量较小(建议 < 1000 条)的场景
- 支持前端分页和搜索
- 性能更好,用户体验更流畅
API 模式 (
use-local-data="false")- 适用于大数据量场景
- 支持后端分页和搜索
- 需要配置
request-api函数
# 性能优化建议
- 启用缓存:API 模式下建议启用缓存以减少重复请求
- 合理设置分页大小:根据数据量和网络情况调整
page-size - 使用防抖搜索:组件内置防抖机制,无需额外处理
- 虚拟滚动:大数据量时可启用虚拟滚动提升性能
# 常见问题
# 1. 数据回显问题
确保 prop 配置正确,特别是 value 字段要与实际数据字段对应:
// 正确配置
prop: {
id: 'id',
label: 'name', // 显示字段
value: 'code' // 值字段,要与 v-model 绑定的值对应
}
# 2. API 接口调用失败
检查 request-api 函数的返回格式是否符合规范:
// 正确的返回格式
{
data: [...], // 必须是数组
total: 100 // 总数量(可选)
}
# 3. 搜索不生效
检查 search-props 配置是否正确:
// 指定搜索字段
:search-props="['name', 'code', 'department']"
# 最佳实践
- 字段映射配置:始终明确配置
prop对象,避免使用默认值 - 错误处理:生产环境建议配置
error-handler进行统一错误处理 - 空状态文案:根据业务场景自定义
empty-text提升用户体验