<template>
  <div class="app-container page-nesting" style="position: relative">
    <!-- 树形组件start -->
    <div class="grid-content treeDom">
      <div style="text-align: center" class="mb-20">
        <el-button v-if="this.treeLevel == 3" disabled @click="addGroup()">
          添加分组
        </el-button>
        <el-button type="primary" v-else @click="addGroup()">
          添加分组
        </el-button>
        <el-button v-if="this.treeLevel == 3" disabled @click="addSite()">
          添加站点
        </el-button>
        <el-button type="primary" v-else @click="addSite()">添加站点</el-button>
      </div>
      <el-input
        placeholder="输入关键字进行过滤"
        v-model="filterText"
        class="mb-20 searchInput"
      >
        <template>
          <i class="el-icon-search el-input__icon"></i>
        </template>
      </el-input>
      <!-- <el-scrollbar> -->
      <el-tree
        class="filter-tree siteTree"
        :props="defaultProps"
        :data="data"
        @node-click="handleNodeClick"
        node-key="id"
        :expand-on-click-node="false"
        :highlight-current="showTree"
        default-expand-all
        :filter-node-method="filterNode"
        ref="tree"
      >
      
        <template #default="{ node, data }">
          <span
            class="custom-tree-node"
            style="width: 100%"
            @mouseenter="mouseenter(data)"
            @mouseleave="mouseleave(data)"
          >

          <span>{{ node.label }}</span>
            <!-- <el-tooltip
                class="item"
                effect="dark"
                :content="node.label"
                placement="top-start"
              >
                <span>{{ node.label }}</span>
              </el-tooltip> -->
            <span>
              <a
                class="deleteLink"
                v-show="data.show"
                @click="remove(node, data)"
              >
                <!-- <i size="mini" class="el-icon-delete"></i> -->
              </a>
            </span>
          </span>
        </template>
      </el-tree>
      <!-- </el-scrollbar> -->
    </div>
    <!-- 树形组件end -->

    <!-- 站点主题start -->
    <div class="grid-content nestingDom" style="width: calc(100% - 300px)">
      <el-tabs v-if="this.treeLevel == 3" v-model="activeName" type="card">
        <el-tab-pane label="基本信息" name="first">
          <basic-info class="basicInfo"></basic-info>
        </el-tab-pane>
        <el-tab-pane label="监控设备" name="second">
          <watch-dog
            v-on:success="success(res)"
            :avtiveName="activeName"
            @func="getMsgFormSon"
          ></watch-dog>
        </el-tab-pane>
        <el-tab-pane label="变量列表" name="third">
          <variable-list :activeName="activeName"></variable-list>
        </el-tab-pane>
        <el-tab-pane label="摄像头" name="five">
          <camera></camera>
        </el-tab-pane>
        <el-tab-pane label="电能质量评分配置" name="six">
          <power-Score></power-Score>
        </el-tab-pane>
      </el-tabs>

      <!-- 分组信息start -->
      <group-info-com
        v-if="this.treeLevel == 2 || this.treeLevel == 1"
      ></group-info-com>
      <!-- 分组信息end -->

      <!-- 新建分组start -->
      <add-group-com
        :dialogTitle="dialogTitle"
        :itemInfo="tableItem"
        @closeDialog="closeDialog"
        :flag="showDialog"
      ></add-group-com>
      <!-- 新建分组end -->

      <!-- 新建站点start -->
      <add-site-com
        :dialogTitle="dialogTitle"
        :itemInfo="tableItem"
        @closeDialog="closeDialog"
        :flag="showDialog2"
      ></add-site-com>
      <!-- 新建站点end -->
    </div>
    <!-- 站点主题end -->
  </div>
</template>

<script>
import { defineComponent, ref, reactive, watch, onMounted } from 'vue'

import basicInfo from './basicInfo'
import WatchDog from './watchDog'
import variableList from './variableList'
import camera from './camera'
import PowerScore from './powerScore'

import groupInfoCom from './groupInfoCom'
import addGroupCom from './addGroupCom'
import addSiteCom from './addSiteCom'

import * as api from '@/api/siteManage/index'
import { ElMessage } from 'element-plus'




export default defineComponent({
  components: {
    basicInfo,
    WatchDog,
    variableList,
    camera,
    PowerScore,
    groupInfoCom,
    addGroupCom,
    addSiteCom,
  },
  setup() {
    const showTree=ref(true)
    const showDialog = ref(false)
    const showDialog2 = ref(false)
    const dialogTitle = ref('')
    const treeLevel = ref(3)
    const activeName = ref('five')
    const filterText = ref('')
    const data = ref([
      {
        label: '所有站点',
        children: []
      },
    ])
    const defaultProps = ref({
      children: 'children',
      label: 'label',
    })

    const getMsgFormSon = () => {
      activeName.value = 'third'
    }
    function mouseenter(data) {
      data.show = true
    }
    function mouseleave(data) {
      data.show = false
    }
    function filterNode(value, data) {
      if (!value) return true
      return data.label.indexOf(value) !== -1
    }
    const handleNodeClick = (data, obj, node) => {
      data, node
      treeLevel.value = obj.level
    }

    const tree = ref(null)

    watch(filterText, (val) => {
      //直接监听
      val
      console.log(tree)
      //  tree.value.filter(val)
    })

    // 关闭操作
    const closeDialog = () => {
      showDialog.value = false
      showDialog2.value = false
      treeLevel.value = 3
    }
    //新建分组
    const tableItem = reactive([])
    const addGroup = () => {
      tableItem.value = {
        id: '',
        stationName: '',
        xh: '',
        userName: '',
        list: [],
        done: '',
        guaZai: '',
        checked: true,
      }
      dialogTitle.value = '新建分组'
      showDialog.value = true
    }

    //新建站点
    const addSite = () => {
      tableItem.value = {
        id: '',
        stationName: '',
        xh: '',
        userName: '',
        list: [],
        done: '',
        guaZai: '',
        checked: true,
      }
      dialogTitle.value = '新建站点'
      showDialog2.value = true
    }
    const remove = (node, data) => {
      const parent = node.parent
      const children = parent.data.children || parent.data
      const index = children.findIndex((d) => d.id === data.id)
      children.splice(index, 1)
      this.dataSource = [...this.dataSource]
    }

    //左侧树结构列表
    function siteTreeList() {
      api.siteTreeList({}).then((requset) => {
        if (requset.status === 'SUCCESS') {
          var jsona = JSON.stringify(requset.data)
          var jsonb = jsona.replace(/"grouping_name"/g, '"label"');
          jsonb=jsonb.replace(/"site_list"/g, '"children"');
          jsonb=jsonb.replace(/"site_name"/g, '"label"');
          var jsonc = JSON.parse(jsonb)
          data.value[0].children=jsonc
        } else {
          ElMessage.error(requset.msg)
        }
      })
    }
    onMounted(() => {
      siteTreeList()
    })

    return {
      showDialog,
      showDialog2,
      treeLevel,
      activeName,
      filterText,
      dialogTitle,
      data,
      defaultProps,
      tableItem,

      showTree,
      getMsgFormSon,
      mouseenter,
      mouseleave,
      filterNode,
      handleNodeClick,
      closeDialog,
      addGroup,
      addSite,
      remove,
    }
  },
})
</script>

<style scoped lang="scss">
.app-container.page-nesting {
  padding: 0;
  background: rgba(0, 0, 0, 0);
}
.grid-content {
  background: #fff;
  height: calc(100vh - 130px);
  overflow-y: auto;
}
.el-input__inner {
  border-radius: 20px !important;
}
.treeDom {
  width: 290px;
  position: absolute;
  left: 0;
  // margin-left: 20px;
  padding: 20px;
  min-height: calc(100vh - 130px);

  .el-icon-search {
    color: #409eff;
  }
  .el-button {
    width: 100px;
  }
}
.nestingDom {
  margin-left: 300px;
}
</style>
<style lang="scss">
// tab重置样式
.el-tabs--card > .el-tabs__header .el-tabs__item {
  line-height: 50px;
  height: 50px;
  font-size: 16px;
}
.el-tabs--card > .el-tabs__header .el-tabs__item.is-active {
  border-bottom: 2px solid #409eff;
  color: #409eff;
}
.el-tabs--card .el-tabs__header:hover,
.el-tabs__item:hover {
  color: #409eff !important;
}
.el-tabs__header {
  margin-bottom: 0;
}
.el-tabs--card > .el-tabs__header .el-tabs__item,
.el-tabs--card > .el-tabs__header .el-tabs__nav {
  border: none;
}
</style>
