ToolHeader.vue 2.5 KB

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