123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141 |
- <template>
- <el-container class="hc-layout-box">
- <el-header class="hc-layout-header">
- <div class="hc-layout-header-logo" style="width: 200px">
- <img id="logo-icon" :src="appLogoIcon" alt="">
- <img v-show="!isCollapse" id="logo-name" :src="appLogoName" alt="">
- </div>
- <div class="header-top-collapse-bar" @click="collapseChange">
- <HcIcon v-if="isCollapse" name="menu-unfold" />
- <HcIcon v-else name="menu-fold" />
- </div>
- <div class="header-top-menu-bar">
- <HcTopMenuBar @load="topMenuLoad" @change="topMenuChange" />
- </div>
- <div class="header-content-bar">
- <HcCascader @send="cascaderSend" @change="cascaderChange" />
- <HelpInfoBar />
- <ConfigBar />
- <UserInfoBar @load="userInfoLoad" />
- </div>
- </el-header>
- <el-container class="hc-layout-container">
- <el-aside class="hc-layout-aside" :class="[isCollapse ? 'is-collapse' : '']" :width="isCollapse ? '90px' : '200px'">
- <MenuBar :collapse="isCollapse" :cur="menuBarKey" :datas="menuBarData" :msg-count="msgCount" @change="menuBarChange" />
- </el-aside>
- <el-main class="hc-layout-main">
- <div class="hc-router-menu-bar">
- <RouterMenu />
- </div>
- <div id="hc-main-box" class="hc-main-page">
- <div class="h-full">
- <router-view v-if="reloadRouter" v-slot="{ Component }">
- <transition name="fade-transform">
- <keep-alive :max="10">
- <component :is="Component" :msg-count="msgCount" />
- </keep-alive>
- </transition>
- </router-view>
- </div>
- </div>
- </el-main>
- </el-container>
- </el-container>
- </template>
- <script setup>
- import { nextTick, onMounted, ref } from 'vue'
- import { useAppStore } from '~src/store'
- import { useRoute, useRouter } from 'vue-router'
- import HcSocket from '~src/plugins/HcSocket'
- import { getObjValue } from 'js-fast-way'
- //初始组合式
- const router = useRouter()
- const useRoutes = useRoute()
- const store = useAppStore()
- const reloadRouter = ref(true)
- //子组件
- import HcTopMenuBar from './modules/HcTopMenu.vue'
- import HcCascader from './modules/Cascader.vue'
- import UserInfoBar from './modules/UserInfoBar.vue'
- import HelpInfoBar from './modules/HelpInfoBar.vue'
- import ConfigBar from './modules/ConfigBar.vue'
- import RouterMenu from './modules/RouterMenu.vue'
- import MenuBar from '~src/layout/modules/MenuBar.vue'
- // logo
- const appLogoIcon = ref(store.getLogoIcon)
- const appLogoName = ref(store.getLogoName)
- //菜单数据
- const menuBarKey = ref('')
- const menuBarData = ref([])
- //渲染完成
- onMounted(() => {
- })
- // 是否折叠
- const isCollapse = ref(false)
- const collapseChange = () => {
- const bool = !isCollapse.value
- isCollapse.value = bool
- store.setCollapse(bool)
- }
- //顶部菜单导航
- const topMenuLoad = (key) => {
- console.log(key)
- }
- //顶部菜单导航被点击
- const topMenuChange = (data) => {
- menuBarData.value = data
- }
- //菜单被点击
- const menuBarChange = ({ code }) => {
- menuBarKey.value = code
- router.push({ name: code })
- }
- //消息数量
- const msgCount = ref({
- allCount: 0,
- taskCount: 0,
- messageCount: 0,
- messageCount_1: 0,
- messageCount_2: 0,
- messageCount_3: 0,
- messageCount_4: 0,
- messageCount_5: 0,
- })
- //用户信息
- const userInfoLoad = ({ user_id }) => {
- /*HcSocket.create(user_id, (data) => {
- msgCount.value = getObjValue(data)
- })*/
- }
- //项目合同段的ID
- const cascaderSend = ({ projectId, contractId }) => {
- //HcSocket.send(projectId + ',' + contractId)
- }
- // 项目切换
- const cascaderChange = () => {
- reloadRouter.value = false
- nextTick(() => {
- reloadRouter.value = true
- })
- }
- </script>
- <style lang="scss">
- @import "./index.scss";
- </style>
|