diff --git a/src/components/TreeTable/eval.js b/src/components/TreeTable/eval.js index 871dbeba..3f523867 100644 --- a/src/components/TreeTable/eval.js +++ b/src/components/TreeTable/eval.js @@ -1,21 +1,32 @@ import Vue from 'vue' -// 给数据添加额外的几个属性,并且扁平化数组 +// 扁平化数组 export default function treeToTable( - data, - { parent = null, level = 0, expand = false, children = 'children', show = true, select = false } = {} + data, children = 'children' ) { let tmp = [] - data.forEach(item => { + data.forEach((item, idx) => { + Vue.set(item, '__index', idx) + tmp.push(item) + if (item[children] && item[children].length > 0) { + const res = treeToTable(item[children], children) + tmp = tmp.concat(res) + } + }) + return tmp +} + +// 给数据添加额外的几个属性 +// 清除__parent属性,因数据循环引用,使用JSON.stringify()报错 +export function addAttrs(data, { parent = null, level = 0, expand = false, children = 'children', show = true, select = false } = {}) { + data.forEach((item, idx) => { Vue.set(item, '__level', level) Vue.set(item, '__expand', expand) Vue.set(item, '__parent', parent) Vue.set(item, '__show', show) Vue.set(item, '__select', select) - - tmp.push(item) if (item[children] && item[children].length > 0) { - const res = treeToTable(item[children], { + addAttrs(item[children], { parent: item, level: level + 1, expand, @@ -23,8 +34,18 @@ export default function treeToTable( status, select }) - tmp = tmp.concat(res) } }) - return tmp } + +// 清除__parent属性 +export function cleanAttrs(data, children = 'children') { + data.forEach(item => { + item.__parent = null + if (item[children] && item[children].length > 0) { + addAttrs(item[children], children) + } + }) + return data +} + diff --git a/src/components/TreeTable/index.vue b/src/components/TreeTable/index.vue index f5e99a61..8683cb78 100644 --- a/src/components/TreeTable/index.vue +++ b/src/components/TreeTable/index.vue @@ -24,12 +24,27 @@ :style="{'padding-left':+scope.row.__level*spreadOffset + 'px'} " class="el-icon-plus" /> - + {{ scope.row[item.key] }} @@ -39,7 +54,7 @@