Przeglądaj źródła

删除群组成员

jiapu 2 miesięcy temu
rodzic
commit
e1b475edad

+ 12 - 0
code/backend/src/main/java/com/aijiuyi/admin/service/impl/AppDeviceGroupServiceImpl.java

@@ -272,6 +272,18 @@ public class AppDeviceGroupServiceImpl implements AppDeviceGroupService {
         update.setId(member.getId());
         update.setStatus(0);
         deviceGroupMemberMapper.updateById(update);
+
+        // 同步解绑 user_device:删除群组成员时,把该 profile 与该 device 的绑定置为已解绑。
+        // 否则管理端"用户列表"通过 LEFT JOIN user_device ud ON ud.status=1 仍能查到 deviceCodes,
+        // 且前端 user/device 页面也会继续显示该用户绑定了该设备,造成"删除不彻底"的错觉。
+        // 仅解绑本群关联的 deviceCode,不影响该 profile 与其他设备的绑定。
+        Device device = requireDevice(group.getDeviceCode());
+        LambdaUpdateWrapper<UserDevice> wrapper = new LambdaUpdateWrapper<UserDevice>()
+                .eq(UserDevice::getUserId, profileId)
+                .eq(UserDevice::getDeviceCode, device.getDeviceCode())
+                .set(UserDevice::getStatus, 0)
+                .set(UserDevice::getIsPrimary, 0);
+        userDeviceMapper.update(null, wrapper);
     }
 
     @Override

+ 6 - 0
code/frontend/src/utils/request.js

@@ -63,11 +63,17 @@ request.interceptors.request.use(
 )
 
 // ==================== 响应拦截器 ====================
+// 后端 Long 已通过 Jackson 序列化为字符串,下面的 convertIdsToString 属于双重保险,
+// 防止极少数后端字段未被 Jackson 覆盖(例如直接走非默认 ObjectMapper 输出的场景),
+// 也能防止接口直接返回 int 类型的 ID 字段时被 JS Number 截断。
 request.interceptors.response.use(
   response => {
     const res = response.data
     // 业务状态码判断(后端统一返回格式:{ code, message, data })
     if (res.code === 200) {
+      if (res.data !== undefined && res.data !== null) {
+        res.data = convertIdsToString(res.data)
+      }
       return res
     }
     // Token 失效或未登录