TreeItem.vue 1.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  1. <!-- TreeItem.vue -->
  2. <template>
  3. <view>
  4. <view class="item_tree" @click="toggleNode">
  5. <view class="tree_title">
  6. <view v-if="item.children.length > 0">
  7. <u-icon name="arrow-right" v-if="!expanded"></u-icon>
  8. <u-icon name="arrow-down" v-else></u-icon>
  9. </view>
  10. <view class="name_tree_item">{{ item.name }}</view>
  11. </view>
  12. <view>
  13. <u-button type="primary" text="确定" @click="choice(item)"></u-button>
  14. </view>
  15. </view>
  16. <view v-if="item.children && item.children.length && expanded">
  17. <tree-item @confirm="confirm" v-for="child in item.children" :key="child.id" :item="child"></tree-item>
  18. </view>
  19. </view>
  20. </template>
  21. <script>
  22. export default {
  23. name: 'TreeItem',
  24. props: ['item'],
  25. data() {
  26. return {
  27. expanded: false // 初始状态为折叠
  28. };
  29. },
  30. methods: {
  31. toggleNode() {
  32. this.expanded = !this.expanded; // 切换展开和折叠状态
  33. },
  34. choice(value) {
  35. this.$emit('confirm', value.cmpCode)
  36. },
  37. confirm(cmpCode){
  38. this.$emit('confirm', cmpCode)
  39. }
  40. }
  41. }
  42. </script>
  43. <style lang="scss" scoped>
  44. .item_tree {
  45. display: flex;
  46. align-items: center;
  47. justify-content: space-between;
  48. padding: 20rpx;
  49. border-bottom: 1rpx solid #dfdfdf;
  50. }
  51. .tree_title {
  52. display: flex;
  53. align-items: center;
  54. padding-left: 20rpx;
  55. }
  56. .name_tree_item {
  57. margin-left: 10rpx;
  58. font-size: 30rpx;
  59. }
  60. </style>