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.
|
|
<script setup lang="ts"> import Search from "./search/index.vue"; import Notice from "./notice/index.vue"; import mixNav from "./sidebar/mixNav.vue"; import { useNav } from "@/layout/hooks/useNav"; import Breadcrumb from "./sidebar/breadCrumb.vue"; import topCollapse from "./sidebar/topCollapse.vue"; import { useTranslationLang } from "../hooks/useTranslationLang"; import globalization from "@/assets/svg/globalization.svg?component"; import LogoutCircleRLine from "@iconify-icons/ri/logout-circle-r-line"; import Setting from "@iconify-icons/ri/settings-3-line"; import Check from "@iconify-icons/ep/check";
const { layout, device, logout, onPanel, pureApp, username, avatarsStyle, toggleSideBar, getDropdownItemStyle, getDropdownItemClass } = useNav();
const { t, locale, translationCh, translationEn } = useTranslationLang(); </script>
<template> <div class="navbar bg-[#fff] shadow-sm shadow-[rgba(0, 21, 41, 0.08)] dark:shadow-[#0d0d0d]" > <topCollapse v-if="device === 'mobile'" class="hamburger-container" :is-active="pureApp.sidebar.opened" @toggleClick="toggleSideBar" />
<Breadcrumb v-if="layout !== 'mix' && device !== 'mobile'" class="breadcrumb-container" />
<mixNav v-if="layout === 'mix'" />
<div v-if="layout === 'vertical'" class="vertical-header-right"> <!-- 菜单搜索 --> <Search /> <!-- 通知 --> <Notice id="header-notice" /> <!-- 国际化 --> <el-dropdown id="header-translation" trigger="click"> <globalization class="navbar-bg-hover w-[40px] h-[48px] p-[11px] cursor-pointer outline-none" /> <template #dropdown> <el-dropdown-menu class="translation"> <el-dropdown-item :style="getDropdownItemStyle(locale, 'zh')" :class="['dark:!text-white', getDropdownItemClass(locale, 'zh')]" @click="translationCh" > <IconifyIconOffline class="check-zh" v-show="locale === 'zh'" :icon="Check" /> 简体中文 </el-dropdown-item> <el-dropdown-item :style="getDropdownItemStyle(locale, 'en')" :class="['dark:!text-white', getDropdownItemClass(locale, 'en')]" @click="translationEn" > <span class="check-en" v-show="locale === 'en'"> <IconifyIconOffline :icon="Check" /> </span> English </el-dropdown-item> </el-dropdown-menu> </template> </el-dropdown> <!-- 退出登录 --> <el-dropdown trigger="click"> <span class="el-dropdown-link navbar-bg-hover select-none"> <img src="https://avatars.githubusercontent.com/u/44761321?v=4" :style="avatarsStyle" /> <p v-if="username" class="dark:text-white">{{ username }}</p> </span> <template #dropdown> <el-dropdown-menu class="logout"> <el-dropdown-item @click="logout"> <IconifyIconOffline :icon="LogoutCircleRLine" style="margin: 5px" /> {{ t("buttons.hsLoginOut") }} </el-dropdown-item> </el-dropdown-menu> </template> </el-dropdown> <span class="set-icon navbar-bg-hover" :title="t('buttons.hssystemSet')" @click="onPanel" > <IconifyIconOffline :icon="Setting" /> </span> </div> </div> </template>
<style lang="scss" scoped> .navbar { width: 100%; height: 48px; overflow: hidden;
.hamburger-container { line-height: 48px; height: 100%; float: left; cursor: pointer; }
.vertical-header-right { display: flex; min-width: 280px; height: 48px; align-items: center; color: #000000d9; justify-content: flex-end;
.el-dropdown-link { height: 48px; padding: 10px; display: flex; align-items: center; justify-content: space-around; cursor: pointer; color: #000000d9;
p { font-size: 14px; }
img { width: 22px; height: 22px; border-radius: 50%; } } }
.breadcrumb-container { float: left; margin-left: 16px; } }
.translation { ::v-deep(.el-dropdown-menu__item) { padding: 5px 40px; }
.check-zh { position: absolute; left: 20px; }
.check-en { position: absolute; left: 20px; } }
.logout { max-width: 120px;
::v-deep(.el-dropdown-menu__item) { min-width: 100%; display: inline-flex; flex-wrap: wrap; } } </style>
|