当前位置:   article > 正文

element实现角色管理页面_elementui角色管理

elementui角色管理

用的element,Tree 树形控件来实现的

  1. <template>
  2. <div class="p-t-20">
  3. <div class="table-bg">
  4. <Title title="角色名称">
  5. <span>{{role.roleName}}</span>
  6. </Title>
  7. <div class="menu-list">
  8. <el-tree ref="tree" :data="data" :props="props" node-key="menuId" show-checkbox check-on-click-node :expand-on-click-node="false"></el-tree>
  9. </div>
  10. </div>
  11. <GlobalFootButtons>
  12. <el-button @click="$router.go(-1)">取 消</el-button>
  13. <el-button class="m-l-20" type="primary" @click="saveClick()">保存</el-button>
  14. </GlobalFootButtons>
  15. </div>
  16. </template>
  17. <script>
  18. import { getMenusByRoleId, postUpdateRoleDetail, postQueryRoleById } from '@/axios/systemManage'
  19. export default {
  20. data () {
  21. return {
  22. user: null,
  23. role: null,
  24. data: [],
  25. props: {
  26. label: 'menuName',
  27. children: 'children'
  28. },
  29. postCreateRoleData: {} // 新增、编辑角色表单
  30. }
  31. },
  32. created () {
  33. this.user = JSON.parse(window.localStorage.getItem('userInfo'))
  34. this.role = JSON.parse(window.localStorage.getItem('roleItem'))
  35. this.getMenuTreeList()
  36. },
  37. methods: {
  38. // 获取列表数据
  39. async getMenuTreeList () {
  40. const res = await getMenusByRoleId(this.user.roleId)
  41. if (res.code === 200) {
  42. // 处理名称中带括号的内容
  43. res.data.map(item => {
  44. item.menuName = item.menuName.split('(')[0]
  45. item.children.map(i => {
  46. i.menuName = i.menuName.split('(')[0]
  47. })
  48. })
  49. this.data = res.data
  50. this.getQueryRoleById()
  51. }
  52. },
  53. // 回显勾选的数据
  54. async getQueryRoleById () {
  55. const roleItem = JSON.parse(localStorage.getItem('roleItem'))
  56. const res = await postQueryRoleById({ roleId: roleItem.roleId })
  57. if (res.code === 200) {
  58. this.postCreateRoleData = res.data
  59. this.$nextTick(() => {
  60. const tree = this.$refs.tree
  61. // 选中树
  62. if (res.data.menuIds && res.data.menuIds.length > 0) {
  63. tree.setCheckedKeys(res.data.menuIds)
  64. }
  65. // 设置展开所有行
  66. const nodesMap = tree.store.nodesMap
  67. const keys = Object.keys(nodesMap)
  68. keys.forEach(key => {
  69. nodesMap[key].expanded = true
  70. })
  71. })
  72. }
  73. },
  74. // 保存
  75. async saveClick () {
  76. this.postCreateRoleData.role = JSON.parse(localStorage.getItem('roleItem'))
  77. this.postCreateRoleData.operationStatus = 1 // 编辑权限时固定传1 角色基本信息传0
  78. const halfCheckKeys = this.$refs.tree.getHalfCheckedKeys()
  79. const checkKeys = this.$refs.tree.getCheckedKeys()
  80. this.postCreateRoleData.menuIds = halfCheckKeys.concat(checkKeys)
  81. const res = await postUpdateRoleDetail(this.postCreateRoleData)
  82. if (res.code === 200) {
  83. this.$message.success('保存成功!')
  84. this.$router.go(-1)
  85. }
  86. }
  87. }
  88. }
  89. </script>
  90. <style lang="less" scoped>
  91. .table-bg {
  92. min-height: 88vh;
  93. padding: 20px;
  94. margin-bottom: 100px;
  95. ::v-deep .title {
  96. font-size: 16px;
  97. font-weight: bold;
  98. color: #333;
  99. span {
  100. font-size: 14px;
  101. font-weight: normal;
  102. }
  103. }
  104. .menu-list {
  105. ::v-deep .el-tree {
  106. border-top: 1px solid #ebeef5;
  107. border-left: 1px solid #ebeef5;
  108. border-right: 1px solid #ebeef5;
  109. .el-tree-node__expand-icon {
  110. display: none !important;
  111. }
  112. .el-tree-node {
  113. &.is-expanded,
  114. &.is-current,
  115. &.is-focusable {
  116. background-color: transparent !important;
  117. }
  118. .el-tree-node__content {
  119. background-color: transparent !important;
  120. &:hover {
  121. background-color: transparent !important;
  122. }
  123. }
  124. }
  125. > .el-tree-node {
  126. display: flex;
  127. align-items: center;
  128. border-bottom: 1px solid #ebeef5;
  129. position: relative;
  130. > .el-tree-node__content {
  131. width: 300px;
  132. height: 100%;
  133. padding-left: 20px !important;
  134. }
  135. .el-tree-node__children {
  136. position: relative;
  137. &::after {
  138. content: ' ';
  139. display: block;
  140. width: 1px;
  141. height: 100%;
  142. border-left: 1px solid #ebeef5;
  143. position: absolute;
  144. left: 0px;
  145. top: 0px;
  146. }
  147. .el-tree-node {
  148. width: 350px;
  149. padding: 10px 0px;
  150. }
  151. }
  152. }
  153. }
  154. }
  155. }
  156. </style>

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小惠珠哦/article/detail/903301
推荐阅读
相关标签
  

闽ICP备14008679号