ToolHeader.vue 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899
  1. <script lang="tsx">
  2. import { defineComponent, computed } from 'vue'
  3. import { Message } from '@/layout/components//Message'
  4. import { Collapse } from '@/layout/components/Collapse'
  5. import { UserInfo } from '@/layout/components/UserInfo'
  6. import { Screenfull } from '@/layout/components/Screenfull'
  7. import { Breadcrumb } from '@/layout/components/Breadcrumb'
  8. import { SizeDropdown } from '@/layout/components/SizeDropdown'
  9. import { LocaleDropdown } from '@/layout/components/LocaleDropdown'
  10. import RouterSearch from '@/components/RouterSearch/index.vue'
  11. import { useAppStore } from '@/store/modules/app'
  12. import { useDesign } from '@/hooks/web/useDesign'
  13. import { getCurrentSource } from '@/utils/currentSource'
  14. const { getPrefixCls, variables } = useDesign()
  15. const prefixCls = getPrefixCls('tool-header')
  16. const appStore = useAppStore()
  17. // 面包屑
  18. const breadcrumb = computed(() => appStore.getBreadcrumb)
  19. // 折叠图标
  20. const hamburger = computed(() => appStore.getHamburger)
  21. // 全屏图标
  22. const screenfull = computed(() => appStore.getScreenfull)
  23. // 搜索图片
  24. const search = computed(() => appStore.search)
  25. // 尺寸图标
  26. const size = computed(() => appStore.getSize)
  27. // 布局
  28. const layout = computed(() => appStore.getLayout)
  29. // 多语言图标
  30. const locale = computed(() => appStore.getLocale)
  31. // 消息图标
  32. const message = computed(() => appStore.getMessage)
  33. const hideTopHeader = computed(() => getCurrentSource() === 'qhse')
  34. export default defineComponent({
  35. name: 'ToolHeader',
  36. setup() {
  37. return () => (
  38. hideTopHeader.value ? null : (
  39. <div
  40. id={`${variables.namespace}-tool-header`}
  41. class={[
  42. prefixCls,
  43. 'h-[var(--top-tool-height)] relative px-[var(--top-tool-p-x)] flex items-center justify-between',
  44. 'dark:bg-[var(--el-bg-color)]'
  45. ]}
  46. >
  47. {layout.value !== 'top' ? (
  48. <div class="h-full flex items-center">
  49. {hamburger.value && layout.value !== 'cutMenu' ? (
  50. <Collapse class="custom-hover" color="var(--top-header-text-color)"></Collapse>
  51. ) : undefined}
  52. {breadcrumb.value ? <Breadcrumb class="lt-md:hidden"></Breadcrumb> : undefined}
  53. </div>
  54. ) : undefined}
  55. <div class="h-full flex items-center">
  56. {screenfull.value ? (
  57. <Screenfull class="custom-hover" color="var(--top-header-text-color)"></Screenfull>
  58. ) : undefined}
  59. {search.value ? <RouterSearch isModal={false} /> : undefined}
  60. {size.value ? (
  61. <SizeDropdown class="custom-hover" color="var(--top-header-text-color)"></SizeDropdown>
  62. ) : undefined}
  63. {locale.value ? (
  64. <LocaleDropdown
  65. class="custom-hover"
  66. color="var(--top-header-text-color)"
  67. ></LocaleDropdown>
  68. ) : undefined}
  69. {message.value ? (
  70. <Message class="custom-hover" color="var(--top-header-text-color)"></Message>
  71. ) : undefined}
  72. <UserInfo></UserInfo>
  73. </div>
  74. </div>
  75. )
  76. )
  77. }
  78. })
  79. </script>
  80. <style lang="scss" scoped>
  81. $prefix-cls: #{$namespace}-tool-header;
  82. .#{$prefix-cls} {
  83. transition: left var(--transition-time-02);
  84. }
  85. </style>