This commit is contained in:
qumeng039@126.com 2025-07-08 16:32:13 +08:00
parent 908bcfc5b1
commit 99acd814eb
11 changed files with 437 additions and 394 deletions

View File

@ -249,6 +249,7 @@ const showToggleJianjie = ref(false);
<style scoped>
.app-container {
width: 100vw;
padding-bottom: 20px;
background-image: url("./assets/images/bci.png");
background-size:cover;
background-repeat: no-repeat;
@ -272,7 +273,7 @@ const showToggleJianjie = ref(false);
}
.aside {
width: 320px;
height: 100%;
height: 954px;
border: 2px;
padding: 16px;
left: 16px;

View File

@ -47,14 +47,14 @@
</template>
<script setup>
import { ref, onMounted, onUnmounted } from 'vue';
import { useKeyNodeStore } from '@/store/keyNodeStore1';
import { ref, onMounted, onUnmounted } from "vue";
import { useKeyNodeStore } from "@/store/keyNodeStore1";
import LeaderList from './KeyNodeRecognition1/components/LeaderList.vue';
import GraphPanel from './KeyNodeRecognition1/components/GraphPanel.vue';
import DetailsModal from './KeyNodeRecognition1/components/DetailsModal.vue';
import LeaderDetailDialog from './KeyNodeRecognition1/components/LeaderDetailDialog.vue';
import PostDetailDialog from './KeyNodeRecognition1/components/PostDetailDialog.vue';
import LeaderList from "./KeyNodeRecognition1/components/LeaderList.vue";
import GraphPanel from "./KeyNodeRecognition1/components/GraphPanel.vue";
import DetailsModal from "./KeyNodeRecognition1/components/DetailsModal.vue";
import LeaderDetailDialog from "./KeyNodeRecognition1/components/LeaderDetailDialog.vue";
import PostDetailDialog from "./KeyNodeRecognition1/components/PostDetailDialog.vue";
import LeaderAnalysis from "./KeyNodeRecognition1/components/LeaderAnalysis.vue";
import EventHeatmap from "../components/weight/EventHeatmap.vue";
@ -224,4 +224,38 @@ const wordCloudData = ref([
.leader-containner2 {
margin-top: 10px;
}
:deep(.custom-leader-dialog) {
width: 640px;
height: 680px;
border-width: 0px, 0px, 0px, 0px;
border-style: solid;
border-image-source: linear-gradient(180deg, #3aa1f8 0%, rgba(58, 161, 248, 0.2) 100%);
background-color: rgba(6, 45, 90, 1);
border: 1px solid #1a8bff;
border-radius: 2px;
padding: 0 0;
}
:deep(.custom-leader-dialog) .dialog-content {
width: 100%;
height: 100%;
padding: 23px 23px;
}
:deep(.custom-leader-post-dialog) {
width: 640px;
border-width: 0px, 0px, 0px, 0px;
border-style: solid;
border-image-source: linear-gradient(180deg, #3aa1f8 0%, rgba(58, 161, 248, 0.2) 100%);
background-color: rgba(6, 45, 90, 1);
border: 1px solid #1a8bff;
border-radius: 2px;
padding: 0 0;
z-index: 1;
}
:deep(.custom-leader-post-dialog) .dialog-content {
width: 100%;
padding: 25px 25px;
}
</style>

View File

@ -48,7 +48,7 @@
<div class="content">
<!-- Title Image: using a placeholder as the local asset is not available -->
<img
src="../../assets/images/chuanbofenxititle.png"
src="@/assets/images/chuanbofenxititle.png"
alt="传播意见领袖分析"
class="title-img"
style="margin-top: -22px; margin-left: -24px"

View File

@ -1,6 +1,5 @@
<template>
<el-dialog v-model="isVisible" width="640" align-center class="custom-dialog">
<template v-if="store.activeLeader">
<el-dialog v-model="isVisible" width="640" align-center class="custom-leader-dialog">
<img src="@/assets/images/leaderDialogTitle.png" alt="" class="dialogTitleImg" />
<div class="dialog-content">
<div class="dialog-content-leaderInfo">
@ -8,12 +7,8 @@
<div class="leaderInfo-message">
<div class="leader-name">{{ store.activeLeader.name }}</div>
<div class="leader-heat">
<div class="fancy">
粉丝量:  {{ store.activeLeader.leaderOriginInfo.followers }}
</div>
<div class="post-number">
发帖数:  {{ store.activeLeader.leaderOriginInfo.posts }}
</div>
<div class="fancy">粉丝量:  {{ store.activeLeader.leaderOriginInfo.followers }}</div>
<div class="post-number">发帖数:  {{ store.activeLeader.leaderOriginInfo.posts }}</div>
</div>
</div>
</div>
@ -70,14 +65,13 @@
</div>
</div>
</div>
</template>
</el-dialog>
</template>
<script setup>
import { computed } from 'vue';
import { useKeyNodeStore } from '@/store/keyNodeStore1';
import { Icon } from '@iconify/vue';
import { computed } from "vue";
import { useKeyNodeStore } from "@/store/keyNodeStore1";
import { Icon } from "@iconify/vue";
const store = useKeyNodeStore();
@ -92,25 +86,10 @@ const isVisible = computed({
</script>
<style scoped>
:deep(.custom-dialog) {
width: 640px;
height: 680px;
border-width: 0px, 0px, 0px, 0px;
border-style: solid;
border-image-source: linear-gradient(180deg, #3aa1f8 0%, rgba(58, 161, 248, 0.2) 100%);
background-color: rgba(6, 45, 90, 1);
border: 1px solid #1a8bff;
border-radius: 2px;
padding: 0 0;
}
.dialogTitleImg {
margin-top: -23px;
}
:deep(.custom-dialog) .dialog-content {
width: 100%;
height: 100%;
padding: 23px 23px;
}
.dialog-content-leaderInfo {
width: 100%;
height: 70px;

View File

@ -13,7 +13,9 @@
<Icon icon="la:comment-dots" width="25" height="25" /> {{ store.currentPost.comment }}
</div>
<div class="item-heat-transmit">
<Icon icon="mdi:share-outline" width="25" height="25" /> {{ store.currentPost.transmit }}
<Icon icon="mdi:share-outline" width="25" height="25" /> {{
store.currentPost.transmit
}}
</div>
</div>
</div>
@ -23,9 +25,9 @@
</template>
<script setup>
import { computed } from 'vue';
import { useKeyNodeStore } from '@/store/keyNodeStore1';
import { Icon } from '@iconify/vue';
import { computed } from "vue";
import { useKeyNodeStore } from "@/store/keyNodeStore1";
import { Icon } from "@iconify/vue";
const store = useKeyNodeStore();
@ -39,22 +41,7 @@ const isVisible = computed({
});
</script>
<style scoped>
:deep(.custom-leader-post-dialog) {
width: 640px;
border-width: 0px, 0px, 0px, 0px;
border-style: solid;
border-image-source: linear-gradient(180deg, #3aa1f8 0%, rgba(58, 161, 248, 0.2) 100%);
background-color: rgba(6, 45, 90, 1);
border: 1px solid #1a8bff;
border-radius: 2px;
padding: 0 0;
z-index: 1;
}
:deep(.custom-leader-post-dialog) .dialog-content {
width: 100%;
padding: 25px 25px;
}
<style>
.content {
color: #fff;
opacity: 0.7;
@ -64,6 +51,9 @@ const isVisible = computed({
justify-content: flex-end;
margin-top: 20px;
}
.heat .item-heat-detail {
display: flex;
}
.heat .item-heat-detail div {
width: 70px;
color: #fff;

View File

@ -250,7 +250,6 @@ const node9Followers = [
{ name: "从头再来_congtouzailai", avatar: node9_9 }
];
const allLeaderData = ref(props.allLeaderData);
const chart = ref(null);
const allGraphData = ref({ nodes: [], edges: [] });
@ -272,13 +271,28 @@ const initAllGraphData = async () => {
const edges = [];
const node2Avatars = [
node2_1, node2_2, node2_3, node2_4, node2_5,
node2_6, node2_7, node2_8, node2_9, node2_10
node2_1,
node2_2,
node2_3,
node2_4,
node2_5,
node2_6,
node2_7,
node2_8,
node2_9,
node2_10
];
const node2Names = [
'Andy Ngo', 'Andy Ngo', 'Ian Miles Cheong', '简爱_jianai',
'唯有基督拯救人类!', 'wethenorth - 1984', 'Lomt Lea🅰',
'Chad Felix Greene 🇮🇱', 'AlinaSalazarGongora', 'Gary Du'
"Andy Ngo",
"Andy Ngo",
"Ian Miles Cheong",
"简爱_jianai",
"唯有基督拯救人类!",
"wethenorth - 1984",
"Lomt Lea🅰",
"Chad Felix Greene 🇮🇱",
"AlinaSalazarGongora",
"Gary Du"
];
for (const [leaderIndex, leader] of allLeaderData.value.entries()) {
@ -347,7 +361,7 @@ const initAllGraphData = async () => {
symbolSize: 25,
category: 1,
value: "",
label: { show: false },
label: { show: false }
});
nodeAdded = true;
}
@ -364,7 +378,7 @@ const initAllGraphData = async () => {
symbolSize: 25,
category: 1,
value: "",
label: { show: false },
label: { show: false }
});
nodeAdded = true;
}
@ -381,7 +395,7 @@ const initAllGraphData = async () => {
symbolSize: 25,
category: 1,
value: "",
label: { show: false },
label: { show: false }
});
nodeAdded = true;
}
@ -398,7 +412,7 @@ const initAllGraphData = async () => {
symbolSize: 25,
category: 1,
value: "",
label: { show: false },
label: { show: false }
});
nodeAdded = true;
}
@ -486,27 +500,26 @@ const initAllGraphData = async () => {
label: { show: false }
});
nodeAdded = true;
}
else {
} else {
// 使
nodes.push({
id: userId,
name: `user ${i}`,
symbol: "circle",
symbolSize: 25,
category: 1,
value: "",
label: { show: false },
itemStyle: {
color: {
type: "linear",
colorStops: [
{ offset: 0, color: "#035e96" },
{ offset: 1, color: "#34a7b0" }
]
}
}
});
// nodes.push({
// id: userId,
// name: `user ${i}`,
// symbol: "circle",
// symbolSize: 25,
// category: 1,
// value: "",
// label: { show: false },
// itemStyle: {
// color: {
// type: "linear",
// colorStops: [
// { offset: 0, color: "#035e96" },
// { offset: 1, color: "#34a7b0" }
// ]
// }
// }
// });
nodeAdded = true;
}
@ -521,33 +534,32 @@ const initAllGraphData = async () => {
}
//
const splatteringCount = Math.floor(Math.random() * 11) + 10; // 10~20
for (let i = 0; i < splatteringCount; i++) {
const userId = `user_splattering_${i}`;
nodes.push({
id: userId,
name: `user ${i}`,
symbol: "circle",
symbolSize: 25,
category: 1,
value: "",
label: { show: false },
itemStyle: {
color: {
type: "linear",
colorStops: [
{ offset: 0, color: "#035e96" },
{ offset: 1, color: "#34a7b0" }
]
}
}
});
}
// const splatteringCount = Math.floor(Math.random() * 11) + 10; // 10~20
// for (let i = 0; i < splatteringCount; i++) {
// const userId = `user_splattering_${i}`;
// nodes.push({
// id: userId,
// name: `user ${i}`,
// symbol: "circle",
// symbolSize: 25,
// category: 1,
// value: "",
// label: { show: false },
// itemStyle: {
// color: {
// type: "linear",
// colorStops: [
// { offset: 0, color: "#035e96" },
// { offset: 1, color: "#34a7b0" }
// ]
// }
// }
// });
// }
allGraphData.value = { nodes, edges };
console.log(allGraphData.value);
};
// timestamp
const getVisibleGraphData = () => {
const leaders = allLeaderData.value.slice(0, props.timestamp);

View File

@ -16,7 +16,17 @@
:panelTrendData="[40105, 24845, 27917, 717, 444]"
:panelXAxisLabels="['2023.10.11', '2023.10.14', '2023.10.18', '2023.10.22', '2023.10.25']"
:granularTrendData="[28545, 13922, 13719, 16651, 18240, 2205, 274, 157, 315]"
:granularXAxisLabels="['10.9 13h', '10.11 14h', '10.13 16h', '10.15 17h', '10.17 18h', '10.19 20h', '10.21 21h', '10.23 22h', '10.25 23h']"
:granularXAxisLabels="[
'10.9 13h',
'10.11 14h',
'10.13 16h',
'10.15 17h',
'10.17 18h',
'10.19 20h',
'10.21 21h',
'10.23 22h',
'10.25 23h'
]"
/>
<PostDynamics :posts="store.posts" @handle:openDialog="handleOpenPostDialog" />
<WordCloud :wordsCloudList="wordCloudData" />
@ -29,14 +39,14 @@
</template>
<script setup>
import { ref, onMounted, onUnmounted } from 'vue';
import { useKeyNodeStore } from '@/store/keyNodeStore2';
import { ref, onMounted, onUnmounted } from "vue";
import { useKeyNodeStore } from "@/store/keyNodeStore2";
import LeaderList from './KeyNodeRecognition2/components/LeaderList.vue';
import GraphPanel from './KeyNodeRecognition2/components/GraphPanel.vue';
import DetailsModal from './KeyNodeRecognition2/components/DetailsModal.vue';
import LeaderDetailDialog from './KeyNodeRecognition2/components/LeaderDetailDialog.vue';
import PostDetailDialog from './KeyNodeRecognition2/components/PostDetailDialog.vue';
import LeaderList from "./KeyNodeRecognition2/components/LeaderList.vue";
import GraphPanel from "./KeyNodeRecognition2/components/GraphPanel.vue";
import DetailsModal from "./KeyNodeRecognition2/components/DetailsModal.vue";
import LeaderDetailDialog from "./KeyNodeRecognition2/components/LeaderDetailDialog.vue";
import PostDetailDialog from "./KeyNodeRecognition2/components/PostDetailDialog.vue";
import LeaderAnalysis from "./KeyNodeRecognition2/components/LeaderAnalysis.vue";
import EventHeatmap from "../components/weight/EventHeatmap.vue";
@ -267,4 +277,44 @@ const wordCloudData = ref([
.leader-containner2 {
margin-top: 10px;
}
:deep(.leader-custom-dialog) {
width: 640px;
height: 680px;
border-width: 0px, 0px, 0px, 0px;
border-style: solid;
border-image-source: linear-gradient(180deg, #3aa1f8 0%, rgba(58, 161, 248, 0.2) 100%);
background-color: rgba(6, 45, 90, 1) !important;
border: 1px solid #1a8bff;
border-radius: 2px;
padding: 0 0;
}
:deep(.leader-custom-dialog) .dialog-content {
width: 100%;
height: 100%;
padding: 23px 23px;
background-color: rgba(6, 45, 90, 1) !important;
}
:deep(.custom-leader-post-dialog) {
width: 640px;
border-width: 0px, 0px, 0px, 0px;
border-style: solid;
border-image-source: linear-gradient(180deg, #3aa1f8 0%, rgba(58, 161, 248, 0.2) 100%);
background-color: rgba(6, 45, 90, 1);
border: 1px solid #1a8bff;
border-radius: 2px;
padding: 0 0;
z-index: 1;
}
:deep(.custom-leader-post-dialog) .dialog-content {
width: 100%;
padding: 25px 25px;
}
:deep(.custom-leader-post-dialog) .dialog-content .content {
color: #fff;
opacity: 0.7;
}
</style>

View File

@ -48,8 +48,7 @@
<div class="content">
<!-- Title Image: using a placeholder as the local asset is not available -->
<img
src="../../assets/images/chuanbofenxititle.png"
alt="传播意见领袖分析"
src="../../../assets/images/chuanbo-show-title.png"
class="title-img"
style="margin-top: -22px; margin-left: -24px"
/>
@ -89,7 +88,7 @@
</div>
<!-- X-Axis Labels -->
<div class="x-axis-labels">
<span v-for="n in 6" :key="n">{{ (n - 1) * 2 }}</span>
<span v-for="n in 6" :key="n">{{ ((chart.max / 5) * (n - 1)).toFixed(0) }}</span>
<span class="unit">{{ chart.unit }}</span>
</div>
</div>
@ -108,30 +107,30 @@ const chartData = ref([
id: 1,
title: "平均发帖数",
unit: "数量",
max: 10,
max: 20,
rows: [
{ label: "领袖", value: 6.4, type: "leader" },
{ label: "所有用户", value: 0.46, type: "user" }
{ label: "桥梁节点", value: 14.4, type: "leader" },
{ label: "其他节点", value: 5.2, type: "user" }
]
},
{
id: 2,
title: "帖子平均生存周期",
unit: "天数",
max: 10,
unit: "分钟",
max: 40,
rows: [
{ label: "领袖", value: 2.73, type: "leader" },
{ label: "所有用户", value: 2.32, type: "user" }
{ label: "桥梁节点", value: (2245.87 / 60).toFixed(2), type: "leader" },
{ label: "其他节点", value: (67.43 / 60).toFixed(2), type: "user" }
]
},
{
id: 3,
title: "平均粉丝数",
unit: "数",
max: 10,
unit: "",
max: 1200,
rows: [
{ label: "领袖", value: 290.4, type: "leader", highlight: false },
{ label: "所有用户", value: 1.31, type: "user" }
{ label: "桥梁节点", value: 1033, type: "leader", highlight: false },
{ label: "其他节点", value: 120, type: "user" }
]
}
]);

View File

@ -1,5 +1,5 @@
<template>
<el-dialog v-model="isVisible" width="640" align-center class="custom-dialog">
<el-dialog v-model="isVisible" width="640" align-center class="leader-custom-dialog">
<template v-if="store.activeLeader">
<img src="@/assets/images/leaderDialogTitle.png" alt="" class="dialogTitleImg" />
<div class="dialog-content">
@ -8,9 +8,7 @@
<div class="leaderInfo-message">
<div class="leader-name">{{ store.activeLeader.name }}</div>
<div class="leader-heat">
<div class="fancy">
粉丝量:  {{ store.activeLeader.leaderOriginInfo.followers }}
</div>
<div class="fancy">粉丝量:  {{ store.activeLeader.leaderOriginInfo.followers }}</div>
<div class="post-number">
发帖数:  {{ store.activeLeader.leaderOriginInfo.posts }}
</div>
@ -75,9 +73,9 @@
</template>
<script setup>
import { computed } from 'vue';
import { useKeyNodeStore } from '@/store/keyNodeStore2';
import { Icon } from '@iconify/vue';
import { computed } from "vue";
import { useKeyNodeStore } from "@/store/keyNodeStore2";
import { Icon } from "@iconify/vue";
const store = useKeyNodeStore();
@ -92,25 +90,10 @@ const isVisible = computed({
</script>
<style scoped>
:deep(.custom-dialog) {
width: 640px;
height: 680px;
border-width: 0px, 0px, 0px, 0px;
border-style: solid;
border-image-source: linear-gradient(180deg, #3aa1f8 0%, rgba(58, 161, 248, 0.2) 100%);
background-color: rgba(6, 45, 90, 1);
border: 1px solid #1a8bff;
border-radius: 2px;
padding: 0 0;
}
.dialogTitleImg {
margin-top: -23px;
}
:deep(.custom-dialog) .dialog-content {
width: 100%;
height: 100%;
padding: 23px 23px;
}
.dialog-content-leaderInfo {
width: 100%;
height: 70px;

View File

@ -1,6 +1,5 @@
<template>
<el-dialog v-model="isVisible" width="640" align-center class="custom-leader-post-dialog">
<template v-if="store.currentPost">
<img src="@/assets/images/head/post-dialog-title.png" alt="" class="postTitleImage" />
<div class="dialog-content">
<div class="content">{{ store.currentPost.content }}</div>
@ -13,19 +12,20 @@
<Icon icon="la:comment-dots" width="25" height="25" /> {{ store.currentPost.comment }}
</div>
<div class="item-heat-transmit">
<Icon icon="mdi:share-outline" width="25" height="25" /> {{ store.currentPost.transmit }}
<Icon icon="mdi:share-outline" width="25" height="25" /> {{
store.currentPost.transmit
}}
</div>
</div>
</div>
</div>
</template>
</el-dialog>
</template>
<script setup>
import { computed } from 'vue';
import { useKeyNodeStore } from '@/store/keyNodeStore2';
import { Icon } from '@iconify/vue';
import { computed } from "vue";
import { useKeyNodeStore } from "@/store/keyNodeStore2";
import { Icon } from "@iconify/vue";
const store = useKeyNodeStore();
@ -40,30 +40,14 @@ const isVisible = computed({
</script>
<style scoped>
:deep(.custom-leader-post-dialog) {
width: 640px;
border-width: 0px, 0px, 0px, 0px;
border-style: solid;
border-image-source: linear-gradient(180deg, #3aa1f8 0%, rgba(58, 161, 248, 0.2) 100%);
background-color: rgba(6, 45, 90, 1);
border: 1px solid #1a8bff;
border-radius: 2px;
padding: 0 0;
z-index: 1;
}
:deep(.custom-leader-post-dialog) .dialog-content {
width: 100%;
padding: 25px 25px;
}
.content {
color: #fff;
opacity: 0.7;
}
.heat {
display: flex;
justify-content: flex-end;
margin-top: 20px;
}
.heat .item-heat-detail {
display: flex;
}
.heat .item-heat-detail div {
width: 70px;
color: #fff;

View File

@ -118,7 +118,6 @@ import node9_7 from "@/assets/images/qiaoliang/Change Zhang🇨🇦.png";
import node9_8 from "@/assets/images/qiaoliang/Andy C.png";
import node9_9 from "@/assets/images/qiaoliang/从头再来_congtouzailai.png.png";
const emit = defineEmits(["handle:openDialog"]);
const props = defineProps({
timestamp: {
@ -249,7 +248,6 @@ const node9Followers = [
{ name: "从头再来_congtouzailai", avatar: node9_9 }
];
const allLeaderData = ref(props.allLeaderData);
const chart = ref(null);
const allGraphData = ref({ nodes: [], edges: [] });
@ -271,13 +269,28 @@ const initAllGraphData = async () => {
const edges = [];
const node2Avatars = [
node2_1, node2_2, node2_3, node2_4, node2_5,
node2_6, node2_7, node2_8, node2_9, node2_10
node2_1,
node2_2,
node2_3,
node2_4,
node2_5,
node2_6,
node2_7,
node2_8,
node2_9,
node2_10
];
const node2Names = [
'Andy Ngo', 'Andy Ngo', 'Ian Miles Cheong', '简爱_jianai',
'唯有基督拯救人类!', 'wethenorth - 1984', 'Lomt Lea🅰',
'Chad Felix Greene 🇮🇱', 'AlinaSalazarGongora', 'Gary Du'
"Andy Ngo",
"Andy Ngo",
"Ian Miles Cheong",
"简爱_jianai",
"唯有基督拯救人类!",
"wethenorth - 1984",
"Lomt Lea🅰",
"Chad Felix Greene 🇮🇱",
"AlinaSalazarGongora",
"Gary Du"
];
for (const [leaderIndex, leader] of allLeaderData.value.entries()) {
@ -346,7 +359,7 @@ const initAllGraphData = async () => {
symbolSize: 25,
category: 1,
value: "",
label: { show: false },
label: { show: false }
});
nodeAdded = true;
}
@ -363,7 +376,7 @@ const initAllGraphData = async () => {
symbolSize: 25,
category: 1,
value: "",
label: { show: false },
label: { show: false }
});
nodeAdded = true;
}
@ -380,7 +393,7 @@ const initAllGraphData = async () => {
symbolSize: 25,
category: 1,
value: "",
label: { show: false },
label: { show: false }
});
nodeAdded = true;
}
@ -397,7 +410,7 @@ const initAllGraphData = async () => {
symbolSize: 25,
category: 1,
value: "",
label: { show: false },
label: { show: false }
});
nodeAdded = true;
}
@ -485,27 +498,26 @@ const initAllGraphData = async () => {
label: { show: false }
});
nodeAdded = true;
}
else {
} else {
// 使
nodes.push({
id: userId,
name: `user ${i}`,
symbol: "circle",
symbolSize: 25,
category: 1,
value: "",
label: { show: false },
itemStyle: {
color: {
type: "linear",
colorStops: [
{ offset: 0, color: "#035e96" },
{ offset: 1, color: "#34a7b0" }
]
}
}
});
// nodes.push({
// id: userId,
// name: `user ${i}`,
// symbol: "circle",
// symbolSize: 25,
// category: 1,
// value: "",
// label: { show: false },
// itemStyle: {
// color: {
// type: "linear",
// colorStops: [
// { offset: 0, color: "#035e96" },
// { offset: 1, color: "#34a7b0" }
// ]
// }
// }
// });
nodeAdded = true;
}
@ -520,33 +532,32 @@ const initAllGraphData = async () => {
}
//
const splatteringCount = Math.floor(Math.random() * 11) + 10; // 10~20
for (let i = 0; i < splatteringCount; i++) {
const userId = `user_splattering_${i}`;
nodes.push({
id: userId,
name: `user ${i}`,
symbol: "circle",
symbolSize: 25,
category: 1,
value: "",
label: { show: false },
itemStyle: {
color: {
type: "linear",
colorStops: [
{ offset: 0, color: "#035e96" },
{ offset: 1, color: "#34a7b0" }
]
}
}
});
}
// const splatteringCount = Math.floor(Math.random() * 11) + 10; // 10~20
// for (let i = 0; i < splatteringCount; i++) {
// const userId = `user_splattering_${i}`;
// nodes.push({
// id: userId,
// name: `user ${i}`,
// symbol: "circle",
// symbolSize: 25,
// category: 1,
// value: "",
// label: { show: false },
// itemStyle: {
// color: {
// type: "linear",
// colorStops: [
// { offset: 0, color: "#035e96" },
// { offset: 1, color: "#34a7b0" }
// ]
// }
// }
// });
// }
allGraphData.value = { nodes, edges };
console.log(allGraphData.value);
};
// timestamp
const getVisibleGraphData = () => {
const leaders = allLeaderData.value.slice(0, props.timestamp);