Element-ui tree组件自定义节点使用方法

工作上使用到element-ui tree 组件,主要功能是要实现节点拖拽和置顶,通过自定义内容方法(render-content)渲染树代码如下~

  1 <template>
  2   <div class="sortDiv">
  3     <el-tree :data="sortData" draggable node-key="id" ref="sortTree" default-expand-all :expand-on-click-node="false" :render-content="renderContent" :allow-drop="allowDrop">
  4     </el-tree>
  5     <el-button @click="getData">获取数据</el-button>
  6   </div>
  7 </template>
  8 <script>
  9 export default {
 10   name: ‘Sort‘,
 11   data() {
 12     return {
 13       sortData: [
 14         {
 15           id: 1,
 16           label: ‘一级 1‘,
 17           checkItem: true,
 18           children: [
 19             {
 20               id: 4,
 21               label: ‘二级 1-1‘,
 22               checkItem: false
 23             },
 24             {
 25               id: 9,
 26               label: ‘二级 1-2‘,
 27               checkItem: false
 28             },
 29             {
 30               id: 10,
 31               label: ‘二级 1-3‘,
 32               checkItem: false
 33             }
 34           ]
 35         },
 36         {
 37           id: 2,
 38           label: ‘一级 2‘,
 39           checkItem: true,
 40           children: [
 41             {
 42               id: 5,
 43               label: ‘二级 2-1‘,
 44               checkItem: true
 45             },
 46             {
 47               id: 6,
 48               label: ‘二级 2-2‘,
 49               checkItem: true
 50             }
 51           ]
 52         },
 53         {
 54           id: 3,
 55           label: ‘一级 3‘,
 56           checkItem: true,
 57           children: [
 58             {
 59               id: 7,
 60               label: ‘二级 3-1‘,
 61               checkItem: true
 62             },
 63             {
 64               id: 8,
 65               label: ‘二级 3-2‘,
 66               checkItem: false
 67             }
 68           ]
 69         }
 70       ]
 71     };
 72   },
 73   methods: {
 74     // 是否允许拖拽
 75     allowDrop (draggingNode, dropNode, type) {
 76       if (draggingNode.parent === dropNode.parent) {
 77         return type !== ‘inner‘
 78       }
 79       else return false
 80     },
 81     //获取数据
 82     getData () {
 83       let result = this.$refs[‘sortTree‘].data;
 84       let sortRulesMaps = [];
 85       result.forEach((element, index) => {
 86         let item = null;
 87         if (element.checkItem) {
 88           if (element.children && element.children.length > 0) {
 89             item = {
 90               orderIndex: index,
 91               sortField: element.label,
 92               rule: [‘OTHERS‘]
 93             };
 94             element.children.forEach(i => {
 95               if (i.checkItem) {
 96                 item.rule.push(i.label);
 97               }
 98             });
 99             item.rule = item.rule.join(‘_‘);
100           }
101         }
102         item && sortRulesMaps.push(item);
103       });
104     },
105     //同级置顶功能
106     toTop(node, data) {
107         let c = Object.assign({}, data);
108         if (node.parent.level === 0) {
109           this.sortData.unshift(c)
110         } else {
111           node.parent.data.children.unshift(c);
112         }
113         this.$refs[‘sortTree‘].remove(data.id);
114     },
115     changeNode(r, node, data) {
116       data.checkItem = r;
117     },
118     //自定义内容
119     renderContent(h, { node, data }) {
120       return (
121         <span class="custom-tree-node">
122           <span>{data.label}</span>
123           <span>
124             <el-checkbox
125               v-model={data.checkItem}
126               checked={data.checkItem}
127               on-change={r => this.changeNode(r, node, data)}
128             />
129             <el-button
130               size="mini"
131               type="text"
132               on-click={() => this.toTop(node, data)}
133               style="color:#707375;margin-left:10px"
134             >
135               <i class="fa fa-arrow-up">置顶</i>
136             </el-button>
137           </span>
138         </span>
139       );
140     }
141   }
142 };
143 </script>
144 <style lang="scss">
145 .sortDiv {
146   .el-icon-caret-right:before {
147     content: ‘\E604‘;
148   }
149 }
150 .custom-tree-node {
151   flex: 1;
152   display: flex;
153   align-items: center;
154   justify-content: space-between;
155   font-size: 14px;
156   padding-right: 8px;
157 }
158 </style>

原文地址:https://www.cnblogs.com/zningning/p/9657802.html

时间: 2024-08-30 09:33:55

Element-ui tree组件自定义节点使用方法的相关文章

关于Element UI tree组件 懒加载的更新操作

近期根据需求,要做一个懒加载的组织树,并且可以编辑组织树.但是编辑了之后无法进行实时更新. 一开始想到了很多解决方案,也在网上参考了很多方案,但是都又种种不足. 所以我去看了elementUI的tree组件的懒加载方法的源代码 Node.prototype.loadData = function loadData(callback) { var _this5 = this; var defaultProps = arguments.length > 1 && arguments[1]

element ui table组件自定义合计栏,后台给的数据

合计的数据是后台传的,所以用table组件自定义一行用来合计 <el-table border fit v-loading.body="listLoading" element-loading-text="拼命加载中" :data="getChannelData" style="width: 100%" :default-sort = "{prop: 'date', order: 'descending'}&q

ivew | element ui- 关于table组件自定义sortMethod排序不生效或错误问题处理

最近项目需求需要,需要对表格列进行自定义排序,用的是iview的组件,看了文档,table 排序这部分,但是没有给出相关例子.以为不难搞的,是不难搞,就是折腾了好一会... Iview table 排序 data () { return { columns5: [ { title: 'Date', key: 'date', sortable: true, }, { title: 'Name', key: 'name' }, { title: 'Age', key: 'age', sortable

Element UI分页组件prev-text和mext-text属性无效?

前情提要 /(ㄒoㄒ)/~~ 作为刚刚接触 Element 组件的人来说,看文档是第一步,但是当我想要修改分页组件里面的按钮时却遇到了问题. 文档中写到是需要给 prev-text 和 next-text 属性就可以将下图中划红线的小箭头修改成想要的文字,比如“上一页”和“下一页”. 于是我试了两种方式去使用这两个属性,都没有成功,分页组件“一动不动”,简直就是黑人问号脸! //第一种方法无效 <div class="block"> <el-pagination la

vue+element ui table组件封装,使用render渲染

后台管理经常会用到表格,一开始封装了一个常用的功能性表格,点击这里: 后来由于需求增加,在表格中还会用到switch,select,input等多种组件,每次都要在html中增加<el-table-column></el-table-column>, 维护起来相当麻烦,就想到了使用render渲染. 组件内部封装代码: <template> <el-table :data="tableData" size="medium"

Mini UI tree上万复杂节点加载缓慢处理设计

最直接的方式是设置tree顶级不展开,可以解决一定效率. expandOnLoad Boolean/Number 加载后是否展开.比如:true展开所有节点:0展开第一级节点.以此类推. 1. 解决问题描述 树加载慢,统计刷新慢.人员排序组织慢,前端DOM渲染慢. 2. Mini tree效果展示 3. Mini tree业务数据处理 树节点及下级人员汇总: 总人数.在线人数.离线人数,数据根据组织机构ID进行缓存REDIS. 拉加载人员节点数据:人员通过组织机构ID缓存到REDIS. 注:每点

element - ui tree

一行代码两行泪,没有外网真可怕!好久没写博客了,更新一把. 1 <template> 2 <div> 3 <el-tree :data="data" :props="defaultProps" @node-click="handleNodeClick"></el-tree> 4 5 </div> 6 </template> 7 8 <script> 9 expor

在使用element ui时 select组件获取label问题

最近在工作的时候需要实现多个条件联合查询,这个其实就是一条sql语句.但是,我们数据库中存储的是根据前端传来id的值所对应的值,而不是直接存的id,使用select组件时,却只能取到value值,无法作为后台查询的条件. 我们需要的是select 组件的label值,而不是看不见的value值. 首先,根据element ui select组件使用手册,给组件添加'change'方法 1 @change=changeValue 再根据Array 的 find方法找出对应的值即可. 1 chang

EasyUI之tree组件与treegrid组件

最近做了一个使用EasyUI的基于角色的权限分配系统,在这个过程中为了有更好的用户体验(也在网上找了挺多关于该系统的界面),先上我做的截图: 虽然,后台的逻辑上并不难,但是这个EasyUI的tree组件和treegrid组件,确实让我废了一大把力气>>好了废话不多说,开始正题: 一:tree组件 每个节点都具备以下属性: id:节点ID,对加载远程数据很重要. text:显示节点文本. state:节点状态,'open' 或 'closed',默认:'open'.如果为'closed'的时候,