SocialNetworks_duan/src/views/GroupEvolution/groupStructure/index.vue
2025-08-07 10:02:49 +08:00

258 lines
7.0 KiB
Vue
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<template>
<div class="layout-container">
<div class="top-container"></div>
<div class="content">
<div class="left-container">
<div class="userPanel">
<GroupPanel
:groupList="groupStructureStore.groupList"
:title="userPanelTitleImg"
></GroupPanel>
</div>
<!-- 全局连通性演化图 -->
<div class="userChart">
<GroupChart
:title="userChartTitleImg"
:moduleName="全局连通性演化图"
:chartData="groupStructureStore.chartData"
></GroupChart>
</div>
</div>
<div class="middle-container">
<div class="graph"></div>
<!-- 事件脉络分析 -->
<div class="postList">
<GroupPost
:posts="groupStructureStore.posts"
:moduleName="moduleName"
@click:open-dialog="handleOpenPostDialog"
></GroupPost>
</div>
</div>
<div class="right-container">
<!-- 群体结构演化分析 -->
<div class="anlysisPanel">
<GroupAnalysis
:title="groupAnalsisTitleImg"
:chartsData="groupStructureStore.chartsData"
></GroupAnalysis>
</div>
<!-- 累计词云图 -->
<div class="cloudWords">
<WordsCloud :wordsCloudList="groupStructureStore.wordCloudData"></WordsCloud>
</div>
</div>
</div>
<el-dialog v-model="postDialog" width="640" align-center class="custom-dialog">
<img src="@/assets/images/head/post-dialog-title.png" alt="" class="postTitleImage" />
<div class="dialog-content">
<div class="post-content">{{ currentPostPost.content }}</div>
<div class="heat">
<div class="item-heat-detail">
<div class="item-heat-like">
<Icon icon="ei:like" width="25" height="25" /> {{ currentPostPost.like }}
</div>
<div class="item-heat-comment">
<Icon icon="la:comment-dots" width="25" height="25" /> {{ currentPostPost.comment }}
</div>
<div class="item-heat-transmit">
<Icon icon="mdi:share-outline" width="25" height="25" /> {{
currentPostPost.transmit
}}
</div>
</div>
</div>
</div>
</el-dialog>
</div>
</template>
<script setup>
import { ref } from "vue";
import GroupPanel from "./components/groupPanel.vue";
import GroupChart from "../component/groupChart.vue";
import GroupPost from "../component/groupPost.vue";
import GroupAnalysis from "./components/groupAnalysis.vue";
import WordsCloud from "../component/wordsCloud.vue";
import userPanelTitleImg from "@/assets/images/groupEvolution/structure-panel-title.png";
import userChartTitleImg from "@/assets/images/groupEvolution/connectivity-title.png";
import groupAnalsisTitleImg from "@/assets/images/groupEvolution/structure-analysis-title.png";
import { Icon } from "@iconify/vue";
import { useGroupStructureStore } from "@/store/groupEvolution/index";
const groupStructureStore = useGroupStructureStore();
const moduleName = '群体结构演化分析';
//控制弹窗
const postDialog = ref(false);
//当前选中的贴文数据
const currentPostPost = ref(null);
const handleOpenPostDialog = (post) => {
postDialog.value = true;
currentPostPost.value = post;
console.log(currentPostPost.value);
};
</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>