Skip to content

介绍

Antdv 3.x的 table 组件进行封装, 并嵌入了查询表单、自适应高度,与 Table 完美整合,方便实现表格数据的筛选。

使用

基础示例
序号单行文本多行文本
1123456
2789123
3789123
  • 共 3 条数据
  • 1
  • 10 / page
请选择
基础示例

No Data

vue
<template>
  <BasicTable
    title="基础示例"
    titleHelpMessage="温馨提醒"
    :columns="columns"
    :dataSource="dataSource"
    :pagination="false"
    :canResize="true"
  />
</template>
<script lang="ts" setup>
  import { BasicColumn, BasicTable, useTable } from 'lanven-ui';
  import { Button } from 'ant-design-vue';
  const columns: BasicColumn[] = [
    {
      title: '单行文本',
      dataIndex: 'testInput',
      width: 230,
      align: 'left',
    },
    {
      title: '多行文本',
      dataIndex: 'testTextarea',
      width: 130,
      align: 'left',
    },
  ];
  const dataSource = [
    { id: '1', testInput: '123', testTextarea: '456' },
    { id: '2', testInput: '789', testTextarea: '123' },
    { id: '2', testInput: '789', testTextarea: '123' },
  ];
  const [register, methods] = useTable({
    title: '基础示例',
    titleHelpMessage: '温馨提醒',
    pagination: false,
    columns,
    dataSource,
  });
</script>

methods

方法名称类型说明
useTableconst [register, methods] = useTable(TableProps)创建 Table 实例方法
register-把 Table 实例绑定到组件上
setProps(props: Partial<BasicTableProps>) => void用于设置表格参数
reload(opt?: FetchParams) => Promise<void>刷新表格
redoHeight() => void重新计算表格高度
setLoading(loading: boolean) => void设置表格 loading 状态
getDataSource<T = Recordable>() => T[]获取表格数据
getRawDataSource<T = Recordable>() => T获取后端接口原始数据
getColumns(opt?: GetColumnsParams) => BasicColumn[]获取表格数据
setColumns(columns: BasicColumn[] | string[]) => void设置表头数据
setTableData<T = Recordable>(values: T[]) => void设置表格数据
setPagination(info: Partial<PaginationProps>) => void设置分页信息
deleteSelectRowByKey(key: string) => void根据 key 删除取消选中行
getSelectRowKeys() => string[]获取选中行的 keys
getSelectRows<T = Recordable>() => T[]获取选中行的 rows
clearSelectedRowKeys() => void清空选中行
setSelectedRowKeys(rowKeys: string[] | number[]) => void设置选中行
getPaginationRef() => PaginationProps | boolean获取当前分页信息
getShowPagination() => boolean获取当前是否显示分页
setShowPagination(show: boolean) => Promise<void>设置当前是否显示分页
getRowSelection() => TableRowSelection<Recordable>获取勾选框信息
updateTableData(index: number, key: string, value: any)=>void更新表格数据
updateTableDataRecord(rowKey: string | number, record: Recordable) => Recordable | void根据唯一的 rowKey 更新指定行的数据.可用于不刷新整个表格而局部更新数据
deleteTableDataRecord(rowKey: string | number | string[] | number[]) => void根据唯一的 rowKey 动态删除指定行的数据.可用于不刷新整个表格而局部更新数据
insertTableDataRecord(record: Recordable, index?: number) => Recordable | void可根据传入的 index 值决定插入数据行的位置,不传则是顺序插入,可用于不刷新整个表格而局部更新数据
getForm() => FormActionType如果开启了搜索区域。可以通过该函数获取表单对象函数进行操作
expandAll() => void展开树形表格
collapseAll() => void折叠树形表格

属性

属性类型默认值说明
clickToRowSelectbooleantrue点击行是否选中 checkbox 或者 radio。需要开启
sortFn(sortInfo: SorterResult<any>) => any-自定义排序方法。见下方全局配置说明
filterFn(sortInfo: Partial<Recordable<string[]>>) => any-自定义过滤方法。见下方全局配置说明
showTableSettingbooleanfalse显示表格设置工具
tableSettingtableSetting-表格设置工具配置,见下方 TableSetting
stripedbooleantrue斑马纹
insetbooleanfalse取消表格的默认 padding
autoCreateKeybooleantrue是否自动生成 key
showSummarybooleanfalse是否显示合计行
summaryDataany[]-自定义合计数据。如果有则显示该数据
emptyDataIsShowTablebooleantrue在启用搜索表单的前提下,是否在表格没有数据的时候显示表格
isTreeTablebooleanfalse是否树表
api(...arg: any) => Promise<any>-后端接口
beforeFetch(T)=>T-请求之前对参数进行处理
afterFetch(T)=>T-请求之后对返回值进行处理
handleSearchInfoFn(T)=>T-开启表单后,在请求之前处理搜索条件参数
fetchSettingFetchSetting-接口请求配置,可以配置请求的字段和响应的字段名,见下方全局配置说明
immediatebooleantrue组件加载后是否立即请求接口,在 api 有传的情况下,如果为 false,需要自行使用 reload 加载表格数据
searchInfoany-额外的请求参数
useSearchFormbooleanfalse使用搜索表单
formConfigany-表单配置,参考表单组件的 Props
columnsany-表单列信息 BasicColumn[]
showIndexColumnbooleantrue是否显示序号列
indexColumnPropsany-序号列配置 BasicColumn
actionColumnany-表格右侧操作列配置 BasicColumn
ellipsisbooleantrue文本超过宽度是否显示...
canResizebooleanfalse是否可以自适应高度(如果置于 PageWrapper 组件内,请勿启用 PageWrapper 的 fixedHeight 属性,二者不可同时使用)
canResizePaginationbooleanfalse自适应高度时 cell 数量是否也自适应
clearSelectOnPageChangebooleanfalse切换页码是否重置勾选状态
resizeHeightOffsetnumber0表格自适应高度计算结果会减去这个值
rowSelectionany0选择列配置
titlestring-表格标题
titleHelpMessagestring|string[]-表格标题右侧温馨提醒
maxHeightnumber-表格最大高度,超出会显示滚动条
dataSourceany[]-表格数据,非 api 加载使用
borderedbooleanfalse是否显示表格边框
paginationany-分页信息配置,为 false 不显示分页
loadingbooleanfalse表格 loading 状态
scrollany-参考官方文档 scroll
beforeEditSubmit({record: Recordable,index: number,key: string | number,value: any}) => Promise<any>--

TableSetting

表格右上角按钮组设置

属性类型默认值说明
redoboolean------是否显示刷新按钮
sizeboolean------是否显示尺寸调整按钮
settingboolean------是否显示字段调整按钮
fullScreenboolean------是否显示全屏按钮

BasicColumn

属性类型默认值说明
defaultHiddenbooleanfalse默认隐藏,可在列配置显示
helpMessagestring|string[]-列头右侧帮助文本
editboolean-是否开启单元格编辑
editRowboolean-是否开启行编辑
editablebooleanfalse是否处于编辑状态
editComponentComponentTypeInput编辑组件,见下方 ComponentType
editComponentPropsany-对应编辑组件的 props
editRule((text: string, record: Recordable) => Promise<string>)-对应编辑组件的表单校验
editDefaultValueobject-编辑组件的默认值
editDefaultLabelobject-编辑组件的标签默认值
onEditRow()=>void-触发行编辑
customRender({text, record, index}) {}-生成复杂数据的渲染函数,参数分别为当前行的值,当前行数据,行索引,@return 里面可以设置表格行/列合并,可参考 demo 表格行/列合并
formatCellFormat-单元格格式化(编辑表格下可以替代 customRender 实现,编辑后的单元格格式化)
authRoleEnum | RoleEnum[] | string | string[]-根据权限编码来控制当前列是否显示
ifShowboolean | ((action: ActionItem) => boolean)-根据业务状态来控制当前列是否显示
dataIndexstring-列数据在数据项中对应的 key,支持 a.b.c 的嵌套写法
dataLabelstring-数据的标签显示,举例 dataIndex 是 userCode,dataLabel 是 userName
dictTypestring-字典类型的单元格,设置字典类型,返回标签
actions(record: Recordable) => ActionItem[]-列表操作列设置
dropDownActions(record: Recordable) => ActionItem[]-列表操作更多按钮设置
slotstring-使用 slot 指定插槽名

ComponentType

编辑表格的表单组件类型 src/components/Table/src/componentMap.ts

ts
export type ComponentType =
  | 'Input'
  | 'InputNumber'
  | 'Select'
  | 'ApiSelect'
  | 'AutoComplete'
  | 'ApiTreeSelect'
  | 'Checkbox'
  | 'Switch'
  | 'DatePicker'
  | 'TimePicker';

CellFormat

ts
export type CellFormat =
  | string
  | ((text: string, record: Recordable, index: number) => string | number)
  | Map<string | number, any>;

events

名称回调参数说明
fetch-successFunction({items,total})接口请求成功后触发
fetch-errorFunction(error)错误信息
selection-changeFunction({keys,rows})勾选事件触发
row-clickFunction(record, index, event)行点击触发
row-dbClickFunction(record, index, event)行双击触发
row-contextmenuFunction(record, index, event)行右键触发
row-mouseenterFunction(record, index, event)行移入触发
row-mouseleaveFunction(record, index, event)行移出触发
edit-endFunction({record, index, key, value})单元格编辑完成触发
edit-cancelFunction({record, index, key, value})单元格取消编辑触发
edit-row-end()=>{}行编辑结束触发
edit-changeFunction({column,value,record})单元格编辑组件的 value 发生变化时触发

edit-change 说明

对于 edit-change 事件,record 中的 editValueRefs 装载了当前行的所有编辑组件(如果有的话)的值的 ref 对象,可用于处理同一行中的编辑组件联动。请看下面的例子

ts
function onEditChange({ column, record }) {
  // 当同一行的单价或者数量发生变化时,更新合计金额(三个数据均为当前行编辑组件的值)
  if (column.dataIndex === 'qty' || column.dataIndex === 'price') {
    const {
      editValueRefs: { total, qty, price },
    } = record;
    total.value = unref(qty) * unref(price);
  }
}

slots

除以下参数外,官方文档内的 slot 也都支持,具体可以参考 Antdv Table 插槽

名称说明
tableTitle表格顶部左侧区域
toolbar表格顶部右侧区域
expandedRowRender展开行区域
headerTop表格顶部区域(标题上方)

查询表单插槽

Form-Slots

当启用 form 查询表单后。以 form-xxxx 为前缀的 slot 会被视为 form 的 slot

xxxx 为 form 组件的 slot。具体参考 Form 组件文档,例如: form-submitBefore

内置组件

TableAction 操作列组件

用于表格右侧操作列渲染,只能用于表格内部,默认已内置

vue
<template>
  <TableAction
    :actions="actionColumn.actions()"
    :dropDownActions="actionColumn.dropDownActions()"
  />
</template>
<script lang="ts" setup>
  import { TableAction } from 'lanven-ui';
  const actionColumn: BasicColumn = {
    width: 160, // 操作列宽
    actions: (record) => [
      {
        icon: 'clarity:note-edit-line',
        title: '编辑数据',
        onClick: () => {},
        // 按钮权限控制,指定权限字符串
        auth: 'test:testData:edit',
      },
      {
        icon: 'ant-design:stop-outlined',
        color: 'error',
        title: '停用数据',
        // 是否需要启用确认框
        popConfirm: {
          title: '是否确认停用数据',
          confirm: '',
        },
        // 按钮权限控制,指定权限字符串
        auth: 'test:testData:edit',
      },
    ],
    // 操作列更多按钮定义
    dropDownActions: (record: Recordable) => [
      {
        icon: 'ant-design:reload-outlined',
        label: '重置密码',
        onClick: () => {},
        auth: 'sys:empUser:resetpwd',
      },
    ],
  };
</script>

属性

属性类型说明
actionsActionItem[]右侧操作列按钮列表
dropDownActionsActionItem[]右侧操作列更多下拉按钮列表

ActionItem

名称类型说明
labelstring按钮文本
disabledboolean是否禁用
colorsuccess | error | warning按钮颜色
typestring按钮类型
propsanybutton 组件 props
iconstring按钮图标
popConfirmPopConfirm气泡确认框
dividerboolean是否显示分隔线
authRoleEnum| RoleEnum[] | string | string[];根据权限编码来控制当前列是否显示
ifShowboolean | ((action: ActionItem) => boolean)根据业务状态来控制当前列是否显示
onClick()=>{}点击回调
tooltip string | TooltipProps点击 Tooltip 配置,可以配置为 string,或者完整的 tooltip 属性回调

有关 Tooltip Props 的说明,请参考 Tooltip 文字提示

PopConfirm

ts
export interface PopConfirm {
  title: string;
  okText?: string;
  cancelText?: string;
  confirm: Fn;
  cancel?: Fn;
  icon?: string;
}

TableImg 单元格图片组件

用于渲染单元格图片,支持图片预览,只能用于表格内部

图片示例

No Data

vue
<template>
  <BasicTable @register="registerTable">
    <template #bodyCell="{ column }">
      <template v-if="column.key === 'imgArr'">
        <TableImg
          :size="60"
          :simpleShow="true"
          :imgList="[
            'https://zos.alipayobjects.com/rmsportal/jkjgkEfvpUPVyRjUImniVslZfWPnJuuZ.png',
          ]"
        />
      </template>

      <template v-if="column.key === 'imgs'">
        <TableImg
          :size="60"
          :imgList="[
            'https://zos.alipayobjects.com/rmsportal/jkjgkEfvpUPVyRjUImniVslZfWPnJuuZ.png',
          ]"
        />
      </template>
    </template>
  </BasicTable>
</template>
<script lang="ts" setup>
  import { BasicColumn, BasicTable, useTable, TableImg } from 'lanven-ui';
  const Imgcolumns: BasicColumn[] = [
    {
      title: '图片列表1',
      dataIndex: 'imgArr',
      helpMessage: ['这是简单模式的图片列表', '只会显示一张在表格中', '但点击可预览多张图片'],
      width: 140,
    },
    {
      title: '照片列表2',
      dataIndex: 'imgs',
      width: 160,
    },
  ];

  const imgData = [
    {
      imgs: '图片',
      imgArr: '图片2',
    },
  ];

  const [registerTable] = useTable({
    title: '图片示例',
    pagination: false,
    columns: Imgcolumns,
    dataSource: imgData,
  });
</script>

TableImg 属性

名称类型默认值说明
imgListstring[]------图片地址列表
sizenumber------图片大小
simpleShowbooleanfalse简单显示模式(只显示第一张图片)
showBadgebooleantrue简单模式下是否显示计数 Badge
marginnumber4常规模式下的图片间距
srcPrefixstring-在每一个图片 src 前插入的内容