Эх сурвалжийг харах

fix: 家庭FAB悬浮左缘中部 + 无家庭用户查询接口自动创建兜底

- FamilyMemberStrip 根容器改 position:fixed 悬浮左侧边缘中部(禁用transform避免破坏fixed后代遮罩)
- 新增 UserService.ensureUserFamily 公开兜底入口
- UserController/FamilyUserController.getFamilyMembers 与 getVisibleMembers 在 familyId 为空时自动创建家庭

Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
asus 1 сар өмнө
parent
commit
1b7bbc0714

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

@@ -132,7 +132,11 @@ public class UserController {
 
         Long familyId = user.getFamilyId();
         if (familyId == null) {
-            return Result.noFamily("请先创建或加入家庭");
+            // 兜底:无家庭时自动创建,避免"暂无家庭"空态
+            familyId = userService.ensureUserFamily(userId);
+            if (familyId == null) {
+                return Result.error("用户不存在");
+            }
         }
 
         Family family = familyMapper.selectById(familyId);

+ 5 - 1
cfc-backend/src/main/java/com/etotem/cfc/controller/family/FamilyUserController.java

@@ -181,7 +181,11 @@ public class FamilyUserController {
 
         Long familyId = user.getFamilyId();
         if (familyId == null) {
-            return Result.noFamily("请先创建或加入家庭");
+            // 兜底:无家庭时自动创建,避免"暂无家庭"空态
+            familyId = userService.ensureUserFamily(userId);
+            if (familyId == null) {
+                return Result.error("用户不存在");
+            }
         }
 
         // 获取家庭信息

+ 18 - 1
cfc-backend/src/main/java/com/etotem/cfc/service/UserService.java

@@ -775,9 +775,13 @@ private FamilyInvitationService familyInvitationService;
      */
     public List<FamilyMemberVO> getVisibleMembers(Long userId) {
         User user = userMapper.selectById(userId);
-        if (user == null || user.getFamilyId() == null) {
+        if (user == null) {
             return new ArrayList<>();
         }
+        if (user.getFamilyId() == null) {
+            // 兜底:无家庭时自动创建,避免"暂无家庭"空态
+            ensureUserHasFamily(user);
+        }
         Long familyId = user.getFamilyId();
         List<FamilyMemberVO> result = new ArrayList<>();
 
@@ -1313,6 +1317,19 @@ FamilyMember child = familyMemberMapper.selectById(memberId);
         log.info("安全兜底:为用户 {} 自动创建家庭 {}", user.getId(), family.getId());
     }
 
+    /**
+     * 确保用户有家庭(公开兜底入口,供查询家庭类接口在 familyId 为空时调用)
+     * @return 用户的 familyId;用户不存在时返回 null
+     */
+    public Long ensureUserFamily(Long userId) {
+        User user = userMapper.selectById(userId);
+        if (user == null) {
+            return null;
+        }
+        ensureUserHasFamily(user);
+        return user.getFamilyId();
+    }
+
     /**
      * 为用户创建新家庭
      */

+ 6 - 3
cfc-frontend/components/FamilyMemberStrip.vue

@@ -358,9 +358,12 @@ export default {
 
 <style scoped>
 .member-strip {
-  position: relative;
-  margin: 8rpx 0;
-  padding: 0 20rpx;
+  /* FAB 悬浮在左侧边缘中部;禁用 transform(transform 会创建 containing block,
+     使后代 .fan-overlay (position: fixed) 退化为相对本容器定位,全屏遮罩失效) */
+  position: fixed;
+  top: 50%;
+  left: 16rpx;
+  margin-top: -34rpx;
   z-index: 100;
 }