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

fix: includeFamily 接口只返回 members 并统一成员显示名来源

- listMembersWithFamily 移除 parents/children 冗余字段,返回 {familyId/familyName/inviteCode/creatorId/members}
- resolveMemberNickname 改为优先 users 表昵称:同一人同时存在于两表时,与 getVisibleMembers 家长段口径一致,避免「我的家庭」与成员管理页名称不一致
- utils/api.js 同步更新接口注释
liaoxg преди 6 часа
родител
ревизия
f4091f7ad7
променени са 2 файла, в които са добавени 11 реда и са изтрити 16 реда
  1. 5 13
      cfc-backend/src/main/java/com/etotem/cfc/service/FamilyMemberService.java
  2. 6 3
      cfc-frontend/utils/api.js

+ 5 - 13
cfc-backend/src/main/java/com/etotem/cfc/service/FamilyMemberService.java

@@ -945,13 +945,11 @@ public class FamilyMemberService {
     // ===== 内部方法 =====
 
     /**
-     * 解析成员显示名:优先 family_members.nickname,为空时回退到关联 users 表的 nickname。
-     * 被邀请/绑定登录账号的成员,family_members.nickname 可能为空或旧值,而 users.nickname 才是真实名字。
+     * 解析成员显示名:优先关联 users 表的 nickname,其次 family_members.nickname。
+     * 同一人可能同时存在于两表(创建者/受邀登录成员),getVisibleMembers 家长段显示的正是 users.nickname,
+     * 此处统一口径,避免「我的家庭」与成员管理页名称不一致。
      */
     private String resolveMemberNickname(FamilyMember fm) {
-        if (fm.getNickname() != null && !fm.getNickname().trim().isEmpty()) {
-            return fm.getNickname();
-        }
         if (fm.getUserId() != null) {
             User u = userMapper.selectById(fm.getUserId());
             if (u != null && u.getNickname() != null && !u.getNickname().trim().isEmpty()) {
@@ -1206,8 +1204,8 @@ public class FamilyMemberService {
 
     /**
      * 获取家庭成员列表(含家庭信息),兼容旧接口 /api/family/user/family-members 的 Map 返回结构。
-     * 返回: { familyId, familyName, inviteCode, creatorId, parents[], children[], members[] }
-     * members 为富化的 FamilyMemberVO 列表(含 roleLabel/trustScore 等展示字段),
+     * 返回: { familyId, familyName, inviteCode, creatorId, members[] }
+     * members 为富化的 FamilyMemberVO 列表(含 roleLabel/trustScore 等展示字段),已含家长段与成员段全量,
      * 供前端单次调用 /api/family/member/list?includeFamily=true 同时获取成员与家庭信息,避免重复请求。
      */
     public Map<String, Object> listMembersWithFamily(Long userId) {
@@ -1229,12 +1227,6 @@ public class FamilyMemberService {
         result.put("inviteCode", family.getInviteCode());
         result.put("creatorId", family.getCreatorId());
         result.put("members", listMembers(userId));
-        result.put("parents", userMapper.selectList(
-                new LambdaQueryWrapper<User>().eq(User::getFamilyId, familyId).eq(User::getRole, "parent")));
-        result.put("children", familyMemberMapper.selectList(
-                new LambdaQueryWrapper<FamilyMember>()
-                        .eq(FamilyMember::getFamilyId, familyId)
-                        .ne(FamilyMember::getStatus, "recycled")));
         return result;
     }
 }

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

@@ -404,7 +404,7 @@ export const ensureFamily = () => {
 }
 
 // 统一家庭成员列表接口(唯一入口,替代 getFamilyMembers / getVisibleFamilyMembers / listFamilyMembers)
-// params: { visibleOnly: true } 仅返回 show_to_family=1 成员; { includeFamily: true } 附带 familyId/familyName/inviteCode/creatorId
+// params: { visibleOnly: true } 仅返回 show_to_family=1 成员; { includeFamily: true } 返回 {familyId/familyName/inviteCode/creatorId/members}(members 已含家长段与成员段全量)
 export const getFamilyMemberList = (params) => {
 	return request('/api/family/member/list', 'POST', params || {})
 }
@@ -2225,11 +2225,14 @@ export const parseReportPreview = (filePath, memberId, type) => {
 // 阶段2:确认落库(可选传修改后的payload和subjectId)
 
 // 阶段0:仅上传报告文件(不解析),返回 draftId
-export const uploadReportOnly = (filePath, type) => {
+export const uploadReportOnly = (filePath, type, memberId) => {
   return new Promise((resolve, reject) => {
     const token = uni.getStorageSync('token')
+    var query = ''
+    if (type) query += '?type=' + type
+    if (memberId) query += (query ? '&' : '?') + 'memberId=' + memberId
     uni.uploadFile({
-      url: BASE_URL + '/api/health/report/upload-only' + (type ? '?type=' + type : ''),
+      url: BASE_URL + '/api/health/report/upload-only' + query,
       filePath: filePath,
       name: 'file',
       header: {