|
@@ -1,6 +1,6 @@
|
|
|
<template>
|
|
|
<transition name="el-zoom-in-center">
|
|
|
- <div class="announcement" v-show="isShow">
|
|
|
+ <div class="announcement" v-show="data.systemUpdatesMessage || data.scrollingMessages">
|
|
|
<el-popover :width="500">
|
|
|
<div v-if="data.systemUpdatesMessage">
|
|
|
系统更新通知:
|
|
@@ -18,25 +18,13 @@
|
|
|
{{ data.scrollingMessages }}
|
|
|
<template #reference>
|
|
|
<div class='ad' ref="adRef">
|
|
|
- <i class="iconfont icon-tongzhi"/>
|
|
|
- <div class="wrap" ref="wrapRef">
|
|
|
- <p class="txt" ref="txtRef">
|
|
|
- {{
|
|
|
- data.systemUpdatesMessage ? '系统更新通知:' + data.systemUpdatesMessage : data.systemUpdatesMessage
|
|
|
- }}
|
|
|
- {{ data.scrollingMessages }}
|
|
|
-
|
|
|
- </p>
|
|
|
- <p class="txt" v-show="whetherToScroll">
|
|
|
- {{
|
|
|
- data.systemUpdatesMessage ? '系统更新通知:' + data.systemUpdatesMessage : data.systemUpdatesMessage
|
|
|
- }}
|
|
|
- {{ data.scrollingMessages }}
|
|
|
-
|
|
|
- </p>
|
|
|
- </div>
|
|
|
- <div style="color: white;font-size: 14px;margin-left: 10px;white-space: nowrap">
|
|
|
- 查看详情
|
|
|
+ <div ref="scrollRef" :style=" {
|
|
|
+
|
|
|
+ }">
|
|
|
+ {{
|
|
|
+ data.systemUpdatesMessage ? '系统更新通知:' + data.systemUpdatesMessage : data.systemUpdatesMessage
|
|
|
+ }}
|
|
|
+ {{ data.scrollingMessages }}
|
|
|
</div>
|
|
|
</div>
|
|
|
</template>
|
|
@@ -45,10 +33,11 @@
|
|
|
</transition>
|
|
|
</template>
|
|
|
|
|
|
-<script setup name='ScrollNotifications'>
|
|
|
-
|
|
|
+<script setup name='ScrollNotifications' lang="ts">
|
|
|
import {setCallback} from "@/utils/websocket";
|
|
|
import {getSystemAnnouncement} from "@/api/public-api";
|
|
|
+import {ref, watch, onMounted, Ref, nextTick} from "vue";
|
|
|
+import {$ref} from "vue/macros";
|
|
|
|
|
|
let data = $ref({
|
|
|
systemUpdatesMessage: '',
|
|
@@ -57,40 +46,19 @@ let data = $ref({
|
|
|
|
|
|
let isShow = $ref(false)
|
|
|
|
|
|
-const wrapRef = ref()
|
|
|
-const txtRef = ref()
|
|
|
-const adRef = ref()
|
|
|
-
|
|
|
-let whetherToScroll = $ref(false)
|
|
|
-
|
|
|
-let timer = null;
|
|
|
-
|
|
|
-watch(() => data, () => {
|
|
|
- isShow = (data.systemUpdatesMessage || data.scrollingMessages)
|
|
|
- nextTick(() => {
|
|
|
- if (isShow) {
|
|
|
- wrapRef.value.style.width = adRef.value.clientWidth - 85 + 'px'
|
|
|
- if (wrapRef.value.offsetWidth < txtRef.value.offsetWidth) {
|
|
|
- let p_w = txtRef.value.offsetWidth;
|
|
|
- whetherToScroll = true
|
|
|
- timer = setInterval(() => {
|
|
|
- if (p_w > wrapRef.value.scrollLeft) {
|
|
|
- wrapRef.value.scrollLeft++;
|
|
|
- } else {
|
|
|
- wrapRef.value.scrollLeft = 0
|
|
|
- }
|
|
|
- }, 30)
|
|
|
- } else {
|
|
|
- clearInterval(timer)
|
|
|
- wrapRef.value.scrollLeft = 0
|
|
|
- whetherToScroll = false
|
|
|
- }
|
|
|
- } else {
|
|
|
- clearInterval(timer)
|
|
|
- }
|
|
|
+const scrollRef: Ref<HTMLElement> = ref(null)
|
|
|
+const adRef: Ref<HTMLElement> = ref(null)
|
|
|
|
|
|
- })
|
|
|
+let scrollStyle: object = $ref()
|
|
|
|
|
|
+watch(() => data, async () => {
|
|
|
+ // isShow = (data.systemUpdatesMessage || data.scrollingMessages)
|
|
|
+ await nextTick()
|
|
|
+ let width = scrollRef.value?.clientWidth
|
|
|
+ if (width >= 220) {
|
|
|
+ adRef.value.innerHTML += adRef.value.innerHTML
|
|
|
+ console.log('需要滚动')
|
|
|
+ }
|
|
|
}, {deep: true, immediate: true})
|
|
|
|
|
|
|
|
@@ -119,8 +87,6 @@ onMounted(() => {
|
|
|
z-index: 1000;
|
|
|
right: 0;
|
|
|
top: -5px;
|
|
|
-
|
|
|
- //margin-right: -8px;
|
|
|
}
|
|
|
|
|
|
.announcement {
|
|
@@ -130,8 +96,9 @@ onMounted(() => {
|
|
|
padding: 5px;
|
|
|
|
|
|
.ad {
|
|
|
- width: 70%;
|
|
|
- background-color: #e6a23c;
|
|
|
+ width: max-content;
|
|
|
+ max-width: 220px;
|
|
|
+ //overflow: hidden;
|
|
|
align-items: center;
|
|
|
display: flex;
|
|
|
border-radius: 8px;
|
|
@@ -140,28 +107,21 @@ onMounted(() => {
|
|
|
font-size: 16px;
|
|
|
color: #353535;
|
|
|
cursor: pointer;
|
|
|
- box-shadow: 2px 1px 8px 1px rgb(228, 232, 235);
|
|
|
padding: 5px;
|
|
|
+ white-space: nowrap;
|
|
|
+ animation: move 8s linear infinite normal;
|
|
|
+ animation-fill-mode: forwards;
|
|
|
+ }
|
|
|
|
|
|
- i {
|
|
|
- color: white;
|
|
|
+ @keyframes move {
|
|
|
+ 0% {
|
|
|
+ transform: translateX(0px);
|
|
|
}
|
|
|
-
|
|
|
- .wrap {
|
|
|
- margin-left: 10px;
|
|
|
- font-size: 14px;
|
|
|
- color: #333;
|
|
|
- white-space: nowrap;
|
|
|
- overflow: hidden;
|
|
|
-
|
|
|
- p {
|
|
|
- color: white;
|
|
|
- margin: 0;
|
|
|
- padding: 0;
|
|
|
- display: inline-block;
|
|
|
- }
|
|
|
+ 100% {
|
|
|
+ transform: translateX(-100px);
|
|
|
}
|
|
|
}
|
|
|
+
|
|
|
}
|
|
|
|
|
|
</style>
|