123 lines
		
	
	
		
			3.0 KiB
		
	
	
	
		
			Plaintext
		
	
	
			
		
		
	
	
			123 lines
		
	
	
		
			3.0 KiB
		
	
	
	
		
			Plaintext
		
	
	
| <template>
 | |
|   <div class="role-menu-wrapper">
 | |
|     <div class="left">
 | |
|       <el-tree
 | |
|         ref="menuTree"
 | |
|         v-loading="loading"
 | |
|         :data="treeData"
 | |
|         show-checkbox
 | |
|         node-key="Id"
 | |
|         highlight-current
 | |
|         :props="defaultProps"
 | |
|         :expand-on-click-node="false"
 | |
|         :default-expanded-keys="expandedKeys"
 | |
|         @check="handleCheck"
 | |
|         @node-click="handleNodeClick"
 | |
|       />
 | |
|     </div>
 | |
|     <div class="right">
 | |
|       <RoleFunction ref="roleFunction" />
 | |
|     </div>
 | |
| 
 | |
|   </div>
 | |
| </template>
 | |
| <script>
 | |
| import { getRoleMenuFunction, updateRoleMenu } from '@/api/admin'
 | |
| import RoleFunction from './RoleFunction'
 | |
| export default {
 | |
|   name: 'RoleMenu',
 | |
|   components: { RoleFunction },
 | |
|   data() {
 | |
|     return {
 | |
|       defaultProps: {
 | |
|         label: 'MenuName',
 | |
|         children: 'Children'
 | |
|       },
 | |
|       treeData: [],
 | |
|       loading: false,
 | |
|       expandedKeys: []
 | |
|     }
 | |
|   },
 | |
|   methods: {
 | |
|     getMenus(roleId) {
 | |
|       this.roleId = roleId
 | |
|       this.expandedKeys = []
 | |
|       this.treeData = []
 | |
|       this.loading = true
 | |
|       this.$refs['roleFunction'].resetTable()
 | |
|       getRoleMenuFunction(roleId)
 | |
|         .then((res) => {
 | |
|           this.loading = false
 | |
|           this.treeData = res.Result
 | |
|           this.expandedKeys.push(res.Result[0].Id)
 | |
|           this.selectedArr = []
 | |
|           this.$nextTick(function() {
 | |
|             const arr = this.setNodeChecked(this.treeData)
 | |
|             arr.forEach(item => {
 | |
|               this.$refs.menuTree.setChecked(item, true, false)
 | |
|               this.expandedKeys.push(item)
 | |
|             })
 | |
|           })
 | |
|         })
 | |
|         .catch(() => {
 | |
|           this.loading = false
 | |
|         })
 | |
|     },
 | |
|     handleCheck(data, currentChecked) {
 | |
|       const arrID = []
 | |
|       const { checkedNodes, halfCheckedNodes } = currentChecked
 | |
|       halfCheckedNodes.forEach((item) => {
 | |
|         arrID.push(item.Id)
 | |
|       })
 | |
|       checkedNodes.forEach((item) => {
 | |
|         arrID.push(item.Id)
 | |
|       })
 | |
|       const param = { roleId: this.roleId, menuFunctionId: arrID }
 | |
|       updateRoleMenu(param).then((res) => {
 | |
|         if (res.IsSuccess) {
 | |
|           this.$message.success('Updated successfully')
 | |
|         }
 | |
|       })
 | |
|     },
 | |
|     handleNodeClick(data) {
 | |
|       this.$refs['roleFunction'].getFunctions(this.roleId, data.Id)
 | |
|     },
 | |
|     setNodeChecked(arr) {
 | |
|       for (var i in arr) {
 | |
|         if (arr[i].IsSelect) {
 | |
|           this.selectedArr.push(arr[i].Id)
 | |
|         }
 | |
|         if (arr[i].Children && arr[i].Children.length) {
 | |
|           this.setNodeChecked(arr[i].Children)
 | |
|         }
 | |
|       }
 | |
|       return this.selectedArr
 | |
|     }
 | |
|   }
 | |
| }
 | |
| </script>
 | |
| <style lang="scss" scoped>
 | |
|   .role-menu-wrapper{
 | |
|     height: 100%;
 | |
|     display: flex;
 | |
|     .right{
 | |
|       width: 3;
 | |
|       flex-grow: 6;
 | |
|       overflow-y: auto;
 | |
|       border-right: 1px solid #ccc;
 | |
|     }
 | |
|     .left{
 | |
|       width: 0;
 | |
|       flex-grow: 7;
 | |
|       overflow-y: auto;
 | |
|       thead {
 | |
|         .el-table-column--selection {
 | |
|           .cell {
 | |
|             display: none;
 | |
|           }
 | |
|         }
 | |
|       }
 | |
|     }
 | |
|   }
 | |
| </style>
 |