| <template> | 
|   <view class="tn-tree-node-class tn-tree-node"> | 
|     <view class="tn-tree__label" @tap="handleClick"> | 
|       <view | 
|         v-if="node.children && node.children.length > 0 && triangle" | 
|         class="tn-tree__triangle" | 
|         :class="[{'tn-tree__triangle--90deg': !collapsed}]" | 
|       ></view> | 
|       <view class="tn-tree__label__item"> | 
|         <view v-if="collapsed && node.image" class="tn-tree__label__item__image"> | 
|           <image :src="node.image" mode="widthFix"></image> | 
|         </view> | 
|         <view v-if="!collapsed && node.activeImage" class="tn-tree__label__item__image"> | 
|           <image :src="node.activeImage" mode="widthFix"></image> | 
|         </view> | 
|         <view class="tn-tree__label__item__text">{{ node.text }}</view> | 
|       </view> | 
|     </view> | 
|     <view v-if="!collapsed && node.children && node.children.length > 0" class="tn-tree__children"> | 
|       <tn-tree-node | 
|         v-for="(item, index) in node.children" | 
|         :key="index" | 
|         :node="item" | 
|         :collapsible="collapsible" | 
|         :triangle="triangle" | 
|         @click="nodeClick" | 
|       ></tn-tree-node> | 
|     </view> | 
|   </view> | 
| </template> | 
|   | 
| <script> | 
|   //如果未开启easycom模式,请自行引入tn-tree-node组件 | 
|   export default { | 
|     name: 'tn-tree-node', | 
|     props: { | 
|       // 节点信息 | 
|       node: { | 
|         type: Object, | 
|         default() { | 
|           return {} | 
|         } | 
|       }, | 
|       // 可以折叠 | 
|       collapsible: { | 
|         type: Boolean, | 
|         default: true | 
|       }, | 
|       // 显示三角形 | 
|       triangle: { | 
|         type: Boolean, | 
|         default: true | 
|       } | 
|     }, | 
|     watch: { | 
|       node(val) { | 
|         if (val.collapsed !== this.collapsed && this.node.children && this.node.children.length > 0) { | 
|           this.collapsed = val.collapsed | 
|         } | 
|       } | 
|     }, | 
|     data() { | 
|       return { | 
|         // 标记是否折叠 | 
|         collapsed: true | 
|       } | 
|     }, | 
|     created() { | 
|       if (this.node.collapsed === false) { | 
|         this.collapsed = false | 
|       } | 
|     }, | 
|     methods: { | 
|       // 处理点击 | 
|       handleClick(e) { | 
|         if (this.collapsible && this.node.children && this.node.children.length > 0) { | 
|           this.collapsed = !this.collapsed | 
|         } | 
|         this.$emit('click', this.node) | 
|       }, | 
|       nodeClick(e) { | 
|         this.$emit('click', e) | 
|       } | 
|     } | 
|   } | 
| </script> | 
|   | 
| <style lang="scss" scoped> | 
|   .tn-tree-node { | 
|      | 
|     .tn-tree { | 
|       &__label { | 
|         position: relative; | 
|         display: inline-flex; | 
|         align-items: center; | 
|         padding: 20rpx 30rpx; | 
|         background-color: transparent; | 
|         /* #ifdef H5 */ | 
|         cursor: pointer; | 
|         /* #endif */ | 
|         // 字体抗锯齿 | 
|         -webkit-font-smoothing: antialiased; | 
|          | 
|         &__item { | 
|           display: flex; | 
|           flex-direction: row; | 
|           align-items: center; | 
|            | 
|           &__image { | 
|             width: 40rpx; | 
|             height: 40rpx; | 
|             margin-right: 16rpx; | 
|              | 
|             image { | 
|               width: 100%; | 
|               height: 100%; | 
|             } | 
|           } | 
|         } | 
|       } | 
|        | 
|       &__children { | 
|         padding-left: 60rpx; | 
|         position: relative; | 
|       } | 
|        | 
|       &__triangle { | 
|         width: 0; | 
|         height: 0; | 
|         border-top: 12rpx solid transparent; | 
|         border-bottom: 12rpx solid transparent; | 
|         border-left: 16rpx solid #080808; | 
|         margin-right: 20rpx; | 
|         transition:  transform 0.25s ease-out; | 
|         flex-shrink: 0; | 
|          | 
|         &--90deg { | 
|           transform:rotate(90deg) translate3d(0, 0, 0); | 
|         } | 
|       } | 
|     } | 
|   } | 
| </style> |