完成图表组件动态加载及样式优化
This commit is contained in:
		
							parent
							
								
									339e4507a9
								
							
						
					
					
						commit
						4d25f14e95
					
				
							
								
								
									
										1221
									
								
								package-lock.json
									
									
									
										generated
									
									
									
								
							
							
						
						
									
										1221
									
								
								package-lock.json
									
									
									
										generated
									
									
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							| 
						 | 
					@ -15,6 +15,7 @@
 | 
				
			||||||
    "axios": "^1.10.0",
 | 
					    "axios": "^1.10.0",
 | 
				
			||||||
    "echarts": "^5.6.0",
 | 
					    "echarts": "^5.6.0",
 | 
				
			||||||
    "element-plus": "^2.10.1",
 | 
					    "element-plus": "^2.10.1",
 | 
				
			||||||
 | 
					    "pinia": "^3.0.3",
 | 
				
			||||||
    "tdesign-vue-next": "^1.13.2",
 | 
					    "tdesign-vue-next": "^1.13.2",
 | 
				
			||||||
    "vue": "^3.5.13",
 | 
					    "vue": "^3.5.13",
 | 
				
			||||||
    "vue-router": "^4.5.1"
 | 
					    "vue-router": "^4.5.1"
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
							
								
								
									
										
											BIN
										
									
								
								src/assets/images/logo/reload.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								src/assets/images/logo/reload.png
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							| 
		 After Width: | Height: | Size: 3.7 KiB  | 
							
								
								
									
										
											BIN
										
									
								
								src/assets/images/logo/定位.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								src/assets/images/logo/定位.png
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							| 
		 After Width: | Height: | Size: 4.6 KiB  | 
										
											Binary file not shown.
										
									
								
							| 
		 Before Width: | Height: | Size: 15 KiB After Width: | Height: | Size: 81 KiB  | 
										
											Binary file not shown.
										
									
								
							| 
		 Before Width: | Height: | Size: 12 KiB After Width: | Height: | Size: 95 KiB  | 
| 
						 | 
					@ -1,10 +1,13 @@
 | 
				
			||||||
import { createApp } from 'vue';
 | 
					import { createApp } from 'vue';
 | 
				
			||||||
 | 
					import { createPinia } from 'pinia';
 | 
				
			||||||
import App from './App.vue';
 | 
					import App from './App.vue';
 | 
				
			||||||
 | 
					const pinia = createPinia();
 | 
				
			||||||
import ElementPlus from 'element-plus';
 | 
					import ElementPlus from 'element-plus';
 | 
				
			||||||
import 'element-plus/dist/index.css';
 | 
					import 'element-plus/dist/index.css';
 | 
				
			||||||
import router from './router';
 | 
					import router from './router';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
const app = createApp(App);
 | 
					const app = createApp(App);
 | 
				
			||||||
 | 
					app.use(pinia);
 | 
				
			||||||
app.use(ElementPlus);
 | 
					app.use(ElementPlus);
 | 
				
			||||||
app.use(router);
 | 
					app.use(router);
 | 
				
			||||||
app.mount('#app');
 | 
					app.mount('#app');
 | 
				
			||||||
							
								
								
									
										22
									
								
								src/store/index.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										22
									
								
								src/store/index.js
									
									
									
									
									
										Normal file
									
								
							| 
						 | 
					@ -0,0 +1,22 @@
 | 
				
			||||||
 | 
					import { defineStore } from 'pinia';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					export const useActionStore = defineStore('action', {
 | 
				
			||||||
 | 
					  state: () => ({
 | 
				
			||||||
 | 
					    triggerCombineAction: false,
 | 
				
			||||||
 | 
					    targetNodeId: '840983' // 默认高亮节点ID
 | 
				
			||||||
 | 
					  }),
 | 
				
			||||||
 | 
					  actions: {
 | 
				
			||||||
 | 
					    // 触发定位并高亮操作
 | 
				
			||||||
 | 
					    triggerCombine() {
 | 
				
			||||||
 | 
					      this.triggerCombineAction = true;
 | 
				
			||||||
 | 
					      // 自动重置状态,避免重复触发
 | 
				
			||||||
 | 
					      setTimeout(() => {
 | 
				
			||||||
 | 
					        this.triggerCombineAction = false;
 | 
				
			||||||
 | 
					      }, 100);
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    // 设置目标节点ID
 | 
				
			||||||
 | 
					    setTargetNodeId(id) {
 | 
				
			||||||
 | 
					      this.targetNodeId = id;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					});
 | 
				
			||||||
| 
						 | 
					@ -1,9 +1,3 @@
 | 
				
			||||||
<!-- <script setup>
 | 
					 | 
				
			||||||
// import { RouterView } from 'vue-router'
 | 
					 | 
				
			||||||
// import HelloWorld from './components/HelloWorld.vue'
 | 
					 | 
				
			||||||
// import Visualize from '../views/visualize/index.vue'
 | 
					 | 
				
			||||||
// import graphData from "../views/visualize/data/graphData.ts"
 | 
					 | 
				
			||||||
</script> -->
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
<template>
 | 
					<template>
 | 
				
			||||||
  <div style="width: 100%; height: 100%;">
 | 
					  <div style="width: 100%; height: 100%;">
 | 
				
			||||||
| 
						 | 
					@ -173,6 +167,6 @@ onMounted(() => {
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
.slider-box {
 | 
					.slider-box {
 | 
				
			||||||
  margin-top: 10px;
 | 
					  margin-top: -230px;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
</style>
 | 
					</style>
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1,26 +1,68 @@
 | 
				
			||||||
<template>
 | 
					<template>
 | 
				
			||||||
 | 
					  
 | 
				
			||||||
  <div class="main">
 | 
					  <div class="main">
 | 
				
			||||||
    <div v-if="showTooltip" class="tooltip">
 | 
					    <div v-if="showTooltip" class="tooltip">
 | 
				
			||||||
      <div class="tooltip-containner">
 | 
					      <div class="tooltip-containner">
 | 
				
			||||||
        <img src="../assets/images/mess/key.png" alt="">
 | 
					        <img src="../assets/images/mess/key.png" alt="">
 | 
				
			||||||
        <div class="tooltip-containner-data">
 | 
					        <div class="tooltip-containner-data">
 | 
				
			||||||
          <li><img :src="currentItem.img" alt="" style="max-width: 100%; height: auto;"></li>
 | 
					          <li><img :src="currentItem.img" alt="" style=""></li>
 | 
				
			||||||
          <li><img src="../assets/images/logo/point.png" alt="">最初首发者:   {{ currentItem.earler }} </li>
 | 
					          <li><img :src="currentItem.imgdata" alt="" style="width: 500px;height: 400px;margin-left: 20px;"></li>
 | 
				
			||||||
          <li><img src="../assets/images/logo/point.png" alt="">积极评论者:{{ currentItem.comenter }}</li>
 | 
					          <li style="margin-left: 10px; margin-top:   20px;"><img src="../assets/images/logo/point.png"
 | 
				
			||||||
          <li><img src="../assets/images/logo/point.png" alt="">锚点用户{{ currentItem.keyuser }}</li>
 | 
					              alt="">最初首发者:   {{ currentItem.earler }} </li>
 | 
				
			||||||
          <li><img src="../assets/images/logo/point.png" alt="">积极转发者:   {{ currentItem.switcher }}</li>
 | 
					          <li style="margin-left: 10px;"><img src="../assets/images/logo/point.png" alt="">积极评论者:{{ currentItem.comenter
 | 
				
			||||||
 | 
					          }}</li>
 | 
				
			||||||
 | 
					          <li style="margin-left: 200px;margin-top: -57px;"><img src="../assets/images/logo/point.png" alt="">锚点用户{{
 | 
				
			||||||
 | 
					            currentItem.keyuser }}</li>
 | 
				
			||||||
 | 
					          <li style="margin-left: 200px;;"><img src="../assets/images/logo/point.png" alt="">积极转发者:   {{
 | 
				
			||||||
 | 
					            currentItem.switcher }}</li>
 | 
				
			||||||
        </div>
 | 
					        </div>
 | 
				
			||||||
        <img src="../assets/images/logo/cancel.png" alt=""
 | 
					        <img src="../assets/images/logo/cancel.png" alt=""
 | 
				
			||||||
          style="float: right;margin-right: 10px;margin-top: -160px;cursor: pointer;" @click="showTooltip = false">
 | 
					          style="float: right;margin-right: 10px;margin-top: -520px;cursor: pointer;" @click="showTooltip = false">
 | 
				
			||||||
 | 
					      </div>
 | 
				
			||||||
 | 
					    </div>
 | 
				
			||||||
 | 
					    <div v-if="showDetailModal" class="detail-modal-overlay">
 | 
				
			||||||
 | 
					      <div class="detail-modal">
 | 
				
			||||||
 | 
					        <img src="../assets/images/logo/cancel.png" @click="closeDetailModal" style="float: right;margin-left: 300px;">
 | 
				
			||||||
 | 
					        </img>
 | 
				
			||||||
 | 
					        <img :src="currentDetailItem.avatar" class="large-avatar">
 | 
				
			||||||
 | 
					        <div style="color: #FFFFFF;font-size:large;margin-left: 150px;margin-top: -50px;">{{ currentDetailItem.name }}
 | 
				
			||||||
 | 
					        </div>
 | 
				
			||||||
 | 
					        <div class="info-container">
 | 
				
			||||||
 | 
					          <!-- 第一列 -->
 | 
				
			||||||
 | 
					          <div class="info-column">
 | 
				
			||||||
 | 
					            <p><strong>粉丝数量:</strong> {{ currentDetailItem.number }}</p>
 | 
				
			||||||
 | 
					            <p><strong>贴文被转发总数:</strong> {{ currentDetailItem.transmit || '未设置' }}</p>
 | 
				
			||||||
 | 
					            <p><strong>首次活跃时间:</strong> {{ currentDetailItem.time || '未知' }}</p>
 | 
				
			||||||
 | 
					          </div>
 | 
				
			||||||
 | 
					          <!-- 第二列 -->
 | 
				
			||||||
 | 
					          <div class="info-column">
 | 
				
			||||||
 | 
					            <p><strong>发帖总数:</strong> {{ currentDetailItem.posts || '未知' }}</p>
 | 
				
			||||||
 | 
					            <p><strong>关注数量:</strong> {{ currentDetailItem.atten || '未知' }}</p>
 | 
				
			||||||
 | 
					            <p><strong>参与互动次数:</strong> {{ currentDetailItem.interaction || '未知' }}</p>
 | 
				
			||||||
 | 
					          </div>
 | 
				
			||||||
 | 
					        </div>
 | 
				
			||||||
 | 
					        <div class="info-coment">精选贴文:
 | 
				
			||||||
 | 
					          <!-- 新增贴文列表容器 -->
 | 
				
			||||||
 | 
					          <div class="post-list-container">
 | 
				
			||||||
 | 
					            <div class="post-item" v-for="(post, index) in visibleData" :key="index">
 | 
				
			||||||
 | 
					              <p class="post-content">{{ post.commenter }}</p>
 | 
				
			||||||
 | 
					              <p class="post-content">{{ post.comment }}</p>
 | 
				
			||||||
 | 
					            </div>
 | 
				
			||||||
 | 
					          </div>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        </div>
 | 
				
			||||||
      </div>
 | 
					      </div>
 | 
				
			||||||
    </div>
 | 
					    </div>
 | 
				
			||||||
    <header class="header">
 | 
					    <header class="header">
 | 
				
			||||||
      <div class="time">
 | 
					      <button class="back-home-btn" @click="goToHome">返回主页面</button>
 | 
				
			||||||
        <img src="../assets/images/logo/time.png" alt="" style="float: right;margin-right: 250px;margin-top: -150px;">
 | 
					      <div class="timer">
 | 
				
			||||||
        <div class="realtime-clock" style="position: absolute; top: 20px; right:100px; color: #1EA0FD; font-family: LCD2; font-size: 20px;">
 | 
					
 | 
				
			||||||
 | 
					        <button class="reload-button" @click="handleReload" :disabled="isReloading" style="margin-top: -10px;">
 | 
				
			||||||
 | 
					          <img src="../assets/images/logo/reload.png">
 | 
				
			||||||
 | 
					          {{ buttonText }}
 | 
				
			||||||
 | 
					        </button>
 | 
				
			||||||
        {{ currentTime }}
 | 
					        {{ currentTime }}
 | 
				
			||||||
      </div>
 | 
					      </div>
 | 
				
			||||||
      </div>
 | 
					 | 
				
			||||||
    </header>
 | 
					    </header>
 | 
				
			||||||
    <div class="search">
 | 
					    <div class="search">
 | 
				
			||||||
      <!-- 使用 el-autocomplete 组件替换原输入框 -->
 | 
					      <!-- 使用 el-autocomplete 组件替换原输入框 -->
 | 
				
			||||||
| 
						 | 
					@ -62,15 +104,20 @@
 | 
				
			||||||
            </div>
 | 
					            </div>
 | 
				
			||||||
            <div class="suggestion-containner">
 | 
					            <div class="suggestion-containner">
 | 
				
			||||||
              <ul>
 | 
					              <ul>
 | 
				
			||||||
                <li v-for="item in filteredData" :key="item.id">
 | 
					                <li v-for="item in filteredData" :key="item.id" @click="openDetailModal(item)"
 | 
				
			||||||
                  <!-- 显示用户头像 -->
 | 
					                  @mouseenter="handleMouseEnter(item.id)" @mouseleave="handleMouseLeave()"
 | 
				
			||||||
 | 
					                  :class="{ 'hover-item': hoverItemId === item.id }">
 | 
				
			||||||
                  <img :src="item.avatar">
 | 
					                  <img :src="item.avatar">
 | 
				
			||||||
                  <!-- 显示其他信息 -->
 | 
					                  <!-- 显示其他信息 -->
 | 
				
			||||||
                  <div class="span-data">
 | 
					                  <div class="span-data">
 | 
				
			||||||
                    <span class="span-1">{{ item.name }}</span>
 | 
					                    <span class="span-1">{{ item.name }}</span>
 | 
				
			||||||
                    <span class="span-2">粉丝数: {{ item.number }}</span>
 | 
					                    <span class="span-2">粉丝数: {{ item.number }}</span>
 | 
				
			||||||
                    <span class="span-3">推荐监控频率</span>
 | 
					                    <span class="span-3">推荐监控频率{{ item.transmit }}</span>
 | 
				
			||||||
 | 
					                    <button
 | 
				
			||||||
 | 
					                      style="background-image: url('src/assets/images/logo/定位.png'); background-size: cover; background-repeat: no-repeat; background-position: center;width: 20px;height: 20px;margin-left: 240px;margin-top:-45px;border-radius: 0px;border: 0;cursor: pointer;"
 | 
				
			||||||
 | 
					                      @click.stop="handleCombineAction"></button>
 | 
				
			||||||
                  </div>
 | 
					                  </div>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                </li>
 | 
					                </li>
 | 
				
			||||||
              </ul>
 | 
					              </ul>
 | 
				
			||||||
            </div>
 | 
					            </div>
 | 
				
			||||||
| 
						 | 
					@ -116,14 +163,13 @@
 | 
				
			||||||
                  </div>
 | 
					                  </div>
 | 
				
			||||||
                  <!-- 初始无数据时显示空状态 -->
 | 
					                  <!-- 初始无数据时显示空状态 -->
 | 
				
			||||||
                  <div v-else class="empty-state">
 | 
					                  <div v-else class="empty-state">
 | 
				
			||||||
                    <!-- 可以添加空状态提示或留空 -->
 | 
					 | 
				
			||||||
                  </div>
 | 
					                  </div>
 | 
				
			||||||
                </div>
 | 
					                </div>
 | 
				
			||||||
              </transition>
 | 
					              </transition>
 | 
				
			||||||
            </div>
 | 
					            </div>
 | 
				
			||||||
          </div>
 | 
					          </div>
 | 
				
			||||||
          <div class="containner3-img">
 | 
					          <div class="containner3-img">
 | 
				
			||||||
            <div id="main" style="width: 100%;height:230px;"></div>
 | 
					            <div id="main" style="width: 450px;height:230px;"></div>
 | 
				
			||||||
          </div>
 | 
					          </div>
 | 
				
			||||||
        </div>
 | 
					        </div>
 | 
				
			||||||
        <div class="containner4">
 | 
					        <div class="containner4">
 | 
				
			||||||
| 
						 | 
					@ -160,16 +206,40 @@
 | 
				
			||||||
  </div>
 | 
					  </div>
 | 
				
			||||||
</template>
 | 
					</template>
 | 
				
			||||||
<script setup>
 | 
					<script setup>
 | 
				
			||||||
import { ref, computed, onMounted, onUnmounted, nextTick } from 'vue';
 | 
					import { ref, computed, reactive, onMounted, onUnmounted, nextTick } from 'vue';
 | 
				
			||||||
import { useRouter } from 'vue-router';
 | 
					import { useRouter } from 'vue-router';
 | 
				
			||||||
import IndexView from './App.vue';
 | 
					import IndexView from './App.vue';
 | 
				
			||||||
import ScrollContainer from '@/components/ScrollContainer.vue';
 | 
					import ScrollContainer from '@/components/ScrollContainer.vue';
 | 
				
			||||||
import * as echarts from 'echarts';
 | 
					import * as echarts from 'echarts';
 | 
				
			||||||
 | 
					import axios from 'axios';
 | 
				
			||||||
 | 
					import { useActionStore } from '@/store';
 | 
				
			||||||
 | 
					// import { positionElement } from 'echarts/types/src/util/layout.js';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
let myChart = null;
 | 
					let myChart = null;
 | 
				
			||||||
const router = useRouter();
 | 
					const router = useRouter();
 | 
				
			||||||
 | 
					const actionStore = useActionStore();
 | 
				
			||||||
const nodes = [{}, {}];
 | 
					const nodes = [{}, {}];
 | 
				
			||||||
const links = [];
 | 
					const links = [];
 | 
				
			||||||
const graphData = { nodes, links }
 | 
					const graphData = { nodes, links };
 | 
				
			||||||
 | 
					// 添加以下响应式变量声明
 | 
				
			||||||
 | 
					const isReloading = ref(false);
 | 
				
			||||||
 | 
					const buttonText = ref('');
 | 
				
			||||||
 | 
					// 修改重新加载逻辑为页面刷新
 | 
				
			||||||
 | 
					const handleReload = () => {
 | 
				
			||||||
 | 
					  // 设置加载状态
 | 
				
			||||||
 | 
					  isReloading.value = true;
 | 
				
			||||||
 | 
					  buttonText.value = '加载中...';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  // 刷新当前页面
 | 
				
			||||||
 | 
					  window.location.reload();
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					const goToHome = () => {
 | 
				
			||||||
 | 
					  router.push('/'); // 假设主页面路由为根路径
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					const handleCombineAction = () => {
 | 
				
			||||||
 | 
					  actionStore.triggerCombine();
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// 实时时钟实现
 | 
					// 实时时钟实现
 | 
				
			||||||
const currentTime = ref('');
 | 
					const currentTime = ref('');
 | 
				
			||||||
| 
						 | 
					@ -184,6 +254,45 @@ const formatTime = () => {
 | 
				
			||||||
    hour12: false
 | 
					    hour12: false
 | 
				
			||||||
  });
 | 
					  });
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					// 锚点悬浮
 | 
				
			||||||
 | 
					// 悬浮状态
 | 
				
			||||||
 | 
					const hoverItemId = ref(null);
 | 
				
			||||||
 | 
					// 详情框状态
 | 
				
			||||||
 | 
					const showDetailModal = ref(false);
 | 
				
			||||||
 | 
					const currentDetailItem = ref(null);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// 处理鼠标悬浮
 | 
				
			||||||
 | 
					const handleMouseEnter = (id) => {
 | 
				
			||||||
 | 
					  hoverItemId.value = id;
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					const handleMouseLeave = () => {
 | 
				
			||||||
 | 
					  hoverItemId.value = null;
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// 打开详情框
 | 
				
			||||||
 | 
					const openDetailModal = (item) => {
 | 
				
			||||||
 | 
					  currentDetailItem.value = item;
 | 
				
			||||||
 | 
					  showDetailModal.value = true;
 | 
				
			||||||
 | 
					  // 阻止事件冒泡
 | 
				
			||||||
 | 
					  event.stopPropagation();
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// 关闭详情框
 | 
				
			||||||
 | 
					const closeDetailModal = () => {
 | 
				
			||||||
 | 
					  showDetailModal.value = false;
 | 
				
			||||||
 | 
					  currentDetailItem.value = null;
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// 点击空白处关闭详情框
 | 
				
			||||||
 | 
					const handleClickOutside = () => {
 | 
				
			||||||
 | 
					  if (showDetailModal.value) {
 | 
				
			||||||
 | 
					    closeDetailModal();
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
const handleSearch = () => {
 | 
					const handleSearch = () => {
 | 
				
			||||||
  if (inputValue.value === '南海争端系列舆情事件') {
 | 
					  if (inputValue.value === '南海争端系列舆情事件') {
 | 
				
			||||||
| 
						 | 
					@ -238,26 +347,26 @@ const handleInput = () => {
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
const mediaData = [
 | 
					const mediaData = [
 | 
				
			||||||
  { id: 1, type: '新闻媒体', name: '新浪军事', avatar: 'src/views/user/xinlang.png', number: '5005.8w' },
 | 
					  { id: 1, type: '新闻媒体', name: '新浪军事', avatar: 'src/views/user/xinlang.png', number: '5005.8w', transmit: '425', time: '2024.1.5', posts: '2.1w', atten: '98', interaction: '16.1w' },
 | 
				
			||||||
  { id: 2, type: '新闻媒体', name: '环球时报', avatar: 'src/views/user/huanqiu.png', number: '3126.1w' },
 | 
					  { id: 2, type: '新闻媒体', name: '环球时报', avatar: 'src/views/user/huanqiu.png', number: '3126.1w', transmit: '557', time: '2024.3.12', posts: '1.8w', atten: '76', interaction: '9.3w' },
 | 
				
			||||||
  { id: 3, type: '自媒体', name: '大侠啊啊啊啊', avatar: 'src/views/user/daxia.png', number: '288' },
 | 
					  { id: 3, type: '自媒体', name: '大侠啊啊啊啊', avatar: 'src/views/user/daxia.png', number: '288', transmit: '55', time: '2024.2.20', posts: '896', atten: '12', interaction: '3.2w' },
 | 
				
			||||||
  { id: 4, type: '自媒体', name: '外贸发布BBS', avatar: 'src/views/user/bbs.png', number: '1.3w' },
 | 
					  { id: 4, type: '自媒体', name: '外贸发布BBS', avatar: 'src/views/user/bbs.png', number: '1.3w', transmit: '68', time: '2024.4.5', posts: '562', atten: '8', interaction: '1.5w' },
 | 
				
			||||||
  { id: 5, type: '自媒体', name: '空天砺剑', avatar: 'src/views/user/kongtian.png', number: '516.5w' },
 | 
					  { id: 5, type: '自媒体', name: '空天砺剑', avatar: 'src/views/user/kongtian.png', number: '516.5w', transmit: '55', time: '2024.1.28', posts: '3.2w', atten: '156', interaction: '22.7w' },
 | 
				
			||||||
  { id: 6, type: '自媒体', name: '爱锤盾海桃-霆恩启副', avatar: 'src/views/user/ai.png', number: '223' },
 | 
					  { id: 6, type: '自媒体', name: '爱锤盾海桃-霆恩启副', avatar: 'src/views/user/ai.png', number: '223', transmit: '76', time: '2024.3.18', posts: '432', atten: '5', interaction: '896' },
 | 
				
			||||||
  { id: 7, type: '自媒体', name: '苍龙飞天79', avatar: 'src/views/user/79.png', number: '516.6w' },
 | 
					  { id: 7, type: '自媒体', name: '苍龙飞天79', avatar: 'src/views/user/79.png', number: '516.6w', transmit: '76', time: '2024.2.10', posts: '2.9w', atten: '142', interaction: '19.5w' },
 | 
				
			||||||
  { id: 8, type: '自媒体', name: '盖世英雄玉椒龙', avatar: 'src/views/user/gaishi.png', number: '42w' },
 | 
					  { id: 8, type: '自媒体', name: '盖世英雄玉椒龙', avatar: 'src/views/user/gaishi.png', number: '42w', transmit: '53', time: '2024.4.1', posts: '1.2w', atten: '67', interaction: '8.3w' },
 | 
				
			||||||
  { id: 9, type: '自媒体', name: '十八子91221', avatar: 'src/views/user/91221.png', number: '1947' },
 | 
					  { id: 9, type: '自媒体', name: '十八子91221', avatar: 'src/views/user/91221.png', number: '1947', transmit: '56', time: '2024.1.15', posts: '654', atten: '9', interaction: '2.1w' },
 | 
				
			||||||
  { id: 10, type: '自媒体', name: '江夏云飞', avatar: 'src/views/user/jiang.png', number: '1629' },
 | 
					  { id: 10, type: '自媒体', name: '江夏云飞', avatar: 'src/views/user/jiang.png', number: '1629', transmit: '33', time: '2024.3.25', posts: '321', atten: '4', interaction: '987' },
 | 
				
			||||||
  { id: 11, type: '自媒体', name: '唐宁20150903', avatar: 'src/views/user/tang.png', number: '25' },
 | 
					  { id: 11, type: '自媒体', name: '唐宁20150903', avatar: 'src/views/user/tang.png', number: '25', transmit: '43', time: '2024.2.5', posts: '128', atten: '2', interaction: '456' },
 | 
				
			||||||
  { id: 12, type: '自媒体', name: '钻石狗Boss', avatar: 'src/views/user/bbs.png', number: '1184' },
 | 
					  { id: 12, type: '自媒体', name: '钻石狗Boss', avatar: 'src/views/user/bbs.png', number: '1184', transmit: '76', time: '2024.4.12', posts: '512', atten: '7', interaction: '1.8w' },
 | 
				
			||||||
  { id: 13, type: '自媒体', name: '乐之567', avatar: 'src/views/user/567.png', number: '266' },
 | 
					  { id: 13, type: '自媒体', name: '乐之567', avatar: 'src/views/user/567.png', number: '266', transmit: '24', time: '2024.1.30', posts: '209', atten: '3', interaction: '654' },
 | 
				
			||||||
  { id: 14, type: '自媒体', name: '地瓜熊老六', avatar: 'src/views/user/lao.png', number: '667.5w' },
 | 
					  { id: 14, type: '自媒体', name: '地瓜熊老六', avatar: 'src/views/user/lao.png', number: '667.5w', transmit: '33', time: '2024.3.8', posts: '4.7w', atten: '210', interaction: '33.2w' },
 | 
				
			||||||
  { id: 15, type: '自媒体', name: 'CGTN记者团', avatar: 'src/views/user/cgtn.png', number: '322.1w' },
 | 
					  { id: 15, type: '自媒体', name: 'CGTN记者团', avatar: 'src/views/user/cgtn.png', number: '322.1w', transmit: '43', time: '2024.2.18', posts: '2.5w', atten: '105', interaction: '17.8w' },
 | 
				
			||||||
  { id: 16, type: '自媒体', name: '钱局长本人', avatar: 'src/views/user/qian.png', number: '40万' },
 | 
					  { id: 16, type: '自媒体', name: '钱局长本人', avatar: 'src/views/user/qian.png', number: '40万', transmit: '56', time: '2024.4.20', posts: '1.3w', atten: '58', interaction: '9.4w' },
 | 
				
			||||||
  { id: 17, type: '自媒体', name: '肥_谍_gg', avatar: 'src/views/user/gg.png', number: '245' },
 | 
					  { id: 17, type: '自媒体', name: '肥_谍_gg', avatar: 'src/views/user/gg.png', number: '245', transmit: '56', time: '2024.1.22', posts: '317', atten: '6', interaction: '1.2w' },
 | 
				
			||||||
  { id: 18, type: '自媒体', name: '深海一万米', avatar: 'src/views/user/shenhai.png', number: '126w' },
 | 
					  { id: 18, type: '自媒体', name: '深海一万米', avatar: 'src/views/user/shenhai.png', number: '126w', transmit: '44', time: '2024.3.5', posts: '8906', atten: '42', interaction: '6.7w' },
 | 
				
			||||||
  { id: 19, type: '政府官号', name: '中国海警', avatar: 'src/views/user/haijing.png', number: '80.9w' },
 | 
					  { id: 19, type: '政府官号', name: '中国海警', avatar: 'src/views/user/haijing.png', number: '80.9w', transmit: '45', time: '2024.2.8', posts: '1.1w', atten: '35', interaction: '5.2w' },
 | 
				
			||||||
  { id: 20, type: '政府官号', name: '平安泸县', avatar: 'src/views/user/luxian.png', number: '3.9w' },
 | 
					  { id: 20, type: '政府官号', name: '平安泸县', avatar: 'src/views/user/luxian.png', number: '3.9w', transmit: '45', time: '2024.4.15', posts: '4321', atten: '18', interaction: '2.9w' },
 | 
				
			||||||
];
 | 
					];
 | 
				
			||||||
const categoryData = {
 | 
					const categoryData = {
 | 
				
			||||||
  '全部': {
 | 
					  '全部': {
 | 
				
			||||||
| 
						 | 
					@ -505,6 +614,7 @@ const tooltipDdata1 = [
 | 
				
			||||||
    earler: '玉渊谭天',
 | 
					    earler: '玉渊谭天',
 | 
				
			||||||
    keyuser: '爱锤盾海桃-霆恩启副,钻石狗Boss,空天砺剑',
 | 
					    keyuser: '爱锤盾海桃-霆恩启副,钻石狗Boss,空天砺剑',
 | 
				
			||||||
    img: 'src/assets/images/mess/main1.png',
 | 
					    img: 'src/assets/images/mess/main1.png',
 | 
				
			||||||
 | 
					    imgdata: 'src/assets/images/mess/1top.png',
 | 
				
			||||||
    beforeimg: 'src/assets/images/logo/ruank1.png',
 | 
					    beforeimg: 'src/assets/images/logo/ruank1.png',
 | 
				
			||||||
    backimg: 'src/assets/images/logo/high3.png'
 | 
					    backimg: 'src/assets/images/logo/high3.png'
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
| 
						 | 
					@ -518,6 +628,7 @@ const tooltipDdata2 = [
 | 
				
			||||||
    earler: '玉渊谭天',
 | 
					    earler: '玉渊谭天',
 | 
				
			||||||
    keyuser: '爱锤盾海桃-霆恩启副,钻石狗Boss,空天砺剑',
 | 
					    keyuser: '爱锤盾海桃-霆恩启副,钻石狗Boss,空天砺剑',
 | 
				
			||||||
    img: 'src/assets/images/mess/main1.png',
 | 
					    img: 'src/assets/images/mess/main1.png',
 | 
				
			||||||
 | 
					    imgdata: 'src/assets/images/mess/1top.png',
 | 
				
			||||||
    beforeimg: 'src/assets/images/logo/ruank1.png',
 | 
					    beforeimg: 'src/assets/images/logo/ruank1.png',
 | 
				
			||||||
    backimg: 'src/assets/images/logo/high3.png'
 | 
					    backimg: 'src/assets/images/logo/high3.png'
 | 
				
			||||||
  },
 | 
					  },
 | 
				
			||||||
| 
						 | 
					@ -529,6 +640,7 @@ const tooltipDdata2 = [
 | 
				
			||||||
    earler: '玉渊谭天',
 | 
					    earler: '玉渊谭天',
 | 
				
			||||||
    keyuser: '爱锤盾海桃-霆恩启副,钻石狗Boss,空天砺剑',
 | 
					    keyuser: '爱锤盾海桃-霆恩启副,钻石狗Boss,空天砺剑',
 | 
				
			||||||
    img: 'src/assets/images/mess/main2.png',
 | 
					    img: 'src/assets/images/mess/main2.png',
 | 
				
			||||||
 | 
					    imgdata: 'src/assets/images/mess/2top.png',
 | 
				
			||||||
    beforeimg: 'src/assets/images/logo/ruank2.png',
 | 
					    beforeimg: 'src/assets/images/logo/ruank2.png',
 | 
				
			||||||
    backimg: 'src/assets/images/logo/high3.png'
 | 
					    backimg: 'src/assets/images/logo/high3.png'
 | 
				
			||||||
  },
 | 
					  },
 | 
				
			||||||
| 
						 | 
					@ -542,6 +654,7 @@ const tooltipDdata3 = [
 | 
				
			||||||
    earler: '玉渊谭天',
 | 
					    earler: '玉渊谭天',
 | 
				
			||||||
    keyuser: '爱锤盾海桃-霆恩启副,钻石狗Boss,空天砺剑',
 | 
					    keyuser: '爱锤盾海桃-霆恩启副,钻石狗Boss,空天砺剑',
 | 
				
			||||||
    img: 'src/assets/images/mess/main1.png',
 | 
					    img: 'src/assets/images/mess/main1.png',
 | 
				
			||||||
 | 
					    imgdata: 'src/assets/images/mess/1top.png',
 | 
				
			||||||
    beforeimg: 'src/assets/images/logo/ruank1.png',
 | 
					    beforeimg: 'src/assets/images/logo/ruank1.png',
 | 
				
			||||||
    backimg: 'src/assets/images/logo/high3.png'
 | 
					    backimg: 'src/assets/images/logo/high3.png'
 | 
				
			||||||
  },
 | 
					  },
 | 
				
			||||||
| 
						 | 
					@ -553,6 +666,7 @@ const tooltipDdata3 = [
 | 
				
			||||||
    earler: '玉渊谭天',
 | 
					    earler: '玉渊谭天',
 | 
				
			||||||
    keyuser: '爱锤盾海桃-霆恩启副,钻石狗Boss,空天砺剑',
 | 
					    keyuser: '爱锤盾海桃-霆恩启副,钻石狗Boss,空天砺剑',
 | 
				
			||||||
    img: 'src/assets/images/mess/main2.png',
 | 
					    img: 'src/assets/images/mess/main2.png',
 | 
				
			||||||
 | 
					    imgdata: 'src/assets/images/mess/2top.png',
 | 
				
			||||||
    beforeimg: 'src/assets/images/logo/ruank2.png',
 | 
					    beforeimg: 'src/assets/images/logo/ruank2.png',
 | 
				
			||||||
    backimg: 'src/assets/images/logo/high3.png'
 | 
					    backimg: 'src/assets/images/logo/high3.png'
 | 
				
			||||||
  },
 | 
					  },
 | 
				
			||||||
| 
						 | 
					@ -564,6 +678,7 @@ const tooltipDdata3 = [
 | 
				
			||||||
    earler: '新浪军事',
 | 
					    earler: '新浪军事',
 | 
				
			||||||
    keyuser: '环球时报, 苍龙飞天79, 外贸发布BBS, 新浪军事, 空天砺剑',
 | 
					    keyuser: '环球时报, 苍龙飞天79, 外贸发布BBS, 新浪军事, 空天砺剑',
 | 
				
			||||||
    img: 'src/assets/images/mess/main3.png',
 | 
					    img: 'src/assets/images/mess/main3.png',
 | 
				
			||||||
 | 
					    imgdata: 'src/assets/images/mess/3top.png',
 | 
				
			||||||
    beforeimg: 'src/assets/images/logo/ruank3.png',
 | 
					    beforeimg: 'src/assets/images/logo/ruank3.png',
 | 
				
			||||||
    backimg: 'src/assets/images/logo/high3.png'
 | 
					    backimg: 'src/assets/images/logo/high3.png'
 | 
				
			||||||
  },
 | 
					  },
 | 
				
			||||||
| 
						 | 
					@ -577,6 +692,7 @@ const tooltipDdata4 = [
 | 
				
			||||||
    earler: '玉渊谭天',
 | 
					    earler: '玉渊谭天',
 | 
				
			||||||
    keyuser: '爱锤盾海桃-霆恩启副,钻石狗Boss,空天砺剑',
 | 
					    keyuser: '爱锤盾海桃-霆恩启副,钻石狗Boss,空天砺剑',
 | 
				
			||||||
    img: 'src/assets/images/mess/main1.png',
 | 
					    img: 'src/assets/images/mess/main1.png',
 | 
				
			||||||
 | 
					    imgdata: 'src/assets/images/mess/1top.png',
 | 
				
			||||||
    beforeimg: 'src/assets/images/logo/ruank1.png',
 | 
					    beforeimg: 'src/assets/images/logo/ruank1.png',
 | 
				
			||||||
    backimg: 'src/assets/images/logo/high2.png'
 | 
					    backimg: 'src/assets/images/logo/high2.png'
 | 
				
			||||||
  },
 | 
					  },
 | 
				
			||||||
| 
						 | 
					@ -588,6 +704,7 @@ const tooltipDdata4 = [
 | 
				
			||||||
    earler: '玉渊谭天',
 | 
					    earler: '玉渊谭天',
 | 
				
			||||||
    keyuser: '爱锤盾海桃-霆恩启副,钻石狗Boss,空天砺剑',
 | 
					    keyuser: '爱锤盾海桃-霆恩启副,钻石狗Boss,空天砺剑',
 | 
				
			||||||
    img: 'src/assets/images/mess/main2.png',
 | 
					    img: 'src/assets/images/mess/main2.png',
 | 
				
			||||||
 | 
					    imgdata: 'src/assets/images/mess/2top.png',
 | 
				
			||||||
    beforeimg: 'src/assets/images/logo/ruank2.png',
 | 
					    beforeimg: 'src/assets/images/logo/ruank2.png',
 | 
				
			||||||
    backimg: 'src/assets/images/logo/high3.png'
 | 
					    backimg: 'src/assets/images/logo/high3.png'
 | 
				
			||||||
  },
 | 
					  },
 | 
				
			||||||
| 
						 | 
					@ -599,6 +716,7 @@ const tooltipDdata4 = [
 | 
				
			||||||
    earler: '新浪军事',
 | 
					    earler: '新浪军事',
 | 
				
			||||||
    keyuser: '环球时报, 苍龙飞天79, 外贸发布BBS, 新浪军事, 空天砺剑',
 | 
					    keyuser: '环球时报, 苍龙飞天79, 外贸发布BBS, 新浪军事, 空天砺剑',
 | 
				
			||||||
    img: 'src/assets/images/mess/main3.png',
 | 
					    img: 'src/assets/images/mess/main3.png',
 | 
				
			||||||
 | 
					    imgdata: 'src/assets/images/mess/3top.png',
 | 
				
			||||||
    beforeimg: 'src/assets/images/logo/ruank3.png',
 | 
					    beforeimg: 'src/assets/images/logo/ruank3.png',
 | 
				
			||||||
    backimg: 'src/assets/images/logo/high3.png'
 | 
					    backimg: 'src/assets/images/logo/high3.png'
 | 
				
			||||||
  },
 | 
					  },
 | 
				
			||||||
| 
						 | 
					@ -610,8 +728,9 @@ const tooltipDdata4 = [
 | 
				
			||||||
    earler: '白俄罗斯大宽',
 | 
					    earler: '白俄罗斯大宽',
 | 
				
			||||||
    keyuser: '盖世英雄玉椒龙, 肥_谍_gg, 钻石狗Boss, 外贸发布BBS, 新浪军事, 钱局长本人, 地瓜熊老六,唐宁20150903,空天砺剑',
 | 
					    keyuser: '盖世英雄玉椒龙, 肥_谍_gg, 钻石狗Boss, 外贸发布BBS, 新浪军事, 钱局长本人, 地瓜熊老六,唐宁20150903,空天砺剑',
 | 
				
			||||||
    img: 'src/assets/images/mess/main4.png',
 | 
					    img: 'src/assets/images/mess/main4.png',
 | 
				
			||||||
 | 
					    imgdata: 'src/assets/images/mess/4top.png',
 | 
				
			||||||
    beforeimg: 'src/assets/images/logo/ruank4.png',
 | 
					    beforeimg: 'src/assets/images/logo/ruank4.png',
 | 
				
			||||||
    backimg: 'src/assets/images/logo/high4.png'
 | 
					    backimg: 'src/assets/images/logo/high3.png'
 | 
				
			||||||
  },
 | 
					  },
 | 
				
			||||||
]
 | 
					]
 | 
				
			||||||
const tooltipDdata5 = [
 | 
					const tooltipDdata5 = [
 | 
				
			||||||
| 
						 | 
					@ -623,6 +742,7 @@ const tooltipDdata5 = [
 | 
				
			||||||
    earler: '玉渊谭天',
 | 
					    earler: '玉渊谭天',
 | 
				
			||||||
    keyuser: '爱锤盾海桃-霆恩启副,钻石狗Boss,空天砺剑',
 | 
					    keyuser: '爱锤盾海桃-霆恩启副,钻石狗Boss,空天砺剑',
 | 
				
			||||||
    img: 'src/assets/images/mess/main1.png',
 | 
					    img: 'src/assets/images/mess/main1.png',
 | 
				
			||||||
 | 
					    imgdata: 'src/assets/images/mess/1top.png',
 | 
				
			||||||
    beforeimg: 'src/assets/images/logo/ruank1.png',
 | 
					    beforeimg: 'src/assets/images/logo/ruank1.png',
 | 
				
			||||||
    backimg: 'src/assets/images/logo/high1.png'
 | 
					    backimg: 'src/assets/images/logo/high1.png'
 | 
				
			||||||
  },
 | 
					  },
 | 
				
			||||||
| 
						 | 
					@ -634,6 +754,7 @@ const tooltipDdata5 = [
 | 
				
			||||||
    earler: '白俄罗斯大宽',
 | 
					    earler: '白俄罗斯大宽',
 | 
				
			||||||
    keyuser: '苍龙飞天79,平安泸县,新浪军事',
 | 
					    keyuser: '苍龙飞天79,平安泸县,新浪军事',
 | 
				
			||||||
    img: 'src/assets/images/mess/main2.png',
 | 
					    img: 'src/assets/images/mess/main2.png',
 | 
				
			||||||
 | 
					    imgdata: 'src/assets/images/mess/2top.png',
 | 
				
			||||||
    beforeimg: 'src/assets/images/logo/ruank2.png',
 | 
					    beforeimg: 'src/assets/images/logo/ruank2.png',
 | 
				
			||||||
    backimg: 'src/assets/images/logo/high2.png'
 | 
					    backimg: 'src/assets/images/logo/high2.png'
 | 
				
			||||||
  },
 | 
					  },
 | 
				
			||||||
| 
						 | 
					@ -645,6 +766,7 @@ const tooltipDdata5 = [
 | 
				
			||||||
    earler: '新浪军事',
 | 
					    earler: '新浪军事',
 | 
				
			||||||
    keyuser: '环球时报, 苍龙飞天79, 外贸发布BBS, 新浪军事, 空天砺剑',
 | 
					    keyuser: '环球时报, 苍龙飞天79, 外贸发布BBS, 新浪军事, 空天砺剑',
 | 
				
			||||||
    img: 'src/assets/images/mess/main3.png',
 | 
					    img: 'src/assets/images/mess/main3.png',
 | 
				
			||||||
 | 
					    imgdata: 'src/assets/images/mess/3top.png',
 | 
				
			||||||
    beforeimg: 'src/assets/images/logo/ruank3.png',
 | 
					    beforeimg: 'src/assets/images/logo/ruank3.png',
 | 
				
			||||||
    backimg: 'src/assets/images/logo/high3.png'
 | 
					    backimg: 'src/assets/images/logo/high3.png'
 | 
				
			||||||
  },
 | 
					  },
 | 
				
			||||||
| 
						 | 
					@ -656,6 +778,7 @@ const tooltipDdata5 = [
 | 
				
			||||||
    earler: '白俄罗斯大宽',
 | 
					    earler: '白俄罗斯大宽',
 | 
				
			||||||
    keyuser: '盖世英雄玉椒龙, 肥_谍_gg, 钻石狗Boss, 外贸发布BBS, 新浪军事, 钱局长本人, 地瓜熊老六,唐宁20150903,空天砺剑',
 | 
					    keyuser: '盖世英雄玉椒龙, 肥_谍_gg, 钻石狗Boss, 外贸发布BBS, 新浪军事, 钱局长本人, 地瓜熊老六,唐宁20150903,空天砺剑',
 | 
				
			||||||
    img: 'src/assets/images/mess/main4.png',
 | 
					    img: 'src/assets/images/mess/main4.png',
 | 
				
			||||||
 | 
					    imgdata: 'src/assets/images/mess/4top.png',
 | 
				
			||||||
    beforeimg: 'src/assets/images/logo/ruank4.png',
 | 
					    beforeimg: 'src/assets/images/logo/ruank4.png',
 | 
				
			||||||
    backimg: 'src/assets/images/logo/high3.png'
 | 
					    backimg: 'src/assets/images/logo/high3.png'
 | 
				
			||||||
  },
 | 
					  },
 | 
				
			||||||
| 
						 | 
					@ -667,6 +790,7 @@ const tooltipDdata5 = [
 | 
				
			||||||
    earler: '今日俄罗斯RT',
 | 
					    earler: '今日俄罗斯RT',
 | 
				
			||||||
    keyuser: '新浪军事',
 | 
					    keyuser: '新浪军事',
 | 
				
			||||||
    img: 'src/assets/images/mess/main5.png',
 | 
					    img: 'src/assets/images/mess/main5.png',
 | 
				
			||||||
 | 
					    imgdata: 'src/assets/images/mess/5top.png',
 | 
				
			||||||
    beforeimg: 'src/assets/images/logo/ruank5.png',
 | 
					    beforeimg: 'src/assets/images/logo/ruank5.png',
 | 
				
			||||||
    backimg: 'src/assets/images/logo/high3.png'
 | 
					    backimg: 'src/assets/images/logo/high3.png'
 | 
				
			||||||
  },
 | 
					  },
 | 
				
			||||||
| 
						 | 
					@ -691,16 +815,7 @@ const selectItem = (item) => {
 | 
				
			||||||
// 数据切换方法
 | 
					// 数据切换方法
 | 
				
			||||||
const switchToNextDataSet = () => {
 | 
					const switchToNextDataSet = () => {
 | 
				
			||||||
  currentDataSetIndex.value++;
 | 
					  currentDataSetIndex.value++;
 | 
				
			||||||
  // 当数据索引超过最后一个数据集时重置
 | 
					 | 
				
			||||||
  if (currentDataSetIndex.value >= dataSets.value.length) {
 | 
					 | 
				
			||||||
    currentDataSetIndex.value = 0;
 | 
					 | 
				
			||||||
  }
 | 
					 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					 | 
				
			||||||
// 活跃预警事件计数器 (6秒加1,到5停止)
 | 
					 | 
				
			||||||
const activeWarningCount = ref(0);
 | 
					 | 
				
			||||||
// 高风险事件计数器 (24秒后加1,再6秒后加1停止)
 | 
					 | 
				
			||||||
const highRiskCount = ref(0);
 | 
					 | 
				
			||||||
// 提取常量便于维护
 | 
					// 提取常量便于维护
 | 
				
			||||||
const TIMER = {
 | 
					const TIMER = {
 | 
				
			||||||
  ACTIVE_WARNING_INTERVAL: 12000, // 活跃预警间隔(ms)
 | 
					  ACTIVE_WARNING_INTERVAL: 12000, // 活跃预警间隔(ms)
 | 
				
			||||||
| 
						 | 
					@ -756,19 +871,34 @@ const startDataSwitchTimer = () => {
 | 
				
			||||||
  }, TIMER.DATA_SWITCH_DURATION);
 | 
					  }, TIMER.DATA_SWITCH_DURATION);
 | 
				
			||||||
  timers.push(interval, timeout);
 | 
					  timers.push(interval, timeout);
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					 
 | 
				
			||||||
 | 
					// 添加组件引用
 | 
				
			||||||
 | 
					const appRef = ref(null);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// 修改定位按钮点击事件
 | 
				
			||||||
 | 
					const handleLocationClick = (itemId) => {
 | 
				
			||||||
 | 
					  // 设置slider值为30并触发定位
 | 
				
			||||||
 | 
					  state.sliderValue = 30;
 | 
				
			||||||
 | 
					  sliderChange(30);
 | 
				
			||||||
 | 
					  
 | 
				
			||||||
 | 
					  // 使用传入的itemId进行高亮
 | 
				
			||||||
 | 
					  setTimeout(() => {
 | 
				
			||||||
 | 
					    highlightNode(itemId);
 | 
				
			||||||
 | 
					  }, 500);
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
onMounted(() => {
 | 
					onMounted(() => {
 | 
				
			||||||
  // ... 现有代码 ...
 | 
					  // ... 现有代码 ...
 | 
				
			||||||
  startActiveWarningTimer();
 | 
					  startActiveWarningTimer();
 | 
				
			||||||
  startHighRiskTimer();
 | 
					  startHighRiskTimer();
 | 
				
			||||||
  startDataSwitchTimer();
 | 
					  startDataSwitchTimer();
 | 
				
			||||||
 | 
					  document.addEventListener('click', handleClickOutside);
 | 
				
			||||||
 // 初始化时钟并每秒更新
 | 
					  // 初始化时钟并每秒更新
 | 
				
			||||||
 currentTime.value = formatTime();
 | 
					  currentTime.value = formatTime();
 | 
				
			||||||
  const clockTimer = setInterval(() => {
 | 
					  const clockTimer = setInterval(() => {
 | 
				
			||||||
    currentTime.value = formatTime();
 | 
					    currentTime.value = formatTime();
 | 
				
			||||||
  }, 1000);
 | 
					  }, 1000);
 | 
				
			||||||
  
 | 
					
 | 
				
			||||||
  // 将时钟定时器添加到现有定时器管理数组
 | 
					  // 将时钟定时器添加到现有定时器管理数组
 | 
				
			||||||
  timers.push(clockTimer);
 | 
					  timers.push(clockTimer);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -788,7 +918,6 @@ onMounted(() => {
 | 
				
			||||||
      grid: {
 | 
					      grid: {
 | 
				
			||||||
        left: '3%',
 | 
					        left: '3%',
 | 
				
			||||||
        right: '4%',
 | 
					        right: '4%',
 | 
				
			||||||
        bottom: '3%',
 | 
					 | 
				
			||||||
        containLabel: true
 | 
					        containLabel: true
 | 
				
			||||||
      },
 | 
					      },
 | 
				
			||||||
      toolbox: {
 | 
					      toolbox: {
 | 
				
			||||||
| 
						 | 
					@ -798,8 +927,15 @@ onMounted(() => {
 | 
				
			||||||
      },
 | 
					      },
 | 
				
			||||||
      xAxis: {
 | 
					      xAxis: {
 | 
				
			||||||
        type: 'category',
 | 
					        type: 'category',
 | 
				
			||||||
        boundaryGap: false,//坐标轴两边留白
 | 
					        boundaryGap: true,//坐标轴两边留白
 | 
				
			||||||
        data: ['1-4', '2.8', '3-6', '4-7', '5-8', '5-29', '6-20'],
 | 
					        data: ['6.29', '6.30', '7-1', '7-2', '7-3', '7-4', '7-5'],
 | 
				
			||||||
 | 
					        name: '日期',
 | 
				
			||||||
 | 
					        nameLocation: 'middle',
 | 
				
			||||||
 | 
					        nameGap: 20,
 | 
				
			||||||
 | 
					        nameTextStyle: {
 | 
				
			||||||
 | 
					          color: '#606266',
 | 
				
			||||||
 | 
					          fontSize: 12
 | 
				
			||||||
 | 
					        },
 | 
				
			||||||
        axisLabel: { //坐标轴刻度标签的相关设置。
 | 
					        axisLabel: { //坐标轴刻度标签的相关设置。
 | 
				
			||||||
          interval: 0,//设置为 1,表示『隔一个标签显示一个标签』
 | 
					          interval: 0,//设置为 1,表示『隔一个标签显示一个标签』
 | 
				
			||||||
          //	margin:15,
 | 
					          //	margin:15,
 | 
				
			||||||
| 
						 | 
					@ -844,7 +980,7 @@ onMounted(() => {
 | 
				
			||||||
          }
 | 
					          }
 | 
				
			||||||
        },
 | 
					        },
 | 
				
			||||||
        splitLine: { //坐标轴在 grid 区域中的分隔线。
 | 
					        splitLine: { //坐标轴在 grid 区域中的分隔线。
 | 
				
			||||||
          show: true,
 | 
					          show: false,
 | 
				
			||||||
          lineStyle: {
 | 
					          lineStyle: {
 | 
				
			||||||
            color: '#E5E9ED',
 | 
					            color: '#E5E9ED',
 | 
				
			||||||
            // 	opacity:0.1
 | 
					            // 	opacity:0.1
 | 
				
			||||||
| 
						 | 
					@ -855,6 +991,7 @@ onMounted(() => {
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
          type: 'value',
 | 
					          type: 'value',
 | 
				
			||||||
          splitNumber: 5,
 | 
					          splitNumber: 5,
 | 
				
			||||||
 | 
					          name: '事件数量',
 | 
				
			||||||
          axisLabel: {
 | 
					          axisLabel: {
 | 
				
			||||||
            textStyle: {
 | 
					            textStyle: {
 | 
				
			||||||
              color: '#a8aab0',
 | 
					              color: '#a8aab0',
 | 
				
			||||||
| 
						 | 
					@ -933,7 +1070,11 @@ onMounted(() => {
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
});
 | 
					});
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// 定位事件(阻止冒泡)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
onUnmounted(() => {
 | 
					onUnmounted(() => {
 | 
				
			||||||
 | 
					  document.removeEventListener('click', handleClickOutside);
 | 
				
			||||||
  // 统一清理所有定时器
 | 
					  // 统一清理所有定时器
 | 
				
			||||||
  // 设置每6秒切换一次数据
 | 
					  // 设置每6秒切换一次数据
 | 
				
			||||||
  const dataSwitchTimer = setInterval(switchToNextDataSet, 6000);
 | 
					  const dataSwitchTimer = setInterval(switchToNextDataSet, 6000);
 | 
				
			||||||
| 
						 | 
					@ -988,7 +1129,7 @@ onUnmounted(() => {
 | 
				
			||||||
  letter-spacing: 9.5%;
 | 
					  letter-spacing: 9.5%;
 | 
				
			||||||
  color: #1EA0FD;
 | 
					  color: #1EA0FD;
 | 
				
			||||||
  float: right;
 | 
					  float: right;
 | 
				
			||||||
  margin-right: 90px;
 | 
					  margin-right: 80px;
 | 
				
			||||||
  margin-top: -148px;
 | 
					  margin-top: -148px;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1132,7 +1273,7 @@ onUnmounted(() => {
 | 
				
			||||||
  height: 682px;
 | 
					  height: 682px;
 | 
				
			||||||
  margin-left: 530px;
 | 
					  margin-left: 530px;
 | 
				
			||||||
  margin-top: -900px;
 | 
					  margin-top: -900px;
 | 
				
			||||||
  margin-bottom: 200px;
 | 
					  margin-bottom: 30px;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
.hiden {
 | 
					.hiden {
 | 
				
			||||||
| 
						 | 
					@ -1164,6 +1305,30 @@ onUnmounted(() => {
 | 
				
			||||||
  margin-bottom: 15px;
 | 
					  margin-bottom: 15px;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					.reload-button {
 | 
				
			||||||
 | 
					  display: flex;
 | 
				
			||||||
 | 
					  align-items: center;
 | 
				
			||||||
 | 
					  justify-content: center;
 | 
				
			||||||
 | 
					  gap: 8px;
 | 
				
			||||||
 | 
					  padding: 6px 12px;
 | 
				
			||||||
 | 
					  background-color: #091f35;
 | 
				
			||||||
 | 
					  color: #FFFFFF;
 | 
				
			||||||
 | 
					  border: none;
 | 
				
			||||||
 | 
					  border-radius: 8px;
 | 
				
			||||||
 | 
					  cursor: pointer;
 | 
				
			||||||
 | 
					  font-family: OPPOSans;
 | 
				
			||||||
 | 
					  font-size: 12px;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					.reload-button img {
 | 
				
			||||||
 | 
					  width: 16px;
 | 
				
			||||||
 | 
					  height: 16px;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					.reload-button:hover {
 | 
				
			||||||
 | 
					  background-color: #236291;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
.right-container {
 | 
					.right-container {
 | 
				
			||||||
  margin-right: 16px;
 | 
					  margin-right: 16px;
 | 
				
			||||||
  display: flex;
 | 
					  display: flex;
 | 
				
			||||||
| 
						 | 
					@ -1242,6 +1407,7 @@ onUnmounted(() => {
 | 
				
			||||||
  color: #FFFFFF;
 | 
					  color: #FFFFFF;
 | 
				
			||||||
  margin-top: 15px;
 | 
					  margin-top: 15px;
 | 
				
			||||||
  margin-left: 30px;
 | 
					  margin-left: 30px;
 | 
				
			||||||
 | 
					  border-radius: 8px;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
.suggestion li img {
 | 
					.suggestion li img {
 | 
				
			||||||
| 
						 | 
					@ -1251,10 +1417,14 @@ onUnmounted(() => {
 | 
				
			||||||
  border-radius: 4px;
 | 
					  border-radius: 4px;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					.suggestion li:hover {
 | 
				
			||||||
 | 
					  background-image: linear-gradient(to bottom, #07293D, #050B23);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
.suggestion-containner {
 | 
					.suggestion-containner {
 | 
				
			||||||
  margin-left: 10px;
 | 
					  margin-left: 10px;
 | 
				
			||||||
  margin-top: 15px;
 | 
					  margin-top: 15px;
 | 
				
			||||||
  width: 360px;
 | 
					  width: 400px;
 | 
				
			||||||
  height: 480px;
 | 
					  height: 480px;
 | 
				
			||||||
  max-height: 380px;
 | 
					  max-height: 380px;
 | 
				
			||||||
  /* 可根据需要调整最大高度 */
 | 
					  /* 可根据需要调整最大高度 */
 | 
				
			||||||
| 
						 | 
					@ -1462,6 +1632,10 @@ onUnmounted(() => {
 | 
				
			||||||
  -webkit-backdrop-filter: blur(4px);
 | 
					  -webkit-backdrop-filter: blur(4px);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					.containner3-img {
 | 
				
			||||||
 | 
					  margin-top: 70px;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
.focus-events {
 | 
					.focus-events {
 | 
				
			||||||
  width: 440px;
 | 
					  width: 440px;
 | 
				
			||||||
  height: 200px;
 | 
					  height: 200px;
 | 
				
			||||||
| 
						 | 
					@ -1691,9 +1865,225 @@ onUnmounted(() => {
 | 
				
			||||||
  justify-content: center;
 | 
					  justify-content: center;
 | 
				
			||||||
  align-items: center;
 | 
					  align-items: center;
 | 
				
			||||||
  color: #C6E3F5;
 | 
					  color: #C6E3F5;
 | 
				
			||||||
  width: 200px;
 | 
					  width: 590px;
 | 
				
			||||||
  list-style-type: none;
 | 
					  list-style-type: none;
 | 
				
			||||||
  flex: 1;
 | 
					  flex: 1;
 | 
				
			||||||
  min-width: 0;
 | 
					  min-width: 0;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					.timer {
 | 
				
			||||||
 | 
					  color: #C6E3F5;
 | 
				
			||||||
 | 
					  font-family: LCD2;
 | 
				
			||||||
 | 
					  font-size: 20px;
 | 
				
			||||||
 | 
					  font-style: normal;
 | 
				
			||||||
 | 
					  font-weight: 400;
 | 
				
			||||||
 | 
					  line-height: normal;
 | 
				
			||||||
 | 
					  display: flex;
 | 
				
			||||||
 | 
					  flex-direction: row;
 | 
				
			||||||
 | 
					  float: right;
 | 
				
			||||||
 | 
					  margin-right: 50px;
 | 
				
			||||||
 | 
					  margin-top: 20px;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/* 悬浮效果 */
 | 
				
			||||||
 | 
					.hover-item {
 | 
				
			||||||
 | 
					  background-color: rgba(240, 245, 255, 0.8);
 | 
				
			||||||
 | 
					  border-radius: 4px;
 | 
				
			||||||
 | 
					  cursor: pointer;
 | 
				
			||||||
 | 
					  transform: scale(1.02);
 | 
				
			||||||
 | 
					  transition: all 0.2s ease;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/* 详情框样式 */
 | 
				
			||||||
 | 
					.detail-modal-overlay {
 | 
				
			||||||
 | 
					  position: fixed;
 | 
				
			||||||
 | 
					  top: 0;
 | 
				
			||||||
 | 
					  left: 0;
 | 
				
			||||||
 | 
					  right: 0;
 | 
				
			||||||
 | 
					  bottom: 0;
 | 
				
			||||||
 | 
					  background-color: rgba(0, 0, 0, 0.5);
 | 
				
			||||||
 | 
					  display: flex;
 | 
				
			||||||
 | 
					  justify-content: center;
 | 
				
			||||||
 | 
					  align-items: center;
 | 
				
			||||||
 | 
					  z-index: 1000;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					.detail-modal {
 | 
				
			||||||
 | 
					  background-image: linear-gradient(to bottom, #050B23, #07293D);
 | 
				
			||||||
 | 
					  color: #E1F4FF;
 | 
				
			||||||
 | 
					  width: 540px;
 | 
				
			||||||
 | 
					  height: 660px;
 | 
				
			||||||
 | 
					  border-radius: 8px;
 | 
				
			||||||
 | 
					  box-shadow: 0 4px 20px rgba(0, 0, 0, 0.15);
 | 
				
			||||||
 | 
					  overflow: hidden;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					.modal-header {
 | 
				
			||||||
 | 
					  padding: 15px 20px;
 | 
				
			||||||
 | 
					  background-color: #f5f7fa;
 | 
				
			||||||
 | 
					  border-bottom: 1px solid #e5e9f2;
 | 
				
			||||||
 | 
					  display: flex;
 | 
				
			||||||
 | 
					  justify-content: space-between;
 | 
				
			||||||
 | 
					  align-items: center;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					.modal-header h3 {
 | 
				
			||||||
 | 
					  margin: 0;
 | 
				
			||||||
 | 
					  color: #1d2129;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					.close-btn {
 | 
				
			||||||
 | 
					  background: none;
 | 
				
			||||||
 | 
					  border: none;
 | 
				
			||||||
 | 
					  font-size: 20px;
 | 
				
			||||||
 | 
					  cursor: pointer;
 | 
				
			||||||
 | 
					  color: #86909c;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					.modal-body {
 | 
				
			||||||
 | 
					  display: flex;
 | 
				
			||||||
 | 
					  gap: 20px;
 | 
				
			||||||
 | 
					  width: 668px;
 | 
				
			||||||
 | 
					  height: 580px;
 | 
				
			||||||
 | 
					  border-image: linear-gradient(to bottom, #0090FF, #0090FF00)1;
 | 
				
			||||||
 | 
					  background-image: linear-gradient(to bottom, #050B23, #07293D);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					.large-avatar {
 | 
				
			||||||
 | 
					  width: 80px;
 | 
				
			||||||
 | 
					  height: 80px;
 | 
				
			||||||
 | 
					  border-radius: 50%;
 | 
				
			||||||
 | 
					  margin: 10px;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					.info-container {
 | 
				
			||||||
 | 
					  margin-left: 20px;
 | 
				
			||||||
 | 
					  margin-top: 30px;
 | 
				
			||||||
 | 
					  flex: 1;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					.info-container p {
 | 
				
			||||||
 | 
					  color: #C6E3F5;
 | 
				
			||||||
 | 
					  font-family: "PingFang SC";
 | 
				
			||||||
 | 
					  font-size: 16px;
 | 
				
			||||||
 | 
					  font-style: normal;
 | 
				
			||||||
 | 
					  font-weight: 200;
 | 
				
			||||||
 | 
					  line-height: normal;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					.cancel-btn {
 | 
				
			||||||
 | 
					  padding: 8px 16px;
 | 
				
			||||||
 | 
					  background-color: #0066ff;
 | 
				
			||||||
 | 
					  color: white;
 | 
				
			||||||
 | 
					  border: none;
 | 
				
			||||||
 | 
					  border-radius: 4px;
 | 
				
			||||||
 | 
					  cursor: pointer;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					.cancel-btn:hover {
 | 
				
			||||||
 | 
					  background-color: #0052cc;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					.info-container {
 | 
				
			||||||
 | 
					  flex: 1;
 | 
				
			||||||
 | 
					  display: flex;
 | 
				
			||||||
 | 
					  gap: 30px;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					.info-column {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  flex: 1;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					.info-column p {
 | 
				
			||||||
 | 
					  margin: 12px 0;
 | 
				
			||||||
 | 
					  color: #C6E3F5;
 | 
				
			||||||
 | 
					  font-family: "PingFang SC";
 | 
				
			||||||
 | 
					  font-size: 16px;
 | 
				
			||||||
 | 
					  font-style: normal;
 | 
				
			||||||
 | 
					  font-weight: 200;
 | 
				
			||||||
 | 
					  line-height: normal;
 | 
				
			||||||
 | 
					  line-height: 1.5;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					.info-coment {
 | 
				
			||||||
 | 
					  margin-top: 20px;
 | 
				
			||||||
 | 
					  color: #C6E3F5;
 | 
				
			||||||
 | 
					  font-family: "PingFang SC";
 | 
				
			||||||
 | 
					  font-size: 16px;
 | 
				
			||||||
 | 
					  font-style: normal;
 | 
				
			||||||
 | 
					  font-weight: 200;
 | 
				
			||||||
 | 
					  line-height: normal;
 | 
				
			||||||
 | 
					  line-height: 1.5;
 | 
				
			||||||
 | 
					  margin-left: 20px;
 | 
				
			||||||
 | 
					  padding: 15px;
 | 
				
			||||||
 | 
					  background-image: linear-gradient(to bottom, #0a1338, #07293D);
 | 
				
			||||||
 | 
					  border-radius: 8px;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					.post-list-container {
 | 
				
			||||||
 | 
					  max-height: 370px;
 | 
				
			||||||
 | 
					  /* 设置最大高度,超出部分将被隐藏 */
 | 
				
			||||||
 | 
					  overflow-y: auto;
 | 
				
			||||||
 | 
					  /* 垂直方向溢出时显示滚动条 */
 | 
				
			||||||
 | 
					  margin-top: 10px;
 | 
				
			||||||
 | 
					  padding-right: 5px;
 | 
				
			||||||
 | 
					  /* 避免滚动条遮挡内容 */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/* 贴文项样式 */
 | 
				
			||||||
 | 
					.post-item {
 | 
				
			||||||
 | 
					  padding: 12px;
 | 
				
			||||||
 | 
					  margin-bottom: 10px;
 | 
				
			||||||
 | 
					  background-image: linear-gradient(to bottom, #050B23, #07293D);
 | 
				
			||||||
 | 
					  border-radius: 6px;
 | 
				
			||||||
 | 
					  box-shadow: 0 1px 3px rgba(0, 0, 0, 0.05);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					.post-item:last-child {
 | 
				
			||||||
 | 
					  margin-bottom: 0;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					.post-content {
 | 
				
			||||||
 | 
					  margin: 0 0 8px 0;
 | 
				
			||||||
 | 
					  line-height: 1.5;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					.post-meta {
 | 
				
			||||||
 | 
					  margin: 0;
 | 
				
			||||||
 | 
					  font-size: 12px;
 | 
				
			||||||
 | 
					  color: #000000;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/* 自定义滚动条样式(可选) */
 | 
				
			||||||
 | 
					.post-list-container::-webkit-scrollbar {
 | 
				
			||||||
 | 
					  width: 6px;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					.post-list-container::-webkit-scrollbar-thumb {
 | 
				
			||||||
 | 
					  /* background-color: #ffffff; */
 | 
				
			||||||
 | 
					  border-radius: 3px;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					.back-home-btn {
 | 
				
			||||||
 | 
					  padding: 8px 16px;
 | 
				
			||||||
 | 
					  background-color: #060427;
 | 
				
			||||||
 | 
					  /* Vue绿色主题 */
 | 
				
			||||||
 | 
					  color: white;
 | 
				
			||||||
 | 
					  border: none;
 | 
				
			||||||
 | 
					  border-radius: 4px;
 | 
				
			||||||
 | 
					  cursor: pointer;
 | 
				
			||||||
 | 
					  font-size: 14px;
 | 
				
			||||||
 | 
					  transition: background-color 0.3s;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					.back-home-btn:hover {
 | 
				
			||||||
 | 
					  background-color: #04142166;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					.back-home-btn:active {
 | 
				
			||||||
 | 
					  background-color: #0a1949;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
</style>
 | 
					</style>
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -58,7 +58,8 @@
 | 
				
			||||||
            style=" width: 180px;margin-top: -70px;margin-right: 50px;float: right;">
 | 
					            style=" width: 180px;margin-top: -70px;margin-right: 50px;float: right;">
 | 
				
			||||||
          <img src="../assets/images/percent/1-1-1.png" alt="" style="margin-left: 45px;">
 | 
					          <img src="../assets/images/percent/1-1-1.png" alt="" style="margin-left: 45px;">
 | 
				
			||||||
          <button 
 | 
					          <button 
 | 
				
			||||||
        class="mao-button" 
 | 
					        class="mao-button"
 | 
				
			||||||
 | 
					        :class="{ active: route.path === '/Main' }"
 | 
				
			||||||
        @click="goToPage('/Main')"
 | 
					        @click="goToPage('/Main')"
 | 
				
			||||||
      >
 | 
					      >
 | 
				
			||||||
        <img src="../assets/images/logo/mao.png" alt="" style="
 | 
					        <img src="../assets/images/logo/mao.png" alt="" style="
 | 
				
			||||||
| 
						 | 
					@ -102,6 +103,8 @@
 | 
				
			||||||
<script setup>
 | 
					<script setup>
 | 
				
			||||||
import { useRouter } from 'vue-router';
 | 
					import { useRouter } from 'vue-router';
 | 
				
			||||||
import { ref, onMounted,onUnmounted } from 'vue';
 | 
					import { ref, onMounted,onUnmounted } from 'vue';
 | 
				
			||||||
 | 
					import { useRoute } from 'vue-router';
 | 
				
			||||||
 | 
					const route = useRoute();
 | 
				
			||||||
import { ElLoading } from 'element-plus';
 | 
					import { ElLoading } from 'element-plus';
 | 
				
			||||||
// 实时时钟实现
 | 
					// 实时时钟实现
 | 
				
			||||||
const currentTime = ref('');
 | 
					const currentTime = ref('');
 | 
				
			||||||
| 
						 | 
					@ -220,6 +223,26 @@ onUnmounted(() => {
 | 
				
			||||||
});
 | 
					});
 | 
				
			||||||
</script>
 | 
					</script>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					<style scoped>
 | 
				
			||||||
 | 
					.mao-button {
 | 
				
			||||||
 | 
					  /* 保留原有样式 */
 | 
				
			||||||
 | 
					  transition: all 0.3s ease;
 | 
				
			||||||
 | 
					  border-color: red;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					.mao-button.active {
 | 
				
			||||||
 | 
					  background-color: #409eff; /* 蓝色高亮 */
 | 
				
			||||||
 | 
					  color: rgb(252, 5, 5);
 | 
				
			||||||
 | 
					  box-shadow: 0 0 8px rgba(64, 158, 255, 0.6);
 | 
				
			||||||
 | 
					  border-color: #f80202;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					.mao-button:hover:not(.active) {
 | 
				
			||||||
 | 
					  border-color: #409eff;
 | 
				
			||||||
 | 
					  color: #409eff;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					</style>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
<style scoped>
 | 
					<style scoped>
 | 
				
			||||||
html, body {
 | 
					html, body {
 | 
				
			||||||
  margin: 0;
 | 
					  margin: 0;
 | 
				
			||||||
| 
						 | 
					@ -329,5 +352,22 @@ margin-top: -148px;
 | 
				
			||||||
  /* 添加 z-index 属性 */
 | 
					  /* 添加 z-index 属性 */
 | 
				
			||||||
  position: relative; 
 | 
					  position: relative; 
 | 
				
			||||||
  z-index: 1001; 
 | 
					  z-index: 1001; 
 | 
				
			||||||
 | 
					  animation: breathe 2s infinite ease-in-out;
 | 
				
			||||||
 | 
					  
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					/* 定义呼吸效果关键帧 */
 | 
				
			||||||
 | 
					@keyframes breathe {
 | 
				
			||||||
 | 
					  0% {
 | 
				
			||||||
 | 
					    opacity: 0.4;
 | 
				
			||||||
 | 
					    transform: scale(0.9);
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					  50% {
 | 
				
			||||||
 | 
					    opacity: 1;
 | 
				
			||||||
 | 
					    transform: scale(1.15);
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					  100% {
 | 
				
			||||||
 | 
					    opacity: 0.4;
 | 
				
			||||||
 | 
					    transform: scale(0.9);
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
</style>
 | 
					</style>
 | 
				
			||||||
							
								
								
									
										4
									
								
								src/views/visualize/data/32中国海警首次登检菲律宾运补船只.txt
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										4
									
								
								src/views/visualize/data/32中国海警首次登检菲律宾运补船只.txt
									
									
									
									
									
										Normal file
									
								
							| 
						 | 
					@ -0,0 +1,4 @@
 | 
				
			||||||
 | 
					选择时间步长: 1D
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					热度字典:
 | 
				
			||||||
 | 
					{'2024-06-19 15:57': 2280, '2024-06-20 15:57': 612, '2024-06-21 15:57': 261, '2024-06-22 15:57': 258, '2024-06-23 15:57': 110, '2024-06-24 15:57': 80, '2024-06-25 15:57': 51, '2024-06-26 15:57': 18, '2024-06-27 15:57': 10, '2024-06-28 15:57': 10, '2024-06-29 15:57': 2, '2024-06-30 15:57': 2, '2024-07-01 15:57': 2}
 | 
				
			||||||
							
								
								
									
										4
									
								
								src/views/visualize/data/33中方回应菲称我海警挥舞刀具.txt
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										4
									
								
								src/views/visualize/data/33中方回应菲称我海警挥舞刀具.txt
									
									
									
									
									
										Normal file
									
								
							| 
						 | 
					@ -0,0 +1,4 @@
 | 
				
			||||||
 | 
					选择时间步长: 12H
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					热度字典:
 | 
				
			||||||
 | 
					{'2024-06-19 21:36': 416, '2024-06-20 09:36': 796, '2024-06-20 21:36': 403, '2024-06-21 09:36': 236, '2024-06-21 21:36': 33, '2024-06-22 09:36': 29, '2024-06-22 21:36': 11, '2024-06-23 09:36': 10, '2024-06-23 21:36': 5, '2024-06-24 09:36': 10, '2024-06-24 21:36': 7, '2024-06-25 09:36': 1, '2024-06-25 21:36': 4, '2024-06-26 09:36': 6, '2024-06-26 21:36': 5, '2024-06-27 09:36': 5, '2024-06-27 21:36': 2, '2024-06-28 09:36': 1, '2024-06-28 21:36': 0, '2024-06-29 09:36': 1, '2024-06-29 21:36': 1}
 | 
				
			||||||
							
								
								
									
										4
									
								
								src/views/visualize/data/34中国海警夺回菲方盗窃赃物.txt
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										4
									
								
								src/views/visualize/data/34中国海警夺回菲方盗窃赃物.txt
									
									
									
									
									
										Normal file
									
								
							| 
						 | 
					@ -0,0 +1,4 @@
 | 
				
			||||||
 | 
					选择时间步长: 1D
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					热度字典:
 | 
				
			||||||
 | 
					{'2024-06-20 13:08': 1711, '2024-06-21 13:08': 294, '2024-06-22 13:08': 49, '2024-06-23 13:08': 19, '2024-06-24 13:08': 6, '2024-06-25 13:08': 5, '2024-06-26 13:08': 1, '2024-06-27 13:08': 0, '2024-06-28 13:08': 0, '2024-06-29 13:08': 0, '2024-06-30 13:08': 1, '2024-07-01 13:08': 1}
 | 
				
			||||||
							
								
								
									
										4
									
								
								src/views/visualize/data/35菲自曝被中国海警缴枪的是顶级特种部队.txt
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										4
									
								
								src/views/visualize/data/35菲自曝被中国海警缴枪的是顶级特种部队.txt
									
									
									
									
									
										Normal file
									
								
							| 
						 | 
					@ -0,0 +1,4 @@
 | 
				
			||||||
 | 
					选择时间步长: 12H
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					热度字典:
 | 
				
			||||||
 | 
					{'2024-06-22 17:10': 10, '2024-06-23 05:10': 1255, '2024-06-23 17:10': 801, '2024-06-24 05:10': 281, '2024-06-24 17:10': 48, '2024-06-25 05:10': 65, '2024-06-25 17:10': 30, '2024-06-26 05:10': 32, '2024-06-26 17:10': 16, '2024-06-27 05:10': 7, '2024-06-27 17:10': 5, '2024-06-28 05:10': 2, '2024-06-28 17:10': 1, '2024-06-29 05:10': 1, '2024-06-29 17:10': 1, '2024-06-30 05:10': 4, '2024-06-30 17:10': 1, '2024-07-01 05:10': 4}
 | 
				
			||||||
							
								
								
									
										4
									
								
								src/views/visualize/data/36菲律宾希望与中国就南海问题进行对话.txt
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										4
									
								
								src/views/visualize/data/36菲律宾希望与中国就南海问题进行对话.txt
									
									
									
									
									
										Normal file
									
								
							| 
						 | 
					@ -0,0 +1,4 @@
 | 
				
			||||||
 | 
					选择时间步长: 6H
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					热度字典:
 | 
				
			||||||
 | 
					{'2024-06-25 15:05': 169, '2024-06-25 21:05': 186, '2024-06-26 03:05': 31, '2024-06-26 09:05': 8, '2024-06-26 15:05': 1, '2024-06-26 21:05': 2, '2024-06-27 03:05': 1, '2024-06-27 09:05': 0, '2024-06-27 15:05': 1, '2024-06-27 21:05': 0, '2024-06-28 03:05': 0, '2024-06-28 09:05': 0, '2024-06-28 15:05': 0, '2024-06-28 21:05': 0, '2024-06-29 03:05': 0, '2024-06-29 09:05': 0, '2024-06-29 15:05': 0, '2024-06-29 21:05': 0, '2024-06-30 03:05': 0, '2024-06-30 09:05': 1}
 | 
				
			||||||
		Loading…
	
		Reference in New Issue
	
	Block a user