SocialNetworks_duan/src/views/GroupEvolution/groupIdentifyDiscovery/index.vue

244 lines
6.3 KiB
Vue
Raw Normal View History

2025-07-18 15:07:36 +08:00
<template>
<div class="layout-container">
<div class="top-container"></div>
<div class="content">
<div class="left-container">
<div class="userPanel">
<GroupPanel
:groupList="groupDiscoveryStore.groupList"
:title="groupPanelTitleImg"
></GroupPanel>
</div>
<div class="userChart">
<GroupChart
:title="groupChartTitleImg"
2025-08-04 17:40:17 +08:00
:moduleName="群体规模演化图"
:chartData="groupDiscoveryStore.chartData"
></GroupChart>
</div>
2025-07-18 15:07:36 +08:00
</div>
<div class="middle-container">
2025-08-05 14:23:32 +08:00
<div class="graph">
<GroupGraph
:store="groupDiscoveryStore"
@click:pointerDownAndSlide="handleChangeXAxis"
></GroupGraph>
</div>
<div class="postList">
<GroupPost
:posts="groupDiscoveryStore.posts"
2025-08-05 11:21:45 +08:00
:moduleName="moduleName"
@click:open-dialog="handleOpenPostDialog"
></GroupPost>
</div>
2025-07-18 15:07:36 +08:00
</div>
<div class="right-container">
<div class="anlysisPanel">
<GroupShow
:title="groupGroupShowImg"
:chartsData="groupDiscoveryStore.chartsData"
></GroupShow>
</div>
<div class="cloudWords">
<WordsCloud :wordsCloudList="groupDiscoveryStore.wordCloudData"></WordsCloud>
</div>
2025-07-18 15:07:36 +08:00
</div>
</div>
</div>
</template>
<script setup>
2025-08-05 10:04:27 +08:00
import { onMounted, ref } from "vue"
import GroupPanel from "../component/groupPanel.vue"
import GroupChart from "../component/groupChart.vue"
import GroupPost from "../component/groupPost.vue"
import GroupShow from "../component/groupShow.vue"
import WordsCloud from "../component/wordsCloud.vue"
2025-08-05 14:23:32 +08:00
import GroupGraph from "../component/groupGraph.vue"
2025-08-05 10:04:27 +08:00
import groupPanelTitleImg from "@/assets/images/groupEvolution/groupPanel-title.png"
import groupChartTitleImg from "@/assets/images/groupEvolution/chart-title.png"
import groupGroupShowImg from "@/assets/images/groupEvolution/groupDisc-title.png"
import { useGroupDiscoveryStore } from "@/store/groupEvolution/index"
2025-07-18 15:07:36 +08:00
const groupDiscoveryStore = useGroupDiscoveryStore();
2025-08-05 11:21:45 +08:00
const moduleName = '群体识别发现';
2025-07-18 15:07:36 +08:00
//控制弹窗
2025-08-05 10:04:27 +08:00
const postDialog = ref(false)
2025-07-18 15:07:36 +08:00
//当前选中的贴文数据
2025-08-05 10:04:27 +08:00
const currentPostPost = ref(null)
2025-07-18 15:07:36 +08:00
const handleOpenPostDialog = (post) => {
2025-08-05 10:04:27 +08:00
postDialog.value = true
currentPostPost.value = post
}
2025-08-05 14:23:32 +08:00
const handleChangeXAxis = (utcTime) => {
groupDiscoveryStore.initialPostByUtcTime(utcTime) //随着时间轴变动,更新贴文列表
}
2025-08-05 10:04:27 +08:00
onMounted(() => {
groupDiscoveryStore.initializeGroupList()
groupDiscoveryStore.initializeGroupScaleChart()
2025-08-05 14:23:32 +08:00
groupDiscoveryStore.initialGraphTimestamp()
2025-08-05 10:04:27 +08:00
})
2025-07-18 15:07:36 +08:00
</script>
<style scoped lang="less">
:deep(.custom-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(.post-dialog) {
height: 300px;
}
:deep(.custom-dialog) .postTitleImage {
margin-top: -24px;
margin-left: -2px;
}
:deep(.custom-dialog) .dialog-content {
width: 100%;
padding: 25px 20px;
}
:deep(.custom-dialog) .dialog-content .content {
color: rgba(255, 255, 255, 0.8);
font-family: "PingFang SC";
font-size: 16px;
font-style: normal;
font-weight: 400;
opacity: 0.7;
}
.post-content {
color: #fff;
font-size: 16px;
opacity: 0.7;
}
.heat {
display: flex;
justify-content: flex-end;
margin-top: 20px;
.item-heat-detail {
display: flex;
justify-content: space-between;
div {
display: flex;
align-items: center;
justify-content: center;
width: 70px;
color: #fff;
opacity: 0.7;
}
}
}
.layout-container {
width: 1544px;
display: flex;
flex-direction: column;
gap: 20px;
.top-container {
width: 100%;
height: 88px;
background-image: url(@/assets/images/linkPrediction/title/page-title.png);
background-repeat: no-repeat;
background-size: cover;
fill: linear-gradient(270deg, rgba(6, 61, 113, 0.1) 0%, rgba(8, 30, 56, 0.38) 100%);
stroke-width: 1px;
stroke: #3aa1f8;
}
.content {
width: 100%;
height: 805px;
display: flex;
justify-content: space-between;
gap: 15px;
.left-container {
width: 352px;
height: 100%;
display: flex;
flex-direction: column;
gap: 15px;
.userPanel {
width: 100%;
height: 540px;
border-radius: 2px;
flex-shrink: 0;
background-color: rgba(6, 45, 90, 0.3);
border: 1px solid rgba(0, 113, 188, 0.705);
}
.userChart {
flex: 1;
border-radius: 2px;
background-color: rgba(6, 45, 90, 0.3);
border: 1px solid rgba(0, 113, 188, 0.705);
overflow: auto;
-ms-overflow-style: none; /* IE 和 Edge */
scrollbar-width: none; /* Firefox */
}
}
.middle-container {
flex: 1;
display: flex;
flex-direction: column;
gap: 15px;
.search {
width: 100%;
height: 60px;
}
.graph {
width: 100%;
height: 541px;
background-color: #070a22;
border-radius: 4px;
background-color: rgba(6, 45, 90, 0.3);
border: 1px solid rgba(0, 113, 188, 0.705);
}
.postList {
flex: 1;
border-radius: 4px;
background-color: rgba(6, 45, 90, 0.3);
border: 1px solid rgba(0, 113, 188, 0.705);
fill: linear-gradient(270deg, rgba(6, 61, 113, 0.1) 0%, rgba(8, 30, 56, 0.38) 100%);
stroke-width: 1px;
stroke: #3aa1f8;
overflow: auto;
padding: 10px 10px;
}
}
.right-container {
width: 352px;
height: 100%;
display: flex;
flex-direction: column;
gap: 15px;
.anlysisPanel {
width: 100%;
height: 540px;
border-radius: 2px;
flex-shrink: 0;
background-color: rgba(6, 45, 90, 0.3);
border: 1px solid rgba(0, 113, 188, 0.705);
}
.cloudWords {
flex: 1;
border-radius: 2px;
flex-shrink: 0;
background-color: rgba(6, 45, 90, 0.3);
border: 1px solid rgba(0, 113, 188, 0.705);
}
}
}
}
</style>