// pages/common/comTree/index.js
/**
 value = [
   {
     id: 1,
     name: '一级名称',
     children: []
   }
 ]

  */
 Component({
  /**
   * 组件的属性列表
   */
  properties: {
    dataTree: {
      type: Array,
      value: []
    },
    selectKey: { // 选中的节点id
      type: String,
      value: ''
    },
    isSelectLastNode: { //是否必须选中最后一节点
      type: Boolean,
      value: false
    },
    isOpenAll: { //是否展开全部节点
      type: Boolean,
      value: false
    }
  },
  observers: {
    'dataTree': function(params) {
      let dataTree = JSON.parse(JSON.stringify(this.properties.dataTree))
      var tree = this.findParent(dataTree,this.properties.selectKey,[])      
      params.forEach(v => {
        if(v.id == tree[0]){
          v.open = true
        }else{
          v.open = this.properties.isOpenAll // 是否展开
        }
      })
      this.setData({
        tree:params
      })
    }
  },
  /**
   * 组件的初始数据
   */
  data: {
    tree: []
  },

  /**
   * 组件的方法列表
   */
  methods: {
    findParent(data, target, result) {
      for (let i in data) {
        let item = data[i]
        if (item.id == target) {
          //将查找到的目标数据加入结果数组中
          //可根据需求unshift(item.id)或unshift(item)
          item.open = true
          result.unshift(item.id)
          return result
        }
        if (item.children && item.children.length > 0) {
          let ok = this.findParent(item.children, target, result)
          if (ok) {
            item.open = true
            result.unshift(item.id)
            return result
          }
        }
      }
      //走到这说明没找到目标
      return false
    },
    isOpen(e) {
      const open = 'tree[' + e.currentTarget.dataset.index + '].open'
      this.setData({
        [open]: !this.data.tree[e.currentTarget.dataset.index].open
      })
    },
    select(e) {
      const item = e.currentTarget.dataset.item
      if(this.properties.isSelectLastNode) {
        // console.log(item)
        this.triggerEvent('select', { item: item }, { bubbles: true, composed: true })
        // if (!item.children || item.children.length == 0) {
        //   this.triggerEvent('select', { item: item }, { bubbles: true, composed: true })
        // } else {
        //   this.triggerEvent('select', { tips: '必须选择最后一个节点' }, { bubbles: true, composed: true })
        // }
      } else {
        this.triggerEvent('select', { item: item }, { bubbles: true, composed: true })
      }
    }
  }
})