Просмотр исходного кода

refactor(badge): 规范 ChildBadge 命名为 MemberBadge,并收敛成就页为纯成就

- 徽章体系命名规范化(代码层,不动库表):
  - ChildBadge -> MemberBadge(实体),字段 childId -> memberId(@TableField("child_id") 兼容旧列)
  - ChildBadgeMapper -> MemberBadgeMapper
  - BadgeService/Controller/UserController 方法:getChildBadges->getMemberBadges、getActiveChildBadges->getActiveMemberBadges、getChildBadgeStats->getMemberBadgeStats、getChildBadgeDetail->getMemberBadgeDetail;Controller 路径 /child/list->/member/list、/statistics/child->/statistics/member;返回字段 childBadge->memberBadge
  - 前端 api.js:getChildBadges->getMemberBadges、getChildBadgeStats->getMemberBadgeStats(getUserBadges 别名保留);achievement/wealth/rewards 页面同步;接口矩阵文档路径同步
- 成就页(pages/achievement/index.vue)重构:移除优惠券入口(资产类不属成就,财富中心已有)、移除"累计积分"目标;修正视角——调 getMemberBadges(null) 由后端 currentMemberId 查当前登录用户本人成就
- 约定:仅代码层规范,数据库表 child_badge / 列 child_id 保留,用 @TableField 兼容,未写迁移
E2E Test Bot 1 неделя назад
Родитель
Сommit
c465bc3b37

+ 9 - 9
cfc-backend/src/main/java/com/etotem/cfc/controller/BadgeController.java

@@ -2,7 +2,7 @@ package com.etotem.cfc.controller;
 
 import com.etotem.cfc.common.Result;
 import com.etotem.cfc.entity.Badge;
-import com.etotem.cfc.entity.ChildBadge;
+import com.etotem.cfc.entity.MemberBadge;
 import com.etotem.cfc.service.BadgeService;
 import io.swagger.v3.oas.annotations.Operation;
 import io.swagger.v3.oas.annotations.tags.Tag;
@@ -83,17 +83,17 @@ public class BadgeController {
     // ===== 家庭成员勋章 =====
 
     @Operation(summary = "获取成员的勋章列表")
-    @PostMapping("/child/list")
-    public Result<List<Map<String, Object>>> getChildBadges(@RequestBody Map<String, Object> body,
+    @PostMapping("/member/list")
+    public Result<List<Map<String, Object>>> getMemberBadges(@RequestBody Map<String, Object> body,
                                                             @RequestAttribute(value = "currentMemberId", required = false) Long currentMemberId) {
         Long memberId = ParamUtils.getLong(body.get("memberId"), currentMemberId);
-        List<ChildBadge> childBadges = badgeService.getActiveChildBadges(memberId);
+        List<MemberBadge> memberBadges = badgeService.getActiveMemberBadges(memberId);
         List<Map<String, Object>> result = new java.util.ArrayList<>();
-        for (ChildBadge cb : childBadges) {
+        for (MemberBadge cb : memberBadges) {
             Badge badge = badgeService.getBadgeById(cb.getBadgeId());
             if (badge != null) {
                 Map<String, Object> item = new java.util.HashMap<>();
-                item.put("childBadge", cb);
+                item.put("memberBadge", cb);
                 item.put("badge", badge);
                 result.add(item);
             }
@@ -114,11 +114,11 @@ public class BadgeController {
     // ===== 统计与排行 =====
 
     @Operation(summary = "成员勋章统计")
-    @PostMapping("/statistics/child")
-    public Result<Map<String, Object>> getChildStats(@RequestBody Map<String, Object> body,
+    @PostMapping("/statistics/member")
+    public Result<Map<String, Object>> getMemberStats(@RequestBody Map<String, Object> body,
                                                      @RequestAttribute(value = "currentMemberId", required = false) Long currentMemberId) {
         Long memberId = ParamUtils.getLong(body.get("memberId"), currentMemberId);
-        return Result.success(badgeService.getChildBadgeStats(memberId));
+        return Result.success(badgeService.getMemberBadgeStats(memberId));
     }
 
     @Operation(summary = "家庭勋章排行")

+ 6 - 6
cfc-backend/src/main/java/com/etotem/cfc/controller/UserController.java

@@ -11,7 +11,7 @@ import com.etotem.cfc.entity.PaymentOrder;
 import com.etotem.cfc.entity.Task;
 import com.etotem.cfc.entity.User;
 import com.etotem.cfc.mapper.AssessmentOrderMapper;
-import com.etotem.cfc.mapper.ChildBadgeMapper;
+import com.etotem.cfc.mapper.MemberBadgeMapper;
 import com.etotem.cfc.mapper.FamilyChallengeProgressMapper;
 import com.etotem.cfc.mapper.FamilyMemberMapper;
 import com.etotem.cfc.mapper.FamilyMapper;
@@ -226,7 +226,7 @@ public class UserController {
     private com.etotem.cfc.mapper.PointsExchangeRecordMapper pointsExchangeRecordMapper;
 
     @Resource
-    private com.etotem.cfc.mapper.ChildBadgeMapper childBadgeMapper;
+    private com.etotem.cfc.mapper.MemberBadgeMapper memberBadgeMapper;
 
     @Resource
     private com.etotem.cfc.mapper.FamilyChallengeProgressMapper familyChallengeProgressMapper;
@@ -298,9 +298,9 @@ public class UserController {
         Integer badgesCollected = 0;
         for (FamilyMember m : members) {
             try {
-                Long cnt = childBadgeMapper.selectCount(
-                    new LambdaQueryWrapper<com.etotem.cfc.entity.ChildBadge>()
-                        .eq(com.etotem.cfc.entity.ChildBadge::getChildId, m.getId())
+                Long cnt = memberBadgeMapper.selectCount(
+                    new LambdaQueryWrapper<com.etotem.cfc.entity.MemberBadge>()
+                        .eq(com.etotem.cfc.entity.MemberBadge::getMemberId, m.getId())
                 );
                 badgesCollected += cnt != null ? cnt.intValue() : 0;
             } catch (Exception e) {
@@ -321,7 +321,7 @@ public class UserController {
         for (FamilyMember m : members) {
             Long cnt = familyChallengeProgressMapper.selectCount(
                 new LambdaQueryWrapper<com.etotem.cfc.entity.FamilyChallengeProgress>()
-                    .eq(com.etotem.cfc.entity.FamilyChallengeProgress::getChildId, m.getId())
+                    .eq(com.etotem.cfc.entity.FamilyChallengeProgress::getMemberId, m.getId())
             );
             challengesJoined += cnt != null ? cnt.intValue() : 0;
         }

+ 4 - 2
cfc-backend/src/main/java/com/etotem/cfc/entity/ChildBadge.java → cfc-backend/src/main/java/com/etotem/cfc/entity/MemberBadge.java

@@ -1,6 +1,7 @@
 package com.etotem.cfc.entity;
 
 import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
 import com.baomidou.mybatisplus.annotation.TableId;
 import com.baomidou.mybatisplus.annotation.TableName;
 import lombok.Data;
@@ -10,12 +11,13 @@ import java.util.Date;
 
 @Data
 @TableName("child_badge")
-public class ChildBadge implements Serializable {
+public class MemberBadge implements Serializable {
 
     @TableId(type = IdType.AUTO)
     private Long id;
 
-    private Long childId;
+    @TableField("child_id")
+    private Long memberId;
 
     private Long badgeId;
 

+ 2 - 2
cfc-backend/src/main/java/com/etotem/cfc/mapper/ChildBadgeMapper.java → cfc-backend/src/main/java/com/etotem/cfc/mapper/MemberBadgeMapper.java

@@ -1,7 +1,7 @@
 package com.etotem.cfc.mapper;
 
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
-import com.etotem.cfc.entity.ChildBadge;
+import com.etotem.cfc.entity.MemberBadge;
 import org.apache.ibatis.annotations.Mapper;
 import org.apache.ibatis.annotations.Param;
 import org.apache.ibatis.annotations.Select;
@@ -10,7 +10,7 @@ import java.util.List;
 import java.util.Map;
 
 @Mapper
-public interface ChildBadgeMapper extends BaseMapper<ChildBadge> {
+public interface MemberBadgeMapper extends BaseMapper<MemberBadge> {
 
     @Select("SELECT b.category, COUNT(*) as count FROM child_badge cb " +
             "JOIN badge b ON cb.badge_id = b.id " +

+ 39 - 39
cfc-backend/src/main/java/com/etotem/cfc/service/BadgeService.java

@@ -2,9 +2,9 @@ package com.etotem.cfc.service;
 
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.etotem.cfc.entity.Badge;
-import com.etotem.cfc.entity.ChildBadge;
+import com.etotem.cfc.entity.MemberBadge;
 import com.etotem.cfc.mapper.BadgeMapper;
-import com.etotem.cfc.mapper.ChildBadgeMapper;
+import com.etotem.cfc.mapper.MemberBadgeMapper;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
@@ -23,7 +23,7 @@ public class BadgeService {
     private BadgeMapper badgeMapper;
 
     @Resource
-    private ChildBadgeMapper childBadgeMapper;
+    private MemberBadgeMapper memberBadgeMapper;
 
     // ===== 勋章定义管理 =====
 
@@ -74,10 +74,10 @@ public class BadgeService {
 
     @Transactional
     public void grantBadge(Long memberId, Long badgeId) {
-        ChildBadge existing = childBadgeMapper.selectOne(
-                new LambdaQueryWrapper<ChildBadge>()
-                        .eq(ChildBadge::getChildId, memberId)
-                        .eq(ChildBadge::getBadgeId, badgeId));
+        MemberBadge existing = memberBadgeMapper.selectOne(
+                new LambdaQueryWrapper<MemberBadge>()
+                        .eq(MemberBadge::getMemberId, memberId)
+                        .eq(MemberBadge::getBadgeId, badgeId));
         if (existing != null) {
             return;
         }
@@ -87,7 +87,7 @@ public class BadgeService {
             throw new RuntimeException("勋章不存在");
         }
 
-        ChildBadge cb = new ChildBadge();
+        MemberBadge cb = new MemberBadge();
         cb.setChildId(memberId);
         cb.setBadgeId(badgeId);
         cb.setEarnedAt(new Date());
@@ -100,62 +100,62 @@ public class BadgeService {
             cb.setExpireAt(new Date(System.currentTimeMillis() + badge.getExpireDays() * 86400000L));
         }
 
-        childBadgeMapper.insert(cb);
+        memberBadgeMapper.insert(cb);
     }
 
     // ===== 家庭成员勋章查询 =====
 
-    public List<ChildBadge> getChildBadges(Long memberId) {
-        return childBadgeMapper.selectList(
-                new LambdaQueryWrapper<ChildBadge>()
-                        .eq(ChildBadge::getChildId, memberId)
-                        .orderByDesc(ChildBadge::getIsFavorite)
-                        .orderByDesc(ChildBadge::getEarnedAt));
+    public List<MemberBadge> getMemberBadges(Long memberId) {
+        return memberBadgeMapper.selectList(
+                new LambdaQueryWrapper<MemberBadge>()
+                        .eq(MemberBadge::getMemberId, memberId)
+                        .orderByDesc(MemberBadge::getIsFavorite)
+                        .orderByDesc(MemberBadge::getEarnedAt));
     }
 
-    public List<ChildBadge> getActiveChildBadges(Long memberId) {
-        return childBadgeMapper.selectList(
-                new LambdaQueryWrapper<ChildBadge>()
-                        .eq(ChildBadge::getChildId, memberId)
-                        .eq(ChildBadge::getStatus, 1)
-                        .orderByDesc(ChildBadge::getIsFavorite)
-                        .orderByDesc(ChildBadge::getEarnedAt));
+    public List<MemberBadge> getActiveMemberBadges(Long memberId) {
+        return memberBadgeMapper.selectList(
+                new LambdaQueryWrapper<MemberBadge>()
+                        .eq(MemberBadge::getMemberId, memberId)
+                        .eq(MemberBadge::getStatus, 1)
+                        .orderByDesc(MemberBadge::getIsFavorite)
+                        .orderByDesc(MemberBadge::getEarnedAt));
     }
 
-    public ChildBadge getChildBadgeDetail(Long memberId, Long badgeId) {
-        return childBadgeMapper.selectOne(
-                new LambdaQueryWrapper<ChildBadge>()
-                        .eq(ChildBadge::getChildId, memberId)
-                        .eq(ChildBadge::getBadgeId, badgeId));
+    public MemberBadge getMemberBadgeDetail(Long memberId, Long badgeId) {
+        return memberBadgeMapper.selectOne(
+                new LambdaQueryWrapper<MemberBadge>()
+                        .eq(MemberBadge::getMemberId, memberId)
+                        .eq(MemberBadge::getBadgeId, badgeId));
     }
 
     @Transactional
     public void toggleFavorite(Long memberId, Long badgeId) {
-        ChildBadge cb = childBadgeMapper.selectOne(
-                new LambdaQueryWrapper<ChildBadge>()
-                        .eq(ChildBadge::getChildId, memberId)
-                        .eq(ChildBadge::getBadgeId, badgeId));
+        MemberBadge cb = memberBadgeMapper.selectOne(
+                new LambdaQueryWrapper<MemberBadge>()
+                        .eq(MemberBadge::getMemberId, memberId)
+                        .eq(MemberBadge::getBadgeId, badgeId));
         if (cb != null) {
             cb.setIsFavorite(cb.getIsFavorite() != null && cb.getIsFavorite() ? false : true);
             cb.setUpdatedAt(new Date());
-            childBadgeMapper.updateById(cb);
+            memberBadgeMapper.updateById(cb);
         }
     }
 
     // ===== 统计与排行 =====
 
-    public Map<String, Object> getChildBadgeStats(Long memberId) {
-        List<ChildBadge> all = childBadgeMapper.selectList(
-                new LambdaQueryWrapper<ChildBadge>()
-                        .eq(ChildBadge::getChildId, memberId));
+    public Map<String, Object> getMemberBadgeStats(Long memberId) {
+        List<MemberBadge> all = memberBadgeMapper.selectList(
+                new LambdaQueryWrapper<MemberBadge>()
+                        .eq(MemberBadge::getMemberId, memberId));
 
         long total = all.size();
         long active = all.stream().filter(cb -> cb.getStatus() != null && cb.getStatus() == 1).count();
         long expired = all.stream().filter(cb -> cb.getStatus() != null && cb.getStatus() == 0).count();
         long revoked = all.stream().filter(cb -> cb.getStatus() != null && cb.getStatus() == -1).count();
 
-List<Map<String, Object>> categoryStats = childBadgeMapper.selectCategoryStats(memberId);
-    List<Map<String, Object>> levelStats = childBadgeMapper.selectLevelStats(memberId);
+List<Map<String, Object>> categoryStats = memberBadgeMapper.selectCategoryStats(memberId);
+    List<Map<String, Object>> levelStats = memberBadgeMapper.selectLevelStats(memberId);
 
         Map<String, Object> stats = new HashMap<>();
         stats.put("total", total);
@@ -168,6 +168,6 @@ List<Map<String, Object>> categoryStats = childBadgeMapper.selectCategoryStats(m
     }
 
     public List<Map<String, Object>> getFamilyRanking(Long familyId) {
-        return childBadgeMapper.selectFamilyRanking(familyId);
+        return memberBadgeMapper.selectFamilyRanking(familyId);
     }
 }

+ 6 - 6
cfc-frontend/INTERFACE_TEST_MATRIX.md

@@ -149,7 +149,7 @@
 | POST | `/api/auth/verify-password` | 公开 |  | `verifyPassword` |
 | POST | `/api/auth/wechat-login` | 公开 |  | `wechatLogin` |
 | POST | `/api/auth/wechat-phone-login` | 公开 |  | `wechatPhoneLogin` |
-| POST | `/api/badges/child/list` | 登录 |  | `getChildBadges` |
+| POST | `/api/badges/member/list` | 登录 |  | `getChildBadges` |
 | POST | `/api/badges/favorite` | 登录 |  | `toggleBadgeFavorite` |
 | POST | `/api/badges/list` | 登录 |  | `getActiveBadges` |
 | POST | `/api/commission/summary` | 登录 |  | `getCommissionSummary` |
@@ -381,7 +381,7 @@ export const searchStreet = (keyword) => {
 
 | 方法 | 路径 | 鉴权 | 参数 | 来源函数 |
 |------|------|:----:|:----:|----------|
-| POST | `/api/badges/child/list` | 登录 |  | `getChildBadges` |
+| POST | `/api/badges/member/list` | 登录 |  | `getChildBadges` |
 
 ### pages/action-detail/components/PearlDiagram  (2 个接口)
 
@@ -2066,11 +2066,11 @@ export const submitServiceRoleApply = (data) => {
 
 | 方法 | 路径 | 鉴权 | 参数 | 来源函数 |
 |------|------|:----:|:----:|----------|
-| POST | `/api/badges/child/list` | 登录 |  | `getChildBadges` |
+| POST | `/api/badges/member/list` | 登录 |  | `getChildBadges` |
 | POST | `/api/badges/favorite` | 登录 |  | `toggleBadgeFavorite` |
 | POST | `/api/badges/list` | 登录 |  | `getActiveBadges` |
 | POST | `/api/badges/ranking/family` | 登录 |  | `getFamilyBadgeRanking` |
-| POST | `/api/badges/statistics/child` | 登录 |  | `getChildBadgeStats` |
+| POST | `/api/badges/statistics/member` | 登录 |  | `getChildBadgeStats` |
 
 ### pages/rewards/rewards  (9 个接口)
 
@@ -2420,7 +2420,7 @@ export const submitServiceRoleApply = (data) => {
 
 | 方法 | 路径 | 鉴权 | 参数 | 来源函数 |
 |------|------|:----:|:----:|----------|
-| POST | `/api/badges/statistics/child` | 登录 |  | `getChildBadgeStats` |
+| POST | `/api/badges/statistics/member` | 登录 |  | `getChildBadgeStats` |
 | POST | `/api/commission/summary` | 登录 |  | `getCommissionSummary` |
 | POST | `/api/daily-task/overview` | 登录 |  | `getDailyTaskOverview` |
 | POST | `/api/energy/overview` | 登录 |  | `getEnergyOverview` |
@@ -2540,7 +2540,7 @@ export const tianpanCompatibility = (data) => {
 export function saveReminderConfigByUser(data) {
   return request('/api/admin/task/reminder-config/save` | 登录 | ✓ | `getReminderConfigByUser` |
 | POST | `/api/auth/silent-login` | 公开 |  | `silentLogin` |
-| POST | `/api/badges/child/list` | 登录 |  | `getChildBadges` |
+| POST | `/api/badges/member/list` | 登录 |  | `getChildBadges` |
 | POST | `/api/butler/available-list` | 公开 |  | `getAvailableButlers` |
 | POST | `/api/butler/my-butler` | 公开 |  | `getMyButler` |
 | POST | `/api/butler/select` | 公开 |  | `selectButler` |

+ 2 - 2
cfc-frontend/__tests__/api/api.test.js

@@ -948,9 +948,9 @@ describe('badges API', () => {
     expect(lastRequest().url).toMatch(/\/api\/badges\/list$/)
   })
 
-  test('getChildBadges sends POST with memberId', async () => {
+  test('getMemberBadges sends POST with memberId', async () => {
     mockSuccess({ code: 200 })
-    await api.getChildBadges(5)
+    await api.getMemberBadges(5)
     expect(lastRequest().data.memberId).toBe(5)
   })
 

+ 8 - 9
cfc-frontend/pages/achievement/index.vue

@@ -54,7 +54,7 @@
 </template>
 
 <script>
-import { getChildBadges } from '@/utils/api'
+import { getMemberBadges } from '@/utils/api'
 import fontScaleMixin from '@/mixins/font-scale.js'
 
 export default {
@@ -69,24 +69,24 @@ export default {
     }
   },
   onLoad() {
-    this.loadBadges()
     this.loadStreak()
-    this.loadGoals()
+    this.loadBadges()
   },
   methods: {
     loadBadges() {
-      const memberId = uni.getStorageSync('memberId') || null
-      getChildBadges(memberId).then(res => {
+      // 我的成就:展示当前登录用户本人的成就,不传 memberId(后端回退 currentMemberId 查当前用户)
+      getMemberBadges(null).then(res => {
         if (res.code === 200 && res.data) {
           this.badges = res.data.map(item => ({
             id: (item.badge && item.badge.id),
             icon: (item.badge && item.badge.icon) || '⭐',
             name: (item.badge && item.badge.name) || '未知勋章',
-            unlocked: !!item.childBadge,
+            unlocked: !!item.memberBadge,
             getDesc: (item.badge && item.badge.description) || ''
           }))
           this.totalBadges = res.data.length
-          this.unlockedCount = res.data.filter(item => item.childBadge).length
+          this.unlockedCount = res.data.filter(item => item.memberBadge).length
+          this.loadGoals()
         }
       }).catch(() => {})
     },
@@ -97,8 +97,7 @@ export default {
     loadGoals() {
       this.goals = [
         { id: 1, name: '连续打卡7天', current: this.streakDays, target: 7, percent: Math.min(100, (this.streakDays / 7) * 100) },
-        { id: 2, name: '获得5个勋章', current: this.unlockedCount, target: 5, percent: Math.min(100, (this.unlockedCount / 5) * 100) },
-        { id: 3, name: '累计积分1000', current: parseInt(uni.getStorageSync('totalPoints') || 0), target: 1000, percent: Math.min(100, (parseInt(uni.getStorageSync('totalPoints') || 0) / 1000) * 100) }
+        { id: 2, name: '获得5个勋章', current: this.unlockedCount, target: 5, percent: Math.min(100, (this.unlockedCount / 5) * 100) }
       ]
     },
     goBack() {

+ 10 - 10
cfc-frontend/pages/rewards/badge.vue

@@ -98,7 +98,7 @@
 </template>
 
 <script>
-import { getActiveBadges, getChildBadges, getChildBadgeStats, toggleBadgeFavorite, getFamilyBadgeRanking } from '../../utils/api.js'
+import { getActiveBadges, getMemberBadges, getMemberBadgeStats, toggleBadgeFavorite, getFamilyBadgeRanking } from '../../utils/api.js'
 import { parseDate } from '../../utils/format.js'
 import fontScaleMixin from '@/mixins/font-scale.js'
 
@@ -107,7 +107,7 @@ export default {
   data() {
     return {
       badges: [],
-      childBadges: [],
+      memberBadges: [],
       badgeList: [],
       earnedMap: {},
       stats: {},
@@ -156,13 +156,13 @@ export default {
   methods: {
     async loadData() {
       try {
-        const [badgesRes, childBadgesRes, statsRes] = await Promise.all([
+        const [badgesRes, memberBadgesRes, statsRes] = await Promise.all([
           getActiveBadges(),
-          getChildBadges(this.getChildId()),
-          getChildBadgeStats(this.getChildId())
+          getMemberBadges(this.getChildId()),
+          getMemberBadgeStats(this.getChildId())
         ])
         this.badges = badgesRes.data || []
-        this.childBadges = childBadgesRes.data || []
+        this.memberBadges = memberBadgesRes.data || []
         this.stats = statsRes.data || {}
         this.totalBadges = this.badges.length
         this.buildEarnedMap()
@@ -177,7 +177,7 @@ export default {
     },
     buildEarnedMap() {
       const map = {}
-      for (const item of this.childBadges) {
+      for (const item of this.memberBadges) {
         const badge = item.badge || {}
         const badgeId = badge.id || item.badgeId
         if (badgeId) map[badgeId] = true
@@ -210,13 +210,13 @@ export default {
     showBadgeDetail(item) {
       const badge = item._badge || item
       this.detailBadge = badge
-      const found = this.childBadges.find(function(cb) {
+      const found = this.memberBadges.find(function(cb) {
         const cbBadge = cb.badge || {}
         return (cbBadge.id || cb.badgeId) === badge.id
       })
       this.detailEarned = !!found
-      this.detailIsFav = found ? (found.isFavorite || (found.childBadge && found.childBadge.isFavorite)) : false
-      this.detailEarnedDate = found ? this.formatDate(found.earnedAt || (found.childBadge && found.childBadge.earnedAt)) : ''
+      this.detailIsFav = found ? (found.isFavorite || (found.memberBadge && found.memberBadge.isFavorite)) : false
+      this.detailEarnedDate = found ? this.formatDate(found.earnedAt || (found.memberBadge && found.memberBadge.earnedAt)) : ''
       this.showDetail = true
     },
     async onToggleFavorite() {

+ 2 - 2
cfc-frontend/pages/wealth/index.vue

@@ -288,7 +288,7 @@ import {
   getFamilyEnergySandbox,
   getEnergyOverview,
   productList,
-  getChildBadgeStats,
+  getMemberBadgeStats,
   getDailyTaskOverview, reportAppEnter,
   kickFamilyMemberById,
 } from '../../utils/api.js'
@@ -738,7 +738,7 @@ export default {
       }
       if (!memberId) return
       try {
-        var badgeRes = await getChildBadgeStats(memberId)
+        var badgeRes = await getMemberBadgeStats(memberId)
         if (badgeRes && badgeRes.code === 200 && badgeRes.data) {
           this.badgeCount = badgeRes.data.active || 0
         }

+ 6 - 6
cfc-frontend/utils/api.js

@@ -1803,16 +1803,16 @@ export const getBadgeDetail = (id) => {
   return request('/api/badges/detail', 'POST', { id })
 }
 
-export const getChildBadges = (memberId) => {
-  return request('/api/badges/child/list', 'POST', { memberId })
+export const getMemberBadges = (memberId) => {
+  return request('/api/badges/member/list', 'POST', { memberId })
 }
 
 export const toggleBadgeFavorite = (memberId, badgeId) => {
   return request('/api/badges/favorite', 'POST', { memberId, badgeId })
 }
 
-export const getChildBadgeStats = (memberId) => {
-  return request('/api/badges/statistics/child', 'POST', { memberId })
+export const getMemberBadgeStats = (memberId) => {
+  return request('/api/badges/statistics/member', 'POST', { memberId })
 }
 
 export const getFamilyBadgeRanking = () => {
@@ -2050,8 +2050,8 @@ export const getWealthDetail = (memberId, memberType) => {
 }
 
 // ===== 成就徽章 =====
-// @deprecated 别名:委托到 getChildBadges,确保 /api/badges/child/list 只有一处封装
-export const getUserBadges = (memberId) => getChildBadges(memberId)
+// @deprecated 别名:委托到 getMemberBadges,确保 /api/badges/member/list 只有一处封装
+export const getUserBadges = (memberId) => getMemberBadges(memberId)
 
 
 // ===== 成长报告 =====