diff --git a/src/components/TreeTable/eval.js b/src/components/TreeTable/eval.js
index d9b89e1c..dcb8fe24 100644
--- a/src/components/TreeTable/eval.js
+++ b/src/components/TreeTable/eval.js
@@ -1,27 +1,23 @@
-/**
-* @Author: jianglei
-* @Date: 2017-10-12 12:06:49
-*/
-'use strict'
import Vue from 'vue'
-export default function treeToArray(data, expandAll, parent = null, level = null) {
+
+// 给数据添加额外的几个属性,并且扁平化数组
+export default function formatData(
+ data,
+ { parent = null, leavel = 0, expand = false } = {}
+) {
+ console.log('data', data)
let tmp = []
- Array.from(data).forEach(function(record) {
- if (record._expanded === undefined) {
- Vue.set(record, '_expanded', expandAll)
- }
- let _level = 1
- if (level !== undefined && level !== null) {
- _level = level + 1
- }
- Vue.set(record, '_level', _level)
- // 如果有父元素
- if (parent) {
- Vue.set(record, 'parent', parent)
- }
- tmp.push(record)
- if (record.children && record.children.length > 0) {
- const children = treeToArray(record.children, expandAll, record, _level)
+ data.forEach(item => {
+ Vue.set(item, '__leavel', leavel)
+ Vue.set(item, '__expand', expand)
+ Vue.set(item, '__parent', parent)
+
+ tmp.push(item)
+ if (item.children && item.children.length > 0) {
+ const children = formatData(item.children, {
+ parent: item,
+ leavel: leavel + 1
+ })
tmp = tmp.concat(children)
}
})
diff --git a/src/components/TreeTable/index.vue b/src/components/TreeTable/index.vue
index a48765c8..5421fb51 100644
--- a/src/components/TreeTable/index.vue
+++ b/src/components/TreeTable/index.vue
@@ -1,41 +1,37 @@
-
-
+
+
-
-
-
-
+
+
+
- {{ scope.$index }}
+ {{ scope.row[item.key] }}
-
-
-
-
-
-
-
-
-
- {{ scope.row[column.value] }}
-
-
-
-
diff --git a/src/components/TreeTable/readme.md b/src/components/TreeTable/readme.md
index 5b598e11..c23d8cb1 100644
--- a/src/components/TreeTable/readme.md
+++ b/src/components/TreeTable/readme.md
@@ -1,89 +1,87 @@
## 写在前面
-此组件仅提供一个创建TreeTable的解决思路
-## prop说明
-#### *data*
- **必填**
+此组件仅提供一个创建 TreeTable 的解决思路
- 原始数据,要求是一个数组或者对象
- ```javascript
- [{
- key1: value1,
- key2: value2,
- children: [{
+## prop 说明
+
+- data(**必填**)
+
+原始数据,要求是一个数组或者对象
+
+```js
+const data = [
+ {
+ key1: value1,
+ key2: value2,
+ children: [
+ {
key1: value1
},
{
key1: value1
- }]
- },
- {
- key1: value1
- }]
- ```
- 或者
- ```javascript
- {
- key1: value1,
- key2: value2,
- children: [{
- key1: value1
- },
- {
- key1: value1
- }]
- }
- ```
+ }
+ ]
+ },
+ {
+ key1: value1
+ }
+]
+```
-#### columns
- 列属性,要求是一个数组
+或者
- 1. text: 显示在表头的文字
- 2. value: 对应data的key。treeTable将显示相应的value
- 3. width: 每列的宽度,为一个数字(可选)
+```javascript
+ {
+ key1: value1,
+ key2: value2,
+ children: [{
+ key1: value1
+ },
+ {
+ key1: value1
+ }]
+ }
+```
- 如果你想要每个字段都有自定义的样式或者嵌套其他组件,columns可不提供,直接像在el-table一样写即可,如果没有自定义内容,提供columns将更加的便捷方便
+- columns
- 如果你有几个字段是需要自定义的,几个不需要,那么可以将不需要自定义的字段放入columns,将需要自定义的内容放入到slot中,详情见后文
- ```javascript
- [{
- value:string,
- text:string,
- width:number
- },{
- value:string,
- text:string,
- width:number
- }]
- ```
+列属性,要求是一个数组
-#### expandAll
- 是否默认全部展开,boolean值,默认为false
+1. label: 显示在表头的文字
+2. key: 对应 data 的 key。treeTable 将显示相应的 value
+3. width: 每列的宽度,为一个数字(可选)
+
+树表组件将会根据 columns 的 key 属性生成具名插槽,如果你需要对列数据进行自定义,通过插槽即可实现
+
+```javascript
+const columns = [
+ // 建议第一列做展开收缩操作
+ { label: '', key: '__spread', width: '200' },
+ {
+ value: string,
+ text: string,
+ width: number
+ },
+ {
+ value: string,
+ text: string,
+ width: number
+ }
+]
+```
#### evalFunc
- 解析函数,function,非必须
- 如果不提供,将使用默认的[evalFunc](./eval.js)
+解析函数,function,非必须
- 如果提供了evalFunc,那么会用提供的evalFunc去解析data,并返回treeTable渲染所需要的值。如何编写一个evalFunc,请参考[*eval.js*](https://github.com/PanJiaChen/vue-element-admin/blob/master/src/components/TreeTable/eval.js)或[*customEval.js*](https://github.com/PanJiaChen/vue-element-admin/blob/master/src/views/table/treeTable/customEval.js)
+如果不提供,将使用默认的[evalFunc](./eval.js)
+
+如果提供了 evalFunc,那么会用提供的 evalFunc 去解析 data,并返回 treeTable 渲染所需要的值。
#### evalArgs
- 解析函数的参数,是一个数组
- **请注意,自定义的解析函数参数第一个为this.data,第二个参数为, this.expandAll,你不需要在evalArgs填写。一定记住,这两个参数是强制性的,并且位置不可颠倒** *this.data为需要解析的数据,this.expandAll为是否默认展开*
+解析函数的参数,是一个对象,如果需要展开所有的数据,那么就传入`{expand:true}`
- 如你的解析函数需要的参数为`(this.data, this.expandAll,1,2,3,4)`,那么你只需要将`[1,2,3,4]`赋值给`evalArgs`就可以了
+## 其他
- 如果你的解析函数参数只有`(this.data, this.expandAll)`,那么就可以不用填写evalArgs了
-
- 具体可参考[*customEval.js*](https://github.com/PanJiaChen/vue-element-admin/blob/master/src/views/table/treeTable/customEval.js)的函数参数和[customTreeTable](https://github.com/PanJiaChen/vue-element-admin/blob/master/src/views/table/treeTable/customTreeTable.vue)的`evalArgs`属性值
-
- ## slot
- 这是一个自定义列的插槽。
-
- 默认情况下,treeTable只有一行行展示数据的功能。但是一般情况下,我们会要给行加上一个操作按钮或者根据当行数据展示不同的样式,这时我们就需要自定义列了。请参考[customTreeTable](https://github.com/PanJiaChen/vue-element-admin/blob/master/src/views/table/treeTable/customTreeTable.vue),[实例效果](https://panjiachen.github.io/vue-element-admin/#/table/tree-table)
-
- `slot`和`columns属性`可同时存在,columns里面的数据列会在slot自定义列的左边展示
-
- ## 其他
- 如果有其他的需求,请参考[el-table](http://element-cn.eleme.io/#/en-US/component/table)的api自行修改index.vue
+如果有其他的需求,请参考[el-table](http://element-cn.eleme.io/#/en-US/component/table)的 api 自行修改 index.vue
diff --git a/src/views/table/treeTable/treeTable.vue b/src/views/table/treeTable/treeTable.vue
index d2ecf14d..541c1394 100644
--- a/src/views/table/treeTable/treeTable.vue
+++ b/src/views/table/treeTable/treeTable.vue
@@ -24,21 +24,26 @@ export default {
return {
columns: [
{
- text: '事件',
- value: 'event',
+ label: '',
+ key: '__sperad'
+
+ },
+ {
+ label: '事件',
+ key: 'event',
width: 200
},
{
- text: 'ID',
- value: 'id'
+ label: 'ID',
+ key: 'id'
},
{
- text: '时间线',
- value: 'timeLine'
+ label: '时间线',
+ key: 'timeLine'
},
{
- text: '备注',
- value: 'comment'
+ label: '备注',
+ key: 'comment'
}
],
data: [