<template>
  <el-aside :width="sideWidth + 'px'" style="position: sticky; bottom: 0; left: 0; height: auto; background-color: rgb(170, 113, 81); box-shadow: rgba(0, 21, 155, 0.35) 2px 0 6px">
   <el-aside :style="AsideObj">
    <div style="height: 80px; color: white; font-weight: bold;
     display: flex; align-items: center; justify-content: center">
      <img src="https://carbon2.obs.cn-north-4.myhuaweicloud.com:443/feiyi%2Ftest%2F0%2FypVcAOGV-Snipaste_2024-10-11_15-03-12.png" alt="" style="height: 30px">
      <span style="margin-left: 5px" v-show="isShow">泠泷水月阁管理系统</span>
    </div>
    <el-menu
          style=" overflow-y: auto; overflow-x: hidden"
          background-color="rgb(170, 113, 81)"
          :collapse="isCollapse"
          :collapse-transition="false"
          text-color="#fff"
          router
          active-text-color="#ffd04b"
          :default-openeds="['0']"
        >
          <!-- 遍历 menuRoutes,动态渲染菜单项 -->
          <template v-for="(item, index) in menuRoutes">
            <!-- 如果有子路由,使用 el-sub-menu -->
            <el-sub-menu
              v-if="item.children && item.children.length"
              :key="index"
              :index="index + ''"
            >
              <template #title>
                <el-icon>
                  <component :is="iconComponents[item.meta.icon]"></component>
                </el-icon>
                <span>{{ item.meta.title }}</span>
              </template>
              <!-- 二级菜单 -->
              <el-menu-item
                v-for="(item2, index2) in item.children"
                :key="index2"
                :index="item2.path"
                :class="$route.path === item2.path ? 'is-active' : 'no-active'">
                <template #title>
                  <el-icon>
                    <component
                      :is="iconComponents[item2.meta.icon]"
                    ></component>
                  </el-icon>
                  {{ item2.meta.title }}
                </template>
              </el-menu-item>
            </el-sub-menu>
 
            <!-- 如果没有子路由,使用 el-menu-item     代码备用,谨防路由被修改-->   
            <!-- <el-menu-item
              v-else
              :index="item.path"
              :class="$route.path === item.path ? 'is-active' : ''"
            >
              <el-icon>
                <component :is="iconComponents[item.meta.icon]"></component>
              </el-icon>
              <span>{{ item.meta.title }}</span>
            </el-menu-item> -->
          </template>
        </el-menu>
      </el-aside>
    </el-aside>
</template>

<script setup >
import {ref ,computed } from 'vue'
import { defineProps } from 'vue';
import emitter from '@/utils/emitter'
import { useRouter } from 'vue-router';
import {
  House,
  User,
  Location,
  Histogram,
  DataAnalysis,
  Menu,
  Switch,
  Edit,
  Camera,
  Calendar,
  Box,
  Upload,
  Postcard,
  TakeawayBox,
  Files,
  DataBoard,
  MessageBox,
  Discount,
  Notification,
  Tickets,
  Money
} from "@element-plus/icons-vue";  
defineProps(['send-data'])

const showLog = ref(true)
const isCollapse = ref(false)
const isShow = ref(true)
const sideWidth = ref(250)
const AsideObj = ref({
  width: '250px'
})

emitter.on('Aside', (value) => {
  showLog.value = value
  if(showLog.value){
    AsideObj.value.width = '64px'
    isCollapse.value = true
    isShow.value = false
    sideWidth.value = 64
  }else{
    AsideObj.value.width = '250px'
    isCollapse.value = false
    isShow.value = true
    sideWidth.value = 250
  }
})

//动态路由导航
const router = useRouter()
console.log('router--->',router.options.routes);

// 创建图标映射表
const iconComponents = {
  House,
  User,
  Location,
  Histogram,
  DataAnalysis,
  Menu,
  Switch,
  Edit,
  Camera,
  Calendar,
  Box,
  Upload,
  Postcard,
  TakeawayBox,
  Files,
  DataBoard,
  MessageBox,
  Discount,
  Notification,
  Tickets,
  Money
  // 添加其他图标组件映射
};
// 过滤掉不需要展示的路由,并调整 layout 的子路由
const menuRoutes = computed(() => {
  // 获取所有路由
  const routes = router.options.routes;
  // 过滤掉不需要展示的路由并展开 layout 子路由
  const adjustedRoutes = routes.flatMap((route) => {
    // 隐藏 'layout' 路由但展示其子路由作为一级路由
    if (route.path === '/' && route.children) {
      return route.children.map((child) => ({
        ...child,
        path: child.path,
        meta: child.meta,
      }));
    }
    // 如果路由设置为隐藏,则跳过
    if (route.meta?.hidden ) {
      console.log('11',route.children);
      return [];
    }
    return route;
  });
  console.log('adj--->',adjustedRoutes);
  return adjustedRoutes;
});
console.log('menuRoutes--->',menuRoutes.value);

</script>
<style scoped>
.is-active {
  color: #ffd04b;
}
.no-active {
  color: #ffffff;
}
</style>