list.vue 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120
  1. <template>
  2. <div class="tree-panel">
  3. <el-tree
  4. ref="treeRef"
  5. :data="arealist"
  6. node-key="sa_saleareaid"
  7. :current-node-key="currentKey"
  8. default-expand-all
  9. highlight-current
  10. :expand-on-click-node="false"
  11. @node-click="handleClick">
  12. <span class="custom-tree-node" slot-scope="{ node, data }">
  13. <span>{{ node.label }}</span>
  14. <span>
  15. <slot name="operation" :data="data"></slot>
  16. </span>
  17. </span>
  18. </el-tree>
  19. </div>
  20. </template>
  21. <script>
  22. export default {
  23. props:['noDefaultData'],
  24. components:{
  25. },
  26. data () {
  27. return {
  28. arealist:[],
  29. currentKey:null
  30. }
  31. },
  32. methods:{
  33. async query_arealist (callback) {
  34. const res = await this.$api.requested({
  35. "classname": "webmanage.sale.salearea.salearea",
  36. "method": "query_area",
  37. "content": {
  38. }
  39. })
  40. // 数据格式转换成elementui-tree所需的格式
  41. this.arealist = this.createMenu(res.data)
  42. callback()
  43. },
  44. createMenu (array) {
  45. var that = this
  46. let arr = []
  47. function convertToElementTree(node) {
  48. // 新节点
  49. var elNode = {
  50. label: node["areaname"],
  51. remarks:node["remarks"],
  52. isused:node["isused"],
  53. sa_saleareaid:node['sa_saleareaid'],
  54. parentid:node['parentid'],
  55. children: []
  56. }
  57. if (node.subarea && node.subarea.length > 0) {
  58. // 如果存在子节点
  59. for (var index = 0; index < node.subarea.length; index++) {
  60. // 遍历子节点, 把每个子节点看做一颗独立的树, 传入递归构造子树, 并把结果放回到新node的children中
  61. elNode.children.push(convertToElementTree(node.subarea[index]));
  62. }
  63. }
  64. return elNode;
  65. }
  66. array.forEach((element) => {
  67. arr.push(convertToElementTree(element))
  68. });
  69. return arr
  70. },
  71. handleClick (row,node,VueComponent) {
  72. this.$emit('onClick',node.data)
  73. },
  74. setCurrentKey (id) {
  75. this.currentKey = id
  76. this.$nextTick(() => {
  77. this.$refs['treeRef'].setCurrentKey(this.currentKey)
  78. })
  79. },
  80. },
  81. mounted () {
  82. // this.query_arealist(()=>{
  83. // if (this.noDefaultData === undefined) {
  84. // this.$emit('onClick',this.arealist[0])
  85. // this.setCurrentKey(this.arealist[0].sa_saleareaid)
  86. // }
  87. // })
  88. this.query_arealist(() => {})
  89. }
  90. }
  91. </script>
  92. <style>
  93. .tree-panel .el-tree {
  94. background: none;
  95. }
  96. .custom-tree-node {
  97. flex: 1;
  98. display: flex;
  99. align-items: center;
  100. justify-content: space-between;
  101. font-size: 14px;
  102. padding-right: 8px;
  103. background: none;
  104. }
  105. </style>
  106. <style scoped>
  107. .tree-panel{
  108. padding: 0 16px 16px 16px;
  109. font-size: 14px;
  110. /* width:300px; */
  111. background: #FAFAFA;
  112. height: calc(100vh - 130px);
  113. overflow-y: scroll;
  114. }
  115. </style>