2d6e75b617b22de5bfa52b0931d207b3f36c4792.svn-base 2.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  1. <template>
  2. <div>
  3. <div class="menu_tree">
  4. <p @click="closeTree"><i class="el-icon-arrow-down"></i></p>
  5. <el-tree :data="treeInfos" :props="defaultProps" node-key="id" @node-click="handleNodeClick"></el-tree>
  6. </div>
  7. <div v-if="isChecked == 'treeCheck'" >
  8. <el-tree
  9. ref="trees"
  10. :data="menuInfos"
  11. :props="defaultProps"
  12. node-key="id"
  13. @node-click="handleNodeClick"
  14. show-checkbox
  15. @check-change="handleCheckChange"></el-tree>
  16. </div>
  17. </div>
  18. </template>
  19. <script>
  20. import { getTrees } from "@util/gw_formatTree.js";
  21. export default {
  22. props: ['treeInfos','parentId','label','isChecked'], //接收组件传过来的树形数据和根id
  23. name: 'tree',
  24. data () {
  25. return {
  26. defaultProps: {
  27. children: 'children',
  28. label: this.label
  29. },
  30. treeInfo: this.treeInfos
  31. }
  32. },
  33. mounted:function(){
  34. this.treeInfo = getTrees(this.treeInfo,this.parentId)
  35. },
  36. methods:{
  37. //与父组件通信 关闭组件
  38. closeTree(){
  39. this.$emit('closeTree',0)
  40. },
  41. handleNodeClick(data) {
  42. console.log(data)
  43. this.$emit('sendMenuInfo',data)
  44. if(!data.children.length){
  45. this.$emit('closeTree',0)
  46. }
  47. },
  48. handleCheckChange(data, checked, indeterminate) {
  49. this.menuIds = this.$refs.trees.getCheckedKeys()
  50. this.$emit('sendMenuInfo',this.menuIds)
  51. console.log(data, checked, indeterminate);
  52. console.log(this.menuIds)
  53. }
  54. }
  55. }
  56. </script>
  57. <style>
  58. .menu_tree{
  59. position: absolute;
  60. top: 30px;
  61. z-index: 20;
  62. width: 100%;
  63. border: solid 1px #eee;
  64. background-color: #fff;
  65. }
  66. .menu_tree p{
  67. font-weight: normal;
  68. color: #999;
  69. text-align: center;
  70. position: absolute;
  71. right: 10px;
  72. top: -28px;
  73. z-index: 20;
  74. font-size: 16px;
  75. }
  76. </style>