TreeItem.vue 1.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243
  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 }" />{{ item.name }}
  5. <span v-if="isFolder">[{{ isOpen ? '-' : '+' }}]</span>
  6. </div>
  7. <ul v-show="isOpen" v-if="isFolder">
  8. <ui-tree-item v-for="(child, index) in item.children" :key="index" class="item" :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 lang="ts">
  14. import { computed, defineComponent, ref } 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. // console.log()
  30. }
  31. const isOpen = ref(false)
  32. const isFolder = computed(() => item.children && item.children.length)
  33. return {
  34. // item,
  35. toggle,
  36. makeFolder,
  37. isOpen,
  38. isFolder,
  39. }
  40. },
  41. })
  42. </script>