Prechádzať zdrojové kódy

优化团队成员页面统计逻辑

wilhelm wong 2 mesiacov pred
rodič
commit
c97db2205f
2 zmenil súbory, kde vykonal 62 pridanie a 5 odobranie
  1. 58 4
      src/views/DashboardView.vue
  2. 4 1
      src/views/TeamMembersView.vue

+ 58 - 4
src/views/DashboardView.vue

@@ -1,7 +1,7 @@
 <template>
   <div class="dashboard-container">
     <!-- 团队统计卡片 -->
-    <div v-if="isAdmin || isTeam" class="stats-cards">
+    <div v-if="isAdmin || isTeam || isPromoter" class="stats-cards">
       <!-- 管理员视图 -->
       <div v-if="isAdmin" class="admin-stats">
         <div class="card">
@@ -81,10 +81,32 @@
           <p class="stat-value">{{ formatRate(teamStats?.averageCommissionRate) }}%</p>
         </div>
       </div>
+
+      <!-- 推广员视图 -->
+      <div v-else-if="isPromoter" class="promoter-stats">
+        <div class="card">
+          <h3>队员姓名</h3>
+          <p class="stat-value">{{ memberStats?.name || '-' }}</p>
+        </div>
+        <div class="card">
+          <h3>分成比例</h3>
+          <p class="stat-value">{{ formatRate(memberStats?.commissionRate) }}%</p>
+        </div>
+        <div class="card revenue-card">
+          <h3>总分成收入</h3>
+          <p class="stat-value revenue-value">{{ formatAmount(memberStats?.totalCommission) }}</p>
+          <p class="stat-label">累计分成</p>
+        </div>
+        <div class="card revenue-card">
+          <h3>今日分成收入</h3>
+          <p class="stat-value revenue-value">{{ formatAmount(memberStats?.todayCommission) }}</p>
+          <p class="stat-label">今日分成</p>
+        </div>
+      </div>
     </div>
 
     <!-- 收入图表 -->
-    <div class="chart-container">
+    <div v-if="isAdmin || isTeam" class="chart-container">
       <div class="chart-header">
         <h2>最近7天收入统计</h2>
         <div v-if="isAdmin" class="chart-team-selector">
@@ -148,7 +170,7 @@
 import { ref, onMounted, onUnmounted, computed, inject, watch } from 'vue'
 import { useUserStore } from '@/stores/user'
 import { useTeamStore } from '@/stores/team'
-import { getAllTeamStatistics, getIncomeStatistics } from '@/services/api'
+import { getAllTeamStatistics, getIncomeStatistics, listMembers } from '@/services/api'
 import Chart from 'chart.js/auto'
 import Select from 'primevue/select'
 import DataTable from 'primevue/datatable'
@@ -164,6 +186,7 @@ const isPromoter = inject('isPromoter')
 
 // 数据
 const teamStats = ref(null)
+const memberStats = ref(null) // 推广员个人统计数据
 const selectedTeamId = ref(null)
 const incomeStats = ref(null)
 const loading = ref(true)
@@ -234,9 +257,27 @@ const loadTeamStats = async () => {
         data.name = data.allTeams[0].name
       }
       teamStats.value = data
+    } else if (isPromoter.value) {
+      // 推广员角色加载个人统计数据,使用团队成员列表接口
+      const currentUserId = userStore.userInfo?.id
+      if (currentUserId) {
+        const response = await listMembers(0, 1, undefined, undefined, currentUserId)
+        // 从列表接口返回的数据中提取第一个成员(当前用户)的统计数据
+        if (response.content && response.content.length > 0) {
+          const memberData = response.content[0]
+          memberStats.value = {
+            name: memberData.name || '-',
+            commissionRate: memberData.commissionRate || 0,
+            totalCommission: memberData.totalRevenue || 0,
+            totalOrders: 0, // 列表接口没有返回订单数,设为0
+            todayCommission: memberData.todayRevenue || 0,
+            todayOrders: 0 // 列表接口没有返回订单数,设为0
+          }
+        }
+      }
     }
   } catch (error) {
-    console.error('加载团队统计数据失败:', error)
+    console.error('加载统计数据失败:', error)
   } finally {
     loading.value = false
   }
@@ -502,6 +543,19 @@ onUnmounted(() => {
   max-width: 300px;
 }
 
+.promoter-stats {
+  display: flex;
+  flex-wrap: wrap;
+  gap: 1rem;
+  width: 100%;
+}
+
+.promoter-stats .card {
+  flex: 1;
+  min-width: 200px;
+  max-width: 300px;
+}
+
 .card {
   background-color: white;
   border-radius: 0.5rem;

+ 4 - 1
src/views/TeamMembersView.vue

@@ -479,7 +479,10 @@ const saveEdit = async () => {
 
     if (editForm.value.teamId !== null && editForm.value.teamId !== '') {
       formData.teamId = editForm.value.teamId
-      formData.userId = getTeamUserId(editForm.value.teamId)
+      // 只有在创建新成员时才设置userId,编辑时保持原有userId
+      if (!isEdit.value) {
+        formData.userId = getTeamUserId(editForm.value.teamId)
+      }
     }
 
     if (isEdit.value) {