diff --git a/src/components/TreeTable/eval.js b/src/components/TreeTable/eval.js new file mode 100644 index 00000000..ffbe98aa --- /dev/null +++ b/src/components/TreeTable/eval.js @@ -0,0 +1,29 @@ +/** +* @Author: jianglei +* @Date: 2017-10-12 12:06:49 +*/ +'use strict' +import Vue from 'vue' +export default function treeToArray(data, expandedAll, parent, level) { + let tmp = [] + Array.from(data).forEach(function(record) { + if (record._expanded === undefined) { + Vue.set(record, '_expanded', expandedAll) + } + 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, expandedAll, record, _level) + tmp = tmp.concat(children) + } + }) + return tmp +} diff --git a/src/components/TreeTable/index.vue b/src/components/TreeTable/index.vue new file mode 100644 index 00000000..f0a9cb06 --- /dev/null +++ b/src/components/TreeTable/index.vue @@ -0,0 +1,105 @@ + + + + + diff --git a/src/lang/en.js b/src/lang/en.js index b243b0a5..22f5606a 100644 --- a/src/lang/en.js +++ b/src/lang/en.js @@ -28,6 +28,8 @@ export default { dragTable: 'Drag Table', inlineEditTable: 'Inline Edit', complexTable: 'Complex Table', + treeTable: 'treeTable', + customTreeTable: 'Custom TreeTable', tab: 'Tab', form: 'Form', createForm: 'Create Form', diff --git a/src/lang/zh.js b/src/lang/zh.js index 4dd83533..c465cfee 100644 --- a/src/lang/zh.js +++ b/src/lang/zh.js @@ -28,6 +28,8 @@ export default { dragTable: '拖拽table', inlineEditTable: 'table内编辑', complexTable: '综合table', + treeTable: '树表', + customTreeTable: '自定义树表', tab: 'Tab', form: '表单', createForm: '创建表单', diff --git a/src/router/index.js b/src/router/index.js index bdb31816..85f961ec 100644 --- a/src/router/index.js +++ b/src/router/index.js @@ -151,7 +151,9 @@ export const asyncRouterMap = [ { path: 'dynamic-table', component: _import('example/table/dynamicTable/index'), name: 'dynamicTable', meta: { title: 'dynamicTable' }}, { path: 'drag-table', component: _import('example/table/dragTable'), name: 'dragTable', meta: { title: 'dragTable' }}, { path: 'inline-edit-table', component: _import('example/table/inlineEditTable'), name: 'inlineEditTable', meta: { title: 'inlineEditTable' }}, - { path: 'complex-table', component: _import('example/table/complexTable'), name: 'complexTable', meta: { title: 'complexTable' }} + { path: 'complex-table', component: _import('example/table/complexTable'), name: 'complexTable', meta: { title: 'complexTable' }}, + { path: 'treeTable', component: _import('example/table/treeTable/treeTable'), name: 'treeTable', meta: { title: 'treeTable' }}, + { path: 'customTreeTable', component: _import('example/table/treeTable/customTreeTable'), name: 'customTreeTable', meta: { title: 'customTreeTable' }} ] }, { path: 'tab/index', icon: 'tab', component: _import('example/tab/index'), name: 'tab', meta: { title: 'tab' }} diff --git a/src/views/example/table/treeTable/customEval.js b/src/views/example/table/treeTable/customEval.js new file mode 100644 index 00000000..a8cbf928 --- /dev/null +++ b/src/views/example/table/treeTable/customEval.js @@ -0,0 +1,55 @@ +/** +* @Author: jianglei +* @Date: 2017-10-12 12:06:49 +*/ +'use strict' +import Vue from 'vue' +const marLTemp = {} +export default function treeToArray(data, parent, level, expandedAll, item) { + let tmp = [] + let rootId + Array.from(data).forEach(function(record) { + if (record.children) { + rootId = record.id + } + if (record._expanded === undefined) { + Vue.set(record, '_expanded', expandedAll) + } + let _level = 1 + if (level !== undefined && level !== null) { + _level = level + 1 + } + Vue.set(record, '_level', _level) + // 如果有父元素 + if (parent) { + Vue.set(record, 'parent', parent) + // 如果父元素有偏移量,需要计算在this的偏移量中 + // 偏移量还与前面同级元素有关,需要加上前面所有元素的长度和 + if (!marLTemp[rootId]) { + marLTemp[rootId] = [] + } + if (!marLTemp[rootId][_level]) { + marLTemp[rootId][_level] = 0 + } + Vue.set(record, '_marginLeft', marLTemp[rootId][_level] + parent._marginLeft) + Vue.set(record, '_width', record[item] / parent[item] * parent._width) + // 在本次计算过偏移量后加上自己长度,以供下一个元素使用 + marLTemp[rootId][_level] += record._width + } else { + // 如果为根 + // 初始化偏移量存储map + marLTemp[record.id] = [] + // map中是一个数组,存储的是每级的长度和 + // 初始情况下为0 + marLTemp[record.id][_level] = 0 + Vue.set(record, '_marginLeft', 0) + Vue.set(record, '_width', 1) + } + tmp.push(record) + if (record.children && record.children.length > 0) { + const children = treeToArray(record.children, record, _level, expandedAll, item) + tmp = tmp.concat(children) + } + }) + return tmp +} diff --git a/src/views/example/table/treeTable/customTreeTable.vue b/src/views/example/table/treeTable/customTreeTable.vue new file mode 100644 index 00000000..703e2014 --- /dev/null +++ b/src/views/example/table/treeTable/customTreeTable.vue @@ -0,0 +1,153 @@ + + + + + diff --git a/src/views/example/table/treeTable/treeTable.vue b/src/views/example/table/treeTable/treeTable.vue new file mode 100644 index 00000000..b696116f --- /dev/null +++ b/src/views/example/table/treeTable/treeTable.vue @@ -0,0 +1,121 @@ + + +