# `ld-table` 表格显示组件
> 通过简单的参数配置,加载数据到界面
# 效果图

## `ld-table` 属性
|关键字|类型|解释|默认值|是否必须|说明|
|-|-|-|-|-|-|
|layout|Array[Object]|布局显示参数||√|一组可配置的对象集合[{visabled:true,width:'',replace:{},aligin:'',prop:'',label:'',format:(val)=>{},html:(val)=>{}}],[详情参考](###layout)|
|is-auto-load-data|true|是否自动加载数据|true|√|当true时,必须配置`auto-load-data-api`有效[如下详情](###auto-load-data-api)|
|auto-load-data-api|{}|自动加载数据,请求参数信息|{}|√|`auto-load-data-api`详情查看[如下详情](###auto-load-data-api)|
|list|Array|布局数据值|||通常情况下,推荐使用自动装载数据;|
|is-enabled-check-box|Boolean|是否显示复选框|false|-|当使用复选框时。如需获取选择状态,需要实现`checkbox(e)`方法|
|row-key|String|行数据的key|id||行数据的 Key,用来优化 Table 的渲染;在使用树形数据时,该属性是必填的。|
|el-table-property|Object|Element-ui表格参数|||Element-ui表格参数,详情查看[如下详情](###el-table-property)|
|get-table-remote-data-after|Function(data)|获取表单数据之后,装载数据之前,调用的装饰函数|||获取表单数据之后,装载数据之前,调用的装饰函数|
|show-page-helper|Boolean|是否使用分页显示数据|true|-|当使用分页时,每页的数据会通过,分页的方式,发送请求加载数据|
|page-size|Number|每页条数|30||当`showPageHelper`为true时有效,且该参数会受分页组件中的条数进行更改|
|total|Number|总条数|0||在不适用自动加载数据时使用|
|currentPage|Number|当前页|1||当前页|
|el-pagination|Object|分页组件的参数|`{pageSizes: [10, 20, 30, 50, 80, 100]}`||分页组件的参数,其他更多参数,设计中...|
## layout
> 布局参数,该参数为必填参数,决定了表格布局的结构,他是一组布局子项的集合
### layout 子项布局参数解释说明
|关键字|类型|解释|是否必须|补充|
|-|-|-|-|-|
|prop|String|关健字|√|-|
|label|String\|Object|显示文字|√|如需要多级表头时,此处需要配置为Object,[详情如下](#多级表头)|
|format|Function(val)|格式化值函数||具体详见[format](##format)注意:replace、format、html,多个存在时,按照以上顺序只有一个会生效|
|html|Function(val)|使用hetml处理显示内容||具体详见[html](##html);注意:replace、format、html,多个存在时,按照以上顺序只有一个会生效|
|replace|Object|需要替换的请求方法参数||在加载表格式,有时需要将外键关联的另一张表数据中的字符显示到表格中。这时需要该参数。比如:需要显示创建人名称,而该字段所对应的值为人员表的编号,此时可以通过该参数配置。具体详见[replace](##replace);注意:replace、format、html,多个存在时,按照以上顺序只有一个会生效|
|visabled|Boolean|是否显示||默认值为true;false不显示|
|sortable|Boolean|是否排序列||默认为false|
|width|String,Number|宽度||形如`100px` `80%` `calc(100% - 100px)`等,默认值为'auto'|
### layout布局参数结构如下
```javascript
layout:[
{prop: 'nickName',label: '用户名称' },
{prop: 'phone',label: '电话号码' },
{prop: 'remake',label: '描述'},
{prop: 'sex',label: '性别',html:(val)=>{return `
${val==1?'男':'女'}
`}},
{prop: 'userType',label: '用户类别',format:(val)=>{return val==1?'普通用户':'超级管理员'} },
{prop: 'birthday',label: '出生日期',format:(val)=>{ return !val?'': this.$ld.util.getNowD(0,new Date(val))} },
{prop: 'createdTime',label: '创建时间',format:(val)=>{ return !val?'': this.$ld.util.getNowDT(0,new Date(val)) } },
{prop: 'updatedTime',label: '修改时间',format:(val)=>{ return !val?'': this.$ld.util.getNowDT(0,new Date(val))} },
{prop: 'createdBy',label: '创建人', replace: { remotePath: 'test/getUserById',remoteMethodType:'get', label: 'nickName', value: 'id'} },
{prop: 'updatedBy',label: '修改人', replace: { remotePath: 'test/getUserById',remoteMethodType:'get', label: 'nickName', value: 'id'} },
]
```
## auto-load-data-api
> 自动加载数据配置参数;以下参数只能是大驼峰;当时用小驼峰时,参数值无效。
|关键字|类型|解释|可选值|是否必须|默认值|
|-|-|-|-|-|-|
|remotePath|String|请求方法地址,如`test/getPage`;当使用第三方请求时,`remotePath`为完整的请求路径,如:`http://localhost:8081/test4/getPage||√||
|remoteParam|Object|是否为斑马纹 table||√|{}|
|remoteMethodType|String|请求方式`get``post``delete``post``put``patch``head`||√|get|
|remoteTimeout|Number|请求超时时间|2000ms|√|-|
### el-table-property
> Element-ui表格参数;以下参数只能是大驼峰;当时用小驼峰时,参数值无效。
|关键字|类型|解释|可选值|是否必须|默认值|
|-|-|-|-|-|-|
|border|Boolean|是否带有纵向边框|||true|
|stripe|Boolean|是否为斑马纹 table|||true|
|indent|Number|展示树形数据时,树节点的缩进|||20|
|tooltipEffect|String|tooltip effect 属性|dark/light||-|
|fit|Boolean|列的宽度是否自撑开|||true|
|highlightCurrentRow|Boolean|是否要高亮当前行|||true|
|defaultExpandAll|Boolean|是否默认展开所有行,当 Table 包含展开行存在或者为树形表格时有效|||false|
|defaultSort|Object|默认的排序列的 prop 和顺序。它的prop属性指定默认的排序的列,order指定默认排序的顺序|`order`: ascending, descending||如果只指定了prop, 没有指定order, 则默认顺序是ascending|
|showSummary|Boolean|是否在表尾显示合计行|||false|
|sumText|String|合计行第一列的文本|||合计|
|summaryMethod|Function({ columns, data })|自定义的合计计算方法||||
|spanMethod|Function({ row, column, rowIndex, columnIndex })| 合并行或列的计算方法||||
## format
> 用来格式化显示表格数据,如下举2个示例
- 当数据为字典值,但需要显示在页面的为可阅读字符串时,其形如下
```javascript
layout:[
{
prop:'sex',
label:'性别',
format:(val)=>{
return val==1?'男':'女'
}
}
]
```
- 当数据为日期不便阅读的结构式,其形如下
```javascript
layout:[
{
prop:'birthday',
label:'生日',
format:(val)=>{
return !val?'未填写出生日期':this.$ld.util.getDate(0,new Date(val)); //该函数详情见https://github.com/dongmingzhixiu/layout-dynamic-ui/blob/main/doc/ld-util.md#getDate
}
}
]
```
## html
> 用来美化页面显示信息,如下举2个示例
- 当数据为字典值,但需要显示在页面的为可阅读字符串时,其形如下
```javascript
layout:[
{
prop:'sex',
label:'性别',
html:(val)=>{
return `${val==1?'男':'女'}
`
}
}
]
```
- 当数据为图片地址时,我们希望显示一张图片
```javascript
layout:[
{
prop:'birthday',
label:'生日',
html:(val)=>{
return `
` //图片样式和图片的地址需要进行处理
}
}
]
```
## replace
> 配置一组请求参数,通过自动请求的方式,显示另一张表的字段字符。
>
> 比如在数据中,只包含创建人编号,而创建人信息在另一张表,此时即可使用该参数,动态替换创建人编号
>
>该方式加载数据目前已使用局部缓存(只在当前组件内部缓存,当组件整体刷新时,会重新获取!后期根据使用反馈进行调整全局缓存等方式)
|关键字|类型|解释|是否必须|补充|
|-|-|-|-|-|
|remotePath|String|请求路径|√|形如:`test/getUserById`,当为第三方请求时,请填写完整请求路径|
|remoteMethodType|String|请求方式|√|请求方式`get``post``delete``post``put``patch``head`|
|label|String|显示到界面上的数据关键字|√|比如:'createdName'|
|id|String|查询数据的字段|√|当前数据中关联其他数据的关联键;比如'id'|
# 插槽
|slot name|类型|说明|插槽值|
|-|-|-|-|
|expand|作用域插槽|展开行|-|
|tools|作用域插槽|这表格每一行的末尾设置操作元素|-|
|toolsHeader|作用域插槽|显示在表格头的内容|-|
|append|具名插槽|插入至表格最后一行之后的内容,如果需要对表格的内容进行无限滚动操作,可能需要用到这个 slot。若表格有合计行,该 slot 会位于合计行之上。||
# 多级表头的使用
>多级表头使用非常简单,只需要对布局参数的`label`进行深层嵌套即可;只需遵从`children:[{...}...]`即可实现多层表格嵌套,参数格式如下
```javascript
layout:[{
label: {
label: '用户信息',
children:[
{prop: 'nickName',label: '用户名称' },
{prop: 'phone',label: '电话号码' },
{prop: 'remake',label: '描述'},
{prop: 'sex',label: '性别',html:(val)=>{return `${val==1?'男':'女'}
`}},
{prop: 'userType',label: '用户类别',format:(val)=>{return val==1?'普通用户':'超级管理员'} },
{prop: 'birthday',label: '出生日期',format:(val)=>{ return !val?'': this.$ld.util.getNowD(0,new Date(val))} },
{prop: 'createdTime',label: '创建时间',format:(val)=>{ return !val?'': this.$ld.util.getNowDT(0,new Date(val)) } },
{prop: 'updatedTime',label: '修改时间',format:(val)=>{ return !val?'': this.$ld.util.getNowDT(0,new Date(val))} },
{prop: 'createdBy',label: '创建人', replace: { method: 'test/getUserById',methodType:'get', label: 'nickName', value: 'id'} },
{prop: 'updatedBy',label: '修改人', replace: { method: 'test/getUserById',methodType:'get', label: 'nickName', value: 'id'} },
//理论上,可以无限使用{label:'',children:[{}]}结构进行嵌套,但实际中为了节省资源,请谨慎使用
// 在v 1.5.0之后,直接通过对象中的 children关键字,进行多层嵌套
{prop: '',label:'地址',
children:[
{prop:'province',label:'省份',format:(val)=>{return"甘肃省"}},
{prop:'city',label:'市区',format:(val)=>{return"兰州市"}},
{prop:'address',label:'地址',format:(val)=>{return"城关区"}},
]
},
]
}
},
{
label:'用户职责',
prop:'duty'
}]
```
- 效果图如下

# 树形数据
> 树形结构显示数据。
> 1.需要参数为指定格式[{key1:'',key2:'',children:[{key1:'',key2:''}]}] 包含关键字 children
> 2.需要使用`row-key`参数设置用于树形结构更新的 key,key的值具有唯一性
- 数据结构如下
```javascript
list:[
{id:1,name:'张三',sex:'1',age:20,remake:'描述',phone:'18888888888'},
{id:2,name:'张三',sex:'1',age:20,remake:'描述',phone:'18888888888',
//为id=2,的张三添加树形子数据,同样可以嵌套搓成,理论上是无限的,但实际上为了资源,请谨慎使用
children:[
{id:21,name:'张三1',sex:'1',age:20,remake:'描述',phone:'18888888888'},
{id:22,name:'张三2',sex:'1',age:20,remake:'描述',phone:'18888888888'},
{id:23,name:'张三3',sex:'1',age:20,remake:'描述',phone:'18888888888'},
]},
{id:3,name:'张三',sex:'1',age:20,remake:'描述',phone:'18888888888'},
]
```
> 以上数据的 `row-key`就可以设置为`row-key='id'`
# `ld-table`表格获取数据装载到布局之前的装饰函数
>重写 `this.$ld.getTableRemoteDataAfter`(全局作用),也可通过`ld-table`的`get-table-remote-data-after`的参数设置装饰函数。
>
>通过全局设置,在多处使用`ld-table`组件时,会自动调用处理数据
>
>获取表格数据之后,装载数据到表格之前,处理数据的函数
```javascript
this.$ld.getTableRemoteDataAfter=function(data, isPagination) {
if (isPagination) {
data = data['data'] || data;
let list = Array.isArray(data) ? data : data['list'] ? data['list'] : data;
return {
list: list,
currentPage: data['pageNum'],
pageSize: data['pageSize'],
total: data['total']
}
} //分页
return !Array.isArray(data) && data && data['list'] ? data['list'] : data;
},
```
- 如上,分页所具备基本的函数变量和值,如下表
## 分页所需返回值参数说明 ,返回类型为`Object`=>{list:[],currentPage:1,pageSize:30,total:300}
|关键字|类型|解释|是否必须|补充|
|-|-|-|-|-|
|list|Array|分页获取当前页的数据|√|形如:[{a:1,b:2,c:3},{a:1,b:2,c:3},{a:1,b:2,c:3}]|
|currentPage|Number|当前页|√|当前分页数据所查询的所在页|
|pageSize|Number|每页显示条数|√||
|total|Number|总条数|√|通过总条数会计算总页数等相关信息|
## 不分页所需的返回值说明,返回类型为`Array`=>[{a:1,b:2,c:3},{a:1,b:2,c:3},{a:1,b:2,c:3}]