248 lines
6.4 KiB
Vue
248 lines
6.4 KiB
Vue
<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"
|
|
:moduleName="'群体规模演化图'"
|
|
:chartData="groupDiscoveryStore.chartData"
|
|
></GroupChart>
|
|
</div>
|
|
</div>
|
|
<div class="middle-container">
|
|
<div class="graph">
|
|
<GroupGraph
|
|
:store="groupDiscoveryStore"
|
|
@click:pointerDownAndSlide="handleChangeXAxis"
|
|
></GroupGraph>
|
|
</div>
|
|
<div class="postList">
|
|
<GroupPost
|
|
:posts="groupDiscoveryStore.posts"
|
|
:moduleName="moduleName"
|
|
@click:open-dialog="handleOpenPostDialog"
|
|
></GroupPost>
|
|
</div>
|
|
</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>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</template>
|
|
|
|
<script setup>
|
|
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"
|
|
import GroupGraph from "../component/groupGraph.vue"
|
|
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"
|
|
|
|
const groupDiscoveryStore = useGroupDiscoveryStore()
|
|
|
|
const moduleName = "群体识别发现"
|
|
//控制弹窗
|
|
const postDialog = ref(false)
|
|
|
|
//当前选中的贴文数据
|
|
const currentPostPost = ref(null)
|
|
|
|
const handleOpenPostDialog = (post) => {
|
|
postDialog.value = true
|
|
currentPostPost.value = post
|
|
}
|
|
|
|
const handleChangeXAxis = (utcTime) => {
|
|
const timeList = groupDiscoveryStore.timeList
|
|
console.log(utcTime)
|
|
|
|
if (!timeList.includes(utcTime)) return
|
|
groupDiscoveryStore.initialPostByUtcTime(utcTime) //随着时间轴变动,更新贴文列表
|
|
}
|
|
|
|
onMounted(() => {
|
|
groupDiscoveryStore.initializeGroupList()
|
|
groupDiscoveryStore.initializeGroupScaleChart()
|
|
groupDiscoveryStore.initialGraphTimestamp()
|
|
})
|
|
</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>
|