Преглед на файлове

优化推广账号后台展示逻辑

wilhelm wong преди 2 месеца
родител
ревизия
ee21adf5bd

+ 4 - 3
src/controllers/income-records.controller.ts

@@ -74,13 +74,14 @@ export class IncomeRecordsController {
       }
 
       // 根据用户角色设置查询条件
-      if (user.role === UserRole.TEAM) {
+      if (user.role === UserRole.PROMOTER) {
+        // 推广用户只能查看自己相关的订单(通过personalAgentId过滤)
+        request.query.personalAgentId = user.id
+      } else if (user.role === UserRole.TEAM) {
         const team = await this.teamService.findByUserId(user.id)
         if (team) {
           request.query.agentId = team.userId
         }
-      } else if (user.role === UserRole.PROMOTER) {
-        request.query.userId = user.id
       }
 
       const result = await this.incomeRecordsService.findAll(request.query)

+ 55 - 10
src/controllers/team-domain.controller.ts

@@ -62,8 +62,31 @@ export class TeamDomainController {
       }
 
       if (user.role === UserRole.PROMOTER) {
-        const teamMembers = await this.teamMembersService.findByUserId(user.id)
-        request.query.teamId = teamMembers.teamId
+        // 推广用户只能查看自己绑定的域名
+        try {
+          const teamMembers = await this.teamMembersService.findByUserId(user.id)
+          const teamDomains = await this.teamDomainService.findByTeamMemberId(teamMembers.id)
+          
+          // 直接返回推广用户绑定的域名,不通过通用查询
+          return reply.send({
+            content: teamDomains,
+            metadata: {
+              total: teamDomains.length,
+              page: Number(request.query.page) || 0,
+              size: Number(request.query.size) || 20
+            }
+          })
+        } catch (error) {
+          // 如果推广用户没有团队成员记录,返回空列表
+          return reply.send({
+            content: [],
+            metadata: {
+              total: 0,
+              page: Number(request.query.page) || 0,
+              size: Number(request.query.size) || 20
+            }
+          })
+        }
       } else if (user.role === UserRole.TEAM) {
         const team = await this.teamService.findByUserId(user.id)
         request.query.teamId = team.id
@@ -156,15 +179,26 @@ export class TeamDomainController {
       const { domain } = request.query
       let result = await this.teamDomainService.getDailyStatistics(domain)
 
-      // 如果是团队用户,只返回该团队的域名统计
-      if (user.role === UserRole.TEAM) {
+      if (user.role === UserRole.PROMOTER) {
+        // 推广用户只能查看自己绑定的域名统计
+        try {
+          const teamMembers = await this.teamMembersService.findByUserId(user.id)
+          const teamDomains = await this.teamDomainService.findByTeamMemberId(teamMembers.id)
+          const teamDomainIds = teamDomains.map(d => d.id)
+          
+          // 过滤结果,只保留推广用户绑定的域名统计
+          result = result.filter(stat => teamDomainIds.includes(stat.id))
+        } catch (error) {
+          // 如果推广用户没有团队成员记录,返回空统计
+          result = []
+        }
+      } else if (user.role === UserRole.TEAM) {
+        // 团队用户只能查看该团队的域名统计
         const team = await this.teamService.findByUserId(user.id)
         if (team) {
-          // 获取该团队的所有域名
           const teamDomains = await this.teamDomainService.findByTeamId(team.id)
           const teamDomainIds = teamDomains.map(d => d.id)
           
-          // 过滤结果,只保留该团队的域名统计
           result = result.filter(stat => teamDomainIds.includes(stat.id))
         } else {
           result = []
@@ -187,15 +221,26 @@ export class TeamDomainController {
       const { domain } = request.query
       let result = await this.teamDomainService.getAllStatistics(domain)
 
-      // 如果是团队用户,只返回该团队的域名统计
-      if (user.role === UserRole.TEAM) {
+      if (user.role === UserRole.PROMOTER) {
+        // 推广用户只能查看自己绑定的域名统计
+        try {
+          const teamMembers = await this.teamMembersService.findByUserId(user.id)
+          const teamDomains = await this.teamDomainService.findByTeamMemberId(teamMembers.id)
+          const teamDomainIds = teamDomains.map(d => d.id)
+          
+          // 过滤结果,只保留推广用户绑定的域名统计
+          result = result.filter(stat => teamDomainIds.includes(stat.id))
+        } catch (error) {
+          // 如果推广用户没有团队成员记录,返回空统计
+          result = []
+        }
+      } else if (user.role === UserRole.TEAM) {
+        // 团队用户只能查看该团队的域名统计
         const team = await this.teamService.findByUserId(user.id)
         if (team) {
-          // 获取该团队的所有域名
           const teamDomains = await this.teamDomainService.findByTeamId(team.id)
           const teamDomainIds = teamDomains.map(d => d.id)
           
-          // 过滤结果,只保留该团队的域名统计
           result = result.filter(stat => teamDomainIds.includes(stat.id))
         } else {
           result = []

+ 1 - 0
src/dto/income-records.dto.ts

@@ -37,6 +37,7 @@ export interface UpdateIncomeRecordBody {
 export interface ListIncomeRecordsQuery extends Pagination {
   agentId?: number
   userId?: number
+  personalAgentId?: number
   incomeType?: IncomeType
   orderType?: OrderType
   orderNo?: string

+ 2 - 2
src/routes/team-domain.routes.ts

@@ -64,14 +64,14 @@ export default async function teamDomainRoutes(fastify: FastifyInstance) {
   // 统计各个域名下今日新增用户数以及收入
   fastify.get<{ Querystring: { domain: string } }>(
     '/statistics/daily',
-    { onRequest: [authenticate, hasAnyRole(UserRole.ADMIN, UserRole.TEAM)] },
+    { onRequest: [authenticate, hasAnyRole(UserRole.ADMIN, UserRole.TEAM, UserRole.PROMOTER)] },
     teamDomainController.getDailyStatistics.bind(teamDomainController)
   )
 
   // 统计各个域名下所有新增用户数以及收入
   fastify.get<{ Querystring: { domain: string } }>(
     '/statistics/all',
-    { onRequest: [authenticate, hasAnyRole(UserRole.ADMIN, UserRole.TEAM)] },
+    { onRequest: [authenticate, hasAnyRole(UserRole.ADMIN, UserRole.TEAM, UserRole.PROMOTER)] },
     teamDomainController.getAllStatistics.bind(teamDomainController)
   )
 

+ 5 - 0
src/services/income-records.service.ts

@@ -43,6 +43,7 @@ export class IncomeRecordsService {
       size,
       agentId,
       userId,
+      personalAgentId,
       incomeType,
       orderType,
       orderNo,
@@ -65,6 +66,10 @@ export class IncomeRecordsService {
       where.userId = userId
     }
 
+    if (personalAgentId) {
+      where.personalAgentId = personalAgentId
+    }
+
     if (incomeType) {
       where.incomeType = incomeType
     }

+ 3 - 3
src/services/team-domain.service.ts

@@ -185,10 +185,10 @@ export class TeamDomainService {
     })
   }
 
-  async findByTeamMemberId(teamMemberUserId: number): Promise<TeamDomain[]> {
+  async findByTeamMemberId(teamMemberId: number): Promise<TeamDomain[]> {
     // 首先通过teamMemberId查找绑定的域名
     const domainsByMember = await this.teamDomainRepository.find({
-      where: { teamMemberId: teamMemberUserId },
+      where: { teamMemberId: teamMemberId },
       order: { createdAt: 'DESC' }
     })
 
@@ -198,7 +198,7 @@ export class TeamDomainService {
     }
 
     // 如果没有直接绑定,查找该团队成员所属团队的域名
-    const teamMember = await this.teamMembersRepository.findOne({ where: { userId: teamMemberUserId } })
+    const teamMember = await this.teamMembersRepository.findOne({ where: { id: teamMemberId } })
     if (teamMember && teamMember.teamId) {
       return await this.findByTeamId(teamMember.teamId)
     }