index.vue 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154
  1. <template>
  2. <el-container class="hc-layout-box">
  3. <el-header class="hc-layout-header">
  4. <div class="hc-layout-header-logo" :style="`width: ${isCollapse ? '0px' : '200px'};`" @click="logoClick">
  5. <!-- <img id="logo-icon" :src="appLogoIcon" alt=""> -->
  6. <span v-show="!isCollapse" class="logo-name">计量系统</span>
  7. </div>
  8. <div class="header-top-collapse-bar" @click="collapseChange">
  9. <HcIcon v-if="isCollapse" name="menu-unfold" />
  10. <HcIcon v-else name="menu-fold" />
  11. </div>
  12. <div class="header-top-menu-bar">
  13. <HcTopMenuBar @load="topMenuLoad" @change="topMenuChange" />
  14. </div>
  15. <div class="header-content-bar">
  16. <HcCascader @send="cascaderSend" @change="cascaderChange" />
  17. <HelpInfoBar />
  18. <ConfigBar />
  19. <UserInfoBar @load="userInfoLoad" />
  20. </div>
  21. </el-header>
  22. <el-container class="hc-layout-container">
  23. <el-aside v-if="isAsideMenu" class="hc-layout-aside" :class="[isCollapse ? 'is-collapse' : '']" :width="isCollapse ? '90px' : '200px'">
  24. <MenuBar :collapse="isCollapse" :cur="menuBarKey" :datas="menuBarData" :msg-count="msgCount" @change="menuBarChange" />
  25. </el-aside>
  26. <el-main class="hc-layout-main">
  27. <div class="hc-router-menu-bar">
  28. <RouterMenu @load="routerMenuLoad" />
  29. </div>
  30. <div id="hc-main-box" class="hc-main-page">
  31. <div class="hc-main-body">
  32. <router-view v-if="reloadRouter" v-slot="{ Component }">
  33. <transition name="fade-transform">
  34. <keep-alive :max="10">
  35. <component :is="Component" :msg-count="msgCount" />
  36. </keep-alive>
  37. </transition>
  38. </router-view>
  39. </div>
  40. </div>
  41. </el-main>
  42. </el-container>
  43. </el-container>
  44. </template>
  45. <script setup>
  46. import { nextTick, onMounted, ref } from 'vue'
  47. import { useAppStore } from '~src/store'
  48. import { useRouter } from 'vue-router'
  49. import { initButtons } from '~sto/app'
  50. import HcSocket from '~src/plugins/HcSocket'
  51. import { getObjValue, isNullES } from 'js-fast-way'
  52. //初始组合式
  53. const router = useRouter()
  54. const store = useAppStore()
  55. const reloadRouter = ref(true)
  56. //子组件
  57. import HcTopMenuBar from './modules/HcTopMenu.vue'
  58. import HcCascader from './modules/Cascader.vue'
  59. import UserInfoBar from './modules/UserInfoBar.vue'
  60. import HelpInfoBar from './modules/HelpInfoBar.vue'
  61. import ConfigBar from './modules/ConfigBar.vue'
  62. import RouterMenu from './modules/RouterMenu.vue'
  63. import MenuBar from '~src/layout/modules/MenuBar.vue'
  64. // logo
  65. const appLogoIcon = ref(store.getLogoIcon)
  66. //菜单数据
  67. const menuBarKey = ref('')
  68. const menuBarData = ref([])
  69. //渲染完成
  70. onMounted(() => {
  71. initButtons()
  72. })
  73. //路由信息
  74. const routerMenuLoad = ({ key }) => {
  75. menuBarKey.value = key
  76. }
  77. // 是否折叠
  78. const isCollapse = ref(false)
  79. const collapseChange = () => {
  80. const bool = !isCollapse.value
  81. isCollapse.value = bool
  82. store.setCollapse(bool)
  83. }
  84. //顶部菜单导航
  85. const isAsideMenu = ref(true)
  86. const topMenuLoad = () => {
  87. isAsideMenu.value = false
  88. }
  89. //顶部菜单导航被点击
  90. const topMenuChange = (data) => {
  91. if (!isNullES(data)) {
  92. menuBarData.value = data
  93. isAsideMenu.value = true
  94. }
  95. }
  96. //菜单被点击
  97. const menuBarChange = ({ code }) => {
  98. menuBarKey.value = code
  99. router.push({ name: code })
  100. }
  101. //消息数量
  102. const msgCount = ref({
  103. allCount: 0,
  104. taskCount: 0,
  105. messageCount: 0,
  106. messageCount_1: 0,
  107. messageCount_2: 0,
  108. messageCount_3: 0,
  109. messageCount_4: 0,
  110. messageCount_5: 0,
  111. })
  112. //用户信息
  113. const userInfoLoad = ({ user_id }) => {
  114. HcSocket.create(user_id, (data) => {
  115. msgCount.value = getObjValue(data)
  116. })
  117. }
  118. //项目合同段的ID
  119. const cascaderSend = ({ projectId, contractId }) => {
  120. HcSocket.send(projectId + ',' + contractId)
  121. }
  122. // 项目切换
  123. const cascaderChange = () => {
  124. reloadRouter.value = false
  125. nextTick(() => {
  126. reloadRouter.value = true
  127. })
  128. }
  129. //首页
  130. const logoClick = () => {
  131. router.push({ name: 'home-index' })
  132. }
  133. </script>
  134. <style lang="scss">
  135. @import "./index.scss";
  136. </style>