mirror of
https://gitee.com/ccnetcore/Yi
synced 2026-04-25 02:46:39 +08:00
113 lines
2.4 KiB
Vue
113 lines
2.4 KiB
Vue
|
|
<script setup lang="ts">
|
|||
|
|
import { storeToRefs } from 'pinia';
|
|||
|
|
import { useAnnouncementStore } from '@/stores';
|
|||
|
|
|
|||
|
|
const announcementStore = useAnnouncementStore();
|
|||
|
|
const { announcements } = storeToRefs(announcementStore);
|
|||
|
|
|
|||
|
|
// 计算未读公告数量(系统公告数量)
|
|||
|
|
const unreadCount = computed(() => {
|
|||
|
|
if (!Array.isArray(announcements.value))
|
|||
|
|
return 0;
|
|||
|
|
return announcements.value.filter(a => a.type === 'System').length;
|
|||
|
|
});
|
|||
|
|
|
|||
|
|
// 打开公告弹窗
|
|||
|
|
function openAnnouncement() {
|
|||
|
|
announcementStore.openDialog();
|
|||
|
|
}
|
|||
|
|
</script>
|
|||
|
|
|
|||
|
|
<template>
|
|||
|
|
<div class="announcement-btn-container" data-tour="announcement-btn">
|
|||
|
|
<el-badge
|
|||
|
|
is-dot
|
|||
|
|
class="announcement-badge"
|
|||
|
|
>
|
|||
|
|
<!-- :value="unreadCount" -->
|
|||
|
|
<!-- :hidden="unreadCount === 0" -->
|
|||
|
|
<!-- :max="99" -->
|
|||
|
|
<div
|
|||
|
|
class="announcement-btn"
|
|||
|
|
title="查看公告"
|
|||
|
|
@click="openAnnouncement"
|
|||
|
|
>
|
|||
|
|
<!-- PC端显示文字 -->
|
|||
|
|
<span class="pc-text">公告</span>
|
|||
|
|
<!-- 移动端显示图标 -->
|
|||
|
|
<svg
|
|||
|
|
class="mobile-icon"
|
|||
|
|
xmlns="http://www.w3.org/2000/svg"
|
|||
|
|
width="20"
|
|||
|
|
height="20"
|
|||
|
|
viewBox="0 0 24 24"
|
|||
|
|
fill="none"
|
|||
|
|
stroke="currentColor"
|
|||
|
|
stroke-width="2"
|
|||
|
|
stroke-linecap="round"
|
|||
|
|
stroke-linejoin="round"
|
|||
|
|
>
|
|||
|
|
<path d="M18 8A6 6 0 0 0 6 8c0 7-3 9-3 9h18s-3-2-3-9" />
|
|||
|
|
<path d="M13.73 21a2 2 0 0 1-3.46 0" />
|
|||
|
|
</svg>
|
|||
|
|
</div>
|
|||
|
|
</el-badge>
|
|||
|
|
</div>
|
|||
|
|
</template>
|
|||
|
|
|
|||
|
|
<style scoped lang="scss">
|
|||
|
|
.announcement-btn-container {
|
|||
|
|
display: flex;
|
|||
|
|
align-items: center;
|
|||
|
|
|
|||
|
|
.announcement-badge {
|
|||
|
|
:deep(.el-badge__content) {
|
|||
|
|
background-color: #f56c6c;
|
|||
|
|
border: none;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
.announcement-btn {
|
|||
|
|
display: flex;
|
|||
|
|
align-items: center;
|
|||
|
|
gap: 6px;
|
|||
|
|
cursor: pointer;
|
|||
|
|
font-size: 1.2rem;
|
|||
|
|
font-weight: bold;
|
|||
|
|
color: #409eff;
|
|||
|
|
transition: all 0.2s;
|
|||
|
|
|
|||
|
|
&:hover {
|
|||
|
|
color: #66b1ff;
|
|||
|
|
transform: translateY(-1px);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// PC端显示文字,隐藏图标
|
|||
|
|
.pc-text {
|
|||
|
|
display: inline;
|
|||
|
|
margin: 0 12px;
|
|||
|
|
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
.mobile-icon {
|
|||
|
|
display: none;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// 移动端显示图标,隐藏文字
|
|||
|
|
@media (max-width: 768px) {
|
|||
|
|
.announcement-btn-container {
|
|||
|
|
.announcement-btn {
|
|||
|
|
.pc-text {
|
|||
|
|
display: none;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
.mobile-icon {
|
|||
|
|
display: inline;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
</style>
|