base-header.vue 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  1. <script lang="ts">
  2. import logo from "@/assets/images/logo.png";
  3. import { EMitt, ESidebarLayoutEnum, EThemeSetting } from "@/constants/enum";
  4. import emits from "@/utils/emits";
  5. import { getThemeConfigCacheByKey } from "@/utils/theme";
  6. import { defineComponent, reactive } from "vue";
  7. import { useAppStore } from "@/store";
  8. import BaseSidebar from "../sidebar/base-sidebar.vue";
  9. import Breadcrumb from "./breadcrumb.vue";
  10. import CollapseSidebarBtn from "./collapse-sidebar-btn.vue";
  11. import Expand from "./expand.vue";
  12. import HeaderMixNavMenus from "./header-mix-nav-menus.vue";
  13. import Logo from "./logo.vue";
  14. import "@/assets/css/header.less";
  15. /**
  16. * 顶部主区域
  17. */
  18. export default defineComponent({
  19. name: "Header",
  20. components: { BaseSidebar, Breadcrumb, CollapseSidebarBtn, Expand, HeaderMixNavMenus, Logo },
  21. setup() {
  22. const store = useAppStore();
  23. const state = reactive({
  24. sidebarLayout: getThemeConfigCacheByKey(EThemeSetting.NavLayout)
  25. });
  26. emits.on(EMitt.OnSetNavLayout, (vl) => {
  27. state.sidebarLayout = vl;
  28. });
  29. const onRefresh = () => {
  30. emits.emit(EMitt.OnReloadTabPage);
  31. };
  32. return { store, state, onRefresh, logo, ESidebarLayoutEnum };
  33. }
  34. });
  35. </script>
  36. <template>
  37. <div class="rr-header-ctx">
  38. <div class="rr-header-ctx-logo hidden-xs-only">
  39. <logo :logoUrl="logo" logoName="传秀AI终端管理系统"></logo>
  40. </div>
  41. <div class="rr-header-right">
  42. <div class="rr-header-right-left">
  43. <div class="rr-header-right-items rr-header-action" :style="`display:${state.sidebarLayout === ESidebarLayoutEnum.Top ? 'none' : ''}`">
  44. <collapse-sidebar-btn></collapse-sidebar-btn>
  45. <div @click="onRefresh" style="cursor: pointer">
  46. <div class="el-badge">
  47. <el-icon><refresh-right /></el-icon>
  48. </div>
  49. </div>
  50. </div>
  51. <div class="rr-header-right-left-br ele-scrollbar-hide hidden-xs-only">
  52. <base-sidebar v-if="state.sidebarLayout === ESidebarLayoutEnum.Top" mode="horizontal" :router="true"></base-sidebar>
  53. <header-mix-nav-menus v-else-if="state.sidebarLayout === ESidebarLayoutEnum.Mix"></header-mix-nav-menus>
  54. <breadcrumb v-else></breadcrumb>
  55. </div>
  56. </div>
  57. <div style="flex-shrink: 0">
  58. <expand :userName="store.state.user.username"></expand>
  59. </div>
  60. </div>
  61. </div>
  62. </template>