permissionTree.vue 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138
  1. <template>
  2. <div v-loading="loading" element-loading-text="拼命加载中" element-loading-spinner="el-icon-loading" element-loading-background="rgba(0, 0, 0, 0.8)" class="publicPageTree">
  3. <div class="publicPageTree_search">
  4. <el-input size="small" placeholder="输入关键字进行过滤" clearable v-model="filterText"></el-input>
  5. </div>
  6. <div class="publicPageTree_tree">
  7. <el-scrollbar style="height: 100%" :horizontal="false">
  8. <el-tree class="filter-tree" :data="data" :props="defaultProps" node-key="applicationid" :default-expanded-keys="defaultKeys" :highlight-current="true" :filter-node-method="filterNode" ref="tree" @node-click="treeNodeClick" />
  9. </el-scrollbar>
  10. </div>
  11. </div>
  12. </template>
  13. <script>
  14. import { Query } from "@/api/webApi"
  15. import { listToTree } from '@/utils/validate'
  16. export default {
  17. name: 'PublicPageTree',
  18. props: {
  19. treeData: {
  20. type: Array,
  21. default: () => []
  22. },
  23. treeMap: {
  24. type: Object,
  25. default: () => new Object()
  26. },
  27. depMath: {
  28. type: Number | String,
  29. default: 0
  30. }
  31. },
  32. data () {
  33. return {
  34. loading: false,
  35. filterText: '',
  36. data: [],
  37. defaultProps: {
  38. children: 'children',
  39. label: 'appname'
  40. },
  41. defaultKeys: [-1],
  42. nodeKey: 'applicationid',
  43. msgCaps: [],
  44. dataKey: 'appname'
  45. }
  46. },
  47. watch: {
  48. filterText (val) {
  49. this.$refs.tree.filter(val);
  50. },
  51. treeData: {
  52. handler (arr) {
  53. if (arr.length) {
  54. this.pageInit(arr)
  55. }
  56. },
  57. deep: true,
  58. immediate: true
  59. },
  60. depMath: {
  61. handler (arr) {
  62. this.pageInit(arr)
  63. },
  64. deep: true
  65. }
  66. },
  67. methods: {
  68. filterNode (value, data) {
  69. if (!value) return true;
  70. return data[this.dataKey].indexOf(value) !== -1;
  71. },
  72. pageInit (arr) {
  73. const { serviceid, pagename } = arr[0]
  74. const defaultfilterTag = { 1: 1 }
  75. this.queryTreeData(defaultfilterTag, serviceid, pagename)
  76. },
  77. treeNodeClick (data) {
  78. this.$emit('treeNodeClick', data)
  79. },
  80. setUserTree (arr = []) {
  81. //1=用户 2=用户组
  82. if (!arr.length) return []
  83. const ndata = _.cloneDeep(arr)
  84. const ntree = listToTree(ndata, 'supergroupid', 'id')
  85. return ntree
  86. },
  87. async queryTreeData (defaultfilter, serviceid, pagename) {
  88. this.loading = true;
  89. const datacontent = { filter: defaultfilter }
  90. try {
  91. const { code, returnData } = await Query({
  92. serviceid,
  93. datacontent,
  94. event: '0',
  95. page: 1,
  96. size: 9999,
  97. });
  98. if (code == 0 && returnData?.length) {
  99. const name = '全部'
  100. // const treeMenu = this.setUserTree([...returnData])
  101. const treeObj = { serviceid: name, superiorid: name, children: [...returnData] }
  102. treeObj['appname'] = name
  103. treeObj['applicationid'] = '-1'
  104. const treeMenuAll = [treeObj]
  105. this.defaultKeys = ['-1']
  106. this.data = treeMenuAll
  107. } else {
  108. this.$message.error(`获取${pagename}数据失败`);
  109. }
  110. } catch (error) {
  111. this.$message.error(`获取${pagename}数据失败`);
  112. }
  113. this.loading = false;
  114. }
  115. }
  116. }
  117. </script>
  118. <style lang="scss" scoped>
  119. .publicPageTree {
  120. background-color: #fff;
  121. padding: 20px;
  122. height: 100%;
  123. width: 100%;
  124. ::v-deep &_tree {
  125. margin-top: 20px;
  126. height: calc(100% - 52px);
  127. .el-scrollbar__wrap {
  128. overflow-x: hidden;
  129. }
  130. .is-horizontal {
  131. display: none;
  132. }
  133. }
  134. }
  135. </style>