index.vue 6.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200
  1. <template>
  2. <Header :class="getHeaderClass">
  3. <!-- left start -->
  4. <div :class="`${prefixCls}-left`">
  5. <!-- logo -->
  6. <AppLogo v-if="getShowHeaderLogo || getIsMobile" :class="`${prefixCls}-logo`" :theme="getHeaderTheme"
  7. :style="getLogoWidth" />
  8. <LayoutTrigger v-if="(getShowContent && getShowHeaderTrigger && !getSplit && !getIsMixSidebar) || getIsMobile
  9. " :theme="getHeaderTheme" :sider="false" />
  10. <LayoutBreadcrumb v-if="getShowContent && getShowBread" :theme="getHeaderTheme" />
  11. </div>
  12. <!-- left end -->
  13. <!-- menu start -->
  14. <div :class="`${prefixCls}-menu`" v-if="getShowTopMenu && !getIsMobile">
  15. <LayoutMenu :isHorizontal="true" :theme="getHeaderTheme" :splitType="getSplitType" :menuMode="getMenuMode" />
  16. </div>
  17. <!-- menu-end -->
  18. <!-- action -->
  19. <div :class="`${prefixCls}-action`">
  20. <!-- <AppSearch :class="`${prefixCls}-action__item `" v-if="getShowSearch" /> -->
  21. <ErrorAction v-if="getUseErrorHandle" :class="`${prefixCls}-action__item error-action`" />
  22. <Notify v-if="getShowNotice" :class="`${prefixCls}-action__item notify-item`" />
  23. <HelpDoc />
  24. <SettingDrawer v-if="getShowSetting" :class="`${prefixCls}-action__item`" />
  25. <AppLocalePicker v-if="getShowLocalePicker" :reload="true" :showText="false" :class="`${prefixCls}-action__item`" />
  26. <UserDropDown :theme="getHeaderTheme" />
  27. <img :src="outSys" alt="" srcset="" class="outSys" @click="outSysWay">
  28. <FullScreen v-if="getShowFullScreen" :class="`${prefixCls}-action__item fullscreen-item`" />
  29. </div>
  30. </Header>
  31. </template>
  32. <script lang="ts">
  33. import { defineComponent, unref, computed } from 'vue';
  34. import { propTypes } from '/@/utils/propTypes';
  35. import { Layout } from 'ant-design-vue';
  36. import { AppLogo } from '/@/components/Application';
  37. import LayoutMenu from '../menu/index.vue';
  38. import LayoutTrigger from '../trigger/index.vue';
  39. import { useHeaderSetting } from '/@/hooks/setting/useHeaderSetting';
  40. import { useMenuSetting } from '/@/hooks/setting/useMenuSetting';
  41. import { useRootSetting } from '/@/hooks/setting/useRootSetting';
  42. import { useUserStore } from '/@/store/modules/user';
  43. import { MenuModeEnum, MenuSplitTyeEnum } from '/@/enums/menuEnum';
  44. import { SettingButtonPositionEnum } from '/@/enums/appEnum';
  45. import { AppLocalePicker } from '/@/components/Application';
  46. import { UserDropDown, LayoutBreadcrumb, FullScreen, Notify, ErrorAction } from './components';
  47. import { useAppInject } from '/@/hooks/web/useAppInject';
  48. import { useDesign } from '/@/hooks/web/useDesign';
  49. import { createAsyncComponent } from '/@/utils/factory/createAsyncComponent';
  50. import { useLocale } from '/@/locales/useLocale';
  51. import HelpDoc from './components/HelpDoc.vue';
  52. import outSys from "/@/assets/images/outSys.svg";
  53. export default defineComponent({
  54. name: 'LayoutHeader',
  55. components: {
  56. Header: Layout.Header,
  57. AppLogo,
  58. LayoutTrigger,
  59. LayoutBreadcrumb,
  60. LayoutMenu,
  61. UserDropDown,
  62. AppLocalePicker,
  63. FullScreen,
  64. Notify,
  65. ErrorAction,
  66. SettingDrawer: createAsyncComponent(() => import('/@/layouts/default/setting/index.vue'), {
  67. loading: true,
  68. }),
  69. HelpDoc,
  70. },
  71. props: {
  72. fixed: propTypes.bool,
  73. },
  74. setup(props) {
  75. const { prefixCls } = useDesign('layout-header');
  76. const {
  77. getShowTopMenu,
  78. getShowHeaderTrigger,
  79. getSplit,
  80. getIsMixMode,
  81. getMenuWidth,
  82. getIsMixSidebar,
  83. } = useMenuSetting();
  84. const { getUseErrorHandle, getShowSettingButton, getSettingButtonPosition } =
  85. useRootSetting();
  86. const {
  87. getHeaderTheme,
  88. getShowFullScreen,
  89. getShowNotice,
  90. getShowContent,
  91. getShowBread,
  92. getShowHeaderLogo,
  93. getShowHeader,
  94. getShowSearch,
  95. } = useHeaderSetting();
  96. const { getShowLocalePicker } = useLocale();
  97. const { getIsMobile } = useAppInject();
  98. const getHeaderClass = computed(() => {
  99. const theme = unref(getHeaderTheme);
  100. return [
  101. prefixCls,
  102. {
  103. [`${prefixCls}--fixed`]: props.fixed,
  104. [`${prefixCls}--mobile`]: unref(getIsMobile),
  105. [`${prefixCls}--${theme}`]: theme,
  106. },
  107. ];
  108. });
  109. const getShowSetting = computed(() => {
  110. if (!unref(getShowSettingButton)) {
  111. return false;
  112. }
  113. const settingButtonPosition = unref(getSettingButtonPosition);
  114. if (settingButtonPosition === SettingButtonPositionEnum.AUTO) {
  115. return unref(getShowHeader);
  116. }
  117. return settingButtonPosition === SettingButtonPositionEnum.HEADER;
  118. });
  119. const getLogoWidth = computed(() => {
  120. if (!unref(getIsMixMode) || unref(getIsMobile)) {
  121. return {};
  122. }
  123. const width = unref(getMenuWidth) < 180 ? 220 : unref(getMenuWidth);//sjl,之前是180
  124. return { width: `${width}px` };
  125. });
  126. const getSplitType = computed(() => {
  127. return unref(getSplit) ? MenuSplitTyeEnum.TOP : MenuSplitTyeEnum.NONE;
  128. });
  129. const getMenuMode = computed(() => {
  130. return unref(getSplit) ? MenuModeEnum.HORIZONTAL : null;
  131. });
  132. const userStore = useUserStore();
  133. function outSysWay() {
  134. userStore.confirmLoginOut();
  135. }
  136. return {
  137. outSysWay,
  138. outSys,
  139. prefixCls,
  140. getHeaderClass,
  141. getShowHeaderLogo,
  142. getHeaderTheme,
  143. getShowHeaderTrigger,
  144. getIsMobile,
  145. getShowBread,
  146. getShowContent,
  147. getSplitType,
  148. getSplit,
  149. getMenuMode,
  150. getShowTopMenu,
  151. getShowLocalePicker,
  152. getShowFullScreen,
  153. getShowNotice,
  154. getUseErrorHandle,
  155. getLogoWidth,
  156. getIsMixSidebar,
  157. getShowSettingButton,
  158. getShowSetting,
  159. getShowSearch,
  160. };
  161. },
  162. });
  163. </script>
  164. <style lang="less">
  165. @import './index.less';
  166. .outSys {
  167. cursor: pointer;
  168. border-left: solid 1px #74AFEA;
  169. padding-left: 15px;
  170. padding-right: 15px;
  171. margin-left: 6px;
  172. }
  173. </style>