| <template> | 
|   <div class="com-el-tree"> | 
|   | 
|       <div class="m-title"><i class="el-icon-warning-outline"></i>角色列表</div> | 
|   | 
|     <el-scrollbar style="height: 100%; width: 200px" class="el-role-tree"> | 
|       <el-tree | 
|         :data="tree" | 
|         @node-click="nodeClick" | 
|         node-key="id" | 
|         :default-expanded-keys="openKeys" | 
|         :expand-on-click-node="false" | 
|         style="padding: 5px 0; margin-right: 2px" | 
|       > | 
|         <template #default="{ node, data }"> | 
|           <div class="action-group"> | 
|             <div | 
|               class="action-text" | 
|               :class="{ | 
|                 actived: data.id == selectId, | 
|                 'node-text': data.parentId !== 0, | 
|               }" | 
|               :style="{ width: (4 - data.lv) * 18 + 150 + 'px' }" | 
|             > | 
|               <Icon | 
|                 v-if="data.parentId !== 0" | 
|                 :type="data.id == selectId ? 'ios-paper' : 'ios-paper-outline'" | 
|               /> | 
|               {{ data.roleName }} | 
|             </div> | 
|           </div> | 
|         </template> | 
|       </el-tree> | 
|     </el-scrollbar> | 
|   </div> | 
| </template> | 
|   | 
| <script> | 
| export default { | 
|   props: { | 
|     // roles: { | 
|     //   type: Object, | 
|     //   default: () => { | 
|     //     return []; | 
|     //   } | 
|     // }, | 
|     onChange: { | 
|       type: Function, | 
|       default: (treeId) => {}, | 
|     }, | 
|   }, | 
|   data() { | 
|     return { | 
|       selectId: -1, | 
|       checked: false, | 
|       openKeys: [], | 
|       data: [], | 
|       tree: [], | 
|     }; | 
|   }, | 
|   created() { | 
|     this.load(); | 
|   }, | 
|   methods: { | 
|     load() { | 
|       this.http.post("/api/role/getUserChildRoles", {}, true).then((result) => { | 
|         if (!result.status) return this.$message.error(result.message); | 
|         this.data.splice(0); | 
|         this.data = result.data; | 
|         this.data.forEach((x) => { | 
|           if (x.parentId == 0) { | 
|             x.lv = 1; | 
|             x.children = []; | 
|             this.tree.push(x); | 
|             this.getTree(x.id, x); | 
|           } | 
|         }); | 
|         this.openKeys.push(this.tree[0].id); | 
|         this.selectId = this.openKeys[0]; | 
|         //默认加载第一个树形菜单下面的数据 | 
|   | 
|         //this.onChange(this.selectId); | 
|       }); | 
|     }, | 
|     getTree(id, data) { | 
|       this.data.forEach((x) => { | 
|         if (x.parentId == id) { | 
|           x.lv = data.lv + 1; | 
|           if (!data.children) data.children = []; | 
|           data.children.push(x); | 
|           this.getTree(x.id, x); | 
|         } | 
|       }); | 
|     }, | 
|     nodeClick(node, selected) { | 
|       //  console.log(node); | 
|       this.selectId = node.id; | 
|       //缓存当前选中的节点 | 
|       //  this.$store.getters.data().treeDemo1.treeId = node.id; | 
|       this.onChange(node); | 
|     }, | 
|   }, | 
| }; | 
| </script> | 
| <style lang="less" scoped> | 
| .com-el-tree { | 
|   //2020.06.03增加左侧tree固定宽度 | 
|   width: 200px; | 
|   display: flex; | 
|   flex-direction: column; | 
|   height: 100%; | 
|   border-radius: 3px; | 
|   background: white; | 
|   .el-role-tree { | 
|     flex: 1; | 
|     // border-right: 1px solid #eee; | 
|   } | 
|   .actived { | 
|   } | 
|   .action-text { | 
|     font-size: 14px; | 
|   } | 
| } | 
| .role-list { | 
|   color: white; | 
|   line-height: 40px; | 
|   padding: 0 13px; | 
|   font-size: 16px; | 
|   top: 2px; | 
|   width: 200px; | 
| } | 
| .m-title { | 
|   line-height: 30px; | 
|   font-size: 15px; | 
|   background: #66b1ff0f; | 
|   font-weight: bold; | 
|   padding: 6px 16px; | 
|   border-bottom: 1px solid #eee; | 
|   i { | 
|     padding-right: 5px; | 
|   } | 
| } | 
| .com-el-tree ::v-dee(.el-tree-node) { | 
|   padding: 3px 0; | 
| } | 
| .com-el-tree ::v-dee(.el-scrollbar .el-scrollbar__thumb) { | 
|   width: 0 !important; | 
| } | 
| </style> | 
| <style scoped> | 
|   | 
| </style> |