index.vue 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106
  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="pageconfigurationid" :default-expanded-keys="defaultKeys" :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. },
  24. data () {
  25. return {
  26. loading: false,
  27. filterText: '',
  28. data: [],
  29. defaultProps: {
  30. children: 'children',
  31. label: 'pagename'
  32. },
  33. defaultKeys: []
  34. }
  35. },
  36. watch: {
  37. filterText (val) {
  38. this.$refs.tree.filter(val);
  39. },
  40. treeData: {
  41. handler (arr) {
  42. if (arr?.length) {
  43. const { defaultfilter, serviceid, pagename } = arr[0]
  44. const defaultfilterTag = defaultfilter ? defaultfilter : { 1: 1 }
  45. this.queryTreeData(defaultfilterTag, serviceid, pagename)
  46. }
  47. },
  48. deep: true,
  49. immediate: true
  50. }
  51. },
  52. methods: {
  53. filterNode (value, data) {
  54. if (!value) return true;
  55. return data.pagename.indexOf(value) !== -1;
  56. },
  57. treeNodeClick (data) {
  58. this.$emit('treeNodeClick', data)
  59. },
  60. async queryTreeData (defaultfilter, serviceid, pagename) {
  61. this.loading = true;
  62. const datacontent = { filter: defaultfilter }
  63. try {
  64. const { code, returnData } = await Query({
  65. serviceid,
  66. datacontent,
  67. event: '0'
  68. });
  69. if (code == 0 && returnData?.length) {
  70. const name = '全部'
  71. const treeMenu = listToTree(returnData, 'superiorid', 'pageconfigurationid')
  72. const treeMenuAll = [{ pagename: name, serviceid: name, superiorid: name, pageconfigurationid: -1, children: treeMenu }]
  73. this.defaultKeys = [-1]
  74. this.data = treeMenuAll
  75. } else {
  76. this.$message.error(`获取${pagename}数据失败`);
  77. }
  78. } catch (error) {
  79. this.$message.error(`获取${pagename}数据失败`);
  80. }
  81. this.loading = false;
  82. }
  83. }
  84. }
  85. </script>
  86. <style lang="scss" scoped>
  87. .publicPageTree {
  88. background-color: #fff;
  89. padding: 20px;
  90. height: 100%;
  91. width: 100%;
  92. ::v-deep &_tree {
  93. margin-top: 20px;
  94. height: calc(100% - 52px);
  95. .el-scrollbar__wrap {
  96. overflow-x: hidden;
  97. }
  98. .is-horizontal {
  99. display: none;
  100. }
  101. }
  102. }
  103. </style>