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 0000000..1d24fc1 Binary files /dev/null and b/src/assets/images/groupMember/group-member-user-list-title.png differ 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) } +