<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>