perf[Tree-Table]: organize the structure and add documentation (#1673)
This commit is contained in:
		
							
								
								
									
										220
									
								
								src/components/TreeTable/README.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										220
									
								
								src/components/TreeTable/README.md
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,220 @@ | ||||
|  | ||||
| - [Enlgish](#Brief) | ||||
|  | ||||
| # 中文 | ||||
|  | ||||
| ## 写在前面 | ||||
|  | ||||
| 此组件仅提供一个创建 `TreeTable` 的解决思路。它基于`element-ui`的 table 组件实现,通过`el-table`的`row-style`方法,在里面判断元素是否需要隐藏或者显示,从而实现`TreeTable`的展开与收起。 | ||||
|  | ||||
| 并且本组件充分利用 `vue` 插槽的特性来方便用户自定义。 | ||||
|  | ||||
| `evel.js` 里面,`addAttrs` 方法会给数据添加几个属性,`treeTotable` 会对数组扁平化。这些操作都不会破坏源数据,只是会新增属性。 | ||||
|  | ||||
| ## Props 说明 | ||||
|  | ||||
| |    Attribute     | Description                        |  Type   | Default  | | ||||
| | :--------------: | :--------------------------------- | :-----: | :------: | | ||||
| |       data       | 原始展示数据                       |  Array  |    []    | | ||||
| |     columns      | 列属性                             |  Array  |    []    | | ||||
| | defaultExpandAll | 默认是否全部展开                   | Boolean |  false   | | ||||
| | defaultChildren  | 指定子树为节点对象的某个属性值     | String  | children |  | | ||||
| |      indent      | 相邻级节点间的水平缩进,单位为像素 | Number  |    50    | | ||||
|  | ||||
| > 任何 `el-table` 的属性都支持,例如`border`、`fit`、`size`或者`@select`、`@cell-click`等方法。详情属性见`el-table`文档。 | ||||
|  | ||||
| --- | ||||
|  | ||||
| ### 代码示例 | ||||
|  | ||||
| ```html | ||||
| <tree-table :data="data" :columns="columns" border> | ||||
| ``` | ||||
|  | ||||
| #### data(**必填**) | ||||
|  | ||||
| ```js | ||||
| const data = [ | ||||
|   { | ||||
|     name:'1' | ||||
|     children: [ | ||||
|       { | ||||
|         name: '1-1' | ||||
|       }, | ||||
|       { | ||||
|         name: '1-2' | ||||
|       } | ||||
|     ] | ||||
|   }, | ||||
|   { | ||||
|     name: `2` | ||||
|   } | ||||
| ] | ||||
| ``` | ||||
|  | ||||
| #### columns(**必填**) | ||||
|  | ||||
| - label: 显示在表头的文字 | ||||
| - key: 对应 data 的 key。treeTable 将显示相应的 value | ||||
| - expand: `true` or `false`。若为 true,则在该列显示展开收起图标 | ||||
| - checkbox: `true` or `false`。若为 true,则在该列显示`checkbox` | ||||
| - width: 每列的宽度,为一个数字(可选)。例如`200` | ||||
| - align: 对齐方式 `left/center/right` | ||||
| - header-align: 表头对齐方式 `left/center/right` | ||||
|  | ||||
| ```javascript | ||||
| const columns = [ | ||||
|   { | ||||
|     label: 'Checkbox', | ||||
|     checkbox: true | ||||
|   }, | ||||
|   { | ||||
|     label: '', | ||||
|     key: 'id', | ||||
|     expand: true | ||||
|   }, | ||||
|   { | ||||
|     label: 'Event', | ||||
|     key: 'event', | ||||
|     width: 200, | ||||
|     align: 'left' | ||||
|   }, | ||||
|   { | ||||
|     label: 'Scope', | ||||
|     key: 'scope' | ||||
|   } | ||||
| ] | ||||
| ``` | ||||
|  | ||||
| > 树表组件将会根据 columns 的 key 属性生成具名插槽,如果你需要对列数据进行自定义,通过插槽即可实现 | ||||
|  | ||||
| ```html | ||||
| <template slot="your key" slot-scope="{scope}"> | ||||
|   <el-tag>level: {{ scope.row._level }}</el-tag> | ||||
|   <el-tag>expand: {{ scope.row._expand }}</el-tag> | ||||
|   <el-tag>select: {{ scope.row._select }}</el-tag> | ||||
| </template> | ||||
| ``` | ||||
|  | ||||
| ## Events | ||||
|  | ||||
| 目前提供了几个方法,不过只是`beta`版本,之后很可能会修改。 | ||||
|  | ||||
| ```js | ||||
| this.$refs.TreeTable.addChild(row, data) //添加子元素 | ||||
| this.$refs.TreeTable.addBrother(row, data) //添加兄弟元素 | ||||
| this.$refs.TreeTable.delete(row) //删除该元素 | ||||
| ``` | ||||
|  | ||||
| ## 其他 | ||||
|  | ||||
| 如果有其他的需求,请参考[el-table](http://element-cn.eleme.io/#/en-US/component/table)的 api 自行修改 index.vue | ||||
|  | ||||
| # English | ||||
|  | ||||
| ## Brief | ||||
|  | ||||
| This component only provides a solution for creating `TreeTable`. It is based on the `element-ui` table component. It uses the `row-style` method of `el-table` to determine whether the element needs to be hidden or displayed. | ||||
|  | ||||
| And this component makes full use of the features of the `vue` slot to make it user-friendly. | ||||
|  | ||||
| In `evel.js`, the `addAttrs` method adds several properties to the data, and `treeTotable` flattens the array. None of these operations will destroy the source data, just add properties. | ||||
|  | ||||
| ## Props | ||||
|  | ||||
| |    Attribute     | Description                                                  |  Type   | Default  | | ||||
| | :--------------: | :----------------------------------------------------------- | :-----: | :------: | | ||||
| |       data       | original display data                                        |  Array  |    []    | | ||||
| |     columns      | column attribute                                             |  Array  |    []    | | ||||
| | defaultExpandAll | whether to expand all nodes by default                       | Boolean |  false   | | ||||
| | defaultChildren  | specify which node object is used as the node's subtree      | String  | children |  | | ||||
| |      indent      | horizontal indentation of nodes in adjacent levels in pixels | Number  |    50    | | ||||
|  | ||||
| > Any of the `el-table` properties are supported, such as `border`, `fit`, `size` or `@select`, `@cell-click`. See the ʻel-table` documentation for details. | ||||
|  | ||||
| --- | ||||
|  | ||||
| ### Example | ||||
|  | ||||
| ```html | ||||
| <tree-table :data="data" :columns="columns" border> | ||||
| ``` | ||||
|  | ||||
| #### data(**Required**) | ||||
|  | ||||
| ```js | ||||
| const data = [ | ||||
|   { | ||||
|     name:'1' | ||||
|     children: [ | ||||
|       { | ||||
|         name: '1-1' | ||||
|       }, | ||||
|       { | ||||
|         name: '1-2' | ||||
|       } | ||||
|     ] | ||||
|   }, | ||||
|   { | ||||
|     name: `2` | ||||
|   } | ||||
| ] | ||||
| ``` | ||||
|  | ||||
| #### columns(**Required**) | ||||
|  | ||||
| - label: text displayed in the header | ||||
| - key: data.key will show in column | ||||
| - expand: `true` or `false` | ||||
| - checkbox: `true` or `false` | ||||
| - width: column width 。such as `200` | ||||
| - align: alignment `left/center/right` | ||||
| - header-align: alignment of the table header `left/center/right` | ||||
|  | ||||
| ```javascript | ||||
| const columns = [ | ||||
|   { | ||||
|     label: 'Checkbox', | ||||
|     checkbox: true | ||||
|   }, | ||||
|   { | ||||
|     label: '', | ||||
|     key: 'id', | ||||
|     expand: true | ||||
|   }, | ||||
|   { | ||||
|     label: 'Event', | ||||
|     key: 'event', | ||||
|     width: 200, | ||||
|     align: 'left' | ||||
|   }, | ||||
|   { | ||||
|     label: 'Scope', | ||||
|     key: 'scope' | ||||
|   } | ||||
| ] | ||||
| ``` | ||||
|  | ||||
| > The tree table component will generate a named slot based on the key property of columns. If you need to customize the column data, you can do it through the slot. | ||||
|  | ||||
| ```html | ||||
| <template slot="your key" slot-scope="{scope}"> | ||||
|   <el-tag>level: {{ scope.row._level }}</el-tag> | ||||
|   <el-tag>expand: {{ scope.row._expand }}</el-tag> | ||||
|   <el-tag>select: {{ scope.row._select }}</el-tag> | ||||
| </template> | ||||
| ``` | ||||
|  | ||||
| ## Events | ||||
|  | ||||
| Several methods are currently available, but only the `beta` version, which is likely to be modified later. | ||||
|  | ||||
| ```js | ||||
| this.$refs.TreeTable.addChild(row, data) //Add child elements | ||||
| this.$refs.TreeTable.addBrother(row, data) //Add a sibling element | ||||
| this.$refs.TreeTable.delete(row) //Delete the element | ||||
| ``` | ||||
|  | ||||
| ## Other | ||||
|  | ||||
| If you have other requirements, please refer to the [el-table](http://element-cn.eleme.io/#/en-US/component/table) api to modify the index.vue | ||||
| @@ -1,99 +0,0 @@ | ||||
| ## 写在前面 | ||||
|  | ||||
| 此组件仅提供一个创建 TreeTable 的解决思路,本组件充分利用 vue 插槽的特性,方便用户自定义 | ||||
|  | ||||
| evel.js 里面 `addAttrs` 方法会给数据添加几个属性,treeTotable 会对数组扁平化。这些操作都不会破坏源数据,只是会新增属性。 | ||||
|  | ||||
| 调用 addAttrs 后,因\_\_parent 属性,会造成数据循环引用,使用 JSON.stringify()报错,所以转成 JSON 之前需要清除\_\_parent 属性。 | ||||
|  | ||||
| ## prop 说明 | ||||
|  | ||||
| - data(原始数据,要求是一个数组或者对象) | ||||
| - columns(列属性,要求是一个数组) | ||||
| - renderContent(数组扁平化方法(可选)) | ||||
| - defaultExpandAll(默认是否全部展开,默认全部展开) | ||||
| - defaultChildren(子元素名,默认为 children) | ||||
| - spreadOffset(扩展符号的偏移量,默认为 50px) | ||||
| - checkboxOffset(复选框的偏移量,默认为 50px) | ||||
|  | ||||
| --- | ||||
|  | ||||
| ### 代码示例 | ||||
|  | ||||
| - 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 | ||||
|      }] | ||||
|    } | ||||
| ``` | ||||
|  | ||||
| - columns | ||||
|  | ||||
| 1. label: 显示在表头的文字 | ||||
| 2. key: 对应 data 的 key。treeTable 将显示相应的 value | ||||
| 3. width: 每列的宽度,为一个数字(可选) | ||||
|  | ||||
| 树表组件将会根据 columns 的 key 属性生成具名插槽,如果你需要对列数据进行自定义,通过插槽即可实现 | ||||
|  | ||||
| ```javascript | ||||
| const columns = [ | ||||
|   // 建议第一列做展开收缩操作 | ||||
|   { label: '', key: '__spread', width: '200' }, | ||||
|   // 如果添加复选框 | ||||
|   { label: '', key: '__checkbox', width: '200' }, | ||||
|   { | ||||
|     label: string, | ||||
|     key: string, | ||||
|     width: number | ||||
|   }, | ||||
|   { | ||||
|     label: string, | ||||
|     key: string, | ||||
|     width: number | ||||
|   } | ||||
| ] | ||||
| ``` | ||||
|  | ||||
| #### renderContent | ||||
|  | ||||
| 解析函数,function,非必须 | ||||
|  | ||||
| 如果不提供,将使用默认的[evalFunc](./eval.js) | ||||
|  | ||||
| 如果提供了 evalFunc,那么会用提供的 evalFunc 去解析 data,并返回 treeTable 渲染所需要的值。 | ||||
|  | ||||
| ## 其他 | ||||
|  | ||||
| 如果有其他的需求,请参考[el-table](http://element-cn.eleme.io/#/en-US/component/table)的 api 自行修改 index.vue | ||||
							
								
								
									
										1
									
								
								src/icons/svg/tree-table.svg
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								src/icons/svg/tree-table.svg
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1 @@ | ||||
| <svg width="128" height="128" xmlns="http://www.w3.org/2000/svg"><path d="M44.8 0h79.543C126.78 0 128 1.422 128 4.267v23.466c0 2.845-1.219 4.267-3.657 4.267H44.8c-2.438 0-3.657-1.422-3.657-4.267V4.267C41.143 1.422 42.362 0 44.8 0zm22.857 48h56.686c2.438 0 3.657 1.422 3.657 4.267v23.466c0 2.845-1.219 4.267-3.657 4.267H67.657C65.22 80 64 78.578 64 75.733V52.267C64 49.422 65.219 48 67.657 48zm0 48h56.686c2.438 0 3.657 1.422 3.657 4.267v23.466c0 2.845-1.219 4.267-3.657 4.267H67.657C65.22 128 64 126.578 64 123.733v-23.466C64 97.422 65.219 96 67.657 96zM50.286 68.267c2.02 0 3.657-1.91 3.657-4.267 0-2.356-1.638-4.267-3.657-4.267H17.37V32h6.4c2.02 0 3.658-1.91 3.658-4.267V4.267C27.429 1.91 25.79 0 23.77 0H3.657C1.637 0 0 1.91 0 4.267v23.466C0 30.09 1.637 32 3.657 32h6.4v80c0 2.356 1.638 4.267 3.657 4.267h36.572c2.02 0 3.657-1.91 3.657-4.267 0-2.356-1.638-4.267-3.657-4.267H17.37V68.267h32.915z"/></svg> | ||||
| After Width: | Height: | Size: 906 B | 
| @@ -10,6 +10,7 @@ import Layout from '@/views/layout/Layout' | ||||
| import componentsRouter from './modules/components' | ||||
| import chartsRouter from './modules/charts' | ||||
| import tableRouter from './modules/table' | ||||
| import treeTableRouter from './modules/tree-table' | ||||
| import nestedRouter from './modules/nested' | ||||
|  | ||||
| /** note: sub-menu only appear when children.length>=1 | ||||
| @@ -162,6 +163,7 @@ export const asyncRouterMap = [ | ||||
|   chartsRouter, | ||||
|   nestedRouter, | ||||
|   tableRouter, | ||||
|   treeTableRouter, | ||||
|  | ||||
|   { | ||||
|     path: '/example', | ||||
|   | ||||
| @@ -30,18 +30,6 @@ const tableRouter = { | ||||
|       name: 'InlineEditTable', | ||||
|       meta: { title: 'inlineEditTable' } | ||||
|     }, | ||||
|     { | ||||
|       path: 'tree-table', | ||||
|       component: () => import('@/views/table/treeTable/treeTable'), | ||||
|       name: 'TreeTableDemo', | ||||
|       meta: { title: 'treeTable' } | ||||
|     }, | ||||
|     { | ||||
|       path: 'custom-tree-table', | ||||
|       component: () => import('@/views/table/treeTable/customTreeTable'), | ||||
|       name: 'CustomTreeTableDemo', | ||||
|       meta: { title: 'customTreeTable' } | ||||
|     }, | ||||
|     { | ||||
|       path: 'complex-table', | ||||
|       component: () => import('@/views/table/complexTable'), | ||||
|   | ||||
							
								
								
									
										29
									
								
								src/router/modules/tree-table.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										29
									
								
								src/router/modules/tree-table.js
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,29 @@ | ||||
| /** When your routing table is too long, you can split it into small modules**/ | ||||
|  | ||||
| import Layout from '@/views/layout/Layout' | ||||
|  | ||||
| const treeTableRouter = { | ||||
|   path: '/tree-table', | ||||
|   component: Layout, | ||||
|   redirect: '/table/complex-table', | ||||
|   name: 'TreeTable', | ||||
|   meta: { | ||||
|     title: 'treeTable', | ||||
|     icon: 'tree-table' | ||||
|   }, | ||||
|   children: [ | ||||
|     { | ||||
|       path: 'index', | ||||
|       component: () => import('@/views/tree-table/index'), | ||||
|       name: 'TreeTableDemo', | ||||
|       meta: { title: 'treeTable' } | ||||
|     }, | ||||
|     { | ||||
|       path: 'custom', | ||||
|       component: () => import('@/views/tree-table/custom'), | ||||
|       name: 'CustomTreeTableDemo', | ||||
|       meta: { title: 'customTreeTable' } | ||||
|     } | ||||
|   ] | ||||
| } | ||||
| export default treeTableRouter | ||||
| @@ -1,4 +1,4 @@ | ||||
| export const data = [ | ||||
| const data = [ | ||||
|   { | ||||
|     name: '1', | ||||
|     timeLine: 100, | ||||
| @@ -47,3 +47,5 @@ export const data = [ | ||||
|   } | ||||
| ] | ||||
| 
 | ||||
| export default data | ||||
| 
 | ||||
| @@ -1,12 +1,10 @@ | ||||
| <template> | ||||
|   <div> | ||||
|     <div class="app-container"> | ||||
|       <el-tag style="margin-bottom:20px;"> | ||||
|         <a | ||||
|           href="https://github.com/PanJiaChen/vue-element-admin/tree/master/src/components/TreeTable" | ||||
|           target="_blank" | ||||
|         >Documentation</a> | ||||
|       </el-tag> | ||||
| 
 | ||||
|       <el-button type="primary" size="small" style="margin:0 0 20px 0;"> | ||||
|         <a href="https://github.com/PanJiaChen/vue-element-admin/tree/master/src/components/TreeTable" target="_blank">Documentation</a> | ||||
|       </el-button> | ||||
| 
 | ||||
|       <tree-table | ||||
|         ref="TreeTable" | ||||
| @@ -85,9 +83,8 @@ | ||||
| </template> | ||||
| 
 | ||||
| <script> | ||||
| 
 | ||||
| import TreeTable from '@/components/TreeTable' | ||||
| import { data } from './data.js' | ||||
| import data from './data.js' | ||||
| 
 | ||||
| export default { | ||||
|   components: { TreeTable }, | ||||
| @@ -145,11 +142,11 @@ export default { | ||||
|     }, | ||||
|     addMenuItem(row, type) { | ||||
|       if (type === 'children') { | ||||
|         this.$refs.TreeTable.addChild(row, { name: 'child' }) | ||||
|         this.$refs.TreeTable.addChild(row, { name: 'child', timeLine: this.randomNum() }) | ||||
|       } | ||||
| 
 | ||||
|       if (type === 'brother') { | ||||
|         this.$refs.TreeTable.addBrother(row, { name: 'brother' }) | ||||
|         this.$refs.TreeTable.addBrother(row, { name: 'brother', timeLine: this.randomNum() }) | ||||
|       } | ||||
|     }, | ||||
|     deleteItem(row) { | ||||
| @@ -157,6 +154,12 @@ export default { | ||||
|     }, | ||||
|     selectChange(val) { | ||||
|       console.log(val) | ||||
|     }, | ||||
|     randomNum() { | ||||
|       // return 1~100 | ||||
|       const max = 100 | ||||
|       const min = 1 | ||||
|       return Math.floor(Math.random() * (max - min + 1) + min) | ||||
|     } | ||||
|   } | ||||
| } | ||||
							
								
								
									
										80
									
								
								src/views/tree-table/data.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										80
									
								
								src/views/tree-table/data.js
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,80 @@ | ||||
|  | ||||
| const data = [ | ||||
|   { | ||||
|     id: 0, | ||||
|     event: 'Event-0', | ||||
|     timeLine: 50 | ||||
|   }, | ||||
|   { | ||||
|     id: 1, | ||||
|     event: 'Event-1', | ||||
|     timeLine: 100, | ||||
|     children: [ | ||||
|       { | ||||
|         id: 2, | ||||
|         event: 'Event-2', | ||||
|         timeLine: 10 | ||||
|  | ||||
|       }, | ||||
|       { | ||||
|         id: 3, | ||||
|         event: 'Event-3', | ||||
|         timeLine: 90, | ||||
|         children: [ | ||||
|           { | ||||
|             id: 4, | ||||
|             event: 'Event-4', | ||||
|             timeLine: 5 | ||||
|  | ||||
|           }, | ||||
|           { | ||||
|             id: 5, | ||||
|             event: 'Event-5', | ||||
|             timeLine: 10 | ||||
|  | ||||
|           }, | ||||
|           { | ||||
|             id: 6, | ||||
|             event: 'Event-6', | ||||
|             timeLine: 75, | ||||
|  | ||||
|             children: [ | ||||
|               { | ||||
|                 id: 7, | ||||
|                 event: 'Event-7', | ||||
|                 timeLine: 50, | ||||
|  | ||||
|                 children: [ | ||||
|                   { | ||||
|                     id: 71, | ||||
|                     event: 'Event-7-1', | ||||
|                     timeLine: 25 | ||||
|  | ||||
|                   }, | ||||
|                   { | ||||
|                     id: 72, | ||||
|                     event: 'Event-7-2', | ||||
|                     timeLine: 5 | ||||
|  | ||||
|                   }, | ||||
|                   { | ||||
|                     id: 73, | ||||
|                     event: 'Event-7-3', | ||||
|                     timeLine: 20 | ||||
|                   } | ||||
|                 ] | ||||
|               }, | ||||
|               { | ||||
|                 id: 8, | ||||
|                 event: 'Event-8', | ||||
|                 timeLine: 25 | ||||
|               } | ||||
|             ] | ||||
|           } | ||||
|         ] | ||||
|       } | ||||
|     ] | ||||
|   } | ||||
| ] | ||||
|  | ||||
| export default data | ||||
| @@ -3,7 +3,7 @@ | ||||
| 
 | ||||
|     <div style="margin-bottom:20px;"> | ||||
| 
 | ||||
|       <el-button type="primary" class="option-item"> | ||||
|       <el-button type="primary" size="small" class="option-item"> | ||||
|         <a href="https://github.com/PanJiaChen/vue-element-admin/tree/master/src/components/TreeTable" target="_blank">Documentation</a> | ||||
|       </el-button> | ||||
| 
 | ||||
| @@ -42,8 +42,8 @@ | ||||
| </template> | ||||
| 
 | ||||
| <script> | ||||
| 
 | ||||
| import treeTable from '@/components/TreeTable' | ||||
| import data from './data' | ||||
| 
 | ||||
| export default { | ||||
|   name: 'TreeTableDemo', | ||||
| @@ -78,83 +78,7 @@ export default { | ||||
|           key: 'operation' | ||||
|         } | ||||
|       ], | ||||
|       data: [ | ||||
|         { | ||||
|           id: 0, | ||||
|           event: 'Event-0', | ||||
|           timeLine: 50 | ||||
|         }, | ||||
|         { | ||||
|           id: 1, | ||||
|           event: 'Event-1', | ||||
|           timeLine: 100, | ||||
|           children: [ | ||||
|             { | ||||
|               id: 2, | ||||
|               event: 'Event-2', | ||||
|               timeLine: 10 | ||||
| 
 | ||||
|             }, | ||||
|             { | ||||
|               id: 3, | ||||
|               event: 'Event-3', | ||||
|               timeLine: 90, | ||||
|               children: [ | ||||
|                 { | ||||
|                   id: 4, | ||||
|                   event: 'Event-4', | ||||
|                   timeLine: 5 | ||||
| 
 | ||||
|                 }, | ||||
|                 { | ||||
|                   id: 5, | ||||
|                   event: 'Event-5', | ||||
|                   timeLine: 10 | ||||
| 
 | ||||
|                 }, | ||||
|                 { | ||||
|                   id: 6, | ||||
|                   event: 'Event-6', | ||||
|                   timeLine: 75, | ||||
| 
 | ||||
|                   children: [ | ||||
|                     { | ||||
|                       id: 7, | ||||
|                       event: 'Event-7', | ||||
|                       timeLine: 50, | ||||
| 
 | ||||
|                       children: [ | ||||
|                         { | ||||
|                           id: 71, | ||||
|                           event: 'Event-7-1', | ||||
|                           timeLine: 25 | ||||
| 
 | ||||
|                         }, | ||||
|                         { | ||||
|                           id: 72, | ||||
|                           event: 'Event-7-2', | ||||
|                           timeLine: 5 | ||||
| 
 | ||||
|                         }, | ||||
|                         { | ||||
|                           id: 73, | ||||
|                           event: 'Event-7-3', | ||||
|                           timeLine: 20 | ||||
|                         } | ||||
|                       ] | ||||
|                     }, | ||||
|                     { | ||||
|                       id: 8, | ||||
|                       event: 'Event-8', | ||||
|                       timeLine: 25 | ||||
|                     } | ||||
|                   ] | ||||
|                 } | ||||
|               ] | ||||
|             } | ||||
|           ] | ||||
|         } | ||||
|       ] | ||||
|       data: data | ||||
|     } | ||||
|   }, | ||||
|   watch: { | ||||
| @@ -176,6 +100,20 @@ export default { | ||||
|     }, | ||||
|     click(scope) { | ||||
|       console.log(scope) | ||||
| 
 | ||||
|       const row = scope.row | ||||
|       const message = Object.keys(row) | ||||
|         .map(i => { | ||||
|           return `<p>${i}: ${row[i]}</p>` | ||||
|         }) | ||||
|         .join('') | ||||
| 
 | ||||
|       this.$notify({ | ||||
|         title: 'Success', | ||||
|         dangerouslyUseHTMLString: true, | ||||
|         message: message, | ||||
|         type: 'success' | ||||
|       }) | ||||
|     } | ||||
|   } | ||||
| } | ||||
		Reference in New Issue
	
	Block a user