From bb9aae91724da7e302bf3dc7a609d84504fdb81e Mon Sep 17 00:00:00 2001 From: duanhao Date: Wed, 6 Aug 2025 15:50:15 +0800 Subject: [PATCH] =?UTF-8?q?=E7=BE=A4=E4=BD=93=E6=88=90=E5=91=98=E6=BC=94?= =?UTF-8?q?=E5=8C=96=E5=88=86=E6=9E=90-=E5=B7=A6-=E4=B8=AD=E6=97=B6?= =?UTF-8?q?=E9=97=B4=E8=BD=B4-=E4=B8=AD=E7=BE=A4=E4=BD=93=E6=BC=94?= =?UTF-8?q?=E5=8C=96=E4=BF=A1=E6=81=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../group-member-user-list-title.png | Bin 0 -> 392 bytes src/components/timeAxis.vue | 2 + src/service/api/groupEvolution.js | 23 ++++- src/store/groupEvolution/index.js | 95 ++++++++++++------ src/utils/transform.js | 14 +++ .../GroupEvolution/component/groupChart.vue | 3 - .../GroupEvolution/component/groupGraph.vue | 1 + .../GroupEvolution/component/groupPost.vue | 4 +- .../groupMember/components/groupAnalysis.vue | 13 +-- .../groupMember/components/groupPanel.vue | 92 ++++++++++++++--- .../GroupEvolution/groupMember/index.vue | 24 ++++- 11 files changed, 208 insertions(+), 63 deletions(-) create mode 100644 src/assets/images/groupMember/group-member-user-list-title.png diff --git a/src/assets/images/groupMember/group-member-user-list-title.png b/src/assets/images/groupMember/group-member-user-list-title.png new file mode 100644 index 0000000000000000000000000000000000000000..1d24fc1a830865a8461d484f128c1a4ea7b6f62f GIT binary patch literal 392 zcmV;30eAk1P)MaYjlNq4EIu z{7IJWyXp5?mhY!U#gEkBreQo`2bX=C;U6;p;@Pe^5hgO7QG^p@C0{`qi;}PBpL}lH zil3&p@hV9MaU^HsA!Sw7!{`2bnT-l&&db~O4#!NQ}&#Bp% z?%qH#LA+MB58QEraP74c#A`*j_`kXzpK+Sq2-jXKLA--D(&c(iBt3n1 zzZE~Q_U(7lCtPu(kJtBZ%*yY6>=w(5Q6WZRZS literal 0 HcmV?d00001 diff --git a/src/components/timeAxis.vue b/src/components/timeAxis.vue index 295cff8..b4c3e73 100644 --- a/src/components/timeAxis.vue +++ b/src/components/timeAxis.vue @@ -122,6 +122,8 @@ watch( timeList.value = newVal }, { deep: true } + + ) // 让 active-needle 标定在 timeList 最后一个时间点 const showHidden = computed(() => { diff --git a/src/service/api/groupEvolution.js b/src/service/api/groupEvolution.js index f456613..810cb5f 100644 --- a/src/service/api/groupEvolution.js +++ b/src/service/api/groupEvolution.js @@ -22,7 +22,22 @@ export function getPostByUtcTime(utcTime) { // 3.群体成员演化分析 -// 3.1 群体成员演化信息列表信息 -export function getGroupMemberInfoList() { - return http.get(`/groupEvolution/groupMember/infoList`) -} \ No newline at end of file +// 3.1 获取时间线数据 +export function getGroupMemberTimeLine() { + return http.get(`/groupEvolution/groupMember/timeline`) +} + +// 3.2 群体成员演化信息列表信息 +export function getGroupMemberInfoList(time) { + return http.get(`/groupEvolution/groupMember/infoList?time=${time}`) +} + +// 3.3 全局群体成员演化图 +export function getGroupMemberChart() { + return http.get(`/groupEvolution/groupMember/chart`) +} + +// 3.4 群体演化信息 +export function getGroupMemberEvolutionInfoByTime(date) { + return http.get(`/groupEvolution/groupMember/changeList?date=${date}`) +} diff --git a/src/store/groupEvolution/index.js b/src/store/groupEvolution/index.js index a5f706c..9719fb8 100644 --- a/src/store/groupEvolution/index.js +++ b/src/store/groupEvolution/index.js @@ -12,9 +12,12 @@ import { getGroupEvolutionGroupScaleChart, getGroupEvolutionTimeLine, getPostByUtcTime, - getGroupMemberInfoList + getGroupMemberInfoList, + getGroupMemberTimeLine, + getGroupMemberChart, + getGroupMemberEvolutionInfoByTime } from "@/service/api/groupEvolution" -import { TansTimestamp } from "@/utils/transform" +import { TansTimestamp, utcStringToHHMMSS } from "@/utils/transform" export const useGroupDiscoveryStore = defineStore("groupDiscovery", { state: () => ({ @@ -183,10 +186,9 @@ export const useGroupDiscoveryStore = defineStore("groupDiscovery", { async initialGraphByUtcTime() {}, + // 通过时间来获取帖文列表 async initialPostByUtcTime(utcTime) { - const res = await getPostByUtcTime(utcTime) - if (res.code != 200) return - this.posts = res.data + } }, persist: true // 开启持久化 @@ -526,7 +528,7 @@ export const useGroupStructureStore = defineStore("groupStructure", { export const useGroupMemberStore = defineStore("groupMember", { state: () => ({ - groupList: [ + /* groupList { id: 1, type: "群体一", @@ -539,7 +541,9 @@ export const useGroupMemberStore = defineStore("groupMember", { focusedTopic: "#中国海警首次登检菲律宾#", value: [10, 20, 15, 5], } - ], + */ + groupList: [], + timeList: [], groupMemberList: [ { id: 1, @@ -779,62 +783,62 @@ export const useGroupMemberStore = defineStore("groupMember", { posts: [ { id: 1, - timestamp: "2024-01-04 0:03:16", - groupCategory: "群体一", + time: "2024-01-04 0:03:16", + type: "群体一", memberAddCount: 1 }, { id: 2, - timestamp: "2024-02-03 12:58:53", - groupCategory: "群体二", + time: "2024-02-03 12:58:53", + type: "群体二", memberAddCount: 2 }, { id: 3, - timestamp: "2024-02-22 17:13:44", - groupCategory: "群体三", + time: "2024-02-22 17:13:44", + type: "群体三", memberAddCount: 4 }, { id: 4, - timestamp: "2024-02-23 17:54:46", - groupCategory: "群体一", + time: "2024-02-23 17:54:46", + type: "群体一", memberAddCount: 4 }, { id: 5, - timestamp: "2024-03-14 09:58:12", - groupCategory: "群体三", + time: "2024-03-14 09:58:12", + type: "群体三", memberAddCount: 4 }, { id: 6, - timestamp: "2024-03-23 21:20:40", - groupCategory: "群体二", + time: "2024-03-23 21:20:40", + type: "群体二", memberAddCount: 4 }, { id: 7, - timestamp: "2024-03-23 21:42:36", - groupCategory: "群体一", + time: "2024-03-23 21:42:36", + type: "群体一", memberAddCount: 2 }, { id: 8, - timestamp: "2024-04-06 18:17:30", - groupCategory: "群体二", + time: "2024-04-06 18:17:30", + type: "群体二", memberAddCount: 4 }, { id: 9, - timestamp: "2024-04-06 19:19:50", - groupCategory: "群体一", + time: "2024-04-06 19:19:50", + type: "群体一", memberAddCount: 4 }, { id: 10, - timestamp: "2024-05-16 00:22:18", - groupCategory: "群体二", + time: "2024-05-16 00:22:18", + type: "群体二", memberAddCount: 5 } ], @@ -913,19 +917,46 @@ export const useGroupMemberStore = defineStore("groupMember", { ] }), actions: { - async initializeGroupList() { - const res = await getGroupMemberInfoList() + async initializeGroupMemberTimeLine() { + const res = await getGroupMemberTimeLine() + this.timeList = res.data + console.log("测试获取timeList:",this.timeList); + }, + async initializeGroupList(time = "2024-06-19T07:57:46Z") { + const res = await getGroupMemberInfoList(time) + console.log("测试获取groupMemberInfoList:",res); const groupList = res.data.map(item => ({ id: item.id, type: item.type, focusedTopic: item.focusedTopic, - value: item.value + value: item.value.map(item => item * 100) })) this.groupList = groupList - console.log("测试获取groupList:",res); + }, + async initializeGroupMemberChart() { + const res = await getGroupMemberChart() + const xAxisData = res.data.xaxisData.map(item => utcStringToHHMMSS(item)) + const yAxisRange = res.data.yaxisRange + const themeColors = ["#2AB8FD", "#02D7DA", "#FFDA09", "#EB57B0"] + const seriesList = res.data.seriesList.map(item => ({ + data: item.data.map(item => item.toFixed(2)), + name: item.name, + themeColor: themeColors[item.id - 1], + })) + this.chartData = { + xAxisData, + yAxisRange, + seriesList + } + }, + async initialPostByUtcTime(utcTime) { + const res = await getGroupMemberEvolutionInfoByTime(utcTime) + this.posts = res.data + console.log("测试获取groupMemberEvolutionInfoByTime:",res.data); } + }, - persist: false // 开启持久化 + persist: true // 开启持久化 }) export const useAnomalousGroup = defineStore("anomalousGroup", { diff --git a/src/utils/transform.js b/src/utils/transform.js index bdb68e3..147d5d3 100644 --- a/src/utils/transform.js +++ b/src/utils/transform.js @@ -91,3 +91,17 @@ export function getAvatarUrl(binaryStream) { return `data:image/jpeg;base64,${binaryStream}` } } + +/** + * 将UTC格式时间字符串转换为时间戳并返回HH:mm:ss格式 + * @param {string} utcString - UTC格式时间字符串,如"2024-06-19T07:57:46Z" + * @returns {string} 格式化后的时间字符串,格式为HH:mm:ss + */ +export function utcStringToHHMMSS(utcString) { + if (!utcString) return '' + // 解析UTC时间字符串为dayjs对象 + const date = dayjs.utc(utcString).add(8, 'hour') + + // 格式化为HH:mm:ss + return date.format('HH:mm:ss') +} diff --git a/src/views/GroupEvolution/component/groupChart.vue b/src/views/GroupEvolution/component/groupChart.vue index b8e63da..3f46fb5 100644 --- a/src/views/GroupEvolution/component/groupChart.vue +++ b/src/views/GroupEvolution/component/groupChart.vue @@ -287,9 +287,6 @@ watch( ) onMounted(() => { - console.log("111"); - - console.log(props.moduleName) // 获取容器宽度 sliderContainerWidth.value = document.querySelector(".slider-container").offsetWidth }) diff --git a/src/views/GroupEvolution/component/groupGraph.vue b/src/views/GroupEvolution/component/groupGraph.vue index 280bb34..3937d0c 100644 --- a/src/views/GroupEvolution/component/groupGraph.vue +++ b/src/views/GroupEvolution/component/groupGraph.vue @@ -35,6 +35,7 @@ const handlePointerDown = (time) => { const utcTime = convertToUtcIsoString(time) emit("click:pointerDownAndSlide", utcTime) } +