This commit is contained in:
chatgpt-yunju 2025-07-04 08:50:04 +08:00
parent 14f5f9b9cb
commit e09a1069a6
4 changed files with 273 additions and 625 deletions

Binary file not shown.

After

Width:  |  Height:  |  Size: 156 KiB

View File

@ -2,7 +2,7 @@
<div>
<!-- 1. 顶部介绍图片 -->
<div>
<img src="../assets/images/head/chuanbo.png" alt="系统介绍" class="intruduction" />
<img src="../assets/images/head/bigtitle.png" alt="系统介绍" class="intruduction" />
</div>
<!-- 2. 第一行布局容器 (布局不变) -->

View File

@ -7,10 +7,10 @@
<!-- 2. 第一行布局容器 (布局不变) -->
<div class="leader-containner1">
<!-- 区域1: 意见领袖列表 -->
<!-- 区域1: 互动相似行为列表 -->
<div class="left-panel">
<img
src="../assets/images/leaderTitle.png"
src="../assets/images/link1title1.png"
alt=""
style="margin-top: -22px; margin-left: -15px"
/>
@ -91,7 +91,7 @@
</div>
<div class="content-wrapper">
<img
src="../assets/images/graphTitle.png"
src="../assets/images/link1t2.png"
alt=""
style="margin-top: -15px; margin-left: -15px"
/>
@ -146,45 +146,16 @@
<LeaderAnalysis :chart-data="analysisChartData" />
</div>
<!-- 第二行布局容器 (布局不变) -->
<!-- 第二行布局容器 (布局更新) -->
<div class="leader-containner2">
<EventHeatmap
@show-details="openDetailsModal"
:panelTrendData="[32655, 29182, 55732, 1051]"
:panelXAxisLabels="['2022.7.31', '2022.8.1', '2022.8.2', '2022.8.3']"
:granularTrendData="[
8959, 7460, 8334, 7902, 5753, 3070, 3481, 16878, 17819, 15296, 18883, 3734, 938, 101, 12
]"
:granularXAxisLabels="[
'7.31 00h',
'7.31 06h',
'7.31 12h',
'7.31 18h',
'8.1 00h',
'8.1 06h',
'8.1 12h',
'8.1 18h',
'8.2 00h',
'8.2 06h',
'8.2 12h',
'8.2 18h',
'8.3 00h',
'8.3 06h',
'8.3 12h'
]"
/>
<!-- EventHeatmap has been replaced with InteractionStrengthChart -->
<InteractionStrengthChart :chart-data="interactionStrengthData" />
<PostDynamics :posts="posts" @handle:openDialog="handleLeaderPost" />
<WordCloud :wordsCloudList="wordCloudData" />
</div>
<!-- 详情弹窗 -->
<div v-if="showDetailsModal" class="modal-overlay" @click="closeDetailsModal">
<div class="modal-content" @click.stop>
<button class="close-btn" @click="closeDetailsModal">×</button>
<div ref="detailsChart" class="details-chart-container"></div>
</div>
</div>
<!-- 详情弹窗 (EventHeatmap's modal removed) -->
<el-dialog
v-model="leaderDetailDialog"
width="500"
@ -199,10 +170,10 @@
<div class="leader-name">{{ activeLeader.name }}</div>
<div class="leader-heat">
<div class="fancy">
粉丝量:&nbsp;&nbsp;{{ activeLeader.leaderOriginInfo.followers }}
粉丝量:  {{ activeLeader.leaderOriginInfo.followers }}
</div>
<div class="post-number">
发帖数:&nbsp;&nbsp;{{ activeLeader.leaderOriginInfo.posts }}
发帖数:  {{ activeLeader.leaderOriginInfo.posts }}
</div>
</div>
</div>
@ -223,13 +194,13 @@
<div class="item-time">{{ item.time }}</div>
<div class="item-heat-detail">
<div class="item-heat-like">
<Icon icon="ei:like" width="25" height="25" />&nbsp;{{ item.like }}
<Icon icon="ei:like" width="25" height="25" /> {{ item.like }}
</div>
<div class="item-heat-comment">
<Icon icon="la:comment-dots" width="25" height="25" />&nbsp;{{ item.comment }}
<Icon icon="la:comment-dots" width="25" height="25" /> {{ item.comment }}
</div>
<div class="item-heat-transmit">
<Icon icon="mdi:share-outline" width="25" height="25" />&nbsp;{{
<Icon icon="mdi:share-outline" width="25" height="25" /> {{
item.transmit
}}
</div>
@ -241,27 +212,27 @@
<div class="dialog-content-heat-degree">
<div class="heat-item">
<p class="diamond"></p>
粉丝数量:&nbsp;&nbsp;&nbsp;{{ activeLeader.leaderOriginInfo.followers }}
粉丝数量:   {{ activeLeader.leaderOriginInfo.followers }}
</div>
<div class="heat-item">
<p class="diamond"></p>
关注数量:&nbsp;&nbsp;&nbsp;1329
关注数量:   1329
</div>
<div class="heat-item">
<p class="diamond"></p>
发帖总数:&nbsp;&nbsp;&nbsp;{{ activeLeader.leaderOriginInfo.posts }}
发帖总数:   {{ activeLeader.leaderOriginInfo.posts }}
</div>
<div class="heat-item">
<p class="diamond"></p>
贴文被转总数:&nbsp;&nbsp;&nbsp;1329
贴文被转总数:   1329
</div>
<div class="heat-item">
<p class="diamond"></p>
参与互动次数:&nbsp;&nbsp;&nbsp;30
参与互动次数:   30
</div>
<div class="heat-item">
<p class="diamond"></p>
首次活跃事件:&nbsp;&nbsp;&nbsp;2022.7.31 00:14
首次活跃事件:   2022.7.31 00:14
</div>
</div>
</div>
@ -279,13 +250,13 @@
<div class="heat">
<div class="item-heat-detail">
<div class="item-heat-like">
<Icon icon="ei:like" width="25" height="25" />&nbsp;{{ currentPost.like }}
<Icon icon="ei:like" width="25" height="25" /> {{ currentPost.like }}
</div>
<div class="item-heat-comment">
<Icon icon="la:comment-dots" width="25" height="25" />&nbsp;{{ currentPost.comment }}
<Icon icon="la:comment-dots" width="25" height="25" /> {{ currentPost.comment }}
</div>
<div class="item-heat-transmit">
<Icon icon="mdi:share-outline" width="25" height="25" />&nbsp;{{
<Icon icon="mdi:share-outline" width="25" height="25" /> {{
currentPost.transmit
}}
</div>
@ -304,8 +275,8 @@ import { TitleComponent, TooltipComponent } from "echarts/components";
import { SVGRenderer } from "echarts/renderers";
echarts.use([TitleComponent, TooltipComponent, GraphChart, SVGRenderer]);
//
import LeaderAnalysis from "../components/weight/LeaderAnalysis.vue";
import EventHeatmap from "../components/weight/EventHeatmap.vue";
import LeaderAnalysis from "../components/weight/ReleationshipAnalysis.vue";
import InteractionStrengthChart from "../components/weight/InteractionStrengthChart.vue"; // Replaced EventHeatmap
import PostDynamics from "../components/weight/PostDynamics.vue";
import WordCloud from "../components/weight/WordCloud.vue";
import dynamicGraph from "../components/graph/dynamicGraph.vue";
@ -323,18 +294,18 @@ const activeLeader = ref({});
const allLeaderData = ref([
{
id: "huxijin",
name: "Hu Xijin",
chineseName: "胡锡进",
followers: "53.8万",
posts: "54",
avatar: new URL("@/assets/images/huxijin.png", import.meta.url).toString(),
id: "polohung",
name: "Polo Hung",
chineseName: null,
followers: "634",
posts: "32",
avatar: new URL("@/assets/images/link1p1.png", import.meta.url).toString(),
default_avatar: new URL(
"@/assets/images/avatar/1/blue_huxijin.png",
"@/assets/images/link1p1.png",
import.meta.url
).toString(),
active_avatar: new URL(
"@/assets/images/avatar/1/light_huxijin.png",
"@/assets/images/link1p1.png",
import.meta.url
).toString(),
category: "自媒体",
@ -362,18 +333,18 @@ const allLeaderData = ref([
]
},
{
id: "levi_godman",
name: "Levi Godman",
chineseName: null,
id: "yangzhengzi",
name: "楊政子",
chineseName: "",
followers: "4.6万",
posts: "12847",
avatar: new URL("@/assets/images/levi.png", import.meta.url).toString(),
avatar: new URL("@/assets/images/link1p2.png", import.meta.url).toString(),
default_avatar: new URL(
"@/assets/images/avatar/1/blue_levi_godman.png",
"@/assets/images/link1p2.png",
import.meta.url
).toString(),
active_avatar: new URL(
"@/assets/images/avatar/1/light_levi_godman.png",
"@/assets/images/link1p2.png",
import.meta.url
).toString(),
category: "自媒体",
@ -400,18 +371,18 @@ const allLeaderData = ref([
]
},
{
id: "bidishalolo",
name: "bidishalolo",
chineseName: null,
id: "wuzhenghui",
name: "吳政輝",
chineseName: "",
followers: "2387",
posts: "8380",
avatar: new URL("@/assets/images/bidishalolo.png", import.meta.url).toString(),
avatar: new URL("@/assets/images/link1p3.png", import.meta.url).toString(),
default_avatar: new URL(
"@/assets/images/avatar/1/blue_bidishalolo.png",
"@/assets/images/link1p3.png",
import.meta.url
).toString(),
active_avatar: new URL(
"@/assets/images/avatar/1/light_bidishalolo.png",
"@/assets/images/link1p3.png",
import.meta.url
).toString(),
category: "自媒体",
@ -429,18 +400,18 @@ const allLeaderData = ref([
]
},
{
id: "indopacific",
name: "Indo-Pacific News",
chineseName: null,
id: "linxicong",
name: "錫聰 林",
chineseName: "",
followers: "11.5万",
posts: "11.3万",
avatar: new URL("@/assets/images/indo.png", import.meta.url).toString(),
avatar: new URL("@/assets/images/link1p4.png", import.meta.url).toString(),
default_avatar: new URL(
"@/assets/images/avatar/1/blue_indopacific.png",
"@/assets/images/link1p4.png",
import.meta.url
).toString(),
active_avatar: new URL(
"@/assets/images/avatar/1/light_indopacific.png",
"@/assets/images/link1p4.png",
import.meta.url
).toString(),
category: "新闻媒体",
@ -453,7 +424,7 @@ const allLeaderData = ref([
time: "2022-08-02 04:02:24",
type: "原发",
content:
"The US is moving planes and aircraft carriers closer to #Taiwan due to the upcoming visit of House Speaker Nancy Pelosi to Taiwan - Nikkei Asia\n\nThe #USNavy has 2 aircraft carrier groups &amp; 2 amphibious assault groups in the region, plus other assets based in #Japan, Hawaii &amp; Guam https://t.co/L0eEr3px5N"
"The US is moving planes and aircraft carriers closer to #Taiwan due to the upcoming visit of House Speaker Nancy Pelosi to Taiwan - Nikkei Asia\n\nThe #USNavy has 2 aircraft carrier groups & 2 amphibious assault groups in the region, plus other assets based in #Japan, Hawaii & Guam https://t.co/L0eEr3px5N"
},
{
id: 2,
@ -468,19 +439,19 @@ const allLeaderData = ref([
]
},
{
id: "spectator",
name: "The Spectator Index",
id: "yiren",
name: "一人一讚 馬總統感恩有您 永遠支...",
chineseName: null,
followers: "233.5万",
posts: "56",
avatar: new URL("@/assets/images/spectator.png", import.meta.url).toString(),
avatar: new URL("@/assets/images/link1p5.png", import.meta.url).toString(),
category: "新闻媒体",
default_avatar: new URL(
"@/assets/images/avatar/1/blue_spectator.png",
"@/assets/images/link1p5.png",
import.meta.url
).toString(),
active_avatar: new URL(
"@/assets/images/avatar/1/light_spectator.png",
"@/assets/images/link1p5.png",
import.meta.url
).toString(),
labelling: [
@ -506,19 +477,19 @@ const allLeaderData = ref([
]
},
{
id: "reuters",
name: "Reuters",
id: "meiti",
name: "媒體還在政治助選造勢嗎?",
chineseName: null,
followers: "2575.7万",
posts: "98",
avatar: new URL("@/assets/images/reuters.png", import.meta.url).toString(),
avatar: new URL("@/assets/images/link1p6.png", import.meta.url).toString(),
category: "新闻媒体",
default_avatar: new URL(
"@/assets/images/avatar/1/blue_reuters.png",
"@/assets/images/link1p6.png",
import.meta.url
).toString(),
active_avatar: new URL(
"@/assets/images/avatar/1/light_reuters.png",
"@/assets/images/link1p6.png",
import.meta.url
).toString(),
labelling: [
@ -544,162 +515,7 @@ const allLeaderData = ref([
}
]
},
{
id: "mickwallace",
name: "Mick Wallace",
chineseName: null,
followers: "24.8万",
posts: "10259",
avatar: new URL("@/assets/images/mick.png", import.meta.url).toString(),
category: "自媒体",
default_avatar: new URL(
"@/assets/images/avatar/1/blue_mickwallace.png",
import.meta.url
).toString(),
active_avatar: new URL(
"@/assets/images/avatar/1/light_mickwallace.png",
import.meta.url
).toString(),
labelling: [
{
id: 1,
like: "5354",
comment: "155",
transmit: "1410",
time: "2022-8-1 17:56:56",
type: "引用",
content: "BREAKING : Pelosi seen flying over Taiwan https://t.co/VQdm88KVeU"
},
{
id: 2,
like: "2254",
comment: "168",
transmit: "428",
time: "2022-8-1 10:55:50",
type: "二级转发",
content:
"If #Pelosi visits Taiwan to selfishly promote herself while knowingly undermining Peace and Security in the Region,she will be remembered as a disappointing piece of work..."
}
]
},
{
id: "jiushiniya",
name: "Jiushiniya",
chineseName: null,
followers: "557",
posts: "16020",
avatar: new URL("@/assets/images/jiushiniya.png", import.meta.url).toString(),
category: "自媒体",
default_avatar: new URL(
"@/assets/images/avatar/1/blue_jiushiniya.png",
import.meta.url
).toString(),
active_avatar: new URL(
"@/assets/images/avatar/1/light_jiushiniya.png",
import.meta.url
).toString(),
labelling: [
{
id: 1,
like: "3336",
comment: "135",
transmit: "1197",
time: "2022-8-2 15:33:45",
type: "引用",
content:
"House Speaker Nancy Pelosi is going to Taiwan as a show of US support for Taiwan's independence. Trump holds a secret Chinese bank account &amp; Ivanka owns patents on Chinese Coffins &amp; Body Bags. Democrats are tough on China. Republicans invest in China. MAGA hats are made in China"
},
{
id: 2,
like: "2405",
comment: "140",
transmit: "669",
time: "2022-8-2 02:48:07",
type: "引用",
content:
"BREAKING:\n\nCNN confirms Speaker of the House, Nancy Pelosi, will travel to Taiwan.\n\nTaiwanese sources say she will arrive tomorrow.\n\nPelosi will be the highest-ranking American to visit Taiwan in 25 years.\n\nThe island is the nod in the First Island Chain that is closest to China. https://t.co/wTjBnm0zpv"
}
]
},
{
id: "liuxiaoming",
name: "Liu Xiaoming",
chineseName: "刘晓明",
followers: "33.8万",
posts: "8757",
avatar: new URL("@/assets/images/liuxiaoming.png", import.meta.url).toString(),
category: "自媒体",
default_avatar: new URL(
"@/assets/images/avatar/1/blue_liuxiaoming.png",
import.meta.url
).toString(),
active_avatar: new URL(
"@/assets/images/avatar/1/light_liuxiaoming.png",
import.meta.url
).toString(),
labelling: [
{
id: 1,
like: "6545",
comment: "1561",
transmit: "1062",
time: "2022-8-2 19:48:22",
type: "原发",
content:
"我们正告美方,中方正严阵以待,中国人民解放军绝不会坐视不管,必将采取坚决应对和有力反制措施,捍卫中国主权和领土完整。美方应该做的是恪守一个中国原则和中美三个联合公报规定,兑现拜登总统不支持'台独'的承诺,不安排佩洛西访问台湾。"
},
{
id: 2,
like: "5261",
comment: "1602",
transmit: "1741",
time: "2022-8-2 13:44:38",
type: "原发",
content:
"We are closely following the itinerary of #Pelosi. A visit to #Taiwan by her would constitute a gross interference in #China's internal affairs, seriously undermine China's sovereignty and territorial integrity, wantonly trample on the #one-China principle."
}
]
},
{
id: "indobosss",
name: "indobosss",
chineseName: null,
followers: "32",
posts: "1403",
avatar: new URL("@/assets/images/indobosss.png", import.meta.url).toString(),
category: "自媒体",
default_avatar: new URL(
"@/assets/images/avatar/1/blue_indobosss.png",
import.meta.url
).toString(),
active_avatar: new URL(
"@/assets/images/avatar/1/light_indobosss.png",
import.meta.url
).toString(),
labelling: [
{
id: 1,
like: "1310",
comment: "60",
transmit: "300",
time: "2022-8-1 21:55:31",
type: "引用",
content:
"Taiwan is China. \n\nThe UN says so. \n\nThe U.S. and China have said so in three different joint communiques.\n\nIt's called the One-China policy and Nancy Pelosi has gone full neocon to violate it."
},
{
id: 2,
like: "555",
comment: "123",
transmit: "204",
time: "2022-8-1 21:55:31",
type: "引用",
content:
"US House Speaker Nancy #Pelosi office officially announced her itinerary to Asia on Sunday. It said Pelosi will lead a Congressional delegation to the Indo-Pacific region, including visits to Singapore, Malaysia, South Korea and Japan, China's #Taiwan was not mentioned. https://t.co/AK6X0lm8OU"
}
]
}
]);
//
@ -825,6 +641,32 @@ const posts = ref([
}
]);
// Data for the new InteractionStrengthChart component
const interactionStrengthData = ref([
{
value: 0.60,
images: [
new URL("@/assets/images/link1p1.png", import.meta.url).toString(),
new URL("@/assets/images/link1p2.png", import.meta.url).toString(),
],
},
{
value: 0.45,
images: [
new URL("@/assets/images/link1p3.png", import.meta.url).toString(),
new URL("@/assets/images/link1p4.png", import.meta.url).toString(),
],
},
{
value: 0.32,
images: [
new URL("@/assets/images/link1p5.png", import.meta.url).toString(),
new URL("@/assets/images/link1p6.png", import.meta.url).toString(),
],
},
]);
const leaderGraphRef = ref(null);
const visibleLeaders = computed(() => allLeaderData.value.slice(0, activeTimePoint.value));
const tabs = ref(["全部", "新闻媒体", "自媒体", "政府官号"]);
@ -872,39 +714,39 @@ const onTimePointClick = (pointId) => {
// ===================================================================
//
// ===================================================================
const analysisChartData = ref([
{
title: "平均发帖数",
unit: "数量",
max: 10,
series: [
{ name: "领袖", value: 6.4 },
{ name: "所有用户", value: 0.46 }
]
},
{
title: "帖子平均生存周期",
unit: "天数",
max: 10,
series: [
{ name: "领袖", value: 2.19 },
{ name: "所有用户", value: 0.46 }
]
},
{
title: "平均粉丝数",
unit: "天数",
max: 10,
series: [
{ name: "领袖", value: 2.19 },
{ name: "所有用户", value: 0.46 }
]
}
]);
// // ===================================================================
// const analysisChartData = ref([
// {
// title: "",
// unit: "",
// max: 10,
// series: [
// { name: "", value: 6.4 },
// { name: "", value: 0.46 }
// ]
// },
// {
// title: "",
// unit: "",
// max: 10,
// series: [
// { name: "", value: 2.19 },
// { name: "", value: 0.46 }
// ]
// },
// {
// title: "",
// unit: "",
// max: 10,
// series: [
// { name: "", value: 2.19 },
// { name: "", value: 0.46 }
// ]
// }
// ]);
const wordCloudData = ref([
{
text: "佩洛西",
text: "賴清德",
top: 115.5,
left: 215.5,
width: 109,
@ -912,9 +754,9 @@ const wordCloudData = ref([
fontSize: 28,
opacity: 1
},
{ text: "中国", top: 183.5, left: 69.5, width: 73, height: 35, fontSize: 22, opacity: 1 },
{ text: "職演", top: 183.5, left: 69.5, width: 73, height: 35, fontSize: 22, opacity: 1 },
{
text: "中国人民解放军",
text: "台灣",
top: 72.5,
left: 132.5,
width: 123,
@ -923,7 +765,7 @@ const wordCloudData = ref([
opacity: 1
},
{
text: "中美关系",
text: "民主",
top: 171.5,
left: 212.5,
width: 81,
@ -931,9 +773,9 @@ const wordCloudData = ref([
fontSize: 14,
opacity: 0.8
},
{ text: "台独", top: 135.5, left: 42.5, width: 57, height: 24, fontSize: 16, opacity: 1 },
{ text: "就職典禮", top: 135.5, left: 42.5, width: 57, height: 24, fontSize: 16, opacity: 1 },
{
text: "台海和平",
text: "總統",
top: 228.5,
left: 230.5,
width: 81,
@ -942,7 +784,7 @@ const wordCloudData = ref([
opacity: 0.8
},
{
text: "坚决反对",
text: "人民",
top: 233.5,
left: 38.5,
width: 73,
@ -951,7 +793,7 @@ const wordCloudData = ref([
opacity: 0.7
},
{
text: "联合公报",
text: "立委",
top: 241.5,
left: 130.5,
width: 73,
@ -960,7 +802,7 @@ const wordCloudData = ref([
opacity: 0.7
},
{
text: "有力反制",
text: "中國",
top: 211.5,
left: 143.5,
width: 73,
@ -968,32 +810,14 @@ const wordCloudData = ref([
fontSize: 12,
opacity: 1
},
{ text: "白宫", top: 176.5, left: 15.5, width: 49, height: 19, fontSize: 12, opacity: 0.8 },
{ text: "内政", top: 87.5, left: 36.5, width: 53, height: 22, fontSize: 14, opacity: 1 },
{ text: "访台", top: 103.5, left: 95.5, width: 49, height: 19, fontSize: 12, opacity: 0.8 },
{ text: "领土", top: 57.5, left: 72.5, width: 49, height: 19, fontSize: 12, opacity: 0.6 },
{ text: "原则", top: 77.5, left: 264.5, width: 49, height: 19, fontSize: 12, opacity: 0.7 },
{ text: "台湾", top: 195.5, left: 287.5, width: 49, height: 19, fontSize: 12, opacity: 0.8 }
{ text: "蕭美琴", top: 176.5, left: 15.5, width: 49, height: 19, fontSize: 12, opacity: 0.8 },
{ text: "民進", top: 87.5, left: 36.5, width: 53, height: 22, fontSize: 14, opacity: 1 },
{ text: "國會", top: 103.5, left: 95.5, width: 49, height: 19, fontSize: 12, opacity: 0.8 },
{ text: "中華民國", top: 57.5, left: 72.5, width: 49, height: 19, fontSize: 12, opacity: 0.6 },
{ text: "英文", top: 77.5, left: 264.5, width: 49, height: 19, fontSize: 12, opacity: 0.7 },
{ text: "兩岸", top: 195.5, left: 287.5, width: 49, height: 19, fontSize: 12, opacity: 0.8 }
]);
const showDetailsModal = ref(false);
const detailsChart = ref(null);
let myDetailsChart = null;
const openDetailsModal = (chartConfig) => {
showDetailsModal.value = true;
nextTick(() => {
if (detailsChart.value) {
myDetailsChart = echarts.init(detailsChart.value);
myDetailsChart.setOption(chartConfig.option);
}
});
};
const closeDetailsModal = () => {
showDetailsModal.value = false;
if (myDetailsChart) {
myDetailsChart.dispose();
myDetailsChart = null;
}
};
//
let timer = null;
const automaticPlay = () => {
@ -1068,7 +892,7 @@ onMounted(() => {
color: #fff;
}
.tabs {
display: flex;
display: none;
margin-bottom: 15px;
border-bottom: 2px solid #1a5a9c;
}
@ -1471,4 +1295,4 @@ onMounted(() => {
margin-top: -24px;
margin-left: -2px;
}
</style>
</style>

View File

@ -7,10 +7,10 @@
<!-- 2. 第一行布局容器 (布局不变) -->
<div class="leader-containner1">
<!-- 区域1: 意见领袖列表 -->
<!-- 区域1: 互动相似行为列表 -->
<div class="left-panel">
<img
src="../assets/images/leaderTitle.png"
src="../assets/images/link1title1.png"
alt=""
style="margin-top: -22px; margin-left: -15px"
/>
@ -91,7 +91,7 @@
</div>
<div class="content-wrapper">
<img
src="../assets/images/graphTitle.png"
src="../assets/images/link1t2.png"
alt=""
style="margin-top: -15px; margin-left: -15px"
/>
@ -146,45 +146,16 @@
<LeaderAnalysis :chart-data="analysisChartData" />
</div>
<!-- 第二行布局容器 (布局不变) -->
<!-- 第二行布局容器 (布局更新) -->
<div class="leader-containner2">
<EventHeatmap
@show-details="openDetailsModal"
:panelTrendData="[32655, 29182, 55732, 1051]"
:panelXAxisLabels="['2022.7.31', '2022.8.1', '2022.8.2', '2022.8.3']"
:granularTrendData="[
8959, 7460, 8334, 7902, 5753, 3070, 3481, 16878, 17819, 15296, 18883, 3734, 938, 101, 12
]"
:granularXAxisLabels="[
'7.31 00h',
'7.31 06h',
'7.31 12h',
'7.31 18h',
'8.1 00h',
'8.1 06h',
'8.1 12h',
'8.1 18h',
'8.2 00h',
'8.2 06h',
'8.2 12h',
'8.2 18h',
'8.3 00h',
'8.3 06h',
'8.3 12h'
]"
/>
<!-- EventHeatmap has been replaced with InteractionStrengthChart -->
<InteractionStrengthChart :chart-data="interactionStrengthData" />
<PostDynamics :posts="posts" @handle:openDialog="handleLeaderPost" />
<WordCloud :wordsCloudList="wordCloudData" />
</div>
<!-- 详情弹窗 -->
<div v-if="showDetailsModal" class="modal-overlay" @click="closeDetailsModal">
<div class="modal-content" @click.stop>
<button class="close-btn" @click="closeDetailsModal">×</button>
<div ref="detailsChart" class="details-chart-container"></div>
</div>
</div>
<!-- 详情弹窗 (EventHeatmap's modal removed) -->
<el-dialog
v-model="leaderDetailDialog"
width="500"
@ -199,10 +170,10 @@
<div class="leader-name">{{ activeLeader.name }}</div>
<div class="leader-heat">
<div class="fancy">
粉丝量:&nbsp;&nbsp;{{ activeLeader.leaderOriginInfo.followers }}
粉丝量:  {{ activeLeader.leaderOriginInfo.followers }}
</div>
<div class="post-number">
发帖数:&nbsp;&nbsp;{{ activeLeader.leaderOriginInfo.posts }}
发帖数:  {{ activeLeader.leaderOriginInfo.posts }}
</div>
</div>
</div>
@ -223,13 +194,13 @@
<div class="item-time">{{ item.time }}</div>
<div class="item-heat-detail">
<div class="item-heat-like">
<Icon icon="ei:like" width="25" height="25" />&nbsp;{{ item.like }}
<Icon icon="ei:like" width="25" height="25" /> {{ item.like }}
</div>
<div class="item-heat-comment">
<Icon icon="la:comment-dots" width="25" height="25" />&nbsp;{{ item.comment }}
<Icon icon="la:comment-dots" width="25" height="25" /> {{ item.comment }}
</div>
<div class="item-heat-transmit">
<Icon icon="mdi:share-outline" width="25" height="25" />&nbsp;{{
<Icon icon="mdi:share-outline" width="25" height="25" /> {{
item.transmit
}}
</div>
@ -241,27 +212,27 @@
<div class="dialog-content-heat-degree">
<div class="heat-item">
<p class="diamond"></p>
粉丝数量:&nbsp;&nbsp;&nbsp;{{ activeLeader.leaderOriginInfo.followers }}
粉丝数量:   {{ activeLeader.leaderOriginInfo.followers }}
</div>
<div class="heat-item">
<p class="diamond"></p>
关注数量:&nbsp;&nbsp;&nbsp;1329
关注数量:   1329
</div>
<div class="heat-item">
<p class="diamond"></p>
发帖总数:&nbsp;&nbsp;&nbsp;{{ activeLeader.leaderOriginInfo.posts }}
发帖总数:   {{ activeLeader.leaderOriginInfo.posts }}
</div>
<div class="heat-item">
<p class="diamond"></p>
贴文被转总数:&nbsp;&nbsp;&nbsp;1329
贴文被转总数:   1329
</div>
<div class="heat-item">
<p class="diamond"></p>
参与互动次数:&nbsp;&nbsp;&nbsp;30
参与互动次数:   30
</div>
<div class="heat-item">
<p class="diamond"></p>
首次活跃事件:&nbsp;&nbsp;&nbsp;2022.7.31 00:14
首次活跃事件:   2022.7.31 00:14
</div>
</div>
</div>
@ -279,13 +250,13 @@
<div class="heat">
<div class="item-heat-detail">
<div class="item-heat-like">
<Icon icon="ei:like" width="25" height="25" />&nbsp;{{ currentPost.like }}
<Icon icon="ei:like" width="25" height="25" /> {{ currentPost.like }}
</div>
<div class="item-heat-comment">
<Icon icon="la:comment-dots" width="25" height="25" />&nbsp;{{ currentPost.comment }}
<Icon icon="la:comment-dots" width="25" height="25" /> {{ currentPost.comment }}
</div>
<div class="item-heat-transmit">
<Icon icon="mdi:share-outline" width="25" height="25" />&nbsp;{{
<Icon icon="mdi:share-outline" width="25" height="25" /> {{
currentPost.transmit
}}
</div>
@ -304,8 +275,8 @@ import { TitleComponent, TooltipComponent } from "echarts/components";
import { SVGRenderer } from "echarts/renderers";
echarts.use([TitleComponent, TooltipComponent, GraphChart, SVGRenderer]);
//
import LeaderAnalysis from "../components/weight/LeaderAnalysis.vue";
import EventHeatmap from "../components/weight/EventHeatmap.vue";
import LeaderAnalysis from "../components/weight/ReleationshipAnalysis.vue";
import InteractionStrengthChart from "../components/weight/InteractionStrengthChart.vue"; // Replaced EventHeatmap
import PostDynamics from "../components/weight/PostDynamics.vue";
import WordCloud from "../components/weight/WordCloud.vue";
import dynamicGraph from "../components/graph/dynamicGraph.vue";
@ -323,18 +294,18 @@ const activeLeader = ref({});
const allLeaderData = ref([
{
id: "huxijin",
name: "Hu Xijin",
chineseName: "胡锡进",
followers: "53.8万",
posts: "54",
avatar: new URL("@/assets/images/huxijin.png", import.meta.url).toString(),
id: "polohung",
name: "Polo Hung",
chineseName: null,
followers: "634",
posts: "32",
avatar: new URL("@/assets/images/link1p1.png", import.meta.url).toString(),
default_avatar: new URL(
"@/assets/images/avatar/1/blue_huxijin.png",
"@/assets/images/link1p1.png",
import.meta.url
).toString(),
active_avatar: new URL(
"@/assets/images/avatar/1/light_huxijin.png",
"@/assets/images/link1p1.png",
import.meta.url
).toString(),
category: "自媒体",
@ -362,18 +333,18 @@ const allLeaderData = ref([
]
},
{
id: "levi_godman",
name: "Levi Godman",
chineseName: null,
id: "yangzhengzi",
name: "楊政子",
chineseName: "",
followers: "4.6万",
posts: "12847",
avatar: new URL("@/assets/images/levi.png", import.meta.url).toString(),
avatar: new URL("@/assets/images/link1p2.png", import.meta.url).toString(),
default_avatar: new URL(
"@/assets/images/avatar/1/blue_levi_godman.png",
"@/assets/images/link1p2.png",
import.meta.url
).toString(),
active_avatar: new URL(
"@/assets/images/avatar/1/light_levi_godman.png",
"@/assets/images/link1p2.png",
import.meta.url
).toString(),
category: "自媒体",
@ -400,18 +371,18 @@ const allLeaderData = ref([
]
},
{
id: "bidishalolo",
name: "bidishalolo",
chineseName: null,
id: "wuzhenghui",
name: "吳政輝",
chineseName: "",
followers: "2387",
posts: "8380",
avatar: new URL("@/assets/images/bidishalolo.png", import.meta.url).toString(),
avatar: new URL("@/assets/images/link1p3.png", import.meta.url).toString(),
default_avatar: new URL(
"@/assets/images/avatar/1/blue_bidishalolo.png",
"@/assets/images/link1p3.png",
import.meta.url
).toString(),
active_avatar: new URL(
"@/assets/images/avatar/1/light_bidishalolo.png",
"@/assets/images/link1p3.png",
import.meta.url
).toString(),
category: "自媒体",
@ -429,18 +400,18 @@ const allLeaderData = ref([
]
},
{
id: "indopacific",
name: "Indo-Pacific News",
chineseName: null,
id: "linxicong",
name: "錫聰 林",
chineseName: "",
followers: "11.5万",
posts: "11.3万",
avatar: new URL("@/assets/images/indo.png", import.meta.url).toString(),
avatar: new URL("@/assets/images/link1p4.png", import.meta.url).toString(),
default_avatar: new URL(
"@/assets/images/avatar/1/blue_indopacific.png",
"@/assets/images/link1p4.png",
import.meta.url
).toString(),
active_avatar: new URL(
"@/assets/images/avatar/1/light_indopacific.png",
"@/assets/images/link1p4.png",
import.meta.url
).toString(),
category: "新闻媒体",
@ -453,7 +424,7 @@ const allLeaderData = ref([
time: "2022-08-02 04:02:24",
type: "原发",
content:
"The US is moving planes and aircraft carriers closer to #Taiwan due to the upcoming visit of House Speaker Nancy Pelosi to Taiwan - Nikkei Asia\n\nThe #USNavy has 2 aircraft carrier groups &amp; 2 amphibious assault groups in the region, plus other assets based in #Japan, Hawaii &amp; Guam https://t.co/L0eEr3px5N"
"The US is moving planes and aircraft carriers closer to #Taiwan due to the upcoming visit of House Speaker Nancy Pelosi to Taiwan - Nikkei Asia\n\nThe #USNavy has 2 aircraft carrier groups & 2 amphibious assault groups in the region, plus other assets based in #Japan, Hawaii & Guam https://t.co/L0eEr3px5N"
},
{
id: 2,
@ -468,19 +439,19 @@ const allLeaderData = ref([
]
},
{
id: "spectator",
name: "The Spectator Index",
id: "yiren",
name: "一人一讚 馬總統感恩有您 永遠支...",
chineseName: null,
followers: "233.5万",
posts: "56",
avatar: new URL("@/assets/images/spectator.png", import.meta.url).toString(),
avatar: new URL("@/assets/images/link1p5.png", import.meta.url).toString(),
category: "新闻媒体",
default_avatar: new URL(
"@/assets/images/avatar/1/blue_spectator.png",
"@/assets/images/link1p5.png",
import.meta.url
).toString(),
active_avatar: new URL(
"@/assets/images/avatar/1/light_spectator.png",
"@/assets/images/link1p5.png",
import.meta.url
).toString(),
labelling: [
@ -506,19 +477,19 @@ const allLeaderData = ref([
]
},
{
id: "reuters",
name: "Reuters",
id: "meiti",
name: "媒體還在政治助選造勢嗎?",
chineseName: null,
followers: "2575.7万",
posts: "98",
avatar: new URL("@/assets/images/reuters.png", import.meta.url).toString(),
avatar: new URL("@/assets/images/link1p6.png", import.meta.url).toString(),
category: "新闻媒体",
default_avatar: new URL(
"@/assets/images/avatar/1/blue_reuters.png",
"@/assets/images/link1p6.png",
import.meta.url
).toString(),
active_avatar: new URL(
"@/assets/images/avatar/1/light_reuters.png",
"@/assets/images/link1p6.png",
import.meta.url
).toString(),
labelling: [
@ -544,162 +515,7 @@ const allLeaderData = ref([
}
]
},
{
id: "mickwallace",
name: "Mick Wallace",
chineseName: null,
followers: "24.8万",
posts: "10259",
avatar: new URL("@/assets/images/mick.png", import.meta.url).toString(),
category: "自媒体",
default_avatar: new URL(
"@/assets/images/avatar/1/blue_mickwallace.png",
import.meta.url
).toString(),
active_avatar: new URL(
"@/assets/images/avatar/1/light_mickwallace.png",
import.meta.url
).toString(),
labelling: [
{
id: 1,
like: "5354",
comment: "155",
transmit: "1410",
time: "2022-8-1 17:56:56",
type: "引用",
content: "BREAKING : Pelosi seen flying over Taiwan https://t.co/VQdm88KVeU"
},
{
id: 2,
like: "2254",
comment: "168",
transmit: "428",
time: "2022-8-1 10:55:50",
type: "二级转发",
content:
"If #Pelosi visits Taiwan to selfishly promote herself while knowingly undermining Peace and Security in the Region,she will be remembered as a disappointing piece of work..."
}
]
},
{
id: "jiushiniya",
name: "Jiushiniya",
chineseName: null,
followers: "557",
posts: "16020",
avatar: new URL("@/assets/images/jiushiniya.png", import.meta.url).toString(),
category: "自媒体",
default_avatar: new URL(
"@/assets/images/avatar/1/blue_jiushiniya.png",
import.meta.url
).toString(),
active_avatar: new URL(
"@/assets/images/avatar/1/light_jiushiniya.png",
import.meta.url
).toString(),
labelling: [
{
id: 1,
like: "3336",
comment: "135",
transmit: "1197",
time: "2022-8-2 15:33:45",
type: "引用",
content:
"House Speaker Nancy Pelosi is going to Taiwan as a show of US support for Taiwan's independence. Trump holds a secret Chinese bank account &amp; Ivanka owns patents on Chinese Coffins &amp; Body Bags. Democrats are tough on China. Republicans invest in China. MAGA hats are made in China"
},
{
id: 2,
like: "2405",
comment: "140",
transmit: "669",
time: "2022-8-2 02:48:07",
type: "引用",
content:
"BREAKING:\n\nCNN confirms Speaker of the House, Nancy Pelosi, will travel to Taiwan.\n\nTaiwanese sources say she will arrive tomorrow.\n\nPelosi will be the highest-ranking American to visit Taiwan in 25 years.\n\nThe island is the nod in the First Island Chain that is closest to China. https://t.co/wTjBnm0zpv"
}
]
},
{
id: "liuxiaoming",
name: "Liu Xiaoming",
chineseName: "刘晓明",
followers: "33.8万",
posts: "8757",
avatar: new URL("@/assets/images/liuxiaoming.png", import.meta.url).toString(),
category: "自媒体",
default_avatar: new URL(
"@/assets/images/avatar/1/blue_liuxiaoming.png",
import.meta.url
).toString(),
active_avatar: new URL(
"@/assets/images/avatar/1/light_liuxiaoming.png",
import.meta.url
).toString(),
labelling: [
{
id: 1,
like: "6545",
comment: "1561",
transmit: "1062",
time: "2022-8-2 19:48:22",
type: "原发",
content:
"我们正告美方,中方正严阵以待,中国人民解放军绝不会坐视不管,必将采取坚决应对和有力反制措施,捍卫中国主权和领土完整。美方应该做的是恪守一个中国原则和中美三个联合公报规定,兑现拜登总统不支持'台独'的承诺,不安排佩洛西访问台湾。"
},
{
id: 2,
like: "5261",
comment: "1602",
transmit: "1741",
time: "2022-8-2 13:44:38",
type: "原发",
content:
"We are closely following the itinerary of #Pelosi. A visit to #Taiwan by her would constitute a gross interference in #China's internal affairs, seriously undermine China's sovereignty and territorial integrity, wantonly trample on the #one-China principle."
}
]
},
{
id: "indobosss",
name: "indobosss",
chineseName: null,
followers: "32",
posts: "1403",
avatar: new URL("@/assets/images/indobosss.png", import.meta.url).toString(),
category: "自媒体",
default_avatar: new URL(
"@/assets/images/avatar/1/blue_indobosss.png",
import.meta.url
).toString(),
active_avatar: new URL(
"@/assets/images/avatar/1/light_indobosss.png",
import.meta.url
).toString(),
labelling: [
{
id: 1,
like: "1310",
comment: "60",
transmit: "300",
time: "2022-8-1 21:55:31",
type: "引用",
content:
"Taiwan is China. \n\nThe UN says so. \n\nThe U.S. and China have said so in three different joint communiques.\n\nIt's called the One-China policy and Nancy Pelosi has gone full neocon to violate it."
},
{
id: 2,
like: "555",
comment: "123",
transmit: "204",
time: "2022-8-1 21:55:31",
type: "引用",
content:
"US House Speaker Nancy #Pelosi office officially announced her itinerary to Asia on Sunday. It said Pelosi will lead a Congressional delegation to the Indo-Pacific region, including visits to Singapore, Malaysia, South Korea and Japan, China's #Taiwan was not mentioned. https://t.co/AK6X0lm8OU"
}
]
}
]);
//
@ -825,6 +641,32 @@ const posts = ref([
}
]);
// Data for the new InteractionStrengthChart component
const interactionStrengthData = ref([
{
value: 0.60,
images: [
new URL("@/assets/images/link1p1.png", import.meta.url).toString(),
new URL("@/assets/images/link1p2.png", import.meta.url).toString(),
],
},
{
value: 0.45,
images: [
new URL("@/assets/images/link1p3.png", import.meta.url).toString(),
new URL("@/assets/images/link1p4.png", import.meta.url).toString(),
],
},
{
value: 0.32,
images: [
new URL("@/assets/images/link1p5.png", import.meta.url).toString(),
new URL("@/assets/images/link1p6.png", import.meta.url).toString(),
],
},
]);
const leaderGraphRef = ref(null);
const visibleLeaders = computed(() => allLeaderData.value.slice(0, activeTimePoint.value));
const tabs = ref(["全部", "新闻媒体", "自媒体", "政府官号"]);
@ -872,39 +714,39 @@ const onTimePointClick = (pointId) => {
// ===================================================================
//
// ===================================================================
const analysisChartData = ref([
{
title: "平均发帖数",
unit: "数量",
max: 10,
series: [
{ name: "领袖", value: 6.4 },
{ name: "所有用户", value: 0.46 }
]
},
{
title: "帖子平均生存周期",
unit: "天数",
max: 10,
series: [
{ name: "领袖", value: 2.19 },
{ name: "所有用户", value: 0.46 }
]
},
{
title: "平均粉丝数",
unit: "天数",
max: 10,
series: [
{ name: "领袖", value: 2.19 },
{ name: "所有用户", value: 0.46 }
]
}
]);
// // ===================================================================
// const analysisChartData = ref([
// {
// title: "",
// unit: "",
// max: 10,
// series: [
// { name: "", value: 6.4 },
// { name: "", value: 0.46 }
// ]
// },
// {
// title: "",
// unit: "",
// max: 10,
// series: [
// { name: "", value: 2.19 },
// { name: "", value: 0.46 }
// ]
// },
// {
// title: "",
// unit: "",
// max: 10,
// series: [
// { name: "", value: 2.19 },
// { name: "", value: 0.46 }
// ]
// }
// ]);
const wordCloudData = ref([
{
text: "佩洛西",
text: "賴清德",
top: 115.5,
left: 215.5,
width: 109,
@ -912,9 +754,9 @@ const wordCloudData = ref([
fontSize: 28,
opacity: 1
},
{ text: "中国", top: 183.5, left: 69.5, width: 73, height: 35, fontSize: 22, opacity: 1 },
{ text: "職演", top: 183.5, left: 69.5, width: 73, height: 35, fontSize: 22, opacity: 1 },
{
text: "中国人民解放军",
text: "台灣",
top: 72.5,
left: 132.5,
width: 123,
@ -923,7 +765,7 @@ const wordCloudData = ref([
opacity: 1
},
{
text: "中美关系",
text: "民主",
top: 171.5,
left: 212.5,
width: 81,
@ -931,9 +773,9 @@ const wordCloudData = ref([
fontSize: 14,
opacity: 0.8
},
{ text: "台独", top: 135.5, left: 42.5, width: 57, height: 24, fontSize: 16, opacity: 1 },
{ text: "就職典禮", top: 135.5, left: 42.5, width: 57, height: 24, fontSize: 16, opacity: 1 },
{
text: "台海和平",
text: "總統",
top: 228.5,
left: 230.5,
width: 81,
@ -942,7 +784,7 @@ const wordCloudData = ref([
opacity: 0.8
},
{
text: "坚决反对",
text: "人民",
top: 233.5,
left: 38.5,
width: 73,
@ -951,7 +793,7 @@ const wordCloudData = ref([
opacity: 0.7
},
{
text: "联合公报",
text: "立委",
top: 241.5,
left: 130.5,
width: 73,
@ -960,7 +802,7 @@ const wordCloudData = ref([
opacity: 0.7
},
{
text: "有力反制",
text: "中國",
top: 211.5,
left: 143.5,
width: 73,
@ -968,32 +810,14 @@ const wordCloudData = ref([
fontSize: 12,
opacity: 1
},
{ text: "白宫", top: 176.5, left: 15.5, width: 49, height: 19, fontSize: 12, opacity: 0.8 },
{ text: "内政", top: 87.5, left: 36.5, width: 53, height: 22, fontSize: 14, opacity: 1 },
{ text: "访台", top: 103.5, left: 95.5, width: 49, height: 19, fontSize: 12, opacity: 0.8 },
{ text: "领土", top: 57.5, left: 72.5, width: 49, height: 19, fontSize: 12, opacity: 0.6 },
{ text: "原则", top: 77.5, left: 264.5, width: 49, height: 19, fontSize: 12, opacity: 0.7 },
{ text: "台湾", top: 195.5, left: 287.5, width: 49, height: 19, fontSize: 12, opacity: 0.8 }
{ text: "蕭美琴", top: 176.5, left: 15.5, width: 49, height: 19, fontSize: 12, opacity: 0.8 },
{ text: "民進", top: 87.5, left: 36.5, width: 53, height: 22, fontSize: 14, opacity: 1 },
{ text: "國會", top: 103.5, left: 95.5, width: 49, height: 19, fontSize: 12, opacity: 0.8 },
{ text: "中華民國", top: 57.5, left: 72.5, width: 49, height: 19, fontSize: 12, opacity: 0.6 },
{ text: "英文", top: 77.5, left: 264.5, width: 49, height: 19, fontSize: 12, opacity: 0.7 },
{ text: "兩岸", top: 195.5, left: 287.5, width: 49, height: 19, fontSize: 12, opacity: 0.8 }
]);
const showDetailsModal = ref(false);
const detailsChart = ref(null);
let myDetailsChart = null;
const openDetailsModal = (chartConfig) => {
showDetailsModal.value = true;
nextTick(() => {
if (detailsChart.value) {
myDetailsChart = echarts.init(detailsChart.value);
myDetailsChart.setOption(chartConfig.option);
}
});
};
const closeDetailsModal = () => {
showDetailsModal.value = false;
if (myDetailsChart) {
myDetailsChart.dispose();
myDetailsChart = null;
}
};
//
let timer = null;
const automaticPlay = () => {
@ -1068,7 +892,7 @@ onMounted(() => {
color: #fff;
}
.tabs {
display: flex;
display: none;
margin-bottom: 15px;
border-bottom: 2px solid #1a5a9c;
}
@ -1471,4 +1295,4 @@ onMounted(() => {
margin-top: -24px;
margin-left: -2px;
}
</style>
</style>