<template>
  <div :trigger="['click']" class="trigger" @click="ontrigger">
    <slot>
      <a class="ant-dropdown-link" @click="(e) => e.preventDefault()">
        {{ siteName }} <a-icon type="down" />
      </a>
    </slot>
    <div
      slot="overlay"
      class="select-site"
      :style="{ left: `${offsetLeft}px` }"
      v-if="show"
    >
      <div class="flex_row flex_align_c primary-color name">
        <a-icon type="environment" style="margin-right: 10px" />
        <span style="">{{ siteName }}</span>
      </div>
      <div class="site-list">
        <span
          v-for="(item, index) in sitelist"
          :key="index"
          :class="{ 'primary-color': item.id == checkid }"
          @click="setSite(item)"
          >{{ item.label }}</span
        >
      </div>
      <div class="check-site">
        <span>您的选择是:</span>
        <span
          class="check-item"
          v-for="(item, index) in checkarr"
          :key="index"
          @click="updataSite(item)"
          >{{ index > 0 ? ">" : "" }}{{ item.label }}</span
        >
      </div>
      <div class="site-btn">
        <a-button @click="show = false" style="margin-right: 10px"
          >取消</a-button
        >

        <a-button type="primary" @click="onSucessSite" :disabled="isSite"
          >确定</a-button
        >
      </div>
    </div>
  </div>
</template>
<script>
import { getSiteTree } from "@/services/basicsetFun";
import { mapMutations } from "vuex";
import local from "@/utils/local";
export default {
  data() {
    return {
      sitelist: [],
      show: false,
      offsetLeft: 0,
      checkarr: [], //选中站点
      checkid: undefined, //最终选中站点
      siteName: "",
      isSite: true,
    };
  },
  computed: {},
  created() {
    this.getwaitedListdata();
  },
  mounted() {
    const { offsetLeft } = this.$el;
    this.offsetLeft = offsetLeft;
  },
  methods: {
    ...mapMutations("site", ["SET_SITE_ID", "SET_siteName"]),
    // 确认站点
    onSucessSite() {
      if (this.checkarr.length == 0) return;
      let obj = this.checkarr[this.checkarr.length - 1];

      this.clickSite(obj);
    },
    // 选中
    setSite(obj) {
      this.checkid = undefined;
      // 为子节点不添加数据
      let data = this.checkarr[this.checkarr.length - 1];

      if (data && (data.isLeaf || data.children.length == 0)) {
        // 如果为子节点更新最后一个数据
        this.checkid = obj.id;
        this.checkarr[this.checkarr.length - 1] = obj;
        // 如果选中数据有子集更新站点列表
        if (obj.children && obj.children.length > 0) {
          this.sitelist = obj.children;
        }
      } else {
        this.checkarr.push(obj);
        if (obj.children && obj.children.length > 0) {
          this.sitelist = obj.children;
        }
      }

      if (obj && obj.type == "site") {
        this.isSite = false;
      } else {
        this.isSite = true;
      }
    },
    // 更新选中
    updataSite(row) {
      const { id } = row;
      this.checkid = undefined;
      let index = this.checkarr.findIndex((v) => v.id == id);

      if (index > -1) {
        this.checkarr.splice(index + 1, this.checkarr.length - (index + 1));
      }
      if (row.children && row.children.length > 0) {
        this.sitelist = row.children;
      }

      if (row && row.type == "site") {
        this.isSite = false;
      } else {
        this.isSite = true;
      }
      // this.getwaitedListdata(id);
    },
    getwaitedListdata() {
      getSiteTree().then((res) => {
        const { code, data } = res.data;

        if (code == 1) {
          const { siteTree } = data;
          this.sitelist = siteTree;
          let arr = [];
          const treeFn = function(e) {
            e.forEach((element) => {
              arr.push(element);
              if (element.children && element.children.length > 0) {
                treeFn(element.children);
              }
            });
          };
          const siteid = local.getLocal("siteId");
          treeFn(siteTree);
          const siteObj = arr.find((v) => v.id == siteid);
          this.siteName = siteObj ? siteObj.label : "请选择站点";
        }
      });
    },
    clickSite(obj) {
      local.setLocal("siteId", obj.id);
      local.setLocal("siteName", obj.label);
      this.SET_SITE_ID(obj.id);
      this.SET_siteName(obj.label);
      this.show = false;
      if (location.href.search(/token/gi) >= 0) {
        this.$router.push({ path: "/resource/advimg" });
        setTimeout(() => {
          location.reload();
        });
      } else {
        location.reload();
      }
    },
    ontrigger(e) {
      if (e.target && e.target.nodeName == "A") {
        this.show = !this.show;
      }
    },
  },
};
</script>
<style lang="less" scoped>
.trigger {
  display: inline-block;
  position: relative;
}
.ant-dropdown-link {
  color: #fff;
  padding: 0 20px;
  font-size: 16px;
  min-width: 200px;
  display: inline-block;
}
.select-site {
  position: fixed;
  left: 0;
  top: 65px;
  background: #fff;
  border-radius: 6px;
  padding: 10px;
  min-width: 60%;
  max-width: 80%;
  z-index: 9;
  color: rgba(0, 0, 0, 0.8);
  font-size: 14px;
  box-shadow: 0 0 10px rgba(0, 0, 0, 0.2);
  .name {
    font-size: 20px;
  }
  .site-list {
    // padding: 10px 0;
    border-top: 1px solid #ddd;
    border-bottom: 1px solid #ddd;
    overflow: hidden;
    span {
      float: left;
      line-height: 1.5;
      padding: 10px 20px;
      display: inline-block;
      cursor: pointer;
      &:hover {
        color: #1890ff;
      }
    }
  }
  .check-site,
  .site-btn {
    padding: 0 20px;
  }
  .check-item {
    cursor: pointer;
  }
}
</style>