<template>
    <div class="tree-wrapper">
      <el-tree
        :data="treeList"
        :props="defaultProps"
        v-loading="treeLoading"
        :node-key="nodeKey"
        ref="tree"
        :highlight-current="true"
        :expand-on-click-node="false"
        @node-click="handleNodeClick"
        v-bind="$attrs"
        :default-expand-all="defaultExpandAll"
      >
      </el-tree>
    </div>
  </template>
  
  <script>
    import { getTreeByPid } from '@/api/classifyManage';
    // let originId = '';
    // let originType = '';
    export default {
      props: {
        // treeList私有化处理
        treeFormate: {
          type: Function,
          default: null
        },
        defaultProps: {
          type: Object,
          default: function () {
            return {
              children: 'children',
              value: 'id',
              label: 'name'
            };
          }
        },
        defaultExpandAll: {
          type: Boolean,
          default: function () {
            return false;
          }
        },
        // 初始请求treeList
        init: {
          type: Boolean,
          default: true
        },
        id: {
          type: String,
          default: '0'
        },
        nodeKey: {
          type: String,
          default: 'id'
        },
        // appendRoot: {
        //   type: Boolean,
        //   default: false
        // },
        eqDevice: {
          type: String,
          default: ''
        }
      },
      data() {
        return {
          treeList: [],
          treeLoading: false,
          parentName: '',
          parentId: '',
          currentKey: ''
        };
      },
      mounted() {
        if (this.init) {
          this.getTreeData();
        }
      },
      methods: {
        getInstance() {
          return this.$refs.tree;
        },
        // 获取树结构数据(boolen 设备台账特殊处理)
        async getTreeData(id, boolen) {
          try {
            console.log('id----------', id);
            this.treeLoading = true;
            const res = await getTreeByPid(id ? id : this.id);
            console.log('res----------------', res);
            console.log(this.eqDevice);
            this.treeLoading = false;
            if (res?.code === '0') {
              if (this.eqDevice == 'sb' || !!boolen) {
                const arr = res.data.filter(
                  (item) =>
                    item.id == '4' ||
                    item.id == '14' ||
                    item.id == '1812765052571865089'
                );
                this.treeList = arr;
              } else {
                this.treeList = res.data;
              }
              console.log('--------------------');
              this.$emit(
                'setRootId',
                this.eqDevice == 'sb' ? '4' : res.data[0].id
              );
              if (this.treeFormate) {
                this.treeList = this.treeFormate(this.treeList);
              }
              this.$nextTick(() => {
                // 默认高亮第一级树节点
                if (this.treeList[0]) {
                  this.setCurrentKey(this.treeList[0].id);
  
                  //defaultExpandAll父组件传过来为false 不展开所有树，就默认展开根节点的子节点
                  if (!this.defaultExpandAll) {
                    // 手动展开第一级树节点的子节点
                    const rootNode = this.$refs.tree.getNode(this.treeList[0]);
                    if (rootNode) {
                      rootNode.expanded = true;
                    }
                  }
                  const datas = this._setParentId(this.treeList);
                  this.handleNodeClick(
                    datas[0],
                    this.$refs.tree.getCurrentNode()
                  );
                }
              });
              return this.treeList;
            }
          } catch (error) {}
          this.treeLoading = false;
        },
        _setParentId(tree) {
          let data = tree;
          for (let i = 0; i < data.length; i++) {
            if (data[i].parentId === '0') {
              this.parentName = data[i].name;
              this.parentId = data[i].id;
            }
            data[i]['parentName'] = this.parentName;
            data[i]['preParentId'] = data[i]['parentId'];
            data[i]['parentId'] = this.parentId;
            if (data[i].children && data[i].children.length > 0) {
              this._setParentId(data[i].children);
            }
          }
          return data;
        },
        // 递归 - 往树children里面添加parentName
        // _setParentName (tree) {
        //   let data = tree;
        //   for (let i = 0; i < data.length; i++) {
        //     if (data[i].parentId === '0') {
        //       this.parentName = data[i].name;
        //       originId = data[i].id;
        //       originType = data[i].type;
        //     }
  
        //     data[i]['originId'] = originId;
        //     data[i]['originType'] = originType;
        //     data[i]['parentId'] = data[i]['parentId'];
        //     if (data[i].children && data[i].children.length > 0) {
        //       this._setParentName(data[i].children);
        //     }
        //   }
        //   return data;
        // },
  
        handleNodeClick(data, node) {

          this.$emit('handleNodeClick', data, node);
        },
        // 设置默认高亮行
        setCurrentKey(id) {
          this.currentKey = id;
          this.$refs.tree.setCurrentKey(this.currentKey);
        },
  
        // 获取树的选中状态
        getSelectList() {
          const selectList = this.$refs.tree.getCurrentNode();
          return selectList;
        }
      }
    };
  </script>
  
  <style lang="scss" scoped>
    .tree-wrapper {
      width: 100%;
      height: 100%;
      overflow: auto;
  
      :deep(.el-tree) {
        display: inline-block;
        min-width: 100%;
      }
    }
  </style>
  