2025-11-10 00:59:40 +08:00
|
|
|
<script setup>
|
2026-02-24 21:41:05 +08:00
|
|
|
import { computed } from 'vue'
|
2025-11-10 00:59:40 +08:00
|
|
|
import { useUserStore } from '@/stores/user'
|
2025-11-12 22:45:29 +08:00
|
|
|
import UserDropdown from '@/components/UserDropdown.vue'
|
2025-11-10 00:59:40 +08:00
|
|
|
|
|
|
|
|
const styles = {
|
2026-03-02 02:59:47 +08:00
|
|
|
background: 'var(--color-gray-900)',
|
2025-12-28 13:49:45 +08:00
|
|
|
color: 'var(--color-text-inverse)'
|
2025-11-10 00:59:40 +08:00
|
|
|
}
|
2025-11-16 19:35:55 +08:00
|
|
|
|
2026-02-24 21:41:05 +08:00
|
|
|
const userStore = useUserStore()
|
2025-11-10 00:59:40 +08:00
|
|
|
|
2025-11-12 22:45:29 +08:00
|
|
|
// 计算是否应该显示用户组件
|
|
|
|
|
const shouldShowUser = computed(() => {
|
|
|
|
|
const hasUserName = !!userStore.displayName && userStore.displayName !== '未命名用户'
|
2026-02-24 21:41:05 +08:00
|
|
|
return hasUserName
|
2025-11-12 22:45:29 +08:00
|
|
|
})
|
2025-11-10 00:59:40 +08:00
|
|
|
</script>
|
|
|
|
|
|
|
|
|
|
<template>
|
2026-02-24 21:41:05 +08:00
|
|
|
<header class="header-box" :style="styles">
|
2025-11-10 00:59:40 +08:00
|
|
|
<div>
|
|
|
|
|
<div class="h-[70px] flex items-center">
|
|
|
|
|
<div class="flex items-center gap-3 flex-1 pl-[30px]">
|
|
|
|
|
<!-- 左侧可放 logo 或其他内容 -->
|
|
|
|
|
</div>
|
|
|
|
|
<div class="flex items-center gap-4 pr-[35px]">
|
2025-11-12 22:45:29 +08:00
|
|
|
<template v-if="shouldShowUser">
|
|
|
|
|
<UserDropdown />
|
2025-11-10 00:59:40 +08:00
|
|
|
</template>
|
|
|
|
|
</div>
|
|
|
|
|
</div>
|
|
|
|
|
</div>
|
|
|
|
|
</header>
|
|
|
|
|
</template>
|
|
|
|
|
|
|
|
|
|
<style scoped>
|
|
|
|
|
.header-box {
|
|
|
|
|
position: fixed;
|
|
|
|
|
top: 0;
|
|
|
|
|
left: 0;
|
|
|
|
|
right: 0;
|
|
|
|
|
z-index: 100;
|
|
|
|
|
border-bottom: 1px solid var(--color-border);
|
|
|
|
|
}
|
|
|
|
|
</style>
|