# Table 表格组件
对 `element-plus` 的 `Table` 组件进行封装,只需传入 `columns` 与 `data` 参数,即可渲染出响应的表格出来。
Table 组件位于 [src/components/Table](https://github.com/kailong321200875/vue-element-plus-admin/tree/master/src/components/Table) 内
::: warning 注意
推荐使用 tsx 来使用 `Table` 组件。
:::
## 用法
### 基础用法
```vue
```
### useTable
推荐配合 `useTable` 来使用
复杂点的例子,请[在线预览](https://element-plus-admin.cn/#/components/table/use-table)
```vue
```
#### 参数介绍
```ts
const { tableRegister, tableState, tableMethods } = useTable(props: UseTableConfig)
```
**props**
在使用 `useTable` 的时候,需要传入 `fetchDataApi`,为了保证可定制,需要自行在 `fetchDataApi` 中完成请求逻辑,之后返回结果 { list: Array, total?: number },后续分页,就可以自动请求数据。
如果需要删除,同样需要传入 `fetchDelApi` ,返回一个 `Boolean` 来判断是否删除完成,后续 `useTable` 将自行刷新表格。
**tableRegister**
`tableRegister` 用于注册 `useTable`,如果需要使用 `useTable` 提供的 `api`,必须将 `tableRegister` 传入组件的 `onRegister`
**tableState**
表格状态
| 属性 | 说明 | 类型 | 可选值 | 默认值 |
| ---- | ---- | ---- | ---- | ---- |
| pageSize | 每页显示多少条 | `number` | - | 10 |
| currentPage | 当前页 | `number` | - | 1 |
| total | 总条数 | `number` | - | - |
| dataList | 表格数据 | `any[]` | - | [] |
| loading | 表格是否加载中 | `boolean` | - | false |
**tableMethods**
| 方法名 | 说明 | 回调参数 |
| ---- | ---- | ---- |
| setProps | 用于表格组件属性 | (props: Recordable) => void |
| getList | 获取表格数据 | `() => Promise` |
| setColumn | 设置表头结构 | (columnProps: TableSetProps[]) => void |
| addColumn | 新增表头结构 | (tableColumn: TableColumn, index?: number) => void |
| delColumn | 删除表头结构 | (field: string) => void |
| getElTableExpose | 获取 ElTable 实例 | `() => Promise` |
| refresh | 刷新表格 | () => void |
| delList | 删除数据 | `(idsLength: number) => Promise` |
## Table 属性
除以下参数外,还支持 `element-plus` 的 `Table` 所有属性,[详见](https://element-plus.org/zh-CN/component/table.html#table-attributes)
| 属性 | 说明 | 类型 | 可选值 | 默认值 |
| ---- | ---- | ---- | ---- | ---- |
| pageSize | 每页显示多少条,支持 v-model 双向绑定 | `number` | - | 10 |
| currentPage | 当前页,支持 v-model 双向绑定 | `number` | - | 1 |
| selection | 是否多选 | `boolean` | - | true |
| showOverflowTooltip | 是否所有的超出隐藏,优先级低于 schema 中的 showOverflowTooltip | `boolean` | - | true |
| columns | 表头结构,[详见](#Columns) | `TableColumn[]` | - | [] |
| expand | 是否显示展开行 | `boolean` | - | false |
| pagination | 是否展示分页,[详见](#Pagination) | `Pagination`/`undefined` | - | - |
| reserveSelection | 仅对 type=selection 的列有效,类型为 Boolean,为 true 则会在数据更新之后保留之前选中的数据(需指定 row-key) | `boolean` | - | false |
| loading | 加载状态 | `boolean` | - | false |
| reserveIndex | 是否叠加索引 | `boolean` | - | false |
| align | 内容对齐方式 | `string` | `left`/`center`/`right` | left |
| headerAlign | 表头对齐方式 | `string` | `left`/`center`/`right` | left |
| data | 表格数据 | `Recordable[]` | - | [] |
| showAction | 是否显示表格操作 | `boolean` | - | false |
| imagePreview | 需要展示图片的字段 | `string[]` | - | - |
| videoPreview | 需要展示视频的字段 | `string[]` | - | - |
| customContent | 是否自定义内容 | `boolean` | - | false |
| cardBodyStyle | 卡片内容样式 | `CSSProperties` | - | - |
| cardBodyClass | 卡片内容类名 | `string` | - | - |
| cardWrapStyle | 卡片容器样式 | `CSSProperties` | - | - |
| cardWrapClass | 卡片容器类名 | `string` | - | - |
### Columns
除了以下属性,还支持 `element-plus` 的 `TableColumn` 属性。
| 属性 | 说明 | 类型 | 可选值 | 默认值 |
| ---- | ---- | ---- | ---- | ---- |
| field | 唯一值,如需展示正确的数据,需要与 data 中的属性名对应 | `string` | - | - |
| label | 表头名称 | `string` | - | - |
| hidden | 是否隐藏 | `boolean` | - | - |
| slots | 插槽对象 | `object` | - | - |
| children | 子项,用于多级表头 | `TableColumn[]` | - | - |
### Pagination
支持 `element-plus` 的 `Pagination` 所有属性,[详见](https://element-plus.org/zh-CN/component/pagination.html#%E5%B1%9E%E6%80%A7)
## Table 方法
| 方法名 | 说明 | 回调参数 |
| ---- | ---- | ---- |
| setProps | 用于设置表格属性 | (props: Recordable) => void |
| setColumn | 用于修改表头结构 | (columnProps: TableSetPropsType[]) => void |
| addColumn | 新增表头结构 | (tableColumn: TableColumn, index?: number) => void |
| delColumn | 删除表头结构 | (field: string) => void |