wangwenju пре 1 месец
родитељ
комит
f19a270f22

+ 118 - 42
LiangZhiYUMao/pages/page3/page3.vue

@@ -3,18 +3,23 @@
     <!-- 背景图片 -->
     <image class="bg-image" src="/static/login-bg.png" mode="aspectFill"></image>
 
+
     <!-- 顶部标题区域 -->
     <view class="header-section">
+      <!-- <view class="app-logo">🪶🪶</view> -->
       <image class="app-logo" src="/static/logo.png" mode="widthFix"></image>
+      <!-- <view class="app-name">青鸾之恋</view> -->
       <view class="app-slogan">真诚相遇 · 携手一生</view>
     </view>
 
     <!-- 登录框 -->
     <view class="login-box">
+      <!-- 微信一键登录 -->
       <button class="wechat-login-btn" @click="login_zheshow">
         <image class="wechat-icon" src="/static/wechat-icon.png" mode="aspectFit"></image>
         <text>微信一键登录</text>
       </button>
+
     </view>
 
     <!-- 底部提示 -->
@@ -23,20 +28,18 @@
       <text class="tip-text">遇见对的人,不再孤单</text>
     </view>
 
-    <butlogin :zheshow='zheshow'/>
+    <btnlogin :zheshow='zheshow'/>
   </view>
 </template>
 
 <script>
-import butlogin from '@/components/butlogin'
+import btnlogin from '@/components/butlogin';
 import api from '@/utils/api.js'
 import userAuth from '@/utils/userAuth.js'
-import timManager from '@/utils/tim-manager.js'
-import timPresenceManager from '@/utils/tim-presence-manager.js'
 
 export default {
   components: {
-    butlogin
+    btnlogin
   },
   data() {
     return {
@@ -44,78 +47,113 @@ export default {
       redirectUrl: '' // 登录成功后跳转地址(可选)
     }
   },
-  
+
   onLoad(options) {
     // 处理跳转参数
     this.redirectUrl = options && options.redirect ? decodeURIComponent(options.redirect) : ''
   },
-  
+
   methods: {
     login_zheshow() {
       this.zheshow = !this.zheshow
     },
-
     loset(Logon_Credentials) {
       console.log('=== 开始微信登录流程 ===')
-      console.log('用户输入信息:', Logon_Credentials)
+      console.log('用户登录信息:', Logon_Credentials)
 
       // 获取微信登录code
       uni.login({
         provider: 'weixin',
         success: async (loginRes) => {
-          const loginParams = {
-            code: loginRes.code.trim(), // 必需:微信登录code
-            nickname: Logon_Credentials.nickname?.trim() || '', // 可选:用户昵称
-            avatarUrl: Logon_Credentials.active?.trim() || '',  // 可选:用户头像
-            phoneCode: Logon_Credentials.code?.trim() || ''     // 可选:手机号授权code
-          };
-          uni.showLoading({ title: '登录中...' })
-          try {
-            // ✅ 获取手机号code
-            const phoneCode = (Logon_Credentials && Logon_Credentials.code && String(Logon_Credentials.code).trim())
+          // ✅ 获取手机号code
+          const phoneCode = (Logon_Credentials && Logon_Credentials.code && String(Logon_Credentials.code).trim())
               ? String(Logon_Credentials.code).trim()
               : null;
 
-            console.log('微信登录code:', loginRes.code)
-            console.log('用户昵称:', Logon_Credentials.nickname)
-            console.log('用户头像:', Logon_Credentials.active ? '已提供' : '未提供')
-            console.log('手机号code:', phoneCode || '未提供')
+          console.log('微信登录code:', loginRes.code)
+          console.log('手机号code:', phoneCode || '未提供')
 
-            // ✅ 一次性调用微信登录接口,传入所有信息
-            const wechatLoginResult = await api.auth.wechatLogin({
-              code: loginRes.code,
-              nickname: Logon_Credentials.nickname || '微信用户',
-              avatarUrl: Logon_Credentials.active || null,
-              phoneCode: phoneCode
-            });
+          // ✅ 一次性调用微信登录接口,无需用户提供头像和昵称
+          const loginParams = {
+            code: loginRes.code,
+            phoneCode: phoneCode
+          };
+          
+          uni.showLoading({title: '登录中...'})
+          try {
+            const wechatLoginResult = await api.auth.wechatLogin(loginParams);
 
             const token = wechatLoginResult?.token || wechatLoginResult?.data?.token
             const user = wechatLoginResult?.user || wechatLoginResult?.data?.user
-            
+
             if (!token || !user) {
               throw new Error('微信登录返回数据异常')
             }
-            
-            console.log('✅ 微信登录成功,用户ID:', user.userId)
-            uni.setStorageSync("userId", user.userId);
 
-            console.log('📱 使用phoneCode:', phoneCode)
+            console.log('✅ 微信登录成功,用户ID:', user.userId)
             console.log('✅ 微信登录成功')
             console.log('用户ID:', user.userId)
             console.log('昵称:', user.nickname)
             console.log('头像:', user.avatarUrl ? '已设置' : '未设置')
             console.log('手机号:', user.phone || '未设置')
+            
+            uni.setStorageSync("userId", user.userId);
 
             // ✅ 保存登录信息(后端已返回完整信息,直接保存)
             userAuth.saveLoginInfo(token, user)
-            
+
             uni.hideLoading()
-            uni.showToast({ title: '登录成功', icon: 'success' })
+            uni.showToast({title: '登录成功', icon: 'success'})
+
+            // ✅ 初始化 TIM 和 WebSocket
+            console.log('🚀 登录成功,开始初始化 TIM 和 WebSocket...')
             
+            // 延迟一下,确保全局方法已挂载
+            await new Promise(resolve => setTimeout(resolve, 200))
+            
+            try {
+              const app = getApp()
+              if (app && app.globalData && app.globalData.initGlobalTIM) {
+                await app.globalData.initGlobalTIM()
+                console.log('✅ TIM 和 WebSocket 初始化完成')
+              } else {
+                console.warn('⚠️ 全局 initGlobalTIM 方法不存在,尝试直接导入')
+                // 如果全局方法不存在,直接导入 tim-manager
+                const timManager = require('@/utils/tim-manager.js').default
+                const timPresenceManager = require('@/utils/tim-presence-manager.js').default
+                
+                // 初始化 TIM
+                if (!timManager.isLogin) {
+                  const SDKAppID = 1600109674
+                  if (!timManager.tim) {
+                    timManager.init(SDKAppID)
+                    console.log('✅ TIM SDK 初始化完成')
+                  }
+                  
+                  const res = await uni.request({
+                    url: `http://localhost:8083/api/im/getUserSig?userId=${user.userId}`,
+                    method: 'GET'
+                  })
+                  
+                  if (res[1].data.code === 200) {
+                    const userSig = res[1].data.data.userSig
+                    await timManager.login(String(user.userId), userSig)
+                    console.log('✅ TIM 登录成功')
+                    
+                    // 初始化 WebSocket
+                    await timPresenceManager.init(String(user.userId))
+                    console.log('✅ WebSocket 初始化完成')
+                  }
+                }
+              }
+            } catch (error) {
+              console.error('❌ 初始化 TIM 失败:', error)
+            }
+
             // ✅ 跳转首页
             setTimeout(() => {
               const target = this.redirectUrl || '/pages/index/index'
-              uni.reLaunch({ url: target })
+              uni.reLaunch({url: target})
             }, 500)
           } catch (error) {
             console.error('❌ 微信登录失败:', error)
@@ -129,7 +167,7 @@ export default {
         },
         fail: (err) => {
           console.error('获取微信code失败:', err)
-          uni.showToast({ title: '微信登录失败', icon: 'none' })
+          uni.showToast({title: '微信登录失败', icon: 'none'})
         }
       })
     }
@@ -154,6 +192,7 @@ export default {
     pointer-events: none;
   }
 
+  // 添加装饰性元素
   &::before {
     content: '❤️';
     position: absolute;
@@ -193,6 +232,16 @@ export default {
   .app-logo {
     font-size: 120rpx;
     margin-bottom: 20rpx;
+    // animation: heartbeat 1s infinite;
+  }
+
+  .app-name {
+    font-size: 48rpx;
+    font-weight: bold;
+    background: linear-gradient(135deg, #ff6b9d 0%, #ff8fab 100%);
+    -webkit-background-clip: text;
+    -webkit-text-fill-color: transparent;
+    margin-bottom: 15rpx;
   }
 
   .app-slogan {
@@ -215,9 +264,35 @@ export default {
   position: relative;
   z-index: 1;
 
+  // 	.wechat-login-btn {
+  // 	width: 100%;
+  // 	height: 90rpx;
+  // 		background: #FFFFFF;
+  // 		color: #ff6b9d;
+  // 	border-radius: 50rpx;
+  // 	font-size: 30rpx;
+  // 	font-weight: bold;
+  // 	display: flex;
+  // 	align-items: center;
+  // 	justify-content: center;
+  // 		border: 2rpx solid #ff6b9d;
+  // 		box-shadow: 0 8rpx 20rpx rgba(255, 107, 157, 0.2);
+
+  // 	.wechat-icon {
+  // 		width: 40rpx;
+  // 		height: 40rpx;
+  // 		margin-right: 10rpx;
+  // 	}
+
+  // 	&:active {
+  // 		opacity: 0.9;
+  // 		transform: translateY(2rpx);
+  // 	}
+  // }
   .wechat-login-btn {
     width: 100%;
     height: 96rpx;
+    // 渐变背景+光泽叠加
     background: linear-gradient(90deg, #9d40e9 0%, #5a35f7 100%),
     radial-gradient(circle at 30% 30%, rgba(255, 255, 255, 0.15), transparent 50%);
     background-blend-mode: overlay;
@@ -229,11 +304,12 @@ export default {
     align-items: center;
     justify-content: center;
     border: none;
+    // 多层光影:外层投影+内高光+内阴影
     box-shadow: 0 6rpx 16rpx rgba(90, 53, 247, 0.4),
     0 3rpx 8rpx rgba(90, 53, 247, 0.2),
     inset 0 2rpx 3rpx rgba(255, 255, 255, 0.25),
     inset 0 -2rpx 3rpx rgba(0, 0, 0, 0.15);
-    transition: all 0.2s ease;
+    transition: all 0.2s ease; // 动画过渡,更自然
   }
 
   .wechat-login-btn:active {
@@ -248,7 +324,7 @@ export default {
     width: 45rpx;
     height: 45rpx;
     margin-right: 15rpx;
-    filter: drop-shadow(0 1rpx 2rpx rgba(0, 0, 0, 0.1));
+    filter: drop-shadow(0 1rpx 2rpx rgba(0, 0, 0, 0.1)); // 给图标加轻微阴影,更立体
   }
 }
 
@@ -279,4 +355,4 @@ button {
     border: none;
   }
 }
-</style>
+</style>

+ 140 - 113
service/login/src/main/java/com/zhentao/controller/AuthCodeController.java

@@ -2,9 +2,10 @@ package com.zhentao.controller;
 
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.zhentao.common.Result;
-import com.zhentao.dto.*;
+import com.zhentao.dto.LoginResponse;
+import com.zhentao.dto.WechatLoginRequest;
+import com.zhentao.dto.WechatPhoneRequest;
 import com.zhentao.pojo.Users;
-import com.zhentao.service.SmsService;
 import com.zhentao.service.UsersService;
 import com.zhentao.service.WeChatService;
 import com.zhentao.util.AvatarUploadUtil;
@@ -28,103 +29,103 @@ import java.util.Map;
 @ConditionalOnProperty(prefix = "redis", name = "enabled", havingValue = "true", matchIfMissing = true)
 public class AuthCodeController {
 
-    @Autowired
-    private SmsService smsService;
+//    @Autowired
+//    private SmsService smsService;
 
     @Autowired
     private JwtUtil jwtUtil;
 
     @Autowired
     private WeChatService weChatService;
-
+    
     @Autowired
     private UsersService usersService;
-
+    
     @Autowired
     private AvatarUploadUtil avatarUploadUtil;
-
+    
     private final BCryptPasswordEncoder passwordEncoder = new BCryptPasswordEncoder();
 
-    /**
-     * 发送登录验证码(不依赖数据库)
-     */
-    @PostMapping("/send-code")
-    public Result<Void> sendCode(@RequestBody SmsSendRequest req) {
-        if (req == null || req.getPhone() == null || req.getPhone().trim().isEmpty()) {
-            return Result.error(400, "手机号不能为空");
-        }
-        boolean ok = smsService.sendLoginCode(req.getPhone().trim());
-        if (!ok) {
-            return Result.error(500, "验证码发送失败");
-        }
-        return Result.success();
-    }
-
-    /**
-     * 验证码登录:校验通过后查询或创建用户,签发JWT
-     */
-    @PostMapping("/sms-login")
-    public Result<LoginResponse> smsLogin(@RequestBody SmsLoginRequest req) {
-        System.out.println("=== 验证码登录请求 ===");
-        if (req == null || req.getPhone() == null || req.getCode() == null) {
-            return Result.error(400, "手机号或验证码不能为空");
-        }
-
-        System.out.println("手机号: " + req.getPhone());
-        boolean passed = smsService.verifyLoginCode(req.getPhone().trim(), req.getCode().trim());
-        if (!passed) {
-            System.out.println("❌ 验证码验证失败");
-            return Result.error(401, "验证码错误或已过期");
-        }
-
-        System.out.println("✅ 验证码验证成功");
-
-        // 查询数据库中的用户
-        Users user = usersService.getOne(new LambdaQueryWrapper<Users>()
-                .eq(Users::getPhone, req.getPhone().trim())
-                .eq(Users::getStatus, 1), false);
-
-        // 如果用户不存在,创建新用户
-        if (user == null) {
-            System.out.println("⚠️ 用户不存在,创建新用户");
-            user = new Users();
-            user.setPhone(req.getPhone().trim());
-            user.setNickname("用户" + req.getPhone().substring(Math.max(0, req.getPhone().length() - 4)));
-            user.setStatus(1);
-            user.setPassword(null);
-            user.setCreatedAt(new Date());
-            user.setUpdatedAt(new Date());
-            user.setSourceChannel("sms");
-
-            // 保存到数据库,自动生成userId
-            usersService.save(user);
-            System.out.println("✅ 创建新用户成功,ID: " + user.getUserId());
-        } else {
-            System.out.println("✅ 找到现有用户,ID: " + user.getUserId());
-            // 更新最后登录时间
-            user.setLastLoginAt(new Date());
-            usersService.updateById(user);
-        }
-
-        // 生成JWT令牌
-        Map<String, Object> claims = new HashMap<>();
-        claims.put("userId", user.getUserId());
-        claims.put("nickname", user.getNickname());
-        claims.put("phone", user.getPhone());
-        String token = jwtUtil.generateToken(claims);
-
-        System.out.println("✅ JWT token生成成功");
-
-        // 构造响应,避免泄露密码
-        user.setPassword(null);
-        LoginResponse resp = new LoginResponse();
-        resp.setToken(token);
-        resp.setUser(user);
-
-        System.out.println("✅ 验证码登录成功,返回用户信息");
-        System.out.println("返回的用户ID: " + user.getUserId() + " (类型: " + user.getUserId().getClass().getSimpleName() + ")");
-        return Result.success(resp);
-    }
+//    /**
+//     * 发送登录验证码(不依赖数据库)
+//     */
+//    @PostMapping("/send-code")
+//    public Result<Void> sendCode(@RequestBody SmsSendRequest req) {
+//        if (req == null || req.getPhone() == null || req.getPhone().trim().isEmpty()) {
+//            return Result.error(400, "手机号不能为空");
+//        }
+//        boolean ok = smsService.sendLoginCode(req.getPhone().trim());
+//        if (!ok) {
+//            return Result.error(500, "验证码发送失败");
+//        }
+//        return Result.success();
+//    }
+//
+//    /**
+//     * 验证码登录:校验通过后查询或创建用户,签发JWT
+//     */
+//    @PostMapping("/sms-login")
+//    public Result<LoginResponse> smsLogin(@RequestBody SmsLoginRequest req) {
+//        System.out.println("=== 验证码登录请求 ===");
+//        if (req == null || req.getPhone() == null || req.getCode() == null) {
+//            return Result.error(400, "手机号或验证码不能为空");
+//        }
+//
+//        System.out.println("手机号: " + req.getPhone());
+//        boolean passed = smsService.verifyLoginCode(req.getPhone().trim(), req.getCode().trim());
+//        if (!passed) {
+//            System.out.println("❌ 验证码验证失败");
+//            return Result.error(401, "验证码错误或已过期");
+//        }
+//
+//        System.out.println("✅ 验证码验证成功");
+//
+//        // 查询数据库中的用户
+//        Users user = usersService.getOne(new LambdaQueryWrapper<Users>()
+//                .eq(Users::getPhone, req.getPhone().trim())
+//                .eq(Users::getStatus, 1), false);
+//
+//        // 如果用户不存在,创建新用户
+//        if (user == null) {
+//            System.out.println("⚠️ 用户不存在,创建新用户");
+//            user = new Users();
+//            user.setPhone(req.getPhone().trim());
+//            user.setNickname("用户" + req.getPhone().substring(Math.max(0, req.getPhone().length() - 4)));
+//            user.setStatus(1);
+//            user.setPassword(null);
+//            user.setCreatedAt(new Date());
+//            user.setUpdatedAt(new Date());
+//            user.setSourceChannel("sms");
+//
+//            // 保存到数据库,自动生成userId
+//            usersService.save(user);
+//            System.out.println("✅ 创建新用户成功,ID: " + user.getUserId());
+//        } else {
+//            System.out.println("✅ 找到现有用户,ID: " + user.getUserId());
+//            // 更新最后登录时间
+//            user.setLastLoginAt(new Date());
+//            usersService.updateById(user);
+//        }
+//
+//        // 生成JWT令牌
+//        Map<String, Object> claims = new HashMap<>();
+//        claims.put("userId", user.getUserId());
+//        claims.put("nickname", user.getNickname());
+//        claims.put("phone", user.getPhone());
+//        String token = jwtUtil.generateToken(claims);
+//
+//        System.out.println("✅ JWT token生成成功");
+//
+//        // 构造响应,避免泄露密码
+//        user.setPassword(null);
+//        LoginResponse resp = new LoginResponse();
+//        resp.setToken(token);
+//        resp.setUser(user);
+//
+//        System.out.println("✅ 验证码登录成功,返回用户信息");
+//        System.out.println("返回的用户ID: " + user.getUserId() + " (类型: " + user.getUserId().getClass().getSimpleName() + ")");
+//        return Result.success(resp);
+//    }
 
     /**
      * 微信授权登录:传入 wx.login 的临时 code,后端调用 jscode2session,查询或创建用户并返回 JWT
@@ -142,28 +143,39 @@ public class AuthCodeController {
             System.out.println("❌ 微信接口调用失败: " + msg);
             return Result.error(502, msg);
         }
-
+        
         String openid = String.valueOf(wx.get("openid"));
         String unionid = wx.get("unionid") != null ? String.valueOf(wx.get("unionid")) : null;
         System.out.println("✅ 获取到微信openid: " + openid);
-
+        
         // 根据openid查询用户
         Users user = usersService.getOne(new LambdaQueryWrapper<Users>()
                 .eq(Users::getWechatOpenid, openid)
                 .eq(Users::getStatus, 1), false);
-
+        
         // 如果用户不存在,创建新用户
         if (user == null) {
             System.out.println("⚠️ 微信用户不存在,创建新用户");
             user = new Users();
-
-            // ✅ 使用前端传来的昵称
-            user.setNickname(req.getNickname() != null && !req.getNickname().trim().isEmpty()
-                    ? req.getNickname().trim()
-                    : "微信用户");
-
+            
+            // ✅ 生成默认昵称
+            String defaultNickname = "微信用户";
+            if (req.getNickname() != null && !req.getNickname().trim().isEmpty()) {
+                user.setNickname(req.getNickname().trim());
+            } else if (user.getPhone() != null && !user.getPhone().trim().isEmpty()) {
+                // 如果有手机号,使用"用户+手机号后四位"
+                String phone = user.getPhone().trim();
+                defaultNickname = "用户" + phone.substring(Math.max(0, phone.length() - 4));
+                user.setNickname(defaultNickname);
+            } else {
+                // 随机生成4位数字作为后缀
+                int randomNum = (int) (Math.random() * 9000) + 1000;
+                defaultNickname = "微信用户" + randomNum;
+                user.setNickname(defaultNickname);
+            }
+            
             System.out.println("设置用户昵称: " + user.getNickname());
-
+            
             // ✅ 上传头像到MinIO
             if (req.getAvatarUrl() != null && !req.getAvatarUrl().trim().isEmpty()) {
                 try {
@@ -174,17 +186,20 @@ public class AuthCodeController {
                         System.out.println("✅ 头像上传成功: " + avatarUrl);
                     } else {
                         System.out.println("⚠️ 头像上传失败,使用默认头像");
-                        user.setAvatarUrl(null);
+                        // 这里可以设置一个默认头像URL
+                        user.setAvatarUrl("https://via.placeholder.com/150");
                     }
                 } catch (Exception e) {
                     System.err.println("⚠️ 头像上传异常: " + e.getMessage());
-                    user.setAvatarUrl(null);
+                    // 这里可以设置一个默认头像URL
+                    user.setAvatarUrl("https://via.placeholder.com/150");
                 }
             } else {
-                System.out.println("⚠️ 未提供头像");
-                user.setAvatarUrl(null);
+                System.out.println("⚠️ 未提供头像,使用默认头像");
+                // 这里可以设置一个默认头像URL
+                user.setAvatarUrl("https://via.placeholder.com/150");
             }
-
+            
             user.setStatus(1);
             // ✅ 设置加密后的默认密码
             user.setPassword(passwordEncoder.encode("123456"));
@@ -196,8 +211,8 @@ public class AuthCodeController {
             }
             user.setCreatedAt(new Date());
             user.setUpdatedAt(new Date());
-
-            // ✅ 如果提供了手机号code,尝试获取手机号
+            
+            // ✅ 如果提供了手机号code,尝试获取手机号(先获取手机号,以便生成昵称)
             if (req.getPhoneCode() != null && !req.getPhoneCode().trim().isEmpty()) {
                 try {
                     System.out.println("尝试获取手机号,code: " + req.getPhoneCode());
@@ -214,17 +229,29 @@ public class AuthCodeController {
             } else {
                 System.out.println("⚠️ 未提供手机号code");
             }
-
+            
+            // ✅ 重新生成昵称(确保使用最新的手机号信息)
+            if (req.getNickname() == null || req.getNickname().trim().isEmpty()) {
+//                String defaultNickname = "微信用户";
+                if (user.getPhone() != null && !user.getPhone().trim().isEmpty()) {
+                    // 如果有手机号,使用"用户+手机号后四位"
+                    String phone = user.getPhone().trim();
+                    defaultNickname = "用户" + phone.substring(Math.max(0, phone.length() - 4));
+                    user.setNickname(defaultNickname);
+                    System.out.println("更新昵称使用手机号后四位: " + defaultNickname);
+                }
+            }
+            
             // 保存到数据库,自动生成userId
             usersService.save(user);
             System.out.println("✅ 创建微信新用户成功,ID: " + user.getUserId() + ", 昵称: " + user.getNickname());
         } else {
             System.out.println("✅ 找到微信用户,ID: " + user.getUserId());
-
+            
             // ✅ 如果是已存在用户,也更新昵称和头像(如果前端提供了新值)
             boolean needUpdate = false;
             if (req.getNickname() != null && !req.getNickname().trim().isEmpty()
-                    && !req.getNickname().equals(user.getNickname())) {
+                && !req.getNickname().equals(user.getNickname())) {
                 System.out.println("更新昵称: " + user.getNickname() + " -> " + req.getNickname());
                 user.setNickname(req.getNickname().trim());
                 needUpdate = true;
@@ -243,10 +270,10 @@ public class AuthCodeController {
                     System.err.println("⚠️ 更新头像失败: " + e.getMessage());
                 }
             }
-
+            
             // ✅ 如果提供了手机号code且当前用户没有手机号,尝试获取
             if ((user.getPhone() == null || user.getPhone().isEmpty())
-                    && req.getPhoneCode() != null && !req.getPhoneCode().trim().isEmpty()) {
+                && req.getPhoneCode() != null && !req.getPhoneCode().trim().isEmpty()) {
                 try {
                     System.out.println("用户无手机号,尝试获取,code: " + req.getPhoneCode());
                     String phone = weChatService.getUserPhoneByCode(req.getPhoneCode().trim());
@@ -259,11 +286,11 @@ public class AuthCodeController {
                     System.err.println("⚠️ 获取手机号失败: " + e.getMessage());
                 }
             }
-
+            
             // 更新最后登录时间
             user.setLastLoginAt(new Date());
             needUpdate = true;
-
+            
             if (needUpdate) {
                 user.setUpdatedAt(new Date());
                 usersService.updateById(user);
@@ -278,7 +305,7 @@ public class AuthCodeController {
         claims.put("openid", openid);
         if (unionid != null) claims.put("unionid", unionid);
         String token = jwtUtil.generateToken(claims);
-
+        
         System.out.println("✅ JWT token生成成功");
 
         // 构造响应,避免泄露密码
@@ -286,7 +313,7 @@ public class AuthCodeController {
         LoginResponse resp = new LoginResponse();
         resp.setToken(token);
         resp.setUser(user);
-
+        
         System.out.println("✅ 微信登录成功,返回用户信息");
         System.out.println("返回的用户ID: " + user.getUserId() + " (类型: " + user.getUserId().getClass().getSimpleName() + ")");
         return Result.success(resp);