<template>
  <el-aside :width="!isCollapse ? '300px' : '100px'" class="asideBox">
    <div class="homeBox">
      <div class="logoItem" :class="{ 'flexCenter ': isCollapse }">
        <div
          class="logoImg"
          v-show="isCollapse"
          @click="
            handleChangeMenuUrl(
              { name: '驾驶舱', id: 1, path: 'cockpitManage', iconName: 'gps' },
              `/home/cockpitManage?name=驾驶舱`
            )
          "
        >
          <SvgIcon
            name="dnao"
            class="dnao"
            width="40px"
            height="40px"
            color="#222"
          ></SvgIcon>
        </div>
        <span
          v-if="!isCollapse"
          @click="
            handleChangeMenuUrl(
              { name: '驾驶舱', id: 1, path: 'cockpitManage', iconName: 'gps' },
              `/home/cockpitManage?name=驾驶舱`
            )
          "
          :class="isCollapse ? 'stop-animation' : 'active-animation'"
          >风机运行管理平台</span
        >
      </div>
    </div>
    <el-menu
      collapse-transition
      ref="menu"
      class="mt-3 el-menu-vertical-demo"
      @open="handleOpen"
      @select="handleOpen"
      @close="handleClose"
      background-color="#eff1f3"
      text-color="#000"
      active-text-color="#0754a1"
      :router="false"
      :default-active="defaultActive"
      :unique-opened="true"
      :collapse="isCollapse"
    >
      <el-submenu
        v-for="(item, index) in orgList"
        :key="index"
        :index="item.id"
      >
        <template slot="title">
          <div class="flex items-center justify-start">
            <i
              class="flex items-center justify-center mr-2"
              style="margin-left: 3px"
            >
              <SvgIcon
                :name="item.iconName"
                class="dnao"
                width="20px"
                height="22px"
                color="#222"
              ></SvgIcon>
            </i>
            <span
              slot="title"
              style="display: inline-block"
              :class="{
                'active-menu':
                  defaultActive ===
                  `/windField?id=${item.id}&name=${item.name}`,
              }"
              >{{ item.name }}</span
            >
          </div>
        </template>
        <el-menu-item
          v-for="(child, childIndex) in item.children"
          :key="childIndex"
          :index="`/home/${item.path}/${child.path}?id=${child.id}&name=${child.name}`"
        >
          <template slot="title">
            <span
              slot="title"
              style="padding-left: 22px; width: 100%; display: inline-block"
              :class="{
                'active-menu':
                  defaultActive === `/dynamo?id=${item.id}&name=${item.name}`,
              }"
              @click="
                handleChangeMenuUrl(
                  item,
                  `/home/${item.path}/${child.path}?id=${item.id}&name=${item.name}`
                )
              "
              >{{ child.name }}</span
            >
          </template>
        </el-menu-item>
      </el-submenu>
    </el-menu>
    <div class="foldBox flexCenter">
      <span
        v-show="isCollapse"
        class="el-icon-s-unfold icon"
        @click="isCollapse = false"
        >展开</span
      >
      <span
        v-show="!isCollapse"
        class="el-icon-s-fold icon"
        @click="isCollapse = true"
        >收起</span
      >
    </div>
  </el-aside>
</template>
<script>
import { orgList } from "./mockData";

export default {
  data() {
    return {
      // 展开收起
      isCollapse: false,
      // 三级菜单数组
      orgList: orgList,
      // 搜索值
      searchInputValue: "",
      defaultActive: "",
      activeIndex: false,
      keyObject: {},
    };
  },

  computed: {
    currentMenuIndex() {
      return this.$store.state.breadStore?.currentUrl?.routeUrl;
    },
  },

  watch: {
    currentMenuIndex: {
      deep: true,
      handler(newVale, oldVal) {
        if (newVale) {
          this.$refs.menu.close(newVale);
        }
      },
    },
    keyObject: {
      deep: true,
      handler(newVale) {
        if (newVale && newVale.key === this.defaultActive) {
          this.getBreadcrumbList(newVale.keyPath);
        }
      },
    },
  },
  created() {},
  methods: {
    getBreadcrumbList(keyPath) {
      const urls = keyPath;
      const result = urls.map((url, index) => {
        const params = new URLSearchParams(url.split("?")[1]); // 解析 URL 参数
        const id = params.get("id");
        const name = params.get("name");
        const routeUrl = url;
        // 如果是最后一个路由，则添加额外属性
        if (index === urls.length - 1) {
          return { id, name, routeUrl, currentPage: true };
        }
        return { id, name, routeUrl };
      });
      // console.log(result)
      this.$store.commit("breadStore/ADD_BREAD", result);
      return result;
    },
    handleOpen(key, keyPath) {
      // console.log(key, keyPath)
      this.activeIndex = false;
      this.keyObject = {
        key,
        keyPath,
      };
    },
    handleClose(key, keyPath) {
      // console.log(key, keyPath)
      this.activeIndex = false;
      this.keyObject = {
        key,
        keyPath,
      };
    },

    shrinkTree() {
      this.$refs.menu.close(`/orgsPage?id=${orgList.id}&name=${orgList.name}`);
    },
    handleChangeRouter() {
      this.activeIndex = true;
      this.defaultActive = "";
      this.$store.commit("breadStore/ADD_BREAD", []);
      this.$refs.menu.close(`/orgsPage?id=${orgList.id}&name=${orgList.name}`);
      this.$router.push("/");
    },
    handleChangeMenuUrl(item, key) {
      this.defaultActive = key;
      if (item) {
        item.activeIndex = true;
      }
      this.$router.push({
        path: key,
      });
    },
  },
};
</script>
<style lang="scss" scoped>
.el-menu-vertical-demo:not(.el-menu--collapse) {
  width: 200px;
  min-height: 400px;
}

::v-deep .el-submenu__title {
  display: flex;
  align-items: center;
}

.asideBox {
  position: relative;
  padding-bottom: 40px;
  padding-top: 16px;
  box-sizing: border-box;
  display: flex;
  align-items: flex-start;
  justify-content: flex-start;
  flex-direction: column;
  border-right: 1px solid #d8d8d8;
  position: relative;

  .homeBox {
    width: 100%;
    padding: 0 20px;
    display: flex;
    flex-direction: column;
    align-items: flex-start;
    justify-content: flex-start;
    box-sizing: border-box;

    .logoItem {
      display: flex;
      width: 100%;
      cursor: pointer;
      box-sizing: border-box;

      span {
        line-height: 50px;
        margin: 0 auto;
      }

      .logoImg {
        img {
          height: 100%;
          width: inherit;
        }

        width: 50px;
        height: 50px;
      }
    }

    .search {
      display: flex;
      width: 100%;
      align-items: center;
      justify-content: center;

      .el-icon-search {
        margin-top: 28px;
      }

      .el-input {
        width: inherit;
      }
    }

    .frame {
      display: flex;
      justify-content: space-between;
      align-items: center;
      color: #666;
      width: 100%;
      margin-top: 20px;
      margin-bottom: 10px;
      cursor: pointer;

      .homeIndex {
        display: flex;
        justify-content: center;
        align-items: center;
        font-size: 18px;

        .home_active {
          margin-right: 2px;
        }

        p {
          color: #666;
          font-size: 18px;
        }
      }

      &:hover {
        p {
          color: #19436d;
          // border-bottom: 1px solid #409eff;
        }

        // background-color: rgb(64, 158, 255, 0.6);
        transition: width 0.5s ease, transform 0.5s ease;
        /* 过渡效果 */
        transform-origin: left;
        /* 设置变换的原点在左侧 */
      }

      .left {
        left: 50%;
        transform: scaleX(0);
        /* 初始时将左侧元素宽度设为 0 */
      }

      .right {
        left: 0;
        transform: scaleX(0);
        /* 初始时将右侧元素宽度设为 0 */
      }
    }
  }

  .el-menu {
    margin-bottom: 10px;
    border: none;
    overflow-y: auto;
    width: 100% !important;
    height: 100%;
  }
}

.flexCenter {
  display: flex;
  align-items: center !important;
  justify-content: center !important;
}

.foldBox {
  position: fixed;
  bottom: 10px;
  left: 20px;
  padding: 10px;

  .icon {
    cursor: pointer;
    color: #666;
    font-size: 14px;
  }
}

::v-deep .el-submenu__title {
  padding-left: 30px !important;
}

::v-deep .el-submenu__icon-arrow {
  right: 30px;
}

::-webkit-scrollbar {
  width: 6px;
  display: none;
}

/* 滚动条上的滚动滑块 */
::-webkit-scrollbar-thumb {
  border-radius: 10px;
  background-color: #aaabaa;
  cursor: pointer;
}

::-webkit-scrollbar-thumb:hover {
  background-color: #efeff0;
}

/* 滚动条没有滑块的轨道部分 */
::-webkit-scrollbar-track-piece {
  background-color: #efeff0;
  border-radius: 10px;
}

.asideBox:hover ::-webkit-scrollbar {
  display: block !important;
}
</style>
