TreeItem.vue 1.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041
  1. <template>
  2. <li class="ui-tree-item">
  3. <div :class="{}" @click="toggle" @dblclick="makeFolder">
  4. <i class="arrow iconfont icon-pull-down" :class="{ open: isOpen, visibility: isFolder }"></i>{{ item.name }}
  5. <span v-if="isFolder">[{{ isOpen ? '-' : '+' }}]</span>
  6. </div>
  7. <ul v-show="isOpen" v-if="isFolder">
  8. <ui-tree-item class="item" v-for="(child, index) in item.children" :key="index" :item="child" @make-folder="$emit('make-folder', $event)" @add-item="$emit('add-item', $event)" />
  9. <li class="add" @click="$emit('add-item', item)">+</li>
  10. </ul>
  11. </li>
  12. </template>
  13. <script>
  14. import { defineComponent, ref, computed } from 'vue'
  15. export default defineComponent({
  16. name: 'UiTreeItem',
  17. components: {},
  18. props: {
  19. item: Object,
  20. },
  21. setup(props, _) {
  22. const item = props.item.getValue()
  23. const toggle = () => {
  24. if (isFolder.value) {
  25. isOpen.value = !isOpen.value
  26. }
  27. }
  28. const makeFolder = () => {}
  29. const isOpen = ref(false)
  30. const isFolder = computed(() => item.children && item.children.length)
  31. return {
  32. // item,
  33. toggle,
  34. makeFolder,
  35. isOpen,
  36. isFolder,
  37. }
  38. },
  39. })
  40. </script>