collectEdbMenu.vue 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140
  1. <template>
  2. <el-tree
  3. ref="catalogTree "
  4. :class="['catalog-tree',{'target_tree': source==='chart'}]"
  5. empty-text="暂无收藏"
  6. :data="data"
  7. :allow-drop="canDropHandle"
  8. draggable
  9. node-key="ClassifyId"
  10. :props="{
  11. children:'Children'
  12. }"
  13. :expand-on-click-node="false"
  14. @current-change="(data,node)=>{$parent.nodeChange({data,node,treeName:'collect'})}"
  15. @node-drop="handleDropClassify"
  16. >
  17. <div class="custom-tree-node" slot-scope="{ data }">
  18. <span class="tree-label">{{ data.ClassifyName }}</span>
  19. <div class="right-item right-item-box" >
  20. <img
  21. src="~@/assets/img/set_m/edit.png"
  22. alt=""
  23. style="width: 15px; height: 14px; margin-right: 8px"
  24. @click.stop="$parent.handleOpenCollectClassify(data)"
  25. v-if="!data.EdbCode"
  26. />
  27. <img
  28. src="~@/assets/img/set_m/del_icon.png"
  29. alt=""
  30. style="width: 14px; height: 14px;"
  31. @click.stop="removeCollectNode(data)"
  32. v-if="!data.EdbCode"
  33. />
  34. </div>
  35. </div>
  36. </el-tree>
  37. </template>
  38. <script>
  39. import { edbCollectInterface,chartBaseV2Interface } from '@/api/modules/chartApi'
  40. export default {
  41. props: {
  42. data: {
  43. type: Object
  44. },
  45. source: { //指标或图库 edb chart
  46. type: String,
  47. default: 'edb'
  48. },
  49. },
  50. data() {
  51. return {
  52. }
  53. },
  54. methods: {
  55. removeCollectNode({ClassifyId}) {
  56. this.$confirm('若删除该目录,则目录下收藏的所有指标将被清除, 是否继续?',
  57. '提示',
  58. { type: 'warning' }
  59. ).then(async () => {
  60. const res = this.source === 'edb'
  61. ? await edbCollectInterface.delCollectClassify({
  62. ClassifyId
  63. })
  64. : await chartBaseV2Interface.delCollectClassify({
  65. ClassifyId
  66. })
  67. if(res.Ret !== 200) return
  68. this.$message.success('删除成功')
  69. this.$emit('change')
  70. })
  71. },
  72. async handleDropClassify(dragNode,dropNode,type) {
  73. console.log(dragNode,dropNode,type)
  74. let PrevClassifyId,NextClassifyId;
  75. let list = dropNode.parent.childNodes;
  76. let targetIndex = list.findIndex(_ => _.data.ClassifyId===dragNode.data.ClassifyId)
  77. if(targetIndex===0){
  78. const data=list[targetIndex+1].data
  79. NextClassifyId = data.ClassifyId
  80. PrevClassifyId = 0
  81. }else if(targetIndex===list.length-1){
  82. const data=list[targetIndex-1].data
  83. PrevClassifyId = data.ClassifyId
  84. NextClassifyId = 0
  85. }else{
  86. PrevClassifyId=list[targetIndex-1].data.ClassifyId
  87. NextClassifyId=list[targetIndex+1].data.ClassifyId
  88. }
  89. let params = {
  90. ClassifyId: dragNode.data.ClassifyId,
  91. PrevClassifyId,
  92. NextClassifyId
  93. }
  94. const res = this.source === 'edb'
  95. ? await edbCollectInterface.moveCollectClassify(params)
  96. : await chartBaseV2Interface.moveCollectClassify(params)
  97. if(res.Ret !== 200) return
  98. this.$message.success('移动成功')
  99. },
  100. canDropHandle(draggingNode, dropNode, type) {
  101. return dropNode.level===draggingNode.level&&type!=='inner'
  102. },
  103. // checkAuth(key) {
  104. // const {edbDataPermission,checkPermissionBtn}=this.permissionBtn
  105. // const checkAuthMap = {
  106. // 'remove': edbDataPermission.edbData_edbCollectClassify_remove,
  107. // 'save': edbDataPermission.edbData_edbCollectClassify_save
  108. // }
  109. // return checkPermissionBtn(checkAuthMap[key])
  110. // },
  111. }
  112. }
  113. </script>
  114. <style lang="scss" scoped>
  115. .custom-tree-node {
  116. display: flex !important;
  117. justify-content: space-between;
  118. align-items: center;
  119. display: block;
  120. flex: 1;
  121. max-width: 92%;
  122. .node_label {
  123. margin-right: 2px;
  124. }
  125. }
  126. </style>