石墨仪设备 前端仓库
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

101 lines
2.7 KiB

6 months ago
6 months ago
6 months ago
6 months ago
6 months ago
6 months ago
6 months ago
6 months ago
6 months ago
6 months ago
6 months ago
6 months ago
6 months ago
6 months ago
6 months ago
6 months ago
6 months ago
6 months ago
6 months ago
6 months ago
  1. <template>
  2. <div class="menu flex justify-center">
  3. <van-sidebar v-model="active" class="sidebar">
  4. <van-sidebar-item v-for="menu in muneList" :key="menu.id" class="menn_text menn_btn" @click="goPage(menu)">
  5. <template #title scoped>
  6. <div class="menn_li">
  7. <div><img :src="active== menu.id ? menu.s_img : menu.n_img" class="menu_icon"/></div>
  8. <div>{{ menu.name }}</div>
  9. </div>
  10. </template>
  11. </van-sidebar-item>
  12. </van-sidebar>
  13. </div>
  14. </template>
  15. <script lang="ts" setup>
  16. import { ref, onMounted } from 'vue'
  17. import { useRouter, useRoute } from 'vue-router'
  18. import { menuIcon } from './menu.ts'
  19. const router = useRouter()
  20. const route = useRoute()
  21. const imageModules:any = import.meta.glob('@/assets/menuIcon/*.svg');
  22. const importedImages:any = {};
  23. const onHeadleIcon = async()=> {
  24. for(const path in imageModules) {
  25. let pst = await imageModules[path]()
  26. importedImages[path] = pst.default
  27. }
  28. }
  29. const active = ref(0);
  30. interface Menu {
  31. id: number
  32. name: string
  33. s_icon: string
  34. n_icon: string
  35. s_img: string
  36. n_img: string
  37. path: string
  38. }
  39. const goPage = (menu:Menu) => {
  40. active.value = menu.id
  41. router.push(`${menu.path}`)
  42. }
  43. const muneList:any = ref([])
  44. onMounted(async ()=>{
  45. await onHeadleIcon()
  46. let path = route.path
  47. muneList.value = menuIcon
  48. //@ts-ignore
  49. muneList.value.forEach(item => {
  50. item.s_img = importedImages[item.s_icon]
  51. item.n_img = importedImages[item.n_icon]
  52. if(item.path === path){
  53. active.value = item.id
  54. }
  55. });
  56. console.log('muneList.value---', muneList.value)
  57. })
  58. </script>
  59. <style lang="css" scoped>
  60. .sidebar{
  61. width: calc(var(--menuAreaWidth) - 2.5rem);
  62. /* padding: 0 1.125rem; */
  63. font-size: 1rem
  64. }
  65. .menu{
  66. width: var(--menuAreaWidth);
  67. }
  68. .menn_text{
  69. font-size: 1rem;
  70. margin-top:.625rem;
  71. }
  72. .van-sidebar {
  73. --van-sidebar-active-color: #0088cc; /* 设置激活项颜色为蓝色 */
  74. /* --van-sidebar-background: red; */
  75. --van-sidebar-selected-background: #1989FA
  76. }
  77. .menn_btn{
  78. border-radius: 10px;
  79. height: 3.125rem;
  80. display: flex;
  81. align-items: center;
  82. }
  83. .menn_li{
  84. display: flex;
  85. align-items: center;
  86. gap: 5px;
  87. }
  88. .menu_icon{
  89. width: 2.5rem;
  90. height: 2.5rem;
  91. }
  92. </style>