Skip to content

表格数据选择器组件

概述

TableSelector 是一个通用的表格数据选择器组件,支持从多种数据源(静态数据、字典、数据源、表单数据、API)中选择数据,通过弹窗表格展示,支持搜索、分页、单选/多选。

组件路径web/apps/web-ele/src/components/zq-form/table-selector/

组件名称TableSelector

功能特性

  • 多数据源支持:静态数据、字典、数据源、表单数据、自定义 API
  • 表格展示:自定义列配置
  • 支持单选/多选模式
  • 支持搜索过滤
  • 分页加载
  • 行点击选择
  • 标签折叠显示

Props

属性类型默认值说明
modelValuestring | string[]-选中的值
multiplebooleanfalse是否多选
placeholderstring'点击选择'占位符
disabledbooleanfalse是否禁用
clearablebooleantrue是否可清除
dialogTitlestring'选择数据'弹窗标题
dialogWidthstring'800px'弹窗宽度
columnsTableSelectorColumn[][]表格列配置
labelFieldstring'label'显示字段名
valueFieldstring'value'值字段名
dataSourceTypestring'static'数据源类型
dictCodestring-字典编码(dict 类型)
dataSourceCodestring-数据源编码(dataSource 类型)
formCodestring-表单编码(formData 类型)
apiUrlstring-API 地址(api 类型)
apiMethod'GET' | 'POST''GET'API 请求方法
searchFieldsstring[][]搜索字段
collapseTagsbooleanfalse是否折叠标签
optionsArray[]静态数据选项

数据源类型

类型说明必需参数
static静态数据options
dict字典数据dictCode
dataSource数据源dataSourceCode
formData表单数据formCode
api自定义 APIapiUrl

Events

事件参数说明
update:modelValuestring | string[]值更新
changestring | string[]值变化
blur-失焦
select-itemobject | object[]选中项完整数据

使用示例

静态数据

vue
<template>
  <TableSelector
    v-model="selectedValue"
    :options="options"
    :columns="columns"
    label-field="name"
    value-field="id"
  />
</template>

<script setup>
import { ref } from 'vue';

const selectedValue = ref('');
const options = [
  { id: '1', name: '选项一', code: 'A' },
  { id: '2', name: '选项二', code: 'B' },
];
const columns = [
  { field: 'name', label: '名称' },
  { field: 'code', label: '编码' },
];
</script>

字典数据

vue
<template>
  <TableSelector
    v-model="selectedValue"
    data-source-type="dict"
    dict-code="sys_status"
    label-field="label"
    value-field="value"
  />
</template>

表单数据

vue
<template>
  <TableSelector
    v-model="selectedValue"
    data-source-type="formData"
    form-code="customer"
    :columns="columns"
    :search-fields="['name', 'code']"
    label-field="name"
    value-field="id"
  />
</template>

自定义 API

vue
<template>
  <TableSelector
    v-model="selectedValue"
    data-source-type="api"
    api-url="/api/custom/list"
    api-method="GET"
    :columns="columns"
  />
</template>

与表单设计器集成

在表单设计器中,该组件作为 table-selector 类型的表单项使用:

json
{
  "type": "table-selector",
  "field": "product_id",
  "label": "产品",
  "props": {
    "dataSourceType": "formData",
    "formCode": "product",
    "multiple": false,
    "valueField": "id",
    "labelField": "name",
    "columns": [
      { "field": "name", "label": "产品名称" },
      { "field": "code", "label": "产品编码" },
      { "field": "price", "label": "价格" }
    ]
  }
}

典型应用场景

  • 数据选择:从各种数据源选择数据
  • 关联字段:配合 linked-field 实现级联显示
  • 字典选择:以表格形式展示字典数据

Released under the MIT License.