Skip to content

FTableSelect 表格下拉选择 ​

基于表格的高阶表格下拉选择组件(主推标准组件名 FTableSelect,别名 FinTableSelect),支持 API 数据请求、单选/多选、服务端/本地搜索、分页/滚动加载、自定义头部底部插槽、自定义列模板等。在 FForm 中通过 component: 'FTableSelect' 声明使用。

基础用法 ​

最简单的用法:静态数据 + 单选。点击行即选中,选中后面板自动关闭。

loading
loading

多选 + Tag 展示 ​

开启 multiple 后可选择多项,选中值以 Tag 形式展示在输入框中。tagConfig.max 控制最多显示的 tag 数量,超出部分折叠为 +N。

loading

服务端搜索 + 分页 ​

通过 request 配置 API 接口,filterable 开启搜索,searchMode: 'remote' 走服务端搜索,pagination 开启分页。keyword 会自动注入到请求参数中。

loading
loading

本地搜索 + 滚动加载 ​

searchMode: 'local' 前端过滤已加载数据,paginationType: 'scroll' 滚动到底部自动加载更多。

loading

自定义列模板 ​

通过列配置的 slot 属性指定插槽名,自定义单元格内容。插槽接收 { row, value, column } 三个参数。

loading

自定义头部和底部 ​

使用 #header 和 #footer 插槽自定义下拉面板的头部和底部区域。头部接收 { keyword, search, selectedRows, total },底部接收 { selectedRows, close, clear }。

loading

formatLabel 自定义标签 ​

labelField 只能取单个字段,如果需要复合标签(如 编码 - 名称),使用 formatLabel 函数。优先级:#display 插槽 > formatLabel > labelField。

loading

自定义显示模式 ​

新增的 demo 展示了多种显示方式和自定义渲染能力。

loading

在 FinForm 中使用 ​

FTableSelect 已注册到表单字段注册表,可在 FormSchema 中通过 component: 'FTableSelect' 使用。

ts
const schemas = [
  {
    field: 'userId',
    label: '选择用户',
    component: 'FTableSelect',
    componentProps: {
      columns: [
        { prop: 'id', label: 'ID', width: 60 },
        { prop: 'name', label: '姓名', minWidth: 120 },
      ],
      request: { api: fetchUsers },
      filterable: true,
      searchMode: 'remote',
      pagination: true,
      multiple: true,
      valueField: 'id',
      labelField: 'name',
    },
  },
]

API ​

Props ​

参数说明类型默认值
modelValuev-model 绑定值any | any[]—
columns列定义SelectColumn[]必填
data静态数据any[]—
requestAPI 请求配置SelectRequestConfig—
multiple是否多选booleanfalse
multipleLimit多选最大数量(0 = 不限)number0
valueField值字段名string'id'
labelField显示字段名string'name'
formatLabel自定义标签函数(优先于 labelField)(row) => string—
rowKey行唯一标识字段stringvalueField
filterable是否显示搜索框booleanfalse
searchMode搜索模式'remote' | 'local''remote'
searchFields本地搜索字段列表string[]所有列
debounce搜索防抖(毫秒)number300
searchPlaceholder搜索框占位文本string'请输入关键词搜索'
pagination是否分页boolean | SelectPaginationConfigfalse
paginationType分页方式'page' | 'scroll''page'
displayMode选中值展示方式'tag' | 'text' | 'comma''tag'
tagConfigTag 配置TagConfig—
placeholder占位文本string'请选择'
clearable是否可清空booleantrue
disabled是否禁用booleanfalse
size组件尺寸'large' | 'default' | 'small''default'
maxHeight表格最大高度number300
border表格边框booleanfalse
stripe斑马纹booleantrue
popperWidth下拉宽度number | string自适应
popperClass下拉弹层类名string—
popperAppendToBody是否将弹层 Teleport 并明确挂载到 document.body;设为 false 时保留在组件本地booleantrue
closeOnSelect选择后是否关闭boolean单选 true / 多选 false

SelectColumn ​

参数说明类型默认值
prop字段名string必填
label列标题string必填
width列宽number | string—
minWidth最小列宽number | string—
align对齐方式'left' | 'center' | 'right''left'
fixed固定列'left' | 'right' | boolean—
slot自定义插槽名string—
formatter内置格式化器'money' | 'date' | 'status' | function—
searchable本地搜索时是否可搜booleantrue

SelectRequestConfig ​

参数说明类型默认值
api数据请求函数(params) => Promise<{ list, total }>必填
immediate是否立即请求booleantrue
paramsMap参数名映射{ page?, pageSize?, keyword? }—
beforeRequest请求前钩子(params) => params—
afterResponse响应后钩子(data) => { list, total }—

Slots ​

插槽名说明参数
default替换整个表格{ tableData, loading, selectedRows, toggleRow, isSelected }
display自定义 trigger 显示{ selectedRows, value }
header下拉面板头部{ keyword, search, selectedRows, total }
footer下拉面板底部{ selectedRows, close, clear }
[col.slot]自定义列单元格{ row, value, column }

Events ​

事件名说明参数
update:modelValuev-model 更新(value)
change选择变化(value, rows)
select选中某行(row)
clear清空选择—
visible-change下拉显隐变化(visible)
search搜索触发(keyword)
data-change数据变化({ list, total })

Exposed Methods ​

方法名说明
clearSelection()清空选择
fetchData()手动触发数据请求
open()打开下拉
close()关闭下拉
focus()聚焦 trigger