skyouc
2025-01-04 3c52f39678034ce21c1158a01b4885e3afde4443
zy-asrs-admin/src/views/IndexView.vue
@@ -1,10 +1,13 @@
<script setup>
import { nextTick, ref, inject, onMounted } from 'vue';
import { nextTick, ref, inject, onMounted, h, reactive } from 'vue';
import { useRouter } from "vue-router";
import { get, post, postForm } from '@/utils/request.js'
import { logout } from '@/config.js';
import * as Icons from "@ant-design/icons-vue";
import { message } from 'ant-design-vue';
// import type { MenuMode, MenuTheme } from 'ant-design-vue';
// import { ItemType } from 'ant-design-vue';
import {
  MenuUnfoldOutlined,
  MenuFoldOutlined,
@@ -37,6 +40,8 @@
  ...Icons,
};
onMounted(() => {
  let name = router.currentRoute.value.name;
  let path = router.currentRoute.value.path;
@@ -59,10 +64,23 @@
  }
})
const state = reactive({
    rootSubmenuKeys: [],
    openKeys: ["/"],
    selectedKeys: [],
});
getMenu()
function getMenu() {
  get('/api/auth/menu', {}).then((result) => {
    menuCache.value = result.data.data;
    let routes = menuCache.value.map(item =>{
        return item.route
    })
      routes.unshift('/')
      state.rootSubmenuKeys = routes
      console.log(state.rootSubmenuKeys)
  })
}
@@ -150,9 +168,9 @@
  selectedKeys.value = [item.key]
  // open menu
  let arr = item.key.split("/");
  let key = '/' + arr[1];
  openKeys.value = [key]
  // let arr = item.key.split("/");
  // let key = '/' + arr[1];
  // openKeys.value = [key]
}
const switchLocale = async (locale) => {
@@ -223,6 +241,19 @@
  }
}
const onOpenChange = (openKeys) => {
    const latestOpenKey = openKeys.find(
        (key) => state.openKeys.indexOf(key) === -1
    );
    if (state.rootSubmenuKeys.indexOf(latestOpenKey) === -1) {
        state.openKeys = openKeys
    } else {
        state.openKeys = latestOpenKey ? [latestOpenKey] : [];
    }
    console.log(state.openKeys)
}
</script>
<template>
@@ -230,8 +261,8 @@
      <div class="sider-style">
        <a-layout-sider class="main-sider" v-model:collapsed="collapsed" :trigger="null"  theme="dark">
        <div class="logo" />
        <a-menu v-model:openKeys="openKeys" v-model:selectedKeys="selectedKeys" @select="menuSelect"  theme="dark"
                mode="inline" >
        <a-menu v-model:openKeys="state.openKeys" v-model:selectedKeys="state.selectedKeys"  @select="menuSelect"  theme="dark"
                mode="inline" @openChange="onOpenChange">
          <div>
            <a-menu-item key="/" name="主页">
              <HomeOutlined /> {{ formatMessage('common.home', '主页') }}