OpenAuth.Net/newdocs/docs/notes/pro/table.md
2025-06-14 12:13:47 +08:00

139 lines
5.2 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

---
title: 通用表格
createTime: 2025/05/07 19:10:57
permalink: /pro/table/
---
通用表格组件`AuthTable` 是OpenAuth.Net框架的核心组件之一支持自定义列模板、单选/多选、可编辑、导出 Excel 等功能。
![2025-05-12-16-14-13](http://img.openauth.net.cn/2025-05-12-16-14-13.png)
## 使用示例
```vue
<template>
<auth-table
ref="mainTableRef"
:id="'tableId'"
:table-fields="tableFields"
:data="dataList"
:edit-model="true"
:v-loading="loading"
:templates="{'id': idtemplate}"
select-type="checkbox"
@row-click="handleRowClick"
@selection-change="handleSelectionChange"
@item-change="handleItemChange"
@sort-change="handleSortChange"
/>
</template>
<script setup>
import { ref } from 'vue'
import AuthTable from '@/components/Base/AuthTable.vue'
// 表单属性定义。为一个`ColumnDefine`的数组。典型的值如下:
const tableFields = ref([
new ColumnDefine('id', 'id', false, false, 'text', '', 'string', 'varchar', ''),
new ColumnDefine('tableName', '表名', true, true, 'text', '', 'string', 'varchar', ''),
new ColumnDefine('parentTableId', '父表', true, true, 'selectDynamic', '/BuilderTables/AllMain', 'string', 'varchar', '')
])
// 表格数据源。为一个数组。典型的值如下:
const dataList = ref([
{ id: 1, tableName: '表1', parentTableId: null },
{ id: 2, tableName: '表2', parentTableId: 1 },
// ... 其他数据
])
const loading = ref(false)
// 如果需要自定义展示可以设置。比如主表id模板,点击跳转详情
const idtemplate = defineComponent({
props: ['row'],
methods: {
itemClick(row) {
viewDetail(row)
}
},
template: `<span class="link-text" @click.stop='itemClick(row)'>{{row['id']}}</span>`
})
const handleRowClick = row => {
// 点击行
mainTable.value.clearSelection()
mainTable.value.toggleRowSelection(row)
var val = row.id
// ...
}
const handleSelectionChange = val => {
multipleSelection.value = val //当前选中的所有行
}
const handleItemChange = val => {
// 单元格值变化事件处理
xxapp.update(item).then(() => {
ElNotification.success("更新成功")
})
}
// 如果不需要后端排序,则不需要实现此方法
const handleSortChange = val => {
// 表头排序事件处理
listQuery.sort = val.prop + ',' + val.order
listLoading.value = true
//这里不能直接用getList因为getList会重新加载列设置
wmsinboundordertbls.getList(listQuery).then(response => {
mainList.value = response.data
listLoading.value = false
})
}
</script>
```
## 属性说明
| 属性名 | 类型 | 说明 | 默认值 |
| -------------- | ------- | -------------------------------------- | ----------- |
| id | String | 表格唯一标识,导出 Excel 时必填 | '' |
| tableFields | Array | 表格列定义,详见下方字段说明 | [] |
| data | Array | 表格数据源 | [] |
| selectType | String | 选择类型checkbox多选/radio单选| 'checkbox' |
| editModel | Boolean | 是否可编辑 | false |
| vLoading | Boolean | 加载状态 | false |
| templates | Object | 自定义列模板key 为 columnName | {} |
### tableFields 字段说明
| 字段名 | 类型 | 说明 |
| -------------- | ------- | -------------------------------------- |
| columnName | String | 字段名,对应 data 中的 key |
| remark | String | 列显示名称 |
| isList | Boolean | 是否在列表中显示 |
| isEdit | Boolean | 是否可编辑 |
| editType | String | 编辑类型select/switch/date/datetime |
| dataSource | Array | 下拉框数据源editType 为 select 时) |
| sort | Number | 排序字段,越小越靠前 |
## 事件说明
| 事件名 | 说明 | 回调参数 |备注|
| ----------------- | -------------------------- | ---------------- |----|
| row-click | 行点击事件 | row当前行数据| |
| selection-change | 选择项变化事件 | val选中项数组| |
| item-change | 单元格值变化事件 | val当前行数据| |
| row-dblclick | 行双击事件 | row当前行数据| |
| sort-change | 表头排序事件,如果不需要后端排序,则不需要实现此方法 | val排序字段| vue3 v5.7及以上版本支持 |
## 方法说明
通过 `ref` 可调用以下方法:
| 方法名 | 说明 | 参数 |
| ----------------- | -------------------------- | ---------------- |
| clearSelection | 清空所有选中项 | 无 |
| toggleRowSelection| 选中/取消选中指定行 | row行数据 |
| exportExcel | 导出 Excel 文件 | fileName文件名|