链路预测模块贴文详情

This commit is contained in:
qumeng039@126.com 2025-08-27 10:25:49 +08:00
parent ede1aec0b0
commit 8267eaf7d7
10 changed files with 103 additions and 16 deletions

View File

@ -37,6 +37,7 @@ const handleOpenDialog = (isOpen) => (openDialog.value = isOpen)
.el-container-inner {
padding-left: vw(13);
margin-top: vh(10);
.el-aside {
color: aliceblue;
font-family: Arial, sans-serif;
@ -45,6 +46,7 @@ const handleOpenDialog = (isOpen) => (openDialog.value = isOpen)
flex: 1;
padding: 0 0;
padding: 0 vw(13);
overflow: hidden;
}
}
}

View File

@ -112,3 +112,8 @@ export function getCharacterSocialCommunityDetailNodes(
export function getInteractionCount(source, target) {
return http.get(`/linkPrediction/interactionCount?source=${source}&target=${target}`)
}
//获取贴文详情
export function getPostDetail(postId) {
return http.get(`/linkPrediction/postDetail?postId=${postId}`)
}

View File

@ -14,7 +14,8 @@ import {
getCharacterSocialCommunityNodes,
getCharacterSocialCommunityStatistics,
getCharacterSocialCommunityDetailNodes,
getInteractionCount
getInteractionCount,
getPostDetail
} from "@/service/api/linkPrediction"
import defaultAvatar from "@/assets/images/avatar/default.png"
@ -220,6 +221,13 @@ export const useCharacterInteractionStore = defineStore("characterInteraction",
const res = await getInteractionCount(source, target)
if (res.code != 200) return
return res.data
},
//点击贴文list获取任意贴文信息
async initPostDetail(postId) {
const res = await getPostDetail(postId)
if (res.code == 200) {
return res.data
}
}
},
persist: true // 开启持久化
@ -513,6 +521,13 @@ export const useSocialGroupsStore = defineStore("socialGroups", {
const res = await getInteractionCount(source, target)
if (res.code != 200) return
return res.data
},
//点击贴文list获取任意贴文信息
async initPostDetail(postId) {
const res = await getPostDetail(postId)
if (res.code == 200) {
return res.data
}
}
},
persist: true // 开启持久化
@ -708,6 +723,13 @@ export const useCharacterHiddenStore = defineStore("characterHidden", {
const res = await getInteractionCount(source, target)
if (res.code != 200) return
return res.data
},
//点击贴文list获取任意贴文信息
async initPostDetail(postId) {
const res = await getPostDetail(postId)
if (res.code == 200) {
return res.data
}
}
},
persist: true // 开启持久化

View File

@ -489,6 +489,7 @@ watch(topicDialog, (val) => {
display: flex;
flex-direction: column;
gap: vw(10);
.top-container {
width: 100%;
height: vh(110);

View File

@ -21,7 +21,7 @@
></Graph>
</div>
<div class="postList">
<PostList :posts="interactionStore.posts"></PostList>
<PostList :posts="interactionStore.posts" @click:openDialog="handlePostDetail"></PostList>
</div>
</div>
<div class="right-container">
@ -105,6 +105,13 @@
</div>
</div>
</el-dialog>
<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">{{ currentPostContent }}</div>
</div>
</el-dialog>
</div>
</template>
@ -129,10 +136,13 @@ const { communityNodeList } = storeToRefs(interactionStore)
//
const userInfoDialog = ref(false)
const postDialog = ref(false)
const curSelectedUser = ref(null)
const storeId = "characterInteraction"
const currentPostContent = ref("")
// &&
const handleSelectedUserGroup = async (group) => {
interactionStore.timeList = group.timeList //
@ -149,6 +159,14 @@ const handleOpenUserInfoDialog = (params) => {
userInfoDialog.value = params.userInfoDialog
curSelectedUser.value = params.curSelectedUser
}
const handlePostDetail = async (post) => {
const res = await interactionStore.initPostDetail(post.postId)
if (res) {
currentPostContent.value = res
postDialog.value = true
}
}
onMounted(() => {
interactionStore.curComponent = "CommunityNode"
interactionStore.initGroupList() //
@ -176,7 +194,7 @@ provide("statisticsList", interactionStore.statisticsList)
height: vh(300);
}
:deep(.custom-dialog) .postTitleImage {
margin-top: vh(-24);
margin-top: vh(-27);
margin-left: vw(-2);
}
:deep(.custom-dialog) .userInfoTitle {

View File

@ -21,7 +21,10 @@
></Graph>
</div>
<div class="postList">
<PostList :posts="characterHiddenStore.posts"></PostList>
<PostList
:posts="characterHiddenStore.posts"
@click:openDialog="handlePostDetail"
></PostList>
</div>
</div>
<div class="right-container">
@ -109,6 +112,13 @@
</div>
</div>
</el-dialog>
<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">{{ currentPostContent }}</div>
</div>
</el-dialog>
</div>
</template>
@ -132,10 +142,11 @@ const characterHiddenStore = useCharacterHiddenStore()
const { communityNodeList } = storeToRefs(characterHiddenStore)
//
const userInfoDialog = ref(false)
const postDialog = ref(false)
const curSelectedUser = ref(null)
const storeId = "characterHidden"
const currentPostContent = ref("")
const handleOpenUserInfoDialog = (params) => {
userInfoDialog.value = params.userInfoDialog
curSelectedUser.value = params.curSelectedUser
@ -152,7 +163,13 @@ const handleSelectedUserGroup = (group) => {
group.relationId
)
}
const handlePostDetail = async (post) => {
const res = await characterHiddenStore.initPostDetail(post.postId)
if (res) {
currentPostContent.value = res
postDialog.value = true
}
}
onMounted(() => {
characterHiddenStore.initGroupList()
characterHiddenStore.initCharacterSocialHiddenPostList("79") //
@ -179,7 +196,7 @@ provide("statisticsList", characterHiddenStore.statisticsList)
height: vh(300);
}
:deep(.custom-dialog) .postTitleImage {
margin-top: vh(-24);
margin-top: vh(-27);
margin-left: vw(-2);
}
:deep(.custom-dialog) .userInfoTitle {

View File

@ -39,6 +39,7 @@ const props = defineProps({
default: () => []
}
})
const emit = defineEmits(["click:openDialog"])
const listRef = ref(null)
let scrollTimer = null
let direction = 1 // 1: , -1:
@ -67,7 +68,9 @@ function pauseScroll() {
function resumeScroll() {
startScroll()
}
const handleLeaderPost = (post) => {
emit("click:openDialog", post)
}
onMounted(() => {
startScroll()
})
@ -80,6 +83,7 @@ onBeforeUnmount(() => {
.postList-component {
width: 100%;
height: 100%;
overflow: hidden; //
.ContextoftheincidentTitle {
margin-top: vh(-18);
margin-left: vw(-11);

View File

@ -40,7 +40,7 @@ const props = defineProps({
default: () => []
}
})
const emit = defineEmits(["click:openDialog"])
const listRef = ref(null)
let scrollTimer = null
let direction = 1 // 1: , -1:
@ -70,7 +70,9 @@ function pauseScroll() {
function resumeScroll() {
startScroll()
}
const handleLeaderPost = (post) => {
emit("click:openDialog", post)
}
onMounted(() => {
startScroll()
})
@ -83,6 +85,7 @@ onBeforeUnmount(() => {
.postList-component {
width: 100%;
height: 100%;
overflow: hidden; //
.ContextoftheincidentTitle {
margin-left: vw(-12);
margin-top: vh(-17);

View File

@ -19,7 +19,10 @@
></Graph>
</div>
<div class="postList">
<PostList :posts="socialGroupsStore.posts"></PostList>
<PostList
:posts="socialGroupsStore.posts"
@click:openDialog="handlePostDetail"
></PostList>
</div>
</div>
<div class="right-container">
@ -130,6 +133,13 @@
</div>
</div>
</el-dialog>
<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">{{ currentPostContent }}</div>
</div>
</el-dialog>
</div>
</template>
@ -162,7 +172,7 @@ const curSelectedUser = ref(null)
//
const currentPostPost = ref(null)
const currentPostContent = ref("")
//
const handleSelectedUserGroup = (group) => {
socialGroupsStore.curComponent = "detailkNode"
@ -179,7 +189,13 @@ const handleOpenUserInfoDialog = (params) => {
userInfoDialog.value = params.userInfoDialog
curSelectedUser.value = params.curSelectedUser
}
const handlePostDetail = async (post) => {
const res = await socialGroupsStore.initPostDetail(post.postId)
if (res) {
currentPostContent.value = res
postDialog.value = true
}
}
onMounted(() => {
socialGroupsStore.curComponent = "CommunityNode"
socialGroupsStore.initGroupList()
@ -208,7 +224,7 @@ provide("statisticsList", socialGroupsStore.statisticsList)
height: vh(300);
}
:deep(.custom-dialog) .postTitleImage {
margin-top: vh(-24);
margin-top: vh(-27);
margin-left: vw(-2);
}
:deep(.custom-dialog) .userInfoTitle {

View File

@ -10,7 +10,7 @@
</template>
<script setup>
import LoginPanel from "@/views/login/components/loginPanel.vue"
import LoginPanel from "./components/loginPanel.vue"
</script>
<style scoped lang="scss">
@ -26,7 +26,6 @@ import LoginPanel from "@/views/login/components/loginPanel.vue"
}
.body {
flex: 1;
background-image: url("@/assets/images/login/backimg.png");
background-repeat: no-repeat;
background-size: cover;