Jelajahi Sumber

Merge branch 'main' of http://gitlab.pubdata.cn/hlm/multi-platform-media-manage

Ethanfly 13 jam lalu
induk
melakukan
647e04a909
2 mengubah file dengan 36 tambahan dan 29 penghapusan
  1. 0 13
      client/src/components.d.ts
  2. 36 16
      client/src/views/Analytics/Overview/index.vue

+ 0 - 13
client/src/components.d.ts

@@ -16,16 +16,9 @@ declare module 'vue' {
     ElButton: typeof import('element-plus/es')['ElButton']
     ElButtonGroup: typeof import('element-plus/es')['ElButtonGroup']
     ElCheckbox: typeof import('element-plus/es')['ElCheckbox']
-    ElCheckboxGroup: typeof import('element-plus/es')['ElCheckboxGroup']
-    ElCol: typeof import('element-plus/es')['ElCol']
     ElConfigProvider: typeof import('element-plus/es')['ElConfigProvider']
     ElContainer: typeof import('element-plus/es')['ElContainer']
-    ElDatePicker: typeof import('element-plus/es')['ElDatePicker']
-    ElDescriptions: typeof import('element-plus/es')['ElDescriptions']
-    ElDescriptionsItem: typeof import('element-plus/es')['ElDescriptionsItem']
     ElDialog: typeof import('element-plus/es')['ElDialog']
-    ElDivider: typeof import('element-plus/es')['ElDivider']
-    ElDrawer: typeof import('element-plus/es')['ElDrawer']
     ElDropdown: typeof import('element-plus/es')['ElDropdown']
     ElDropdownItem: typeof import('element-plus/es')['ElDropdownItem']
     ElDropdownMenu: typeof import('element-plus/es')['ElDropdownMenu']
@@ -33,17 +26,13 @@ declare module 'vue' {
     ElForm: typeof import('element-plus/es')['ElForm']
     ElFormItem: typeof import('element-plus/es')['ElFormItem']
     ElIcon: typeof import('element-plus/es')['ElIcon']
-    ElImage: typeof import('element-plus/es')['ElImage']
     ElInput: typeof import('element-plus/es')['ElInput']
     ElMain: typeof import('element-plus/es')['ElMain']
     ElMenu: typeof import('element-plus/es')['ElMenu']
     ElMenuItem: typeof import('element-plus/es')['ElMenuItem']
     ElOption: typeof import('element-plus/es')['ElOption']
-    ElPagination: typeof import('element-plus/es')['ElPagination']
-    ElProgress: typeof import('element-plus/es')['ElProgress']
     ElRadioButton: typeof import('element-plus/es')['ElRadioButton']
     ElRadioGroup: typeof import('element-plus/es')['ElRadioGroup']
-    ElRow: typeof import('element-plus/es')['ElRow']
     ElSelect: typeof import('element-plus/es')['ElSelect']
     ElSubMenu: typeof import('element-plus/es')['ElSubMenu']
     ElSwitch: typeof import('element-plus/es')['ElSwitch']
@@ -52,8 +41,6 @@ declare module 'vue' {
     ElTabPane: typeof import('element-plus/es')['ElTabPane']
     ElTabs: typeof import('element-plus/es')['ElTabs']
     ElTag: typeof import('element-plus/es')['ElTag']
-    ElText: typeof import('element-plus/es')['ElText']
-    ElUpload: typeof import('element-plus/es')['ElUpload']
     Icons: typeof import('./components/icons/index.vue')['default']
     RouterLink: typeof import('vue-router')['RouterLink']
     RouterView: typeof import('vue-router')['RouterView']

+ 36 - 16
client/src/views/Analytics/Overview/index.vue

@@ -176,11 +176,12 @@ interface AccountGroup {
 }
 const accountGroups = ref<AccountGroup[]>([]);
 
-// 可用平台
+// 可用平台(只显示抖音、百家号、视频号和小红书)
 const availablePlatforms = computed(() => {
-  return Object.entries(PLATFORMS).map(([key, value]) => ({
-    value: key as PlatformType,
-    label: value.name,
+  const allowedPlatforms: PlatformType[] = ['douyin', 'baijiahao', 'weixin_video', 'xiaohongshu'];
+  return allowedPlatforms.map(key => ({
+    value: key,
+    label: PLATFORMS[key].name,
   }));
 });
 
@@ -232,22 +233,41 @@ const summaryData = ref<SummaryData>({
   yesterdayFansIncrease: 0,
 });
 
-// 统计卡片数据
+// 基于过滤后账号列表的汇总统计(只统计抖音、百家号、视频号和小红书)
+const filteredSummaryData = computed(() => {
+  const allowedPlatforms: PlatformType[] = ['douyin', 'baijiahao', 'weixin_video', 'xiaohongshu'];
+  const filtered = accounts.value.filter(a => allowedPlatforms.includes(a.platform));
+  
+  return {
+    totalAccounts: filtered.length,
+    totalIncome: filtered.reduce((sum, a) => sum + (a.totalIncome || 0), 0),
+    yesterdayIncome: filtered.reduce((sum, a) => sum + (a.yesterdayIncome || 0), 0),
+    totalViews: filtered.reduce((sum, a) => sum + (a.totalViews || 0), 0),
+    yesterdayViews: filtered.reduce((sum, a) => sum + (a.yesterdayViews || 0), 0),
+    totalFans: filtered.reduce((sum, a) => sum + (a.fansCount || 0), 0),
+    yesterdayComments: filtered.reduce((sum, a) => sum + (a.yesterdayComments || 0), 0),
+    yesterdayLikes: filtered.reduce((sum, a) => sum + (a.yesterdayLikes || 0), 0),
+    yesterdayFansIncrease: filtered.reduce((sum, a) => sum + (a.yesterdayFansIncrease || 0), 0),
+  };
+});
+
+// 统计卡片数据(使用过滤后的汇总数据)
 const summaryStats = computed(() => [
-  { label: '账号总数', value: summaryData.value.totalAccounts },
-  { label: '总收益(元)', value: summaryData.value.totalIncome },
-  { label: '昨日收益(元)', value: summaryData.value.yesterdayIncome },
-  { label: '总播放(阅读)', value: summaryData.value.totalViews },
-  { label: '昨日播放(阅读)', value: summaryData.value.yesterdayViews },
-  { label: '总粉丝', value: summaryData.value.totalFans, highlight: true },
-  { label: '昨日评论', value: summaryData.value.yesterdayComments },
-  { label: '昨日点赞', value: summaryData.value.yesterdayLikes },
-  { label: '昨日涨粉', value: summaryData.value.yesterdayFansIncrease },
+  { label: '账号总数', value: filteredSummaryData.value.totalAccounts },
+  { label: '总收益(元)', value: filteredSummaryData.value.totalIncome },
+  { label: '昨日收益(元)', value: filteredSummaryData.value.yesterdayIncome },
+  { label: '总播放(阅读)', value: filteredSummaryData.value.totalViews },
+  { label: '昨日播放(阅读)', value: filteredSummaryData.value.yesterdayViews },
+  { label: '总粉丝', value: filteredSummaryData.value.totalFans, highlight: true },
+  { label: '昨日评论', value: filteredSummaryData.value.yesterdayComments },
+  { label: '昨日点赞', value: filteredSummaryData.value.yesterdayLikes },
+  { label: '昨日涨粉', value: filteredSummaryData.value.yesterdayFansIncrease },
 ]);
 
-// 过滤后的账号列表
+// 过滤后的账号列表(只显示抖音、百家号、视频号和小红书)
 const filteredAccounts = computed(() => {
-  let result = accounts.value;
+  const allowedPlatforms: PlatformType[] = ['douyin', 'baijiahao', 'weixin_video', 'xiaohongshu'];
+  let result = accounts.value.filter(a => allowedPlatforms.includes(a.platform));
   
   if (selectedGroup.value) {
     result = result.filter(a => a.groupId === selectedGroup.value);