Vous ne pouvez pas sélectionner plus de 25 sujets Les noms de sujets doivent commencer par une lettre ou un nombre, peuvent contenir des tirets ('-') et peuvent comporter jusqu'à 35 caractères.

index.vue 3.6KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114
  1. <template>
  2. <!-- :sources="[bgVideo]" -->
  3. <video-bg :sources="[]">
  4. <div class="as-layout-horizontal" style="width: 100%; height: 100%;opacity: 0.9;">
  5. <!-- 此处先划出布局形式(按左右布局划分,左边菜单,右边内容) -->
  6. <!-- 菜单部分 -->
  7. <div class="bg-theme" style="height: 100%;">
  8. <!-- 菜单头部部分 -->
  9. <div class="as-gravity-center-start" style="height: 10%;">
  10. <img rel="icon" src="/logo2.png" style="width: 60px;height: 60px;" />
  11. <span class="as-bold" style="font-size:18px;color: #FFFFFF" v-show="menuStart.menuIsExpansion">D-UI框架模板</span>
  12. </div>
  13. <!-- 菜单主体部分 -->
  14. <el-menu :default-active="menuIndex.menuIndex" width="280" style="height: 100%" mode="vertical" :router="false"
  15. @select="select" :collapse="!menuStart.menuIsExpansion" class="el-menu-vertical-demo">
  16. <SidebarItem :list="list" />
  17. </el-menu>
  18. </div>
  19. <div class="as-weight as-layout-vertical">
  20. <!-- 头部选项 -->
  21. <div class="bg-theme" style="padding: 0px 10px 0px 10px; height: 10%;">
  22. <Head></Head>
  23. </div>
  24. <div class="as-layout-vertical">
  25. <!-- 头部 height: 8%;-->
  26. <div style=" background-color: #ffffff; padding: 10px 0px 10px 0px">
  27. <!-- 选项卡 -->
  28. <TabContainer>
  29. </TabContainer>
  30. <!-- 主体内容页面 -->
  31. <router-view name="key"></router-view>
  32. <!-- 路由缓存 https://blog.csdn.net/kDevelop/article/details/122036896 -->
  33. <!-- <router-view name="key" v-slot="{ Component }">
  34. <keep-alive style="height:100vh">
  35. <component :is="Component" />
  36. </keep-alive>
  37. </router-view> -->
  38. </div>
  39. </div>
  40. </div>
  41. </div>
  42. </video-bg>
  43. </template>
  44. <script setup lang="ts">
  45. import SidebarItem from './components/SidebarItem.vue' //选项菜单
  46. import Head from './components/Head.vue' //选项头部
  47. import TabContainer from './components/TabControl.vue' //Tab选项
  48. import VideoBg from '@/components/VideoBackround/VideoBackground.vue' //视频背景组件
  49. import BgTwo from '@/assets/video/homeBg.mp4' //视频资源
  50. import $store from "@/store/index" // 引入vuex
  51. import $storeTab from '@/store/tabValue' //引入tab vuex
  52. import {
  53. list
  54. } from '@/data/menuData.ts'
  55. import {
  56. ref,
  57. reactive,
  58. onMounted
  59. } from 'vue'
  60. import {
  61. useRouter
  62. } from 'vue-router'
  63. const bgVideo = BgTwo
  64. const router = useRouter()
  65. //默认菜单为打开状态
  66. let menuStart = ref($store.state.data)
  67. let menuIndex = ref($storeTab.state.editableTabsValue)
  68. //处理刷新页面重置问题
  69. onMounted(() => {
  70. const newTab = sessionStorage.getItem('newTab')
  71. if (newTab) {
  72. let dataTabs = JSON.parse(newTab)
  73. dataTabs.name = '1'
  74. let value = {
  75. type: 1,
  76. data: dataTabs
  77. }
  78. $storeTab.dispatch('addTab', value)
  79. $storeTab.dispatch('updateETV', dataTabs.name)
  80. } else {
  81. router.replace({
  82. name: 'home'
  83. })
  84. }
  85. sessionStorage.removeItem('newTab')
  86. })
  87. //菜单选择监听(添加选项卡成功则添加,有就进行跳转)
  88. //data(菜单名称,菜单路径)
  89. function select(data) { //这里只负责tab,不负责跳转
  90. let value = {
  91. type: 2,
  92. data: data
  93. }
  94. $storeTab.dispatch('addTab', value)
  95. }
  96. </script>
  97. <style lang="scss" scoped>
  98. .el-menu-vertical-demo:not(.el-menu--collapse) {
  99. width: 200px;
  100. min-height: 400px;
  101. }
  102. .bg-theme {
  103. background-color: $test-color;
  104. }
  105. </style>