91 lines
2.8 KiB
Vue
91 lines
2.8 KiB
Vue
|
<script lang="tsx">
|
||
|
import { defineComponent, computed } from 'vue'
|
||
|
import { Message } from '@/layout/components//Message'
|
||
|
import { Collapse } from '@/layout/components/Collapse'
|
||
|
import { UserInfo } from '@/layout/components/UserInfo'
|
||
|
import { Screenfull } from '@/layout/components/Screenfull'
|
||
|
import { Breadcrumb } from '@/layout/components/Breadcrumb'
|
||
|
import { SizeDropdown } from '@/layout/components/SizeDropdown'
|
||
|
import { LocaleDropdown } from '@/layout/components/LocaleDropdown'
|
||
|
import { useAppStore } from '@/store/modules/app'
|
||
|
import { useDesign } from '@/hooks/web/useDesign'
|
||
|
|
||
|
const { getPrefixCls, variables } = useDesign()
|
||
|
|
||
|
const prefixCls = getPrefixCls('tool-header')
|
||
|
|
||
|
const appStore = useAppStore()
|
||
|
|
||
|
// 面包屑
|
||
|
const breadcrumb = computed(() => appStore.getBreadcrumb)
|
||
|
|
||
|
// 折叠图标
|
||
|
const hamburger = computed(() => appStore.getHamburger)
|
||
|
|
||
|
// 全屏图标
|
||
|
const screenfull = computed(() => appStore.getScreenfull)
|
||
|
|
||
|
// 尺寸图标
|
||
|
const size = computed(() => appStore.getSize)
|
||
|
|
||
|
// 布局
|
||
|
const layout = computed(() => appStore.getLayout)
|
||
|
|
||
|
// 多语言图标
|
||
|
const locale = computed(() => appStore.getLocale)
|
||
|
|
||
|
// 消息图标
|
||
|
const message = computed(() => appStore.getMessage)
|
||
|
|
||
|
export default defineComponent({
|
||
|
name: 'ToolHeader',
|
||
|
setup() {
|
||
|
return () => (
|
||
|
<div
|
||
|
id={`${variables.namespace}-tool-header`}
|
||
|
class={[
|
||
|
prefixCls,
|
||
|
'h-[var(--top-tool-height)] relative px-[var(--top-tool-p-x)] flex items-center justify-between',
|
||
|
'dark:bg-[var(--el-bg-color)]'
|
||
|
]}
|
||
|
>
|
||
|
{layout.value !== 'top' ? (
|
||
|
<div class="h-full flex items-center">
|
||
|
{hamburger.value && layout.value !== 'cutMenu' ? (
|
||
|
<Collapse class="hover-trigger" color="var(--top-header-text-color)"></Collapse>
|
||
|
) : undefined}
|
||
|
{breadcrumb.value ? <Breadcrumb class="<md:hidden"></Breadcrumb> : undefined}
|
||
|
</div>
|
||
|
) : undefined}
|
||
|
<div class="h-full flex items-center">
|
||
|
{screenfull.value ? (
|
||
|
<Screenfull class="hover-trigger" color="var(--top-header-text-color)"></Screenfull>
|
||
|
) : undefined}
|
||
|
{size.value ? (
|
||
|
<SizeDropdown class="hover-trigger" color="var(--top-header-text-color)"></SizeDropdown>
|
||
|
) : undefined}
|
||
|
{locale.value ? (
|
||
|
<LocaleDropdown
|
||
|
class="hover-trigger"
|
||
|
color="var(--top-header-text-color)"
|
||
|
></LocaleDropdown>
|
||
|
) : undefined}
|
||
|
{message.value ? (
|
||
|
<Message class="hover-trigger" color="var(--top-header-text-color)"></Message>
|
||
|
) : undefined}
|
||
|
<UserInfo class="hover-trigger"></UserInfo>
|
||
|
</div>
|
||
|
</div>
|
||
|
)
|
||
|
}
|
||
|
})
|
||
|
</script>
|
||
|
|
||
|
<style lang="scss" scoped>
|
||
|
$prefix-cls: #{$namespace}-tool-header;
|
||
|
|
||
|
.#{$prefix-cls} {
|
||
|
transition: left var(--transition-time-02);
|
||
|
}
|
||
|
</style>
|