优化公告弹窗逻辑,新增确认和取消按钮,提升用户交互体验
This commit is contained in:
@@ -57,32 +57,29 @@
|
|||||||
<div v-if="announcement" class="announcement-content">
|
<div v-if="announcement" class="announcement-content">
|
||||||
<h3 class="announcement-title">{{ announcement.title }}</h3>
|
<h3 class="announcement-title">{{ announcement.title }}</h3>
|
||||||
<div class="announcement-text">{{ announcement.content }}</div>
|
<div class="announcement-text">{{ announcement.content }}</div>
|
||||||
<div v-if="announcement.jumpUrl" class="announcement-link">
|
|
||||||
<el-divider />
|
|
||||||
<div class="link-section">
|
|
||||||
<span class="link-label">🔗 相关链接:</span>
|
|
||||||
<el-link
|
|
||||||
:href="announcement.jumpUrl"
|
|
||||||
target="_blank"
|
|
||||||
type="primary"
|
|
||||||
:underline="false"
|
|
||||||
class="announcement-jump-link"
|
|
||||||
>
|
|
||||||
{{ announcement.jumpUrl }}
|
|
||||||
<el-icon class="el-icon--right"><Link /></el-icon>
|
|
||||||
</el-link>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
</div>
|
||||||
<div v-else class="announcement-empty">
|
<div v-else class="announcement-empty">
|
||||||
暂无公告内容
|
暂无公告内容
|
||||||
</div>
|
</div>
|
||||||
<template #footer>
|
<template #footer>
|
||||||
<div class="announcement-footer">
|
<div class="announcement-footer">
|
||||||
|
<template v-if="announcement && announcement.jumpUrl">
|
||||||
|
<!-- 有链接时显示确定和取消按钮 -->
|
||||||
|
<el-checkbox v-model="dontShowToday" class="dont-show-checkbox">
|
||||||
|
今日不再弹出
|
||||||
|
</el-checkbox>
|
||||||
|
<div class="button-group">
|
||||||
|
<el-button @click="handleAnnouncementCancel">取消</el-button>
|
||||||
|
<el-button type="primary" @click="handleAnnouncementConfirm">确定</el-button>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
<template v-else>
|
||||||
|
<!-- 无链接时显示原有的样式 -->
|
||||||
<el-checkbox v-model="dontShowToday" class="dont-show-checkbox">
|
<el-checkbox v-model="dontShowToday" class="dont-show-checkbox">
|
||||||
今日不再弹出
|
今日不再弹出
|
||||||
</el-checkbox>
|
</el-checkbox>
|
||||||
<el-button type="primary" @click="handleAnnouncementClose">确定</el-button>
|
<el-button type="primary" @click="handleAnnouncementClose">确定</el-button>
|
||||||
|
</template>
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
</el-dialog>
|
</el-dialog>
|
||||||
@@ -92,12 +89,8 @@
|
|||||||
<script>
|
<script>
|
||||||
import { onMounted, ref, watch } from 'vue'
|
import { onMounted, ref, watch } from 'vue'
|
||||||
import { getAnnouncementByCode } from '@/api/announcement'
|
import { getAnnouncementByCode } from '@/api/announcement'
|
||||||
import { Link } from '@element-plus/icons-vue'
|
|
||||||
export default {
|
export default {
|
||||||
name: 'GamePage',
|
name: 'GamePage',
|
||||||
components: {
|
|
||||||
Link
|
|
||||||
},
|
|
||||||
props: {
|
props: {
|
||||||
region: {
|
region: {
|
||||||
type: String,
|
type: String,
|
||||||
@@ -220,6 +213,38 @@ export default {
|
|||||||
dontShowToday.value = false
|
dontShowToday.value = false
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 点击确定按钮:跳转到链接
|
||||||
|
const handleAnnouncementConfirm = () => {
|
||||||
|
const codeNo = props.codeNo
|
||||||
|
const announcementData = announcement.value
|
||||||
|
if (dontShowToday.value && codeNo) {
|
||||||
|
markDontShowToday(codeNo)
|
||||||
|
}
|
||||||
|
if (announcementData && codeNo) {
|
||||||
|
markDismissedPermanently(codeNo, announcementData.id)
|
||||||
|
}
|
||||||
|
// 跳转到链接
|
||||||
|
if (announcementData && announcementData.jumpUrl) {
|
||||||
|
window.open(announcementData.jumpUrl, '_blank')
|
||||||
|
}
|
||||||
|
announcementVisible.value = false
|
||||||
|
dontShowToday.value = false
|
||||||
|
}
|
||||||
|
|
||||||
|
// 点击取消按钮:仅关闭弹窗
|
||||||
|
const handleAnnouncementCancel = () => {
|
||||||
|
const codeNo = props.codeNo
|
||||||
|
const announcementData = announcement.value
|
||||||
|
if (dontShowToday.value && codeNo) {
|
||||||
|
markDontShowToday(codeNo)
|
||||||
|
}
|
||||||
|
if (announcementData && codeNo) {
|
||||||
|
markDismissedPermanently(codeNo, announcementData.id)
|
||||||
|
}
|
||||||
|
announcementVisible.value = false
|
||||||
|
dontShowToday.value = false
|
||||||
|
}
|
||||||
|
|
||||||
onMounted(() => {
|
onMounted(() => {
|
||||||
// 仅在进入 GamePage 时检查公告
|
// 仅在进入 GamePage 时检查公告
|
||||||
setTimeout(() => checkAnnouncement(props.codeNo), 1000)
|
setTimeout(() => checkAnnouncement(props.codeNo), 1000)
|
||||||
@@ -238,7 +263,9 @@ export default {
|
|||||||
announcementVisible,
|
announcementVisible,
|
||||||
announcement,
|
announcement,
|
||||||
dontShowToday,
|
dontShowToday,
|
||||||
handleAnnouncementClose
|
handleAnnouncementClose,
|
||||||
|
handleAnnouncementConfirm,
|
||||||
|
handleAnnouncementCancel
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
computed: {
|
computed: {
|
||||||
@@ -414,42 +441,9 @@ export default {
|
|||||||
color: #666;
|
color: #666;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* 公告链接样式 */
|
.button-group {
|
||||||
.announcement-link {
|
|
||||||
margin-top: 16px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.link-section {
|
|
||||||
display: flex;
|
display: flex;
|
||||||
flex-direction: column;
|
|
||||||
gap: 8px;
|
gap: 8px;
|
||||||
padding: 12px;
|
|
||||||
background: #f8f9fa;
|
|
||||||
border-radius: 6px;
|
|
||||||
border-left: 3px solid #409EFF;
|
|
||||||
}
|
|
||||||
|
|
||||||
.link-label {
|
|
||||||
font-size: 14px;
|
|
||||||
font-weight: 500;
|
|
||||||
color: #303133;
|
|
||||||
margin-bottom: 4px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.announcement-jump-link {
|
|
||||||
font-size: 14px;
|
|
||||||
word-break: break-all;
|
|
||||||
display: inline-flex;
|
|
||||||
align-items: center;
|
|
||||||
gap: 4px;
|
|
||||||
max-width: 100%;
|
|
||||||
}
|
|
||||||
|
|
||||||
.announcement-jump-link:hover {
|
|
||||||
background-color: rgba(64, 158, 255, 0.1);
|
|
||||||
padding: 2px 6px;
|
|
||||||
border-radius: 4px;
|
|
||||||
transition: all 0.3s ease;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@media (max-width: 768px) {
|
@media (max-width: 768px) {
|
||||||
@@ -481,17 +475,9 @@ export default {
|
|||||||
font-size: 11px;
|
font-size: 11px;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* 移动端公告链接样式调整 */
|
/* 移动端按钮组调整 */
|
||||||
.link-section {
|
.button-group {
|
||||||
padding: 10px;
|
flex-wrap: wrap;
|
||||||
}
|
|
||||||
|
|
||||||
.link-label {
|
|
||||||
font-size: 13px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.announcement-jump-link {
|
|
||||||
font-size: 13px;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
</style>
|
</style>
|
||||||
Reference in New Issue
Block a user