From dc643ba44fd2a426263015491268a0f0d6b4671d Mon Sep 17 00:00:00 2001
From: lrj <owen.stl@gmail.com>
Date: 星期三, 01 十月 2025 08:39:29 +0800
Subject: [PATCH] 删除包含test、check、fix的文件名的文件

---
 backend/src/main/java/com/rongyichuang/message/repository/MessageRepository.java       |    5 
 web/src/views/review/index.vue                                                         |   15 
 web/src/layout/index.vue                                                               |  299 +--
 web/src/api/projectReview.js                                                           |   37 
 backend/src/main/java/com/rongyichuang/message/api/MessageGraphqlApi.java              |   28 
 backend/src/main/java/com/rongyichuang/judge/service/JudgeService.java                 |    8 
 backend/src/main/java/com/rongyichuang/user/dto/response/UserProfile.java              |  131 +
 web/src/api/activity.js                                                                |   10 
 wx/pages/index/index.wxml                                                              |   14 
 backend/src/main/java/com/rongyichuang/auth/filter/JwtAuthenticationFilter.java        |   32 
 wx/pages/index/index.wxss                                                              |   28 
 wx/pages/activity/detail.wxss                                                          |    2 
 backend/src/main/java/com/rongyichuang/player/service/PlayerService.java               |   41 
 web/src/config/api.ts                                                                  |   59 
 web/src/views/activity/index.vue                                                       |    2 
 backend/src/main/java/com/rongyichuang/player/service/ActivityPlayerService.java       |   18 
 backend/src/main/java/com/rongyichuang/player/repository/ActivityPlayerRepository.java |   10 
 web/package.json                                                                       |    2 
 backend/src/main/java/com/rongyichuang/user/dto/response/UserStats.java                |   44 
 backend/src/main/resources/graphql/user.graphqls                                       |   66 
 wx/pages/registration/registration.js                                                  |   75 +
 backend/src/main/java/com/rongyichuang/user/dto/response/UserRegistration.java         |  157 ++
 web/src/views/player/index.vue                                                         |   97 +
 backend/src/main/java/com/rongyichuang/employee/service/EmployeeService.java           |    8 
 wx/pages/message/message.wxml                                                          |  158 --
 wx/pages/message/message.wxss                                                          |  414 -----
 backend/src/main/java/com/rongyichuang/user/resolver/UserResolver.java                 |  173 ++
 web/src/style/index.scss                                                               |   21 
 web/postcss.config.js                                                                  |    5 
 backend/src/main/java/com/rongyichuang/message/service/MessageService.java             |  136 +
 backend/src/main/java/com/rongyichuang/activity/service/ActivityService.java           |   88 
 wx/pages/registration/registration.wxml                                                |   33 
 wx/pages/registration/registration.wxss                                                |   81 +
 backend/src/main/java/com/rongyichuang/player/service/PromotionService.java            |   11 
 web/src/views/dashboard/index.vue                                                      |  188 +-
 /dev/null                                                                              |  572 --------
 backend/src/main/java/com/rongyichuang/player/service/PlayerApplicationService.java    |    8 
 backend/src/main/java/com/rongyichuang/activity/resolver/ActivityResolver.java         |    8 
 web/src/router/index.ts                                                                |    6 
 backend/src/main/resources/graphql/activity.graphqls                                   |    3 
 backend/src/main/resources/graphql/message.graphqls                                    |   21 
 wx/pages/message/message.js                                                            |  627 +-------
 db.sql                                                                                 |  475 ++++++
 web/src/views/review/detail.vue                                                        |    8 
 backend/src/main/java/com/rongyichuang/common/util/UserContextUtil.java                |   17 
 backend/src/main/java/com/rongyichuang/message/entity/Message.java                     |   18 
 46 files changed, 2,189 insertions(+), 2,070 deletions(-)

diff --git a/backend/src/main/java/com/rongyichuang/activity/resolver/ActivityResolver.java b/backend/src/main/java/com/rongyichuang/activity/resolver/ActivityResolver.java
index eb19b1e..12d1796 100644
--- a/backend/src/main/java/com/rongyichuang/activity/resolver/ActivityResolver.java
+++ b/backend/src/main/java/com/rongyichuang/activity/resolver/ActivityResolver.java
@@ -59,6 +59,14 @@
     }
     
     /**
+     * 鑾峰彇鎵�鏈夋瘮璧涢樁娈碉紙鐢ㄤ簬璇勫椤甸潰涓嬫媺閫夋嫨锛�
+     */
+    @QueryMapping
+    public List<ActivityResponse> allActivityStages() {
+        return activityService.findAllStagesForSelection();
+    }
+    
+    /**
      * 鑾峰彇姣旇禌鐨勬墍鏈夐樁娈�
      */
     @QueryMapping
diff --git a/backend/src/main/java/com/rongyichuang/activity/service/ActivityService.java b/backend/src/main/java/com/rongyichuang/activity/service/ActivityService.java
index a0ad78b..b692385 100644
--- a/backend/src/main/java/com/rongyichuang/activity/service/ActivityService.java
+++ b/backend/src/main/java/com/rongyichuang/activity/service/ActivityService.java
@@ -70,9 +70,18 @@
         List<ActivityResponse> content = page.getContent().stream()
             .map(activity -> {
                 ActivityResponse response = new ActivityResponse(activity);
-                // 璁剧疆鍙傝禌浜烘暟锛堝鏍搁�氳繃鐨勬姤鍚嶆暟閲忥級
-                Long playerCountLong = activityPlayerRepository.countByActivityId(activity.getId());
-                int playerCount = playerCountLong != null ? playerCountLong.intValue() : 0;
+                // 璁剧疆鍙傝禌浜烘暟锛堝彧缁熻绗竴闃舵鐨勫鏍搁�氳繃瀛﹀憳浜烘暟锛�
+                int playerCount = 0;
+                Activity firstStage = activityRepository.findFirstStageByActivityId(activity.getId());
+                if (firstStage != null) {
+                    // 濡傛灉鏈夌涓�闃舵锛岀粺璁$涓�闃舵鐨勫鏍搁�氳繃浜烘暟
+                    Long playerCountLong = activityPlayerRepository.countByStageIdAndState(firstStage.getId(), 1);
+                    playerCount = playerCountLong != null ? playerCountLong.intValue() : 0;
+                } else {
+                    // 濡傛灉娌℃湁闃舵锛岀粺璁℃椿鍔ㄦ湰韬殑瀹℃牳閫氳繃浜烘暟
+                    Long playerCountLong = activityPlayerRepository.countByActivityIdAndState(activity.getId(), 1);
+                    playerCount = playerCountLong != null ? playerCountLong.intValue() : 0;
+                }
                 response.setPlayerCount(playerCount);
                 return response;
             })
@@ -332,39 +341,23 @@
         // 鑾峰彇鎵�鏈夌姸鎬佷负1鐨勬椿鍔�
         List<Activity> allActivities = activityRepository.findByStateOrderByPidAscNameAsc(1);
         
-        // 杩囨护锛氬彧淇濈暀姣旇禌闃舵锛坧id>0锛�
+        // 杩囨护锛氬彧淇濈暀涓绘瘮璧涳紙pid=0锛�
         List<Activity> filteredActivities = allActivities.stream()
-            .filter(activity -> activity.getPid() > 0)
+            .filter(activity -> activity.getPid() == 0)
             .collect(Collectors.toList());
         
-        // 杞崲涓篈ctivityResponse锛屽寘鍚埗姣旇禌淇℃伅
+        // 杞崲涓篈ctivityResponse
         List<ActivityResponse> result = filteredActivities.stream()
             .map(activity -> {
                 ActivityResponse response = new ActivityResponse(activity);
-                // 璁剧疆鍙傝禌浜烘暟锛堝鏍搁�氳繃鐨勬姤鍚嶆暟閲忥級
+                // 璁剧疆鍙傝禌浜烘暟锛堟墍鏈夐樁娈电殑鎶ュ悕鏁伴噺鎬诲拰锛�
                 Long playerCountLong = activityPlayerRepository.countByActivityId(activity.getId());
                 int playerCount = playerCountLong != null ? playerCountLong.intValue() : 0;
                 response.setPlayerCount(playerCount);
                 
-                // 璁剧疆鐖舵瘮璧涗俊鎭�
-                Optional<Activity> parentOpt = activityRepository.findById(activity.getPid());
-                if (parentOpt.isPresent()) {
-                    Activity parent = parentOpt.get();
-                    response.setParent(new ActivityResponse(parent));
-                }
-                
                 return response;
             })
-            .sorted((a, b) -> {
-                // 鍏堟寜鐖舵瘮璧涘悕绉版帓搴忥紝鍐嶆寜闃舵鍚嶇О鎺掑簭
-                if (a.getParent() != null && b.getParent() != null) {
-                    int parentCompare = a.getParent().getName().compareTo(b.getParent().getName());
-                    if (parentCompare != 0) {
-                        return parentCompare;
-                    }
-                }
-                return a.getName().compareTo(b.getName());
-            })
+            .sorted((a, b) -> a.getName().compareTo(b.getName()))
             .collect(Collectors.toList());
         
         return result;
@@ -388,6 +381,53 @@
     }
     
     /**
+     * 鑾峰彇鎵�鏈夋瘮璧涢樁娈碉紙鐢ㄤ簬璇勫椤甸潰涓嬫媺閫夋嫨锛�
+     * 杩斿洖鎵�鏈夌姸鎬佷负1涓攑id>0鐨勬瘮璧涢樁娈�
+     */
+    public List<ActivityResponse> findAllStagesForSelection() {
+        // 鑾峰彇鎵�鏈夌姸鎬佷负1鐨勬椿鍔�
+        List<Activity> allActivities = activityRepository.findByStateOrderByPidAscNameAsc(1);
+        
+        // 鍒嗙涓绘瘮璧涘拰闃舵
+        Map<Long, Activity> parentActivitiesMap = allActivities.stream()
+            .filter(activity -> activity.getPid() == 0)
+            .collect(Collectors.toMap(Activity::getId, activity -> activity));
+        
+        // 杩囨护锛氬彧淇濈暀姣旇禌闃舵锛坧id>0锛�
+        List<Activity> filteredStages = allActivities.stream()
+            .filter(activity -> activity.getPid() > 0)
+            .collect(Collectors.toList());
+        
+        // 杞崲涓篈ctivityResponse
+        List<ActivityResponse> result = filteredStages.stream()
+            .map(activity -> {
+                ActivityResponse response = new ActivityResponse(activity);
+                // 璁剧疆鍙傝禌浜烘暟锛堝鏍搁�氳繃鐨勬姤鍚嶆暟閲忥級
+                Long playerCountLong = activityPlayerRepository.countByActivityId(activity.getId());
+                int playerCount = playerCountLong != null ? playerCountLong.intValue() : 0;
+                response.setPlayerCount(playerCount);
+                
+                // 鎵嬪姩璁剧疆parent淇℃伅
+                Activity parentActivity = parentActivitiesMap.get(activity.getPid());
+                if (parentActivity != null) {
+                    ActivityResponse parentResponse = new ActivityResponse(parentActivity);
+                    response.setParent(parentResponse);
+                }
+                
+                return response;
+            })
+            .sorted((a, b) -> {
+                // 鍏堟寜鐖舵瘮璧汭D鎺掑簭锛屽啀鎸夐樁娈靛悕绉版帓搴�
+                int pidCompare = Long.compare(a.getPid(), b.getPid());
+                if (pidCompare != 0) return pidCompare;
+                return a.getName().compareTo(b.getName());
+            })
+            .collect(Collectors.toList());
+        
+        return result;
+    }
+    
+    /**
      * 缁熻姣旇禌鏁伴噺
      */
     public long countActiveActivities() {
diff --git a/backend/src/main/java/com/rongyichuang/auth/filter/JwtAuthenticationFilter.java b/backend/src/main/java/com/rongyichuang/auth/filter/JwtAuthenticationFilter.java
index 32c4aa5..4fef1a3 100644
--- a/backend/src/main/java/com/rongyichuang/auth/filter/JwtAuthenticationFilter.java
+++ b/backend/src/main/java/com/rongyichuang/auth/filter/JwtAuthenticationFilter.java
@@ -12,6 +12,7 @@
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.security.authentication.UsernamePasswordAuthenticationToken;
 import org.springframework.security.core.context.SecurityContextHolder;
+import org.springframework.security.core.Authentication;
 import org.springframework.security.core.userdetails.UserDetails;
 import org.springframework.security.core.userdetails.UserDetailsService;
 import org.springframework.security.web.authentication.WebAuthenticationDetailsSource;
@@ -38,32 +39,45 @@
 
     @Override
     protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, 
-                                  FilterChain filterChain) throws ServletException, IOException {
+                                    FilterChain filterChain) throws ServletException, IOException {
+        System.out.println("=== JWT杩囨护鍣ㄨ璋冪敤 === URI: " + request.getRequestURI());
+        logger.debug("JWT杩囨护鍣ㄥ紑濮嬪鐞嗚姹�: {}", request.getRequestURI());
         
         String authHeader = request.getHeader("Authorization");
         String token = null;
         Long userId = null;
 
+        logger.debug("Authorization澶�: {}", authHeader);
+
         // 浠庤姹傚ご涓彁鍙朖WT token
         if (authHeader != null && authHeader.startsWith("Bearer ")) {
             token = authHeader.substring(7);
+            logger.debug("鎻愬彇鍒癑WT token: {}", token.substring(0, Math.min(20, token.length())) + "...");
             try {
                 userId = jwtUtil.getUserIdFromToken(token);
+                logger.debug("浠巘oken涓В鏋愬埌鐢ㄦ埛ID: {}", userId);
             } catch (Exception e) {
-                logger.debug("JWT token瑙f瀽澶辫触: {}", e.getMessage());
+                logger.error("JWT token瑙f瀽澶辫触: {}", e.getMessage(), e);
             }
+        } else {
+            logger.debug("娌℃湁鎵惧埌Authorization澶存垨鏍煎紡涓嶆纭�");
         }
 
-        // 濡傛灉token鏈夋晥涓斿綋鍓嶆病鏈夎璇佷俊鎭�
-        if (userId != null && SecurityContextHolder.getContext().getAuthentication() == null) {
+        // 濡傛灉token鏈夋晥涓斿綋鍓嶆槸鍖垮悕鎴栨棤璁よ瘉锛屽垯杩涜璁よ瘉
+        Authentication existingAuth = SecurityContextHolder.getContext().getAuthentication();
+        boolean isAnonymous = (existingAuth == null) || ("anonymousUser".equals(String.valueOf(existingAuth.getPrincipal())));
+        if (userId != null && isAnonymous) {
+            logger.debug("寮�濮嬮獙璇乼oken鏈夋晥鎬�");
             
             // 楠岃瘉token鏄惁鏈夋晥
             if (jwtUtil.validateToken(token)) {
+                logger.debug("Token楠岃瘉鎴愬姛锛屾煡鎵剧敤鎴蜂俊鎭�");
                 
                 // 鏌ユ壘鐢ㄦ埛淇℃伅
                 Optional<User> userOpt = userRepository.findById(userId);
                 if (userOpt.isPresent()) {
                     User user = userOpt.get();
+                    logger.debug("鎵惧埌鐢ㄦ埛: userId={}, phone={}", user.getId(), user.getPhone());
                     
                     // 鍒涘缓璁よ瘉瀵硅薄
                     UsernamePasswordAuthenticationToken authToken = 
@@ -76,9 +90,17 @@
                     authToken.setDetails(new WebAuthenticationDetailsSource().buildDetails(request));
                     SecurityContextHolder.getContext().setAuthentication(authToken);
                     
-                    logger.debug("鐢ㄦ埛璁よ瘉鎴愬姛: userId={}, phone={}", user.getId(), user.getPhone());
+                    logger.info("鐢ㄦ埛璁よ瘉鎴愬姛: userId={}, phone={}", user.getId(), user.getPhone());
+                } else {
+                    logger.warn("鐢ㄦ埛涓嶅瓨鍦�: userId={}", userId);
                 }
+            } else {
+                logger.warn("Token楠岃瘉澶辫触");
             }
+        } else if (userId == null) {
+            logger.debug("娌℃湁瑙f瀽鍒扮敤鎴稩D");
+        } else {
+            logger.debug("宸插瓨鍦ㄩ潪鍖垮悕璁よ瘉淇℃伅锛岃烦杩嘕WT璁よ瘉");
         }
 
         filterChain.doFilter(request, response);
diff --git a/backend/src/main/java/com/rongyichuang/common/api/MediaTestController.java b/backend/src/main/java/com/rongyichuang/common/api/MediaTestController.java
deleted file mode 100644
index 7545101..0000000
--- a/backend/src/main/java/com/rongyichuang/common/api/MediaTestController.java
+++ /dev/null
@@ -1,32 +0,0 @@
-package com.rongyichuang.common.api;
-
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.jdbc.core.JdbcTemplate;
-import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RequestParam;
-import org.springframework.web.bind.annotation.RestController;
-
-import java.util.List;
-import java.util.Map;
-
-@RestController
-@RequestMapping("/test")
-public class MediaTestController {
-
-    @Autowired
-    private JdbcTemplate jdbcTemplate;
-
-    @GetMapping("/media")
-    public Object getMedia(@RequestParam Integer targetType, @RequestParam Long targetId) {
-        try {
-            String sql = "SELECT id, name, path, file_ext, media_type, target_type, target_id " +
-                        "FROM t_media WHERE target_type = ? AND target_id = ?";
-            
-            List<Map<String, Object>> rows = jdbcTemplate.queryForList(sql, targetType, targetId);
-            return rows;
-        } catch (Exception e) {
-            return "閿欒: " + e.getMessage();
-        }
-    }
-}
\ No newline at end of file
diff --git a/backend/src/main/java/com/rongyichuang/common/util/UserContextUtil.java b/backend/src/main/java/com/rongyichuang/common/util/UserContextUtil.java
index e659917..7ab37f2 100644
--- a/backend/src/main/java/com/rongyichuang/common/util/UserContextUtil.java
+++ b/backend/src/main/java/com/rongyichuang/common/util/UserContextUtil.java
@@ -51,6 +51,12 @@
                 return userId;
             }
 
+            if (token == null) {
+                logger.debug("鏈兘浠庤姹傚ご鑾峰彇鍒癑WT token");
+            } else {
+                logger.debug("浠庤姹傚ご鑾峰彇鍒皌oken浣嗘牎楠屽け璐�");
+            }
+
             // 濡傛灉娌℃湁鏈夋晥鐨凧WT token锛屽皾璇曚粠Spring Security涓婁笅鏂囪幏鍙�
             Authentication authentication = SecurityContextHolder.getContext().getAuthentication();
             if (authentication != null && authentication.isAuthenticated() && 
@@ -86,11 +92,18 @@
     private String getTokenFromRequest() {
         try {
             ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
-            if (attributes != null) {
+            if (attributes == null) {
+                logger.warn("RequestContextHolder涓棤ServletRequestAttributes锛屽彲鑳戒负寮傛鎵ц鎴栭潪Servlet鐜");
+            } else {
                 HttpServletRequest request = attributes.getRequest();
                 String authHeader = request.getHeader("Authorization");
+                logger.debug("璇诲彇鍒癆uthorization澶�: {}", authHeader);
                 if (authHeader != null && authHeader.startsWith("Bearer ")) {
-                    return authHeader.substring(7);
+                    String token = authHeader.substring(7);
+                    logger.debug("浠嶢uthorization澶存彁鍙栧埌Bearer token锛岄暱搴�: {}", token != null ? token.length() : 0);
+                    return token;
+                } else {
+                    logger.debug("Authorization澶翠笉瀛樺湪鎴栦笉浠earer寮�澶�");
                 }
             }
         } catch (Exception e) {
diff --git a/backend/src/main/java/com/rongyichuang/employee/service/EmployeeService.java b/backend/src/main/java/com/rongyichuang/employee/service/EmployeeService.java
index 3c429e7..417cbce 100644
--- a/backend/src/main/java/com/rongyichuang/employee/service/EmployeeService.java
+++ b/backend/src/main/java/com/rongyichuang/employee/service/EmployeeService.java
@@ -86,6 +86,14 @@
     }
 
     /**
+     * 鏍规嵁鐢ㄦ埛ID鑾峰彇鍛樺伐淇℃伅
+     */
+    public Employee findByUserId(Long userId) {
+        Optional<Employee> employee = employeeRepository.findByUserId(userId);
+        return employee.orElse(null);
+    }
+
+    /**
      * 淇濆瓨鍛樺伐锛堟柊澧炴垨鏇存柊锛�
      */
     public EmployeeResponse saveEmployee(EmployeeInput input) {
diff --git a/backend/src/main/java/com/rongyichuang/judge/service/JudgeService.java b/backend/src/main/java/com/rongyichuang/judge/service/JudgeService.java
index a0f5dc2..1f1c490 100644
--- a/backend/src/main/java/com/rongyichuang/judge/service/JudgeService.java
+++ b/backend/src/main/java/com/rongyichuang/judge/service/JudgeService.java
@@ -71,6 +71,14 @@
                 .orElse(null);
     }
 
+    /**
+     * 鏍规嵁鐢ㄦ埛ID鑾峰彇璇勫淇℃伅
+     */
+    public Judge findByUserId(Long userId) {
+        Optional<Judge> judge = judgeRepository.findByUserId(userId);
+        return judge.orElse(null);
+    }
+
     @Transactional
     public JudgeResponse save(JudgeInput input) {
         Judge judge;
diff --git a/backend/src/main/java/com/rongyichuang/message/api/MessageGraphqlApi.java b/backend/src/main/java/com/rongyichuang/message/api/MessageGraphqlApi.java
new file mode 100644
index 0000000..0c9502f
--- /dev/null
+++ b/backend/src/main/java/com/rongyichuang/message/api/MessageGraphqlApi.java
@@ -0,0 +1,28 @@
+package com.rongyichuang.message.api;
+
+import com.rongyichuang.message.entity.Message;
+import com.rongyichuang.message.service.MessageService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.graphql.data.method.annotation.Argument;
+import org.springframework.graphql.data.method.annotation.QueryMapping;
+import org.springframework.stereotype.Controller;
+
+import java.util.List;
+
+/**
+ * 娑堟伅GraphQL API鎺у埗鍣�
+ */
+@Controller
+public class MessageGraphqlApi {
+
+    @Autowired
+    private MessageService messageService;
+
+    /**
+     * 鏍规嵁鐢ㄦ埛ID鑾峰彇娑堟伅鍒楄〃锛屾寜鏃堕棿鍊掑簭
+     */
+    @QueryMapping
+    public List<Message> getMessagesByUserId(@Argument Long userId) {
+        return messageService.getMessagesByUserId(userId);
+    }
+}
\ No newline at end of file
diff --git a/backend/src/main/java/com/rongyichuang/message/entity/Message.java b/backend/src/main/java/com/rongyichuang/message/entity/Message.java
index 94ddbe1..098cc56 100644
--- a/backend/src/main/java/com/rongyichuang/message/entity/Message.java
+++ b/backend/src/main/java/com/rongyichuang/message/entity/Message.java
@@ -21,19 +21,19 @@
      * 鐩爣ID
      */
     @Column(name = "target_id", nullable = false)
-    private Integer targetId;
+    private Long targetId;
 
     /**
      * 瀛﹀憳ID
      */
     @Column(name = "player_id", nullable = false)
-    private Integer playerId;
+    private Long playerId;
 
     /**
      * 鐢ㄦ埛ID
      */
     @Column(name = "user_id", nullable = false)
-    private Integer userId;
+    private Long userId;
 
     /**
      * 娑堟伅鍐呭
@@ -80,27 +80,27 @@
         this.targetType = targetType;
     }
 
-    public Integer getTargetId() {
+    public Long getTargetId() {
         return targetId;
     }
 
-    public void setTargetId(Integer targetId) {
+    public void setTargetId(Long targetId) {
         this.targetId = targetId;
     }
 
-    public Integer getPlayerId() {
+    public Long getPlayerId() {
         return playerId;
     }
 
-    public void setPlayerId(Integer playerId) {
+    public void setPlayerId(Long playerId) {
         this.playerId = playerId;
     }
 
-    public Integer getUserId() {
+    public Long getUserId() {
         return userId;
     }
 
-    public void setUserId(Integer userId) {
+    public void setUserId(Long userId) {
         this.userId = userId;
     }
 
diff --git a/backend/src/main/java/com/rongyichuang/message/repository/MessageRepository.java b/backend/src/main/java/com/rongyichuang/message/repository/MessageRepository.java
index 17980b5..63bc2fe 100644
--- a/backend/src/main/java/com/rongyichuang/message/repository/MessageRepository.java
+++ b/backend/src/main/java/com/rongyichuang/message/repository/MessageRepository.java
@@ -50,4 +50,9 @@
      */
     @Query("SELECT m FROM Message m WHERE m.playerId = :playerId AND m.state IN (0, 1)")
     List<Message> findUnpublishedMessagesByPlayerId(@Param("playerId") Integer playerId);
+
+    /**
+     * 鏍规嵁鐢ㄦ埛ID鏌ユ壘娑堟伅锛屾寜鍒涘缓鏃堕棿鍊掑簭
+     */
+    List<Message> findByUserIdOrderByCreateTimeDesc(Long userId);
 }
\ No newline at end of file
diff --git a/backend/src/main/java/com/rongyichuang/message/service/MessageService.java b/backend/src/main/java/com/rongyichuang/message/service/MessageService.java
new file mode 100644
index 0000000..a5f7dd9
--- /dev/null
+++ b/backend/src/main/java/com/rongyichuang/message/service/MessageService.java
@@ -0,0 +1,136 @@
+package com.rongyichuang.message.service;
+
+import com.rongyichuang.message.entity.Message;
+import com.rongyichuang.message.entity.MessageType;
+import com.rongyichuang.message.repository.MessageRepository;
+import com.rongyichuang.player.entity.Player;
+import com.rongyichuang.player.repository.PlayerRepository;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.util.List;
+import java.util.Optional;
+
+/**
+ * 娑堟伅鏈嶅姟绫�
+ */
+@Service
+public class MessageService {
+    
+    private static final Logger log = LoggerFactory.getLogger(MessageService.class);
+    
+    @Autowired
+    private MessageRepository messageRepository;
+    
+    @Autowired
+    private PlayerRepository playerRepository;
+    
+
+    
+    /**
+     * 鍒涘缓瀹℃牳閫氳繃娑堟伅
+     */
+    @Transactional
+    public void createApprovalMessage(Long targetId, Long playerId, String projectName) {
+        Long userId = getUserIdByPlayerId(playerId);
+        if (userId == null) {
+            log.error("鏃犳硶鑾峰彇閫夋墜瀵瑰簲鐨勭敤鎴稩D锛岄�夋墜ID: {}", playerId);
+            return;
+        }
+        
+        Message message = new Message();
+        message.setTargetType(MessageType.REVIEW_APPROVED.getValue());
+        message.setTargetId(targetId);
+        message.setPlayerId(playerId);
+        message.setUserId(userId);
+        message.setContent(projectName + " 瀹℃牳閫氳繃");
+        message.setState(1); // 鏈夋晥鐘舵��
+        message.setWxMsgSuccess(false); // 榛樿鏈彂閫佸井淇℃秷鎭�
+        message.setWxMsgErrCount(0); // 榛樿閿欒娆℃暟涓�0
+        
+        messageRepository.save(message);
+        log.info("鍒涘缓瀹℃牳閫氳繃娑堟伅鎴愬姛锛宼argetId: {}, playerId: {}, userId: {}", targetId, playerId, userId);
+    }
+    
+    /**
+     * 鍒涘缓瀹℃牳椹冲洖娑堟伅
+     */
+    @Transactional
+    public void createRejectionMessage(Long targetId, Long playerId, String projectName) {
+        Long userId = getUserIdByPlayerId(playerId);
+        if (userId == null) {
+            log.error("鏃犳硶鑾峰彇閫夋墜瀵瑰簲鐨勭敤鎴稩D锛岄�夋墜ID: {}", playerId);
+            return;
+        }
+        
+        Message message = new Message();
+        message.setTargetType(MessageType.REVIEW_REJECTED.getValue());
+        message.setTargetId(targetId);
+        message.setPlayerId(playerId);
+        message.setUserId(userId);
+        message.setContent(projectName + " 瀹℃牳涓嶉�氳繃");
+        message.setState(1); // 鏈夋晥鐘舵��
+        message.setWxMsgSuccess(false); // 榛樿鏈彂閫佸井淇℃秷鎭�
+        message.setWxMsgErrCount(0); // 榛樿閿欒娆℃暟涓�0
+        
+        messageRepository.save(message);
+        log.info("鍒涘缓瀹℃牳椹冲洖娑堟伅鎴愬姛锛宼argetId: {}, playerId: {}, userId: {}", targetId, playerId, userId);
+    }
+    
+    /**
+     * 鍒涘缓鏅嬬骇娑堟伅
+     */
+    @Transactional
+    public void createPromotionMessage(Long targetId, Long playerId, String projectName) {
+        Long userId = getUserIdByPlayerId(playerId);
+        if (userId == null) {
+            log.error("鏃犳硶鑾峰彇閫夋墜瀵瑰簲鐨勭敤鎴稩D锛岄�夋墜ID: {}", playerId);
+            return;
+        }
+        
+        Message message = new Message();
+        message.setTargetType(MessageType.COMPETITION_PROMOTED.getValue());
+        message.setTargetId(targetId);
+        message.setPlayerId(playerId);
+        message.setUserId(userId);
+        message.setContent(projectName + " 姣旇禌鏅嬬骇");
+        message.setState(1); // 鏈夋晥鐘舵��
+        message.setWxMsgSuccess(false); // 榛樿鏈彂閫佸井淇℃秷鎭�
+        message.setWxMsgErrCount(0); // 榛樿閿欒娆℃暟涓�0
+        
+        messageRepository.save(message);
+        log.info("鍒涘缓鏅嬬骇娑堟伅鎴愬姛锛宼argetId: {}, playerId: {}, userId: {}", targetId, playerId, userId);
+    }
+    
+    /**
+     * 閫氳繃閫夋墜ID鑾峰彇瀵瑰簲鐨勭敤鎴稩D
+     */
+    private Long getUserIdByPlayerId(Long playerId) {
+        try {
+            Optional<Player> playerOpt = playerRepository.findById(playerId);
+            if (playerOpt.isPresent()) {
+                Player player = playerOpt.get();
+                return player.getUserId();
+            } else {
+                log.warn("鏈壘鍒伴�夋墜璁板綍锛岄�夋墜ID: {}", playerId);
+                return null;
+            }
+        } catch (Exception e) {
+            log.error("鏌ヨ閫夋墜璁板綍鏃跺彂鐢熷紓甯革紝閫夋墜ID: {}", playerId, e);
+            return null;
+        }
+    }
+
+    /**
+     * 鏍规嵁鐢ㄦ埛ID鑾峰彇娑堟伅鍒楄〃锛屾寜鏃堕棿鍊掑簭
+     */
+    public List<Message> getMessagesByUserId(Long userId) {
+        log.info("Getting messages for user ID: {}", userId);
+        return messageRepository.findByUserIdOrderByCreateTimeDesc(userId);
+    }
+
+
+}
\ No newline at end of file
diff --git a/backend/src/main/java/com/rongyichuang/player/repository/ActivityPlayerRepository.java b/backend/src/main/java/com/rongyichuang/player/repository/ActivityPlayerRepository.java
index cd84782..7730408 100644
--- a/backend/src/main/java/com/rongyichuang/player/repository/ActivityPlayerRepository.java
+++ b/backend/src/main/java/com/rongyichuang/player/repository/ActivityPlayerRepository.java
@@ -51,9 +51,9 @@
     List<ActivityPlayer> findByState(Integer state);
 
     /**
-     * 鏌ユ壘娲诲姩鐨勫弬璧涢�夋墜鏁伴噺
+     * 鏍规嵁娲诲姩ID缁熻鍙傝禌閫夋墜鏁伴噺锛堝寘鎷湭瀹℃牳鍜屽鏍搁�氳繃鐨勶紝鎺掗櫎瀹℃牳椹冲洖鐨勶級
      */
-    @Query("SELECT COUNT(ap) FROM ActivityPlayer ap WHERE ap.activityId = :activityId AND ap.state = 1")
+    @Query("SELECT COUNT(ap) FROM ActivityPlayer ap WHERE ap.activityId = :activityId AND ap.state IN (0, 1)")
     Long countByActivityId(@Param("activityId") Long activityId);
 
     /**
@@ -100,6 +100,12 @@
     Long countByStageIdAndState(Long stageId, Integer state);
 
     /**
+     * 鏍规嵁娲诲姩ID鍜岀姸鎬佺粺璁″弬璧涢�夋墜鏁伴噺
+     */
+    @Query("SELECT COUNT(ap) FROM ActivityPlayer ap WHERE ap.activityId = :activityId AND ap.state = :state")
+    Long countByActivityIdAndState(@Param("activityId") Long activityId, @Param("state") Integer state);
+
+    /**
      * 鏍规嵁闃舵ID鍜岀姸鎬佹煡鎵惧弬璧涢�夋墜锛堝寘鍚�夋墜淇℃伅锛�
      */
     @Query("SELECT ap FROM ActivityPlayer ap " +
diff --git a/backend/src/main/java/com/rongyichuang/player/service/ActivityPlayerService.java b/backend/src/main/java/com/rongyichuang/player/service/ActivityPlayerService.java
index 9c2a940..6cb95a5 100644
--- a/backend/src/main/java/com/rongyichuang/player/service/ActivityPlayerService.java
+++ b/backend/src/main/java/com/rongyichuang/player/service/ActivityPlayerService.java
@@ -18,6 +18,7 @@
 import com.rongyichuang.user.service.UserService;
 import com.rongyichuang.media.service.MediaV2Service;
 import com.rongyichuang.media.dto.MediaSaveInput;
+import com.rongyichuang.message.service.MessageService;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
@@ -57,6 +58,9 @@
 
     @Autowired
     private MediaV2Service mediaV2Service;
+
+    @Autowired
+    private MessageService messageService;
 
 
 
@@ -362,6 +366,13 @@
             activityPlayer.setFeedback(feedback);
             activityPlayerRepository.save(activityPlayer);
 
+            // 鍒涘缓瀹℃牳閫氳繃娑堟伅
+            messageService.createApprovalMessage(
+                activityPlayerId, 
+                activityPlayer.getPlayerId(), 
+                activityPlayer.getProjectName()
+            );
+
             log.info("瀹℃牳閫氳繃鎴愬姛锛宎ctivityPlayerId: {}", activityPlayerId);
             return true;
         } catch (Exception e) {
@@ -385,6 +396,13 @@
             activityPlayer.setFeedback(feedback);
             activityPlayerRepository.save(activityPlayer);
 
+            // 鍒涘缓瀹℃牳椹冲洖娑堟伅
+            messageService.createRejectionMessage(
+                activityPlayerId, 
+                activityPlayer.getPlayerId(), 
+                activityPlayer.getProjectName()
+            );
+
             log.info("瀹℃牳椹冲洖鎴愬姛锛宎ctivityPlayerId: {}", activityPlayerId);
             return true;
         } catch (Exception e) {
diff --git a/backend/src/main/java/com/rongyichuang/player/service/PlayerApplicationService.java b/backend/src/main/java/com/rongyichuang/player/service/PlayerApplicationService.java
index f78ffc1..397796e 100644
--- a/backend/src/main/java/com/rongyichuang/player/service/PlayerApplicationService.java
+++ b/backend/src/main/java/com/rongyichuang/player/service/PlayerApplicationService.java
@@ -16,14 +16,15 @@
 
     /**
      * 鏌ヨ娲诲姩鎶ュ悕淇℃伅
+     * 褰撲紶鍏ctivityId鏃讹紝鏌ヨ璇ユ瘮璧涗笅绗竴涓樁娈碉紙sort_order=1锛夌殑鎶ュ悕椤圭洰
      */
     @SuppressWarnings("unchecked")
     public List<ActivityPlayerApplicationResponse> listApplications(String name, Long activityId, Integer state, Integer page, Integer size) {
         String baseSql =
-            "SELECT ap.id, p.name AS player_name, a.name AS activity_name, ap.project_name AS project_name, p.phone AS phone, ap.create_time AS apply_time, ap.state AS state " +
+            "SELECT ap.id, p.name AS player_name, stage.name AS activity_name, ap.project_name AS project_name, p.phone AS phone, ap.create_time AS apply_time, ap.state AS state " +
             "FROM t_activity_player ap " +
             "JOIN t_player p ON p.id = ap.player_id " +
-            "JOIN t_activity a ON a.id = ap.activity_id ";
+            "JOIN t_activity stage ON stage.id = ap.stage_id ";
         
         StringBuilder whereClause = new StringBuilder();
         boolean hasCondition = false;
@@ -37,7 +38,8 @@
             if (hasCondition) {
                 whereClause.append(" AND ");
             }
-            whereClause.append("ap.stage_id = :activityId");
+            // 鏌ヨ鎸囧畾涓绘瘮璧涚殑绗竴闃舵鎶ュ悕椤圭洰锛歛ctivity_id=涓绘瘮璧汭D, stage_id=绗竴闃舵ID
+            whereClause.append("ap.activity_id = :activityId AND stage.pid = :activityId AND stage.sort_order = 1");
             hasCondition = true;
         }
         
diff --git a/backend/src/main/java/com/rongyichuang/player/service/PlayerService.java b/backend/src/main/java/com/rongyichuang/player/service/PlayerService.java
new file mode 100644
index 0000000..5095f0e
--- /dev/null
+++ b/backend/src/main/java/com/rongyichuang/player/service/PlayerService.java
@@ -0,0 +1,41 @@
+package com.rongyichuang.player.service;
+
+import com.rongyichuang.player.entity.Player;
+import com.rongyichuang.player.repository.PlayerRepository;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.Optional;
+
+/**
+ * 瀛﹀憳鏈嶅姟绫�
+ */
+@Service
+public class PlayerService {
+
+    @Autowired
+    private PlayerRepository playerRepository;
+
+    /**
+     * 鏍规嵁鐢ㄦ埛ID鑾峰彇瀛﹀憳淇℃伅
+     */
+    public Player findByUserId(Long userId) {
+        Optional<Player> player = playerRepository.findByUserId(userId);
+        return player.orElse(null);
+    }
+
+    /**
+     * 鏍规嵁ID鑾峰彇瀛﹀憳淇℃伅
+     */
+    public Player findById(Long id) {
+        Optional<Player> player = playerRepository.findById(id);
+        return player.orElse(null);
+    }
+
+    /**
+     * 淇濆瓨瀛﹀憳淇℃伅
+     */
+    public Player save(Player player) {
+        return playerRepository.save(player);
+    }
+}
\ No newline at end of file
diff --git a/backend/src/main/java/com/rongyichuang/player/service/PromotionService.java b/backend/src/main/java/com/rongyichuang/player/service/PromotionService.java
index f34c9ac..9ab63c2 100644
--- a/backend/src/main/java/com/rongyichuang/player/service/PromotionService.java
+++ b/backend/src/main/java/com/rongyichuang/player/service/PromotionService.java
@@ -6,6 +6,7 @@
 import com.rongyichuang.activity.repository.ActivityPlayerRatingRepository;
 import com.rongyichuang.common.entity.Media;
 import com.rongyichuang.common.repository.MediaRepository;
+import com.rongyichuang.message.service.MessageService;
 import com.rongyichuang.player.dto.*;
 import com.rongyichuang.player.entity.ActivityPlayer;
 import com.rongyichuang.player.repository.ActivityPlayerRepository;
@@ -37,6 +38,9 @@
     
     @Autowired
     private MediaRepository mediaRepository;
+    
+    @Autowired
+    private MessageService messageService;
     
     /**
      * 鑾峰彇姣旇禌鏅嬬骇鍒楄〃
@@ -276,6 +280,13 @@
                     // 澶嶅埗濯掍綋鏂囦欢
                     copyMediaFiles(participant.getId(), savedParticipant.getId());
                     
+                    // 鍒涘缓鏅嬬骇娑堟伅
+                    messageService.createPromotionMessage(
+                        savedParticipant.getId(), 
+                        savedParticipant.getPlayerId(), 
+                        savedParticipant.getProjectName()
+                    );
+                    
                     promotedCount++;
                 }
             }
diff --git a/backend/src/main/java/com/rongyichuang/user/dto/response/UserProfile.java b/backend/src/main/java/com/rongyichuang/user/dto/response/UserProfile.java
new file mode 100644
index 0000000..52e0e00
--- /dev/null
+++ b/backend/src/main/java/com/rongyichuang/user/dto/response/UserProfile.java
@@ -0,0 +1,131 @@
+package com.rongyichuang.user.dto.response;
+
+import com.rongyichuang.auth.dto.LoginResponse.EmployeeInfo;
+import com.rongyichuang.auth.dto.LoginResponse.JudgeInfo;
+import com.rongyichuang.auth.dto.LoginResponse.PlayerInfo;
+
+import java.util.List;
+
+/**
+ * 鐢ㄦ埛妗f鍝嶅簲DTO
+ */
+public class UserProfile {
+    private String id;
+    private String name;
+    private String avatar;
+    private String phone;
+    private String email;
+    private String school;
+    private String major;
+    private String grade;
+    private List<String> roles;
+    private String createdAt;
+    private EmployeeInfo employee;
+    private JudgeInfo judge;
+    private PlayerInfo player;
+
+    // Getters and Setters
+    public String getId() {
+        return id;
+    }
+
+    public void setId(String id) {
+        this.id = id;
+    }
+
+    public String getName() {
+        return name;
+    }
+
+    public void setName(String name) {
+        this.name = name;
+    }
+
+    public String getAvatar() {
+        return avatar;
+    }
+
+    public void setAvatar(String avatar) {
+        this.avatar = avatar;
+    }
+
+    public String getPhone() {
+        return phone;
+    }
+
+    public void setPhone(String phone) {
+        this.phone = phone;
+    }
+
+    public String getEmail() {
+        return email;
+    }
+
+    public void setEmail(String email) {
+        this.email = email;
+    }
+
+    public String getSchool() {
+        return school;
+    }
+
+    public void setSchool(String school) {
+        this.school = school;
+    }
+
+    public String getMajor() {
+        return major;
+    }
+
+    public void setMajor(String major) {
+        this.major = major;
+    }
+
+    public String getGrade() {
+        return grade;
+    }
+
+    public void setGrade(String grade) {
+        this.grade = grade;
+    }
+
+    public List<String> getRoles() {
+        return roles;
+    }
+
+    public void setRoles(List<String> roles) {
+        this.roles = roles;
+    }
+
+    public String getCreatedAt() {
+        return createdAt;
+    }
+
+    public void setCreatedAt(String createdAt) {
+        this.createdAt = createdAt;
+    }
+
+    public EmployeeInfo getEmployee() {
+        return employee;
+    }
+
+    public void setEmployee(EmployeeInfo employee) {
+        this.employee = employee;
+    }
+
+    public JudgeInfo getJudge() {
+        return judge;
+    }
+
+    public void setJudge(JudgeInfo judge) {
+        this.judge = judge;
+    }
+
+    public PlayerInfo getPlayer() {
+        return player;
+    }
+
+    public void setPlayer(PlayerInfo player) {
+        this.player = player;
+    }
+}
\ No newline at end of file
diff --git a/backend/src/main/java/com/rongyichuang/user/dto/response/UserRegistration.java b/backend/src/main/java/com/rongyichuang/user/dto/response/UserRegistration.java
new file mode 100644
index 0000000..787ec8f
--- /dev/null
+++ b/backend/src/main/java/com/rongyichuang/user/dto/response/UserRegistration.java
@@ -0,0 +1,157 @@
+package com.rongyichuang.user.dto.response;
+
+/**
+ * 鐢ㄦ埛鎶ュ悕璁板綍鍝嶅簲DTO
+ */
+public class UserRegistration {
+    private String id;
+    private ActivityInfo activity;
+    private String status;
+    private String registrationTime;
+
+    // Getters and Setters
+    public String getId() {
+        return id;
+    }
+
+    public void setId(String id) {
+        this.id = id;
+    }
+
+    public ActivityInfo getActivity() {
+        return activity;
+    }
+
+    public void setActivity(ActivityInfo activity) {
+        this.activity = activity;
+    }
+
+    public String getStatus() {
+        return status;
+    }
+
+    public void setStatus(String status) {
+        this.status = status;
+    }
+
+    public String getRegistrationTime() {
+        return registrationTime;
+    }
+
+    public void setRegistrationTime(String registrationTime) {
+        this.registrationTime = registrationTime;
+    }
+
+    /**
+     * 娲诲姩淇℃伅鍐呴儴绫�
+     */
+    public static class ActivityInfo {
+        private String id;
+        private String title;
+        private MediaInfo coverImage;
+        private String startTime;
+        private String status;
+
+        // Getters and Setters
+        public String getId() {
+            return id;
+        }
+
+        public void setId(String id) {
+            this.id = id;
+        }
+
+        public String getTitle() {
+            return title;
+        }
+
+        public void setTitle(String title) {
+            this.title = title;
+        }
+
+        public MediaInfo getCoverImage() {
+            return coverImage;
+        }
+
+        public void setCoverImage(MediaInfo coverImage) {
+            this.coverImage = coverImage;
+        }
+
+        public String getStartTime() {
+            return startTime;
+        }
+
+        public void setStartTime(String startTime) {
+            this.startTime = startTime;
+        }
+
+        public String getStatus() {
+            return status;
+        }
+
+        public void setStatus(String status) {
+            this.status = status;
+        }
+    }
+
+    /**
+     * 濯掍綋淇℃伅鍐呴儴绫�
+     */
+    public static class MediaInfo {
+        private String id;
+        private String name;
+        private String path;
+        private String fullUrl;
+        private String fullThumbUrl;
+        private String mediaType;
+
+        // Getters and Setters
+        public String getId() {
+            return id;
+        }
+
+        public void setId(String id) {
+            this.id = id;
+        }
+
+        public String getName() {
+            return name;
+        }
+
+        public void setName(String name) {
+            this.name = name;
+        }
+
+        public String getPath() {
+            return path;
+        }
+
+        public void setPath(String path) {
+            this.path = path;
+        }
+
+        public String getFullUrl() {
+            return fullUrl;
+        }
+
+        public void setFullUrl(String fullUrl) {
+            this.fullUrl = fullUrl;
+        }
+
+        public String getFullThumbUrl() {
+            return fullThumbUrl;
+        }
+
+        public void setFullThumbUrl(String fullThumbUrl) {
+            this.fullThumbUrl = fullThumbUrl;
+        }
+
+        public String getMediaType() {
+            return mediaType;
+        }
+
+        public void setMediaType(String mediaType) {
+            this.mediaType = mediaType;
+        }
+    }
+}
\ No newline at end of file
diff --git a/backend/src/main/java/com/rongyichuang/user/dto/response/UserStats.java b/backend/src/main/java/com/rongyichuang/user/dto/response/UserStats.java
new file mode 100644
index 0000000..382fc67
--- /dev/null
+++ b/backend/src/main/java/com/rongyichuang/user/dto/response/UserStats.java
@@ -0,0 +1,44 @@
+package com.rongyichuang.user.dto.response;
+
+/**
+ * 鐢ㄦ埛缁熻鏁版嵁鍝嶅簲DTO
+ */
+public class UserStats {
+    private Integer totalRegistrations;
+    private Integer ongoingActivities;
+    private Integer completedActivities;
+    private Integer awards;
+
+    // Getters and Setters
+    public Integer getTotalRegistrations() {
+        return totalRegistrations;
+    }
+
+    public void setTotalRegistrations(Integer totalRegistrations) {
+        this.totalRegistrations = totalRegistrations;
+    }
+
+    public Integer getOngoingActivities() {
+        return ongoingActivities;
+    }
+
+    public void setOngoingActivities(Integer ongoingActivities) {
+        this.ongoingActivities = ongoingActivities;
+    }
+
+    public Integer getCompletedActivities() {
+        return completedActivities;
+    }
+
+    public void setCompletedActivities(Integer completedActivities) {
+        this.completedActivities = completedActivities;
+    }
+
+    public Integer getAwards() {
+        return awards;
+    }
+
+    public void setAwards(Integer awards) {
+        this.awards = awards;
+    }
+}
\ No newline at end of file
diff --git a/backend/src/main/java/com/rongyichuang/user/resolver/UserResolver.java b/backend/src/main/java/com/rongyichuang/user/resolver/UserResolver.java
new file mode 100644
index 0000000..dec68fa
--- /dev/null
+++ b/backend/src/main/java/com/rongyichuang/user/resolver/UserResolver.java
@@ -0,0 +1,173 @@
+package com.rongyichuang.user.resolver;
+
+import com.rongyichuang.auth.dto.LoginResponse.EmployeeInfo;
+import com.rongyichuang.auth.dto.LoginResponse.JudgeInfo;
+import com.rongyichuang.auth.dto.LoginResponse.PlayerInfo;
+import com.rongyichuang.common.util.UserContextUtil;
+import com.rongyichuang.employee.entity.Employee;
+import com.rongyichuang.employee.service.EmployeeService;
+import com.rongyichuang.judge.entity.Judge;
+import com.rongyichuang.judge.service.JudgeService;
+import com.rongyichuang.player.entity.Player;
+import com.rongyichuang.player.service.PlayerService;
+import com.rongyichuang.user.dto.response.UserProfile;
+import com.rongyichuang.user.dto.response.UserStats;
+import com.rongyichuang.user.dto.response.UserRegistration;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.graphql.data.method.annotation.Argument;
+import org.springframework.graphql.data.method.annotation.QueryMapping;
+import org.springframework.stereotype.Controller;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * 鐢ㄦ埛GraphQL瑙f瀽鍣�
+ */
+@Controller
+public class UserResolver {
+    private static final org.slf4j.Logger logger = org.slf4j.LoggerFactory.getLogger(UserResolver.class);
+
+    @Autowired
+    private EmployeeService employeeService;
+    
+    @Autowired
+    private JudgeService judgeService;
+    
+    @Autowired
+    private PlayerService playerService;
+
+    @Autowired
+    private UserContextUtil userContextUtil;
+
+    /**
+     * 鑾峰彇褰撳墠鐢ㄦ埛妗f
+     */
+    @QueryMapping
+    public UserProfile userProfile() {
+        try {
+            Long userId = userContextUtil.getCurrentUserId();
+            logger.debug("杩涘叆userProfile锛岃В鏋愬埌鐢ㄦ埛ID: {}", userId);
+            if (userId == null) {
+                throw new RuntimeException("鐢ㄦ埛鏈櫥褰�");
+            }
+
+            UserProfile profile = new UserProfile();
+            profile.setId(userId.toString());
+            
+            List<String> roles = new ArrayList<>();
+            
+            // 妫�鏌ユ槸鍚︽槸鍛樺伐
+            logger.debug("寮�濮嬫煡璇㈠憳宸ヤ俊鎭紝userId={}", userId);
+            Employee employee = employeeService.findByUserId(userId);
+            logger.debug("鍛樺伐鏌ヨ缁撴灉: {}", employee != null ? ("id=" + employee.getId() + ", name=" + employee.getName()) : "鏃�");
+            if (employee != null) {
+                profile.setName(employee.getName());
+                profile.setPhone(employee.getPhone());
+                roles.add("EMPLOYEE");
+                
+                EmployeeInfo employeeInfo = new EmployeeInfo(
+                    employee.getId(),
+                    employee.getName(),
+                    employee.getRoleId(),
+                    employee.getDescription()
+                );
+                profile.setEmployee(employeeInfo);
+            }
+            
+            // 妫�鏌ユ槸鍚︽槸璇勫
+            logger.debug("寮�濮嬫煡璇㈣瘎濮斾俊鎭紝userId={}", userId);
+            Judge judge = judgeService.findByUserId(userId);
+            logger.debug("璇勫鏌ヨ缁撴灉: {}", judge != null ? ("id=" + judge.getId() + ", name=" + judge.getName()) : "鏃�");
+            if (judge != null) {
+                if (profile.getName() == null) {
+                    profile.setName(judge.getName());
+                    profile.setPhone(judge.getPhone());
+                }
+                roles.add("JUDGE");
+                
+                JudgeInfo judgeInfo = new JudgeInfo(
+                    judge.getId(),
+                    judge.getName(),
+                    judge.getTitle(),
+                    judge.getCompany(),
+                    judge.getDescription()
+                );
+                profile.setJudge(judgeInfo);
+            }
+            
+            // 妫�鏌ユ槸鍚︽槸瀛﹀憳
+            logger.debug("寮�濮嬫煡璇㈠鍛樹俊鎭紝userId={}", userId);
+            Player player = playerService.findByUserId(userId);
+            logger.debug("瀛﹀憳鏌ヨ缁撴灉: {}", player != null ? ("id=" + player.getId() + ", name=" + player.getName()) : "鏃�");
+            if (player != null) {
+                if (profile.getName() == null) {
+                    profile.setName(player.getName());
+                    profile.setPhone(player.getPhone());
+                }
+                roles.add("PLAYER");
+                
+                PlayerInfo playerInfo = new PlayerInfo(
+                    player.getId(),
+                    player.getName(),
+                    player.getPhone(),
+                    player.getDescription()
+                );
+                profile.setPlayer(playerInfo);
+            }
+            
+            profile.setRoles(roles);
+            logger.debug("userProfile鏋勫缓瀹屾垚锛宺oles={}, name={}, phone={}", roles, profile.getName(), profile.getPhone());
+            profile.setCreatedAt(java.time.LocalDateTime.now().toString());
+            
+            return profile;
+        } catch (Exception e) {
+            logger.error("鑾峰彇鐢ㄦ埛妗f澶辫触", e);
+            throw new RuntimeException("鑾峰彇鐢ㄦ埛妗f澶辫触: " + e.getMessage(), e);
+        }
+    }
+
+    /**
+     * 鑾峰彇鐢ㄦ埛缁熻鏁版嵁
+     */
+    @QueryMapping
+    public UserStats userStats() {
+        try {
+            Long userId = UserContextUtil.getCurrentUserId();
+            if (userId == null) {
+                return null;
+            }
+
+            UserStats stats = new UserStats();
+            stats.setTotalRegistrations(0);
+            stats.setOngoingActivities(0);
+            stats.setCompletedActivities(0);
+            stats.setAwards(0);
+            
+            return stats;
+        } catch (Exception e) {
+            e.printStackTrace();
+            return null;
+        }
+    }
+
+    /**
+     * 鑾峰彇鎴戠殑鎶ュ悕璁板綍
+     */
+    @QueryMapping
+    public List<UserRegistration> myRegistrations(@Argument Integer limit) {
+        try {
+            Long userId = UserContextUtil.getCurrentUserId();
+            if (userId == null) {
+                return new ArrayList<>();
+            }
+
+            // 杩欓噷搴旇瀹炵幇鐪熸鐨勬姤鍚嶈褰曟煡璇㈤�昏緫
+            // 鏆傛椂杩斿洖绌哄垪琛�
+            return new ArrayList<>();
+        } catch (Exception e) {
+            e.printStackTrace();
+            return new ArrayList<>();
+        }
+    }
+}
\ No newline at end of file
diff --git a/backend/src/main/resources/graphql/activity.graphqls b/backend/src/main/resources/graphql/activity.graphqls
index d6eeb5b..4dcf32e 100644
--- a/backend/src/main/resources/graphql/activity.graphqls
+++ b/backend/src/main/resources/graphql/activity.graphqls
@@ -97,6 +97,9 @@
     # 鑾峰彇鎵�鏈夋瘮璧涳紙鐢ㄤ簬涓嬫媺閫夋嫨锛�
     allActivities: [Activity!]!
     
+    # 鑾峰彇鎵�鏈夋瘮璧涢樁娈碉紙鐢ㄤ簬璇勫椤甸潰涓嬫媺閫夋嫨锛�
+    allActivityStages: [Activity!]!
+    
     # 鑾峰彇姣旇禌鐨勬墍鏈夐樁娈�
     activityStages(activityId: ID!): [Activity!]!
     
diff --git a/backend/src/main/resources/graphql/message.graphqls b/backend/src/main/resources/graphql/message.graphqls
new file mode 100644
index 0000000..a788aee
--- /dev/null
+++ b/backend/src/main/resources/graphql/message.graphqls
@@ -0,0 +1,21 @@
+# 娑堟伅鐩稿叧鐨凣raphQL Schema
+
+# 娑堟伅绫诲瀷
+type Message {
+    id: Long!
+    userId: Long!
+    content: String!
+    templateContent: String
+    wxMsgSuccess: Boolean!
+    wxMsgErrCount: Int!
+    wxMsgLastErr: String
+    state: String!
+    createTime: String!
+    updateTime: String!
+}
+
+# 鎵╁睍鏌ヨ绫诲瀷
+extend type Query {
+    # 鏍规嵁鐢ㄦ埛ID鑾峰彇娑堟伅鍒楄〃锛屾寜鏃堕棿鍊掑簭
+    getMessagesByUserId(userId: Long!): [Message!]!
+}
\ No newline at end of file
diff --git a/backend/src/main/resources/graphql/user.graphqls b/backend/src/main/resources/graphql/user.graphqls
new file mode 100644
index 0000000..efd3849
--- /dev/null
+++ b/backend/src/main/resources/graphql/user.graphqls
@@ -0,0 +1,66 @@
+# 鐢ㄦ埛鐩稿叧鐨凣raphQL Schema瀹氫箟
+
+# 鐢ㄦ埛妗f鍝嶅簲绫诲瀷
+type UserProfile {
+    id: ID!
+    name: String!
+    avatar: String
+    phone: String
+    email: String
+    school: String
+    major: String
+    grade: String
+    roles: [String!]!
+    createdAt: String
+    # 瑙掕壊鐩稿叧淇℃伅
+    employee: EmployeeInfo
+    judge: JudgeInfo
+    player: PlayerInfo
+}
+
+# 鐢ㄦ埛缁熻鏁版嵁绫诲瀷
+type UserStats {
+    totalRegistrations: Int!
+    ongoingActivities: Int!
+    completedActivities: Int!
+    awards: Int!
+}
+
+# 鐢ㄦ埛鎶ュ悕璁板綍绫诲瀷
+type UserRegistration {
+    id: ID!
+    activity: ActivityInfo!
+    status: String!
+    registrationTime: String!
+}
+
+# 娲诲姩淇℃伅绫诲瀷
+type ActivityInfo {
+    id: ID!
+    title: String!
+    coverImage: MediaInfo
+    startTime: String!
+    status: String!
+}
+
+# 濯掍綋淇℃伅绫诲瀷
+type MediaInfo {
+    id: ID!
+    name: String!
+    path: String!
+    fullUrl: String!
+    fullThumbUrl: String!
+    mediaType: String!
+}
+
+# 鎵╁睍鏌ヨ绫诲瀷
+extend type Query {
+    # 鑾峰彇褰撳墠鐢ㄦ埛妗f
+    userProfile: UserProfile
+    
+    # 鑾峰彇鐢ㄦ埛缁熻鏁版嵁
+    userStats: UserStats
+    
+    # 鑾峰彇鎴戠殑鎶ュ悕璁板綍
+    myRegistrations(limit: Int): [UserRegistration!]!
+}
\ No newline at end of file
diff --git a/backend/src/test/java/CheckRatingItemTableStructureTest2.java b/backend/src/test/java/CheckRatingItemTableStructureTest2.java
deleted file mode 100644
index 6955178..0000000
--- a/backend/src/test/java/CheckRatingItemTableStructureTest2.java
+++ /dev/null
@@ -1,37 +0,0 @@
-import org.junit.jupiter.api.Test;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.boot.test.context.SpringBootTest;
-import org.springframework.jdbc.core.JdbcTemplate;
-import com.rongyichuang.RycBackendApplication;
-
-import java.util.List;
-import java.util.Map;
-
-@SpringBootTest(classes = RycBackendApplication.class)
-public class CheckRatingItemTableStructureTest2 {
-
-    @Autowired
-    private JdbcTemplate jdbcTemplate;
-
-    @Test
-    public void checkTableStructure() {
-        try {
-            // 鏌ヨ琛ㄧ粨鏋�
-            String sql = "DESCRIBE t_activity_player_rating_item";
-            List<Map<String, Object>> columns = jdbcTemplate.queryForList(sql);
-            
-            System.out.println("=== t_activity_player_rating_item 琛ㄧ粨鏋� ===");
-            for (Map<String, Object> column : columns) {
-                System.out.println("瀛楁鍚�: " + column.get("Field") + 
-                                 ", 绫诲瀷: " + column.get("Type") + 
-                                 ", 鏄惁涓虹┖: " + column.get("Null") + 
-                                 ", 閿�: " + column.get("Key") + 
-                                 ", 榛樿鍊�: " + column.get("Default"));
-            }
-            
-        } catch (Exception e) {
-            System.err.println("鏌ヨ琛ㄧ粨鏋勫け璐�: " + e.getMessage());
-            e.printStackTrace();
-        }
-    }
-}
\ No newline at end of file
diff --git a/db.sql b/db.sql
index 7b2b5b0..a2622c1 100644
--- a/db.sql
+++ b/db.sql
@@ -1,11 +1,8 @@
 -- 鏁版嵁搴撶粨鏋勫鍑�
--- 鏁版嵁搴�: ryc
--- 瀵煎嚭鏃堕棿: 2025/9/30 08:39:43
--- 
--- 娉ㄦ剰锛氭鏂囦欢浠呭寘鍚〃缁撴瀯锛屼笉鍖呭惈鏁版嵁
+-- 鐢熸垚鏃堕棿: 2025-09-30T09:56:33.481Z
 
-SET NAMES utf8mb4;
-SET FOREIGN_KEY_CHECKS = 0;
+CREATE DATABASE IF NOT EXISTS `ryc` DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
+USE `ryc`;
 
 -- ----------------------------
 -- Table structure for t_activity
@@ -15,6 +12,7 @@
   `id` bigint NOT NULL AUTO_INCREMENT,
   `pid` bigint NOT NULL DEFAULT '0',
   `path` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
+  `sort_order` int DEFAULT NULL COMMENT '闃舵鐨勯『搴�',
   `name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL,
   `description` text CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci,
   `signup_deadline` datetime NOT NULL,
@@ -32,7 +30,19 @@
   KEY `fk_t_activity_rating_scheme` (`rating_scheme_id`) USING BTREE,
   KEY `idx_t_activity_deadline` (`signup_deadline`) USING BTREE,
   CONSTRAINT `fk_t_activity_rating_scheme` FOREIGN KEY (`rating_scheme_id`) REFERENCES `t_rating_scheme` (`id`) ON DELETE RESTRICT ON UPDATE RESTRICT
-) ENGINE=InnoDB AUTO_INCREMENT=76 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
+) ENGINE=InnoDB AUTO_INCREMENT=9 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
+
+-- ----------------------------
+-- Records of t_activity
+-- ----------------------------
+INSERT INTO `t_activity` (`id`, `pid`, `path`, `sort_order`, `name`, `description`, `signup_deadline`, `match_time`, `address`, `rating_scheme_id`, `player_max`, `state`, `create_time`, `create_user_id`, `update_time`, `update_user_id`, `version`) VALUES (1, 0, '/', NULL, '2025', '13璁╀汉', 'Fri Oct 03 2025 00:00:00 GMT+0800 (GMT+08:00)', 'Sat Oct 04 2025 00:00:00 GMT+0800 (GMT+08:00)', '13243', 8, NULL, 1, 'Tue Sep 30 2025 12:22:09 GMT+0800 (GMT+08:00)', NULL, 'Tue Sep 30 2025 12:22:09 GMT+0800 (GMT+08:00)', NULL, 0);
+INSERT INTO `t_activity` (`id`, `pid`, `path`, `sort_order`, `name`, `description`, `signup_deadline`, `match_time`, `address`, `rating_scheme_id`, `player_max`, `state`, `create_time`, `create_user_id`, `update_time`, `update_user_id`, `version`) VALUES (2, 1, '/1/', 1, '娴烽��', '', 'Fri Oct 03 2025 00:00:00 GMT+0800 (GMT+08:00)', 'Sat Oct 04 2025 00:00:00 GMT+0800 (GMT+08:00)', '', 8, NULL, 1, 'Tue Sep 30 2025 12:22:09 GMT+0800 (GMT+08:00)', NULL, 'Tue Sep 30 2025 12:22:09 GMT+0800 (GMT+08:00)', NULL, 0);
+INSERT INTO `t_activity` (`id`, `pid`, `path`, `sort_order`, `name`, `description`, `signup_deadline`, `match_time`, `address`, `rating_scheme_id`, `player_max`, `state`, `create_time`, `create_user_id`, `update_time`, `update_user_id`, `version`) VALUES (3, 1, '/1/', 2, '澶嶈禌', '44444', 'Fri Oct 03 2025 00:00:00 GMT+0800 (GMT+08:00)', 'Tue Oct 07 2025 00:00:00 GMT+0800 (GMT+08:00)', '4444', 8, NULL, 1, 'Tue Sep 30 2025 12:22:09 GMT+0800 (GMT+08:00)', NULL, 'Tue Sep 30 2025 12:22:09 GMT+0800 (GMT+08:00)', NULL, 0);
+INSERT INTO `t_activity` (`id`, `pid`, `path`, `sort_order`, `name`, `description`, `signup_deadline`, `match_time`, `address`, `rating_scheme_id`, `player_max`, `state`, `create_time`, `create_user_id`, `update_time`, `update_user_id`, `version`) VALUES (4, 0, '/', NULL, '2026', '1111', 'Thu Oct 02 2025 00:00:00 GMT+0800 (GMT+08:00)', 'Sun Oct 05 2025 00:00:00 GMT+0800 (GMT+08:00)', '111', 8, NULL, 1, 'Tue Sep 30 2025 12:27:31 GMT+0800 (GMT+08:00)', NULL, 'Tue Sep 30 2025 12:27:31 GMT+0800 (GMT+08:00)', NULL, 0);
+INSERT INTO `t_activity` (`id`, `pid`, `path`, `sort_order`, `name`, `description`, `signup_deadline`, `match_time`, `address`, `rating_scheme_id`, `player_max`, `state`, `create_time`, `create_user_id`, `update_time`, `update_user_id`, `version`) VALUES (5, 4, '/4/', 1, '娴烽��', '', 'Thu Oct 02 2025 00:00:00 GMT+0800 (GMT+08:00)', NULL, '', 8, NULL, 1, 'Tue Sep 30 2025 12:27:31 GMT+0800 (GMT+08:00)', NULL, 'Tue Sep 30 2025 12:27:31 GMT+0800 (GMT+08:00)', NULL, 0);
+INSERT INTO `t_activity` (`id`, `pid`, `path`, `sort_order`, `name`, `description`, `signup_deadline`, `match_time`, `address`, `rating_scheme_id`, `player_max`, `state`, `create_time`, `create_user_id`, `update_time`, `update_user_id`, `version`) VALUES (6, 0, '/', NULL, '2027', '333333', 'Fri Oct 03 2025 00:00:00 GMT+0800 (GMT+08:00)', 'Sat Oct 04 2025 00:00:00 GMT+0800 (GMT+08:00)', '123', 8, NULL, 1, 'Tue Sep 30 2025 12:32:22 GMT+0800 (GMT+08:00)', NULL, 'Tue Sep 30 2025 12:32:22 GMT+0800 (GMT+08:00)', NULL, 0);
+INSERT INTO `t_activity` (`id`, `pid`, `path`, `sort_order`, `name`, `description`, `signup_deadline`, `match_time`, `address`, `rating_scheme_id`, `player_max`, `state`, `create_time`, `create_user_id`, `update_time`, `update_user_id`, `version`) VALUES (7, 6, '/6/', 1, '娴烽��', '4444', 'Fri Oct 03 2025 00:00:00 GMT+0800 (GMT+08:00)', 'Fri Oct 03 2025 00:00:00 GMT+0800 (GMT+08:00)', '4444', 8, 1000, 1, 'Tue Sep 30 2025 12:32:22 GMT+0800 (GMT+08:00)', NULL, 'Tue Sep 30 2025 13:57:13 GMT+0800 (GMT+08:00)', NULL, 1);
+INSERT INTO `t_activity` (`id`, `pid`, `path`, `sort_order`, `name`, `description`, `signup_deadline`, `match_time`, `address`, `rating_scheme_id`, `player_max`, `state`, `create_time`, `create_user_id`, `update_time`, `update_user_id`, `version`) VALUES (8, 6, '/6/', 2, '澶嶈禌', '333333', 'Fri Oct 03 2025 00:00:00 GMT+0800 (GMT+08:00)', 'Sat Oct 04 2025 00:00:00 GMT+0800 (GMT+08:00)', '3333', 8, 100, 1, 'Tue Sep 30 2025 14:04:22 GMT+0800 (GMT+08:00)', NULL, 'Tue Sep 30 2025 14:04:22 GMT+0800 (GMT+08:00)', NULL, 0);
 
 -- ----------------------------
 -- Table structure for t_activity_judge
@@ -52,7 +62,12 @@
   `version` bigint NOT NULL DEFAULT '0',
   PRIMARY KEY (`id`) USING BTREE,
   UNIQUE KEY `uq_stage_judge` (`stage_id`,`judge_id`) USING BTREE
-) ENGINE=InnoDB AUTO_INCREMENT=23 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
+) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
+
+-- ----------------------------
+-- Records of t_activity_judge
+-- ----------------------------
+INSERT INTO `t_activity_judge` (`id`, `activity_id`, `stage_id`, `judge_id`, `description`, `state`, `create_time`, `create_user_id`, `update_time`, `update_user_id`, `version`) VALUES (1, 6, 7, 68, NULL, NULL, 'Tue Sep 30 2025 14:04:38 GMT+0800 (GMT+08:00)', NULL, 'Tue Sep 30 2025 14:04:38 GMT+0800 (GMT+08:00)', NULL, 0);
 
 -- ----------------------------
 -- Table structure for t_activity_player
@@ -78,7 +93,13 @@
   `update_user_id` bigint DEFAULT NULL,
   `version` bigint NOT NULL DEFAULT '0',
   PRIMARY KEY (`id`) USING BTREE
-) ENGINE=InnoDB AUTO_INCREMENT=51 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
+) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
+
+-- ----------------------------
+-- Records of t_activity_player
+-- ----------------------------
+INSERT INTO `t_activity_player` (`id`, `activity_id`, `stage_id`, `player_id`, `region_id`, `project_name`, `description`, `reject_reason`, `judge_id`, `feedback`, `total_score`, `rank`, `state`, `create_time`, `create_user_id`, `update_time`, `update_user_id`, `version`) VALUES (1, 6, 7, 1, 6, 'AI', 'AI code', NULL, NULL, 'OK', NULL, NULL, 1, 'Tue Sep 30 2025 14:21:08 GMT+0800 (GMT+08:00)', NULL, 'Tue Sep 30 2025 14:26:18 GMT+0800 (GMT+08:00)', NULL, 1);
+INSERT INTO `t_activity_player` (`id`, `activity_id`, `stage_id`, `player_id`, `region_id`, `project_name`, `description`, `reject_reason`, `judge_id`, `feedback`, `total_score`, `rank`, `state`, `create_time`, `create_user_id`, `update_time`, `update_user_id`, `version`) VALUES (2, 6, 8, 1, 6, 'AI', 'AI code', NULL, NULL, NULL, NULL, NULL, 1, 'Tue Sep 30 2025 17:29:13 GMT+0800 (GMT+08:00)', NULL, 'Tue Sep 30 2025 17:29:13 GMT+0800 (GMT+08:00)', NULL, 0);
 
 -- ----------------------------
 -- Table structure for t_activity_player_rating
@@ -101,7 +122,12 @@
   `update_user_id` bigint DEFAULT NULL,
   `version` bigint NOT NULL DEFAULT '0',
   PRIMARY KEY (`id`)
-) ENGINE=InnoDB AUTO_INCREMENT=7 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
+) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
+
+-- ----------------------------
+-- Records of t_activity_player_rating
+-- ----------------------------
+INSERT INTO `t_activity_player_rating` (`id`, `activity_id`, `activity_player_id`, `rating_scheme_id`, `stage_id`, `player_id`, `judge_id`, `total_score`, `feedback`, `state`, `create_time`, `create_user_id`, `update_time`, `update_user_id`, `version`) VALUES (1, 6, 1, 8, 1, 1, 68, 27.00, '鍝﹀摝鍝�', 1, 'Tue Sep 30 2025 14:26:53 GMT+0800 (GMT+08:00)', NULL, 'Tue Sep 30 2025 14:26:54 GMT+0800 (GMT+08:00)', NULL, 1);
 
 -- ----------------------------
 -- Table structure for t_activity_player_rating_item
@@ -126,7 +152,15 @@
   `update_user_id` bigint DEFAULT NULL,
   `version` bigint NOT NULL DEFAULT '0',
   PRIMARY KEY (`id`) USING BTREE
-) ENGINE=InnoDB AUTO_INCREMENT=19 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
+) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
+
+-- ----------------------------
+-- Records of t_activity_player_rating_item
+-- ----------------------------
+INSERT INTO `t_activity_player_rating_item` (`id`, `activity_id`, `activity_player_id`, `activity_player_rating_id`, `stage_id`, `player_id`, `judge_id`, `rating_scheme_id`, `rating_item_id`, `score`, `feedback`, `state`, `create_time`, `create_user_id`, `update_time`, `update_user_id`, `version`) VALUES (1, 6, 1, 1, 1, 1, 68, 8, 10, 7.00, NULL, 1, 'Tue Sep 30 2025 14:26:53 GMT+0800 (GMT+08:00)', NULL, 'Tue Sep 30 2025 14:26:53 GMT+0800 (GMT+08:00)', NULL, 0);
+INSERT INTO `t_activity_player_rating_item` (`id`, `activity_id`, `activity_player_id`, `activity_player_rating_id`, `stage_id`, `player_id`, `judge_id`, `rating_scheme_id`, `rating_item_id`, `score`, `feedback`, `state`, `create_time`, `create_user_id`, `update_time`, `update_user_id`, `version`) VALUES (2, 6, 1, 1, 1, 1, 68, 8, 11, 12.00, NULL, 1, 'Tue Sep 30 2025 14:26:53 GMT+0800 (GMT+08:00)', NULL, 'Tue Sep 30 2025 14:26:53 GMT+0800 (GMT+08:00)', NULL, 0);
+INSERT INTO `t_activity_player_rating_item` (`id`, `activity_id`, `activity_player_id`, `activity_player_rating_id`, `stage_id`, `player_id`, `judge_id`, `rating_scheme_id`, `rating_item_id`, `score`, `feedback`, `state`, `create_time`, `create_user_id`, `update_time`, `update_user_id`, `version`) VALUES (3, 6, 1, 1, 1, 1, 68, 8, 12, 5.00, NULL, 1, 'Tue Sep 30 2025 14:26:53 GMT+0800 (GMT+08:00)', NULL, 'Tue Sep 30 2025 14:26:53 GMT+0800 (GMT+08:00)', NULL, 0);
+INSERT INTO `t_activity_player_rating_item` (`id`, `activity_id`, `activity_player_id`, `activity_player_rating_id`, `stage_id`, `player_id`, `judge_id`, `rating_scheme_id`, `rating_item_id`, `score`, `feedback`, `state`, `create_time`, `create_user_id`, `update_time`, `update_user_id`, `version`) VALUES (4, 6, 1, 1, 1, 1, 68, 8, 13, 3.00, NULL, 1, 'Tue Sep 30 2025 14:26:54 GMT+0800 (GMT+08:00)', NULL, 'Tue Sep 30 2025 14:26:54 GMT+0800 (GMT+08:00)', NULL, 0);
 
 -- ----------------------------
 -- Table structure for t_carousel
@@ -145,6 +179,13 @@
   `version` bigint NOT NULL DEFAULT '0',
   PRIMARY KEY (`id`) USING BTREE
 ) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='杞挱鍥�';
+
+-- ----------------------------
+-- Records of t_carousel
+-- ----------------------------
+INSERT INTO `t_carousel` (`id`, `title`, `description`, `sort_order`, `state`, `create_time`, `create_user_id`, `update_time`, `update_user_id`, `version`) VALUES (1, '111', '232322', 1, 1, 'Tue Sep 23 2025 11:06:43 GMT+0800 (GMT+08:00)', NULL, 'Tue Sep 23 2025 11:23:57 GMT+0800 (GMT+08:00)', NULL, 1);
+INSERT INTO `t_carousel` (`id`, `title`, `description`, `sort_order`, `state`, `create_time`, `create_user_id`, `update_time`, `update_user_id`, `version`) VALUES (2, '111123333', '44444', 2, 1, 'Tue Sep 23 2025 17:40:04 GMT+0800 (GMT+08:00)', NULL, 'Tue Sep 23 2025 22:20:55 GMT+0800 (GMT+08:00)', NULL, 1);
+INSERT INTO `t_carousel` (`id`, `title`, `description`, `sort_order`, `state`, `create_time`, `create_user_id`, `update_time`, `update_user_id`, `version`) VALUES (3, '2026', '1111', 999, 1, 'Fri Sep 26 2025 22:11:08 GMT+0800 (GMT+08:00)', NULL, 'Fri Sep 26 2025 22:11:08 GMT+0800 (GMT+08:00)', NULL, 0);
 
 -- ----------------------------
 -- Table structure for t_employee
@@ -166,6 +207,19 @@
   PRIMARY KEY (`id`) USING BTREE,
   UNIQUE KEY `phone` (`phone`) USING BTREE
 ) ENGINE=InnoDB AUTO_INCREMENT=21 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
+
+-- ----------------------------
+-- Records of t_employee
+-- ----------------------------
+INSERT INTO `t_employee` (`id`, `name`, `phone`, `role_id`, `user_id`, `state`, `create_time`, `create_user_id`, `update_time`, `update_user_id`, `version`, `description`) VALUES (1, 'Admin', '13981970816', 'JUDGE_MANAGER', 2, 1, 'Wed Sep 24 2025 15:22:21 GMT+0800 (GMT+08:00)', NULL, 'Wed Sep 24 2025 22:34:21 GMT+0800 (GMT+08:00)', NULL, 1, '111111000');
+INSERT INTO `t_employee` (`id`, `name`, `phone`, `role_id`, `user_id`, `state`, `create_time`, `create_user_id`, `update_time`, `update_user_id`, `version`, `description`) VALUES (2, '澶氳鑹叉祴璇曠敤鎴�', '13800000003', 'MANAGER', 29, 1, 'Wed Sep 24 2025 21:08:16 GMT+0800 (GMT+08:00)', NULL, 'Wed Sep 24 2025 21:08:16 GMT+0800 (GMT+08:00)', NULL, 0, '鏃㈡槸鍛樺伐鍙堟槸璇勫鐨勬祴璇曡处鍙�');
+INSERT INTO `t_employee` (`id`, `name`, `phone`, `role_id`, `user_id`, `state`, `create_time`, `create_user_id`, `update_time`, `update_user_id`, `version`, `description`) VALUES (4, '娴嬭瘯鍛樺伐Service', '13900000003', 'EMPLOYEE', 32, 1, 'Wed Sep 24 2025 22:26:40 GMT+0800 (GMT+08:00)', NULL, 'Wed Sep 24 2025 22:26:40 GMT+0800 (GMT+08:00)', NULL, 0, '鐩存帴娴嬭瘯EmployeeService');
+INSERT INTO `t_employee` (`id`, `name`, `phone`, `role_id`, `user_id`, `state`, `create_time`, `create_user_id`, `update_time`, `update_user_id`, `version`, `description`) VALUES (5, '?????GraphQL', '13900000004', 'EMPLOYEE', 33, 1, 'Wed Sep 24 2025 22:26:50 GMT+0800 (GMT+08:00)', NULL, 'Wed Sep 24 2025 22:26:50 GMT+0800 (GMT+08:00)', NULL, 0, '??GraphQL??????');
+INSERT INTO `t_employee` (`id`, `name`, `phone`, `role_id`, `user_id`, `state`, `create_time`, `create_user_id`, `update_time`, `update_user_id`, `version`, `description`) VALUES (6, '?????GraphQL2', '13900000005', 'EMPLOYEE', 34, 1, 'Wed Sep 24 2025 22:27:01 GMT+0800 (GMT+08:00)', NULL, 'Wed Sep 24 2025 22:27:01 GMT+0800 (GMT+08:00)', NULL, 0, '??GraphQL??????2');
+INSERT INTO `t_employee` (`id`, `name`, `phone`, `role_id`, `user_id`, `state`, `create_time`, `create_user_id`, `update_time`, `update_user_id`, `version`, `description`) VALUES (7, 'uK', '13412341222', 'SUPER_ADMIN', 35, 1, 'Wed Sep 24 2025 22:29:32 GMT+0800 (GMT+08:00)', NULL, 'Wed Sep 24 2025 22:29:32 GMT+0800 (GMT+08:00)', NULL, 0, '0000');
+INSERT INTO `t_employee` (`id`, `name`, `phone`, `role_id`, `user_id`, `state`, `create_time`, `create_user_id`, `update_time`, `update_user_id`, `version`, `description`) VALUES (8, 'Test Employee Edit - Modified', '13900000010', 'EMPLOYEE', 36, 1, 'Wed Sep 24 2025 22:31:42 GMT+0800 (GMT+08:00)', NULL, 'Wed Sep 24 2025 22:31:43 GMT+0800 (GMT+08:00)', NULL, 2, 'Modified password and description');
+INSERT INTO `t_employee` (`id`, `name`, `phone`, `role_id`, `user_id`, `state`, `create_time`, `create_user_id`, `update_time`, `update_user_id`, `version`, `description`) VALUES (9, 'Test', '13900000011', 'EMPLOYEE', 37, 1, 'Wed Sep 24 2025 22:33:36 GMT+0800 (GMT+08:00)', NULL, 'Wed Sep 24 2025 22:33:36 GMT+0800 (GMT+08:00)', NULL, 0, NULL);
+INSERT INTO `t_employee` (`id`, `name`, `phone`, `role_id`, `user_id`, `state`, `create_time`, `create_user_id`, `update_time`, `update_user_id`, `version`, `description`) VALUES (18, '娴嬭瘯鍛樺伐', '13800000001', 'ADMIN', 120, 1, 'Mon Sep 29 2025 18:48:53 GMT+0800 (GMT+08:00)', NULL, 'Mon Sep 29 2025 18:48:53 GMT+0800 (GMT+08:00)', NULL, 0, '绯荤粺娴嬭瘯鍛樺伐璐﹀彿');
 
 -- ----------------------------
 -- Table structure for t_employee_role
@@ -207,7 +261,14 @@
   `introduction` text COMMENT '涓汉浠嬬粛',
   PRIMARY KEY (`id`) USING BTREE,
   UNIQUE KEY `phone` (`phone`) USING BTREE
-) ENGINE=InnoDB AUTO_INCREMENT=68 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
+) ENGINE=InnoDB AUTO_INCREMENT=69 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
+
+-- ----------------------------
+-- Records of t_judge
+-- ----------------------------
+INSERT INTO `t_judge` (`id`, `name`, `user_id`, `phone`, `gender`, `state`, `role_id`, `description`, `create_time`, `create_user_id`, `update_time`, `update_user_id`, `version`, `title`, `company`, `introduction`) VALUES (65, '寮犱笁', NULL, '13800138000', 1, 1, NULL, '鎷ユ湁10骞翠互涓婄殑鎶�鏈紑鍙戠粡楠岋紝涓撴敞浜庝簯璁$畻鍜屽ぇ鏁版嵁棰嗗煙銆�', 'Mon Sep 29 2025 18:48:59 GMT+0800 (GMT+08:00)', NULL, 'Mon Sep 29 2025 18:48:59 GMT+0800 (GMT+08:00)', NULL, 0, NULL, NULL, NULL);
+INSERT INTO `t_judge` (`id`, `name`, `user_id`, `phone`, `gender`, `state`, `role_id`, `description`, `create_time`, `create_user_id`, `update_time`, `update_user_id`, `version`, `title`, `company`, `introduction`) VALUES (66, '鐜嬩簲', 123, '13940833', 1, 1, NULL, '楂樼骇鎶�鏈笓瀹讹紝鎷ユ湁涓板瘜鐨勮涓氱粡楠�', 'Mon Sep 29 2025 18:49:01 GMT+0800 (GMT+08:00)', NULL, 'Mon Sep 29 2025 18:49:01 GMT+0800 (GMT+08:00)', NULL, 1, NULL, NULL, NULL);
+INSERT INTO `t_judge` (`id`, `name`, `user_id`, `phone`, `gender`, `state`, `role_id`, `description`, `create_time`, `create_user_id`, `update_time`, `update_user_id`, `version`, `title`, `company`, `introduction`) VALUES (68, 'UK2026', 2, '13981970816', 1, 1, NULL, '绯荤粺鑷姩鍒涘缓鐨勮瘎濮�', 'Tue Sep 30 2025 10:46:11 GMT+0800 (GMT+08:00)', NULL, 'Tue Sep 30 2025 10:46:11 GMT+0800 (GMT+08:00)', NULL, 0, NULL, NULL, NULL);
 
 -- ----------------------------
 -- Table structure for t_judge_tag
@@ -226,6 +287,15 @@
   PRIMARY KEY (`id`) USING BTREE,
   KEY `fk_t_judge_major_tag` (`tag_id`) USING BTREE
 ) ENGINE=InnoDB AUTO_INCREMENT=97 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
+
+-- ----------------------------
+-- Records of t_judge_tag
+-- ----------------------------
+INSERT INTO `t_judge_tag` (`id`, `judge_id`, `tag_id`, `state`, `create_time`, `create_user_id`, `update_time`, `update_user_id`, `version`) VALUES (92, 65, 29, 1, 'Mon Sep 29 2025 18:48:59 GMT+0800 (GMT+08:00)', NULL, 'Mon Sep 29 2025 18:48:59 GMT+0800 (GMT+08:00)', NULL, 0);
+INSERT INTO `t_judge_tag` (`id`, `judge_id`, `tag_id`, `state`, `create_time`, `create_user_id`, `update_time`, `update_user_id`, `version`) VALUES (93, 65, 30, 1, 'Mon Sep 29 2025 18:48:59 GMT+0800 (GMT+08:00)', NULL, 'Mon Sep 29 2025 18:48:59 GMT+0800 (GMT+08:00)', NULL, 0);
+INSERT INTO `t_judge_tag` (`id`, `judge_id`, `tag_id`, `state`, `create_time`, `create_user_id`, `update_time`, `update_user_id`, `version`) VALUES (94, 65, 31, 1, 'Mon Sep 29 2025 18:48:59 GMT+0800 (GMT+08:00)', NULL, 'Mon Sep 29 2025 18:48:59 GMT+0800 (GMT+08:00)', NULL, 0);
+INSERT INTO `t_judge_tag` (`id`, `judge_id`, `tag_id`, `state`, `create_time`, `create_user_id`, `update_time`, `update_user_id`, `version`) VALUES (95, 66, 9, 1, 'Mon Sep 29 2025 18:49:00 GMT+0800 (GMT+08:00)', NULL, 'Mon Sep 29 2025 18:49:00 GMT+0800 (GMT+08:00)', NULL, 0);
+INSERT INTO `t_judge_tag` (`id`, `judge_id`, `tag_id`, `state`, `create_time`, `create_user_id`, `update_time`, `update_user_id`, `version`) VALUES (96, 66, 8, 1, 'Mon Sep 29 2025 18:49:00 GMT+0800 (GMT+08:00)', NULL, 'Mon Sep 29 2025 18:49:00 GMT+0800 (GMT+08:00)', NULL, 0);
 
 -- ----------------------------
 -- Table structure for t_media
@@ -251,7 +321,24 @@
   `version` bigint NOT NULL DEFAULT '0',
   PRIMARY KEY (`id`) USING BTREE,
   KEY `uq_type_id` (`target_type`,`target_id`)
-) ENGINE=InnoDB AUTO_INCREMENT=116 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
+) ENGINE=InnoDB AUTO_INCREMENT=125 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
+
+-- ----------------------------
+-- Records of t_media
+-- ----------------------------
+INSERT INTO `t_media` (`id`, `name`, `target_type`, `target_id`, `media_type`, `path`, `thumb_path`, `file_ext`, `file_size`, `duration`, `description`, `state`, `create_time`, `create_user_id`, `update_time`, `update_user_id`, `version`) VALUES (112, 'judge_avatar.jpg', 1, 65, 1, 'avatars/judge_avatar_1759142940287.jpg', NULL, 'jpg', 1024, NULL, NULL, 1, 'Mon Sep 29 2025 18:48:59 GMT+0800 (GMT+08:00)', NULL, 'Mon Sep 29 2025 18:48:59 GMT+0800 (GMT+08:00)', NULL, 0);
+INSERT INTO `t_media` (`id`, `name`, `target_type`, `target_id`, `media_type`, `path`, `thumb_path`, `file_ext`, `file_size`, `duration`, `description`, `state`, `create_time`, `create_user_id`, `update_time`, `update_user_id`, `version`) VALUES (113, 'logo.jpg', 1, 66, 1, '20250929/b5840d47-b046-4461-9d78-27881c917f03.jpg', NULL, 'jpg', 67671, NULL, NULL, 1, 'Mon Sep 29 2025 18:49:02 GMT+0800 (GMT+08:00)', NULL, 'Mon Sep 29 2025 18:49:02 GMT+0800 (GMT+08:00)', NULL, 0);
+INSERT INTO `t_media` (`id`, `name`, `target_type`, `target_id`, `media_type`, `path`, `thumb_path`, `file_ext`, `file_size`, `duration`, `description`, `state`, `create_time`, `create_user_id`, `update_time`, `update_user_id`, `version`) VALUES (114, 'a1.png', 2, 73, 1, '20250929/bc8be85a-c0d9-4d75-885e-cb19d613e00f.png', NULL, 'png', 3628657, NULL, NULL, 1, 'Mon Sep 29 2025 19:16:11 GMT+0800 (GMT+08:00)', NULL, 'Mon Sep 29 2025 19:16:11 GMT+0800 (GMT+08:00)', NULL, 0);
+INSERT INTO `t_media` (`id`, `name`, `target_type`, `target_id`, `media_type`, `path`, `thumb_path`, `file_ext`, `file_size`, `duration`, `description`, `state`, `create_time`, `create_user_id`, `update_time`, `update_user_id`, `version`) VALUES (115, 'bug1.png', 2, 73, 1, '20250929/23aee0a8-dc1e-4ec5-b4a6-2b80370940cb.png', NULL, 'png', 84959, NULL, NULL, 1, 'Mon Sep 29 2025 19:16:11 GMT+0800 (GMT+08:00)', NULL, 'Mon Sep 29 2025 19:16:11 GMT+0800 (GMT+08:00)', NULL, 0);
+INSERT INTO `t_media` (`id`, `name`, `target_type`, `target_id`, `media_type`, `path`, `thumb_path`, `file_ext`, `file_size`, `duration`, `description`, `state`, `create_time`, `create_user_id`, `update_time`, `update_user_id`, `version`) VALUES (116, 'mg665p1c-h3pighsw-6rguef2u-byme.jpg', 7, 2, 1, 'avatars/20250930/mg665p1c-h3pighsw-6rguef2u-byme.jpg', NULL, 'jpg', 3624223, NULL, NULL, 1, 'Tue Sep 30 2025 09:08:55 GMT+0800 (GMT+08:00)', NULL, 'Tue Sep 30 2025 14:21:09 GMT+0800 (GMT+08:00)', NULL, 1);
+INSERT INTO `t_media` (`id`, `name`, `target_type`, `target_id`, `media_type`, `path`, `thumb_path`, `file_ext`, `file_size`, `duration`, `description`, `state`, `create_time`, `create_user_id`, `update_time`, `update_user_id`, `version`) VALUES (117, 'mg5v06il-rei95zgu-f9okwt82-iruh.png', 5, 51, 1, 'attachments/20250930/mg5v06il-rei95zgu-f9okwt82-iruh.png', NULL, 'png', 93686, NULL, NULL, 1, 'Tue Sep 30 2025 09:08:55 GMT+0800 (GMT+08:00)', NULL, 'Tue Sep 30 2025 09:08:55 GMT+0800 (GMT+08:00)', NULL, 0);
+INSERT INTO `t_media` (`id`, `name`, `target_type`, `target_id`, `media_type`, `path`, `thumb_path`, `file_ext`, `file_size`, `duration`, `description`, `state`, `create_time`, `create_user_id`, `update_time`, `update_user_id`, `version`) VALUES (118, 'test-avatar.jpg', 7, 1, 1, 'avatars/test-avatar.jpg', NULL, 'jpg', 50000, NULL, NULL, 1, 'Tue Sep 30 2025 09:32:13 GMT+0800 (GMT+08:00)', NULL, 'Tue Sep 30 2025 09:32:13 GMT+0800 (GMT+08:00)', NULL, 0);
+INSERT INTO `t_media` (`id`, `name`, `target_type`, `target_id`, `media_type`, `path`, `thumb_path`, `file_ext`, `file_size`, `duration`, `description`, `state`, `create_time`, `create_user_id`, `update_time`, `update_user_id`, `version`) VALUES (119, 'avatar.jpg', 7, 54, 1, '116', NULL, 'jpg', 0, NULL, NULL, 1, 'Tue Sep 30 2025 10:02:21 GMT+0800 (GMT+08:00)', NULL, 'Tue Sep 30 2025 10:02:21 GMT+0800 (GMT+08:00)', NULL, 0);
+INSERT INTO `t_media` (`id`, `name`, `target_type`, `target_id`, `media_type`, `path`, `thumb_path`, `file_ext`, `file_size`, `duration`, `description`, `state`, `create_time`, `create_user_id`, `update_time`, `update_user_id`, `version`) VALUES (120, 'bug2.png', 2, 6, 1, '20250930/21d5b84e-5d99-4b0f-9fca-c93c92c46652.png', NULL, 'png', 93686, NULL, NULL, 1, 'Tue Sep 30 2025 12:32:23 GMT+0800 (GMT+08:00)', NULL, 'Tue Sep 30 2025 12:32:23 GMT+0800 (GMT+08:00)', NULL, 0);
+INSERT INTO `t_media` (`id`, `name`, `target_type`, `target_id`, `media_type`, `path`, `thumb_path`, `file_ext`, `file_size`, `duration`, `description`, `state`, `create_time`, `create_user_id`, `update_time`, `update_user_id`, `version`) VALUES (121, 'mg665q2v-a6tikk1u-llgcqsw4-j4ek.jpg', 5, 1, 1, 'attachments/20250930/mg665q2v-a6tikk1u-llgcqsw4-j4ek.jpg', NULL, 'jpg', 67671, NULL, NULL, 1, 'Tue Sep 30 2025 14:21:10 GMT+0800 (GMT+08:00)', NULL, 'Tue Sep 30 2025 14:21:10 GMT+0800 (GMT+08:00)', NULL, 0);
+INSERT INTO `t_media` (`id`, `name`, `target_type`, `target_id`, `media_type`, `path`, `thumb_path`, `file_ext`, `file_size`, `duration`, `description`, `state`, `create_time`, `create_user_id`, `update_time`, `update_user_id`, `version`) VALUES (122, 'mg665q2v-a6tikk1u-llgcqsw4-j4ek.jpg', 5, 2, 1, 'attachments/20250930/mg665q2v-a6tikk1u-llgcqsw4-j4ek.jpg', NULL, 'jpg', 67671, NULL, NULL, 1, 'Tue Sep 30 2025 17:29:13 GMT+0800 (GMT+08:00)', NULL, 'Tue Sep 30 2025 17:29:13 GMT+0800 (GMT+08:00)', NULL, 0);
+INSERT INTO `t_media` (`id`, `name`, `target_type`, `target_id`, `media_type`, `path`, `thumb_path`, `file_ext`, `file_size`, `duration`, `description`, `state`, `create_time`, `create_user_id`, `update_time`, `update_user_id`, `version`) VALUES (123, 'a2.png', 4, 1, 1, '20250930/3fbde670-1b38-4e8b-bd50-1f81718f7466.png', NULL, 'png', 5013816, NULL, NULL, 1, 'Tue Sep 30 2025 17:34:26 GMT+0800 (GMT+08:00)', NULL, 'Tue Sep 30 2025 17:34:26 GMT+0800 (GMT+08:00)', NULL, 0);
+INSERT INTO `t_media` (`id`, `name`, `target_type`, `target_id`, `media_type`, `path`, `thumb_path`, `file_ext`, `file_size`, `duration`, `description`, `state`, `create_time`, `create_user_id`, `update_time`, `update_user_id`, `version`) VALUES (124, 'logo.jpg', 4, 2, 1, '20250930/78b0e032-197c-4f69-b531-968e12a0a0e1.jpg', NULL, 'jpg', 67671, NULL, NULL, 1, 'Tue Sep 30 2025 17:34:37 GMT+0800 (GMT+08:00)', NULL, 'Tue Sep 30 2025 17:34:37 GMT+0800 (GMT+08:00)', NULL, 0);
 
 -- ----------------------------
 -- Table structure for t_media_backup_avatar_migration
@@ -278,15 +365,47 @@
 ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
 
 -- ----------------------------
+-- Records of t_media_backup_avatar_migration
+-- ----------------------------
+INSERT INTO `t_media_backup_avatar_migration` (`id`, `name`, `target_type`, `target_id`, `media_type`, `path`, `thumb_path`, `file_ext`, `file_size`, `duration`, `description`, `state`, `create_time`, `create_user_id`, `update_time`, `update_user_id`, `version`) VALUES (3, 'logo.jpg', 1, 0, 1, 'avatars/logo_test.jpg', NULL, 'jpg', 2048, NULL, NULL, 1, 'Sun Sep 21 2025 22:24:51 GMT+0800 (GMT+08:00)', NULL, 'Sun Sep 21 2025 22:24:51 GMT+0800 (GMT+08:00)', NULL, 0);
+INSERT INTO `t_media_backup_avatar_migration` (`id`, `name`, `target_type`, `target_id`, `media_type`, `path`, `thumb_path`, `file_ext`, `file_size`, `duration`, `description`, `state`, `create_time`, `create_user_id`, `update_time`, `update_user_id`, `version`) VALUES (4, 'logo.jpg', 1, 0, 1, 'avatars/logo_test.jpg', NULL, 'jpg', 2048, NULL, NULL, 1, 'Sun Sep 21 2025 22:25:35 GMT+0800 (GMT+08:00)', NULL, 'Sun Sep 21 2025 22:25:35 GMT+0800 (GMT+08:00)', NULL, 0);
+INSERT INTO `t_media_backup_avatar_migration` (`id`, `name`, `target_type`, `target_id`, `media_type`, `path`, `thumb_path`, `file_ext`, `file_size`, `duration`, `description`, `state`, `create_time`, `create_user_id`, `update_time`, `update_user_id`, `version`) VALUES (5, 'logo.jpg', 1, 0, 1, 'avatars/logo_test.jpg', NULL, 'jpg', 2048, NULL, NULL, 1, 'Sun Sep 21 2025 22:26:41 GMT+0800 (GMT+08:00)', NULL, 'Sun Sep 21 2025 22:26:41 GMT+0800 (GMT+08:00)', NULL, 0);
+INSERT INTO `t_media_backup_avatar_migration` (`id`, `name`, `target_type`, `target_id`, `media_type`, `path`, `thumb_path`, `file_ext`, `file_size`, `duration`, `description`, `state`, `create_time`, `create_user_id`, `update_time`, `update_user_id`, `version`) VALUES (6, 'logo.jpg', 1, 0, 1, 'avatars/logo_test.jpg', NULL, 'jpg', 2048, NULL, NULL, 1, 'Sun Sep 21 2025 22:27:29 GMT+0800 (GMT+08:00)', NULL, 'Sun Sep 21 2025 22:27:29 GMT+0800 (GMT+08:00)', NULL, 0);
+INSERT INTO `t_media_backup_avatar_migration` (`id`, `name`, `target_type`, `target_id`, `media_type`, `path`, `thumb_path`, `file_ext`, `file_size`, `duration`, `description`, `state`, `create_time`, `create_user_id`, `update_time`, `update_user_id`, `version`) VALUES (17, 'logo.jpg', 1, 0, 1, '20250922/221c144a-15da-41ae-9fe2-1721b740e3bd.jpg', NULL, 'jpg', 67671, NULL, NULL, 1, 'Mon Sep 22 2025 15:39:10 GMT+0800 (GMT+08:00)', NULL, 'Mon Sep 22 2025 15:39:10 GMT+0800 (GMT+08:00)', NULL, 0);
+INSERT INTO `t_media_backup_avatar_migration` (`id`, `name`, `target_type`, `target_id`, `media_type`, `path`, `thumb_path`, `file_ext`, `file_size`, `duration`, `description`, `state`, `create_time`, `create_user_id`, `update_time`, `update_user_id`, `version`) VALUES (1, 'judge_avatar.jpg', 1, 21, 1, 'avatars/judge_avatar_1758458288387.jpg', NULL, 'jpg', 1024, NULL, NULL, 1, 'Sun Sep 21 2025 20:38:06 GMT+0800 (GMT+08:00)', NULL, 'Sat Sep 27 2025 10:57:45 GMT+0800 (GMT+08:00)', NULL, 0);
+INSERT INTO `t_media_backup_avatar_migration` (`id`, `name`, `target_type`, `target_id`, `media_type`, `path`, `thumb_path`, `file_ext`, `file_size`, `duration`, `description`, `state`, `create_time`, `create_user_id`, `update_time`, `update_user_id`, `version`) VALUES (22, 'C1.jpg', 1, 21, 1, '20250923/5b3b8556-3096-4c5b-a391-d6ec0b7a1dca.jpg', NULL, 'jpg', 456547, NULL, NULL, 1, 'Tue Sep 23 2025 08:57:55 GMT+0800 (GMT+08:00)', NULL, 'Tue Sep 23 2025 08:57:55 GMT+0800 (GMT+08:00)', NULL, 0);
+INSERT INTO `t_media_backup_avatar_migration` (`id`, `name`, `target_type`, `target_id`, `media_type`, `path`, `thumb_path`, `file_ext`, `file_size`, `duration`, `description`, `state`, `create_time`, `create_user_id`, `update_time`, `update_user_id`, `version`) VALUES (2, 'logo.jpg', 1, 22, 1, 'avatars/logo_1758464410213.jpg', NULL, 'jpg', 2048, NULL, NULL, 1, 'Sun Sep 21 2025 22:20:08 GMT+0800 (GMT+08:00)', NULL, 'Sat Sep 27 2025 10:57:46 GMT+0800 (GMT+08:00)', NULL, 0);
+INSERT INTO `t_media_backup_avatar_migration` (`id`, `name`, `target_type`, `target_id`, `media_type`, `path`, `thumb_path`, `file_ext`, `file_size`, `duration`, `description`, `state`, `create_time`, `create_user_id`, `update_time`, `update_user_id`, `version`) VALUES (7, 'logo.jpg', 1, 27, 1, 'avatars/judge_1758465900493_logo.jpg', NULL, 'jpg', 2048, NULL, NULL, 1, 'Sun Sep 21 2025 22:45:01 GMT+0800 (GMT+08:00)', NULL, 'Sun Sep 21 2025 22:45:01 GMT+0800 (GMT+08:00)', NULL, 0);
+INSERT INTO `t_media_backup_avatar_migration` (`id`, `name`, `target_type`, `target_id`, `media_type`, `path`, `thumb_path`, `file_ext`, `file_size`, `duration`, `description`, `state`, `create_time`, `create_user_id`, `update_time`, `update_user_id`, `version`) VALUES (8, 'logo.jpg', 1, 28, 1, 'avatars/judge_1758465960096_logo.jpg', NULL, 'jpg', 2048, NULL, NULL, 1, 'Sun Sep 21 2025 22:46:00 GMT+0800 (GMT+08:00)', NULL, 'Sun Sep 21 2025 22:46:00 GMT+0800 (GMT+08:00)', NULL, 0);
+INSERT INTO `t_media_backup_avatar_migration` (`id`, `name`, `target_type`, `target_id`, `media_type`, `path`, `thumb_path`, `file_ext`, `file_size`, `duration`, `description`, `state`, `create_time`, `create_user_id`, `update_time`, `update_user_id`, `version`) VALUES (9, 'logo.jpg', 1, 29, 1, 'avatars/judge_1758466031697_logo.jpg', NULL, 'jpg', 2048, NULL, NULL, 1, 'Sun Sep 21 2025 22:47:12 GMT+0800 (GMT+08:00)', NULL, 'Sun Sep 21 2025 22:47:12 GMT+0800 (GMT+08:00)', NULL, 0);
+INSERT INTO `t_media_backup_avatar_migration` (`id`, `name`, `target_type`, `target_id`, `media_type`, `path`, `thumb_path`, `file_ext`, `file_size`, `duration`, `description`, `state`, `create_time`, `create_user_id`, `update_time`, `update_user_id`, `version`) VALUES (10, 'logo.jpg', 1, 30, 1, '20250921/6ab1ca46-eb4f-46c2-a065-495eb7aaf81b.jpg', NULL, 'jpg', 67671, NULL, NULL, 1, 'Sun Sep 21 2025 22:57:06 GMT+0800 (GMT+08:00)', NULL, 'Sun Sep 21 2025 22:57:06 GMT+0800 (GMT+08:00)', NULL, 0);
+INSERT INTO `t_media_backup_avatar_migration` (`id`, `name`, `target_type`, `target_id`, `media_type`, `path`, `thumb_path`, `file_ext`, `file_size`, `duration`, `description`, `state`, `create_time`, `create_user_id`, `update_time`, `update_user_id`, `version`) VALUES (11, 'judge_avatar_36', 1, 36, 1, 'https://ryc-1256886520.cos.ap-chengdu.myqcloud.com/20250922/cff3c319-36d3-4969-ad66-7c9c02d6a642.jpg', NULL, 'jpg', 67671, NULL, NULL, 1, 'Mon Sep 22 2025 09:24:18 GMT+0800 (GMT+08:00)', NULL, 'Mon Sep 22 2025 09:24:18 GMT+0800 (GMT+08:00)', NULL, 0);
+INSERT INTO `t_media_backup_avatar_migration` (`id`, `name`, `target_type`, `target_id`, `media_type`, `path`, `thumb_path`, `file_ext`, `file_size`, `duration`, `description`, `state`, `create_time`, `create_user_id`, `update_time`, `update_user_id`, `version`) VALUES (12, 'a.png', 1, 37, 1, '20250922/f53c4de4-f286-47bd-9849-6fc610d2a3a3.png', NULL, 'png', 2041024, NULL, NULL, 1, 'Mon Sep 22 2025 09:34:22 GMT+0800 (GMT+08:00)', NULL, 'Mon Sep 22 2025 09:34:22 GMT+0800 (GMT+08:00)', NULL, 0);
+INSERT INTO `t_media_backup_avatar_migration` (`id`, `name`, `target_type`, `target_id`, `media_type`, `path`, `thumb_path`, `file_ext`, `file_size`, `duration`, `description`, `state`, `create_time`, `create_user_id`, `update_time`, `update_user_id`, `version`) VALUES (13, 'logo.jpg', 1, 38, 1, '20250922/d11d9137-88c0-40c8-b0ed-c75c19188129.jpg', NULL, 'jpg', 67671, NULL, NULL, 1, 'Mon Sep 22 2025 13:12:23 GMT+0800 (GMT+08:00)', NULL, 'Mon Sep 22 2025 13:12:23 GMT+0800 (GMT+08:00)', NULL, 0);
+INSERT INTO `t_media_backup_avatar_migration` (`id`, `name`, `target_type`, `target_id`, `media_type`, `path`, `thumb_path`, `file_ext`, `file_size`, `duration`, `description`, `state`, `create_time`, `create_user_id`, `update_time`, `update_user_id`, `version`) VALUES (14, 'logo.jpg', 1, 39, 1, '20250922/ac760a7a-4105-4b32-922e-39da3c7032a8.jpg', NULL, 'jpg', 67671, NULL, NULL, 1, 'Mon Sep 22 2025 13:16:44 GMT+0800 (GMT+08:00)', NULL, 'Mon Sep 22 2025 13:16:44 GMT+0800 (GMT+08:00)', NULL, 0);
+INSERT INTO `t_media_backup_avatar_migration` (`id`, `name`, `target_type`, `target_id`, `media_type`, `path`, `thumb_path`, `file_ext`, `file_size`, `duration`, `description`, `state`, `create_time`, `create_user_id`, `update_time`, `update_user_id`, `version`) VALUES (15, 'logo.jpg', 1, 40, 1, '20250922/2e4717e4-67fd-4caa-b281-17d86053a274.jpg', NULL, 'jpg', 67671, NULL, NULL, 1, 'Mon Sep 22 2025 13:47:20 GMT+0800 (GMT+08:00)', NULL, 'Mon Sep 22 2025 13:47:20 GMT+0800 (GMT+08:00)', NULL, 0);
+INSERT INTO `t_media_backup_avatar_migration` (`id`, `name`, `target_type`, `target_id`, `media_type`, `path`, `thumb_path`, `file_ext`, `file_size`, `duration`, `description`, `state`, `create_time`, `create_user_id`, `update_time`, `update_user_id`, `version`) VALUES (16, 'logo.jpg', 1, 41, 1, '20250922/59a406d7-4123-4ac3-b157-184c987e4368.jpg', NULL, 'jpg', 67671, NULL, NULL, 1, 'Mon Sep 22 2025 15:33:37 GMT+0800 (GMT+08:00)', NULL, 'Mon Sep 22 2025 15:33:37 GMT+0800 (GMT+08:00)', NULL, 0);
+INSERT INTO `t_media_backup_avatar_migration` (`id`, `name`, `target_type`, `target_id`, `media_type`, `path`, `thumb_path`, `file_ext`, `file_size`, `duration`, `description`, `state`, `create_time`, `create_user_id`, `update_time`, `update_user_id`, `version`) VALUES (37, 'avatar.jpg', 1, 41, 1, 'avatar_1759035802271', NULL, 'jpg', 0, NULL, NULL, 1, 'Sun Sep 28 2025 13:03:22 GMT+0800 (GMT+08:00)', NULL, 'Sun Sep 28 2025 13:03:22 GMT+0800 (GMT+08:00)', NULL, 0);
+INSERT INTO `t_media_backup_avatar_migration` (`id`, `name`, `target_type`, `target_id`, `media_type`, `path`, `thumb_path`, `file_ext`, `file_size`, `duration`, `description`, `state`, `create_time`, `create_user_id`, `update_time`, `update_user_id`, `version`) VALUES (23, 'a2.png', 1, 42, 1, '20250923/bcadfa95-5a30-493b-b819-befd8695063b.png', NULL, 'png', 65846, NULL, NULL, 1, 'Tue Sep 23 2025 10:39:27 GMT+0800 (GMT+08:00)', NULL, 'Tue Sep 23 2025 10:39:27 GMT+0800 (GMT+08:00)', NULL, 0);
+INSERT INTO `t_media_backup_avatar_migration` (`id`, `name`, `target_type`, `target_id`, `media_type`, `path`, `thumb_path`, `file_ext`, `file_size`, `duration`, `description`, `state`, `create_time`, `create_user_id`, `update_time`, `update_user_id`, `version`) VALUES (40, 'avatar.jpg', 1, 42, 1, 'test-avatar-media-id-1759035864664', NULL, 'jpg', 0, NULL, NULL, 1, 'Sun Sep 28 2025 13:04:25 GMT+0800 (GMT+08:00)', NULL, 'Sun Sep 28 2025 13:04:25 GMT+0800 (GMT+08:00)', NULL, 0);
+INSERT INTO `t_media_backup_avatar_migration` (`id`, `name`, `target_type`, `target_id`, `media_type`, `path`, `thumb_path`, `file_ext`, `file_size`, `duration`, `description`, `state`, `create_time`, `create_user_id`, `update_time`, `update_user_id`, `version`) VALUES (27, 'a.png', 1, 43, 1, '20250923/d54f92f2-2dd8-475a-b766-b4d0ee473b99.png', NULL, 'png', 2041024, NULL, NULL, 1, 'Tue Sep 23 2025 17:45:32 GMT+0800 (GMT+08:00)', NULL, 'Tue Sep 23 2025 17:45:32 GMT+0800 (GMT+08:00)', NULL, 0);
+INSERT INTO `t_media_backup_avatar_migration` (`id`, `name`, `target_type`, `target_id`, `media_type`, `path`, `thumb_path`, `file_ext`, `file_size`, `duration`, `description`, `state`, `create_time`, `create_user_id`, `update_time`, `update_user_id`, `version`) VALUES (28, '寰俊鍥剧墖_20250831200430_16_48.png', 1, 44, 1, '20250924/11903ee1-d0ff-4299-996f-c1851c70f8e1.png', NULL, 'png', 162478, NULL, NULL, 1, 'Wed Sep 24 2025 10:10:44 GMT+0800 (GMT+08:00)', NULL, 'Wed Sep 24 2025 10:10:44 GMT+0800 (GMT+08:00)', NULL, 0);
+INSERT INTO `t_media_backup_avatar_migration` (`id`, `name`, `target_type`, `target_id`, `media_type`, `path`, `thumb_path`, `file_ext`, `file_size`, `duration`, `description`, `state`, `create_time`, `create_user_id`, `update_time`, `update_user_id`, `version`) VALUES (29, 'logo.jpg', 1, 45, 1, '20250924/cca43df6-1f69-4ade-86d1-9021156fa1f6.jpg', NULL, 'jpg', 67671, NULL, NULL, 1, 'Wed Sep 24 2025 13:40:04 GMT+0800 (GMT+08:00)', NULL, 'Wed Sep 24 2025 13:40:04 GMT+0800 (GMT+08:00)', NULL, 0);
+INSERT INTO `t_media_backup_avatar_migration` (`id`, `name`, `target_type`, `target_id`, `media_type`, `path`, `thumb_path`, `file_ext`, `file_size`, `duration`, `description`, `state`, `create_time`, `create_user_id`, `update_time`, `update_user_id`, `version`) VALUES (31, '寰俊鍥剧墖_20250831200430_16_48.png', 1, 46, 1, '20250924/6706fc1d-c8e8-4eae-bbc7-be992cc59bd5.png', NULL, 'png', 162478, NULL, NULL, 1, 'Wed Sep 24 2025 18:49:44 GMT+0800 (GMT+08:00)', NULL, 'Wed Sep 24 2025 18:49:44 GMT+0800 (GMT+08:00)', NULL, 0);
+INSERT INTO `t_media_backup_avatar_migration` (`id`, `name`, `target_type`, `target_id`, `media_type`, `path`, `thumb_path`, `file_ext`, `file_size`, `duration`, `description`, `state`, `create_time`, `create_user_id`, `update_time`, `update_user_id`, `version`) VALUES (32, '寰俊鍥剧墖_20250831200430_16_48.png', 1, 47, 1, '20250924/b17c8097-ff10-43b2-b544-0b205e4f23d4.png', NULL, 'png', 162478, NULL, NULL, 1, 'Wed Sep 24 2025 18:59:31 GMT+0800 (GMT+08:00)', NULL, 'Wed Sep 24 2025 18:59:31 GMT+0800 (GMT+08:00)', NULL, 0);
+INSERT INTO `t_media_backup_avatar_migration` (`id`, `name`, `target_type`, `target_id`, `media_type`, `path`, `thumb_path`, `file_ext`, `file_size`, `duration`, `description`, `state`, `create_time`, `create_user_id`, `update_time`, `update_user_id`, `version`) VALUES (33, '寰俊鍥剧墖_20250831200430_16_48.png', 1, 48, 1, '20250924/b6378b03-29a4-4c0d-930f-cfbe072f4de6.png', NULL, 'png', 162478, NULL, NULL, 1, 'Wed Sep 24 2025 19:12:16 GMT+0800 (GMT+08:00)', NULL, 'Wed Sep 24 2025 19:12:16 GMT+0800 (GMT+08:00)', NULL, 0);
+INSERT INTO `t_media_backup_avatar_migration` (`id`, `name`, `target_type`, `target_id`, `media_type`, `path`, `thumb_path`, `file_ext`, `file_size`, `duration`, `description`, `state`, `create_time`, `create_user_id`, `update_time`, `update_user_id`, `version`) VALUES (34, '寰俊鍥剧墖_20250831200430_16_48.png', 1, 49, 1, '20250924/cceb4e5f-d022-43b6-9dbc-b5c81fd4dcdc.png', NULL, 'png', 162478, NULL, NULL, 1, 'Wed Sep 24 2025 19:36:52 GMT+0800 (GMT+08:00)', NULL, 'Wed Sep 24 2025 19:36:52 GMT+0800 (GMT+08:00)', NULL, 0);
+
+-- ----------------------------
 -- Table structure for t_msg
 -- ----------------------------
 DROP TABLE IF EXISTS `t_msg`;
 CREATE TABLE `t_msg` (
-  `id` int NOT NULL AUTO_INCREMENT,
+  `id` bigint NOT NULL AUTO_INCREMENT,
   `target_type` int NOT NULL,
-  `target_id` int NOT NULL,
-  `player_id` int NOT NULL,
-  `user_id` int NOT NULL,
+  `target_id` bigint NOT NULL,
+  `player_id` bigint NOT NULL,
+  `user_id` bigint NOT NULL,
   `content` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL,
   `template_content` varchar(200) COLLATE utf8mb4_general_ci DEFAULT NULL,
   `wx_msg_success` bit(1) NOT NULL,
@@ -346,12 +465,21 @@
 ) ENGINE=InnoDB AUTO_INCREMENT=25 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
 
 -- ----------------------------
+-- Records of t_permission
+-- ----------------------------
+INSERT INTO `t_permission` (`id`, `code`, `name`, `category`, `description`, `state`, `create_time`, `create_user_id`, `update_time`, `update_user_id`, `version`) VALUES (9, 'SYSTEM_USER_MANAGE', 'User Management', 'SYSTEM', 'Manage platform users and roles', 1, 'Fri Sep 19 2025 16:51:12 GMT+0800 (GMT+08:00)', NULL, 'Fri Sep 19 2025 17:00:22 GMT+0800 (GMT+08:00)', NULL, 0);
+INSERT INTO `t_permission` (`id`, `code`, `name`, `category`, `description`, `state`, `create_time`, `create_user_id`, `update_time`, `update_user_id`, `version`) VALUES (10, 'PLAYER_AUDIT', 'Player Audit', 'PLAYER', 'Review player registrations', 1, 'Fri Sep 19 2025 16:51:12 GMT+0800 (GMT+08:00)', NULL, 'Fri Sep 19 2025 17:00:22 GMT+0800 (GMT+08:00)', NULL, 0);
+INSERT INTO `t_permission` (`id`, `code`, `name`, `category`, `description`, `state`, `create_time`, `create_user_id`, `update_time`, `update_user_id`, `version`) VALUES (11, 'JUDGE_MANAGE', 'Judge Management', 'JUDGE', 'Maintain judge information', 1, 'Fri Sep 19 2025 16:51:12 GMT+0800 (GMT+08:00)', NULL, 'Fri Sep 19 2025 17:00:22 GMT+0800 (GMT+08:00)', NULL, 0);
+INSERT INTO `t_permission` (`id`, `code`, `name`, `category`, `description`, `state`, `create_time`, `create_user_id`, `update_time`, `update_user_id`, `version`) VALUES (12, 'ACTIVITY_MANAGE', 'Activity Management', 'ACTIVITY', 'Maintain activities and stage configuration', 1, 'Fri Sep 19 2025 16:51:12 GMT+0800 (GMT+08:00)', NULL, 'Fri Sep 19 2025 17:00:22 GMT+0800 (GMT+08:00)', NULL, 0);
+
+-- ----------------------------
 -- Table structure for t_player
 -- ----------------------------
 DROP TABLE IF EXISTS `t_player`;
 CREATE TABLE `t_player` (
   `id` bigint NOT NULL AUTO_INCREMENT,
   `name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL,
+  `user_id` bigint NOT NULL,
   `phone` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
   `role_id` bigint NOT NULL,
   `description` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL,
@@ -366,10 +494,14 @@
   `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
   `update_user_id` bigint DEFAULT NULL,
   `version` bigint NOT NULL DEFAULT '0',
-  `user_id` bigint NOT NULL,
   PRIMARY KEY (`id`) USING BTREE,
   UNIQUE KEY `phone` (`phone`) USING BTREE
-) ENGINE=InnoDB AUTO_INCREMENT=54 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
+) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
+
+-- ----------------------------
+-- Records of t_player
+-- ----------------------------
+INSERT INTO `t_player` (`id`, `name`, `user_id`, `phone`, `role_id`, `description`, `gender`, `education`, `introduction`, `reject_reason`, `final_score`, `state`, `create_time`, `create_user_id`, `update_time`, `update_user_id`, `version`) VALUES (1, 'UK2025', 2, '13981970816', 1, NULL, 0, '鏈', '', NULL, NULL, 1, 'Tue Sep 30 2025 14:21:08 GMT+0800 (GMT+08:00)', NULL, 'Tue Sep 30 2025 14:21:08 GMT+0800 (GMT+08:00)', NULL, 0);
 
 -- ----------------------------
 -- Table structure for t_rating_item
@@ -392,6 +524,20 @@
 ) ENGINE=InnoDB AUTO_INCREMENT=14 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
 
 -- ----------------------------
+-- Records of t_rating_item
+-- ----------------------------
+INSERT INTO `t_rating_item` (`id`, `scheme_id`, `name`, `max_score`, `order_no`, `state`, `create_time`, `create_user_id`, `update_time`, `update_user_id`, `version`) VALUES (1, 1, '浠g爜璐ㄩ噺', 30, 1, 1, 'Mon Sep 22 2025 10:30:56 GMT+0800 (GMT+08:00)', NULL, 'Wed Sep 24 2025 16:58:48 GMT+0800 (GMT+08:00)', NULL, 0);
+INSERT INTO `t_rating_item` (`id`, `scheme_id`, `name`, `max_score`, `order_no`, `state`, `create_time`, `create_user_id`, `update_time`, `update_user_id`, `version`) VALUES (2, 1, '鍔熻兘瀹屾暣鎬�', 25, 2, 1, 'Mon Sep 22 2025 10:30:56 GMT+0800 (GMT+08:00)', NULL, 'Wed Sep 24 2025 16:58:48 GMT+0800 (GMT+08:00)', NULL, 0);
+INSERT INTO `t_rating_item` (`id`, `scheme_id`, `name`, `max_score`, `order_no`, `state`, `create_time`, `create_user_id`, `update_time`, `update_user_id`, `version`) VALUES (3, 1, '鐢ㄦ埛浣撻獙', 20, 3, 1, 'Mon Sep 22 2025 10:30:56 GMT+0800 (GMT+08:00)', NULL, 'Wed Sep 24 2025 16:58:48 GMT+0800 (GMT+08:00)', NULL, 0);
+INSERT INTO `t_rating_item` (`id`, `scheme_id`, `name`, `max_score`, `order_no`, `state`, `create_time`, `create_user_id`, `update_time`, `update_user_id`, `version`) VALUES (4, 1, '鍒涙柊鎬�', 15, 4, 1, 'Tue Sep 23 2025 22:45:06 GMT+0800 (GMT+08:00)', NULL, 'Wed Sep 24 2025 16:58:48 GMT+0800 (GMT+08:00)', NULL, 0);
+INSERT INTO `t_rating_item` (`id`, `scheme_id`, `name`, `max_score`, `order_no`, `state`, `create_time`, `create_user_id`, `update_time`, `update_user_id`, `version`) VALUES (5, 1, '椤圭洰灞曠ず', 10, 5, 1, 'Tue Sep 23 2025 22:45:06 GMT+0800 (GMT+08:00)', NULL, 'Wed Sep 24 2025 16:58:48 GMT+0800 (GMT+08:00)', NULL, 0);
+INSERT INTO `t_rating_item` (`id`, `scheme_id`, `name`, `max_score`, `order_no`, `state`, `create_time`, `create_user_id`, `update_time`, `update_user_id`, `version`) VALUES (9, 6, '??', 100, 1, 1, 'Sat Sep 27 2025 10:05:44 GMT+0800 (GMT+08:00)', NULL, 'Sat Sep 27 2025 10:05:44 GMT+0800 (GMT+08:00)', NULL, 0);
+INSERT INTO `t_rating_item` (`id`, `scheme_id`, `name`, `max_score`, `order_no`, `state`, `create_time`, `create_user_id`, `update_time`, `update_user_id`, `version`) VALUES (10, 8, '鍒涙剰', 15, 1, 1, 'Sun Sep 28 2025 21:03:14 GMT+0800 (GMT+08:00)', NULL, 'Sun Sep 28 2025 21:03:14 GMT+0800 (GMT+08:00)', NULL, 0);
+INSERT INTO `t_rating_item` (`id`, `scheme_id`, `name`, `max_score`, `order_no`, `state`, `create_time`, `create_user_id`, `update_time`, `update_user_id`, `version`) VALUES (11, 8, '鍥㈤槦', 20, 1, 1, 'Sun Sep 28 2025 21:03:14 GMT+0800 (GMT+08:00)', NULL, 'Sun Sep 28 2025 21:03:14 GMT+0800 (GMT+08:00)', NULL, 0);
+INSERT INTO `t_rating_item` (`id`, `scheme_id`, `name`, `max_score`, `order_no`, `state`, `create_time`, `create_user_id`, `update_time`, `update_user_id`, `version`) VALUES (12, 8, '璧勯噾', 10, 1, 1, 'Sun Sep 28 2025 21:03:14 GMT+0800 (GMT+08:00)', NULL, 'Sun Sep 28 2025 21:03:14 GMT+0800 (GMT+08:00)', NULL, 0);
+INSERT INTO `t_rating_item` (`id`, `scheme_id`, `name`, `max_score`, `order_no`, `state`, `create_time`, `create_user_id`, `update_time`, `update_user_id`, `version`) VALUES (13, 8, '鍙鎬�', 15, 1, 1, 'Sun Sep 28 2025 21:03:14 GMT+0800 (GMT+08:00)', NULL, 'Sun Sep 28 2025 21:03:14 GMT+0800 (GMT+08:00)', NULL, 0);
+
+-- ----------------------------
 -- Table structure for t_rating_scheme
 -- ----------------------------
 DROP TABLE IF EXISTS `t_rating_scheme`;
@@ -407,6 +553,17 @@
   `version` bigint NOT NULL DEFAULT '0',
   PRIMARY KEY (`id`) USING BTREE
 ) ENGINE=InnoDB AUTO_INCREMENT=9 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
+
+-- ----------------------------
+-- Records of t_rating_scheme
+-- ----------------------------
+INSERT INTO `t_rating_scheme` (`id`, `name`, `description`, `state`, `create_time`, `create_user_id`, `update_time`, `update_user_id`, `version`) VALUES (1, '缂栫▼澶ц禌璇勫垎鏍囧噯', '鐢ㄤ簬缂栫▼姣旇禌鐨勭患鍚堣瘎鍒嗘爣鍑嗭紝鍖呭惈浠g爜璐ㄩ噺銆佸姛鑳藉畬鏁存�с�佺敤鎴蜂綋楠屻�佸垱鏂版�у拰椤圭洰灞曠ず绛夌淮搴�', 1, 'Sat Sep 20 2025 20:11:58 GMT+0800 (GMT+08:00)', NULL, 'Wed Sep 24 2025 16:57:37 GMT+0800 (GMT+08:00)', NULL, 0);
+INSERT INTO `t_rating_scheme` (`id`, `name`, `description`, `state`, `create_time`, `create_user_id`, `update_time`, `update_user_id`, `version`) VALUES (2, '鎶�鑳芥瘮璧涜瘎鍒嗘ā鏉�', '涓撻棬鐢ㄤ簬鎶�鑳界被姣旇禌鐨勮瘎鍒嗘ā鏉�', 0, 'Sat Sep 20 2025 20:11:58 GMT+0800 (GMT+08:00)', NULL, 'Tue Sep 30 2025 14:37:19 GMT+0800 (GMT+08:00)', NULL, 1);
+INSERT INTO `t_rating_scheme` (`id`, `name`, `description`, `state`, `create_time`, `create_user_id`, `update_time`, `update_user_id`, `version`) VALUES (3, '2025', '椤堕《椤堕《', 0, 'Mon Sep 22 2025 10:30:56 GMT+0800 (GMT+08:00)', NULL, 'Tue Sep 30 2025 14:37:17 GMT+0800 (GMT+08:00)', NULL, 1);
+INSERT INTO `t_rating_scheme` (`id`, `name`, `description`, `state`, `create_time`, `create_user_id`, `update_time`, `update_user_id`, `version`) VALUES (4, '2025-1', '4鍛冨憙鍛冨憙', 0, 'Tue Sep 23 2025 22:45:06 GMT+0800 (GMT+08:00)', NULL, 'Tue Sep 30 2025 14:37:15 GMT+0800 (GMT+08:00)', NULL, 1);
+INSERT INTO `t_rating_scheme` (`id`, `name`, `description`, `state`, `create_time`, `create_user_id`, `update_time`, `update_user_id`, `version`) VALUES (5, '??????', '?????????', 0, 'Wed Sep 24 2025 12:59:43 GMT+0800 (GMT+08:00)', NULL, 'Tue Sep 30 2025 14:37:10 GMT+0800 (GMT+08:00)', NULL, 1);
+INSERT INTO `t_rating_scheme` (`id`, `name`, `description`, `state`, `create_time`, `create_user_id`, `update_time`, `update_user_id`, `version`) VALUES (6, '??????', '???????', 0, 'Sat Sep 27 2025 10:05:44 GMT+0800 (GMT+08:00)', NULL, 'Tue Sep 30 2025 14:37:07 GMT+0800 (GMT+08:00)', NULL, 1);
+INSERT INTO `t_rating_scheme` (`id`, `name`, `description`, `state`, `create_time`, `create_user_id`, `update_time`, `update_user_id`, `version`) VALUES (8, '2025鍒涗笟姣旇禌', '2025鍒涗笟姣旇禌', 1, 'Sun Sep 28 2025 21:03:14 GMT+0800 (GMT+08:00)', NULL, 'Sun Sep 28 2025 21:03:14 GMT+0800 (GMT+08:00)', NULL, 0);
 
 -- ----------------------------
 -- Table structure for t_region
@@ -431,6 +588,39 @@
 ) ENGINE=InnoDB AUTO_INCREMENT=142 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
 
 -- ----------------------------
+-- Records of t_region
+-- ----------------------------
+INSERT INTO `t_region` (`id`, `pid`, `name`, `code`, `level`, `leaf_flag`, `full_path`, `state`, `create_time`, `create_user_id`, `update_time`, `update_user_id`, `version`) VALUES (1, 0, '鍥涘窛鐪�', NULL, 1, 0, NULL, 1, 'Tue Sep 23 2025 11:38:28 GMT+0800 (GMT+08:00)', 1, 'Tue Sep 23 2025 11:38:28 GMT+0800 (GMT+08:00)', 1, 0);
+INSERT INTO `t_region` (`id`, `pid`, `name`, `code`, `level`, `leaf_flag`, `full_path`, `state`, `create_time`, `create_user_id`, `update_time`, `update_user_id`, `version`) VALUES (2, 0, '閲嶅簡甯�', NULL, 1, 1, NULL, 1, 'Tue Sep 23 2025 11:38:28 GMT+0800 (GMT+08:00)', 1, 'Tue Sep 23 2025 11:39:15 GMT+0800 (GMT+08:00)', 1, 0);
+INSERT INTO `t_region` (`id`, `pid`, `name`, `code`, `level`, `leaf_flag`, `full_path`, `state`, `create_time`, `create_user_id`, `update_time`, `update_user_id`, `version`) VALUES (3, 1, '鎴愰兘甯�', NULL, 2, 0, NULL, 1, 'Tue Sep 23 2025 11:38:28 GMT+0800 (GMT+08:00)', 1, 'Tue Sep 23 2025 11:38:28 GMT+0800 (GMT+08:00)', 1, 0);
+INSERT INTO `t_region` (`id`, `pid`, `name`, `code`, `level`, `leaf_flag`, `full_path`, `state`, `create_time`, `create_user_id`, `update_time`, `update_user_id`, `version`) VALUES (4, 1, '鐪夊北甯�', NULL, 2, 1, NULL, 1, 'Tue Sep 23 2025 11:38:28 GMT+0800 (GMT+08:00)', 1, 'Tue Sep 23 2025 11:39:18 GMT+0800 (GMT+08:00)', 1, 0);
+INSERT INTO `t_region` (`id`, `pid`, `name`, `code`, `level`, `leaf_flag`, `full_path`, `state`, `create_time`, `create_user_id`, `update_time`, `update_user_id`, `version`) VALUES (5, 1, '寰烽槼甯�', NULL, 2, 1, NULL, 1, 'Tue Sep 23 2025 11:38:28 GMT+0800 (GMT+08:00)', 1, 'Tue Sep 23 2025 11:39:19 GMT+0800 (GMT+08:00)', 1, 0);
+INSERT INTO `t_region` (`id`, `pid`, `name`, `code`, `level`, `leaf_flag`, `full_path`, `state`, `create_time`, `create_user_id`, `update_time`, `update_user_id`, `version`) VALUES (6, 3, '澶╁簻鏂板尯', NULL, 3, 1, NULL, 1, 'Tue Sep 23 2025 11:38:28 GMT+0800 (GMT+08:00)', 1, 'Tue Sep 23 2025 11:38:28 GMT+0800 (GMT+08:00)', 1, 0);
+INSERT INTO `t_region` (`id`, `pid`, `name`, `code`, `level`, `leaf_flag`, `full_path`, `state`, `create_time`, `create_user_id`, `update_time`, `update_user_id`, `version`) VALUES (7, 3, '涓滈儴鏂板尯', NULL, 3, 1, NULL, 1, 'Tue Sep 23 2025 11:38:28 GMT+0800 (GMT+08:00)', 1, 'Tue Sep 23 2025 11:38:28 GMT+0800 (GMT+08:00)', 1, 0);
+INSERT INTO `t_region` (`id`, `pid`, `name`, `code`, `level`, `leaf_flag`, `full_path`, `state`, `create_time`, `create_user_id`, `update_time`, `update_user_id`, `version`) VALUES (8, 3, '楂樻柊', NULL, 3, 1, NULL, 1, 'Tue Sep 23 2025 11:38:28 GMT+0800 (GMT+08:00)', 1, 'Tue Sep 23 2025 11:38:28 GMT+0800 (GMT+08:00)', 1, 0);
+INSERT INTO `t_region` (`id`, `pid`, `name`, `code`, `level`, `leaf_flag`, `full_path`, `state`, `create_time`, `create_user_id`, `update_time`, `update_user_id`, `version`) VALUES (9, 3, '閿︽睙', NULL, 3, 1, NULL, 1, 'Tue Sep 23 2025 11:38:28 GMT+0800 (GMT+08:00)', 1, 'Tue Sep 23 2025 11:38:28 GMT+0800 (GMT+08:00)', 1, 0);
+INSERT INTO `t_region` (`id`, `pid`, `name`, `code`, `level`, `leaf_flag`, `full_path`, `state`, `create_time`, `create_user_id`, `update_time`, `update_user_id`, `version`) VALUES (10, 3, '闈掔緤', NULL, 3, 1, NULL, 1, 'Tue Sep 23 2025 11:38:28 GMT+0800 (GMT+08:00)', 1, 'Tue Sep 23 2025 11:38:28 GMT+0800 (GMT+08:00)', 1, 0);
+INSERT INTO `t_region` (`id`, `pid`, `name`, `code`, `level`, `leaf_flag`, `full_path`, `state`, `create_time`, `create_user_id`, `update_time`, `update_user_id`, `version`) VALUES (11, 3, '閲戠墰', NULL, 3, 1, NULL, 1, 'Tue Sep 23 2025 11:38:28 GMT+0800 (GMT+08:00)', 1, 'Tue Sep 23 2025 11:38:28 GMT+0800 (GMT+08:00)', 1, 0);
+INSERT INTO `t_region` (`id`, `pid`, `name`, `code`, `level`, `leaf_flag`, `full_path`, `state`, `create_time`, `create_user_id`, `update_time`, `update_user_id`, `version`) VALUES (12, 3, '姝︿警', NULL, 3, 1, NULL, 1, 'Tue Sep 23 2025 11:38:28 GMT+0800 (GMT+08:00)', 1, 'Tue Sep 23 2025 11:38:28 GMT+0800 (GMT+08:00)', 1, 0);
+INSERT INTO `t_region` (`id`, `pid`, `name`, `code`, `level`, `leaf_flag`, `full_path`, `state`, `create_time`, `create_user_id`, `update_time`, `update_user_id`, `version`) VALUES (13, 3, '鎴愬崕', NULL, 3, 1, NULL, 1, 'Tue Sep 23 2025 11:38:28 GMT+0800 (GMT+08:00)', 1, 'Tue Sep 23 2025 11:38:28 GMT+0800 (GMT+08:00)', 1, 0);
+INSERT INTO `t_region` (`id`, `pid`, `name`, `code`, `level`, `leaf_flag`, `full_path`, `state`, `create_time`, `create_user_id`, `update_time`, `update_user_id`, `version`) VALUES (14, 3, '榫欐硥', NULL, 3, 1, NULL, 1, 'Tue Sep 23 2025 11:38:28 GMT+0800 (GMT+08:00)', 1, 'Tue Sep 23 2025 11:38:28 GMT+0800 (GMT+08:00)', 1, 0);
+INSERT INTO `t_region` (`id`, `pid`, `name`, `code`, `level`, `leaf_flag`, `full_path`, `state`, `create_time`, `create_user_id`, `update_time`, `update_user_id`, `version`) VALUES (15, 3, '闈掔櫧姹�', NULL, 3, 1, NULL, 1, 'Tue Sep 23 2025 11:38:28 GMT+0800 (GMT+08:00)', 1, 'Tue Sep 23 2025 11:38:28 GMT+0800 (GMT+08:00)', 1, 0);
+INSERT INTO `t_region` (`id`, `pid`, `name`, `code`, `level`, `leaf_flag`, `full_path`, `state`, `create_time`, `create_user_id`, `update_time`, `update_user_id`, `version`) VALUES (16, 3, '鏂伴兘', NULL, 3, 1, NULL, 1, 'Tue Sep 23 2025 11:38:28 GMT+0800 (GMT+08:00)', 1, 'Tue Sep 23 2025 11:38:28 GMT+0800 (GMT+08:00)', 1, 0);
+INSERT INTO `t_region` (`id`, `pid`, `name`, `code`, `level`, `leaf_flag`, `full_path`, `state`, `create_time`, `create_user_id`, `update_time`, `update_user_id`, `version`) VALUES (17, 3, '娓╂睙', NULL, 3, 1, NULL, 1, 'Tue Sep 23 2025 11:38:28 GMT+0800 (GMT+08:00)', 1, 'Tue Sep 23 2025 11:38:28 GMT+0800 (GMT+08:00)', 1, 0);
+INSERT INTO `t_region` (`id`, `pid`, `name`, `code`, `level`, `leaf_flag`, `full_path`, `state`, `create_time`, `create_user_id`, `update_time`, `update_user_id`, `version`) VALUES (18, 3, '鍙屾祦', NULL, 3, 1, NULL, 1, 'Tue Sep 23 2025 11:38:28 GMT+0800 (GMT+08:00)', 1, 'Tue Sep 23 2025 11:38:28 GMT+0800 (GMT+08:00)', 1, 0);
+INSERT INTO `t_region` (`id`, `pid`, `name`, `code`, `level`, `leaf_flag`, `full_path`, `state`, `create_time`, `create_user_id`, `update_time`, `update_user_id`, `version`) VALUES (19, 3, '閮兘', NULL, 3, 1, NULL, 1, 'Tue Sep 23 2025 11:38:28 GMT+0800 (GMT+08:00)', 1, 'Tue Sep 23 2025 11:38:28 GMT+0800 (GMT+08:00)', 1, 0);
+INSERT INTO `t_region` (`id`, `pid`, `name`, `code`, `level`, `leaf_flag`, `full_path`, `state`, `create_time`, `create_user_id`, `update_time`, `update_user_id`, `version`) VALUES (20, 3, '绠�闃�', NULL, 3, 1, NULL, 1, 'Tue Sep 23 2025 11:38:28 GMT+0800 (GMT+08:00)', 1, 'Tue Sep 23 2025 11:38:28 GMT+0800 (GMT+08:00)', 1, 0);
+INSERT INTO `t_region` (`id`, `pid`, `name`, `code`, `level`, `leaf_flag`, `full_path`, `state`, `create_time`, `create_user_id`, `update_time`, `update_user_id`, `version`) VALUES (21, 3, '閮芥睙鍫�', NULL, 3, 1, NULL, 1, 'Tue Sep 23 2025 11:38:28 GMT+0800 (GMT+08:00)', 1, 'Tue Sep 23 2025 11:38:28 GMT+0800 (GMT+08:00)', 1, 0);
+INSERT INTO `t_region` (`id`, `pid`, `name`, `code`, `level`, `leaf_flag`, `full_path`, `state`, `create_time`, `create_user_id`, `update_time`, `update_user_id`, `version`) VALUES (22, 3, '褰窞', NULL, 3, 1, NULL, 1, 'Tue Sep 23 2025 11:38:28 GMT+0800 (GMT+08:00)', 1, 'Tue Sep 23 2025 11:38:28 GMT+0800 (GMT+08:00)', 1, 0);
+INSERT INTO `t_region` (`id`, `pid`, `name`, `code`, `level`, `leaf_flag`, `full_path`, `state`, `create_time`, `create_user_id`, `update_time`, `update_user_id`, `version`) VALUES (23, 3, '閭涘磧', NULL, 3, 1, NULL, 1, 'Tue Sep 23 2025 11:38:28 GMT+0800 (GMT+08:00)', 1, 'Tue Sep 23 2025 11:38:28 GMT+0800 (GMT+08:00)', 1, 0);
+INSERT INTO `t_region` (`id`, `pid`, `name`, `code`, `level`, `leaf_flag`, `full_path`, `state`, `create_time`, `create_user_id`, `update_time`, `update_user_id`, `version`) VALUES (24, 3, '宕囧窞', NULL, 3, 1, NULL, 1, 'Tue Sep 23 2025 11:38:28 GMT+0800 (GMT+08:00)', 1, 'Tue Sep 23 2025 11:38:28 GMT+0800 (GMT+08:00)', 1, 0);
+INSERT INTO `t_region` (`id`, `pid`, `name`, `code`, `level`, `leaf_flag`, `full_path`, `state`, `create_time`, `create_user_id`, `update_time`, `update_user_id`, `version`) VALUES (25, 3, '閲戝爞', NULL, 3, 1, NULL, 1, 'Tue Sep 23 2025 11:38:28 GMT+0800 (GMT+08:00)', 1, 'Tue Sep 23 2025 11:38:28 GMT+0800 (GMT+08:00)', 1, 0);
+INSERT INTO `t_region` (`id`, `pid`, `name`, `code`, `level`, `leaf_flag`, `full_path`, `state`, `create_time`, `create_user_id`, `update_time`, `update_user_id`, `version`) VALUES (26, 3, '鏂版触', NULL, 3, 1, NULL, 1, 'Tue Sep 23 2025 11:38:28 GMT+0800 (GMT+08:00)', 1, 'Tue Sep 23 2025 11:38:28 GMT+0800 (GMT+08:00)', 1, 0);
+INSERT INTO `t_region` (`id`, `pid`, `name`, `code`, `level`, `leaf_flag`, `full_path`, `state`, `create_time`, `create_user_id`, `update_time`, `update_user_id`, `version`) VALUES (27, 3, '澶ч倯', NULL, 3, 1, NULL, 1, 'Tue Sep 23 2025 11:38:28 GMT+0800 (GMT+08:00)', 1, 'Tue Sep 23 2025 11:38:28 GMT+0800 (GMT+08:00)', 1, 0);
+INSERT INTO `t_region` (`id`, `pid`, `name`, `code`, `level`, `leaf_flag`, `full_path`, `state`, `create_time`, `create_user_id`, `update_time`, `update_user_id`, `version`) VALUES (28, 3, '钂叉睙', NULL, 3, 1, NULL, 1, 'Tue Sep 23 2025 11:38:28 GMT+0800 (GMT+08:00)', 1, 'Tue Sep 23 2025 11:38:28 GMT+0800 (GMT+08:00)', 1, 0);
+INSERT INTO `t_region` (`id`, `pid`, `name`, `code`, `level`, `leaf_flag`, `full_path`, `state`, `create_time`, `create_user_id`, `update_time`, `update_user_id`, `version`) VALUES (29, 1, '璧勯槼', NULL, 2, 1, NULL, 1, 'Tue Sep 23 2025 19:14:08 GMT+0800 (GMT+08:00)', 1, 'Tue Sep 23 2025 19:14:08 GMT+0800 (GMT+08:00)', 1, 0);
+
+-- ----------------------------
 -- Table structure for t_role
 -- ----------------------------
 DROP TABLE IF EXISTS `t_role`;
@@ -451,6 +641,14 @@
 ) ENGINE=InnoDB AUTO_INCREMENT=20 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
 
 -- ----------------------------
+-- Records of t_role
+-- ----------------------------
+INSERT INTO `t_role` (`id`, `code`, `name`, `description`, `state`, `create_time`, `create_user_id`, `update_time`, `update_user_id`, `version`) VALUES (7, 'SUPER_ADMIN', '瓒呯骇绠$悊鍛�', 'Full system privileges', 1, 'Fri Sep 19 2025 16:51:12 GMT+0800 (GMT+08:00)', 1, 'Wed Sep 24 2025 14:58:43 GMT+0800 (GMT+08:00)', 1, 0);
+INSERT INTO `t_role` (`id`, `code`, `name`, `description`, `state`, `create_time`, `create_user_id`, `update_time`, `update_user_id`, `version`) VALUES (8, 'AUDITOR', '骞冲彴宸ヤ綔浜哄憳', 'Review player applications', 1, 'Fri Sep 19 2025 16:51:12 GMT+0800 (GMT+08:00)', 1, 'Wed Sep 24 2025 15:05:53 GMT+0800 (GMT+08:00)', 1, 0);
+INSERT INTO `t_role` (`id`, `code`, `name`, `description`, `state`, `create_time`, `create_user_id`, `update_time`, `update_user_id`, `version`) VALUES (9, 'JUDGE_MANAGER', '璇勫', 'Manage judges and competition stages', 1, 'Fri Sep 19 2025 16:51:12 GMT+0800 (GMT+08:00)', 1, 'Wed Sep 24 2025 14:58:42 GMT+0800 (GMT+08:00)', 1, 0);
+INSERT INTO `t_role` (`id`, `code`, `name`, `description`, `state`, `create_time`, `create_user_id`, `update_time`, `update_user_id`, `version`) VALUES (19, 'PLAYER', '鍙傝禌浜哄憳', '鍙傝禌浜哄憳', 1, 'Wed Sep 24 2025 14:58:36 GMT+0800 (GMT+08:00)', 1, 'Wed Sep 24 2025 14:58:36 GMT+0800 (GMT+08:00)', 1, 1);
+
+-- ----------------------------
 -- Table structure for t_role_permission
 -- ----------------------------
 DROP TABLE IF EXISTS `t_role_permission`;
@@ -466,6 +664,17 @@
   PRIMARY KEY (`id`) USING BTREE,
   KEY `fk_t_role_permission_perm` (`permission_id`) USING BTREE
 ) ENGINE=InnoDB AUTO_INCREMENT=8 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
+
+-- ----------------------------
+-- Records of t_role_permission
+-- ----------------------------
+INSERT INTO `t_role_permission` (`id`, `role_id`, `permission_id`, `create_time`, `create_user_id`, `update_time`, `update_user_id`, `version`) VALUES (1, 7, 9, 'Fri Sep 19 2025 20:32:43 GMT+0800 (GMT+08:00)', NULL, 'Fri Sep 19 2025 20:32:43 GMT+0800 (GMT+08:00)', NULL, 0);
+INSERT INTO `t_role_permission` (`id`, `role_id`, `permission_id`, `create_time`, `create_user_id`, `update_time`, `update_user_id`, `version`) VALUES (2, 7, 10, 'Fri Sep 19 2025 20:32:43 GMT+0800 (GMT+08:00)', NULL, 'Fri Sep 19 2025 20:32:43 GMT+0800 (GMT+08:00)', NULL, 0);
+INSERT INTO `t_role_permission` (`id`, `role_id`, `permission_id`, `create_time`, `create_user_id`, `update_time`, `update_user_id`, `version`) VALUES (3, 7, 11, 'Fri Sep 19 2025 20:32:43 GMT+0800 (GMT+08:00)', NULL, 'Fri Sep 19 2025 20:32:43 GMT+0800 (GMT+08:00)', NULL, 0);
+INSERT INTO `t_role_permission` (`id`, `role_id`, `permission_id`, `create_time`, `create_user_id`, `update_time`, `update_user_id`, `version`) VALUES (4, 7, 12, 'Fri Sep 19 2025 20:32:43 GMT+0800 (GMT+08:00)', NULL, 'Fri Sep 19 2025 20:32:43 GMT+0800 (GMT+08:00)', NULL, 0);
+INSERT INTO `t_role_permission` (`id`, `role_id`, `permission_id`, `create_time`, `create_user_id`, `update_time`, `update_user_id`, `version`) VALUES (5, 8, 10, 'Fri Sep 19 2025 20:32:43 GMT+0800 (GMT+08:00)', NULL, 'Fri Sep 19 2025 20:32:43 GMT+0800 (GMT+08:00)', NULL, 0);
+INSERT INTO `t_role_permission` (`id`, `role_id`, `permission_id`, `create_time`, `create_user_id`, `update_time`, `update_user_id`, `version`) VALUES (6, 9, 11, 'Fri Sep 19 2025 20:32:43 GMT+0800 (GMT+08:00)', NULL, 'Fri Sep 19 2025 20:32:43 GMT+0800 (GMT+08:00)', NULL, 0);
+INSERT INTO `t_role_permission` (`id`, `role_id`, `permission_id`, `create_time`, `create_user_id`, `update_time`, `update_user_id`, `version`) VALUES (7, 9, 12, 'Fri Sep 19 2025 20:32:43 GMT+0800 (GMT+08:00)', NULL, 'Fri Sep 19 2025 20:32:43 GMT+0800 (GMT+08:00)', NULL, 0);
 
 -- ----------------------------
 -- Table structure for t_tag
@@ -487,6 +696,33 @@
   UNIQUE KEY `code` (`code`) USING BTREE,
   KEY `idx_t_tag_category` (`category`) USING BTREE
 ) ENGINE=InnoDB AUTO_INCREMENT=32 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
+
+-- ----------------------------
+-- Records of t_tag
+-- ----------------------------
+INSERT INTO `t_tag` (`id`, `name`, `code`, `category`, `description`, `state`, `create_time`, `create_user_id`, `update_time`, `update_user_id`, `version`) VALUES (1, '鐢�', 'male', 'gender', '鐢锋��', 1, 'Sat Sep 20 2025 15:54:26 GMT+0800 (GMT+08:00)', NULL, 'Sun Sep 21 2025 08:59:09 GMT+0800 (GMT+08:00)', NULL, 0);
+INSERT INTO `t_tag` (`id`, `name`, `code`, `category`, `description`, `state`, `create_time`, `create_user_id`, `update_time`, `update_user_id`, `version`) VALUES (2, '濂�', 'female', 'gender', '濂虫��', 1, 'Sat Sep 20 2025 15:54:27 GMT+0800 (GMT+08:00)', NULL, 'Sun Sep 21 2025 09:07:55 GMT+0800 (GMT+08:00)', NULL, 0);
+INSERT INTO `t_tag` (`id`, `name`, `code`, `category`, `description`, `state`, `create_time`, `create_user_id`, `update_time`, `update_user_id`, `version`) VALUES (3, '楂樹腑', 'high_school', 'education', '楂樹腑瀛﹀巻', 1, 'Sat Sep 20 2025 15:54:27 GMT+0800 (GMT+08:00)', NULL, 'Sun Sep 21 2025 09:07:56 GMT+0800 (GMT+08:00)', NULL, 0);
+INSERT INTO `t_tag` (`id`, `name`, `code`, `category`, `description`, `state`, `create_time`, `create_user_id`, `update_time`, `update_user_id`, `version`) VALUES (4, '澶т笓', 'junior_college', 'education', '澶т笓瀛﹀巻', 1, 'Sat Sep 20 2025 15:54:27 GMT+0800 (GMT+08:00)', NULL, 'Sun Sep 21 2025 09:07:56 GMT+0800 (GMT+08:00)', NULL, 0);
+INSERT INTO `t_tag` (`id`, `name`, `code`, `category`, `description`, `state`, `create_time`, `create_user_id`, `update_time`, `update_user_id`, `version`) VALUES (5, '鏈', 'bachelor', 'education', '鏈瀛﹀巻', 1, 'Sat Sep 20 2025 15:54:27 GMT+0800 (GMT+08:00)', NULL, 'Sun Sep 21 2025 09:07:56 GMT+0800 (GMT+08:00)', NULL, 0);
+INSERT INTO `t_tag` (`id`, `name`, `code`, `category`, `description`, `state`, `create_time`, `create_user_id`, `update_time`, `update_user_id`, `version`) VALUES (6, '纭曞+', 'master', 'education', '纭曞+瀛﹀巻', 1, 'Sat Sep 20 2025 15:54:28 GMT+0800 (GMT+08:00)', NULL, 'Sun Sep 21 2025 09:07:56 GMT+0800 (GMT+08:00)', NULL, 0);
+INSERT INTO `t_tag` (`id`, `name`, `code`, `category`, `description`, `state`, `create_time`, `create_user_id`, `update_time`, `update_user_id`, `version`) VALUES (7, '鍗氬+', 'doctorate', 'education', '鍗氬+瀛﹀巻', 1, 'Sat Sep 20 2025 15:54:28 GMT+0800 (GMT+08:00)', NULL, 'Sun Sep 21 2025 09:07:56 GMT+0800 (GMT+08:00)', NULL, 0);
+INSERT INTO `t_tag` (`id`, `name`, `code`, `category`, `description`, `state`, `create_time`, `create_user_id`, `update_time`, `update_user_id`, `version`) VALUES (8, '閫氳', 'communication', 'major', NULL, 1, 'Sun Sep 21 2025 09:03:51 GMT+0800 (GMT+08:00)', NULL, 'Sun Sep 21 2025 09:03:51 GMT+0800 (GMT+08:00)', NULL, 0);
+INSERT INTO `t_tag` (`id`, `name`, `code`, `category`, `description`, `state`, `create_time`, `create_user_id`, `update_time`, `update_user_id`, `version`) VALUES (9, '闆跺敭', 'retail', 'major', NULL, 1, 'Sun Sep 21 2025 09:03:51 GMT+0800 (GMT+08:00)', NULL, 'Sun Sep 21 2025 09:03:51 GMT+0800 (GMT+08:00)', NULL, 0);
+INSERT INTO `t_tag` (`id`, `name`, `code`, `category`, `description`, `state`, `create_time`, `create_user_id`, `update_time`, `update_user_id`, `version`) VALUES (10, '椁愰ギ', 'catering', 'major', NULL, 1, 'Sun Sep 21 2025 09:03:51 GMT+0800 (GMT+08:00)', NULL, 'Sun Sep 21 2025 09:03:51 GMT+0800 (GMT+08:00)', NULL, 0);
+INSERT INTO `t_tag` (`id`, `name`, `code`, `category`, `description`, `state`, `create_time`, `create_user_id`, `update_time`, `update_user_id`, `version`) VALUES (11, '寤虹瓚', 'architecture', 'major', NULL, 1, 'Sun Sep 21 2025 09:03:51 GMT+0800 (GMT+08:00)', NULL, 'Sun Sep 21 2025 09:03:51 GMT+0800 (GMT+08:00)', NULL, 0);
+INSERT INTO `t_tag` (`id`, `name`, `code`, `category`, `description`, `state`, `create_time`, `create_user_id`, `update_time`, `update_user_id`, `version`) VALUES (12, '鏈嶈', 'clothing', 'major', NULL, 1, 'Sun Sep 21 2025 09:03:51 GMT+0800 (GMT+08:00)', NULL, 'Sun Sep 21 2025 09:03:51 GMT+0800 (GMT+08:00)', NULL, 0);
+INSERT INTO `t_tag` (`id`, `name`, `code`, `category`, `description`, `state`, `create_time`, `create_user_id`, `update_time`, `update_user_id`, `version`) VALUES (13, '璁$畻鏈�', 'computer', 'major', NULL, 1, 'Sun Sep 21 2025 09:03:51 GMT+0800 (GMT+08:00)', NULL, 'Sun Sep 21 2025 09:03:51 GMT+0800 (GMT+08:00)', NULL, 0);
+INSERT INTO `t_tag` (`id`, `name`, `code`, `category`, `description`, `state`, `create_time`, `create_user_id`, `update_time`, `update_user_id`, `version`) VALUES (14, '璁捐', 'design', 'major', '璁捐绫讳笓涓�', 1, 'Sun Sep 21 2025 10:28:57 GMT+0800 (GMT+08:00)', NULL, 'Sun Sep 21 2025 10:28:57 GMT+0800 (GMT+08:00)', NULL, 0);
+INSERT INTO `t_tag` (`id`, `name`, `code`, `category`, `description`, `state`, `create_time`, `create_user_id`, `update_time`, `update_user_id`, `version`) VALUES (15, '缂栫▼', 'programming', 'major', '缂栫▼/杞欢寮�鍙�', 1, 'Sun Sep 21 2025 10:28:57 GMT+0800 (GMT+08:00)', NULL, 'Sun Sep 21 2025 10:28:57 GMT+0800 (GMT+08:00)', NULL, 0);
+INSERT INTO `t_tag` (`id`, `name`, `code`, `category`, `description`, `state`, `create_time`, `create_user_id`, `update_time`, `update_user_id`, `version`) VALUES (16, '甯傚満', 'marketing', 'major', '甯傚満/鍝佺墝', 1, 'Sun Sep 21 2025 10:28:57 GMT+0800 (GMT+08:00)', NULL, 'Sun Sep 21 2025 10:28:57 GMT+0800 (GMT+08:00)', NULL, 0);
+INSERT INTO `t_tag` (`id`, `name`, `code`, `category`, `description`, `state`, `create_time`, `create_user_id`, `update_time`, `update_user_id`, `version`) VALUES (17, '閲戣瀺', 'finance', 'major', '閲戣瀺/璐㈠姟', 1, 'Sun Sep 21 2025 10:28:58 GMT+0800 (GMT+08:00)', NULL, 'Sun Sep 21 2025 10:28:58 GMT+0800 (GMT+08:00)', NULL, 0);
+INSERT INTO `t_tag` (`id`, `name`, `code`, `category`, `description`, `state`, `create_time`, `create_user_id`, `update_time`, `update_user_id`, `version`) VALUES (18, '绠$悊', 'management', 'major', '绠$悊/杩愯惀', 1, 'Sun Sep 21 2025 10:28:58 GMT+0800 (GMT+08:00)', NULL, 'Sun Sep 21 2025 10:28:58 GMT+0800 (GMT+08:00)', NULL, 0);
+INSERT INTO `t_tag` (`id`, `name`, `code`, `category`, `description`, `state`, `create_time`, `create_user_id`, `update_time`, `update_user_id`, `version`) VALUES (27, 'Java寮�鍙�', 'java', 'major', NULL, 1, 'Sun Sep 21 2025 20:17:23 GMT+0800 (GMT+08:00)', NULL, 'Sun Sep 21 2025 20:17:23 GMT+0800 (GMT+08:00)', NULL, 0);
+INSERT INTO `t_tag` (`id`, `name`, `code`, `category`, `description`, `state`, `create_time`, `create_user_id`, `update_time`, `update_user_id`, `version`) VALUES (28, '鍓嶇寮�鍙�', 'frontend', 'major', NULL, 1, 'Sun Sep 21 2025 20:17:23 GMT+0800 (GMT+08:00)', NULL, 'Sun Sep 21 2025 20:17:23 GMT+0800 (GMT+08:00)', NULL, 0);
+INSERT INTO `t_tag` (`id`, `name`, `code`, `category`, `description`, `state`, `create_time`, `create_user_id`, `update_time`, `update_user_id`, `version`) VALUES (29, '浜戣绠�', '浜戣绠�', '鎶�鏈�', NULL, 1, 'Sun Sep 21 2025 20:38:06 GMT+0800 (GMT+08:00)', NULL, 'Sun Sep 21 2025 20:38:06 GMT+0800 (GMT+08:00)', NULL, 0);
+INSERT INTO `t_tag` (`id`, `name`, `code`, `category`, `description`, `state`, `create_time`, `create_user_id`, `update_time`, `update_user_id`, `version`) VALUES (30, '澶ф暟鎹�', '澶ф暟鎹�', '鎶�鏈�', NULL, 1, 'Sun Sep 21 2025 20:38:07 GMT+0800 (GMT+08:00)', NULL, 'Sun Sep 21 2025 20:38:07 GMT+0800 (GMT+08:00)', NULL, 0);
+INSERT INTO `t_tag` (`id`, `name`, `code`, `category`, `description`, `state`, `create_time`, `create_user_id`, `update_time`, `update_user_id`, `version`) VALUES (31, '鏋舵瀯璁捐', '鏋舵瀯璁捐', '鎶�鏈�', NULL, 1, 'Sun Sep 21 2025 20:38:07 GMT+0800 (GMT+08:00)', NULL, 'Sun Sep 21 2025 20:38:07 GMT+0800 (GMT+08:00)', NULL, 0);
 
 -- ----------------------------
 -- Table structure for t_user
@@ -512,7 +748,84 @@
   PRIMARY KEY (`id`) USING BTREE,
   UNIQUE KEY `uq_wx_open_id` (`wx_openid`) USING BTREE,
   UNIQUE KEY `uq_phone` (`phone`)
-) ENGINE=InnoDB AUTO_INCREMENT=133 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
+) ENGINE=InnoDB AUTO_INCREMENT=134 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
+
+-- ----------------------------
+-- Records of t_user
+-- ----------------------------
+INSERT INTO `t_user` (`id`, `name`, `gender`, `phone`, `birthday`, `wx_openid`, `wx_unionid`, `wx_oa_openid`, `password`, `state`, `create_time`, `create_user_id`, `update_time`, `update_user_id`, `version`, `mobile`) VALUES (2, 'UK2025', NULL, '13981970816', 'Tue Sep 30 2025 00:00:00 GMT+0800 (GMT+08:00)', 'test_admin_openid_123456', 'test_admin_unionid_123456', NULL, '$2a$10$hqbLL9GW5hG/MCehHt3E4evtNLxMil8vyj46vNulVwVaXLsHQVFvK', 1, 'Sat Sep 20 2025 18:49:14 GMT+0800 (GMT+08:00)', NULL, 'Tue Sep 30 2025 14:21:08 GMT+0800 (GMT+08:00)', NULL, 13, '13800138000');
+INSERT INTO `t_user` (`id`, `name`, `gender`, `phone`, `birthday`, `wx_openid`, `wx_unionid`, `wx_oa_openid`, `password`, `state`, `create_time`, `create_user_id`, `update_time`, `update_user_id`, `version`, `mobile`) VALUES (3, '鎵归噺鐢ㄦ埛1', NULL, NULL, NULL, 'wx_openid_batch_1', 'wx_unionid_batch_1', NULL, NULL, 1, 'Tue Sep 23 2025 19:39:32 GMT+0800 (GMT+08:00)', NULL, 'Tue Sep 23 2025 19:39:32 GMT+0800 (GMT+08:00)', NULL, 0, '13800010001');
+INSERT INTO `t_user` (`id`, `name`, `gender`, `phone`, `birthday`, `wx_openid`, `wx_unionid`, `wx_oa_openid`, `password`, `state`, `create_time`, `create_user_id`, `update_time`, `update_user_id`, `version`, `mobile`) VALUES (4, '鎵归噺鐢ㄦ埛2', NULL, NULL, NULL, 'wx_openid_batch_2', 'wx_unionid_batch_2', NULL, NULL, 1, 'Tue Sep 23 2025 19:39:32 GMT+0800 (GMT+08:00)', NULL, 'Tue Sep 23 2025 19:39:32 GMT+0800 (GMT+08:00)', NULL, 0, '13800010002');
+INSERT INTO `t_user` (`id`, `name`, `gender`, `phone`, `birthday`, `wx_openid`, `wx_unionid`, `wx_oa_openid`, `password`, `state`, `create_time`, `create_user_id`, `update_time`, `update_user_id`, `version`, `mobile`) VALUES (5, '鎵归噺鐢ㄦ埛3', NULL, NULL, NULL, 'wx_openid_batch_3', 'wx_unionid_batch_3', NULL, NULL, 1, 'Tue Sep 23 2025 19:39:32 GMT+0800 (GMT+08:00)', NULL, 'Tue Sep 23 2025 19:39:32 GMT+0800 (GMT+08:00)', NULL, 0, '13800010003');
+INSERT INTO `t_user` (`id`, `name`, `gender`, `phone`, `birthday`, `wx_openid`, `wx_unionid`, `wx_oa_openid`, `password`, `state`, `create_time`, `create_user_id`, `update_time`, `update_user_id`, `version`, `mobile`) VALUES (6, '鎵归噺鐢ㄦ埛4', NULL, NULL, NULL, 'wx_openid_batch_4', 'wx_unionid_batch_4', NULL, NULL, 1, 'Tue Sep 23 2025 19:39:32 GMT+0800 (GMT+08:00)', NULL, 'Tue Sep 23 2025 19:39:32 GMT+0800 (GMT+08:00)', NULL, 0, '13800010004');
+INSERT INTO `t_user` (`id`, `name`, `gender`, `phone`, `birthday`, `wx_openid`, `wx_unionid`, `wx_oa_openid`, `password`, `state`, `create_time`, `create_user_id`, `update_time`, `update_user_id`, `version`, `mobile`) VALUES (7, '鎵归噺鐢ㄦ埛5', NULL, NULL, NULL, 'wx_openid_batch_5', 'wx_unionid_batch_5', NULL, NULL, 1, 'Tue Sep 23 2025 19:39:32 GMT+0800 (GMT+08:00)', NULL, 'Tue Sep 23 2025 19:39:32 GMT+0800 (GMT+08:00)', NULL, 0, '13800010005');
+INSERT INTO `t_user` (`id`, `name`, `gender`, `phone`, `birthday`, `wx_openid`, `wx_unionid`, `wx_oa_openid`, `password`, `state`, `create_time`, `create_user_id`, `update_time`, `update_user_id`, `version`, `mobile`) VALUES (8, '鎵归噺鐢ㄦ埛6', NULL, NULL, NULL, 'wx_openid_batch_6', 'wx_unionid_batch_6', NULL, NULL, 1, 'Tue Sep 23 2025 19:39:32 GMT+0800 (GMT+08:00)', NULL, 'Tue Sep 23 2025 19:39:32 GMT+0800 (GMT+08:00)', NULL, 0, '13800010006');
+INSERT INTO `t_user` (`id`, `name`, `gender`, `phone`, `birthday`, `wx_openid`, `wx_unionid`, `wx_oa_openid`, `password`, `state`, `create_time`, `create_user_id`, `update_time`, `update_user_id`, `version`, `mobile`) VALUES (9, '鎵归噺鐢ㄦ埛7', NULL, NULL, NULL, 'wx_openid_batch_7', 'wx_unionid_batch_7', NULL, NULL, 1, 'Tue Sep 23 2025 19:39:32 GMT+0800 (GMT+08:00)', NULL, 'Tue Sep 23 2025 19:39:32 GMT+0800 (GMT+08:00)', NULL, 0, '13800010007');
+INSERT INTO `t_user` (`id`, `name`, `gender`, `phone`, `birthday`, `wx_openid`, `wx_unionid`, `wx_oa_openid`, `password`, `state`, `create_time`, `create_user_id`, `update_time`, `update_user_id`, `version`, `mobile`) VALUES (10, '鎵归噺鐢ㄦ埛8', NULL, NULL, NULL, 'wx_openid_batch_8', 'wx_unionid_batch_8', NULL, NULL, 1, 'Tue Sep 23 2025 19:39:32 GMT+0800 (GMT+08:00)', NULL, 'Tue Sep 23 2025 19:39:32 GMT+0800 (GMT+08:00)', NULL, 0, '13800010008');
+INSERT INTO `t_user` (`id`, `name`, `gender`, `phone`, `birthday`, `wx_openid`, `wx_unionid`, `wx_oa_openid`, `password`, `state`, `create_time`, `create_user_id`, `update_time`, `update_user_id`, `version`, `mobile`) VALUES (11, '鎵归噺鐢ㄦ埛9', NULL, NULL, NULL, 'wx_openid_batch_9', 'wx_unionid_batch_9', NULL, NULL, 1, 'Tue Sep 23 2025 19:39:32 GMT+0800 (GMT+08:00)', NULL, 'Tue Sep 23 2025 19:39:32 GMT+0800 (GMT+08:00)', NULL, 0, '13800010009');
+INSERT INTO `t_user` (`id`, `name`, `gender`, `phone`, `birthday`, `wx_openid`, `wx_unionid`, `wx_oa_openid`, `password`, `state`, `create_time`, `create_user_id`, `update_time`, `update_user_id`, `version`, `mobile`) VALUES (12, '鎵归噺鐢ㄦ埛10', NULL, NULL, NULL, 'wx_openid_batch_10', 'wx_unionid_batch_10', NULL, NULL, 1, 'Tue Sep 23 2025 19:39:32 GMT+0800 (GMT+08:00)', NULL, 'Tue Sep 23 2025 19:39:32 GMT+0800 (GMT+08:00)', NULL, 0, '13800010010');
+INSERT INTO `t_user` (`id`, `name`, `gender`, `phone`, `birthday`, `wx_openid`, `wx_unionid`, `wx_oa_openid`, `password`, `state`, `create_time`, `create_user_id`, `update_time`, `update_user_id`, `version`, `mobile`) VALUES (13, '鎵归噺鐢ㄦ埛11', NULL, NULL, NULL, 'wx_openid_batch_11', 'wx_unionid_batch_11', NULL, NULL, 1, 'Tue Sep 23 2025 19:39:32 GMT+0800 (GMT+08:00)', NULL, 'Tue Sep 23 2025 19:39:32 GMT+0800 (GMT+08:00)', NULL, 0, '13800010011');
+INSERT INTO `t_user` (`id`, `name`, `gender`, `phone`, `birthday`, `wx_openid`, `wx_unionid`, `wx_oa_openid`, `password`, `state`, `create_time`, `create_user_id`, `update_time`, `update_user_id`, `version`, `mobile`) VALUES (14, '鎵归噺鐢ㄦ埛12', NULL, NULL, NULL, 'wx_openid_batch_12', 'wx_unionid_batch_12', NULL, NULL, 1, 'Tue Sep 23 2025 19:39:32 GMT+0800 (GMT+08:00)', NULL, 'Tue Sep 23 2025 19:39:32 GMT+0800 (GMT+08:00)', NULL, 0, '13800010012');
+INSERT INTO `t_user` (`id`, `name`, `gender`, `phone`, `birthday`, `wx_openid`, `wx_unionid`, `wx_oa_openid`, `password`, `state`, `create_time`, `create_user_id`, `update_time`, `update_user_id`, `version`, `mobile`) VALUES (15, '鎵归噺鐢ㄦ埛13', NULL, NULL, NULL, 'wx_openid_batch_13', 'wx_unionid_batch_13', NULL, NULL, 1, 'Tue Sep 23 2025 19:39:32 GMT+0800 (GMT+08:00)', NULL, 'Tue Sep 23 2025 19:39:32 GMT+0800 (GMT+08:00)', NULL, 0, '13800010013');
+INSERT INTO `t_user` (`id`, `name`, `gender`, `phone`, `birthday`, `wx_openid`, `wx_unionid`, `wx_oa_openid`, `password`, `state`, `create_time`, `create_user_id`, `update_time`, `update_user_id`, `version`, `mobile`) VALUES (16, '鎵归噺鐢ㄦ埛14', NULL, NULL, NULL, 'wx_openid_batch_14', 'wx_unionid_batch_14', NULL, NULL, 1, 'Tue Sep 23 2025 19:39:32 GMT+0800 (GMT+08:00)', NULL, 'Tue Sep 23 2025 19:39:32 GMT+0800 (GMT+08:00)', NULL, 0, '13800010014');
+INSERT INTO `t_user` (`id`, `name`, `gender`, `phone`, `birthday`, `wx_openid`, `wx_unionid`, `wx_oa_openid`, `password`, `state`, `create_time`, `create_user_id`, `update_time`, `update_user_id`, `version`, `mobile`) VALUES (17, '鎵归噺鐢ㄦ埛15', NULL, NULL, NULL, 'wx_openid_batch_15', 'wx_unionid_batch_15', NULL, NULL, 1, 'Tue Sep 23 2025 19:39:32 GMT+0800 (GMT+08:00)', NULL, 'Tue Sep 23 2025 19:39:32 GMT+0800 (GMT+08:00)', NULL, 0, '13800010015');
+INSERT INTO `t_user` (`id`, `name`, `gender`, `phone`, `birthday`, `wx_openid`, `wx_unionid`, `wx_oa_openid`, `password`, `state`, `create_time`, `create_user_id`, `update_time`, `update_user_id`, `version`, `mobile`) VALUES (18, '鎵归噺鐢ㄦ埛16', NULL, NULL, NULL, 'wx_openid_batch_16', 'wx_unionid_batch_16', NULL, NULL, 1, 'Tue Sep 23 2025 19:39:32 GMT+0800 (GMT+08:00)', NULL, 'Tue Sep 23 2025 19:39:32 GMT+0800 (GMT+08:00)', NULL, 0, '13800010016');
+INSERT INTO `t_user` (`id`, `name`, `gender`, `phone`, `birthday`, `wx_openid`, `wx_unionid`, `wx_oa_openid`, `password`, `state`, `create_time`, `create_user_id`, `update_time`, `update_user_id`, `version`, `mobile`) VALUES (19, '鎵归噺鐢ㄦ埛17', NULL, NULL, NULL, 'wx_openid_batch_17', 'wx_unionid_batch_17', NULL, NULL, 1, 'Tue Sep 23 2025 19:39:32 GMT+0800 (GMT+08:00)', NULL, 'Tue Sep 23 2025 19:39:32 GMT+0800 (GMT+08:00)', NULL, 0, '13800010017');
+INSERT INTO `t_user` (`id`, `name`, `gender`, `phone`, `birthday`, `wx_openid`, `wx_unionid`, `wx_oa_openid`, `password`, `state`, `create_time`, `create_user_id`, `update_time`, `update_user_id`, `version`, `mobile`) VALUES (20, '鎵归噺鐢ㄦ埛18', NULL, NULL, NULL, 'wx_openid_batch_18', 'wx_unionid_batch_18', NULL, NULL, 1, 'Tue Sep 23 2025 19:39:32 GMT+0800 (GMT+08:00)', NULL, 'Tue Sep 23 2025 19:39:32 GMT+0800 (GMT+08:00)', NULL, 0, '13800010018');
+INSERT INTO `t_user` (`id`, `name`, `gender`, `phone`, `birthday`, `wx_openid`, `wx_unionid`, `wx_oa_openid`, `password`, `state`, `create_time`, `create_user_id`, `update_time`, `update_user_id`, `version`, `mobile`) VALUES (21, '鎵归噺鐢ㄦ埛19', NULL, NULL, NULL, 'wx_openid_batch_19', 'wx_unionid_batch_19', NULL, NULL, 1, 'Tue Sep 23 2025 19:39:32 GMT+0800 (GMT+08:00)', NULL, 'Tue Sep 23 2025 19:39:32 GMT+0800 (GMT+08:00)', NULL, 0, '13800010019');
+INSERT INTO `t_user` (`id`, `name`, `gender`, `phone`, `birthday`, `wx_openid`, `wx_unionid`, `wx_oa_openid`, `password`, `state`, `create_time`, `create_user_id`, `update_time`, `update_user_id`, `version`, `mobile`) VALUES (22, '鎵归噺鐢ㄦ埛20', NULL, NULL, NULL, 'wx_openid_batch_20', 'wx_unionid_batch_20', NULL, NULL, 1, 'Tue Sep 23 2025 19:39:32 GMT+0800 (GMT+08:00)', NULL, 'Tue Sep 23 2025 19:39:32 GMT+0800 (GMT+08:00)', NULL, 0, '13800010020');
+INSERT INTO `t_user` (`id`, `name`, `gender`, `phone`, `birthday`, `wx_openid`, `wx_unionid`, `wx_oa_openid`, `password`, `state`, `create_time`, `create_user_id`, `update_time`, `update_user_id`, `version`, `mobile`) VALUES (23, 'abc', NULL, '13412341234', NULL, NULL, NULL, NULL, NULL, 1, 'Wed Sep 24 2025 18:49:44 GMT+0800 (GMT+08:00)', NULL, 'Wed Sep 24 2025 18:49:44 GMT+0800 (GMT+08:00)', NULL, 0, NULL);
+INSERT INTO `t_user` (`id`, `name`, `gender`, `phone`, `birthday`, `wx_openid`, `wx_unionid`, `wx_oa_openid`, `password`, `state`, `create_time`, `create_user_id`, `update_time`, `update_user_id`, `version`, `mobile`) VALUES (24, 'owen2', NULL, '13512351233', NULL, NULL, NULL, NULL, '$2a$10$8Kxiwl7Y6ZPBbcXvVnAcse5nKFiEv4PwfSjTcfvST73OeWlxOh1fO', 1, 'Wed Sep 24 2025 18:59:30 GMT+0800 (GMT+08:00)', NULL, 'Wed Sep 24 2025 20:58:22 GMT+0800 (GMT+08:00)', NULL, 0, NULL);
+INSERT INTO `t_user` (`id`, `name`, `gender`, `phone`, `birthday`, `wx_openid`, `wx_unionid`, `wx_oa_openid`, `password`, `state`, `create_time`, `create_user_id`, `update_time`, `update_user_id`, `version`, `mobile`) VALUES (25, 'charon', NULL, '13312341231', NULL, NULL, NULL, NULL, '$2a$10$sCG7ZH8r7K1uuXVtILRAO.AHZ8ICf/RhaVLKYquL9zn59M8JOXJJ6', 1, 'Wed Sep 24 2025 19:12:15 GMT+0800 (GMT+08:00)', NULL, 'Wed Sep 24 2025 19:12:15 GMT+0800 (GMT+08:00)', NULL, 0, NULL);
+INSERT INTO `t_user` (`id`, `name`, `gender`, `phone`, `birthday`, `wx_openid`, `wx_unionid`, `wx_oa_openid`, `password`, `state`, `create_time`, `create_user_id`, `update_time`, `update_user_id`, `version`, `mobile`) VALUES (26, '骞呭害杈惧埌', NULL, '13612341233', NULL, NULL, NULL, NULL, '$2a$10$Kni9VyfMaDfPPSKqBFsXSOx42xjHuYIl5m.TzCWc2.qSNGiZwTc4i', 1, 'Wed Sep 24 2025 19:36:52 GMT+0800 (GMT+08:00)', NULL, 'Wed Sep 24 2025 19:36:52 GMT+0800 (GMT+08:00)', NULL, 0, NULL);
+INSERT INTO `t_user` (`id`, `name`, `gender`, `phone`, `birthday`, `wx_openid`, `wx_unionid`, `wx_oa_openid`, `password`, `state`, `create_time`, `create_user_id`, `update_time`, `update_user_id`, `version`, `mobile`) VALUES (29, '澶氳鑹叉祴璇曠敤鎴�', NULL, NULL, NULL, 'test_multi_role_openid', 'test_multi_role_unionid', NULL, '$2a$10$iYNVWrYeTv3zd921sWkuGO5iqlaO8W03U0.N5d/LQUTcbq2PGzGd.', 1, 'Wed Sep 24 2025 21:08:16 GMT+0800 (GMT+08:00)', NULL, 'Wed Sep 24 2025 21:08:16 GMT+0800 (GMT+08:00)', NULL, 0, '13800000003');
+INSERT INTO `t_user` (`id`, `name`, `gender`, `phone`, `birthday`, `wx_openid`, `wx_unionid`, `wx_oa_openid`, `password`, `state`, `create_time`, `create_user_id`, `update_time`, `update_user_id`, `version`, `mobile`) VALUES (32, '娴嬭瘯鍛樺伐Service', NULL, '13900000003', NULL, NULL, NULL, NULL, '$2a$10$HeGs60KbbI94jNjgx81BOeextvSPcIjSxfnGhk1aH9SwznJannnem', 1, 'Wed Sep 24 2025 22:26:40 GMT+0800 (GMT+08:00)', NULL, 'Wed Sep 24 2025 22:26:40 GMT+0800 (GMT+08:00)', NULL, 0, NULL);
+INSERT INTO `t_user` (`id`, `name`, `gender`, `phone`, `birthday`, `wx_openid`, `wx_unionid`, `wx_oa_openid`, `password`, `state`, `create_time`, `create_user_id`, `update_time`, `update_user_id`, `version`, `mobile`) VALUES (33, '?????GraphQL', NULL, '13900000004', NULL, NULL, NULL, NULL, '$2a$10$gkpg6pLmJ1LqLao8JAToserhGcFY92jq07PKyTn8N.pSzhedOaj0G', 1, 'Wed Sep 24 2025 22:26:50 GMT+0800 (GMT+08:00)', NULL, 'Wed Sep 24 2025 22:26:50 GMT+0800 (GMT+08:00)', NULL, 0, NULL);
+INSERT INTO `t_user` (`id`, `name`, `gender`, `phone`, `birthday`, `wx_openid`, `wx_unionid`, `wx_oa_openid`, `password`, `state`, `create_time`, `create_user_id`, `update_time`, `update_user_id`, `version`, `mobile`) VALUES (34, '?????GraphQL2', NULL, '13900000005', NULL, NULL, NULL, NULL, '$2a$10$lugKOumFCa32vFPYhFl2O.M0rdDPbJjUE0T0bOQEDZS5LyT88sacy', 1, 'Wed Sep 24 2025 22:27:01 GMT+0800 (GMT+08:00)', NULL, 'Wed Sep 24 2025 22:27:01 GMT+0800 (GMT+08:00)', NULL, 0, NULL);
+INSERT INTO `t_user` (`id`, `name`, `gender`, `phone`, `birthday`, `wx_openid`, `wx_unionid`, `wx_oa_openid`, `password`, `state`, `create_time`, `create_user_id`, `update_time`, `update_user_id`, `version`, `mobile`) VALUES (35, 'uK', NULL, '13412341222', NULL, NULL, NULL, NULL, '$2a$10$pHtlOvXum0.wqzRkJ3gxte38JpAmUCuLQKw.HfWeUf9HfcZ0vzIpS', 1, 'Wed Sep 24 2025 22:29:32 GMT+0800 (GMT+08:00)', NULL, 'Wed Sep 24 2025 22:29:32 GMT+0800 (GMT+08:00)', NULL, 0, NULL);
+INSERT INTO `t_user` (`id`, `name`, `gender`, `phone`, `birthday`, `wx_openid`, `wx_unionid`, `wx_oa_openid`, `password`, `state`, `create_time`, `create_user_id`, `update_time`, `update_user_id`, `version`, `mobile`) VALUES (36, 'Test Employee Edit - Modified', NULL, '13900000010', NULL, NULL, NULL, NULL, '$2a$10$mlnfm/AhpxypAjN8fknLmuBvNdA7mRZyzZ5fwKsd9uQh.0cydCEsm', 1, 'Wed Sep 24 2025 22:31:42 GMT+0800 (GMT+08:00)', NULL, 'Wed Sep 24 2025 22:31:43 GMT+0800 (GMT+08:00)', NULL, 0, NULL);
+INSERT INTO `t_user` (`id`, `name`, `gender`, `phone`, `birthday`, `wx_openid`, `wx_unionid`, `wx_oa_openid`, `password`, `state`, `create_time`, `create_user_id`, `update_time`, `update_user_id`, `version`, `mobile`) VALUES (37, 'Test', NULL, '13900000011', NULL, NULL, NULL, NULL, '$2a$10$7Cw66wTO3WoW7LAFGHQV8OnYeqH4iPkueCasFQQ9ID9bFaxUcvFTu', 1, 'Wed Sep 24 2025 22:33:36 GMT+0800 (GMT+08:00)', NULL, 'Wed Sep 24 2025 22:33:36 GMT+0800 (GMT+08:00)', NULL, 0, NULL);
+INSERT INTO `t_user` (`id`, `name`, `gender`, `phone`, `birthday`, `wx_openid`, `wx_unionid`, `wx_oa_openid`, `password`, `state`, `create_time`, `create_user_id`, `update_time`, `update_user_id`, `version`, `mobile`) VALUES (53, '寰俊鐢ㄦ埛', NULL, NULL, NULL, 'test123', NULL, NULL, NULL, 1, 'Thu Sep 25 2025 22:27:11 GMT+0800 (GMT+08:00)', NULL, 'Thu Sep 25 2025 22:27:11 GMT+0800 (GMT+08:00)', NULL, 0, NULL);
+INSERT INTO `t_user` (`id`, `name`, `gender`, `phone`, `birthday`, `wx_openid`, `wx_unionid`, `wx_oa_openid`, `password`, `state`, `create_time`, `create_user_id`, `update_time`, `update_user_id`, `version`, `mobile`) VALUES (54, '寰俊鐢ㄦ埛', NULL, NULL, NULL, 'test_openid_123', NULL, NULL, NULL, 1, 'Thu Sep 25 2025 22:34:26 GMT+0800 (GMT+08:00)', NULL, 'Thu Sep 25 2025 22:34:26 GMT+0800 (GMT+08:00)', NULL, 0, NULL);
+INSERT INTO `t_user` (`id`, `name`, `gender`, `phone`, `birthday`, `wx_openid`, `wx_unionid`, `wx_oa_openid`, `password`, `state`, `create_time`, `create_user_id`, `update_time`, `update_user_id`, `version`, `mobile`) VALUES (55, '寰俊鐢ㄦ埛', NULL, NULL, NULL, 'test_openid_456', NULL, NULL, NULL, 1, 'Thu Sep 25 2025 22:38:13 GMT+0800 (GMT+08:00)', NULL, 'Thu Sep 25 2025 22:38:13 GMT+0800 (GMT+08:00)', NULL, 0, NULL);
+INSERT INTO `t_user` (`id`, `name`, `gender`, `phone`, `birthday`, `wx_openid`, `wx_unionid`, `wx_oa_openid`, `password`, `state`, `create_time`, `create_user_id`, `update_time`, `update_user_id`, `version`, `mobile`) VALUES (56, '寰俊鐢ㄦ埛', NULL, NULL, NULL, 'test_openid_789', NULL, NULL, NULL, 1, 'Thu Sep 25 2025 22:38:25 GMT+0800 (GMT+08:00)', NULL, 'Thu Sep 25 2025 22:38:25 GMT+0800 (GMT+08:00)', NULL, 0, NULL);
+INSERT INTO `t_user` (`id`, `name`, `gender`, `phone`, `birthday`, `wx_openid`, `wx_unionid`, `wx_oa_openid`, `password`, `state`, `create_time`, `create_user_id`, `update_time`, `update_user_id`, `version`, `mobile`) VALUES (57, '寰俊鐢ㄦ埛', NULL, NULL, NULL, 'test_openid_1758811212038', NULL, NULL, NULL, 1, 'Thu Sep 25 2025 22:40:12 GMT+0800 (GMT+08:00)', NULL, 'Thu Sep 25 2025 22:40:12 GMT+0800 (GMT+08:00)', NULL, 0, NULL);
+INSERT INTO `t_user` (`id`, `name`, `gender`, `phone`, `birthday`, `wx_openid`, `wx_unionid`, `wx_oa_openid`, `password`, `state`, `create_time`, `create_user_id`, `update_time`, `update_user_id`, `version`, `mobile`) VALUES (58, '寰俊鐢ㄦ埛', NULL, NULL, NULL, 'test_openid_1758811212020', NULL, NULL, NULL, 1, 'Thu Sep 25 2025 22:40:12 GMT+0800 (GMT+08:00)', NULL, 'Thu Sep 25 2025 22:40:12 GMT+0800 (GMT+08:00)', NULL, 0, NULL);
+INSERT INTO `t_user` (`id`, `name`, `gender`, `phone`, `birthday`, `wx_openid`, `wx_unionid`, `wx_oa_openid`, `password`, `state`, `create_time`, `create_user_id`, `update_time`, `update_user_id`, `version`, `mobile`) VALUES (59, '寰俊鐢ㄦ埛', NULL, NULL, NULL, 'ogxxA1-KrSVTdqI9T1uaB1BQwPGU', NULL, NULL, NULL, 1, 'Sat Sep 27 2025 18:39:45 GMT+0800 (GMT+08:00)', NULL, 'Sat Sep 27 2025 18:39:45 GMT+0800 (GMT+08:00)', NULL, 0, NULL);
+INSERT INTO `t_user` (`id`, `name`, `gender`, `phone`, `birthday`, `wx_openid`, `wx_unionid`, `wx_oa_openid`, `password`, `state`, `create_time`, `create_user_id`, `update_time`, `update_user_id`, `version`, `mobile`) VALUES (60, '寰俊鐢ㄦ埛', NULL, NULL, NULL, 'test_openid_1758970258618', 'test_unionid_1758970258619', NULL, NULL, 1, 'Sat Sep 27 2025 18:50:59 GMT+0800 (GMT+08:00)', NULL, 'Sat Sep 27 2025 18:50:59 GMT+0800 (GMT+08:00)', NULL, 0, NULL);
+INSERT INTO `t_user` (`id`, `name`, `gender`, `phone`, `birthday`, `wx_openid`, `wx_unionid`, `wx_oa_openid`, `password`, `state`, `create_time`, `create_user_id`, `update_time`, `update_user_id`, `version`, `mobile`) VALUES (61, '寰俊鐢ㄦ埛', NULL, NULL, NULL, 'test_openid_1758970297509', 'test_unionid_1758970297509', NULL, NULL, 1, 'Sat Sep 27 2025 18:51:38 GMT+0800 (GMT+08:00)', NULL, 'Sat Sep 27 2025 18:51:38 GMT+0800 (GMT+08:00)', NULL, 0, NULL);
+INSERT INTO `t_user` (`id`, `name`, `gender`, `phone`, `birthday`, `wx_openid`, `wx_unionid`, `wx_oa_openid`, `password`, `state`, `create_time`, `create_user_id`, `update_time`, `update_user_id`, `version`, `mobile`) VALUES (62, '????', NULL, '13800138000', 'Mon Jan 01 1990 00:00:00 GMT+0800 (GMT+08:00)', NULL, NULL, NULL, '$2a$10$sZzYN1pAIGLq.tVet/Uc/OzC/BtALqXSZYvDtKpNKcPmqruJAb94S', 1, 'Sat Sep 27 2025 20:13:34 GMT+0800 (GMT+08:00)', NULL, 'Tue Sep 30 2025 12:04:18 GMT+0800 (GMT+08:00)', NULL, 3, NULL);
+INSERT INTO `t_user` (`id`, `name`, `gender`, `phone`, `birthday`, `wx_openid`, `wx_unionid`, `wx_oa_openid`, `password`, `state`, `create_time`, `create_user_id`, `update_time`, `update_user_id`, `version`, `mobile`) VALUES (63, '鏉庡洓', NULL, '13900139000', 'Thu Aug 20 1992 00:00:00 GMT+0800 (GMT+08:00)', NULL, NULL, NULL, '$2a$10$108TYjAB1.BQK.px681x3uWAxGkA/HyCkQdGBo42l4yXp0l2mIyiC', 1, 'Sat Sep 27 2025 20:14:52 GMT+0800 (GMT+08:00)', NULL, 'Sat Sep 27 2025 20:14:52 GMT+0800 (GMT+08:00)', NULL, 1, NULL);
+INSERT INTO `t_user` (`id`, `name`, `gender`, `phone`, `birthday`, `wx_openid`, `wx_unionid`, `wx_oa_openid`, `password`, `state`, `create_time`, `create_user_id`, `update_time`, `update_user_id`, `version`, `mobile`) VALUES (64, '娴嬭瘯鐢ㄦ埛', NULL, '13912345678', 'Sun Aug 20 1995 00:00:00 GMT+0800 (GMT+08:00)', NULL, NULL, NULL, '$2a$10$sAzK1YVEWuLEqYV/VLoFL.qAB42LHcZ0N76mqyUmCUm2TZLJSLZsK', 1, 'Sat Sep 27 2025 21:09:53 GMT+0800 (GMT+08:00)', NULL, 'Mon Sep 29 2025 19:10:34 GMT+0800 (GMT+08:00)', NULL, 3, NULL);
+INSERT INTO `t_user` (`id`, `name`, `gender`, `phone`, `birthday`, `wx_openid`, `wx_unionid`, `wx_oa_openid`, `password`, `state`, `create_time`, `create_user_id`, `update_time`, `update_user_id`, `version`, `mobile`) VALUES (65, '寰俊鐢ㄦ埛', NULL, NULL, NULL, 'test_openid_1758984255561', 'test_unionid_1758984255561', NULL, NULL, 1, 'Sat Sep 27 2025 22:44:16 GMT+0800 (GMT+08:00)', NULL, 'Sat Sep 27 2025 22:44:16 GMT+0800 (GMT+08:00)', NULL, 0, NULL);
+INSERT INTO `t_user` (`id`, `name`, `gender`, `phone`, `birthday`, `wx_openid`, `wx_unionid`, `wx_oa_openid`, `password`, `state`, `create_time`, `create_user_id`, `update_time`, `update_user_id`, `version`, `mobile`) VALUES (66, '寰俊鐢ㄦ埛', NULL, NULL, NULL, 'test_openid_1758984267938', 'test_unionid_1758984267938', NULL, NULL, 1, 'Sat Sep 27 2025 22:44:28 GMT+0800 (GMT+08:00)', NULL, 'Sat Sep 27 2025 22:44:28 GMT+0800 (GMT+08:00)', NULL, 0, NULL);
+INSERT INTO `t_user` (`id`, `name`, `gender`, `phone`, `birthday`, `wx_openid`, `wx_unionid`, `wx_oa_openid`, `password`, `state`, `create_time`, `create_user_id`, `update_time`, `update_user_id`, `version`, `mobile`) VALUES (68, '?????', NULL, '13987654321', 'Wed May 15 1996 00:00:00 GMT+0800 (GMT+08:00)', NULL, NULL, NULL, '$2a$10$En4tLSMGb6ABLxoeM/p5wOMoX5mYF83sXYRvxJBO4vstkWbCbInVG', 1, 'Sat Sep 27 2025 22:51:50 GMT+0800 (GMT+08:00)', NULL, 'Sat Sep 27 2025 22:51:50 GMT+0800 (GMT+08:00)', NULL, 1, NULL);
+INSERT INTO `t_user` (`id`, `name`, `gender`, `phone`, `birthday`, `wx_openid`, `wx_unionid`, `wx_oa_openid`, `password`, `state`, `create_time`, `create_user_id`, `update_time`, `update_user_id`, `version`, `mobile`) VALUES (69, '寰俊鐢ㄦ埛', NULL, NULL, NULL, 'test_openid_1759021536834', 'test_unionid_1759021536834', NULL, NULL, 1, 'Sun Sep 28 2025 09:05:37 GMT+0800 (GMT+08:00)', NULL, 'Sun Sep 28 2025 09:05:37 GMT+0800 (GMT+08:00)', NULL, 0, NULL);
+INSERT INTO `t_user` (`id`, `name`, `gender`, `phone`, `birthday`, `wx_openid`, `wx_unionid`, `wx_oa_openid`, `password`, `state`, `create_time`, `create_user_id`, `update_time`, `update_user_id`, `version`, `mobile`) VALUES (70, '寰俊鐢ㄦ埛', NULL, NULL, NULL, 'test_openid_1759021805903', 'test_unionid_1759021805903', NULL, NULL, 1, 'Sun Sep 28 2025 09:10:06 GMT+0800 (GMT+08:00)', NULL, 'Sun Sep 28 2025 09:10:06 GMT+0800 (GMT+08:00)', NULL, 0, NULL);
+INSERT INTO `t_user` (`id`, `name`, `gender`, `phone`, `birthday`, `wx_openid`, `wx_unionid`, `wx_oa_openid`, `password`, `state`, `create_time`, `create_user_id`, `update_time`, `update_user_id`, `version`, `mobile`) VALUES (71, '寰俊鐢ㄦ埛', NULL, NULL, NULL, 'test_openid_1759021932665', 'test_unionid_1759021932665', NULL, NULL, 1, 'Sun Sep 28 2025 09:12:13 GMT+0800 (GMT+08:00)', NULL, 'Sun Sep 28 2025 09:12:13 GMT+0800 (GMT+08:00)', NULL, 0, NULL);
+INSERT INTO `t_user` (`id`, `name`, `gender`, `phone`, `birthday`, `wx_openid`, `wx_unionid`, `wx_oa_openid`, `password`, `state`, `create_time`, `create_user_id`, `update_time`, `update_user_id`, `version`, `mobile`) VALUES (72, '寰俊鐢ㄦ埛', NULL, NULL, NULL, 'test_openid_1759022073544', 'test_unionid_1759022073544', NULL, NULL, 1, 'Sun Sep 28 2025 09:14:34 GMT+0800 (GMT+08:00)', NULL, 'Sun Sep 28 2025 09:14:34 GMT+0800 (GMT+08:00)', NULL, 0, NULL);
+INSERT INTO `t_user` (`id`, `name`, `gender`, `phone`, `birthday`, `wx_openid`, `wx_unionid`, `wx_oa_openid`, `password`, `state`, `create_time`, `create_user_id`, `update_time`, `update_user_id`, `version`, `mobile`) VALUES (73, '寰俊鐢ㄦ埛', NULL, NULL, NULL, 'test_openid_1759022567421', 'test_unionid_1759022567421', NULL, NULL, 1, 'Sun Sep 28 2025 09:22:48 GMT+0800 (GMT+08:00)', NULL, 'Sun Sep 28 2025 09:22:48 GMT+0800 (GMT+08:00)', NULL, 0, NULL);
+INSERT INTO `t_user` (`id`, `name`, `gender`, `phone`, `birthday`, `wx_openid`, `wx_unionid`, `wx_oa_openid`, `password`, `state`, `create_time`, `create_user_id`, `update_time`, `update_user_id`, `version`, `mobile`) VALUES (76, '娴嬭瘯鐢ㄦ埛1759035802271', NULL, '13800002271', 'Mon Jan 01 1990 00:00:00 GMT+0800 (GMT+08:00)', NULL, NULL, NULL, '$2a$10$QVupV.yQijdfO908O1h40.4vmn/UNoY.uQEXD.3.lCAUTYiokv1Te', 1, 'Sun Sep 28 2025 13:03:22 GMT+0800 (GMT+08:00)', NULL, 'Sun Sep 28 2025 13:03:23 GMT+0800 (GMT+08:00)', NULL, 1, NULL);
+INSERT INTO `t_user` (`id`, `name`, `gender`, `phone`, `birthday`, `wx_openid`, `wx_unionid`, `wx_oa_openid`, `password`, `state`, `create_time`, `create_user_id`, `update_time`, `update_user_id`, `version`, `mobile`) VALUES (77, '濯掍綋API娴嬭瘯鐢ㄦ埛', NULL, '13900139664', 'Mon Jan 01 1990 00:00:00 GMT+0800 (GMT+08:00)', NULL, NULL, NULL, '$2a$10$XU/4t7yhmbkyqar2alZGo.Tmns8YFDUr0xZPUtnuHbn3lud0vh.e.', 1, 'Sun Sep 28 2025 13:04:25 GMT+0800 (GMT+08:00)', NULL, 'Sun Sep 28 2025 13:04:25 GMT+0800 (GMT+08:00)', NULL, 1, NULL);
+INSERT INTO `t_user` (`id`, `name`, `gender`, `phone`, `birthday`, `wx_openid`, `wx_unionid`, `wx_oa_openid`, `password`, `state`, `create_time`, `create_user_id`, `update_time`, `update_user_id`, `version`, `mobile`) VALUES (78, '娴嬭瘯鐢ㄦ埛_debug', NULL, '13900000001', 'Mon Jan 01 1990 00:00:00 GMT+0800 (GMT+08:00)', NULL, NULL, NULL, '$2a$10$a2hjbdq2pXvVVaRZmyT9H.GcZh3ZudqFt6T8SXbX4KhxSVl8gbHaa', 1, 'Sun Sep 28 2025 20:32:26 GMT+0800 (GMT+08:00)', NULL, 'Sun Sep 28 2025 20:32:26 GMT+0800 (GMT+08:00)', NULL, 1, NULL);
+INSERT INTO `t_user` (`id`, `name`, `gender`, `phone`, `birthday`, `wx_openid`, `wx_unionid`, `wx_oa_openid`, `password`, `state`, `create_time`, `create_user_id`, `update_time`, `update_user_id`, `version`, `mobile`) VALUES (79, '娴嬭瘯鐢ㄦ埛1759105017981', NULL, '13800002981', NULL, NULL, NULL, NULL, '$2a$10$DG4vQhQrWrl0Z/kZay0em.zdaImk/PExo5MJfC.sC0VD/.idgWDM.', 1, 'Mon Sep 29 2025 08:16:58 GMT+0800 (GMT+08:00)', NULL, 'Mon Sep 29 2025 08:16:58 GMT+0800 (GMT+08:00)', NULL, 0, NULL);
+INSERT INTO `t_user` (`id`, `name`, `gender`, `phone`, `birthday`, `wx_openid`, `wx_unionid`, `wx_oa_openid`, `password`, `state`, `create_time`, `create_user_id`, `update_time`, `update_user_id`, `version`, `mobile`) VALUES (80, '娴嬭瘯鐢ㄦ埛1759105041943', NULL, '13800009830', NULL, NULL, NULL, NULL, '$2a$10$j5H0cenFHPxhlIinfSj1h.SjLx8svBkLB/RuGtokDHMJ6HN5jrFsK', 1, 'Mon Sep 29 2025 08:17:22 GMT+0800 (GMT+08:00)', NULL, 'Mon Sep 29 2025 08:17:22 GMT+0800 (GMT+08:00)', NULL, 0, NULL);
+INSERT INTO `t_user` (`id`, `name`, `gender`, `phone`, `birthday`, `wx_openid`, `wx_unionid`, `wx_oa_openid`, `password`, `state`, `create_time`, `create_user_id`, `update_time`, `update_user_id`, `version`, `mobile`) VALUES (81, '娴嬭瘯鐢ㄦ埛1759106607579', NULL, '13800007579', 'Mon Jan 01 1990 00:00:00 GMT+0800 (GMT+08:00)', NULL, NULL, NULL, '$2a$10$BKmORxmhEa9Thqkp0fUxXegMICGZW1pNZfPDlAKn.A3PHvi9AjxiS', 1, 'Mon Sep 29 2025 08:43:28 GMT+0800 (GMT+08:00)', NULL, 'Mon Sep 29 2025 08:43:28 GMT+0800 (GMT+08:00)', NULL, 1, NULL);
+INSERT INTO `t_user` (`id`, `name`, `gender`, `phone`, `birthday`, `wx_openid`, `wx_unionid`, `wx_oa_openid`, `password`, `state`, `create_time`, `create_user_id`, `update_time`, `update_user_id`, `version`, `mobile`) VALUES (82, '娴嬭瘯鐢ㄦ埛1759106643010', NULL, '13800003010', 'Mon Jan 01 1990 00:00:00 GMT+0800 (GMT+08:00)', NULL, NULL, NULL, '$2a$10$1TK8ysLXx4akCfkirhmR1.iZltlbC2X/BeoOTNVyNidopKP4zMteK', 1, 'Mon Sep 29 2025 08:44:03 GMT+0800 (GMT+08:00)', NULL, 'Mon Sep 29 2025 08:44:03 GMT+0800 (GMT+08:00)', NULL, 1, NULL);
+INSERT INTO `t_user` (`id`, `name`, `gender`, `phone`, `birthday`, `wx_openid`, `wx_unionid`, `wx_oa_openid`, `password`, `state`, `create_time`, `create_user_id`, `update_time`, `update_user_id`, `version`, `mobile`) VALUES (83, '娴嬭瘯鐢ㄦ埛1759106697474', NULL, '13800007474', 'Mon Jan 01 1990 00:00:00 GMT+0800 (GMT+08:00)', NULL, NULL, NULL, '$2a$10$3b71dtTccI9J9iZZSAuZY.7KhG3Bj9fcRJuxQwQigsWI.wF6B4Oce', 1, 'Mon Sep 29 2025 08:44:58 GMT+0800 (GMT+08:00)', NULL, 'Mon Sep 29 2025 08:44:58 GMT+0800 (GMT+08:00)', NULL, 1, NULL);
+INSERT INTO `t_user` (`id`, `name`, `gender`, `phone`, `birthday`, `wx_openid`, `wx_unionid`, `wx_oa_openid`, `password`, `state`, `create_time`, `create_user_id`, `update_time`, `update_user_id`, `version`, `mobile`) VALUES (84, '娴嬭瘯鐢ㄦ埛1759106720525', NULL, '13800000525', 'Mon Jan 01 1990 00:00:00 GMT+0800 (GMT+08:00)', NULL, NULL, NULL, '$2a$10$36IfGQhTUGir1L3.IV6ww.RKn.LN3mesEPonypw.H.XXIbdNvGLGe', 1, 'Mon Sep 29 2025 08:45:21 GMT+0800 (GMT+08:00)', NULL, 'Mon Sep 29 2025 08:45:21 GMT+0800 (GMT+08:00)', NULL, 1, NULL);
+INSERT INTO `t_user` (`id`, `name`, `gender`, `phone`, `birthday`, `wx_openid`, `wx_unionid`, `wx_oa_openid`, `password`, `state`, `create_time`, `create_user_id`, `update_time`, `update_user_id`, `version`, `mobile`) VALUES (85, '娴嬭瘯鐢ㄦ埛1759106746467', NULL, '13800006467', 'Mon Jan 01 1990 00:00:00 GMT+0800 (GMT+08:00)', NULL, NULL, NULL, '$2a$10$QU.9OXlGvo5Ss6MSjZQh4OlrhlUf2z8nWWWrXgiGe3w5vk15.JkBW', 1, 'Mon Sep 29 2025 08:45:47 GMT+0800 (GMT+08:00)', NULL, 'Mon Sep 29 2025 08:45:47 GMT+0800 (GMT+08:00)', NULL, 1, NULL);
+INSERT INTO `t_user` (`id`, `name`, `gender`, `phone`, `birthday`, `wx_openid`, `wx_unionid`, `wx_oa_openid`, `password`, `state`, `create_time`, `create_user_id`, `update_time`, `update_user_id`, `version`, `mobile`) VALUES (86, '娴嬭瘯鐢ㄦ埛1759107093870', NULL, '13800005495', NULL, NULL, NULL, NULL, '$2a$10$zWfTST3lbbUgubAaV7XUYO/OWvQ4e.aFApb01q8YNx0CYw7jMOS26', 1, 'Mon Sep 29 2025 08:51:34 GMT+0800 (GMT+08:00)', NULL, 'Mon Sep 29 2025 08:51:34 GMT+0800 (GMT+08:00)', NULL, 0, NULL);
+INSERT INTO `t_user` (`id`, `name`, `gender`, `phone`, `birthday`, `wx_openid`, `wx_unionid`, `wx_oa_openid`, `password`, `state`, `create_time`, `create_user_id`, `update_time`, `update_user_id`, `version`, `mobile`) VALUES (87, '娴嬭瘯鐢ㄦ埛1759107344742', NULL, '13800001738', NULL, NULL, NULL, NULL, '$2a$10$lZNm.t0vN3TiCwAPxlYcGuAm9QO7bnu9KUgmiAsOiALwO6Mr1VFNK', 1, 'Mon Sep 29 2025 08:55:45 GMT+0800 (GMT+08:00)', NULL, 'Mon Sep 29 2025 08:55:45 GMT+0800 (GMT+08:00)', NULL, 0, NULL);
+INSERT INTO `t_user` (`id`, `name`, `gender`, `phone`, `birthday`, `wx_openid`, `wx_unionid`, `wx_oa_openid`, `password`, `state`, `create_time`, `create_user_id`, `update_time`, `update_user_id`, `version`, `mobile`) VALUES (92, '鐜嬩簲', NULL, '13942841107', NULL, NULL, NULL, NULL, '$2a$10$lvyBNyfeAsNoE7Aiq7be8uWHagrcElwPx1ekSAvQL.b1XmNUd3W3u', 1, 'Mon Sep 29 2025 18:47:21 GMT+0800 (GMT+08:00)', NULL, 'Mon Sep 29 2025 18:47:21 GMT+0800 (GMT+08:00)', NULL, 0, NULL);
+INSERT INTO `t_user` (`id`, `name`, `gender`, `phone`, `birthday`, `wx_openid`, `wx_unionid`, `wx_oa_openid`, `password`, `state`, `create_time`, `create_user_id`, `update_time`, `update_user_id`, `version`, `mobile`) VALUES (93, '鐜嬩簲', NULL, '13945217', NULL, NULL, NULL, NULL, '$2a$10$rhhZlmV6PP8jLx1YsRhJQuQFzzYyCp6CLbNM30WjtVyrVugJYjdlC', 1, 'Mon Sep 29 2025 18:47:25 GMT+0800 (GMT+08:00)', NULL, 'Mon Sep 29 2025 18:47:25 GMT+0800 (GMT+08:00)', NULL, 0, NULL);
+INSERT INTO `t_user` (`id`, `name`, `gender`, `phone`, `birthday`, `wx_openid`, `wx_unionid`, `wx_oa_openid`, `password`, `state`, `create_time`, `create_user_id`, `update_time`, `update_user_id`, `version`, `mobile`) VALUES (107, '鐜嬩簲', NULL, '13942896875', NULL, NULL, NULL, NULL, '$2a$10$JCFNNlvuxlKkpi3w7U5L..bwSbtjvJM2RKM.hFncH4rdqXzdz1m3q', 1, 'Mon Sep 29 2025 18:48:17 GMT+0800 (GMT+08:00)', NULL, 'Mon Sep 29 2025 18:48:17 GMT+0800 (GMT+08:00)', NULL, 0, NULL);
+INSERT INTO `t_user` (`id`, `name`, `gender`, `phone`, `birthday`, `wx_openid`, `wx_unionid`, `wx_oa_openid`, `password`, `state`, `create_time`, `create_user_id`, `update_time`, `update_user_id`, `version`, `mobile`) VALUES (108, '鐜嬩簲', NULL, '13998923', NULL, NULL, NULL, NULL, '$2a$10$aEKM/dOf8c.DsdovVuu7Uu05lMagSbnxFNti4dyOozU2/biudqVf2', 1, 'Mon Sep 29 2025 18:48:19 GMT+0800 (GMT+08:00)', NULL, 'Mon Sep 29 2025 18:48:19 GMT+0800 (GMT+08:00)', NULL, 0, NULL);
+INSERT INTO `t_user` (`id`, `name`, `gender`, `phone`, `birthday`, `wx_openid`, `wx_unionid`, `wx_oa_openid`, `password`, `state`, `create_time`, `create_user_id`, `update_time`, `update_user_id`, `version`, `mobile`) VALUES (120, '娴嬭瘯鍛樺伐', NULL, '13800000001', NULL, 'test_employee_openid', 'test_employee_unionid', NULL, '$2a$10$VBHNbQlhM1OnQ8QTLkEVSeXBfLAlD9AJqNjErsYC664SUzMZZxjp.', 1, 'Mon Sep 29 2025 18:48:53 GMT+0800 (GMT+08:00)', NULL, 'Mon Sep 29 2025 18:48:53 GMT+0800 (GMT+08:00)', NULL, 0, '13800000001');
+INSERT INTO `t_user` (`id`, `name`, `gender`, `phone`, `birthday`, `wx_openid`, `wx_unionid`, `wx_oa_openid`, `password`, `state`, `create_time`, `create_user_id`, `update_time`, `update_user_id`, `version`, `mobile`) VALUES (121, '娴嬭瘯璇勫', NULL, '13800000002', NULL, 'test_judge_openid', 'test_judge_unionid', NULL, '$2a$10$VBHNbQlhM1OnQ8QTLkEVSeXBfLAlD9AJqNjErsYC664SUzMZZxjp.', 1, 'Mon Sep 29 2025 18:48:53 GMT+0800 (GMT+08:00)', NULL, 'Mon Sep 29 2025 18:48:53 GMT+0800 (GMT+08:00)', NULL, 0, '13800000002');
+INSERT INTO `t_user` (`id`, `name`, `gender`, `phone`, `birthday`, `wx_openid`, `wx_unionid`, `wx_oa_openid`, `password`, `state`, `create_time`, `create_user_id`, `update_time`, `update_user_id`, `version`, `mobile`) VALUES (122, '鐜嬩簲', NULL, '13942938847', NULL, NULL, NULL, NULL, '$2a$10$3.diloZPEZzq0wdP2jPbIOGL7C93Hs4mR2jhetYayM74txu5wjh5u', 1, 'Mon Sep 29 2025 18:48:59 GMT+0800 (GMT+08:00)', NULL, 'Mon Sep 29 2025 18:48:59 GMT+0800 (GMT+08:00)', NULL, 0, NULL);
+INSERT INTO `t_user` (`id`, `name`, `gender`, `phone`, `birthday`, `wx_openid`, `wx_unionid`, `wx_oa_openid`, `password`, `state`, `create_time`, `create_user_id`, `update_time`, `update_user_id`, `version`, `mobile`) VALUES (123, '鐜嬩簲', NULL, '13940833', NULL, NULL, NULL, NULL, '$2a$10$/lZwlcTM9HGFQc/R7e4n7OIH7hlDDwAAZpILuQqPZM/kMP7Uti.9S', 1, 'Mon Sep 29 2025 18:49:01 GMT+0800 (GMT+08:00)', NULL, 'Mon Sep 29 2025 18:49:01 GMT+0800 (GMT+08:00)', NULL, 0, NULL);
+INSERT INTO `t_user` (`id`, `name`, `gender`, `phone`, `birthday`, `wx_openid`, `wx_unionid`, `wx_oa_openid`, `password`, `state`, `create_time`, `create_user_id`, `update_time`, `update_user_id`, `version`, `mobile`) VALUES (133, '??????43', NULL, '13800000043', 'Mon Jan 01 1990 00:00:00 GMT+0800 (GMT+08:00)', NULL, NULL, NULL, '$2a$10$ySx04kGprBjPthzie6GbIesKYPlwM.I.elzWU5GQhD8CujxfHZtoy', 1, 'Tue Sep 30 2025 10:02:21 GMT+0800 (GMT+08:00)', NULL, 'Tue Sep 30 2025 10:02:21 GMT+0800 (GMT+08:00)', NULL, 1, NULL);
 
 -- ----------------------------
 -- Table structure for t_wx_login_record
@@ -543,6 +856,124 @@
   KEY `idx_phone_authorized` (`phone_authorized`),
   KEY `idx_create_user_id` (`create_user_id`),
   KEY `idx_update_user_id` (`update_user_id`)
-) ENGINE=InnoDB AUTO_INCREMENT=116 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='寰俊鐧诲綍璁板綍琛�';
+) ENGINE=InnoDB AUTO_INCREMENT=122 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='寰俊鐧诲綍璁板綍琛�';
 
-SET FOREIGN_KEY_CHECKS = 1;
+-- ----------------------------
+-- Records of t_wx_login_record
+-- ----------------------------
+INSERT INTO `t_wx_login_record` (`id`, `wx_openid`, `wx_unionid`, `user_id`, `login_time`, `login_ip`, `device_info`, `session_key`, `phone_authorized`, `phone_auth_time`, `create_time`, `update_time`, `state`, `create_user_id`, `update_user_id`, `version`) VALUES (1, 'test_openid_123', NULL, 54, 'Thu Sep 25 2025 22:36:54 GMT+0800 (GMT+08:00)', NULL, NULL, NULL, 0, NULL, 'Thu Sep 25 2025 22:36:54 GMT+0800 (GMT+08:00)', 'Thu Sep 25 2025 22:36:54 GMT+0800 (GMT+08:00)', 1, NULL, NULL, 0);
+INSERT INTO `t_wx_login_record` (`id`, `wx_openid`, `wx_unionid`, `user_id`, `login_time`, `login_ip`, `device_info`, `session_key`, `phone_authorized`, `phone_auth_time`, `create_time`, `update_time`, `state`, `create_user_id`, `update_user_id`, `version`) VALUES (2, 'test_openid_456', NULL, 55, 'Thu Sep 25 2025 22:38:13 GMT+0800 (GMT+08:00)', NULL, NULL, NULL, 0, NULL, 'Thu Sep 25 2025 22:38:13 GMT+0800 (GMT+08:00)', 'Thu Sep 25 2025 22:38:13 GMT+0800 (GMT+08:00)', 1, NULL, NULL, 0);
+INSERT INTO `t_wx_login_record` (`id`, `wx_openid`, `wx_unionid`, `user_id`, `login_time`, `login_ip`, `device_info`, `session_key`, `phone_authorized`, `phone_auth_time`, `create_time`, `update_time`, `state`, `create_user_id`, `update_user_id`, `version`) VALUES (3, 'test_openid_789', NULL, 56, 'Thu Sep 25 2025 22:38:26 GMT+0800 (GMT+08:00)', NULL, NULL, NULL, 0, NULL, 'Thu Sep 25 2025 22:38:26 GMT+0800 (GMT+08:00)', 'Thu Sep 25 2025 22:38:26 GMT+0800 (GMT+08:00)', 1, NULL, NULL, 0);
+INSERT INTO `t_wx_login_record` (`id`, `wx_openid`, `wx_unionid`, `user_id`, `login_time`, `login_ip`, `device_info`, `session_key`, `phone_authorized`, `phone_auth_time`, `create_time`, `update_time`, `state`, `create_user_id`, `update_user_id`, `version`) VALUES (4, 'test_openid_1758811212038', NULL, 57, 'Thu Sep 25 2025 22:40:12 GMT+0800 (GMT+08:00)', '127.0.0.1', 'devtools iPhone 12/13 (Pro) iOS 10.0.1', NULL, 0, NULL, 'Thu Sep 25 2025 22:40:12 GMT+0800 (GMT+08:00)', 'Thu Sep 25 2025 22:40:12 GMT+0800 (GMT+08:00)', 1, NULL, NULL, 0);
+INSERT INTO `t_wx_login_record` (`id`, `wx_openid`, `wx_unionid`, `user_id`, `login_time`, `login_ip`, `device_info`, `session_key`, `phone_authorized`, `phone_auth_time`, `create_time`, `update_time`, `state`, `create_user_id`, `update_user_id`, `version`) VALUES (5, 'test_openid_1758811212020', NULL, 58, 'Thu Sep 25 2025 22:40:12 GMT+0800 (GMT+08:00)', '127.0.0.1', 'devtools iPhone 12/13 (Pro) iOS 10.0.1', NULL, 0, NULL, 'Thu Sep 25 2025 22:40:12 GMT+0800 (GMT+08:00)', 'Thu Sep 25 2025 22:40:12 GMT+0800 (GMT+08:00)', 1, NULL, NULL, 0);
+INSERT INTO `t_wx_login_record` (`id`, `wx_openid`, `wx_unionid`, `user_id`, `login_time`, `login_ip`, `device_info`, `session_key`, `phone_authorized`, `phone_auth_time`, `create_time`, `update_time`, `state`, `create_user_id`, `update_user_id`, `version`) VALUES (6, 'ogxxA1-KrSVTdqI9T1uaB1BQwPGU', NULL, 59, 'Sat Sep 27 2025 18:49:19 GMT+0800 (GMT+08:00)', '127.0.0.1', 'devtools iPhone 12/13 (Pro) iOS 10.0.1', 'PPlR7x40sag8yfXcUeYzIw==', 0, NULL, 'Sat Sep 27 2025 18:49:19 GMT+0800 (GMT+08:00)', 'Sat Sep 27 2025 18:49:19 GMT+0800 (GMT+08:00)', 1, NULL, NULL, 0);
+INSERT INTO `t_wx_login_record` (`id`, `wx_openid`, `wx_unionid`, `user_id`, `login_time`, `login_ip`, `device_info`, `session_key`, `phone_authorized`, `phone_auth_time`, `create_time`, `update_time`, `state`, `create_user_id`, `update_user_id`, `version`) VALUES (7, 'ogxxA1-KrSVTdqI9T1uaB1BQwPGU', NULL, 59, 'Sat Sep 27 2025 18:49:19 GMT+0800 (GMT+08:00)', '127.0.0.1', 'devtools iPhone 12/13 (Pro) iOS 10.0.1', 'PPlR7x40sag8yfXcUeYzIw==', 0, NULL, 'Sat Sep 27 2025 18:49:19 GMT+0800 (GMT+08:00)', 'Sat Sep 27 2025 18:49:19 GMT+0800 (GMT+08:00)', 1, NULL, NULL, 0);
+INSERT INTO `t_wx_login_record` (`id`, `wx_openid`, `wx_unionid`, `user_id`, `login_time`, `login_ip`, `device_info`, `session_key`, `phone_authorized`, `phone_auth_time`, `create_time`, `update_time`, `state`, `create_user_id`, `update_user_id`, `version`) VALUES (8, 'test_openid_1758970258618', 'test_unionid_1758970258619', 60, 'Sat Sep 27 2025 18:50:59 GMT+0800 (GMT+08:00)', '127.0.0.1', 'test_device', 'test_session_key_1758970258619', 0, NULL, 'Sat Sep 27 2025 18:50:59 GMT+0800 (GMT+08:00)', 'Sat Sep 27 2025 18:50:59 GMT+0800 (GMT+08:00)', 1, NULL, NULL, 0);
+INSERT INTO `t_wx_login_record` (`id`, `wx_openid`, `wx_unionid`, `user_id`, `login_time`, `login_ip`, `device_info`, `session_key`, `phone_authorized`, `phone_auth_time`, `create_time`, `update_time`, `state`, `create_user_id`, `update_user_id`, `version`) VALUES (9, 'test_openid_1758970297509', 'test_unionid_1758970297509', 61, 'Sat Sep 27 2025 18:51:38 GMT+0800 (GMT+08:00)', '127.0.0.1', 'test_device', 'test_session_key_1758970297509', 0, NULL, 'Sat Sep 27 2025 18:51:38 GMT+0800 (GMT+08:00)', 'Sat Sep 27 2025 18:51:38 GMT+0800 (GMT+08:00)', 1, NULL, NULL, 0);
+INSERT INTO `t_wx_login_record` (`id`, `wx_openid`, `wx_unionid`, `user_id`, `login_time`, `login_ip`, `device_info`, `session_key`, `phone_authorized`, `phone_auth_time`, `create_time`, `update_time`, `state`, `create_user_id`, `update_user_id`, `version`) VALUES (10, 'test_openid_1758984255561', 'test_unionid_1758984255561', 65, 'Sat Sep 27 2025 22:44:16 GMT+0800 (GMT+08:00)', '127.0.0.1', 'test_device', 'test_session_key_1758984255561', 0, NULL, 'Sat Sep 27 2025 22:44:16 GMT+0800 (GMT+08:00)', 'Sat Sep 27 2025 22:44:16 GMT+0800 (GMT+08:00)', 1, NULL, NULL, 0);
+INSERT INTO `t_wx_login_record` (`id`, `wx_openid`, `wx_unionid`, `user_id`, `login_time`, `login_ip`, `device_info`, `session_key`, `phone_authorized`, `phone_auth_time`, `create_time`, `update_time`, `state`, `create_user_id`, `update_user_id`, `version`) VALUES (11, 'test_openid_1758984267938', 'test_unionid_1758984267938', 66, 'Sat Sep 27 2025 22:44:28 GMT+0800 (GMT+08:00)', '127.0.0.1', 'test_device', 'test_session_key_1758984267938', 0, NULL, 'Sat Sep 27 2025 22:44:28 GMT+0800 (GMT+08:00)', 'Sat Sep 27 2025 22:44:28 GMT+0800 (GMT+08:00)', 1, NULL, NULL, 0);
+INSERT INTO `t_wx_login_record` (`id`, `wx_openid`, `wx_unionid`, `user_id`, `login_time`, `login_ip`, `device_info`, `session_key`, `phone_authorized`, `phone_auth_time`, `create_time`, `update_time`, `state`, `create_user_id`, `update_user_id`, `version`) VALUES (12, 'test_openid_1759021805903', 'test_unionid_1759021805903', 70, 'Sun Sep 28 2025 09:10:06 GMT+0800 (GMT+08:00)', '192.168.1.100', 'Test Device', 'test_session_key_1759021805903', 0, NULL, 'Sun Sep 28 2025 09:10:06 GMT+0800 (GMT+08:00)', 'Sun Sep 28 2025 09:10:06 GMT+0800 (GMT+08:00)', 1, NULL, NULL, 0);
+INSERT INTO `t_wx_login_record` (`id`, `wx_openid`, `wx_unionid`, `user_id`, `login_time`, `login_ip`, `device_info`, `session_key`, `phone_authorized`, `phone_auth_time`, `create_time`, `update_time`, `state`, `create_user_id`, `update_user_id`, `version`) VALUES (13, 'test_openid_1759021932665', 'test_unionid_1759021932665', 71, 'Sun Sep 28 2025 09:12:13 GMT+0800 (GMT+08:00)', '192.168.1.100', 'Test Device', 'test_session_key_1759021932665', 0, NULL, 'Sun Sep 28 2025 09:12:13 GMT+0800 (GMT+08:00)', 'Sun Sep 28 2025 09:12:13 GMT+0800 (GMT+08:00)', 1, NULL, NULL, 0);
+INSERT INTO `t_wx_login_record` (`id`, `wx_openid`, `wx_unionid`, `user_id`, `login_time`, `login_ip`, `device_info`, `session_key`, `phone_authorized`, `phone_auth_time`, `create_time`, `update_time`, `state`, `create_user_id`, `update_user_id`, `version`) VALUES (14, 'test_openid_1759022073544', 'test_unionid_1759022073544', 72, 'Sun Sep 28 2025 09:14:34 GMT+0800 (GMT+08:00)', '192.168.1.100', 'Test Device - sessionKey Fix Test', 'test_session_key_1759022073544', 0, NULL, 'Sun Sep 28 2025 09:14:34 GMT+0800 (GMT+08:00)', 'Sun Sep 28 2025 09:14:34 GMT+0800 (GMT+08:00)', 1, NULL, NULL, 0);
+INSERT INTO `t_wx_login_record` (`id`, `wx_openid`, `wx_unionid`, `user_id`, `login_time`, `login_ip`, `device_info`, `session_key`, `phone_authorized`, `phone_auth_time`, `create_time`, `update_time`, `state`, `create_user_id`, `update_user_id`, `version`) VALUES (15, 'test_openid_1759022567421', 'test_unionid_1759022567421', 73, 'Sun Sep 28 2025 09:22:48 GMT+0800 (GMT+08:00)', '127.0.0.1', 'test_device', 'test_session_key_1759022567421', 0, NULL, 'Sun Sep 28 2025 09:22:48 GMT+0800 (GMT+08:00)', 'Sun Sep 28 2025 09:22:48 GMT+0800 (GMT+08:00)', 1, NULL, NULL, 0);
+INSERT INTO `t_wx_login_record` (`id`, `wx_openid`, `wx_unionid`, `user_id`, `login_time`, `login_ip`, `device_info`, `session_key`, `phone_authorized`, `phone_auth_time`, `create_time`, `update_time`, `state`, `create_user_id`, `update_user_id`, `version`) VALUES (16, 'ogxxA1-KrSVTdqI9T1uaB1BQwPGU', NULL, 59, 'Sun Sep 28 2025 09:43:39 GMT+0800 (GMT+08:00)', '127.0.0.1', 'devtools iPhone 12/13 (Pro) iOS 10.0.1', 'NHJCRHrl/6BuYUoyr/Fx0Q==', 0, NULL, 'Sun Sep 28 2025 09:43:39 GMT+0800 (GMT+08:00)', 'Sun Sep 28 2025 09:43:39 GMT+0800 (GMT+08:00)', 1, NULL, NULL, 0);
+INSERT INTO `t_wx_login_record` (`id`, `wx_openid`, `wx_unionid`, `user_id`, `login_time`, `login_ip`, `device_info`, `session_key`, `phone_authorized`, `phone_auth_time`, `create_time`, `update_time`, `state`, `create_user_id`, `update_user_id`, `version`) VALUES (17, 'ogxxA1-KrSVTdqI9T1uaB1BQwPGU', NULL, 59, 'Sun Sep 28 2025 09:51:35 GMT+0800 (GMT+08:00)', '127.0.0.1', 'devtools iPhone 12/13 (Pro) iOS 10.0.1', 'NHJCRHrl/6BuYUoyr/Fx0Q==', 0, NULL, 'Sun Sep 28 2025 09:51:35 GMT+0800 (GMT+08:00)', 'Sun Sep 28 2025 09:51:35 GMT+0800 (GMT+08:00)', 1, NULL, NULL, 0);
+INSERT INTO `t_wx_login_record` (`id`, `wx_openid`, `wx_unionid`, `user_id`, `login_time`, `login_ip`, `device_info`, `session_key`, `phone_authorized`, `phone_auth_time`, `create_time`, `update_time`, `state`, `create_user_id`, `update_user_id`, `version`) VALUES (18, 'ogxxA1-KrSVTdqI9T1uaB1BQwPGU', NULL, 59, 'Sun Sep 28 2025 09:58:46 GMT+0800 (GMT+08:00)', '127.0.0.1', 'devtools iPhone 12/13 (Pro) iOS 10.0.1', 'NHJCRHrl/6BuYUoyr/Fx0Q==', 0, NULL, 'Sun Sep 28 2025 09:58:46 GMT+0800 (GMT+08:00)', 'Sun Sep 28 2025 09:58:46 GMT+0800 (GMT+08:00)', 1, NULL, NULL, 0);
+INSERT INTO `t_wx_login_record` (`id`, `wx_openid`, `wx_unionid`, `user_id`, `login_time`, `login_ip`, `device_info`, `session_key`, `phone_authorized`, `phone_auth_time`, `create_time`, `update_time`, `state`, `create_user_id`, `update_user_id`, `version`) VALUES (19, 'ogxxA1-KrSVTdqI9T1uaB1BQwPGU', NULL, 59, 'Sun Sep 28 2025 10:02:24 GMT+0800 (GMT+08:00)', '127.0.0.1', 'devtools iPhone 12/13 (Pro) iOS 10.0.1', 'NHJCRHrl/6BuYUoyr/Fx0Q==', 0, NULL, 'Sun Sep 28 2025 10:02:24 GMT+0800 (GMT+08:00)', 'Sun Sep 28 2025 10:02:24 GMT+0800 (GMT+08:00)', 1, NULL, NULL, 0);
+INSERT INTO `t_wx_login_record` (`id`, `wx_openid`, `wx_unionid`, `user_id`, `login_time`, `login_ip`, `device_info`, `session_key`, `phone_authorized`, `phone_auth_time`, `create_time`, `update_time`, `state`, `create_user_id`, `update_user_id`, `version`) VALUES (20, 'ogxxA1-KrSVTdqI9T1uaB1BQwPGU', NULL, 59, 'Sun Sep 28 2025 10:04:36 GMT+0800 (GMT+08:00)', '127.0.0.1', 'devtools iPhone 12/13 (Pro) iOS 10.0.1', 'NHJCRHrl/6BuYUoyr/Fx0Q==', 0, NULL, 'Sun Sep 28 2025 10:04:36 GMT+0800 (GMT+08:00)', 'Sun Sep 28 2025 10:04:36 GMT+0800 (GMT+08:00)', 1, NULL, NULL, 0);
+INSERT INTO `t_wx_login_record` (`id`, `wx_openid`, `wx_unionid`, `user_id`, `login_time`, `login_ip`, `device_info`, `session_key`, `phone_authorized`, `phone_auth_time`, `create_time`, `update_time`, `state`, `create_user_id`, `update_user_id`, `version`) VALUES (21, 'ogxxA1-KrSVTdqI9T1uaB1BQwPGU', NULL, 59, 'Sun Sep 28 2025 10:07:48 GMT+0800 (GMT+08:00)', '127.0.0.1', 'devtools iPhone 12/13 (Pro) iOS 10.0.1', 'NHJCRHrl/6BuYUoyr/Fx0Q==', 0, NULL, 'Sun Sep 28 2025 10:07:48 GMT+0800 (GMT+08:00)', 'Sun Sep 28 2025 10:07:48 GMT+0800 (GMT+08:00)', 1, NULL, NULL, 0);
+INSERT INTO `t_wx_login_record` (`id`, `wx_openid`, `wx_unionid`, `user_id`, `login_time`, `login_ip`, `device_info`, `session_key`, `phone_authorized`, `phone_auth_time`, `create_time`, `update_time`, `state`, `create_user_id`, `update_user_id`, `version`) VALUES (22, 'ogxxA1-KrSVTdqI9T1uaB1BQwPGU', NULL, 59, 'Sun Sep 28 2025 10:22:18 GMT+0800 (GMT+08:00)', '127.0.0.1', 'devtools iPhone 12/13 (Pro) iOS 10.0.1', 'NHJCRHrl/6BuYUoyr/Fx0Q==', 0, NULL, 'Sun Sep 28 2025 10:22:18 GMT+0800 (GMT+08:00)', 'Sun Sep 28 2025 10:22:18 GMT+0800 (GMT+08:00)', 1, NULL, NULL, 0);
+INSERT INTO `t_wx_login_record` (`id`, `wx_openid`, `wx_unionid`, `user_id`, `login_time`, `login_ip`, `device_info`, `session_key`, `phone_authorized`, `phone_auth_time`, `create_time`, `update_time`, `state`, `create_user_id`, `update_user_id`, `version`) VALUES (23, 'ogxxA1-KrSVTdqI9T1uaB1BQwPGU', NULL, 59, 'Sun Sep 28 2025 10:31:58 GMT+0800 (GMT+08:00)', '127.0.0.1', 'devtools iPhone 12/13 (Pro) iOS 10.0.1', 'NHJCRHrl/6BuYUoyr/Fx0Q==', 0, NULL, 'Sun Sep 28 2025 10:31:58 GMT+0800 (GMT+08:00)', 'Sun Sep 28 2025 10:31:58 GMT+0800 (GMT+08:00)', 1, NULL, NULL, 0);
+INSERT INTO `t_wx_login_record` (`id`, `wx_openid`, `wx_unionid`, `user_id`, `login_time`, `login_ip`, `device_info`, `session_key`, `phone_authorized`, `phone_auth_time`, `create_time`, `update_time`, `state`, `create_user_id`, `update_user_id`, `version`) VALUES (24, 'ogxxA1-KrSVTdqI9T1uaB1BQwPGU', NULL, 59, 'Sun Sep 28 2025 10:33:12 GMT+0800 (GMT+08:00)', '127.0.0.1', 'devtools iPhone 12/13 (Pro) iOS 10.0.1', 'NHJCRHrl/6BuYUoyr/Fx0Q==', 0, NULL, 'Sun Sep 28 2025 10:33:12 GMT+0800 (GMT+08:00)', 'Sun Sep 28 2025 10:33:12 GMT+0800 (GMT+08:00)', 1, NULL, NULL, 0);
+INSERT INTO `t_wx_login_record` (`id`, `wx_openid`, `wx_unionid`, `user_id`, `login_time`, `login_ip`, `device_info`, `session_key`, `phone_authorized`, `phone_auth_time`, `create_time`, `update_time`, `state`, `create_user_id`, `update_user_id`, `version`) VALUES (25, 'ogxxA1-KrSVTdqI9T1uaB1BQwPGU', NULL, 59, 'Sun Sep 28 2025 10:34:12 GMT+0800 (GMT+08:00)', '127.0.0.1', 'test_device', 'NHJCRHrl/6BuYUoyr/Fx0Q==', 0, NULL, 'Sun Sep 28 2025 10:34:12 GMT+0800 (GMT+08:00)', 'Sun Sep 28 2025 10:34:12 GMT+0800 (GMT+08:00)', 1, NULL, NULL, 0);
+INSERT INTO `t_wx_login_record` (`id`, `wx_openid`, `wx_unionid`, `user_id`, `login_time`, `login_ip`, `device_info`, `session_key`, `phone_authorized`, `phone_auth_time`, `create_time`, `update_time`, `state`, `create_user_id`, `update_user_id`, `version`) VALUES (26, 'ogxxA1-KrSVTdqI9T1uaB1BQwPGU', NULL, 59, 'Sun Sep 28 2025 10:42:31 GMT+0800 (GMT+08:00)', '127.0.0.1', 'devtools iPhone 12/13 (Pro) iOS 10.0.1', 'NHJCRHrl/6BuYUoyr/Fx0Q==', 0, NULL, 'Sun Sep 28 2025 10:42:31 GMT+0800 (GMT+08:00)', 'Sun Sep 28 2025 10:42:31 GMT+0800 (GMT+08:00)', 1, NULL, NULL, 0);
+INSERT INTO `t_wx_login_record` (`id`, `wx_openid`, `wx_unionid`, `user_id`, `login_time`, `login_ip`, `device_info`, `session_key`, `phone_authorized`, `phone_auth_time`, `create_time`, `update_time`, `state`, `create_user_id`, `update_user_id`, `version`) VALUES (27, 'ogxxA1-KrSVTdqI9T1uaB1BQwPGU', NULL, 59, 'Sun Sep 28 2025 10:43:58 GMT+0800 (GMT+08:00)', '127.0.0.1', 'devtools iPhone 12/13 (Pro) iOS 10.0.1', 'NHJCRHrl/6BuYUoyr/Fx0Q==', 0, NULL, 'Sun Sep 28 2025 10:43:58 GMT+0800 (GMT+08:00)', 'Sun Sep 28 2025 10:43:58 GMT+0800 (GMT+08:00)', 1, NULL, NULL, 0);
+INSERT INTO `t_wx_login_record` (`id`, `wx_openid`, `wx_unionid`, `user_id`, `login_time`, `login_ip`, `device_info`, `session_key`, `phone_authorized`, `phone_auth_time`, `create_time`, `update_time`, `state`, `create_user_id`, `update_user_id`, `version`) VALUES (28, 'ogxxA1-KrSVTdqI9T1uaB1BQwPGU', NULL, 59, 'Sun Sep 28 2025 10:46:21 GMT+0800 (GMT+08:00)', '127.0.0.1', 'devtools iPhone 12/13 (Pro) iOS 10.0.1', 'NHJCRHrl/6BuYUoyr/Fx0Q==', 0, NULL, 'Sun Sep 28 2025 10:46:21 GMT+0800 (GMT+08:00)', 'Sun Sep 28 2025 10:46:21 GMT+0800 (GMT+08:00)', 1, NULL, NULL, 0);
+INSERT INTO `t_wx_login_record` (`id`, `wx_openid`, `wx_unionid`, `user_id`, `login_time`, `login_ip`, `device_info`, `session_key`, `phone_authorized`, `phone_auth_time`, `create_time`, `update_time`, `state`, `create_user_id`, `update_user_id`, `version`) VALUES (29, 'ogxxA1-KrSVTdqI9T1uaB1BQwPGU', NULL, 59, 'Sun Sep 28 2025 10:58:38 GMT+0800 (GMT+08:00)', '127.0.0.1', 'devtools iPhone 12/13 (Pro) iOS 10.0.1', 'NHJCRHrl/6BuYUoyr/Fx0Q==', 0, NULL, 'Sun Sep 28 2025 10:58:38 GMT+0800 (GMT+08:00)', 'Sun Sep 28 2025 10:58:38 GMT+0800 (GMT+08:00)', 1, NULL, NULL, 0);
+INSERT INTO `t_wx_login_record` (`id`, `wx_openid`, `wx_unionid`, `user_id`, `login_time`, `login_ip`, `device_info`, `session_key`, `phone_authorized`, `phone_auth_time`, `create_time`, `update_time`, `state`, `create_user_id`, `update_user_id`, `version`) VALUES (30, 'ogxxA1-KrSVTdqI9T1uaB1BQwPGU', NULL, 59, 'Sun Sep 28 2025 11:01:45 GMT+0800 (GMT+08:00)', '127.0.0.1', 'devtools iPhone 12/13 (Pro) iOS 10.0.1', 'NHJCRHrl/6BuYUoyr/Fx0Q==', 0, NULL, 'Sun Sep 28 2025 11:01:45 GMT+0800 (GMT+08:00)', 'Sun Sep 28 2025 11:01:45 GMT+0800 (GMT+08:00)', 1, NULL, NULL, 0);
+INSERT INTO `t_wx_login_record` (`id`, `wx_openid`, `wx_unionid`, `user_id`, `login_time`, `login_ip`, `device_info`, `session_key`, `phone_authorized`, `phone_auth_time`, `create_time`, `update_time`, `state`, `create_user_id`, `update_user_id`, `version`) VALUES (31, 'ogxxA1-KrSVTdqI9T1uaB1BQwPGU', NULL, 59, 'Sun Sep 28 2025 11:16:49 GMT+0800 (GMT+08:00)', '127.0.0.1', 'devtools iPhone 12/13 (Pro) iOS 10.0.1', 'NHJCRHrl/6BuYUoyr/Fx0Q==', 0, NULL, 'Sun Sep 28 2025 11:16:49 GMT+0800 (GMT+08:00)', 'Sun Sep 28 2025 11:16:49 GMT+0800 (GMT+08:00)', 1, NULL, NULL, 0);
+INSERT INTO `t_wx_login_record` (`id`, `wx_openid`, `wx_unionid`, `user_id`, `login_time`, `login_ip`, `device_info`, `session_key`, `phone_authorized`, `phone_auth_time`, `create_time`, `update_time`, `state`, `create_user_id`, `update_user_id`, `version`) VALUES (32, 'ogxxA1-KrSVTdqI9T1uaB1BQwPGU', NULL, 59, 'Sun Sep 28 2025 11:20:21 GMT+0800 (GMT+08:00)', '127.0.0.1', 'devtools iPhone 12/13 (Pro) iOS 10.0.1', 'NHJCRHrl/6BuYUoyr/Fx0Q==', 0, NULL, 'Sun Sep 28 2025 11:20:21 GMT+0800 (GMT+08:00)', 'Sun Sep 28 2025 11:20:21 GMT+0800 (GMT+08:00)', 1, NULL, NULL, 0);
+INSERT INTO `t_wx_login_record` (`id`, `wx_openid`, `wx_unionid`, `user_id`, `login_time`, `login_ip`, `device_info`, `session_key`, `phone_authorized`, `phone_auth_time`, `create_time`, `update_time`, `state`, `create_user_id`, `update_user_id`, `version`) VALUES (33, 'ogxxA1-KrSVTdqI9T1uaB1BQwPGU', NULL, 59, 'Sun Sep 28 2025 11:31:12 GMT+0800 (GMT+08:00)', '127.0.0.1', 'devtools iPhone 12/13 (Pro) iOS 10.0.1', 'NHJCRHrl/6BuYUoyr/Fx0Q==', 0, NULL, 'Sun Sep 28 2025 11:31:12 GMT+0800 (GMT+08:00)', 'Sun Sep 28 2025 11:31:12 GMT+0800 (GMT+08:00)', 1, NULL, NULL, 0);
+INSERT INTO `t_wx_login_record` (`id`, `wx_openid`, `wx_unionid`, `user_id`, `login_time`, `login_ip`, `device_info`, `session_key`, `phone_authorized`, `phone_auth_time`, `create_time`, `update_time`, `state`, `create_user_id`, `update_user_id`, `version`) VALUES (34, 'ogxxA1-KrSVTdqI9T1uaB1BQwPGU', NULL, 59, 'Sun Sep 28 2025 11:34:43 GMT+0800 (GMT+08:00)', '127.0.0.1', 'devtools iPhone 12/13 (Pro) iOS 10.0.1', 'NHJCRHrl/6BuYUoyr/Fx0Q==', 0, NULL, 'Sun Sep 28 2025 11:34:43 GMT+0800 (GMT+08:00)', 'Sun Sep 28 2025 11:34:43 GMT+0800 (GMT+08:00)', 1, NULL, NULL, 0);
+INSERT INTO `t_wx_login_record` (`id`, `wx_openid`, `wx_unionid`, `user_id`, `login_time`, `login_ip`, `device_info`, `session_key`, `phone_authorized`, `phone_auth_time`, `create_time`, `update_time`, `state`, `create_user_id`, `update_user_id`, `version`) VALUES (35, 'ogxxA1-KrSVTdqI9T1uaB1BQwPGU', NULL, 59, 'Sun Sep 28 2025 11:38:05 GMT+0800 (GMT+08:00)', '127.0.0.1', 'devtools iPhone 12/13 (Pro) iOS 10.0.1', 'NHJCRHrl/6BuYUoyr/Fx0Q==', 0, NULL, 'Sun Sep 28 2025 11:38:05 GMT+0800 (GMT+08:00)', 'Sun Sep 28 2025 11:38:05 GMT+0800 (GMT+08:00)', 1, NULL, NULL, 0);
+INSERT INTO `t_wx_login_record` (`id`, `wx_openid`, `wx_unionid`, `user_id`, `login_time`, `login_ip`, `device_info`, `session_key`, `phone_authorized`, `phone_auth_time`, `create_time`, `update_time`, `state`, `create_user_id`, `update_user_id`, `version`) VALUES (36, 'ogxxA1-KrSVTdqI9T1uaB1BQwPGU', NULL, 59, 'Sun Sep 28 2025 11:42:26 GMT+0800 (GMT+08:00)', '127.0.0.1', 'devtools iPhone 12/13 (Pro) iOS 10.0.1', 'NHJCRHrl/6BuYUoyr/Fx0Q==', 0, NULL, 'Sun Sep 28 2025 11:42:26 GMT+0800 (GMT+08:00)', 'Sun Sep 28 2025 11:42:26 GMT+0800 (GMT+08:00)', 1, NULL, NULL, 0);
+INSERT INTO `t_wx_login_record` (`id`, `wx_openid`, `wx_unionid`, `user_id`, `login_time`, `login_ip`, `device_info`, `session_key`, `phone_authorized`, `phone_auth_time`, `create_time`, `update_time`, `state`, `create_user_id`, `update_user_id`, `version`) VALUES (37, 'ogxxA1-KrSVTdqI9T1uaB1BQwPGU', NULL, 59, 'Sun Sep 28 2025 11:42:36 GMT+0800 (GMT+08:00)', '127.0.0.1', 'devtools iPhone 12/13 (Pro) iOS 10.0.1', 'NHJCRHrl/6BuYUoyr/Fx0Q==', 0, NULL, 'Sun Sep 28 2025 11:42:36 GMT+0800 (GMT+08:00)', 'Sun Sep 28 2025 11:42:36 GMT+0800 (GMT+08:00)', 1, NULL, NULL, 0);
+INSERT INTO `t_wx_login_record` (`id`, `wx_openid`, `wx_unionid`, `user_id`, `login_time`, `login_ip`, `device_info`, `session_key`, `phone_authorized`, `phone_auth_time`, `create_time`, `update_time`, `state`, `create_user_id`, `update_user_id`, `version`) VALUES (38, 'ogxxA1-KrSVTdqI9T1uaB1BQwPGU', NULL, 59, 'Sun Sep 28 2025 11:42:47 GMT+0800 (GMT+08:00)', '127.0.0.1', 'devtools iPhone 12/13 (Pro) iOS 10.0.1', 'NHJCRHrl/6BuYUoyr/Fx0Q==', 0, NULL, 'Sun Sep 28 2025 11:42:47 GMT+0800 (GMT+08:00)', 'Sun Sep 28 2025 11:42:47 GMT+0800 (GMT+08:00)', 1, NULL, NULL, 0);
+INSERT INTO `t_wx_login_record` (`id`, `wx_openid`, `wx_unionid`, `user_id`, `login_time`, `login_ip`, `device_info`, `session_key`, `phone_authorized`, `phone_auth_time`, `create_time`, `update_time`, `state`, `create_user_id`, `update_user_id`, `version`) VALUES (39, 'ogxxA1-KrSVTdqI9T1uaB1BQwPGU', NULL, 59, 'Sun Sep 28 2025 11:42:54 GMT+0800 (GMT+08:00)', '127.0.0.1', 'devtools iPhone 12/13 (Pro) iOS 10.0.1', 'NHJCRHrl/6BuYUoyr/Fx0Q==', 0, NULL, 'Sun Sep 28 2025 11:42:54 GMT+0800 (GMT+08:00)', 'Sun Sep 28 2025 11:42:54 GMT+0800 (GMT+08:00)', 1, NULL, NULL, 0);
+INSERT INTO `t_wx_login_record` (`id`, `wx_openid`, `wx_unionid`, `user_id`, `login_time`, `login_ip`, `device_info`, `session_key`, `phone_authorized`, `phone_auth_time`, `create_time`, `update_time`, `state`, `create_user_id`, `update_user_id`, `version`) VALUES (40, 'ogxxA1-KrSVTdqI9T1uaB1BQwPGU', NULL, 59, 'Sun Sep 28 2025 11:43:02 GMT+0800 (GMT+08:00)', '127.0.0.1', 'devtools iPhone 12/13 (Pro) iOS 10.0.1', 'NHJCRHrl/6BuYUoyr/Fx0Q==', 0, NULL, 'Sun Sep 28 2025 11:43:02 GMT+0800 (GMT+08:00)', 'Sun Sep 28 2025 11:43:02 GMT+0800 (GMT+08:00)', 1, NULL, NULL, 0);
+INSERT INTO `t_wx_login_record` (`id`, `wx_openid`, `wx_unionid`, `user_id`, `login_time`, `login_ip`, `device_info`, `session_key`, `phone_authorized`, `phone_auth_time`, `create_time`, `update_time`, `state`, `create_user_id`, `update_user_id`, `version`) VALUES (41, 'ogxxA1-KrSVTdqI9T1uaB1BQwPGU', NULL, 59, 'Sun Sep 28 2025 11:52:24 GMT+0800 (GMT+08:00)', '127.0.0.1', 'devtools iPhone 12/13 (Pro) iOS 10.0.1', 'NHJCRHrl/6BuYUoyr/Fx0Q==', 0, NULL, 'Sun Sep 28 2025 11:52:24 GMT+0800 (GMT+08:00)', 'Sun Sep 28 2025 11:52:24 GMT+0800 (GMT+08:00)', 1, NULL, NULL, 0);
+INSERT INTO `t_wx_login_record` (`id`, `wx_openid`, `wx_unionid`, `user_id`, `login_time`, `login_ip`, `device_info`, `session_key`, `phone_authorized`, `phone_auth_time`, `create_time`, `update_time`, `state`, `create_user_id`, `update_user_id`, `version`) VALUES (42, 'ogxxA1-KrSVTdqI9T1uaB1BQwPGU', NULL, 59, 'Sun Sep 28 2025 11:52:32 GMT+0800 (GMT+08:00)', '127.0.0.1', 'devtools iPhone 12/13 (Pro) iOS 10.0.1', 'NHJCRHrl/6BuYUoyr/Fx0Q==', 0, NULL, 'Sun Sep 28 2025 11:52:32 GMT+0800 (GMT+08:00)', 'Sun Sep 28 2025 11:52:32 GMT+0800 (GMT+08:00)', 1, NULL, NULL, 0);
+INSERT INTO `t_wx_login_record` (`id`, `wx_openid`, `wx_unionid`, `user_id`, `login_time`, `login_ip`, `device_info`, `session_key`, `phone_authorized`, `phone_auth_time`, `create_time`, `update_time`, `state`, `create_user_id`, `update_user_id`, `version`) VALUES (43, 'ogxxA1-KrSVTdqI9T1uaB1BQwPGU', NULL, 59, 'Sun Sep 28 2025 12:01:00 GMT+0800 (GMT+08:00)', '127.0.0.1', 'devtools iPhone 12/13 (Pro) iOS 10.0.1', 'NHJCRHrl/6BuYUoyr/Fx0Q==', 0, NULL, 'Sun Sep 28 2025 12:01:00 GMT+0800 (GMT+08:00)', 'Sun Sep 28 2025 12:01:00 GMT+0800 (GMT+08:00)', 1, NULL, NULL, 0);
+INSERT INTO `t_wx_login_record` (`id`, `wx_openid`, `wx_unionid`, `user_id`, `login_time`, `login_ip`, `device_info`, `session_key`, `phone_authorized`, `phone_auth_time`, `create_time`, `update_time`, `state`, `create_user_id`, `update_user_id`, `version`) VALUES (44, 'ogxxA1-KrSVTdqI9T1uaB1BQwPGU', NULL, 59, 'Sun Sep 28 2025 13:21:49 GMT+0800 (GMT+08:00)', '127.0.0.1', 'devtools iPhone 12/13 (Pro) iOS 10.0.1', 'NHJCRHrl/6BuYUoyr/Fx0Q==', 0, NULL, 'Sun Sep 28 2025 13:21:49 GMT+0800 (GMT+08:00)', 'Sun Sep 28 2025 13:21:49 GMT+0800 (GMT+08:00)', 1, NULL, NULL, 0);
+INSERT INTO `t_wx_login_record` (`id`, `wx_openid`, `wx_unionid`, `user_id`, `login_time`, `login_ip`, `device_info`, `session_key`, `phone_authorized`, `phone_auth_time`, `create_time`, `update_time`, `state`, `create_user_id`, `update_user_id`, `version`) VALUES (45, 'ogxxA1-KrSVTdqI9T1uaB1BQwPGU', NULL, 59, 'Sun Sep 28 2025 13:26:35 GMT+0800 (GMT+08:00)', '127.0.0.1', 'devtools iPhone 12/13 (Pro) iOS 10.0.1', 'NHJCRHrl/6BuYUoyr/Fx0Q==', 0, NULL, 'Sun Sep 28 2025 13:26:35 GMT+0800 (GMT+08:00)', 'Sun Sep 28 2025 13:26:35 GMT+0800 (GMT+08:00)', 1, NULL, NULL, 0);
+INSERT INTO `t_wx_login_record` (`id`, `wx_openid`, `wx_unionid`, `user_id`, `login_time`, `login_ip`, `device_info`, `session_key`, `phone_authorized`, `phone_auth_time`, `create_time`, `update_time`, `state`, `create_user_id`, `update_user_id`, `version`) VALUES (46, 'ogxxA1-KrSVTdqI9T1uaB1BQwPGU', NULL, 59, 'Sun Sep 28 2025 13:31:30 GMT+0800 (GMT+08:00)', '127.0.0.1', 'devtools iPhone 12/13 (Pro) iOS 10.0.1', 'NHJCRHrl/6BuYUoyr/Fx0Q==', 0, NULL, 'Sun Sep 28 2025 13:31:30 GMT+0800 (GMT+08:00)', 'Sun Sep 28 2025 13:31:30 GMT+0800 (GMT+08:00)', 1, NULL, NULL, 0);
+INSERT INTO `t_wx_login_record` (`id`, `wx_openid`, `wx_unionid`, `user_id`, `login_time`, `login_ip`, `device_info`, `session_key`, `phone_authorized`, `phone_auth_time`, `create_time`, `update_time`, `state`, `create_user_id`, `update_user_id`, `version`) VALUES (47, 'ogxxA1-KrSVTdqI9T1uaB1BQwPGU', NULL, 59, 'Sun Sep 28 2025 13:31:43 GMT+0800 (GMT+08:00)', '127.0.0.1', 'devtools iPhone 12/13 (Pro) iOS 10.0.1', 'NHJCRHrl/6BuYUoyr/Fx0Q==', 0, NULL, 'Sun Sep 28 2025 13:31:43 GMT+0800 (GMT+08:00)', 'Sun Sep 28 2025 13:31:43 GMT+0800 (GMT+08:00)', 1, NULL, NULL, 0);
+INSERT INTO `t_wx_login_record` (`id`, `wx_openid`, `wx_unionid`, `user_id`, `login_time`, `login_ip`, `device_info`, `session_key`, `phone_authorized`, `phone_auth_time`, `create_time`, `update_time`, `state`, `create_user_id`, `update_user_id`, `version`) VALUES (48, 'ogxxA1-KrSVTdqI9T1uaB1BQwPGU', NULL, 59, 'Sun Sep 28 2025 13:35:41 GMT+0800 (GMT+08:00)', '127.0.0.1', 'devtools iPhone 12/13 (Pro) iOS 10.0.1', 'NHJCRHrl/6BuYUoyr/Fx0Q==', 0, NULL, 'Sun Sep 28 2025 13:35:41 GMT+0800 (GMT+08:00)', 'Sun Sep 28 2025 13:35:41 GMT+0800 (GMT+08:00)', 1, NULL, NULL, 0);
+INSERT INTO `t_wx_login_record` (`id`, `wx_openid`, `wx_unionid`, `user_id`, `login_time`, `login_ip`, `device_info`, `session_key`, `phone_authorized`, `phone_auth_time`, `create_time`, `update_time`, `state`, `create_user_id`, `update_user_id`, `version`) VALUES (49, 'ogxxA1-KrSVTdqI9T1uaB1BQwPGU', NULL, 59, 'Sun Sep 28 2025 13:36:15 GMT+0800 (GMT+08:00)', '127.0.0.1', 'devtools iPhone 12/13 (Pro) iOS 10.0.1', 'NHJCRHrl/6BuYUoyr/Fx0Q==', 0, NULL, 'Sun Sep 28 2025 13:36:15 GMT+0800 (GMT+08:00)', 'Sun Sep 28 2025 13:36:15 GMT+0800 (GMT+08:00)', 1, NULL, NULL, 0);
+INSERT INTO `t_wx_login_record` (`id`, `wx_openid`, `wx_unionid`, `user_id`, `login_time`, `login_ip`, `device_info`, `session_key`, `phone_authorized`, `phone_auth_time`, `create_time`, `update_time`, `state`, `create_user_id`, `update_user_id`, `version`) VALUES (50, 'ogxxA1-KrSVTdqI9T1uaB1BQwPGU', NULL, 59, 'Sun Sep 28 2025 13:36:32 GMT+0800 (GMT+08:00)', '127.0.0.1', 'devtools iPhone 12/13 (Pro) iOS 10.0.1', 'NHJCRHrl/6BuYUoyr/Fx0Q==', 0, NULL, 'Sun Sep 28 2025 13:36:32 GMT+0800 (GMT+08:00)', 'Sun Sep 28 2025 13:36:32 GMT+0800 (GMT+08:00)', 1, NULL, NULL, 0);
+INSERT INTO `t_wx_login_record` (`id`, `wx_openid`, `wx_unionid`, `user_id`, `login_time`, `login_ip`, `device_info`, `session_key`, `phone_authorized`, `phone_auth_time`, `create_time`, `update_time`, `state`, `create_user_id`, `update_user_id`, `version`) VALUES (51, 'ogxxA1-KrSVTdqI9T1uaB1BQwPGU', NULL, 59, 'Sun Sep 28 2025 13:42:12 GMT+0800 (GMT+08:00)', '127.0.0.1', 'devtools iPhone 12/13 (Pro) iOS 10.0.1', 'NHJCRHrl/6BuYUoyr/Fx0Q==', 0, NULL, 'Sun Sep 28 2025 13:42:12 GMT+0800 (GMT+08:00)', 'Sun Sep 28 2025 13:42:12 GMT+0800 (GMT+08:00)', 1, NULL, NULL, 0);
+INSERT INTO `t_wx_login_record` (`id`, `wx_openid`, `wx_unionid`, `user_id`, `login_time`, `login_ip`, `device_info`, `session_key`, `phone_authorized`, `phone_auth_time`, `create_time`, `update_time`, `state`, `create_user_id`, `update_user_id`, `version`) VALUES (52, 'ogxxA1-KrSVTdqI9T1uaB1BQwPGU', NULL, 59, 'Sun Sep 28 2025 13:42:27 GMT+0800 (GMT+08:00)', '127.0.0.1', 'devtools iPhone 12/13 (Pro) iOS 10.0.1', 'NHJCRHrl/6BuYUoyr/Fx0Q==', 0, NULL, 'Sun Sep 28 2025 13:42:27 GMT+0800 (GMT+08:00)', 'Sun Sep 28 2025 13:42:27 GMT+0800 (GMT+08:00)', 1, NULL, NULL, 0);
+INSERT INTO `t_wx_login_record` (`id`, `wx_openid`, `wx_unionid`, `user_id`, `login_time`, `login_ip`, `device_info`, `session_key`, `phone_authorized`, `phone_auth_time`, `create_time`, `update_time`, `state`, `create_user_id`, `update_user_id`, `version`) VALUES (53, 'ogxxA1-KrSVTdqI9T1uaB1BQwPGU', NULL, 59, 'Sun Sep 28 2025 13:42:35 GMT+0800 (GMT+08:00)', '127.0.0.1', 'devtools iPhone 12/13 (Pro) iOS 10.0.1', 'NHJCRHrl/6BuYUoyr/Fx0Q==', 0, NULL, 'Sun Sep 28 2025 13:42:35 GMT+0800 (GMT+08:00)', 'Sun Sep 28 2025 13:42:35 GMT+0800 (GMT+08:00)', 1, NULL, NULL, 0);
+INSERT INTO `t_wx_login_record` (`id`, `wx_openid`, `wx_unionid`, `user_id`, `login_time`, `login_ip`, `device_info`, `session_key`, `phone_authorized`, `phone_auth_time`, `create_time`, `update_time`, `state`, `create_user_id`, `update_user_id`, `version`) VALUES (54, 'ogxxA1-KrSVTdqI9T1uaB1BQwPGU', NULL, 59, 'Sun Sep 28 2025 13:43:16 GMT+0800 (GMT+08:00)', '127.0.0.1', 'devtools iPhone 12/13 (Pro) iOS 10.0.1', 'NHJCRHrl/6BuYUoyr/Fx0Q==', 0, NULL, 'Sun Sep 28 2025 13:43:16 GMT+0800 (GMT+08:00)', 'Sun Sep 28 2025 13:43:16 GMT+0800 (GMT+08:00)', 1, NULL, NULL, 0);
+INSERT INTO `t_wx_login_record` (`id`, `wx_openid`, `wx_unionid`, `user_id`, `login_time`, `login_ip`, `device_info`, `session_key`, `phone_authorized`, `phone_auth_time`, `create_time`, `update_time`, `state`, `create_user_id`, `update_user_id`, `version`) VALUES (55, 'ogxxA1-KrSVTdqI9T1uaB1BQwPGU', NULL, 59, 'Sun Sep 28 2025 13:43:54 GMT+0800 (GMT+08:00)', '127.0.0.1', 'devtools iPhone 12/13 (Pro) iOS 10.0.1', 'NHJCRHrl/6BuYUoyr/Fx0Q==', 0, NULL, 'Sun Sep 28 2025 13:43:54 GMT+0800 (GMT+08:00)', 'Sun Sep 28 2025 13:43:54 GMT+0800 (GMT+08:00)', 1, NULL, NULL, 0);
+INSERT INTO `t_wx_login_record` (`id`, `wx_openid`, `wx_unionid`, `user_id`, `login_time`, `login_ip`, `device_info`, `session_key`, `phone_authorized`, `phone_auth_time`, `create_time`, `update_time`, `state`, `create_user_id`, `update_user_id`, `version`) VALUES (56, 'ogxxA1-KrSVTdqI9T1uaB1BQwPGU', NULL, 59, 'Sun Sep 28 2025 13:44:12 GMT+0800 (GMT+08:00)', '127.0.0.1', 'devtools iPhone 12/13 (Pro) iOS 10.0.1', 'NHJCRHrl/6BuYUoyr/Fx0Q==', 0, NULL, 'Sun Sep 28 2025 13:44:12 GMT+0800 (GMT+08:00)', 'Sun Sep 28 2025 13:44:12 GMT+0800 (GMT+08:00)', 1, NULL, NULL, 0);
+INSERT INTO `t_wx_login_record` (`id`, `wx_openid`, `wx_unionid`, `user_id`, `login_time`, `login_ip`, `device_info`, `session_key`, `phone_authorized`, `phone_auth_time`, `create_time`, `update_time`, `state`, `create_user_id`, `update_user_id`, `version`) VALUES (57, 'ogxxA1-KrSVTdqI9T1uaB1BQwPGU', NULL, 59, 'Sun Sep 28 2025 13:44:25 GMT+0800 (GMT+08:00)', '127.0.0.1', 'devtools iPhone 12/13 (Pro) iOS 10.0.1', 'NHJCRHrl/6BuYUoyr/Fx0Q==', 0, NULL, 'Sun Sep 28 2025 13:44:25 GMT+0800 (GMT+08:00)', 'Sun Sep 28 2025 13:44:25 GMT+0800 (GMT+08:00)', 1, NULL, NULL, 0);
+INSERT INTO `t_wx_login_record` (`id`, `wx_openid`, `wx_unionid`, `user_id`, `login_time`, `login_ip`, `device_info`, `session_key`, `phone_authorized`, `phone_auth_time`, `create_time`, `update_time`, `state`, `create_user_id`, `update_user_id`, `version`) VALUES (58, 'ogxxA1-KrSVTdqI9T1uaB1BQwPGU', NULL, 59, 'Sun Sep 28 2025 13:44:41 GMT+0800 (GMT+08:00)', '127.0.0.1', 'devtools iPhone 12/13 (Pro) iOS 10.0.1', 'NHJCRHrl/6BuYUoyr/Fx0Q==', 0, NULL, 'Sun Sep 28 2025 13:44:41 GMT+0800 (GMT+08:00)', 'Sun Sep 28 2025 13:44:41 GMT+0800 (GMT+08:00)', 1, NULL, NULL, 0);
+INSERT INTO `t_wx_login_record` (`id`, `wx_openid`, `wx_unionid`, `user_id`, `login_time`, `login_ip`, `device_info`, `session_key`, `phone_authorized`, `phone_auth_time`, `create_time`, `update_time`, `state`, `create_user_id`, `update_user_id`, `version`) VALUES (59, 'ogxxA1-KrSVTdqI9T1uaB1BQwPGU', NULL, 59, 'Sun Sep 28 2025 13:44:48 GMT+0800 (GMT+08:00)', '127.0.0.1', 'devtools iPhone 12/13 (Pro) iOS 10.0.1', 'NHJCRHrl/6BuYUoyr/Fx0Q==', 0, NULL, 'Sun Sep 28 2025 13:44:48 GMT+0800 (GMT+08:00)', 'Sun Sep 28 2025 13:44:48 GMT+0800 (GMT+08:00)', 1, NULL, NULL, 0);
+INSERT INTO `t_wx_login_record` (`id`, `wx_openid`, `wx_unionid`, `user_id`, `login_time`, `login_ip`, `device_info`, `session_key`, `phone_authorized`, `phone_auth_time`, `create_time`, `update_time`, `state`, `create_user_id`, `update_user_id`, `version`) VALUES (60, 'ogxxA1-KrSVTdqI9T1uaB1BQwPGU', NULL, 59, 'Sun Sep 28 2025 13:44:57 GMT+0800 (GMT+08:00)', '127.0.0.1', 'devtools iPhone 12/13 (Pro) iOS 10.0.1', 'NHJCRHrl/6BuYUoyr/Fx0Q==', 0, NULL, 'Sun Sep 28 2025 13:44:57 GMT+0800 (GMT+08:00)', 'Sun Sep 28 2025 13:44:57 GMT+0800 (GMT+08:00)', 1, NULL, NULL, 0);
+INSERT INTO `t_wx_login_record` (`id`, `wx_openid`, `wx_unionid`, `user_id`, `login_time`, `login_ip`, `device_info`, `session_key`, `phone_authorized`, `phone_auth_time`, `create_time`, `update_time`, `state`, `create_user_id`, `update_user_id`, `version`) VALUES (61, 'ogxxA1-KrSVTdqI9T1uaB1BQwPGU', NULL, 59, 'Sun Sep 28 2025 13:46:38 GMT+0800 (GMT+08:00)', '127.0.0.1', 'devtools iPhone 12/13 (Pro) iOS 10.0.1', 'NHJCRHrl/6BuYUoyr/Fx0Q==', 0, NULL, 'Sun Sep 28 2025 13:46:38 GMT+0800 (GMT+08:00)', 'Sun Sep 28 2025 13:46:38 GMT+0800 (GMT+08:00)', 1, NULL, NULL, 0);
+INSERT INTO `t_wx_login_record` (`id`, `wx_openid`, `wx_unionid`, `user_id`, `login_time`, `login_ip`, `device_info`, `session_key`, `phone_authorized`, `phone_auth_time`, `create_time`, `update_time`, `state`, `create_user_id`, `update_user_id`, `version`) VALUES (62, 'ogxxA1-KrSVTdqI9T1uaB1BQwPGU', NULL, 59, 'Sun Sep 28 2025 13:53:17 GMT+0800 (GMT+08:00)', '127.0.0.1', 'devtools iPhone 12/13 (Pro) iOS 10.0.1', 'NHJCRHrl/6BuYUoyr/Fx0Q==', 0, NULL, 'Sun Sep 28 2025 13:53:17 GMT+0800 (GMT+08:00)', 'Sun Sep 28 2025 13:53:17 GMT+0800 (GMT+08:00)', 1, NULL, NULL, 0);
+INSERT INTO `t_wx_login_record` (`id`, `wx_openid`, `wx_unionid`, `user_id`, `login_time`, `login_ip`, `device_info`, `session_key`, `phone_authorized`, `phone_auth_time`, `create_time`, `update_time`, `state`, `create_user_id`, `update_user_id`, `version`) VALUES (63, 'ogxxA1-KrSVTdqI9T1uaB1BQwPGU', NULL, 59, 'Sun Sep 28 2025 13:57:10 GMT+0800 (GMT+08:00)', '127.0.0.1', 'devtools iPhone 12/13 (Pro) iOS 10.0.1', 'NHJCRHrl/6BuYUoyr/Fx0Q==', 0, NULL, 'Sun Sep 28 2025 13:57:10 GMT+0800 (GMT+08:00)', 'Sun Sep 28 2025 13:57:10 GMT+0800 (GMT+08:00)', 1, NULL, NULL, 0);
+INSERT INTO `t_wx_login_record` (`id`, `wx_openid`, `wx_unionid`, `user_id`, `login_time`, `login_ip`, `device_info`, `session_key`, `phone_authorized`, `phone_auth_time`, `create_time`, `update_time`, `state`, `create_user_id`, `update_user_id`, `version`) VALUES (64, 'ogxxA1-KrSVTdqI9T1uaB1BQwPGU', NULL, 59, 'Sun Sep 28 2025 13:57:22 GMT+0800 (GMT+08:00)', '127.0.0.1', 'devtools iPhone 12/13 (Pro) iOS 10.0.1', 'NHJCRHrl/6BuYUoyr/Fx0Q==', 0, NULL, 'Sun Sep 28 2025 13:57:22 GMT+0800 (GMT+08:00)', 'Sun Sep 28 2025 13:57:22 GMT+0800 (GMT+08:00)', 1, NULL, NULL, 0);
+INSERT INTO `t_wx_login_record` (`id`, `wx_openid`, `wx_unionid`, `user_id`, `login_time`, `login_ip`, `device_info`, `session_key`, `phone_authorized`, `phone_auth_time`, `create_time`, `update_time`, `state`, `create_user_id`, `update_user_id`, `version`) VALUES (65, 'ogxxA1-KrSVTdqI9T1uaB1BQwPGU', NULL, 59, 'Sun Sep 28 2025 13:57:34 GMT+0800 (GMT+08:00)', '127.0.0.1', 'devtools iPhone 12/13 (Pro) iOS 10.0.1', 'NHJCRHrl/6BuYUoyr/Fx0Q==', 0, NULL, 'Sun Sep 28 2025 13:57:34 GMT+0800 (GMT+08:00)', 'Sun Sep 28 2025 13:57:34 GMT+0800 (GMT+08:00)', 1, NULL, NULL, 0);
+INSERT INTO `t_wx_login_record` (`id`, `wx_openid`, `wx_unionid`, `user_id`, `login_time`, `login_ip`, `device_info`, `session_key`, `phone_authorized`, `phone_auth_time`, `create_time`, `update_time`, `state`, `create_user_id`, `update_user_id`, `version`) VALUES (66, 'ogxxA1-KrSVTdqI9T1uaB1BQwPGU', NULL, 59, 'Sun Sep 28 2025 13:57:41 GMT+0800 (GMT+08:00)', '127.0.0.1', 'devtools iPhone 12/13 (Pro) iOS 10.0.1', 'NHJCRHrl/6BuYUoyr/Fx0Q==', 0, NULL, 'Sun Sep 28 2025 13:57:41 GMT+0800 (GMT+08:00)', 'Sun Sep 28 2025 13:57:41 GMT+0800 (GMT+08:00)', 1, NULL, NULL, 0);
+INSERT INTO `t_wx_login_record` (`id`, `wx_openid`, `wx_unionid`, `user_id`, `login_time`, `login_ip`, `device_info`, `session_key`, `phone_authorized`, `phone_auth_time`, `create_time`, `update_time`, `state`, `create_user_id`, `update_user_id`, `version`) VALUES (67, 'ogxxA1-KrSVTdqI9T1uaB1BQwPGU', NULL, 59, 'Sun Sep 28 2025 13:58:07 GMT+0800 (GMT+08:00)', '127.0.0.1', 'devtools iPhone 12/13 (Pro) iOS 10.0.1', 'NHJCRHrl/6BuYUoyr/Fx0Q==', 0, NULL, 'Sun Sep 28 2025 13:58:07 GMT+0800 (GMT+08:00)', 'Sun Sep 28 2025 13:58:07 GMT+0800 (GMT+08:00)', 1, NULL, NULL, 0);
+INSERT INTO `t_wx_login_record` (`id`, `wx_openid`, `wx_unionid`, `user_id`, `login_time`, `login_ip`, `device_info`, `session_key`, `phone_authorized`, `phone_auth_time`, `create_time`, `update_time`, `state`, `create_user_id`, `update_user_id`, `version`) VALUES (68, 'ogxxA1-KrSVTdqI9T1uaB1BQwPGU', NULL, 59, 'Sun Sep 28 2025 13:58:20 GMT+0800 (GMT+08:00)', '127.0.0.1', 'devtools iPhone 12/13 (Pro) iOS 10.0.1', 'NHJCRHrl/6BuYUoyr/Fx0Q==', 0, NULL, 'Sun Sep 28 2025 13:58:20 GMT+0800 (GMT+08:00)', 'Sun Sep 28 2025 13:58:20 GMT+0800 (GMT+08:00)', 1, NULL, NULL, 0);
+INSERT INTO `t_wx_login_record` (`id`, `wx_openid`, `wx_unionid`, `user_id`, `login_time`, `login_ip`, `device_info`, `session_key`, `phone_authorized`, `phone_auth_time`, `create_time`, `update_time`, `state`, `create_user_id`, `update_user_id`, `version`) VALUES (69, 'ogxxA1-KrSVTdqI9T1uaB1BQwPGU', NULL, 59, 'Sun Sep 28 2025 13:58:31 GMT+0800 (GMT+08:00)', '127.0.0.1', 'devtools iPhone 12/13 (Pro) iOS 10.0.1', 'NHJCRHrl/6BuYUoyr/Fx0Q==', 0, NULL, 'Sun Sep 28 2025 13:58:31 GMT+0800 (GMT+08:00)', 'Sun Sep 28 2025 13:58:31 GMT+0800 (GMT+08:00)', 1, NULL, NULL, 0);
+INSERT INTO `t_wx_login_record` (`id`, `wx_openid`, `wx_unionid`, `user_id`, `login_time`, `login_ip`, `device_info`, `session_key`, `phone_authorized`, `phone_auth_time`, `create_time`, `update_time`, `state`, `create_user_id`, `update_user_id`, `version`) VALUES (70, 'ogxxA1-KrSVTdqI9T1uaB1BQwPGU', NULL, 59, 'Sun Sep 28 2025 13:58:46 GMT+0800 (GMT+08:00)', '127.0.0.1', 'devtools iPhone 12/13 (Pro) iOS 10.0.1', 'NHJCRHrl/6BuYUoyr/Fx0Q==', 0, NULL, 'Sun Sep 28 2025 13:58:46 GMT+0800 (GMT+08:00)', 'Sun Sep 28 2025 13:58:46 GMT+0800 (GMT+08:00)', 1, NULL, NULL, 0);
+INSERT INTO `t_wx_login_record` (`id`, `wx_openid`, `wx_unionid`, `user_id`, `login_time`, `login_ip`, `device_info`, `session_key`, `phone_authorized`, `phone_auth_time`, `create_time`, `update_time`, `state`, `create_user_id`, `update_user_id`, `version`) VALUES (71, 'ogxxA1-KrSVTdqI9T1uaB1BQwPGU', NULL, 59, 'Sun Sep 28 2025 13:58:49 GMT+0800 (GMT+08:00)', '127.0.0.1', 'devtools iPhone 12/13 (Pro) iOS 10.0.1', 'NHJCRHrl/6BuYUoyr/Fx0Q==', 0, NULL, 'Sun Sep 28 2025 13:58:49 GMT+0800 (GMT+08:00)', 'Sun Sep 28 2025 13:58:49 GMT+0800 (GMT+08:00)', 1, NULL, NULL, 0);
+INSERT INTO `t_wx_login_record` (`id`, `wx_openid`, `wx_unionid`, `user_id`, `login_time`, `login_ip`, `device_info`, `session_key`, `phone_authorized`, `phone_auth_time`, `create_time`, `update_time`, `state`, `create_user_id`, `update_user_id`, `version`) VALUES (72, 'ogxxA1-KrSVTdqI9T1uaB1BQwPGU', NULL, 59, 'Sun Sep 28 2025 13:58:57 GMT+0800 (GMT+08:00)', '127.0.0.1', 'devtools iPhone 12/13 (Pro) iOS 10.0.1', 'NHJCRHrl/6BuYUoyr/Fx0Q==', 0, NULL, 'Sun Sep 28 2025 13:58:57 GMT+0800 (GMT+08:00)', 'Sun Sep 28 2025 13:58:57 GMT+0800 (GMT+08:00)', 1, NULL, NULL, 0);
+INSERT INTO `t_wx_login_record` (`id`, `wx_openid`, `wx_unionid`, `user_id`, `login_time`, `login_ip`, `device_info`, `session_key`, `phone_authorized`, `phone_auth_time`, `create_time`, `update_time`, `state`, `create_user_id`, `update_user_id`, `version`) VALUES (73, 'ogxxA1-KrSVTdqI9T1uaB1BQwPGU', NULL, 59, 'Sun Sep 28 2025 13:59:07 GMT+0800 (GMT+08:00)', '127.0.0.1', 'devtools iPhone 12/13 (Pro) iOS 10.0.1', 'NHJCRHrl/6BuYUoyr/Fx0Q==', 0, NULL, 'Sun Sep 28 2025 13:59:07 GMT+0800 (GMT+08:00)', 'Sun Sep 28 2025 13:59:07 GMT+0800 (GMT+08:00)', 1, NULL, NULL, 0);
+INSERT INTO `t_wx_login_record` (`id`, `wx_openid`, `wx_unionid`, `user_id`, `login_time`, `login_ip`, `device_info`, `session_key`, `phone_authorized`, `phone_auth_time`, `create_time`, `update_time`, `state`, `create_user_id`, `update_user_id`, `version`) VALUES (74, 'ogxxA1-KrSVTdqI9T1uaB1BQwPGU', NULL, 59, 'Sun Sep 28 2025 13:59:18 GMT+0800 (GMT+08:00)', '127.0.0.1', 'devtools iPhone 12/13 (Pro) iOS 10.0.1', 'NHJCRHrl/6BuYUoyr/Fx0Q==', 0, NULL, 'Sun Sep 28 2025 13:59:18 GMT+0800 (GMT+08:00)', 'Sun Sep 28 2025 13:59:18 GMT+0800 (GMT+08:00)', 1, NULL, NULL, 0);
+INSERT INTO `t_wx_login_record` (`id`, `wx_openid`, `wx_unionid`, `user_id`, `login_time`, `login_ip`, `device_info`, `session_key`, `phone_authorized`, `phone_auth_time`, `create_time`, `update_time`, `state`, `create_user_id`, `update_user_id`, `version`) VALUES (75, 'ogxxA1-KrSVTdqI9T1uaB1BQwPGU', NULL, 59, 'Sun Sep 28 2025 13:59:50 GMT+0800 (GMT+08:00)', '127.0.0.1', 'devtools iPhone 12/13 (Pro) iOS 10.0.1', 'NHJCRHrl/6BuYUoyr/Fx0Q==', 0, NULL, 'Sun Sep 28 2025 13:59:50 GMT+0800 (GMT+08:00)', 'Sun Sep 28 2025 13:59:50 GMT+0800 (GMT+08:00)', 1, NULL, NULL, 0);
+INSERT INTO `t_wx_login_record` (`id`, `wx_openid`, `wx_unionid`, `user_id`, `login_time`, `login_ip`, `device_info`, `session_key`, `phone_authorized`, `phone_auth_time`, `create_time`, `update_time`, `state`, `create_user_id`, `update_user_id`, `version`) VALUES (76, 'ogxxA1-KrSVTdqI9T1uaB1BQwPGU', NULL, 59, 'Sun Sep 28 2025 14:00:00 GMT+0800 (GMT+08:00)', '127.0.0.1', 'devtools iPhone 12/13 (Pro) iOS 10.0.1', 'NHJCRHrl/6BuYUoyr/Fx0Q==', 0, NULL, 'Sun Sep 28 2025 14:00:00 GMT+0800 (GMT+08:00)', 'Sun Sep 28 2025 14:00:00 GMT+0800 (GMT+08:00)', 1, NULL, NULL, 0);
+INSERT INTO `t_wx_login_record` (`id`, `wx_openid`, `wx_unionid`, `user_id`, `login_time`, `login_ip`, `device_info`, `session_key`, `phone_authorized`, `phone_auth_time`, `create_time`, `update_time`, `state`, `create_user_id`, `update_user_id`, `version`) VALUES (77, 'ogxxA1-KrSVTdqI9T1uaB1BQwPGU', NULL, 59, 'Sun Sep 28 2025 14:00:11 GMT+0800 (GMT+08:00)', '127.0.0.1', 'devtools iPhone 12/13 (Pro) iOS 10.0.1', 'NHJCRHrl/6BuYUoyr/Fx0Q==', 0, NULL, 'Sun Sep 28 2025 14:00:11 GMT+0800 (GMT+08:00)', 'Sun Sep 28 2025 14:00:11 GMT+0800 (GMT+08:00)', 1, NULL, NULL, 0);
+INSERT INTO `t_wx_login_record` (`id`, `wx_openid`, `wx_unionid`, `user_id`, `login_time`, `login_ip`, `device_info`, `session_key`, `phone_authorized`, `phone_auth_time`, `create_time`, `update_time`, `state`, `create_user_id`, `update_user_id`, `version`) VALUES (78, 'ogxxA1-KrSVTdqI9T1uaB1BQwPGU', NULL, 59, 'Sun Sep 28 2025 14:00:43 GMT+0800 (GMT+08:00)', '127.0.0.1', 'devtools iPhone 12/13 (Pro) iOS 10.0.1', 'NHJCRHrl/6BuYUoyr/Fx0Q==', 0, NULL, 'Sun Sep 28 2025 14:00:43 GMT+0800 (GMT+08:00)', 'Sun Sep 28 2025 14:00:43 GMT+0800 (GMT+08:00)', 1, NULL, NULL, 0);
+INSERT INTO `t_wx_login_record` (`id`, `wx_openid`, `wx_unionid`, `user_id`, `login_time`, `login_ip`, `device_info`, `session_key`, `phone_authorized`, `phone_auth_time`, `create_time`, `update_time`, `state`, `create_user_id`, `update_user_id`, `version`) VALUES (79, 'ogxxA1-KrSVTdqI9T1uaB1BQwPGU', NULL, 59, 'Sun Sep 28 2025 14:00:45 GMT+0800 (GMT+08:00)', '127.0.0.1', 'devtools iPhone 12/13 (Pro) iOS 10.0.1', 'NHJCRHrl/6BuYUoyr/Fx0Q==', 0, NULL, 'Sun Sep 28 2025 14:00:45 GMT+0800 (GMT+08:00)', 'Sun Sep 28 2025 14:00:45 GMT+0800 (GMT+08:00)', 1, NULL, NULL, 0);
+INSERT INTO `t_wx_login_record` (`id`, `wx_openid`, `wx_unionid`, `user_id`, `login_time`, `login_ip`, `device_info`, `session_key`, `phone_authorized`, `phone_auth_time`, `create_time`, `update_time`, `state`, `create_user_id`, `update_user_id`, `version`) VALUES (80, 'ogxxA1-KrSVTdqI9T1uaB1BQwPGU', NULL, 59, 'Sun Sep 28 2025 14:00:47 GMT+0800 (GMT+08:00)', '127.0.0.1', 'devtools iPhone 12/13 (Pro) iOS 10.0.1', 'NHJCRHrl/6BuYUoyr/Fx0Q==', 0, NULL, 'Sun Sep 28 2025 14:00:47 GMT+0800 (GMT+08:00)', 'Sun Sep 28 2025 14:00:47 GMT+0800 (GMT+08:00)', 1, NULL, NULL, 0);
+INSERT INTO `t_wx_login_record` (`id`, `wx_openid`, `wx_unionid`, `user_id`, `login_time`, `login_ip`, `device_info`, `session_key`, `phone_authorized`, `phone_auth_time`, `create_time`, `update_time`, `state`, `create_user_id`, `update_user_id`, `version`) VALUES (81, 'ogxxA1-KrSVTdqI9T1uaB1BQwPGU', NULL, 59, 'Sun Sep 28 2025 14:09:21 GMT+0800 (GMT+08:00)', '127.0.0.1', 'devtools iPhone 12/13 (Pro) iOS 10.0.1', 'NHJCRHrl/6BuYUoyr/Fx0Q==', 0, NULL, 'Sun Sep 28 2025 14:09:21 GMT+0800 (GMT+08:00)', 'Sun Sep 28 2025 14:09:21 GMT+0800 (GMT+08:00)', 1, NULL, NULL, 0);
+INSERT INTO `t_wx_login_record` (`id`, `wx_openid`, `wx_unionid`, `user_id`, `login_time`, `login_ip`, `device_info`, `session_key`, `phone_authorized`, `phone_auth_time`, `create_time`, `update_time`, `state`, `create_user_id`, `update_user_id`, `version`) VALUES (82, 'ogxxA1-KrSVTdqI9T1uaB1BQwPGU', NULL, 59, 'Sun Sep 28 2025 14:14:06 GMT+0800 (GMT+08:00)', '127.0.0.1', 'devtools iPhone 12/13 (Pro) iOS 10.0.1', 'NHJCRHrl/6BuYUoyr/Fx0Q==', 0, NULL, 'Sun Sep 28 2025 14:14:06 GMT+0800 (GMT+08:00)', 'Sun Sep 28 2025 14:14:06 GMT+0800 (GMT+08:00)', 1, NULL, NULL, 0);
+INSERT INTO `t_wx_login_record` (`id`, `wx_openid`, `wx_unionid`, `user_id`, `login_time`, `login_ip`, `device_info`, `session_key`, `phone_authorized`, `phone_auth_time`, `create_time`, `update_time`, `state`, `create_user_id`, `update_user_id`, `version`) VALUES (83, 'ogxxA1-KrSVTdqI9T1uaB1BQwPGU', NULL, 59, 'Sun Sep 28 2025 14:14:24 GMT+0800 (GMT+08:00)', '127.0.0.1', 'devtools iPhone 12/13 (Pro) iOS 10.0.1', 'NHJCRHrl/6BuYUoyr/Fx0Q==', 0, NULL, 'Sun Sep 28 2025 14:14:24 GMT+0800 (GMT+08:00)', 'Sun Sep 28 2025 14:14:24 GMT+0800 (GMT+08:00)', 1, NULL, NULL, 0);
+INSERT INTO `t_wx_login_record` (`id`, `wx_openid`, `wx_unionid`, `user_id`, `login_time`, `login_ip`, `device_info`, `session_key`, `phone_authorized`, `phone_auth_time`, `create_time`, `update_time`, `state`, `create_user_id`, `update_user_id`, `version`) VALUES (84, 'ogxxA1-KrSVTdqI9T1uaB1BQwPGU', NULL, 59, 'Sun Sep 28 2025 20:04:20 GMT+0800 (GMT+08:00)', '127.0.0.1', 'devtools iPhone 12/13 (Pro) iOS 10.0.1', 'kI6uhWBiK+Yhg0DIcghg0A==', 0, NULL, 'Sun Sep 28 2025 20:04:20 GMT+0800 (GMT+08:00)', 'Sun Sep 28 2025 20:04:20 GMT+0800 (GMT+08:00)', 1, NULL, NULL, 0);
+INSERT INTO `t_wx_login_record` (`id`, `wx_openid`, `wx_unionid`, `user_id`, `login_time`, `login_ip`, `device_info`, `session_key`, `phone_authorized`, `phone_auth_time`, `create_time`, `update_time`, `state`, `create_user_id`, `update_user_id`, `version`) VALUES (85, 'ogxxA1-KrSVTdqI9T1uaB1BQwPGU', NULL, 59, 'Sun Sep 28 2025 20:13:15 GMT+0800 (GMT+08:00)', '127.0.0.1', 'devtools iPhone 12/13 (Pro) iOS 10.0.1', 'kI6uhWBiK+Yhg0DIcghg0A==', 0, NULL, 'Sun Sep 28 2025 20:13:15 GMT+0800 (GMT+08:00)', 'Sun Sep 28 2025 20:13:15 GMT+0800 (GMT+08:00)', 1, NULL, NULL, 0);
+INSERT INTO `t_wx_login_record` (`id`, `wx_openid`, `wx_unionid`, `user_id`, `login_time`, `login_ip`, `device_info`, `session_key`, `phone_authorized`, `phone_auth_time`, `create_time`, `update_time`, `state`, `create_user_id`, `update_user_id`, `version`) VALUES (86, 'ogxxA1-KrSVTdqI9T1uaB1BQwPGU', NULL, 59, 'Sun Sep 28 2025 20:13:37 GMT+0800 (GMT+08:00)', '127.0.0.1', 'devtools iPhone 12/13 (Pro) iOS 10.0.1', 'kI6uhWBiK+Yhg0DIcghg0A==', 0, NULL, 'Sun Sep 28 2025 20:13:37 GMT+0800 (GMT+08:00)', 'Sun Sep 28 2025 20:13:37 GMT+0800 (GMT+08:00)', 1, NULL, NULL, 0);
+INSERT INTO `t_wx_login_record` (`id`, `wx_openid`, `wx_unionid`, `user_id`, `login_time`, `login_ip`, `device_info`, `session_key`, `phone_authorized`, `phone_auth_time`, `create_time`, `update_time`, `state`, `create_user_id`, `update_user_id`, `version`) VALUES (87, 'ogxxA1-KrSVTdqI9T1uaB1BQwPGU', NULL, 59, 'Sun Sep 28 2025 20:13:57 GMT+0800 (GMT+08:00)', '127.0.0.1', 'devtools iPhone 12/13 (Pro) iOS 10.0.1', 'kI6uhWBiK+Yhg0DIcghg0A==', 0, NULL, 'Sun Sep 28 2025 20:13:57 GMT+0800 (GMT+08:00)', 'Sun Sep 28 2025 20:13:57 GMT+0800 (GMT+08:00)', 1, NULL, NULL, 0);
+INSERT INTO `t_wx_login_record` (`id`, `wx_openid`, `wx_unionid`, `user_id`, `login_time`, `login_ip`, `device_info`, `session_key`, `phone_authorized`, `phone_auth_time`, `create_time`, `update_time`, `state`, `create_user_id`, `update_user_id`, `version`) VALUES (88, 'ogxxA1-KrSVTdqI9T1uaB1BQwPGU', NULL, 59, 'Sun Sep 28 2025 20:15:41 GMT+0800 (GMT+08:00)', '127.0.0.1', 'devtools iPhone 12/13 (Pro) iOS 10.0.1', 'kI6uhWBiK+Yhg0DIcghg0A==', 0, NULL, 'Sun Sep 28 2025 20:15:41 GMT+0800 (GMT+08:00)', 'Sun Sep 28 2025 20:15:41 GMT+0800 (GMT+08:00)', 1, NULL, NULL, 0);
+INSERT INTO `t_wx_login_record` (`id`, `wx_openid`, `wx_unionid`, `user_id`, `login_time`, `login_ip`, `device_info`, `session_key`, `phone_authorized`, `phone_auth_time`, `create_time`, `update_time`, `state`, `create_user_id`, `update_user_id`, `version`) VALUES (89, 'ogxxA1-KrSVTdqI9T1uaB1BQwPGU', NULL, 59, 'Sun Sep 28 2025 20:15:58 GMT+0800 (GMT+08:00)', '127.0.0.1', 'devtools iPhone 12/13 (Pro) iOS 10.0.1', 'kI6uhWBiK+Yhg0DIcghg0A==', 0, NULL, 'Sun Sep 28 2025 20:15:58 GMT+0800 (GMT+08:00)', 'Sun Sep 28 2025 20:15:58 GMT+0800 (GMT+08:00)', 1, NULL, NULL, 0);
+INSERT INTO `t_wx_login_record` (`id`, `wx_openid`, `wx_unionid`, `user_id`, `login_time`, `login_ip`, `device_info`, `session_key`, `phone_authorized`, `phone_auth_time`, `create_time`, `update_time`, `state`, `create_user_id`, `update_user_id`, `version`) VALUES (90, 'ogxxA1-KrSVTdqI9T1uaB1BQwPGU', NULL, 59, 'Sun Sep 28 2025 20:16:22 GMT+0800 (GMT+08:00)', '127.0.0.1', 'devtools iPhone 12/13 (Pro) iOS 10.0.1', 'kI6uhWBiK+Yhg0DIcghg0A==', 0, NULL, 'Sun Sep 28 2025 20:16:22 GMT+0800 (GMT+08:00)', 'Sun Sep 28 2025 20:16:22 GMT+0800 (GMT+08:00)', 1, NULL, NULL, 0);
+INSERT INTO `t_wx_login_record` (`id`, `wx_openid`, `wx_unionid`, `user_id`, `login_time`, `login_ip`, `device_info`, `session_key`, `phone_authorized`, `phone_auth_time`, `create_time`, `update_time`, `state`, `create_user_id`, `update_user_id`, `version`) VALUES (91, 'ogxxA1-KrSVTdqI9T1uaB1BQwPGU', NULL, 59, 'Sun Sep 28 2025 20:16:33 GMT+0800 (GMT+08:00)', '127.0.0.1', 'devtools iPhone 12/13 (Pro) iOS 10.0.1', 'kI6uhWBiK+Yhg0DIcghg0A==', 0, NULL, 'Sun Sep 28 2025 20:16:33 GMT+0800 (GMT+08:00)', 'Sun Sep 28 2025 20:16:33 GMT+0800 (GMT+08:00)', 1, NULL, NULL, 0);
+INSERT INTO `t_wx_login_record` (`id`, `wx_openid`, `wx_unionid`, `user_id`, `login_time`, `login_ip`, `device_info`, `session_key`, `phone_authorized`, `phone_auth_time`, `create_time`, `update_time`, `state`, `create_user_id`, `update_user_id`, `version`) VALUES (92, 'ogxxA1-KrSVTdqI9T1uaB1BQwPGU', NULL, 59, 'Sun Sep 28 2025 20:19:08 GMT+0800 (GMT+08:00)', '127.0.0.1', 'devtools iPhone 12/13 (Pro) iOS 10.0.1', 'kI6uhWBiK+Yhg0DIcghg0A==', 0, NULL, 'Sun Sep 28 2025 20:19:08 GMT+0800 (GMT+08:00)', 'Sun Sep 28 2025 20:19:08 GMT+0800 (GMT+08:00)', 1, NULL, NULL, 0);
+INSERT INTO `t_wx_login_record` (`id`, `wx_openid`, `wx_unionid`, `user_id`, `login_time`, `login_ip`, `device_info`, `session_key`, `phone_authorized`, `phone_auth_time`, `create_time`, `update_time`, `state`, `create_user_id`, `update_user_id`, `version`) VALUES (93, 'ogxxA1-KrSVTdqI9T1uaB1BQwPGU', NULL, 59, 'Sun Sep 28 2025 20:21:17 GMT+0800 (GMT+08:00)', '127.0.0.1', 'devtools iPhone 12/13 (Pro) iOS 10.0.1', 'kI6uhWBiK+Yhg0DIcghg0A==', 0, NULL, 'Sun Sep 28 2025 20:21:17 GMT+0800 (GMT+08:00)', 'Sun Sep 28 2025 20:21:17 GMT+0800 (GMT+08:00)', 1, NULL, NULL, 0);
+INSERT INTO `t_wx_login_record` (`id`, `wx_openid`, `wx_unionid`, `user_id`, `login_time`, `login_ip`, `device_info`, `session_key`, `phone_authorized`, `phone_auth_time`, `create_time`, `update_time`, `state`, `create_user_id`, `update_user_id`, `version`) VALUES (94, 'ogxxA1-KrSVTdqI9T1uaB1BQwPGU', NULL, 59, 'Sun Sep 28 2025 20:21:44 GMT+0800 (GMT+08:00)', '127.0.0.1', 'devtools iPhone 12/13 (Pro) iOS 10.0.1', 'kI6uhWBiK+Yhg0DIcghg0A==', 0, NULL, 'Sun Sep 28 2025 20:21:44 GMT+0800 (GMT+08:00)', 'Sun Sep 28 2025 20:21:44 GMT+0800 (GMT+08:00)', 1, NULL, NULL, 0);
+INSERT INTO `t_wx_login_record` (`id`, `wx_openid`, `wx_unionid`, `user_id`, `login_time`, `login_ip`, `device_info`, `session_key`, `phone_authorized`, `phone_auth_time`, `create_time`, `update_time`, `state`, `create_user_id`, `update_user_id`, `version`) VALUES (95, 'ogxxA1-KrSVTdqI9T1uaB1BQwPGU', NULL, 59, 'Sun Sep 28 2025 22:11:53 GMT+0800 (GMT+08:00)', '127.0.0.1', 'devtools iPhone 12/13 (Pro) iOS 10.0.1', 'kI6uhWBiK+Yhg0DIcghg0A==', 0, NULL, 'Sun Sep 28 2025 22:11:53 GMT+0800 (GMT+08:00)', 'Sun Sep 28 2025 22:11:53 GMT+0800 (GMT+08:00)', 1, NULL, NULL, 0);
+INSERT INTO `t_wx_login_record` (`id`, `wx_openid`, `wx_unionid`, `user_id`, `login_time`, `login_ip`, `device_info`, `session_key`, `phone_authorized`, `phone_auth_time`, `create_time`, `update_time`, `state`, `create_user_id`, `update_user_id`, `version`) VALUES (96, 'ogxxA1-KrSVTdqI9T1uaB1BQwPGU', NULL, 59, 'Sun Sep 28 2025 22:49:47 GMT+0800 (GMT+08:00)', '127.0.0.1', 'devtools iPhone 12/13 (Pro) iOS 10.0.1', 'kI6uhWBiK+Yhg0DIcghg0A==', 0, NULL, 'Sun Sep 28 2025 22:49:47 GMT+0800 (GMT+08:00)', 'Sun Sep 28 2025 22:49:47 GMT+0800 (GMT+08:00)', 1, NULL, NULL, 0);
+INSERT INTO `t_wx_login_record` (`id`, `wx_openid`, `wx_unionid`, `user_id`, `login_time`, `login_ip`, `device_info`, `session_key`, `phone_authorized`, `phone_auth_time`, `create_time`, `update_time`, `state`, `create_user_id`, `update_user_id`, `version`) VALUES (97, 'ogxxA1-KrSVTdqI9T1uaB1BQwPGU', NULL, 59, 'Sun Sep 28 2025 22:58:58 GMT+0800 (GMT+08:00)', '127.0.0.1', 'devtools iPhone 12/13 (Pro) iOS 10.0.1', 'kI6uhWBiK+Yhg0DIcghg0A==', 0, NULL, 'Sun Sep 28 2025 22:58:58 GMT+0800 (GMT+08:00)', 'Sun Sep 28 2025 22:58:58 GMT+0800 (GMT+08:00)', 1, NULL, NULL, 0);
+INSERT INTO `t_wx_login_record` (`id`, `wx_openid`, `wx_unionid`, `user_id`, `login_time`, `login_ip`, `device_info`, `session_key`, `phone_authorized`, `phone_auth_time`, `create_time`, `update_time`, `state`, `create_user_id`, `update_user_id`, `version`) VALUES (98, 'ogxxA1-KrSVTdqI9T1uaB1BQwPGU', NULL, 59, 'Mon Sep 29 2025 08:22:12 GMT+0800 (GMT+08:00)', '127.0.0.1', 'devtools iPhone 12/13 (Pro) iOS 10.0.1', 'AayzoBmtjQhX3ubh2pWr2Q==', 0, NULL, 'Mon Sep 29 2025 08:22:12 GMT+0800 (GMT+08:00)', 'Mon Sep 29 2025 08:22:12 GMT+0800 (GMT+08:00)', 1, NULL, NULL, 0);
+INSERT INTO `t_wx_login_record` (`id`, `wx_openid`, `wx_unionid`, `user_id`, `login_time`, `login_ip`, `device_info`, `session_key`, `phone_authorized`, `phone_auth_time`, `create_time`, `update_time`, `state`, `create_user_id`, `update_user_id`, `version`) VALUES (99, 'ogxxA1-KrSVTdqI9T1uaB1BQwPGU', NULL, 59, 'Mon Sep 29 2025 08:31:24 GMT+0800 (GMT+08:00)', '127.0.0.1', 'devtools iPhone 12/13 (Pro) iOS 10.0.1', 'AayzoBmtjQhX3ubh2pWr2Q==', 0, NULL, 'Mon Sep 29 2025 08:31:24 GMT+0800 (GMT+08:00)', 'Mon Sep 29 2025 08:31:24 GMT+0800 (GMT+08:00)', 1, NULL, NULL, 0);
+INSERT INTO `t_wx_login_record` (`id`, `wx_openid`, `wx_unionid`, `user_id`, `login_time`, `login_ip`, `device_info`, `session_key`, `phone_authorized`, `phone_auth_time`, `create_time`, `update_time`, `state`, `create_user_id`, `update_user_id`, `version`) VALUES (100, 'ogxxA1-KrSVTdqI9T1uaB1BQwPGU', NULL, 59, 'Mon Sep 29 2025 08:32:51 GMT+0800 (GMT+08:00)', '127.0.0.1', 'devtools iPhone 12/13 (Pro) iOS 10.0.1', 'AayzoBmtjQhX3ubh2pWr2Q==', 0, NULL, 'Mon Sep 29 2025 08:32:51 GMT+0800 (GMT+08:00)', 'Mon Sep 29 2025 08:32:51 GMT+0800 (GMT+08:00)', 1, NULL, NULL, 0);
+INSERT INTO `t_wx_login_record` (`id`, `wx_openid`, `wx_unionid`, `user_id`, `login_time`, `login_ip`, `device_info`, `session_key`, `phone_authorized`, `phone_auth_time`, `create_time`, `update_time`, `state`, `create_user_id`, `update_user_id`, `version`) VALUES (101, 'ogxxA1-KrSVTdqI9T1uaB1BQwPGU', NULL, 59, 'Mon Sep 29 2025 08:33:25 GMT+0800 (GMT+08:00)', '127.0.0.1', 'devtools iPhone 12/13 (Pro) iOS 10.0.1', 'AayzoBmtjQhX3ubh2pWr2Q==', 0, NULL, 'Mon Sep 29 2025 08:33:25 GMT+0800 (GMT+08:00)', 'Mon Sep 29 2025 08:33:25 GMT+0800 (GMT+08:00)', 1, NULL, NULL, 0);
+INSERT INTO `t_wx_login_record` (`id`, `wx_openid`, `wx_unionid`, `user_id`, `login_time`, `login_ip`, `device_info`, `session_key`, `phone_authorized`, `phone_auth_time`, `create_time`, `update_time`, `state`, `create_user_id`, `update_user_id`, `version`) VALUES (102, 'ogxxA1-KrSVTdqI9T1uaB1BQwPGU', NULL, 59, 'Mon Sep 29 2025 08:38:37 GMT+0800 (GMT+08:00)', '127.0.0.1', 'devtools iPhone 12/13 (Pro) iOS 10.0.1', 'AayzoBmtjQhX3ubh2pWr2Q==', 0, NULL, 'Mon Sep 29 2025 08:38:37 GMT+0800 (GMT+08:00)', 'Mon Sep 29 2025 08:38:37 GMT+0800 (GMT+08:00)', 1, NULL, NULL, 0);
+INSERT INTO `t_wx_login_record` (`id`, `wx_openid`, `wx_unionid`, `user_id`, `login_time`, `login_ip`, `device_info`, `session_key`, `phone_authorized`, `phone_auth_time`, `create_time`, `update_time`, `state`, `create_user_id`, `update_user_id`, `version`) VALUES (103, 'ogxxA1-KrSVTdqI9T1uaB1BQwPGU', NULL, 59, 'Mon Sep 29 2025 08:46:37 GMT+0800 (GMT+08:00)', '127.0.0.1', 'devtools iPhone 12/13 (Pro) iOS 10.0.1', 'AayzoBmtjQhX3ubh2pWr2Q==', 0, NULL, 'Mon Sep 29 2025 08:46:37 GMT+0800 (GMT+08:00)', 'Mon Sep 29 2025 08:46:37 GMT+0800 (GMT+08:00)', 1, NULL, NULL, 0);
+INSERT INTO `t_wx_login_record` (`id`, `wx_openid`, `wx_unionid`, `user_id`, `login_time`, `login_ip`, `device_info`, `session_key`, `phone_authorized`, `phone_auth_time`, `create_time`, `update_time`, `state`, `create_user_id`, `update_user_id`, `version`) VALUES (104, 'ogxxA1-KrSVTdqI9T1uaB1BQwPGU', NULL, 59, 'Mon Sep 29 2025 08:48:57 GMT+0800 (GMT+08:00)', '127.0.0.1', 'devtools iPhone 12/13 (Pro) iOS 10.0.1', 'AayzoBmtjQhX3ubh2pWr2Q==', 0, NULL, 'Mon Sep 29 2025 08:48:57 GMT+0800 (GMT+08:00)', 'Mon Sep 29 2025 08:48:57 GMT+0800 (GMT+08:00)', 1, NULL, NULL, 0);
+INSERT INTO `t_wx_login_record` (`id`, `wx_openid`, `wx_unionid`, `user_id`, `login_time`, `login_ip`, `device_info`, `session_key`, `phone_authorized`, `phone_auth_time`, `create_time`, `update_time`, `state`, `create_user_id`, `update_user_id`, `version`) VALUES (105, 'ogxxA1-KrSVTdqI9T1uaB1BQwPGU', NULL, 59, 'Mon Sep 29 2025 09:03:20 GMT+0800 (GMT+08:00)', '127.0.0.1', 'devtools iPhone 12/13 (Pro) iOS 10.0.1', 'AayzoBmtjQhX3ubh2pWr2Q==', 0, NULL, 'Mon Sep 29 2025 09:03:20 GMT+0800 (GMT+08:00)', 'Mon Sep 29 2025 09:03:20 GMT+0800 (GMT+08:00)', 1, NULL, NULL, 0);
+INSERT INTO `t_wx_login_record` (`id`, `wx_openid`, `wx_unionid`, `user_id`, `login_time`, `login_ip`, `device_info`, `session_key`, `phone_authorized`, `phone_auth_time`, `create_time`, `update_time`, `state`, `create_user_id`, `update_user_id`, `version`) VALUES (106, 'ogxxA1-KrSVTdqI9T1uaB1BQwPGU', NULL, 59, 'Mon Sep 29 2025 09:22:06 GMT+0800 (GMT+08:00)', '127.0.0.1', 'devtools iPhone 12/13 (Pro) iOS 10.0.1', 'AayzoBmtjQhX3ubh2pWr2Q==', 0, NULL, 'Mon Sep 29 2025 09:22:06 GMT+0800 (GMT+08:00)', 'Mon Sep 29 2025 09:22:06 GMT+0800 (GMT+08:00)', 1, NULL, NULL, 0);
+INSERT INTO `t_wx_login_record` (`id`, `wx_openid`, `wx_unionid`, `user_id`, `login_time`, `login_ip`, `device_info`, `session_key`, `phone_authorized`, `phone_auth_time`, `create_time`, `update_time`, `state`, `create_user_id`, `update_user_id`, `version`) VALUES (107, 'ogxxA1-KrSVTdqI9T1uaB1BQwPGU', NULL, 59, 'Mon Sep 29 2025 09:40:37 GMT+0800 (GMT+08:00)', '127.0.0.1', 'devtools iPhone 12/13 (Pro) iOS 10.0.1', 'AayzoBmtjQhX3ubh2pWr2Q==', 0, NULL, 'Mon Sep 29 2025 09:40:37 GMT+0800 (GMT+08:00)', 'Mon Sep 29 2025 09:40:37 GMT+0800 (GMT+08:00)', 1, NULL, NULL, 0);
+INSERT INTO `t_wx_login_record` (`id`, `wx_openid`, `wx_unionid`, `user_id`, `login_time`, `login_ip`, `device_info`, `session_key`, `phone_authorized`, `phone_auth_time`, `create_time`, `update_time`, `state`, `create_user_id`, `update_user_id`, `version`) VALUES (108, 'ogxxA1-KrSVTdqI9T1uaB1BQwPGU', NULL, 59, 'Mon Sep 29 2025 09:58:33 GMT+0800 (GMT+08:00)', '127.0.0.1', 'devtools iPhone 12/13 (Pro) iOS 10.0.1', 'AayzoBmtjQhX3ubh2pWr2Q==', 0, NULL, 'Mon Sep 29 2025 09:58:33 GMT+0800 (GMT+08:00)', 'Mon Sep 29 2025 09:58:33 GMT+0800 (GMT+08:00)', 1, NULL, NULL, 0);
+INSERT INTO `t_wx_login_record` (`id`, `wx_openid`, `wx_unionid`, `user_id`, `login_time`, `login_ip`, `device_info`, `session_key`, `phone_authorized`, `phone_auth_time`, `create_time`, `update_time`, `state`, `create_user_id`, `update_user_id`, `version`) VALUES (109, 'ogxxA1-KrSVTdqI9T1uaB1BQwPGU', NULL, 59, 'Mon Sep 29 2025 10:01:54 GMT+0800 (GMT+08:00)', '127.0.0.1', 'devtools iPhone 12/13 (Pro) iOS 10.0.1', 'AayzoBmtjQhX3ubh2pWr2Q==', 0, NULL, 'Mon Sep 29 2025 10:01:54 GMT+0800 (GMT+08:00)', 'Mon Sep 29 2025 10:01:54 GMT+0800 (GMT+08:00)', 1, NULL, NULL, 0);
+INSERT INTO `t_wx_login_record` (`id`, `wx_openid`, `wx_unionid`, `user_id`, `login_time`, `login_ip`, `device_info`, `session_key`, `phone_authorized`, `phone_auth_time`, `create_time`, `update_time`, `state`, `create_user_id`, `update_user_id`, `version`) VALUES (116, 'ogxxA1-KrSVTdqI9T1uaB1BQwPGU', NULL, 59, 'Tue Sep 30 2025 09:07:52 GMT+0800 (GMT+08:00)', '127.0.0.1', 'devtools iPhone 12/13 (Pro) iOS 10.0.1', 'Esfw6euQufW7cZop3dgoSg==', 0, NULL, 'Tue Sep 30 2025 09:07:52 GMT+0800 (GMT+08:00)', 'Tue Sep 30 2025 09:07:52 GMT+0800 (GMT+08:00)', 1, NULL, NULL, 0);
+INSERT INTO `t_wx_login_record` (`id`, `wx_openid`, `wx_unionid`, `user_id`, `login_time`, `login_ip`, `device_info`, `session_key`, `phone_authorized`, `phone_auth_time`, `create_time`, `update_time`, `state`, `create_user_id`, `update_user_id`, `version`) VALUES (117, 'ogxxA1-KrSVTdqI9T1uaB1BQwPGU', NULL, 59, 'Tue Sep 30 2025 09:07:59 GMT+0800 (GMT+08:00)', '127.0.0.1', 'devtools iPhone 12/13 (Pro) iOS 10.0.1', 'Esfw6euQufW7cZop3dgoSg==', 0, NULL, 'Tue Sep 30 2025 09:07:59 GMT+0800 (GMT+08:00)', 'Tue Sep 30 2025 09:07:59 GMT+0800 (GMT+08:00)', 1, NULL, NULL, 0);
+INSERT INTO `t_wx_login_record` (`id`, `wx_openid`, `wx_unionid`, `user_id`, `login_time`, `login_ip`, `device_info`, `session_key`, `phone_authorized`, `phone_auth_time`, `create_time`, `update_time`, `state`, `create_user_id`, `update_user_id`, `version`) VALUES (118, 'ogxxA1-KrSVTdqI9T1uaB1BQwPGU', NULL, 59, 'Tue Sep 30 2025 10:39:12 GMT+0800 (GMT+08:00)', '127.0.0.1', 'devtools iPhone 12/13 (Pro) iOS 10.0.1', 'Esfw6euQufW7cZop3dgoSg==', 0, NULL, 'Tue Sep 30 2025 10:39:12 GMT+0800 (GMT+08:00)', 'Tue Sep 30 2025 10:39:12 GMT+0800 (GMT+08:00)', 1, NULL, NULL, 0);
+INSERT INTO `t_wx_login_record` (`id`, `wx_openid`, `wx_unionid`, `user_id`, `login_time`, `login_ip`, `device_info`, `session_key`, `phone_authorized`, `phone_auth_time`, `create_time`, `update_time`, `state`, `create_user_id`, `update_user_id`, `version`) VALUES (119, 'ogxxA1-KrSVTdqI9T1uaB1BQwPGU', NULL, 59, 'Tue Sep 30 2025 14:05:00 GMT+0800 (GMT+08:00)', '127.0.0.1', 'devtools iPhone 12/13 (Pro) iOS 10.0.1', 'Esfw6euQufW7cZop3dgoSg==', 0, NULL, 'Tue Sep 30 2025 14:05:00 GMT+0800 (GMT+08:00)', 'Tue Sep 30 2025 14:05:00 GMT+0800 (GMT+08:00)', 1, NULL, NULL, 0);
+INSERT INTO `t_wx_login_record` (`id`, `wx_openid`, `wx_unionid`, `user_id`, `login_time`, `login_ip`, `device_info`, `session_key`, `phone_authorized`, `phone_auth_time`, `create_time`, `update_time`, `state`, `create_user_id`, `update_user_id`, `version`) VALUES (120, 'ogxxA1-KrSVTdqI9T1uaB1BQwPGU', NULL, 59, 'Tue Sep 30 2025 14:20:13 GMT+0800 (GMT+08:00)', '127.0.0.1', 'devtools iPhone 12/13 (Pro) iOS 10.0.1', 'Esfw6euQufW7cZop3dgoSg==', 0, NULL, 'Tue Sep 30 2025 14:20:13 GMT+0800 (GMT+08:00)', 'Tue Sep 30 2025 14:20:13 GMT+0800 (GMT+08:00)', 1, NULL, NULL, 0);
+INSERT INTO `t_wx_login_record` (`id`, `wx_openid`, `wx_unionid`, `user_id`, `login_time`, `login_ip`, `device_info`, `session_key`, `phone_authorized`, `phone_auth_time`, `create_time`, `update_time`, `state`, `create_user_id`, `update_user_id`, `version`) VALUES (121, 'ogxxA1-KrSVTdqI9T1uaB1BQwPGU', NULL, 59, 'Tue Sep 30 2025 17:39:16 GMT+0800 (GMT+08:00)', '127.0.0.1', 'devtools iPhone 12/13 (Pro) iOS 10.0.1', 'NZCjzJrxBJXrDugAmcxw9Q==', 0, NULL, 'Tue Sep 30 2025 17:39:16 GMT+0800 (GMT+08:00)', 'Tue Sep 30 2025 17:39:16 GMT+0800 (GMT+08:00)', 1, NULL, NULL, 0);
+
diff --git a/web/package.json b/web/package.json
index 74b0695..cd13aad 100644
--- a/web/package.json
+++ b/web/package.json
@@ -30,8 +30,10 @@
     "@typescript-eslint/eslint-plugin": "^6.12.0",
     "@typescript-eslint/parser": "^6.12.0",
     "@vitejs/plugin-vue": "^4.5.0",
+    "autoprefixer": "^10.4.21",
     "eslint": "^8.54.0",
     "eslint-plugin-vue": "^9.18.1",
+    "postcss": "^8.5.6",
     "prettier": "^3.1.0",
     "sass": "^1.69.5",
     "terser": "^5.44.0",
diff --git a/web/postcss.config.js b/web/postcss.config.js
new file mode 100644
index 0000000..d902995
--- /dev/null
+++ b/web/postcss.config.js
@@ -0,0 +1,5 @@
+export default {
+  plugins: {
+    autoprefixer: {},
+  },
+}
\ No newline at end of file
diff --git a/web/src/api/activity.js b/web/src/api/activity.js
index 6ea223a..bd78df0 100644
--- a/web/src/api/activity.js
+++ b/web/src/api/activity.js
@@ -87,6 +87,7 @@
       state
       stateName
       sortOrder
+      playerCount
       parent {
         id
         name
@@ -139,9 +140,18 @@
 
 export const getAllActivities = async () => {
   try {
+    console.log('=== getAllActivities API璋冪敤寮�濮� ===');
+    console.log('GraphQL鏌ヨ:', GET_ALL_ACTIVITIES_QUERY);
+    
     const data = await graphqlRequest(GET_ALL_ACTIVITIES_QUERY);
+    console.log('GraphQL杩斿洖鐨勫師濮嬫暟鎹�:', data);
+    console.log('data.allActivities:', data.allActivities);
+    
     return data.allActivities;
   } catch (error) {
+    console.error('=== getAllActivities API璋冪敤澶辫触 ===');
+    console.error('閿欒璇︽儏:', error);
+    console.error('閿欒娑堟伅:', error.message);
     throw new Error(error.message || '鑾峰彇鎵�鏈夋瘮璧涘け璐�');
   }
 };
diff --git a/web/src/api/projectReview.js b/web/src/api/projectReview.js
index cbfaa9e..37e9148 100644
--- a/web/src/api/projectReview.js
+++ b/web/src/api/projectReview.js
@@ -2,10 +2,10 @@
 
 // GraphQL 鏌ヨ璇彞
 
-// 鑾峰彇杩涜涓殑姣旇禌鍒楄〃锛堝寘鎷樁娈碉級
-const GET_ACTIVE_ACTIVITIES_QUERY = `
-  query GetActiveActivities {
-    allActivities {
+// 鑾峰彇杩涜涓殑姣旇禌闃舵鍒楄〃
+const GET_ACTIVITY_STAGES_QUERY = `
+  query GetActivityStages {
+    allActivityStages {
       id
       pid
       name
@@ -121,32 +121,21 @@
 // API 鍑芥暟
 
 /**
- * 鑾峰彇杩涜涓殑姣旇禌闃舵鍒楄〃锛坰tate=1涓攑id>0鐨勬瘮璧涢樁娈碉級
- * 鎸夋瘮璧涘垎缁勬帓搴忥紝鏄剧ず鏍煎紡涓�"姣旇禌鍚� + 闃舵鍚�"
+ * 鑾峰彇杩涜涓殑姣旇禌闃舵鍒楄〃
+ * 鍚庣宸茬粡杩囨护浜嗘瘮璧涢樁娈碉紙pid>0涓攕tate=1锛夛紝鐩存帴杩斿洖
  */
 export const getActiveActivities = async () => {
   try {
-    const data = await graphqlRequest(GET_ACTIVE_ACTIVITIES_QUERY)
+    const data = await graphqlRequest(GET_ACTIVITY_STAGES_QUERY)
     
-    // 杩囨护鍑簊tate=1涓攑id>0鐨勬瘮璧涢樁娈�
-    const stages = data.allActivities.filter(activity => 
-      activity.state === 1 && activity.pid > 0
-    )
+    // 鍚庣宸茬粡杩囨护浜嗘瘮璧涢樁娈碉紝鐩存帴杩斿洖
+    const activities = data.allActivityStages || []
     
-    // 鎸夋瘮璧汭D(pid)鍒嗙粍鎺掑簭锛岀‘淇濆悓涓�姣旇禌鐨勪笉鍚岄樁娈垫斁鍦ㄤ竴璧�
-    stages.sort((a, b) => {
-      // 棣栧厛鎸夋瘮璧汭D鎺掑簭
-      if (a.pid !== b.pid) {
-        return a.pid - b.pid
-      }
-      // 鍚屼竴姣旇禌鍐呮寜闃舵ID鎺掑簭
-      return a.id - b.id
-    })
-    
-    return stages
+    console.log('鑾峰彇鍒扮殑姣旇禌闃舵:', activities)
+    return activities
   } catch (error) {
-    console.error('鑾峰彇娲诲姩鍒楄〃澶辫触:', error)
-    throw new Error(error.message || '鑾峰彇娲诲姩鍒楄〃澶辫触')
+    console.error('鑾峰彇姣旇禌闃舵澶辫触:', error)
+    throw new Error(error.message || '鑾峰彇姣旇禌闃舵澶辫触')
   }
 }
 
diff --git a/web/src/config/api.ts b/web/src/config/api.ts
index 485abb2..62cf341 100644
--- a/web/src/config/api.ts
+++ b/web/src/config/api.ts
@@ -17,36 +17,59 @@
 
 // GraphQL璇锋眰宸ュ叿鍑芥暟
 export const graphqlRequest = async (query: string, variables: any = {}) => {
+  console.log('=== GraphQL璇锋眰寮�濮� ===');
+  console.log('璇锋眰绔偣:', API_CONFIG.GRAPHQL_ENDPOINT);
+  console.log('鏌ヨ璇彞:', query);
+  console.log('鍙橀噺:', variables);
+  
   // 鑾峰彇JWT token
   const { getToken } = await import('@/utils/auth');
   const token = getToken();
+  console.log('JWT Token:', token ? '宸茶幏鍙�' : '鏈幏鍙�');
+  
   const headers: Record<string, string> = {
     'Content-Type': 'application/json',
   };
   if (token) {
     headers['Authorization'] = `Bearer ${token}`;
   }
+  console.log('璇锋眰澶�:', headers);
 
-  const response = await fetch(API_CONFIG.GRAPHQL_ENDPOINT, {
-    method: 'POST',
-    headers: headers,
-    body: JSON.stringify({
-      query,
-      variables,
-    }),
-  })
+  const requestBody = JSON.stringify({
+    query,
+    variables,
+  });
+  console.log('璇锋眰浣�:', requestBody);
 
-  if (!response.ok) {
-    throw new Error(`HTTP error! status: ${response.status}`)
+  try {
+    const response = await fetch(API_CONFIG.GRAPHQL_ENDPOINT, {
+      method: 'POST',
+      headers: headers,
+      body: requestBody,
+    })
+
+    console.log('鍝嶅簲鐘舵��:', response.status);
+    console.log('鍝嶅簲鐘舵�佹枃鏈�:', response.statusText);
+
+    if (!response.ok) {
+      throw new Error(`HTTP error! status: ${response.status}`)
+    }
+
+    const result = await response.json()
+    console.log('鍝嶅簲缁撴灉:', result);
+    
+    if (result.errors) {
+      console.error('GraphQL閿欒:', result.errors);
+      throw new Error(result.errors[0].message)
+    }
+
+    console.log('杩斿洖鏁版嵁:', result.data);
+    return result.data
+  } catch (error) {
+    console.error('=== GraphQL璇锋眰澶辫触 ===');
+    console.error('閿欒璇︽儏:', error);
+    throw error;
   }
-
-  const result = await response.json()
-  
-  if (result.errors) {
-    throw new Error(result.errors[0].message)
-  }
-
-  return result.data
 }
 
 // 閫氱敤API璇锋眰宸ュ叿鍑芥暟
diff --git a/web/src/layout/index.vue b/web/src/layout/index.vue
index 0d417e6..88f4c8f 100644
--- a/web/src/layout/index.vue
+++ b/web/src/layout/index.vue
@@ -1,54 +1,81 @@
 <template>
   <el-container class="layout-container">
-    <!-- 渚ц竟鏍� -->
-    <el-aside width="200px" class="sidebar">
-      <div class="logo">
-        <h2>钃夋槗鍒�</h2>
+    <!-- 椤堕儴鏍� -->
+    <el-header class="layout-header">
+      <div class="header-content">
+        <span class="system-title">钃夋槗鍒涚鐞嗙郴缁�</span>
+        <el-dropdown @command="handleCommand">
+          <span class="el-dropdown-link">
+            {{ currentUserName }}
+            <el-icon class="el-icon--right">
+              <arrow-down />
+            </el-icon>
+          </span>
+          <template #dropdown>
+            <el-dropdown-menu>
+              <el-dropdown-item command="profile">涓汉淇℃伅</el-dropdown-item>
+              <el-dropdown-item command="logout">閫�鍑虹櫥褰�</el-dropdown-item>
+            </el-dropdown-menu>
+          </template>
+        </el-dropdown>
       </div>
-      <el-menu
-        :default-active="$route.path"
-        class="sidebar-menu"
-        router
-        unique-opened
-      >
-        <el-menu-item
-          v-for="item in menuItems"
-          :key="item.path"
-          :index="item.path"
+    </el-header>
+    
+    <!-- 涓嬫柟瀹瑰櫒锛氬乏渚ц彍鍗� + 鍙充晶鍐呭 -->
+    <el-container class="main-container">
+      <el-aside width="200px" class="layout-aside">
+        <el-menu
+          :default-active="$route.path"
+          class="sidebar-menu"
+          router
+          background-color="#545c64"
+          text-color="#fff"
+          active-text-color="#ffd04b"
         >
-          <el-icon><component :is="item.icon" /></el-icon>
-          <span>{{ item.title }}</span>
-        </el-menu-item>
-      </el-menu>
-    </el-aside>
-
-    <!-- 涓诲唴瀹瑰尯 -->
-    <el-container>
-      <!-- 椤堕儴瀵艰埅 -->
-      <el-header class="header">
-        <div class="header-left">
-          <h3>{{ currentPageTitle }}</h3>
-        </div>
-        <div class="header-right">
-          <el-dropdown @command="handleCommand">
-            <span class="user-info">
-              <el-icon><User /></el-icon>
-              <span>{{ currentUserName }}</span>
-              <el-tag size="small" style="margin-left: 8px">{{ currentUserRole }}</el-tag>
-              <el-icon><ArrowDown /></el-icon>
-            </span>
-            <template #dropdown>
-              <el-dropdown-menu>
-                <el-dropdown-item command="profile">涓汉淇℃伅</el-dropdown-item>
-                <el-dropdown-item command="logout" divided>閫�鍑虹櫥褰�</el-dropdown-item>
-              </el-dropdown-menu>
-            </template>
-          </el-dropdown>
-        </div>
-      </el-header>
-
-      <!-- 涓诲唴瀹� -->
-      <el-main class="main-content">
+          <el-menu-item index="/dashboard">
+            <el-icon><House /></el-icon>
+            <span>宸ヤ綔鍙�</span>
+          </el-menu-item>
+          <el-menu-item index="/activity">
+            <el-icon><Calendar /></el-icon>
+            <span>姣旇禌淇℃伅</span>
+          </el-menu-item>
+          <el-menu-item index="/judge">
+            <el-icon><User /></el-icon>
+            <span>璇勫绠$悊</span>
+          </el-menu-item>
+          <el-menu-item index="/rating-scheme">
+            <el-icon><Document /></el-icon>
+            <span>璇勫垎妯℃澘</span>
+          </el-menu-item>
+          <el-menu-item index="/player">
+            <el-icon><UserFilled /></el-icon>
+            <span>鎶ュ悕瀹℃牳</span>
+          </el-menu-item>
+          <el-menu-item index="/project-review">
+            <el-icon><Files /></el-icon>
+            <span>椤圭洰璇勫</span>
+          </el-menu-item>
+          <el-menu-item index="/competition-promotion">
+            <el-icon><TrendCharts /></el-icon>
+            <span>姣旇禌鏅嬬骇</span>
+          </el-menu-item>
+          <el-menu-item index="/carousel">
+            <el-icon><Picture /></el-icon>
+            <span>鏂伴椈涓庢帹骞�</span>
+          </el-menu-item>
+          <el-menu-item index="/region">
+            <el-icon><Location /></el-icon>
+            <span>鍖哄煙绠$悊</span>
+          </el-menu-item>
+          <el-menu-item index="/employee">
+            <el-icon><Avatar /></el-icon>
+            <span>鍛樺伐绠$悊</span>
+          </el-menu-item>
+        </el-menu>
+      </el-aside>
+      
+      <el-main class="layout-main">
         <router-view />
       </el-main>
     </el-container>
@@ -57,138 +84,90 @@
 
 <script setup lang="ts">
 import { computed } from 'vue'
-import { useRoute, useRouter } from 'vue-router'
-import { ElMessage, ElMessageBox } from 'element-plus'
-import { getCurrentUserDisplayName, getCurrentUserRoleText, clearAuth } from '@/utils/auth'
+import { useRouter } from 'vue-router'
+import { House, Calendar, User, Document, UserFilled, Files, TrendCharts, Picture, Location, Avatar, ArrowDown } from '@element-plus/icons-vue'
 
-const route = useRoute()
 const router = useRouter()
 
-// 褰撳墠鐢ㄦ埛淇℃伅
-const currentUserName = computed(() => getCurrentUserDisplayName())
-const currentUserRole = computed(() => getCurrentUserRoleText())
+const userInfo = computed(() => ({
+  name: '绠$悊鍛�'
+}))
 
-// 鑿滃崟椤�
-const menuItems = [
-  { path: '/dashboard', title: '宸ヤ綔鍙�', icon: 'House' },
-  { path: '/activity', title: '姣旇禌绠$悊', icon: 'Trophy' },
-  { path: '/judge', title: '璇勫绠$悊', icon: 'User' },
-  { path: '/rating-scheme', title: '璇勫垎妯℃澘', icon: 'Document' },
-  { path: '/player', title: '鎶ュ悕瀹℃牳', icon: 'UserFilled' },
-  { path: '/project-review', title: '椤圭洰璇勫', icon: 'View' },
-  { path: '/competition-promotion', title: '姣旇禌鏅嬬骇', icon: 'Promotion' },
-  { path: '/carousel', title: '鏂伴椈涓庢帹骞�', icon: 'Picture' },
-  { path: '/region', title: '鍖哄煙绠$悊', icon: 'Location' },
-  { path: '/employee', title: '鍛樺伐绠$悊', icon: 'Avatar' }
-]
+const currentUserName = computed(() => userInfo.value.name || '鐢ㄦ埛')
 
-// 褰撳墠椤甸潰鏍囬
-const currentPageTitle = computed(() => {
-  const currentItem = menuItems.find(item => item.path === route.path)
-  return currentItem?.title || '钃夋槗鍒涚鐞嗙郴缁�'
-})
-
-// 澶勭悊鐢ㄦ埛鎿嶄綔
-const handleCommand = async (command: string) => {
-  if (command === 'logout') {
-    try {
-      await ElMessageBox.confirm('纭畾瑕侀��鍑虹櫥褰曞悧锛�', '鎻愮ず', {
-        confirmButtonText: '纭畾',
-        cancelButtonText: '鍙栨秷',
-        type: 'warning'
-      })
-      
-      clearAuth()
-      ElMessage.success('閫�鍑虹櫥褰曟垚鍔�')
+const handleCommand = (command: string) => {
+  switch (command) {
+    case 'profile':
+      router.push('/profile')
+      break
+    case 'logout':
+      localStorage.removeItem('token')
       router.push('/login')
-    } catch {
-      // 鐢ㄦ埛鍙栨秷
-    }
-  } else if (command === 'profile') {
-    ElMessage.info('涓汉淇℃伅鍔熻兘寰呭紑鍙�')
+      break
   }
 }
 </script>
 
-<style lang="scss" scoped>
+<style scoped>
+/* 鏁翠綋甯冨眬瀹瑰櫒 */
 .layout-container {
   height: 100vh;
+  width: 100vw;
 }
 
-.sidebar {
-  background-color: #304156;
-  color: white;
-  
-  .logo {
-    height: 60px;
-    display: flex;
-    align-items: center;
-    justify-content: center;
-    border-bottom: 1px solid #434a50;
-    
-    h2 {
-      color: white;
-      font-size: 18px;
-      font-weight: bold;
-    }
-  }
-  
-  .sidebar-menu {
-    background-color: #304156;
-    border-right: none;
-    
-    :deep(.el-menu-item) {
-      color: #bfcbd9;
-      
-      &:hover {
-        background-color: #434a50;
-        color: white;
-      }
-      
-      &.is-active {
-        background-color: #409eff;
-        color: white;
-      }
-    }
-  }
+/* 椤堕儴鏍忔牱寮� */
+.layout-header {
+  background-color: #B3C0D1;
+  color: #333;
+  line-height: 60px;
+  padding: 0 20px;
+  border-bottom: 1px solid #dcdfe6;
 }
 
-.header {
-  background-color: white;
-  border-bottom: 1px solid #e4e7ed;
+.header-content {
+  display: flex;
+  justify-content: space-between;
+  align-items: center;
+  height: 100%;
+}
+
+.system-title {
+  font-size: 18px;
+  font-weight: bold;
+  color: #333;
+}
+
+/* 涓昏瀹瑰櫒 */
+.main-container {
+  height: calc(100vh - 60px);
+}
+
+/* 渚ц竟鏍忔牱寮� */
+.layout-aside {
+  background-color: #545c64;
+  height: 100%;
+}
+
+.sidebar-menu {
+  height: 100%;
+  border-right: none;
+}
+
+/* 涓诲唴瀹瑰尯鍩� */
+.layout-main {
+  background-color: #f5f5f5;
+  padding: 20px;
+}
+
+/* 涓嬫媺鑿滃崟鏍峰紡 */
+.el-dropdown-link {
+  cursor: pointer;
+  color: #333;
   display: flex;
   align-items: center;
-  justify-content: space-between;
-  padding: 0 20px;
-  
-  .header-left {
-    h3 {
-      color: #303133;
-      font-size: 16px;
-      font-weight: 500;
-    }
-  }
-  
-  .header-right {
-    .user-info {
-      display: flex;
-      align-items: center;
-      cursor: pointer;
-      color: #606266;
-      
-      .el-icon {
-        margin: 0 4px;
-      }
-      
-      &:hover {
-        color: #409eff;
-      }
-    }
-  }
 }
 
-.main-content {
-  background-color: #f5f5f5;
-  min-height: calc(100vh - 60px);
+.el-dropdown-link:hover {
+  color: #409eff;
 }
 </style>
\ No newline at end of file
diff --git a/web/src/router/index.ts b/web/src/router/index.ts
index b052ee7..1301df5 100644
--- a/web/src/router/index.ts
+++ b/web/src/router/index.ts
@@ -132,6 +132,12 @@
         name: 'GraphQLTest',
         component: () => import('@/views/test/graphql-test.vue'),
         meta: { title: 'GraphQL娴嬭瘯', icon: 'Connection' }
+      },
+      {
+        path: '/test/user-prefill',
+        name: 'TestUserPrefill',
+        component: () => import('@/pages/TestUserPrefill.vue'),
+        meta: { title: '鐢ㄦ埛淇℃伅棰勫~鍏呮祴璇�', icon: 'User' }
       }
     ]
   },
diff --git a/web/src/style/index.scss b/web/src/style/index.scss
index 9be01ea..c2d04a4 100644
--- a/web/src/style/index.scss
+++ b/web/src/style/index.scss
@@ -1,22 +1,31 @@
 // 鍏ㄥ眬鏍峰紡
-
 * {
   margin: 0;
   padding: 0;
   box-sizing: border-box;
 }
 
-html, body {
-  height: 100%;
-  font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, sans-serif;
-  font-size: 14px;
+body {
+  font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;
+  line-height: 1.6;
   color: #333;
   background-color: #f5f5f5;
 }
 
 // Element Plus 鏍峰紡瑕嗙洊
 .el-menu {
-  border-right: none !important;
+  border-right: none;
+}
+
+.el-menu-item {
+  &:hover {
+    background-color: #ecf5ff;
+  }
+  
+  &.is-active {
+    background-color: #409eff;
+    color: white;
+  }
 }
 
 .el-main {
diff --git a/web/src/views/activity/index.vue b/web/src/views/activity/index.vue
index 0e506f1..76f7e4f 100644
--- a/web/src/views/activity/index.vue
+++ b/web/src/views/activity/index.vue
@@ -1,7 +1,7 @@
 鍜屼綘<template>
   <div class="activity-page">
     <div class="page-card">
-      <h3 class="card-title">姣旇禌绠$悊</h3>
+      <h3 class="card-title">姣旇禌淇℃伅</h3>
       
       <!-- 鎼滅储鍜屾搷浣滄爮 -->
       <div class="toolbar">
diff --git a/web/src/views/dashboard/index.vue b/web/src/views/dashboard/index.vue
index d2a3ba5..77196f9 100644
--- a/web/src/views/dashboard/index.vue
+++ b/web/src/views/dashboard/index.vue
@@ -1,76 +1,77 @@
 <template>
-  <div class="dashboard">
-    <!-- 鏁版嵁缁熻鍗$墖 -->
-    <el-row :gutter="20" class="stats-row">
+  <div>
+    <el-row :gutter="20">
       <el-col :span="6">
-        <div class="stat-card">
-          <div class="stat-icon">
-            <el-icon color="#409eff"><Trophy /></el-icon>
+        <el-card class="box-card">
+          <template #header>
+            <div class="card-header">
+              <span>褰撳墠杩涜姣旇禌</span>
+            </div>
+          </template>
+          <div class="text item">
+            {{ stats.activeActivities }}
           </div>
-          <div class="stat-content">
-            <div class="stat-number">{{ stats.activeActivities }}</div>
-            <div class="stat-label">褰撳墠杩涜姣旇禌</div>
-          </div>
-        </div>
+        </el-card>
       </el-col>
-      
       <el-col :span="6">
-        <div class="stat-card">
-          <div class="stat-icon">
-            <el-icon color="#67c23a"><UserFilled /></el-icon>
+        <el-card class="box-card">
+          <template #header>
+            <div class="card-header">
+              <span>鍙傝禌鎬讳汉鏁�</span>
+            </div>
+          </template>
+          <div class="text item">
+            {{ stats.totalPlayers }}
           </div>
-          <div class="stat-content">
-            <div class="stat-number">{{ stats.totalPlayers }}</div>
-            <div class="stat-label">鍙傝禌鎬讳汉鏁�</div>
-          </div>
-        </div>
+        </el-card>
       </el-col>
-      
       <el-col :span="6">
-        <div class="stat-card">
-          <div class="stat-icon">
-            <el-icon color="#e6a23c"><Clock /></el-icon>
+        <el-card class="box-card">
+          <template #header>
+            <div class="card-header">
+              <span>鎶ュ悕寰呭鏍�</span>
+            </div>
+          </template>
+          <div class="text item">
+            {{ stats.pendingReviews }}
           </div>
-          <div class="stat-content">
-            <div class="stat-number">{{ stats.pendingReviews }}</div>
-            <div class="stat-label">鎶ュ悕寰呭鏍�</div>
-          </div>
-        </div>
+        </el-card>
       </el-col>
-      
       <el-col :span="6">
-        <div class="stat-card">
-          <div class="stat-icon">
-            <el-icon color="#f56c6c"><User /></el-icon>
+        <el-card class="box-card">
+          <template #header>
+            <div class="card-header">
+              <span>璇勫鎬绘暟</span>
+            </div>
+          </template>
+          <div class="text item">
+            {{ stats.totalJudges }}
           </div>
-          <div class="stat-content">
-            <div class="stat-number">{{ stats.totalJudges }}</div>
-            <div class="stat-label">璇勫鎬绘暟</div>
-          </div>
-        </div>
+        </el-card>
       </el-col>
     </el-row>
 
-    <!-- 鏈�杩戞椿鍔� -->
-    <div class="page-card">
-      <h3 class="card-title">鏈�杩戞瘮璧�</h3>
+    <el-card class="box-card" style="margin-top: 20px;">
+      <template #header>
+        <div class="card-header">
+          <span>鏈�杩戞瘮璧�</span>
+          <el-button type="primary" @click="$router.push('/activity')">鏌ョ湅鍏ㄩ儴</el-button>
+        </div>
+      </template>
       <el-table :data="recentActivities" style="width: 100%">
-        <el-table-column prop="name" label="姣旇禌鍚嶇О" />
+        <el-table-column prop="name" label="姣旇禌鍚嶇О" width="180" />
         <el-table-column prop="playerCount" label="鎶ュ悕浜烘暟" width="120" />
-        <el-table-column prop="startTime" label="姣旇禌鏃堕棿" width="180" />
-        <el-table-column prop="status" label="鐘舵��" width="100">
-          <template #default="{ row }">
-            <el-tag :type="getStatusType(row.status)">{{ row.status }}</el-tag>
-          </template>
-        </el-table-column>
-        <el-table-column label="鎿嶄綔" width="150">
-          <template #default="{ row }">
-            <el-button type="primary" size="small" @click="viewActivity(row)">鏌ョ湅</el-button>
-            <el-button type="success" size="small" @click="manageActivity(row)">绠$悊</el-button>
+        <el-table-column prop="startTime" label="寮�濮嬫椂闂�" width="180" />
+        <el-table-column prop="endTime" label="缁撴潫鏃堕棿" width="180" />
+        <el-table-column prop="status" label="鐘舵��" width="100" />
+        <el-table-column label="鎿嶄綔">
+          <template #default="scope">
+            <el-button size="small" @click="viewActivity(scope.row)">鏌ョ湅</el-button>
+            <el-button size="small" type="primary" @click="manageActivity(scope.row)">绠$悊</el-button>
           </template>
         </el-table-column>
       </el-table>
-    </div>
+    </el-card>
   </div>
 </template>
 
@@ -78,7 +79,6 @@
 import { ref, onMounted } from 'vue'
 import { useRouter } from 'vue-router'
 import { ElMessage } from 'element-plus'
-import { Trophy, UserFilled, Clock, User } from '@element-plus/icons-vue'
 import { getDashboardStats } from '@/api/dashboard'
 import { getActivities } from '@/api/activity'
 
@@ -115,6 +115,7 @@
       name: activity.name,
       playerCount: activity.playerCount || 0,
       startTime: activity.matchTime || activity.createTime,
+      endTime: activity.endTime || '寰呭畾',
       status: activity.stateName || '鏈煡'
     }))
   } catch (error) {
@@ -129,17 +130,6 @@
   loadRecentActivities()
 })
 
-// 鑾峰彇鐘舵�佹爣绛剧被鍨�
-const getStatusType = (status: string) => {
-  const typeMap: Record<string, string> = {
-    '杩涜涓�': 'success',
-    '鎶ュ悕涓�': 'warning',
-    '寰呭紑濮�': 'info',
-    '宸茬粨鏉�': 'info'
-  }
-  return typeMap[status] || 'info'
-}
-
 // 鏌ョ湅姣旇禌
 const viewActivity = (activity: any) => {
   router.push(`/activity/${activity.id}`)
@@ -151,55 +141,23 @@
 }
 </script>
 
-<style lang="scss" scoped>
-.dashboard {
-  .stats-row {
-    margin-bottom: 20px;
-  }
-  
-  .stat-card {
-    background: white;
-    border-radius: 8px;
-    padding: 20px;
-    display: flex;
-    align-items: center;
-    box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1);
-    
-    .stat-icon {
-      font-size: 40px;
-      margin-right: 16px;
-    }
-    
-    .stat-content {
-      .stat-number {
-        font-size: 24px;
-        font-weight: bold;
-        color: #303133;
-        margin-bottom: 4px;
-      }
-      
-      .stat-label {
-        font-size: 14px;
-        color: #909399;
-      }
-    }
-  }
-  
-  .card-title {
-    margin-bottom: 20px;
-    color: #303133;
-    font-size: 16px;
-    font-weight: 500;
-  }
-  
-  .quick-btn {
-    width: 100%;
-    height: 60px;
-    font-size: 14px;
-    
-    .el-icon {
-      margin-right: 8px;
-    }
-  }
+<style scoped>
+.card-header {
+  display: flex;
+  justify-content: space-between;
+  align-items: center;
+}
+
+.text {
+  font-size: 24px;
+  font-weight: bold;
+}
+
+.item {
+  margin-bottom: 18px;
+}
+
+.box-card {
+  width: 100%;
 }
 </style>
\ No newline at end of file
diff --git a/web/src/views/player/index.vue b/web/src/views/player/index.vue
index 3531e92..c26ebb2 100644
--- a/web/src/views/player/index.vue
+++ b/web/src/views/player/index.vue
@@ -46,6 +46,12 @@
           <el-icon><Search /></el-icon>
           鎼滅储
         </el-button>
+        <el-button type="warning" @click="debugAPI">
+          璋冭瘯API
+        </el-button>
+        <span style="margin-left: 10px; color: #666; font-size: 12px;">
+          娲诲姩閫夐」鏁伴噺: {{ activityOptions.length }}
+        </span>
       </div>
 
       <!-- 瀛﹀憳鍒楄〃 -->
@@ -235,11 +241,81 @@
 // 鍔犺浇娲诲姩閫夐」
 const loadActivityOptions = async () => {
   try {
+    console.log('=== 寮�濮嬪姞杞芥椿鍔ㄩ�夐」 ===')
+    console.log('璋冪敤getAllActivities API...')
+    
     const activities = await getAllActivities()
-    // 鍙樉绀虹姸鎬佷负1锛堣繘琛屼腑锛夌殑姣旇禌鍙婂叾闃舵
-    activityOptions.value = (activities || []).filter(activity => activity.state === 1)
-  } catch (e: any) {
-    console.error('鍔犺浇娲诲姩閫夐」澶辫触:', e)
+    console.log('API杩斿洖鐨勫師濮嬫暟鎹�:', activities)
+    console.log('鏁版嵁绫诲瀷:', typeof activities)
+    console.log('鏄惁涓烘暟缁�:', Array.isArray(activities))
+    
+    if (activities && Array.isArray(activities)) {
+      console.log('娲诲姩鏁伴噺:', activities.length)
+      activities.forEach((activity, index) => {
+        console.log(`娲诲姩${index + 1}:`, {
+          id: activity.id,
+          name: activity.name,
+          state: activity.state,
+          pid: activity.pid
+        })
+      })
+      
+      // 杩囨护鍑烘鍦ㄨ繘琛岀殑姣旇禌锛堜笉鏄樁娈碉級
+      const filtered = activities.filter(activity => 
+        activity.state === 1 && (activity.pid === 0 || activity.pid === "0")
+      )
+      console.log('杩囨护鏉′欢: state === 1 && (pid === 0 || pid === "0")')
+      console.log('杩囨护鍚庣殑娲诲姩:', filtered)
+      
+      activityOptions.value = filtered
+      console.log('璁剧疆鍒癮ctivityOptions.value:', activityOptions.value)
+      console.log('activityOptions.value.length:', activityOptions.value.length)
+      
+      // 寮哄埗瑙﹀彂鍝嶅簲寮忔洿鏂�
+      setTimeout(() => {
+        console.log('寤惰繜妫�鏌ctivityOptions.value:', activityOptions.value)
+        console.log('寤惰繜妫�鏌ctivityOptions.value.length:', activityOptions.value.length)
+      }, 100)
+    } else {
+      console.error('API杩斿洖鐨勬暟鎹牸寮忎笉姝g‘:', activities)
+    }
+  } catch (error) {
+    console.error('=== 鍔犺浇娲诲姩閫夐」澶辫触 ===')
+    console.error('閿欒璇︽儏:', error)
+    console.error('閿欒娑堟伅:', error.message)
+    console.error('閿欒鍫嗘爤:', error.stack)
+    ElMessage.error('鍔犺浇娲诲姩閫夐」澶辫触: ' + error.message)
+  }
+}
+
+// 璋冭瘯API鍑芥暟
+const debugAPI = async () => {
+  console.log('=== 寮�濮婣PI璋冭瘯 ===')
+  
+  // 妫�鏌ヨ璇佺姸鎬�
+  const token = localStorage.getItem('auth_token')
+  const userInfo = localStorage.getItem('user_info')
+  
+  console.log('璁よ瘉鐘舵�佹鏌�:')
+  console.log('Token:', token ? '宸插瓨鍦�' : '涓嶅瓨鍦�')
+  console.log('Token鍐呭:', token)
+  console.log('鐢ㄦ埛淇℃伅:', userInfo ? '宸插瓨鍦�' : '涓嶅瓨鍦�')
+  console.log('鐢ㄦ埛淇℃伅鍐呭:', userInfo)
+  
+  if (!token) {
+    ElMessage.error('鏈壘鍒拌璇乼oken锛岃鍏堢櫥褰�')
+    return
+  }
+  
+  // 娴嬭瘯API璋冪敤
+  try {
+    console.log('寮�濮嬫祴璇昰etAllActivities API...')
+    const activities = await getAllActivities()
+    console.log('API璋冪敤鎴愬姛锛岃繑鍥炴暟鎹�:', activities)
+    ElMessage.success(`API璋冪敤鎴愬姛锛岃幏鍙栧埌${activities?.length || 0}涓椿鍔╜)
+  } catch (error) {
+    console.error('API璋冪敤澶辫触:', error)
+    ElMessage.error('API璋冪敤澶辫触: ' + error.message)
   }
 }
 
@@ -272,8 +348,17 @@
 }
 
 onMounted(() => {
-  loadActivityOptions()
-  loadData()
+  console.log('=== Player椤甸潰onMounted琚皟鐢� ===')
+  console.log('褰撳墠鏃堕棿:', new Date().toLocaleTimeString())
+  console.log('activityOptions鍒濆鍊�:', activityOptions.value)
+  console.log('鐩存帴鍔犺浇娲诲姩閫夐」杩涜娴嬭瘯...')
+  
+  // 绔嬪嵆璋冪敤API娴嬭瘯
+  loadActivityOptions().catch(error => {
+    console.error('loadActivityOptions璋冪敤澶辫触:', error)
+  })
+  
+  // loadData() // 鏆傛椂娉ㄩ噴鎺夛紝涓撴敞浜庢椿鍔ㄩ�夐」鍔犺浇
 })
 </script>
 
diff --git a/web/src/views/review/detail.vue b/web/src/views/review/detail.vue
index da57466..c6ab8ef 100644
--- a/web/src/views/review/detail.vue
+++ b/web/src/views/review/detail.vue
@@ -48,7 +48,7 @@
                   <el-button 
                     type="primary" 
                     link 
-                    @click="previewFile(file)"
+                    @click="showPreview(file)"
                     v-if="canPreview(file.mediaType)"
                   >
                     棰勮
@@ -163,7 +163,7 @@
             <div class="submit-section">
               <el-button 
                 type="primary" 
-                @click="submitRating" 
+                @click="handleSubmitRating" 
                 :loading="submitting"
                 :disabled="!canSubmit"
                 size="large"
@@ -282,7 +282,7 @@
 }
 
 // 鎻愪氦璇勫垎
-const submitRating = async () => {
+const handleSubmitRating = async () => {
   try {
     await ElMessageBox.confirm('纭鎻愪氦璇勫垎鍚楋紵鎻愪氦鍚庝笉鍙慨鏀广��', '纭鎻愪氦', {
       confirmButtonText: '纭',
@@ -350,7 +350,7 @@
   return `${size.toFixed(1)} ${units[index]}`
 }
 
-const previewFile = (file) => {
+const showPreview = (file) => {
   previewFile.value = file
   previewVisible.value = true
 }
diff --git a/web/src/views/review/index.vue b/web/src/views/review/index.vue
index 2967d8c..ff306e3 100644
--- a/web/src/views/review/index.vue
+++ b/web/src/views/review/index.vue
@@ -19,7 +19,7 @@
             <el-option
               v-for="item in activities"
               :key="item.id"
-              :label="item.name"
+              :label="getActivityDisplayName(item)"
               :value="item.id"
             />
           </el-select>
@@ -230,6 +230,19 @@
   return stateMap[state] || '鏈煡'
 }
 
+// 鑾峰彇娲诲姩鏄剧ず鍚嶇О锛堟瘮璧涘悕绉� + 闃舵鍚嶇О锛�
+const getActivityDisplayName = (activity) => {
+  if (!activity) return ''
+  
+  // 濡傛灉鏈夌埗姣旇禌淇℃伅锛屾樉绀�"姣旇禌鍚嶇О - 闃舵鍚嶇О"
+  if (activity.parent && activity.parent.name) {
+    return `${activity.parent.name} - ${activity.name}`
+  }
+  
+  // 濡傛灉娌℃湁鐖舵瘮璧涗俊鎭紝鍙樉绀洪樁娈靛悕绉�
+  return activity.name
+}
+
 // 缁勪欢鎸傝浇鏃跺姞杞芥暟鎹�
 onMounted(() => {
   loadActivities()
diff --git a/web/src/views/test/cos-simple.vue b/web/src/views/test/cos-simple.vue
deleted file mode 100644
index c072242..0000000
--- a/web/src/views/test/cos-simple.vue
+++ /dev/null
@@ -1,447 +0,0 @@
-<template>
-  <div class="cos-simple-test">
-    <div class="page-card">
-      <h3 class="card-title">鑵捐浜慍OS涓婁紶绠�鍗曟祴璇�</h3>
-      
-      <!-- 閰嶇疆淇℃伅 -->
-      <el-alert
-        title="閰嶇疆璇存槑"
-        type="warning"
-        :closable="false"
-        show-icon
-        style="margin-bottom: 20px;"
-      >
-        <p>璇峰湪 <code>web/src/utils/cos-config.ts</code> 涓厤缃纭殑COS淇℃伅锛�</p>
-        <ul>
-          <li>Region: 瀛樺偍妗舵墍鍦ㄥ湴鍩燂紙濡傦細ap-chengdu锛�</li>
-          <li>Bucket: 瀛樺偍妗跺悕绉�</li>
-          <li>SecretId 鍜� SecretKey: 璁块棶瀵嗛挜锛堢敓浜х幆澧冨簲閫氳繃鍚庣鑾峰彇涓存椂瀵嗛挜锛�</li>
-        </ul>
-      </el-alert>
-
-      <!-- 褰撳墠閰嶇疆鏄剧ず -->
-      <el-card shadow="never" style="margin-bottom: 20px;">
-        <template #header>
-          <span>褰撳墠閰嶇疆</span>
-        </template>
-        <div class="config-display">
-          <p><strong>瀛樺偍妗�:</strong> {{ cosConfig.bucket }}</p>
-          <p><strong>鍦板煙:</strong> {{ cosConfig.region }}</p>
-          <p><strong>鐘舵��:</strong> 
-            <el-tag :type="connectionStatus === 'success' ? 'success' : 'danger'">
-              {{ connectionStatus === 'success' ? '閰嶇疆姝e父' : '璇锋鏌ラ厤缃�' }}
-            </el-tag>
-          </p>
-        </div>
-      </el-card>
-
-      <!-- 鏂囦欢涓婁紶 -->
-      <el-card shadow="never">
-        <template #header>
-          <span>鏂囦欢涓婁紶娴嬭瘯</span>
-        </template>
-        
-        <div class="upload-section">
-          <!-- 閫夋嫨鏂囦欢 -->
-          <div class="file-input-section">
-            <el-upload
-              ref="uploadRef"
-              :auto-upload="false"
-              :show-file-list="false"
-              :on-change="handleFileSelect"
-              accept="image/*"
-            >
-              <el-button type="primary">
-                <el-icon><Plus /></el-icon>
-                閫夋嫨鍥剧墖鏂囦欢
-              </el-button>
-            </el-upload>
-            
-            <div v-if="selectedFile" class="selected-file">
-              <div class="file-info">
-                <el-icon><Picture /></el-icon>
-                <span>{{ selectedFile.name }}</span>
-                <span class="file-size">({{ formatFileSize(selectedFile.size) }})</span>
-              </div>
-              <el-button type="danger" size="small" @click="clearFile">
-                绉婚櫎
-              </el-button>
-            </div>
-          </div>
-
-          <!-- 瀛樺偍鐩綍閫夋嫨 -->
-          <div v-if="selectedFile" class="folder-section">
-            <label>瀛樺偍鐩綍:</label>
-            <el-select v-model="selectedFolder" placeholder="閫夋嫨瀛樺偍鐩綍">
-              <el-option label="澶村儚 (avatars/)" value="avatars/" />
-              <el-option label="鍥剧墖 (images/)" value="images/" />
-              <el-option label="鏂囨。 (documents/)" value="documents/" />
-              <el-option label="鍏朵粬 (others/)" value="others/" />
-            </el-select>
-          </div>
-
-          <!-- 涓婁紶鎸夐挳 -->
-          <div v-if="selectedFile" class="upload-actions">
-            <el-button 
-              type="success" 
-              :loading="uploading" 
-              @click="uploadFile"
-            >
-              <el-icon><Upload /></el-icon>
-              {{ uploading ? '涓婁紶涓�...' : '寮�濮嬩笂浼�' }}
-            </el-button>
-          </div>
-
-          <!-- 涓婁紶杩涘害 -->
-          <div v-if="uploadProgress.show" class="progress-section">
-            <div class="progress-info">
-              <span>{{ uploadProgress.fileName }}</span>
-              <span>{{ uploadProgress.status }}</span>
-            </div>
-            <el-progress 
-              :percentage="uploadProgress.percent" 
-              :status="uploadProgress.type"
-            />
-          </div>
-
-          <!-- 涓婁紶缁撴灉 -->
-          <div v-if="uploadResult.show" class="result-section">
-            <el-alert
-              :title="uploadResult.success ? '涓婁紶鎴愬姛锛�' : '涓婁紶澶辫触锛�'"
-              :type="uploadResult.success ? 'success' : 'error'"
-              :closable="false"
-              show-icon
-            >
-              <div v-if="uploadResult.success">
-                <p><strong>鏂囦欢URL:</strong></p>
-                <el-input 
-                  v-model="uploadResult.url" 
-                  readonly 
-                  style="margin: 8px 0;"
-                >
-                  <template #append>
-                    <el-button @click="copyUrl">澶嶅埗</el-button>
-                  </template>
-                </el-input>
-                <div class="result-actions">
-                  <el-button type="primary" @click="openFile">鏌ョ湅鏂囦欢</el-button>
-                  <el-button type="danger" @click="deleteFile">鍒犻櫎鏂囦欢</el-button>
-                </div>
-              </div>
-              <div v-else>
-                <p>{{ uploadResult.error }}</p>
-              </div>
-            </el-alert>
-          </div>
-        </div>
-      </el-card>
-
-      <!-- 浣跨敤璇存槑 -->
-      <el-card shadow="never" style="margin-top: 20px;">
-        <template #header>
-          <span>浣跨敤璇存槑</span>
-        </template>
-        <div class="instructions">
-          <ol>
-            <li>纭繚宸插湪 <code>cos-config.ts</code> 涓厤缃纭殑COS淇℃伅</li>
-            <li>閫夋嫨瑕佷笂浼犵殑鍥剧墖鏂囦欢锛堟敮鎸� jpg, png, gif, webp 鏍煎紡锛�</li>
-            <li>閫夋嫨瀛樺偍鐩綍</li>
-            <li>鐐瑰嚮"寮�濮嬩笂浼�"鎸夐挳</li>
-            <li>涓婁紶鎴愬姛鍚庡彲浠ユ煡鐪嬫垨鍒犻櫎鏂囦欢</li>
-          </ol>
-          <p><strong>娉ㄦ剰:</strong> 杩欐槸娴嬭瘯椤甸潰锛岀敓浜х幆澧冧腑搴旇閫氳繃鍚庣API鑾峰彇涓存椂瀵嗛挜锛岃�屼笉鏄湪鍓嶇鐩存帴閰嶇疆姘镐箙瀵嗛挜銆�</p>
-        </div>
-      </el-card>
-    </div>
-  </div>
-</template>
-
-<script setup lang="ts">
-import { ref, reactive, onMounted } from 'vue'
-import { ElMessage } from 'element-plus'
-import { uploadToCOS, deleteFromCOS } from '@/utils/cos'
-import { DEV_COS_CONFIG } from '@/utils/cos-config'
-
-// 缁勪欢鐘舵��
-const uploading = ref(false)
-const connectionStatus = ref<'success' | 'error'>('error')
-
-// COS閰嶇疆
-const cosConfig = reactive({
-  bucket: DEV_COS_CONFIG.Bucket,
-  region: DEV_COS_CONFIG.Region
-})
-
-// 閫変腑鐨勬枃浠�
-const selectedFile = ref<File | null>(null)
-const selectedFolder = ref('images/')
-
-// 涓婁紶杩涘害
-const uploadProgress = reactive({
-  show: false,
-  fileName: '',
-  percent: 0,
-  status: '',
-  type: undefined as 'success' | 'exception' | undefined
-})
-
-// 涓婁紶缁撴灉
-const uploadResult = reactive({
-  show: false,
-  success: false,
-  url: '',
-  error: '',
-  fileKey: ''
-})
-
-// 鏂囦欢閫夋嫨澶勭悊
-const handleFileSelect = (file: any) => {
-  const newFile = file.raw as File
-  
-  // 妫�鏌ユ枃浠剁被鍨�
-  if (!newFile.type.startsWith('image/')) {
-    ElMessage.error('璇烽�夋嫨鍥剧墖鏂囦欢')
-    return
-  }
-  
-  // 妫�鏌ユ枃浠跺ぇ灏忥紙闄愬埗10MB锛�
-  if (newFile.size > 10 * 1024 * 1024) {
-    ElMessage.error('鏂囦欢澶у皬涓嶈兘瓒呰繃10MB')
-    return
-  }
-  
-  selectedFile.value = newFile
-  uploadResult.show = false
-  uploadProgress.show = false
-}
-
-// 娓呴櫎鏂囦欢
-const clearFile = () => {
-  selectedFile.value = null
-  uploadResult.show = false
-  uploadProgress.show = false
-}
-
-// 涓婁紶鏂囦欢
-const uploadFile = async () => {
-  if (!selectedFile.value) {
-    ElMessage.error('璇峰厛閫夋嫨鏂囦欢')
-    return
-  }
-
-  uploading.value = true
-  uploadProgress.show = true
-  uploadProgress.fileName = selectedFile.value.name
-  uploadProgress.percent = 0
-  uploadProgress.status = '鍑嗗涓婁紶...'
-  uploadProgress.type = undefined
-  uploadResult.show = false
-
-  try {
-    // 妯℃嫙杩涘害鏇存柊
-    const progressInterval = setInterval(() => {
-      if (uploadProgress.percent < 90) {
-        uploadProgress.percent += Math.random() * 20
-        uploadProgress.status = `涓婁紶涓�... ${Math.round(uploadProgress.percent)}%`
-      }
-    }, 200)
-
-    // 鎵ц涓婁紶
-    const url = await uploadToCOS(selectedFile.value, selectedFolder.value)
-    
-    // 娓呴櫎杩涘害瀹氭椂鍣�
-    clearInterval(progressInterval)
-    
-    // 鏇存柊杩涘害涓哄畬鎴�
-    uploadProgress.percent = 100
-    uploadProgress.status = '涓婁紶瀹屾垚'
-    uploadProgress.type = 'success'
-    
-    // 鏄剧ず缁撴灉
-    uploadResult.show = true
-    uploadResult.success = true
-    uploadResult.url = url
-    uploadResult.fileKey = `${selectedFolder.value}${selectedFile.value.name}`
-    
-    ElMessage.success('鏂囦欢涓婁紶鎴愬姛锛�')
-    
-  } catch (error: any) {
-    console.error('涓婁紶澶辫触:', error)
-    
-    uploadProgress.percent = 0
-    uploadProgress.status = '涓婁紶澶辫触'
-    uploadProgress.type = 'exception'
-    
-    uploadResult.show = true
-    uploadResult.success = false
-    uploadResult.error = error.message || '涓婁紶澶辫触锛岃妫�鏌ョ綉缁滆繛鎺ュ拰COS閰嶇疆'
-    
-    ElMessage.error('鏂囦欢涓婁紶澶辫触')
-  } finally {
-    uploading.value = false
-  }
-}
-
-// 澶嶅埗URL
-const copyUrl = async () => {
-  try {
-    await navigator.clipboard.writeText(uploadResult.url)
-    ElMessage.success('URL宸插鍒跺埌鍓创鏉�')
-  } catch (error) {
-    ElMessage.error('澶嶅埗澶辫触')
-  }
-}
-
-// 鎵撳紑鏂囦欢
-const openFile = () => {
-  window.open(uploadResult.url, '_blank')
-}
-
-// 鍒犻櫎鏂囦欢
-const deleteFile = async () => {
-  try {
-    await deleteFromCOS(uploadResult.fileKey)
-    ElMessage.success('鏂囦欢鍒犻櫎鎴愬姛')
-    uploadResult.show = false
-    clearFile()
-  } catch (error) {
-    console.error('鍒犻櫎澶辫触:', error)
-    ElMessage.error('鏂囦欢鍒犻櫎澶辫触')
-  }
-}
-
-// 鏍煎紡鍖栨枃浠跺ぇ灏�
-const formatFileSize = (bytes: number): string => {
-  if (bytes === 0) return '0 B'
-  const k = 1024
-  const sizes = ['B', 'KB', 'MB', 'GB']
-  const i = Math.floor(Math.log(bytes) / Math.log(k))
-  return parseFloat((bytes / Math.pow(k, i)).toFixed(2)) + ' ' + sizes[i]
-}
-
-// 妫�鏌ラ厤缃�
-const checkConfig = () => {
-  if (cosConfig.bucket && cosConfig.region) {
-    connectionStatus.value = 'success'
-  } else {
-    connectionStatus.value = 'error'
-  }
-}
-
-onMounted(() => {
-  checkConfig()
-})
-</script>
-
-<style lang="scss" scoped>
-.cos-simple-test {
-  .card-title {
-    margin-bottom: 20px;
-    color: #303133;
-    font-size: 18px;
-    font-weight: 600;
-  }
-
-  .config-display {
-    p {
-      margin: 8px 0;
-      
-      strong {
-        color: #606266;
-        margin-right: 8px;
-      }
-    }
-  }
-
-  .upload-section {
-    .file-input-section {
-      margin-bottom: 20px;
-      
-      .selected-file {
-        display: flex;
-        justify-content: space-between;
-        align-items: center;
-        margin-top: 12px;
-        padding: 12px;
-        border: 1px solid #e4e7ed;
-        border-radius: 4px;
-        background-color: #f5f7fa;
-        
-        .file-info {
-          display: flex;
-          align-items: center;
-          gap: 8px;
-          
-          .file-size {
-            color: #909399;
-            font-size: 12px;
-          }
-        }
-      }
-    }
-
-    .folder-section {
-      display: flex;
-      align-items: center;
-      gap: 12px;
-      margin-bottom: 20px;
-      
-      label {
-        font-weight: 500;
-        color: #606266;
-      }
-    }
-
-    .upload-actions {
-      margin-bottom: 20px;
-    }
-
-    .progress-section {
-      margin-bottom: 20px;
-      
-      .progress-info {
-        display: flex;
-        justify-content: space-between;
-        margin-bottom: 8px;
-        font-size: 14px;
-        color: #606266;
-      }
-    }
-
-    .result-section {
-      .result-actions {
-        margin-top: 12px;
-        display: flex;
-        gap: 8px;
-      }
-    }
-  }
-
-  .instructions {
-    ol {
-      margin: 0;
-      padding-left: 20px;
-      
-      li {
-        margin-bottom: 8px;
-        line-height: 1.5;
-      }
-    }
-    
-    p {
-      margin-top: 16px;
-      padding: 8px;
-      background-color: #fff6f7;
-      border-left: 4px solid #f56c6c;
-      color: #606266;
-    }
-    
-    code {
-      background-color: #f5f7fa;
-      padding: 2px 4px;
-      border-radius: 2px;
-      font-family: 'Courier New', monospace;
-    }
-  }
-}
-</style>
\ No newline at end of file
diff --git a/web/src/views/test/cos-upload.vue b/web/src/views/test/cos-upload.vue
deleted file mode 100644
index e7ad760..0000000
--- a/web/src/views/test/cos-upload.vue
+++ /dev/null
@@ -1,620 +0,0 @@
-<template>
-  <div class="cos-upload-test">
-    <div class="page-card">
-      <h3 class="card-title">鑵捐浜慍OS涓婁紶娴嬭瘯</h3>
-      
-      <!-- 閰嶇疆淇℃伅灞曠ず -->
-      <el-card class="config-card" shadow="never">
-        <template #header>
-          <div class="card-header">
-            <span>COS閰嶇疆淇℃伅</span>
-            <el-button type="primary" size="small" @click="testConnection">
-              娴嬭瘯杩炴帴
-            </el-button>
-          </div>
-        </template>
-        <div class="config-info">
-          <div class="config-item">
-            <label>瀛樺偍妗�:</label>
-            <span>{{ cosConfig.bucket }}</span>
-          </div>
-          <div class="config-item">
-            <label>鍦板煙:</label>
-            <span>{{ cosConfig.region }}</span>
-          </div>
-          <div class="config-item">
-            <label>鐘舵��:</label>
-            <el-tag :type="connectionStatus === 'connected' ? 'success' : connectionStatus === 'error' ? 'danger' : 'info'">
-              {{ connectionStatusText }}
-            </el-tag>
-          </div>
-        </div>
-      </el-card>
-
-      <!-- 鏂囦欢涓婁紶鍖哄煙 -->
-      <el-card class="upload-card" shadow="never">
-        <template #header>
-          <span>鏂囦欢涓婁紶娴嬭瘯</span>
-        </template>
-        
-        <!-- 鎷栨嫿涓婁紶鍖哄煙 -->
-        <div class="upload-area">
-          <el-upload
-            ref="uploadRef"
-            class="upload-dragger"
-            drag
-            :auto-upload="false"
-            :show-file-list="false"
-            :on-change="handleFileSelect"
-            accept="image/*,video/*,audio/*,.pdf,.doc,.docx,.txt"
-            multiple
-          >
-            <el-icon class="el-icon--upload"><upload-filled /></el-icon>
-            <div class="el-upload__text">
-              灏嗘枃浠舵嫋鍒版澶勶紝鎴�<em>鐐瑰嚮涓婁紶</em>
-            </div>
-            <template #tip>
-              <div class="el-upload__tip">
-                鏀寔鍥剧墖銆佽棰戙�侀煶棰戙�佹枃妗g瓑鏍煎紡锛屽崟涓枃浠朵笉瓒呰繃100MB
-              </div>
-            </template>
-          </el-upload>
-        </div>
-
-        <!-- 閫変腑鐨勬枃浠跺垪琛� -->
-        <div v-if="selectedFiles.length > 0" class="selected-files">
-          <h4>寰呬笂浼犳枃浠� ({{ selectedFiles.length }})</h4>
-          <div class="file-list">
-            <div
-              v-for="(file, index) in selectedFiles"
-              :key="index"
-              class="file-item"
-            >
-              <div class="file-info">
-                <el-icon class="file-icon">
-                  <Document v-if="isDocument(file)" />
-                  <Picture v-else-if="isImage(file)" />
-                  <VideoPlay v-else-if="isVideo(file)" />
-                  <Headset v-else-if="isAudio(file)" />
-                  <Document v-else />
-                </el-icon>
-                <div class="file-details">
-                  <div class="file-name">{{ file.name }}</div>
-                  <div class="file-size">{{ formatFileSize(file.size) }}</div>
-                </div>
-              </div>
-              <div class="file-actions">
-                <el-select
-                  v-model="file.folder"
-                  placeholder="閫夋嫨瀛樺偍鐩綍"
-                  size="small"
-                  style="width: 120px; margin-right: 8px;"
-                >
-                  <el-option label="澶村儚" value="avatars/" />
-                  <el-option label="鏂囨。" value="documents/" />
-                  <el-option label="鍥剧墖" value="images/" />
-                  <el-option label="瑙嗛" value="videos/" />
-                  <el-option label="闊抽" value="audios/" />
-                  <el-option label="鍏朵粬" value="others/" />
-                </el-select>
-                <el-button
-                  type="danger"
-                  size="small"
-                  @click="removeFile(index)"
-                >
-                  绉婚櫎
-                </el-button>
-              </div>
-            </div>
-          </div>
-          
-          <!-- 鎵归噺鎿嶄綔 -->
-          <div class="batch-actions">
-            <el-button type="success" @click="uploadAllFiles" :loading="uploading">
-              <el-icon><Upload /></el-icon>
-              涓婁紶鎵�鏈夋枃浠�
-            </el-button>
-            <el-button @click="clearAllFiles">
-              娓呯┖鍒楄〃
-            </el-button>
-          </div>
-        </div>
-      </el-card>
-
-      <!-- 涓婁紶杩涘害 -->
-      <el-card v-if="uploadProgress.length > 0" class="progress-card" shadow="never">
-        <template #header>
-          <span>涓婁紶杩涘害</span>
-        </template>
-        <div class="progress-list">
-          <div
-            v-for="(progress, index) in uploadProgress"
-            :key="index"
-            class="progress-item"
-          >
-            <div class="progress-info">
-              <span class="progress-name">{{ progress.fileName }}</span>
-              <span class="progress-status" :class="progress.status">
-                {{ getStatusText(progress.status) }}
-              </span>
-            </div>
-            <el-progress
-              :percentage="progress.percent"
-              :status="progress.status === 'success' ? 'success' : progress.status === 'error' ? 'exception' : undefined"
-            />
-            <div v-if="progress.url" class="progress-result">
-              <el-link :href="progress.url" target="_blank" type="primary">
-                鏌ョ湅鏂囦欢
-              </el-link>
-              <el-button
-                type="text"
-                size="small"
-                @click="copyUrl(progress.url)"
-              >
-                澶嶅埗閾炬帴
-              </el-button>
-            </div>
-          </div>
-        </div>
-      </el-card>
-
-      <!-- 涓婁紶鍘嗗彶 -->
-      <el-card v-if="uploadHistory.length > 0" class="history-card" shadow="never">
-        <template #header>
-          <div class="card-header">
-            <span>涓婁紶鍘嗗彶</span>
-            <el-button type="danger" size="small" @click="clearHistory">
-              娓呯┖鍘嗗彶
-            </el-button>
-          </div>
-        </template>
-        <el-table :data="uploadHistory" style="width: 100%">
-          <el-table-column prop="fileName" label="鏂囦欢鍚�" min-width="200" />
-          <el-table-column prop="folder" label="瀛樺偍鐩綍" width="120" />
-          <el-table-column prop="size" label="鏂囦欢澶у皬" width="100">
-            <template #default="{ row }">
-              {{ formatFileSize(row.size) }}
-            </template>
-          </el-table-column>
-          <el-table-column prop="uploadTime" label="涓婁紶鏃堕棿" width="180">
-            <template #default="{ row }">
-              {{ formatTime(row.uploadTime) }}
-            </template>
-          </el-table-column>
-          <el-table-column label="鎿嶄綔" width="200">
-            <template #default="{ row }">
-              <el-button type="primary" size="small" @click="openFile(row.url)">
-                鏌ョ湅
-              </el-button>
-              <el-button type="text" size="small" @click="copyUrl(row.url)">
-                澶嶅埗閾炬帴
-              </el-button>
-              <el-button type="danger" size="small" @click="deleteFile(row)">
-                鍒犻櫎
-              </el-button>
-            </template>
-          </el-table-column>
-        </el-table>
-      </el-card>
-    </div>
-  </div>
-</template>
-
-<script setup lang="ts">
-import { ref, reactive, onMounted, computed } from 'vue'
-import { ElMessage, ElMessageBox } from 'element-plus'
-import { uploadToCOS, deleteFromCOS } from '@/utils/cos'
-import dayjs from 'dayjs'
-
-// 缁勪欢鐘舵��
-const uploading = ref(false)
-const connectionStatus = ref<'unknown' | 'connected' | 'error'>('unknown')
-
-// COS閰嶇疆淇℃伅
-const cosConfig = reactive({
-  bucket: 'ryc-media-1234567890',
-  region: 'ap-chengdu'
-})
-
-// 閫変腑鐨勬枃浠跺垪琛�
-interface SelectedFile extends File {
-  folder?: string
-}
-
-const selectedFiles = ref<SelectedFile[]>([])
-
-// 涓婁紶杩涘害
-interface UploadProgress {
-  fileName: string
-  percent: number
-  status: 'uploading' | 'success' | 'error'
-  url?: string
-  error?: string
-}
-
-const uploadProgress = ref<UploadProgress[]>([])
-
-// 涓婁紶鍘嗗彶
-interface UploadHistory {
-  fileName: string
-  folder: string
-  size: number
-  url: string
-  uploadTime: Date
-  key: string
-}
-
-const uploadHistory = ref<UploadHistory[]>([])
-
-// 璁$畻灞炴��
-const connectionStatusText = computed(() => {
-  switch (connectionStatus.value) {
-    case 'connected':
-      return '杩炴帴姝e父'
-    case 'error':
-      return '杩炴帴澶辫触'
-    default:
-      return '鏈祴璇�'
-  }
-})
-
-// 娴嬭瘯COS杩炴帴
-const testConnection = async () => {
-  try {
-    connectionStatus.value = 'unknown'
-    // 杩欓噷鍙互閫氳繃涓婁紶涓�涓皬鏂囦欢鏉ユ祴璇曡繛鎺�
-    // 鎴栬�呰皟鐢–OS鐨刧etBucket绛堿PI鏉ユ祴璇�
-    ElMessage.info('姝e湪娴嬭瘯杩炴帴...')
-    
-    // 妯℃嫙娴嬭瘯锛堝疄闄呴」鐩腑搴旇璋冪敤鐪熷疄鐨凜OS API锛�
-    setTimeout(() => {
-      connectionStatus.value = 'connected'
-      ElMessage.success('COS杩炴帴娴嬭瘯鎴愬姛')
-    }, 1000)
-    
-  } catch (error) {
-    connectionStatus.value = 'error'
-    ElMessage.error('COS杩炴帴娴嬭瘯澶辫触')
-    console.error('杩炴帴娴嬭瘯澶辫触:', error)
-  }
-}
-
-// 鏂囦欢閫夋嫨澶勭悊
-const handleFileSelect = (file: any) => {
-  const newFile = file.raw as SelectedFile
-  newFile.folder = getDefaultFolder(newFile)
-  selectedFiles.value.push(newFile)
-}
-
-// 鏍规嵁鏂囦欢绫诲瀷鑾峰彇榛樿瀛樺偍鐩綍
-const getDefaultFolder = (file: File): string => {
-  const type = file.type.toLowerCase()
-  if (type.startsWith('image/')) {
-    return 'images/'
-  } else if (type.startsWith('video/')) {
-    return 'videos/'
-  } else if (type.startsWith('audio/')) {
-    return 'audios/'
-  } else if (type.includes('pdf') || type.includes('document') || type.includes('text')) {
-    return 'documents/'
-  } else {
-    return 'others/'
-  }
-}
-
-// 鏂囦欢绫诲瀷鍒ゆ柇
-const isImage = (file: File) => file.type.startsWith('image/')
-const isVideo = (file: File) => file.type.startsWith('video/')
-const isAudio = (file: File) => file.type.startsWith('audio/')
-const isDocument = (file: File) => {
-  const type = file.type.toLowerCase()
-  return type.includes('pdf') || type.includes('document') || type.includes('text')
-}
-
-// 绉婚櫎鏂囦欢
-const removeFile = (index: number) => {
-  selectedFiles.value.splice(index, 1)
-}
-
-// 娓呯┖鏂囦欢鍒楄〃
-const clearAllFiles = () => {
-  selectedFiles.value = []
-}
-
-// 涓婁紶鎵�鏈夋枃浠�
-const uploadAllFiles = async () => {
-  if (selectedFiles.value.length === 0) {
-    ElMessage.warning('璇峰厛閫夋嫨瑕佷笂浼犵殑鏂囦欢')
-    return
-  }
-
-  uploading.value = true
-  uploadProgress.value = []
-
-  // 鍒濆鍖栬繘搴�
-  selectedFiles.value.forEach(file => {
-    uploadProgress.value.push({
-      fileName: file.name,
-      percent: 0,
-      status: 'uploading'
-    })
-  })
-
-  // 骞跺彂涓婁紶鎵�鏈夋枃浠�
-  const uploadPromises = selectedFiles.value.map(async (file, index) => {
-    try {
-      const url = await uploadToCOS(file, file.folder || '')
-      
-      // 鏇存柊杩涘害
-      uploadProgress.value[index].percent = 100
-      uploadProgress.value[index].status = 'success'
-      uploadProgress.value[index].url = url
-
-      // 娣诲姞鍒板巻鍙茶褰�
-      uploadHistory.value.unshift({
-        fileName: file.name,
-        folder: file.folder || '',
-        size: file.size,
-        url: url,
-        uploadTime: new Date(),
-        key: `${file.folder || ''}${file.name}`
-      })
-
-      return { success: true, file: file.name, url }
-    } catch (error) {
-      uploadProgress.value[index].status = 'error'
-      uploadProgress.value[index].error = error.message
-      console.error(`涓婁紶澶辫触 ${file.name}:`, error)
-      return { success: false, file: file.name, error }
-    }
-  })
-
-  try {
-    const results = await Promise.all(uploadPromises)
-    const successCount = results.filter(r => r.success).length
-    const failCount = results.length - successCount
-
-    if (failCount === 0) {
-      ElMessage.success(`鎵�鏈夋枃浠朵笂浼犳垚鍔燂紒鍏� ${successCount} 涓枃浠禶)
-    } else {
-      ElMessage.warning(`涓婁紶瀹屾垚锛氭垚鍔� ${successCount} 涓紝澶辫触 ${failCount} 涓猔)
-    }
-
-    // 娓呯┖閫変腑鐨勬枃浠�
-    selectedFiles.value = []
-  } catch (error) {
-    ElMessage.error('鎵归噺涓婁紶澶辫触')
-    console.error('鎵归噺涓婁紶澶辫触:', error)
-  } finally {
-    uploading.value = false
-  }
-}
-
-// 鑾峰彇鐘舵�佹枃鏈�
-const getStatusText = (status: string) => {
-  switch (status) {
-    case 'uploading':
-      return '涓婁紶涓�'
-    case 'success':
-      return '鎴愬姛'
-    case 'error':
-      return '澶辫触'
-    default:
-      return '鏈煡'
-  }
-}
-
-// 澶嶅埗URL
-const copyUrl = async (url: string) => {
-  try {
-    await navigator.clipboard.writeText(url)
-    ElMessage.success('閾炬帴宸插鍒跺埌鍓创鏉�')
-  } catch (error) {
-    ElMessage.error('澶嶅埗澶辫触')
-  }
-}
-
-// 鎵撳紑鏂囦欢
-const openFile = (url: string) => {
-  window.open(url, '_blank')
-}
-
-// 鍒犻櫎鏂囦欢
-const deleteFile = async (item: UploadHistory) => {
-  try {
-    await ElMessageBox.confirm(`纭畾瑕佸垹闄ゆ枃浠�"${item.fileName}"鍚楋紵`, '鎻愮ず', {
-      confirmButtonText: '纭畾',
-      cancelButtonText: '鍙栨秷',
-      type: 'warning'
-    })
-
-    await deleteFromCOS(item.key)
-    
-    // 浠庡巻鍙茶褰曚腑绉婚櫎
-    const index = uploadHistory.value.findIndex(h => h.key === item.key)
-    if (index > -1) {
-      uploadHistory.value.splice(index, 1)
-    }
-    
-    ElMessage.success('鏂囦欢鍒犻櫎鎴愬姛')
-  } catch (error: any) {
-    if (error !== 'cancel') {
-      console.error('鍒犻櫎澶辫触:', error)
-      ElMessage.error('鍒犻櫎澶辫触')
-    }
-  }
-}
-
-// 娓呯┖鍘嗗彶
-const clearHistory = () => {
-  uploadHistory.value = []
-  uploadProgress.value = []
-}
-
-// 鏍煎紡鍖栨枃浠跺ぇ灏�
-const formatFileSize = (bytes: number): string => {
-  if (bytes === 0) return '0 B'
-  const k = 1024
-  const sizes = ['B', 'KB', 'MB', 'GB']
-  const i = Math.floor(Math.log(bytes) / Math.log(k))
-  return parseFloat((bytes / Math.pow(k, i)).toFixed(2)) + ' ' + sizes[i]
-}
-
-// 鏍煎紡鍖栨椂闂�
-const formatTime = (date: Date): string => {
-  return dayjs(date).format('YYYY-MM-DD HH:mm:ss')
-}
-
-onMounted(() => {
-  // 椤甸潰鍔犺浇鏃跺彲浠ユ祴璇曡繛鎺�
-  // testConnection()
-})
-</script>
-
-<style lang="scss" scoped>
-.cos-upload-test {
-  .card-title {
-    margin-bottom: 20px;
-    color: #303133;
-    font-size: 18px;
-    font-weight: 600;
-  }
-
-  .config-card,
-  .upload-card,
-  .progress-card,
-  .history-card {
-    margin-bottom: 20px;
-  }
-
-  .card-header {
-    display: flex;
-    justify-content: space-between;
-    align-items: center;
-  }
-
-  .config-info {
-    .config-item {
-      display: flex;
-      margin-bottom: 8px;
-      
-      label {
-        width: 80px;
-        font-weight: 500;
-        color: #606266;
-      }
-      
-      span {
-        color: #303133;
-      }
-    }
-  }
-
-  .upload-area {
-    margin-bottom: 20px;
-    
-    .upload-dragger {
-      width: 100%;
-    }
-  }
-
-  .selected-files {
-    h4 {
-      margin-bottom: 16px;
-      color: #303133;
-    }
-
-    .file-list {
-      margin-bottom: 16px;
-    }
-
-    .file-item {
-      display: flex;
-      justify-content: space-between;
-      align-items: center;
-      padding: 12px;
-      border: 1px solid #e4e7ed;
-      border-radius: 4px;
-      margin-bottom: 8px;
-
-      .file-info {
-        display: flex;
-        align-items: center;
-        flex: 1;
-
-        .file-icon {
-          font-size: 24px;
-          margin-right: 12px;
-          color: #409eff;
-        }
-
-        .file-details {
-          .file-name {
-            font-weight: 500;
-            color: #303133;
-            margin-bottom: 4px;
-          }
-
-          .file-size {
-            font-size: 12px;
-            color: #909399;
-          }
-        }
-      }
-
-      .file-actions {
-        display: flex;
-        align-items: center;
-      }
-    }
-
-    .batch-actions {
-      display: flex;
-      gap: 12px;
-    }
-  }
-
-  .progress-list {
-    .progress-item {
-      margin-bottom: 16px;
-      padding: 12px;
-      border: 1px solid #e4e7ed;
-      border-radius: 4px;
-
-      .progress-info {
-        display: flex;
-        justify-content: space-between;
-        align-items: center;
-        margin-bottom: 8px;
-
-        .progress-name {
-          font-weight: 500;
-          color: #303133;
-        }
-
-        .progress-status {
-          font-size: 12px;
-          
-          &.success {
-            color: #67c23a;
-          }
-          
-          &.error {
-            color: #f56c6c;
-          }
-          
-          &.uploading {
-            color: #409eff;
-          }
-        }
-      }
-
-      .progress-result {
-        margin-top: 8px;
-        display: flex;
-        gap: 8px;
-      }
-    }
-  }
-}
-</style>
\ No newline at end of file
diff --git a/web/src/views/test/graphql-test.vue b/web/src/views/test/graphql-test.vue
deleted file mode 100644
index 47e64f6..0000000
--- a/web/src/views/test/graphql-test.vue
+++ /dev/null
@@ -1,192 +0,0 @@
-<template>
-  <div class="graphql-test">
-    <h2>GraphQL杩炴帴娴嬭瘯</h2>
-    
-    <div class="test-section">
-      <h3>娴嬭瘯1: 鍩烘湰杩炴帴娴嬭瘯</h3>
-      <button @click="testBasicConnection" :disabled="loading">
-        {{ loading ? '娴嬭瘯涓�...' : '娴嬭瘯鍩烘湰杩炴帴' }}
-      </button>
-      <div v-if="basicResult" class="result">
-        <h4>缁撴灉:</h4>
-        <pre>{{ JSON.stringify(basicResult, null, 2) }}</pre>
-      </div>
-      <div v-if="basicError" class="error">
-        <h4>閿欒:</h4>
-        <pre>{{ basicError }}</pre>
-      </div>
-    </div>
-
-    <div class="test-section">
-      <h3>娴嬭瘯2: 娲诲姩鍙傝禌鑰呰鎯呮煡璇�</h3>
-      <input v-model="testPlayerId" placeholder="杈撳叆鍙傝禌鑰匢D" />
-      <button @click="testPlayerDetail" :disabled="loading || !testPlayerId">
-        {{ loading ? '鏌ヨ涓�...' : '鏌ヨ鍙傝禌鑰呰鎯�' }}
-      </button>
-      <div v-if="playerResult" class="result">
-        <h4>缁撴灉:</h4>
-        <pre>{{ JSON.stringify(playerResult, null, 2) }}</pre>
-      </div>
-      <div v-if="playerError" class="error">
-        <h4>閿欒:</h4>
-        <pre>{{ playerError }}</pre>
-      </div>
-    </div>
-  </div>
-</template>
-
-<script setup lang="ts">
-import { ref } from 'vue'
-import { graphqlRequest } from '@/config/api'
-
-const loading = ref(false)
-const basicResult = ref(null)
-const basicError = ref('')
-const playerResult = ref(null)
-const playerError = ref('')
-const testPlayerId = ref('1')
-
-// 浣跨敤缁熶竴鐨凣raphQL璇锋眰鍑芥暟
-
-// 娴嬭瘯鍩烘湰杩炴帴
-const testBasicConnection = async () => {
-  loading.value = true
-  basicResult.value = null
-  basicError.value = ''
-  
-  try {
-    const query = `
-      query {
-        __schema {
-          types {
-            name
-          }
-        }
-      }
-    `
-    
-    const result = await graphqlRequest(query)
-    basicResult.value = {
-      message: 'GraphQL杩炴帴鎴愬姛锛�',
-      typeCount: result.__schema.types.length,
-      sampleTypes: result.__schema.types.slice(0, 5).map((t: any) => t.name)
-    }
-  } catch (error) {
-    basicError.value = error instanceof Error ? error.message : '鏈煡閿欒'
-  } finally {
-    loading.value = false
-  }
-}
-
-// 娴嬭瘯鍙傝禌鑰呰鎯呮煡璇�
-const testPlayerDetail = async () => {
-  loading.value = true
-  playerResult.value = null
-  playerError.value = ''
-  
-  try {
-    const query = `
-      query ActivityPlayerDetail($id: ID!) {
-        activityPlayerDetail(id: $id) {
-          id
-          playerInfo {
-            id
-            name
-            phone
-            description
-            avatarUrl
-          }
-          regionInfo {
-            id
-            name
-            fullPath
-          }
-          activityName
-          description
-          submissionFiles {
-            id
-            name
-            url
-            fileExt
-            fileSize
-            mediaType
-          }
-        }
-      }
-    `
-    
-    const result = await graphqlRequest(query, { id: testPlayerId.value })
-    playerResult.value = result
-  } catch (error) {
-    playerError.value = error instanceof Error ? error.message : '鏈煡閿欒'
-  } finally {
-    loading.value = false
-  }
-}
-</script>
-
-<style scoped>
-.graphql-test {
-  padding: 20px;
-  max-width: 800px;
-  margin: 0 auto;
-}
-
-.test-section {
-  margin-bottom: 30px;
-  padding: 20px;
-  border: 1px solid #ddd;
-  border-radius: 8px;
-}
-
-.test-section h3 {
-  margin-top: 0;
-  color: #333;
-}
-
-button {
-  padding: 8px 16px;
-  margin: 10px 5px 10px 0;
-  background-color: #007bff;
-  color: white;
-  border: none;
-  border-radius: 4px;
-  cursor: pointer;
-}
-
-button:disabled {
-  background-color: #ccc;
-  cursor: not-allowed;
-}
-
-input {
-  padding: 8px;
-  margin: 10px 5px 10px 0;
-  border: 1px solid #ddd;
-  border-radius: 4px;
-  width: 200px;
-}
-
-.result {
-  margin-top: 15px;
-  padding: 10px;
-  background-color: #d4edda;
-  border: 1px solid #c3e6cb;
-  border-radius: 4px;
-}
-
-.error {
-  margin-top: 15px;
-  padding: 10px;
-  background-color: #f8d7da;
-  border: 1px solid #f5c6cb;
-  border-radius: 4px;
-}
-
-pre {
-  white-space: pre-wrap;
-  word-wrap: break-word;
-  font-size: 12px;
-  margin: 5px 0 0 0;
-}
-</style>
\ No newline at end of file
diff --git a/web/src/views/test/logo-upload-simple.vue b/web/src/views/test/logo-upload-simple.vue
deleted file mode 100644
index 46040ff..0000000
--- a/web/src/views/test/logo-upload-simple.vue
+++ /dev/null
@@ -1,461 +0,0 @@
-<template>
-  <div class="logo-upload-simple">
-    <div class="page-card">
-      <h3 class="card-title">Logo涓婁紶鍒拌吘璁簯COS娴嬭瘯</h3>
-      
-      <!-- 璇存槑 -->
-      <el-alert
-        title="娴嬭瘯璇存槑"
-        type="info"
-        :closable="false"
-        show-icon
-        style="margin-bottom: 20px;"
-      >
-        <p>姝ら〉闈㈢敤浜庢祴璇曞皢UI鐩綍涓嬬殑logo.jpg鏂囦欢涓婁紶鍒拌吘璁簯COS瀛樺偍妗躲��</p>
-        <p>涓婁紶杩囩▼浼氶�氳繃鍚庣API鑾峰彇涓存椂瀵嗛挜锛岀劧鍚庣洿鎺ヤ笂浼犲埌COS銆�</p>
-      </el-alert>
-
-      <!-- Logo棰勮 -->
-      <el-card shadow="never" style="margin-bottom: 20px;">
-        <template #header>
-          <span>Logo鏂囦欢棰勮</span>
-        </template>
-        <div class="logo-preview">
-          <img 
-            src="/UI/logo.jpg" 
-            alt="Logo" 
-            class="logo-image"
-            @load="logoLoaded = true"
-            @error="logoError = true"
-          />
-          <div class="logo-info">
-            <p><strong>鏂囦欢璺緞:</strong> UI/logo.jpg</p>
-            <p><strong>鐘舵��:</strong> 
-              <el-tag :type="logoLoaded ? 'success' : logoError ? 'danger' : 'info'">
-                {{ logoLoaded ? '鍔犺浇鎴愬姛' : logoError ? '鍔犺浇澶辫触' : '鍔犺浇涓�' }}
-              </el-tag>
-            </p>
-          </div>
-        </div>
-      </el-card>
-
-      <!-- COS閰嶇疆淇℃伅 -->
-      <el-card shadow="never" style="margin-bottom: 20px;">
-        <template #header>
-          <div class="card-header">
-            <span>COS閰嶇疆淇℃伅</span>
-            <el-button type="primary" size="small" @click="loadCOSConfig">
-              鍒锋柊閰嶇疆
-            </el-button>
-          </div>
-        </template>
-        <div v-if="cosConfig" class="config-info">
-          <p><strong>瀛樺偍妗�:</strong> {{ cosConfig.bucket }}</p>
-          <p><strong>鍦板煙:</strong> {{ cosConfig.region }}</p>
-          <p><strong>鍩熷悕:</strong> {{ cosConfig.domain || '榛樿鍩熷悕' }}</p>
-        </div>
-        <div v-else-if="configError" class="config-error">
-          <el-alert type="error" :title="configError" :closable="false" />
-        </div>
-        <div v-else>
-          <el-skeleton :rows="3" animated />
-        </div>
-      </el-card>
-
-      <!-- 涓婁紶鎿嶄綔 -->
-      <el-card shadow="never" style="margin-bottom: 20px;">
-        <template #header>
-          <span>涓婁紶鎿嶄綔</span>
-        </template>
-        
-        <div class="upload-section">
-          <el-button 
-            type="success" 
-            size="large"
-            :loading="uploading"
-            @click="uploadLogo"
-            :disabled="!logoLoaded || !cosConfig"
-          >
-            <el-icon><Upload /></el-icon>
-            {{ uploading ? '涓婁紶涓�...' : '寮�濮嬩笂浼燣ogo' }}
-          </el-button>
-          
-          <p class="upload-tip">
-            鐐瑰嚮鎸夐挳灏嗚嚜鍔ㄨ幏鍙杔ogo鏂囦欢骞朵笂浼犲埌鑵捐浜慍OS瀛樺偍妗剁殑avatars鐩綍涓�
-          </p>
-        </div>
-      </el-card>
-
-      <!-- 涓婁紶杩涘害 -->
-      <el-card v-if="uploadProgress.show" shadow="never" style="margin-bottom: 20px;">
-        <template #header>
-          <span>涓婁紶杩涘害</span>
-        </template>
-        <div class="progress-section">
-          <div class="progress-info">
-            <span>{{ uploadProgress.fileName }}</span>
-            <span>{{ uploadProgress.status }}</span>
-          </div>
-          <el-progress 
-            :percentage="uploadProgress.percent" 
-            :status="uploadProgress.type"
-          />
-          <div v-if="uploadProgress.details" class="progress-details">
-            <p>{{ uploadProgress.details }}</p>
-          </div>
-        </div>
-      </el-card>
-
-      <!-- 涓婁紶缁撴灉 -->
-      <el-card v-if="uploadResult.show" shadow="never">
-        <template #header>
-          <span>涓婁紶缁撴灉</span>
-        </template>
-        <div class="result-section">
-          <el-alert
-            :title="uploadResult.success ? '涓婁紶鎴愬姛锛�' : '涓婁紶澶辫触锛�'"
-            :type="uploadResult.success ? 'success' : 'error'"
-            :closable="false"
-            show-icon
-          >
-            <div v-if="uploadResult.success">
-              <p><strong>Logo宸叉垚鍔熶笂浼犲埌鑵捐浜慍OS锛�</strong></p>
-              <div class="result-url">
-                <p><strong>璁块棶URL:</strong></p>
-                <el-input 
-                  v-model="uploadResult.url" 
-                  readonly 
-                  style="margin: 8px 0;"
-                >
-                  <template #append>
-                    <el-button @click="copyUrl">澶嶅埗</el-button>
-                  </template>
-                </el-input>
-              </div>
-              <div class="result-actions">
-                <el-button type="primary" @click="previewLogo">
-                  <el-icon><View /></el-icon>
-                  棰勮Logo
-                </el-button>
-                <el-button type="success" @click="saveToDatabase">
-                  <el-icon><Document /></el-icon>
-                  淇濆瓨鍒版暟鎹簱
-                </el-button>
-              </div>
-            </div>
-            <div v-else>
-              <p><strong>閿欒淇℃伅:</strong> {{ uploadResult.error }}</p>
-              <div class="error-details" v-if="uploadResult.details">
-                <p><strong>璇︾粏淇℃伅:</strong></p>
-                <pre>{{ uploadResult.details }}</pre>
-              </div>
-            </div>
-          </el-alert>
-        </div>
-      </el-card>
-    </div>
-  </div>
-</template>
-
-<script setup lang="ts">
-import { ref, reactive, onMounted } from 'vue'
-import { ElMessage } from 'element-plus'
-import { uploadToCOS } from '@/utils/cos-simple'
-
-// 缁勪欢鐘舵��
-const logoLoaded = ref(false)
-const logoError = ref(false)
-const uploading = ref(false)
-const cosConfig = ref<any>(null)
-const configError = ref('')
-
-// 涓婁紶杩涘害
-const uploadProgress = reactive({
-  show: false,
-  fileName: '',
-  percent: 0,
-  status: '',
-  type: undefined as 'success' | 'exception' | undefined,
-  details: ''
-})
-
-// 涓婁紶缁撴灉
-const uploadResult = reactive({
-  show: false,
-  success: false,
-  url: '',
-  error: '',
-  details: ''
-})
-
-// 鍔犺浇COS閰嶇疆
-const loadCOSConfig = async () => {
-  try {
-    configError.value = ''
-    console.log('妯℃嫙COS閰嶇疆...')
-    
-    // 妯℃嫙閰嶇疆淇℃伅
-    cosConfig.value = {
-      bucket: 'ryc-media-1234567890',
-      region: 'ap-chengdu',
-      domain: 'https://ryc-media-1234567890.cos.ap-chengdu.myqcloud.com'
-    }
-    
-    console.log('COS閰嶇疆璁剧疆鎴愬姛:', cosConfig.value)
-    ElMessage.success('COS閰嶇疆鍔犺浇鎴愬姛')
-    
-  } catch (error: any) {
-    console.error('鑾峰彇COS閰嶇疆澶辫触:', error)
-    configError.value = `鑾峰彇COS閰嶇疆澶辫触: ${error.message}`
-    ElMessage.error('鑾峰彇COS閰嶇疆澶辫触')
-  }
-}
-
-// 鑾峰彇Logo鏂囦欢
-const fetchLogoFile = async (): Promise<File> => {
-  console.log('姝e湪鑾峰彇Logo鏂囦欢...')
-  
-  const response = await fetch('/UI/logo.jpg')
-  if (!response.ok) {
-    throw new Error(`鑾峰彇Logo鏂囦欢澶辫触: HTTP ${response.status}`)
-  }
-  
-  const blob = await response.blob()
-  const file = new File([blob], 'logo.jpg', { type: 'image/jpeg' })
-  
-  console.log('Logo鏂囦欢鑾峰彇鎴愬姛:', {
-    name: file.name,
-    size: file.size,
-    type: file.type
-  })
-  
-  return file
-}
-
-// 涓婁紶Logo
-const uploadLogo = async () => {
-  if (!cosConfig.value) {
-    ElMessage.error('璇峰厛鍔犺浇COS閰嶇疆')
-    return
-  }
-
-  uploading.value = true
-  uploadProgress.show = true
-  uploadProgress.fileName = 'logo.jpg'
-  uploadProgress.percent = 0
-  uploadProgress.status = '鍑嗗涓婁紶...'
-  uploadProgress.type = undefined
-  uploadProgress.details = ''
-  uploadResult.show = false
-
-  try {
-    // 1. 鑾峰彇Logo鏂囦欢
-    uploadProgress.status = '鑾峰彇Logo鏂囦欢...'
-    uploadProgress.details = '姝e湪浠� /UI/logo.jpg 鑾峰彇鏂囦欢'
-    const logoFile = await fetchLogoFile()
-    
-    // 2. 寮�濮嬩笂浼�
-    uploadProgress.status = '杩炴帴COS鏈嶅姟...'
-    uploadProgress.details = `鍑嗗涓婁紶鍒板瓨鍌ㄦ《: ${cosConfig.value.bucket}`
-    
-    // 妯℃嫙杩涘害鏇存柊
-    const progressInterval = setInterval(() => {
-      if (uploadProgress.percent < 90) {
-        uploadProgress.percent += Math.random() * 15
-        uploadProgress.status = `涓婁紶涓�... ${Math.round(uploadProgress.percent)}%`
-      }
-    }, 300)
-
-    // 鎵ц涓婁紶
-    const uploadUrl = await uploadToCOS(logoFile)
-    
-    // 娓呴櫎杩涘害瀹氭椂鍣�
-    clearInterval(progressInterval)
-    
-    // 鏇存柊杩涘害涓哄畬鎴�
-    uploadProgress.percent = 100
-    uploadProgress.status = '涓婁紶瀹屾垚'
-    uploadProgress.type = 'success'
-    uploadProgress.details = `鏂囦欢宸蹭笂浼犲埌: ${uploadUrl}`
-    
-    // 鏄剧ず缁撴灉
-    uploadResult.show = true
-    uploadResult.success = true
-    uploadResult.url = uploadUrl
-    
-    console.log('Logo涓婁紶鎴愬姛:', uploadUrl)
-    ElMessage.success('Logo涓婁紶鎴愬姛锛�')
-    
-  } catch (error: any) {
-    console.error('Logo涓婁紶澶辫触:', error)
-    
-    uploadProgress.percent = 0
-    uploadProgress.status = '涓婁紶澶辫触'
-    uploadProgress.type = 'exception'
-    uploadProgress.details = error.message
-    
-    uploadResult.show = true
-    uploadResult.success = false
-    uploadResult.error = error.message || '涓婁紶澶辫触'
-    uploadResult.details = error.stack || JSON.stringify(error, null, 2)
-    
-    ElMessage.error('Logo涓婁紶澶辫触')
-  } finally {
-    uploading.value = false
-  }
-}
-
-// 澶嶅埗URL
-const copyUrl = async () => {
-  try {
-    await navigator.clipboard.writeText(uploadResult.url)
-    ElMessage.success('URL宸插鍒跺埌鍓创鏉�')
-  } catch (error) {
-    ElMessage.error('澶嶅埗澶辫触')
-  }
-}
-
-// 棰勮Logo
-const previewLogo = () => {
-  window.open(uploadResult.url, '_blank')
-}
-
-// 淇濆瓨鍒版暟鎹簱
-const saveToDatabase = async () => {
-  try {
-    // 杩欓噷搴旇璋冪敤鍚庣API淇濆瓨濯掍綋淇℃伅鍒版暟鎹簱
-    // 妯℃嫙淇濆瓨杩囩▼
-    ElMessage.info('姝e湪淇濆瓨鍒版暟鎹簱...')
-    
-    // 妯℃嫙API璋冪敤
-    await new Promise(resolve => setTimeout(resolve, 1000))
-    
-    ElMessage.success('Logo淇℃伅宸蹭繚瀛樺埌鏁版嵁搴�')
-    
-    // 鍙互淇濆瓨鍒發ocalStorage渚涘悗缁娇鐢�
-    localStorage.setItem('uploaded_logo_url', uploadResult.url)
-    
-  } catch (error) {
-    ElMessage.error('淇濆瓨鍒版暟鎹簱澶辫触')
-  }
-}
-
-// 椤甸潰鍔犺浇鏃惰嚜鍔ㄨ幏鍙朇OS閰嶇疆
-onMounted(() => {
-  loadCOSConfig()
-})
-</script>
-
-<style lang="scss" scoped>
-.logo-upload-simple {
-  .card-title {
-    margin-bottom: 20px;
-    color: #303133;
-    font-size: 18px;
-    font-weight: 600;
-  }
-
-  .card-header {
-    display: flex;
-    justify-content: space-between;
-    align-items: center;
-  }
-
-  .logo-preview {
-    display: flex;
-    gap: 20px;
-    align-items: center;
-
-    .logo-image {
-      width: 100px;
-      height: 100px;
-      object-fit: contain;
-      border: 2px solid #e4e7ed;
-      border-radius: 8px;
-      background-color: #f5f7fa;
-    }
-
-    .logo-info {
-      flex: 1;
-      
-      p {
-        margin: 8px 0;
-        
-        strong {
-          color: #606266;
-          margin-right: 8px;
-        }
-      }
-    }
-  }
-
-  .config-info {
-    p {
-      margin: 8px 0;
-      
-      strong {
-        color: #606266;
-        margin-right: 8px;
-      }
-    }
-  }
-
-  .upload-section {
-    text-align: center;
-    
-    .upload-tip {
-      margin-top: 16px;
-      color: #909399;
-      font-size: 14px;
-    }
-  }
-
-  .progress-section {
-    .progress-info {
-      display: flex;
-      justify-content: space-between;
-      margin-bottom: 8px;
-      font-size: 14px;
-      color: #606266;
-    }
-    
-    .progress-details {
-      margin-top: 8px;
-      padding: 8px;
-      background-color: #f5f7fa;
-      border-radius: 4px;
-      font-size: 12px;
-      color: #909399;
-    }
-  }
-
-  .result-section {
-    .result-url {
-      margin: 16px 0;
-    }
-    
-    .result-actions {
-      margin-top: 16px;
-      display: flex;
-      gap: 8px;
-      flex-wrap: wrap;
-    }
-    
-    .error-details {
-      margin-top: 16px;
-      
-      pre {
-        background-color: #f5f7fa;
-        padding: 12px;
-        border-radius: 4px;
-        font-size: 12px;
-        color: #606266;
-        white-space: pre-wrap;
-        word-break: break-all;
-        max-height: 200px;
-        overflow-y: auto;
-      }
-    }
-  }
-}
-</style>
\ No newline at end of file
diff --git a/web/src/views/test/upload-logo.vue b/web/src/views/test/upload-logo.vue
deleted file mode 100644
index 2c2966c..0000000
--- a/web/src/views/test/upload-logo.vue
+++ /dev/null
@@ -1,572 +0,0 @@
-<template>
-  <div class="upload-logo-test">
-    <div class="page-card">
-      <h3 class="card-title">涓婁紶Logo鍒拌吘璁簯COS</h3>
-      
-      <!-- 璇存槑淇℃伅 -->
-      <el-alert
-        title="鍔熻兘璇存槑"
-        type="info"
-        :closable="false"
-        show-icon
-        style="margin-bottom: 20px;"
-      >
-        <p>姝ら〉闈㈢敤浜庡皢UI鐩綍涓嬬殑logo.jpg鏂囦欢涓婁紶鍒拌吘璁簯COS瀛樺偍妗朵腑銆�</p>
-        <p>涓婁紶鎴愬姛鍚庯紝鍙互鍦ㄨ瘎濮旂鐞嗙瓑鍔熻兘涓娇鐢ㄨlogo浣滀负澶村儚銆�</p>
-      </el-alert>
-
-      <!-- Logo棰勮 -->
-      <el-card shadow="never" style="margin-bottom: 20px;">
-        <template #header>
-          <span>Logo鏂囦欢棰勮</span>
-        </template>
-        <div class="logo-preview">
-          <div class="logo-container">
-            <img 
-              src="/UI/logo.jpg" 
-              alt="Logo" 
-              class="logo-image"
-              @load="onLogoLoad"
-              @error="onLogoError"
-            />
-          </div>
-          <div class="logo-info">
-            <p><strong>鏂囦欢鍚�:</strong> logo.jpg</p>
-            <p><strong>璺緞:</strong> UI/logo.jpg</p>
-            <p><strong>鐘舵��:</strong> 
-              <el-tag :type="logoStatus === 'loaded' ? 'success' : 'danger'">
-                {{ logoStatus === 'loaded' ? '鏂囦欢姝e父' : '鏂囦欢鍔犺浇澶辫触' }}
-              </el-tag>
-            </p>
-          </div>
-        </div>
-      </el-card>
-
-      <!-- 涓婁紶鎿嶄綔 -->
-      <el-card shadow="never" style="margin-bottom: 20px;">
-        <template #header>
-          <span>涓婁紶鎿嶄綔</span>
-        </template>
-        
-        <div class="upload-section">
-          <!-- 鑷姩涓婁紶 -->
-          <div class="upload-method">
-            <h4>鏂瑰紡涓�锛氳嚜鍔ㄤ笂浼�</h4>
-            <p>灏濊瘯鑷姩鑾峰彇UI鐩綍涓嬬殑logo.jpg鏂囦欢骞朵笂浼�</p>
-            <el-button 
-              type="primary" 
-              :loading="autoUploading"
-              @click="autoUploadLogo"
-              :disabled="logoStatus !== 'loaded'"
-            >
-              <el-icon><Upload /></el-icon>
-              {{ autoUploading ? '涓婁紶涓�...' : '鑷姩涓婁紶Logo' }}
-            </el-button>
-          </div>
-
-          <el-divider />
-
-          <!-- 鎵嬪姩閫夋嫨涓婁紶 -->
-          <div class="upload-method">
-            <h4>鏂瑰紡浜岋細鎵嬪姩閫夋嫨</h4>
-            <p>濡傛灉鑷姩涓婁紶澶辫触锛屽彲浠ユ墜鍔ㄩ�夋嫨logo鏂囦欢涓婁紶</p>
-            <div class="manual-upload">
-              <el-upload
-                ref="uploadRef"
-                :auto-upload="false"
-                :show-file-list="false"
-                :on-change="handleFileSelect"
-                accept="image/*"
-              >
-                <el-button type="success">
-                  <el-icon><FolderOpened /></el-icon>
-                  閫夋嫨Logo鏂囦欢
-                </el-button>
-              </el-upload>
-              
-              <div v-if="selectedFile" class="selected-file">
-                <div class="file-info">
-                  <el-icon><Picture /></el-icon>
-                  <span>{{ selectedFile.name }}</span>
-                  <span class="file-size">({{ formatFileSize(selectedFile.size) }})</span>
-                </div>
-                <el-button 
-                  type="primary" 
-                  :loading="manualUploading"
-                  @click="manualUploadLogo"
-                >
-                  {{ manualUploading ? '涓婁紶涓�...' : '涓婁紶' }}
-                </el-button>
-              </div>
-            </div>
-          </div>
-        </div>
-      </el-card>
-
-      <!-- 涓婁紶杩涘害 -->
-      <el-card v-if="uploadProgress.show" shadow="never" style="margin-bottom: 20px;">
-        <template #header>
-          <span>涓婁紶杩涘害</span>
-        </template>
-        <div class="progress-section">
-          <div class="progress-info">
-            <span>{{ uploadProgress.fileName }}</span>
-            <span>{{ uploadProgress.status }}</span>
-          </div>
-          <el-progress 
-            :percentage="uploadProgress.percent" 
-            :status="uploadProgress.type"
-          />
-        </div>
-      </el-card>
-
-      <!-- 涓婁紶缁撴灉 -->
-      <el-card v-if="uploadResult.show" shadow="never">
-        <template #header>
-          <span>涓婁紶缁撴灉</span>
-        </template>
-        <div class="result-section">
-          <el-alert
-            :title="uploadResult.success ? '涓婁紶鎴愬姛锛�' : '涓婁紶澶辫触锛�'"
-            :type="uploadResult.success ? 'success' : 'error'"
-            :closable="false"
-            show-icon
-          >
-            <div v-if="uploadResult.success">
-              <p><strong>Logo宸叉垚鍔熶笂浼犲埌鑵捐浜慍OS锛�</strong></p>
-              <p><strong>璁块棶URL:</strong></p>
-              <el-input 
-                v-model="uploadResult.url" 
-                readonly 
-                style="margin: 8px 0;"
-              >
-                <template #append>
-                  <el-button @click="copyUrl">澶嶅埗</el-button>
-                </template>
-              </el-input>
-              <div class="result-actions">
-                <el-button type="primary" @click="previewLogo">棰勮Logo</el-button>
-                <el-button type="success" @click="useInJudge">鍦ㄨ瘎濮旂鐞嗕腑浣跨敤</el-button>
-                <el-button @click="saveToDatabase">淇濆瓨鍒版暟鎹簱</el-button>
-              </div>
-            </div>
-            <div v-else>
-              <p><strong>閿欒淇℃伅:</strong> {{ uploadResult.error }}</p>
-              <p><strong>瑙e喅寤鸿:</strong></p>
-              <ul>
-                <li>妫�鏌OS閰嶇疆淇℃伅鏄惁姝g‘</li>
-                <li>纭瀛樺偍妗舵潈闄愯缃�</li>
-                <li>妫�鏌ョ綉缁滆繛鎺�</li>
-                <li>灏濊瘯浣跨敤鎵嬪姩閫夋嫨鏂瑰紡涓婁紶</li>
-              </ul>
-            </div>
-          </el-alert>
-        </div>
-      </el-card>
-
-      <!-- 浣跨敤璇存槑 -->
-      <el-card shadow="never" style="margin-top: 20px;">
-        <template #header>
-          <span>浣跨敤璇存槑</span>
-        </template>
-        <div class="instructions">
-          <h4>涓婁紶鍓嶅噯澶囷細</h4>
-          <ol>
-            <li>纭繚宸插湪 <code>web/src/utils/cos-config.ts</code> 涓厤缃纭殑COS淇℃伅</li>
-            <li>纭瀛樺偍妗跺叿鏈夊啓鍏ユ潈闄�</li>
-            <li>纭logo.jpg鏂囦欢瀛樺湪浜嶶I鐩綍涓�</li>
-          </ol>
-          
-          <h4>涓婁紶鍚庣敤閫旓細</h4>
-          <ul>
-            <li>浣滀负璇勫澶村儚鐨勯粯璁ゅ浘鐗�</li>
-            <li>鍦ㄧ郴缁熷悇涓ā鍧椾腑浣滀负鍝佺墝鏍囪瘑</li>
-            <li>鍙互鍦ㄦ暟鎹簱涓褰曡鍥剧墖鐨刄RL渚涘悗缁娇鐢�</li>
-          </ul>
-          
-          <h4>娉ㄦ剰浜嬮」锛�</h4>
-          <ul>
-            <li>涓婁紶鐨勬枃浠跺皢瀛樺偍鍦–OS鐨� <code>avatars/</code> 鐩綍涓�</li>
-            <li>鏂囦欢鍚嶄細鑷姩娣诲姞鏃堕棿鎴充互閬垮厤閲嶅</li>
-            <li>涓婁紶鎴愬姛鍚庤濡ュ杽淇濆瓨杩斿洖鐨刄RL</li>
-          </ul>
-        </div>
-      </el-card>
-    </div>
-  </div>
-</template>
-
-<script setup lang="ts">
-import { ref, reactive } from 'vue'
-import { ElMessage } from 'element-plus'
-import { uploadToCOS } from '@/utils/cos'
-import { useRouter } from 'vue-router'
-
-const router = useRouter()
-
-// 缁勪欢鐘舵��
-const logoStatus = ref<'loading' | 'loaded' | 'error'>('loading')
-const autoUploading = ref(false)
-const manualUploading = ref(false)
-const selectedFile = ref<File | null>(null)
-
-// 涓婁紶杩涘害
-const uploadProgress = reactive({
-  show: false,
-  fileName: '',
-  percent: 0,
-  status: '',
-  type: undefined as 'success' | 'exception' | undefined
-})
-
-// 涓婁紶缁撴灉
-const uploadResult = reactive({
-  show: false,
-  success: false,
-  url: '',
-  error: ''
-})
-
-// Logo鍔犺浇鎴愬姛
-const onLogoLoad = () => {
-  logoStatus.value = 'loaded'
-}
-
-// Logo鍔犺浇澶辫触
-const onLogoError = () => {
-  logoStatus.value = 'error'
-}
-
-// 鑷姩涓婁紶Logo
-const autoUploadLogo = async () => {
-  autoUploading.value = true
-  uploadProgress.show = true
-  uploadProgress.fileName = 'logo.jpg'
-  uploadProgress.percent = 0
-  uploadProgress.status = '鑾峰彇鏂囦欢涓�...'
-  uploadResult.show = false
-
-  try {
-    // 灏濊瘯鑾峰彇logo鏂囦欢
-    const logoFile = await fetchLogoFile()
-    
-    if (!logoFile) {
-      throw new Error('鏃犳硶鑾峰彇logo鏂囦欢锛岃灏濊瘯鎵嬪姩閫夋嫨涓婁紶')
-    }
-
-    uploadProgress.status = '寮�濮嬩笂浼�...'
-    
-    // 妯℃嫙杩涘害鏇存柊
-    const progressInterval = setInterval(() => {
-      if (uploadProgress.percent < 90) {
-        uploadProgress.percent += Math.random() * 20
-        uploadProgress.status = `涓婁紶涓�... ${Math.round(uploadProgress.percent)}%`
-      }
-    }, 200)
-
-    // 鎵ц涓婁紶
-    const url = await uploadToCOS(logoFile, 'avatars/')
-    
-    // 娓呴櫎杩涘害瀹氭椂鍣�
-    clearInterval(progressInterval)
-    
-    // 鏇存柊杩涘害涓哄畬鎴�
-    uploadProgress.percent = 100
-    uploadProgress.status = '涓婁紶瀹屾垚'
-    uploadProgress.type = 'success'
-    
-    // 鏄剧ず缁撴灉
-    uploadResult.show = true
-    uploadResult.success = true
-    uploadResult.url = url
-    
-    ElMessage.success('Logo涓婁紶鎴愬姛锛�')
-    
-  } catch (error: any) {
-    console.error('鑷姩涓婁紶澶辫触:', error)
-    
-    uploadProgress.percent = 0
-    uploadProgress.status = '涓婁紶澶辫触'
-    uploadProgress.type = 'exception'
-    
-    uploadResult.show = true
-    uploadResult.success = false
-    uploadResult.error = error.message || '鑷姩涓婁紶澶辫触'
-    
-    ElMessage.error('鑷姩涓婁紶澶辫触锛岃灏濊瘯鎵嬪姩閫夋嫨涓婁紶')
-  } finally {
-    autoUploading.value = false
-  }
-}
-
-// 鑾峰彇logo鏂囦欢
-const fetchLogoFile = async (): Promise<File | null> => {
-  try {
-    // 灏濊瘯浠嶶I鐩綍鑾峰彇
-    const response = await fetch('/UI/logo.jpg')
-    if (response.ok) {
-      const blob = await response.blob()
-      return new File([blob], 'logo.jpg', { type: 'image/jpeg' })
-    }
-  } catch (error) {
-    console.log('浠嶶I鐩綍鑾峰彇logo澶辫触')
-  }
-  
-  return null
-}
-
-// 鎵嬪姩鏂囦欢閫夋嫨
-const handleFileSelect = (file: any) => {
-  const newFile = file.raw as File
-  
-  // 妫�鏌ユ枃浠剁被鍨�
-  if (!newFile.type.startsWith('image/')) {
-    ElMessage.error('璇烽�夋嫨鍥剧墖鏂囦欢')
-    return
-  }
-  
-  selectedFile.value = newFile
-  uploadResult.show = false
-}
-
-// 鎵嬪姩涓婁紶Logo
-const manualUploadLogo = async () => {
-  if (!selectedFile.value) {
-    ElMessage.error('璇峰厛閫夋嫨鏂囦欢')
-    return
-  }
-
-  manualUploading.value = true
-  uploadProgress.show = true
-  uploadProgress.fileName = selectedFile.value.name
-  uploadProgress.percent = 0
-  uploadProgress.status = '寮�濮嬩笂浼�...'
-  uploadResult.show = false
-
-  try {
-    // 妯℃嫙杩涘害鏇存柊
-    const progressInterval = setInterval(() => {
-      if (uploadProgress.percent < 90) {
-        uploadProgress.percent += Math.random() * 20
-        uploadProgress.status = `涓婁紶涓�... ${Math.round(uploadProgress.percent)}%`
-      }
-    }, 200)
-
-    // 鎵ц涓婁紶
-    const url = await uploadToCOS(selectedFile.value, 'avatars/')
-    
-    // 娓呴櫎杩涘害瀹氭椂鍣�
-    clearInterval(progressInterval)
-    
-    // 鏇存柊杩涘害涓哄畬鎴�
-    uploadProgress.percent = 100
-    uploadProgress.status = '涓婁紶瀹屾垚'
-    uploadProgress.type = 'success'
-    
-    // 鏄剧ず缁撴灉
-    uploadResult.show = true
-    uploadResult.success = true
-    uploadResult.url = url
-    
-    ElMessage.success('Logo涓婁紶鎴愬姛锛�')
-    
-  } catch (error: any) {
-    console.error('鎵嬪姩涓婁紶澶辫触:', error)
-    
-    uploadProgress.percent = 0
-    uploadProgress.status = '涓婁紶澶辫触'
-    uploadProgress.type = 'exception'
-    
-    uploadResult.show = true
-    uploadResult.success = false
-    uploadResult.error = error.message || '鎵嬪姩涓婁紶澶辫触'
-    
-    ElMessage.error('鎵嬪姩涓婁紶澶辫触')
-  } finally {
-    manualUploading.value = false
-  }
-}
-
-// 澶嶅埗URL
-const copyUrl = async () => {
-  try {
-    await navigator.clipboard.writeText(uploadResult.url)
-    ElMessage.success('URL宸插鍒跺埌鍓创鏉�')
-  } catch (error) {
-    ElMessage.error('澶嶅埗澶辫触')
-  }
-}
-
-// 棰勮Logo
-const previewLogo = () => {
-  window.open(uploadResult.url, '_blank')
-}
-
-// 鍦ㄨ瘎濮旂鐞嗕腑浣跨敤
-const useInJudge = () => {
-  router.push('/judge')
-  ElMessage.info('宸茶烦杞埌璇勫绠$悊椤甸潰锛屽彲浠ヤ娇鐢ㄤ笂浼犵殑Logo浣滀负澶村儚')
-}
-
-// 淇濆瓨鍒版暟鎹簱
-const saveToDatabase = async () => {
-  try {
-    // 杩欓噷搴旇璋冪敤鍚庣API淇濆瓨濯掍綋淇℃伅鍒版暟鎹簱
-    // 绀轰緥锛歛wait MediaApi.saveMedia({
-    //   name: 'logo.jpg',
-    //   path: uploadResult.url,
-    //   targetType: 'system_logo',
-    //   targetId: 0
-    // })
-    
-    ElMessage.success('Logo淇℃伅宸蹭繚瀛樺埌鏁版嵁搴擄紙妯℃嫙锛�')
-  } catch (error) {
-    ElMessage.error('淇濆瓨鍒版暟鎹簱澶辫触')
-  }
-}
-
-// 鏍煎紡鍖栨枃浠跺ぇ灏�
-const formatFileSize = (bytes: number): string => {
-  if (bytes === 0) return '0 B'
-  const k = 1024
-  const sizes = ['B', 'KB', 'MB', 'GB']
-  const i = Math.floor(Math.log(bytes) / Math.log(k))
-  return parseFloat((bytes / Math.pow(k, i)).toFixed(2)) + ' ' + sizes[i]
-}
-</script>
-
-<style lang="scss" scoped>
-.upload-logo-test {
-  .card-title {
-    margin-bottom: 20px;
-    color: #303133;
-    font-size: 18px;
-    font-weight: 600;
-  }
-
-  .logo-preview {
-    display: flex;
-    gap: 20px;
-    align-items: center;
-
-    .logo-container {
-      flex-shrink: 0;
-      
-      .logo-image {
-        width: 120px;
-        height: 120px;
-        object-fit: contain;
-        border: 2px solid #e4e7ed;
-        border-radius: 8px;
-        background-color: #f5f7fa;
-      }
-    }
-
-    .logo-info {
-      flex: 1;
-      
-      p {
-        margin: 8px 0;
-        
-        strong {
-          color: #606266;
-          margin-right: 8px;
-        }
-      }
-    }
-  }
-
-  .upload-section {
-    .upload-method {
-      margin-bottom: 20px;
-      
-      h4 {
-        margin-bottom: 8px;
-        color: #303133;
-      }
-      
-      p {
-        margin-bottom: 16px;
-        color: #606266;
-        font-size: 14px;
-      }
-    }
-
-    .manual-upload {
-      display: flex;
-      align-items: center;
-      gap: 16px;
-      
-      .selected-file {
-        display: flex;
-        align-items: center;
-        gap: 12px;
-        padding: 8px 12px;
-        border: 1px solid #e4e7ed;
-        border-radius: 4px;
-        background-color: #f5f7fa;
-        
-        .file-info {
-          display: flex;
-          align-items: center;
-          gap: 8px;
-          
-          .file-size {
-            color: #909399;
-            font-size: 12px;
-          }
-        }
-      }
-    }
-  }
-
-  .progress-section {
-    .progress-info {
-      display: flex;
-      justify-content: space-between;
-      margin-bottom: 8px;
-      font-size: 14px;
-      color: #606266;
-    }
-  }
-
-  .result-section {
-    .result-actions {
-      margin-top: 16px;
-      display: flex;
-      gap: 8px;
-      flex-wrap: wrap;
-    }
-  }
-
-  .instructions {
-    h4 {
-      margin: 16px 0 8px 0;
-      color: #303133;
-      
-      &:first-child {
-        margin-top: 0;
-      }
-    }
-    
-    ol, ul {
-      margin: 0;
-      padding-left: 20px;
-      
-      li {
-        margin-bottom: 4px;
-        line-height: 1.5;
-        color: #606266;
-      }
-    }
-    
-    code {
-      background-color: #f5f7fa;
-      padding: 2px 4px;
-      border-radius: 2px;
-      font-family: 'Courier New', monospace;
-      color: #e6a23c;
-    }
-  }
-}
-</style>
\ No newline at end of file
diff --git a/wx/pages/activity/detail.wxss b/wx/pages/activity/detail.wxss
index 5b506d7..9393e64 100644
--- a/wx/pages/activity/detail.wxss
+++ b/wx/pages/activity/detail.wxss
@@ -152,7 +152,7 @@
 
 .progress-bar {
   height: 12rpx;
-  background: #f0f0f0;
+  background: #e0e0e0;
   border-radius: 6rpx;
   overflow: hidden;
   margin-bottom: 12rpx;
diff --git a/wx/pages/index/index.wxml b/wx/pages/index/index.wxml
index 30c38b7..5458348 100644
--- a/wx/pages/index/index.wxml
+++ b/wx/pages/index/index.wxml
@@ -139,7 +139,17 @@
         <!-- 鎶ュ悕杩涘害鍜屾搷浣滄寜閽� -->
         <view class="bottom-info">
           <view class="registration-info" wx:if="{{item.playerMax > 0}}">
-            <text class="progress-text">鎶ュ悕浜烘暟锛歿{item.playerCount}}/{{item.playerMax}}</text>
+            <view class="progress-row">
+              <text class="progress-text">鎶ュ悕浜烘暟锛歿{item.playerCount}}/{{item.playerMax}}</text>
+              <view class="activity-actions">
+                <view class="action-btn btn btn-primary" wx:if="{{canRegister(item)}}">
+                  绔嬪嵆鎶ュ悕
+                </view>
+                <view class="action-btn btn btn-secondary" wx:else>
+                  鏌ョ湅璇︽儏
+                </view>
+              </view>
+            </view>
             <view class="progress-bar">
               <view 
                 class="progress-fill" 
@@ -147,7 +157,7 @@
               ></view>
             </view>
           </view>
-          <view class="activity-actions">
+          <view class="activity-actions" wx:else>
             <view class="action-btn btn btn-primary" wx:if="{{canRegister(item)}}">
               绔嬪嵆鎶ュ悕
             </view>
diff --git a/wx/pages/index/index.wxss b/wx/pages/index/index.wxss
index dc08e67..00624fe 100644
--- a/wx/pages/index/index.wxss
+++ b/wx/pages/index/index.wxss
@@ -289,36 +289,40 @@
 
 /* 搴曢儴淇℃伅鏍峰紡 */
 .bottom-info {
-  display: flex;
-  justify-content: space-between;
-  align-items: center;
   margin-bottom: 16rpx;
-  gap: 20rpx;
 }
 
 .registration-info {
-  flex: 1;
-  min-width: 0;
+  width: 100%;
+}
+
+.progress-row {
+  display: flex;
+  justify-content: space-between;
+  align-items: center;
+  margin-bottom: 8rpx;
+  gap: 20rpx;
 }
 
 .progress-text {
   color: #333333;
   font-size: 24rpx;
-  margin-bottom: 8rpx;
-  display: block;
+  flex: 1;
+  min-width: 0;
 }
 
 .progress-bar {
-  height: 6rpx;
-  background: #f0f0f0;
-  border-radius: 3rpx;
+  height: 8rpx;
+  background: #e0e0e0;
+  border-radius: 4rpx;
   overflow: hidden;
+  margin-bottom: 8rpx;
 }
 
 .progress-fill {
   height: 100%;
   background: linear-gradient(90deg, #1976d2, #42a5f5);
-  border-radius: 3rpx;
+  border-radius: 4rpx;
   transition: width 0.3s ease;
 }
 
diff --git a/wx/pages/message/message.js b/wx/pages/message/message.js
index 9b36d57..62900ba 100644
--- a/wx/pages/message/message.js
+++ b/wx/pages/message/message.js
@@ -1,587 +1,110 @@
 // pages/message/message.js
 const app = getApp()
-const { graphqlRequest, formatDate, formatRelativeTime } = require('../../lib/utils')
 
 Page({
   data: {
-    loading: false,
-    refreshing: false,
-    loadingMore: false,
-    hasMore: true,
-    
-    // 娑堟伅鍒楄〃
     messages: [],
-    
-    // 鍒嗛〉鍙傛暟
-    pagination: {
-      page: 1,
-      limit: 20,
-      total: 0
-    },
-    
-    // 绛涢�夋潯浠�
-    filter: {
-      type: 'ALL', // ALL, SYSTEM, ACTIVITY, JUDGE, ORGANIZER
-      status: 'ALL' // ALL, READ, UNREAD
-    },
-    
-    // 绛涢�夐�夐」
-    typeOptions: [
-      { value: 'ALL', label: '鍏ㄩ儴娑堟伅' },
-      { value: 'SYSTEM', label: '绯荤粺閫氱煡' },
-      { value: 'ACTIVITY', label: '娲诲姩娑堟伅' },
-      { value: 'JUDGE', label: '璇勫娑堟伅' },
-      { value: 'ORGANIZER', label: '涓诲姙鏂规秷鎭�' }
-    ],
-    
-    statusOptions: [
-      { value: 'ALL', label: '鍏ㄩ儴鐘舵��' },
-      { value: 'UNREAD', label: '鏈' },
-      { value: 'READ', label: '宸茶' }
-    ],
-    
-    // 鏄剧ず绛涢�夐潰鏉�
-    showFilter: false,
-    
-    // 缁熻鏁版嵁
-    stats: {
-      total: 0,
-      unread: 0
-    },
-    
-    // 閫夋嫨妯″紡
-    selectMode: false,
-    selectedMessages: [],
-    
-    // 娑堟伅绫诲瀷鍥炬爣鏄犲皠
-    typeIcons: {
-      'SYSTEM': '馃敂',
-      'ACTIVITY': '馃幆',
-      'JUDGE': '鈿栵笍',
-      'ORGANIZER': '馃懃',
-      'REGISTRATION': '馃摑',
-      'RESULT': '馃弳',
-      'REMINDER': '鈴�'
-    }
+    loading: false
   },
 
   onLoad() {
     this.loadMessages()
-    this.loadMessageStats()
   },
 
   onShow() {
-    // 椤甸潰鏄剧ず鏃跺埛鏂版湭璇绘暟閲�
-    this.loadMessageStats()
-    // 鍒濆鍖栬嚜瀹氫箟 tabbar
-    if (typeof this.getTabBar === 'function' && this.getTabBar()) {
-      this.getTabBar().init()
-    }
+    this.loadMessages()
   },
 
   onPullDownRefresh() {
-    this.refreshMessages()
-  },
-
-  onReachBottom() {
-    if (this.data.hasMore && !this.data.loadingMore) {
-      this.loadMoreMessages()
-    }
+    this.loadMessages()
   },
 
   // 鍔犺浇娑堟伅鍒楄〃
-  async loadMessages(reset = true) {
-    try {
-      if (reset) {
-        this.setData({ 
-          loading: true,
-          pagination: { ...this.data.pagination, page: 1 }
-        })
-      }
-      
-      const { filter, pagination } = this.data
-      
-      const query = `
-        query GetMessages($input: MessageQueryInput!) {
-          messages(input: $input) {
-            items {
-              id
-              type
-              title
-              content
-              isRead
-              createdAt
-              data
-              relatedActivity {
-                id
-                title
-              }
-            }
-            pagination {
-              total
-              page
-              limit
-              hasMore
-            }
-          }
-        }
-      `
-      
-      const input = {
-        type: filter.type === 'ALL' ? null : filter.type,
-        status: filter.status === 'ALL' ? null : filter.status,
-        page: pagination.page,
-        limit: pagination.limit
-      }
-      
-      const result = await graphqlRequest(query, { input })
-      
-      if (result && result.messages) {
-        const { items, pagination: newPagination } = result.messages
-        
-        // 涓烘瘡涓秷鎭坊鍔犻�変腑鐘舵��
-        const processedItems = items.map(item => ({
-          ...item,
-          isSelected: this.data.selectedMessages.indexOf(item.id) > -1
-        }))
-        
-        this.setData({
-          messages: reset ? processedItems : [...this.data.messages, ...processedItems],
-          pagination: newPagination,
-          hasMore: newPagination.hasMore
-        })
-      }
-    } catch (error) {
-      console.error('鍔犺浇娑堟伅澶辫触:', error)
+  loadMessages() {
+    // 妫�鏌ョ敤鎴锋槸鍚﹀凡鐧诲綍
+    const userInfo = app.globalData.userInfo
+    if (!userInfo || !userInfo.userId) {
+      console.error('鐢ㄦ埛鏈櫥褰曟垨userId涓嶅瓨鍦�')
       wx.showToast({
-        title: '鍔犺浇澶辫触',
-        icon: 'error'
-      })
-    } finally {
-      this.setData({ 
-        loading: false,
-        refreshing: false,
-        loadingMore: false
-      })
-      wx.stopPullDownRefresh()
-    }
-  },
-
-  // 鍒锋柊娑堟伅
-  async refreshMessages() {
-    this.setData({ refreshing: true })
-    await this.loadMessages(true)
-    await this.loadMessageStats()
-  },
-
-  // 鍔犺浇鏇村娑堟伅
-  async loadMoreMessages() {
-    if (!this.data.hasMore || this.data.loadingMore) return
-    
-    this.setData({ 
-      loadingMore: true,
-      pagination: {
-        ...this.data.pagination,
-        page: this.data.pagination.page + 1
-      }
-    })
-    
-    await this.loadMessages(false)
-  },
-
-  // 鍔犺浇娑堟伅缁熻
-  async loadMessageStats() {
-    try {
-      const query = `
-        query GetMessageStats {
-          messageStats {
-            total
-            unread
-          }
-        }
-      `
-      
-      const result = await graphqlRequest(query)
-      
-      if (result && result.messageStats) {
-        this.setData({
-          stats: result.messageStats
-        })
-        
-        // 鏇存柊搴曢儴瀵艰埅鏍忕殑鏈鏁伴噺
-        if (typeof this.getTabBar === 'function' && this.getTabBar()) {
-          this.getTabBar().setData({
-            unreadCount: result.messageStats.unread
-          })
-        }
-      }
-    } catch (error) {
-      console.error('鍔犺浇娑堟伅缁熻澶辫触:', error)
-    }
-  },
-
-  // 娑堟伅鐐瑰嚮
-  async onMessageTap(e) {
-    const { id, index } = e.currentTarget.dataset
-    const message = this.data.messages[index]
-    
-    // 濡傛灉鏄�夋嫨妯″紡锛屽垏鎹㈤�夋嫨鐘舵��
-    if (this.data.selectMode) {
-      this.toggleMessageSelection(id)
-      return
-    }
-    
-    // 鏍囪涓哄凡璇�
-    if (!message.isRead) {
-      await this.markAsRead(id, index)
-    }
-    
-    // 鏍规嵁娑堟伅绫诲瀷澶勭悊璺宠浆
-    this.handleMessageAction(message)
-  },
-
-  // 澶勭悊娑堟伅鍔ㄤ綔
-  handleMessageAction(message) {
-    const { type, data, relatedActivity } = message
-    
-    switch (type) {
-      case 'ACTIVITY':
-        if (relatedActivity && relatedActivity.id) {
-          wx.navigateTo({
-            url: `/pages/activity/detail?id=${relatedActivity.id}`
-          })
-        }
-        break
-      case 'REGISTRATION':
-        if (data && data.registrationId) {
-          wx.navigateTo({
-            url: `/pages/profile/registration-detail?id=${data.registrationId}`
-          })
-        }
-        break
-      case 'JUDGE':
-        if (data && data.submissionId) {
-          wx.navigateTo({
-            url: `/pages/judge/review?id=${data.submissionId}`
-          })
-        }
-        break
-      case 'ORGANIZER':
-        if (relatedActivity && relatedActivity.id) {
-          wx.navigateTo({
-            url: `/pages/organizer/activity-detail?id=${relatedActivity.id}`
-          })
-        }
-        break
-      default:
-        // 鏄剧ず娑堟伅璇︽儏
-        this.showMessageDetail(message)
-        break
-    }
-  },
-
-  // 鏄剧ず娑堟伅璇︽儏
-  showMessageDetail(message) {
-    wx.showModal({
-      title: message.title,
-      content: message.content,
-      showCancel: false,
-      confirmText: '鐭ラ亾浜�'
-    })
-  },
-
-  // 鏍囪涓哄凡璇�
-  async markAsRead(messageId, index) {
-    try {
-      const mutation = `
-        mutation MarkMessageAsRead($id: ID!) {
-          markMessageAsRead(id: $id) {
-            success
-          }
-        }
-      `
-      
-      const result = await graphqlRequest(mutation, { id: messageId })
-      
-      if (result && result.markMessageAsRead.success) {
-        // 鏇存柊鏈湴鏁版嵁
-        const messages = [...this.data.messages]
-        messages[index].isRead = true
-        
-        this.setData({ messages })
-        
-        // 鏇存柊缁熻鏁版嵁
-        this.setData({
-          'stats.unread': Math.max(0, this.data.stats.unread - 1)
-        })
-      }
-    } catch (error) {
-      console.error('鏍囪宸茶澶辫触:', error)
-    }
-  },
-
-  // 鎵归噺鏍囪涓哄凡璇�
-  async markAllAsRead() {
-    try {
-      wx.showLoading({ title: '澶勭悊涓�...' })
-      
-      const mutation = `
-        mutation MarkAllMessagesAsRead {
-          markAllMessagesAsRead {
-            success
-            count
-          }
-        }
-      `
-      
-      const result = await graphqlRequest(mutation)
-      
-      if (result && result.markAllMessagesAsRead.success) {
-        // 鍒锋柊娑堟伅鍒楄〃
-        await this.refreshMessages()
-        
-        wx.showToast({
-          title: '宸插叏閮ㄦ爣璁颁负宸茶',
-          icon: 'success'
-        })
-      }
-    } catch (error) {
-      console.error('鎵归噺鏍囪宸茶澶辫触:', error)
-      wx.showToast({
-        title: '鎿嶄綔澶辫触',
-        icon: 'error'
-      })
-    } finally {
-      wx.hideLoading()
-    }
-  },
-
-  // 鍒犻櫎娑堟伅
-  async deleteMessage(messageId) {
-    try {
-      const mutation = `
-        mutation DeleteMessage($id: ID!) {
-          deleteMessage(id: $id) {
-            success
-          }
-        }
-      `
-      
-      const result = await graphqlRequest(mutation, { id: messageId })
-      
-      if (result && result.deleteMessage.success) {
-        // 浠庡垪琛ㄤ腑绉婚櫎
-        const messages = this.data.messages.filter(msg => msg.id !== messageId)
-        this.setData({ messages })
-        
-        wx.showToast({
-          title: '鍒犻櫎鎴愬姛',
-          icon: 'success'
-        })
-      }
-    } catch (error) {
-      console.error('鍒犻櫎娑堟伅澶辫触:', error)
-      wx.showToast({
-        title: '鍒犻櫎澶辫触',
-        icon: 'error'
-      })
-    }
-  },
-
-  // 闀挎寜娑堟伅
-  onMessageLongPress(e) {
-    const { id } = e.currentTarget.dataset
-    
-    wx.showActionSheet({
-      itemList: ['鏍囪涓哄凡璇�', '鍒犻櫎娑堟伅'],
-      success: (res) => {
-        switch (res.tapIndex) {
-          case 0:
-            this.markAsRead(id)
-            break
-          case 1:
-            wx.showModal({
-              title: '纭鍒犻櫎',
-              content: '纭畾瑕佸垹闄よ繖鏉℃秷鎭悧锛�',
-              success: (modalRes) => {
-                if (modalRes.confirm) {
-                  this.deleteMessage(id)
-                }
-              }
-            })
-            break
-        }
-      }
-    })
-  },
-
-  // 鍒囨崲绛涢�夐潰鏉�
-  onToggleFilter() {
-    this.setData({
-      showFilter: !this.data.showFilter
-    })
-  },
-
-  // 绛涢�夋潯浠舵敼鍙�
-  onFilterChange(e) {
-    const { type, value } = e.currentTarget.dataset
-    
-    this.setData({
-      [`filter.${type}`]: value,
-      showFilter: false
-    })
-    
-    // 閲嶆柊鍔犺浇娑堟伅
-    this.loadMessages(true)
-  },
-
-  // 鍒囨崲閫夋嫨妯″紡
-  onToggleSelectMode() {
-    this.setData({
-      selectMode: !this.data.selectMode,
-      selectedMessages: []
-    })
-  },
-
-  // 鍒囨崲娑堟伅閫夋嫨鐘舵��
-  toggleMessageSelection(messageId) {
-    const selectedMessages = [...this.data.selectedMessages]
-    const index = selectedMessages.indexOf(messageId)
-    
-    if (index > -1) {
-      selectedMessages.splice(index, 1)
-    } else {
-      selectedMessages.push(messageId)
-    }
-    
-    // 鍚屾椂鏇存柊娑堟伅鐨刬sSelected瀛楁
-    const messages = this.data.messages.map(msg => ({
-      ...msg,
-      isSelected: selectedMessages.indexOf(msg.id) > -1
-    }))
-    
-    this.setData({ 
-      selectedMessages,
-      messages
-    })
-  },
-
-  // 鍏ㄩ��/鍙栨秷鍏ㄩ��
-  onToggleSelectAll() {
-    const { messages, selectedMessages } = this.data
-    const allSelected = selectedMessages.length === messages.length
-    const newSelectedMessages = allSelected ? [] : messages.map(msg => msg.id)
-    
-    // 鍚屾椂鏇存柊娑堟伅鐨刬sSelected瀛楁
-    const updatedMessages = messages.map(msg => ({
-      ...msg,
-      isSelected: !allSelected
-    }))
-    
-    this.setData({
-      selectedMessages: newSelectedMessages,
-      messages: updatedMessages
-    })
-  },
-
-  // 鎵归噺鍒犻櫎閫変腑娑堟伅
-  async onDeleteSelected() {
-    const { selectedMessages } = this.data
-    
-    if (selectedMessages.length === 0) {
-      wx.showToast({
-        title: '璇烽�夋嫨瑕佸垹闄ょ殑娑堟伅',
+        title: '璇峰厛鐧诲綍',
         icon: 'error'
       })
       return
     }
+
+    this.setData({ loading: true })
     
-    wx.showModal({
-      title: '纭鍒犻櫎',
-      content: `纭畾瑕佸垹闄ら�変腑鐨� ${selectedMessages.length} 鏉℃秷鎭悧锛焋,
-      success: async (res) => {
-        if (res.confirm) {
-          try {
-            wx.showLoading({ title: '鍒犻櫎涓�...' })
-            
-            const mutation = `
-              mutation DeleteMessages($ids: [ID!]!) {
-                deleteMessages(ids: $ids) {
-                  success
-                  count
-                }
-              }
-            `
-            
-            const result = await graphqlRequest(mutation, { ids: selectedMessages })
-            
-            if (result && result.deleteMessages.success) {
-              // 鍒锋柊娑堟伅鍒楄〃
-              await this.refreshMessages()
-              
-              this.setData({
-                selectMode: false,
-                selectedMessages: []
-              })
-              
-              wx.showToast({
-                title: `宸插垹闄� ${result.deleteMessages.count} 鏉℃秷鎭痐,
-                icon: 'success'
-              })
-            }
-          } catch (error) {
-            console.error('鎵归噺鍒犻櫎澶辫触:', error)
-            wx.showToast({
-              title: '鍒犻櫎澶辫触',
-              icon: 'error'
-            })
-          } finally {
-            wx.hideLoading()
-          }
+    const query = `
+      query GetMessagesByUserId($userId: Long!) {
+        getMessagesByUserId(userId: $userId) {
+          id
+          userId
+          content
+          wxMsgSuccess
+          wxMsgErrCount
+          state
+          createTime
+          updateTime
         }
       }
-    })
-  },
+    `
 
-  // 鑾峰彇娑堟伅绫诲瀷鍥炬爣
-  getTypeIcon(type) {
-    return this.data.typeIcons[type] || '馃摠'
-  },
-
-  // 鑾峰彇娑堟伅绫诲瀷鏂囨湰
-  getTypeText(type) {
-    const typeMap = {
-      'SYSTEM': '绯荤粺閫氱煡',
-      'ACTIVITY': '娲诲姩娑堟伅',
-      'JUDGE': '璇勫娑堟伅',
-      'ORGANIZER': '涓诲姙鏂规秷鎭�',
-      'REGISTRATION': '鎶ュ悕娑堟伅',
-      'RESULT': '缁撴灉閫氱煡',
-      'REMINDER': '鎻愰啋娑堟伅'
+    const variables = {
+      userId: userInfo.userId
     }
-    return typeMap[type] || '娑堟伅'
+
+    app.graphqlRequest(query, variables)
+      .then(data => {
+        console.log('娑堟伅鏁版嵁:', data)
+        this.setData({
+          messages: data.getMessagesByUserId || [],
+          loading: false
+        })
+        wx.stopPullDownRefresh()
+      })
+      .catch(error => {
+        console.error('鍔犺浇娑堟伅澶辫触:', error)
+        wx.showToast({
+          title: '鍔犺浇澶辫触',
+          icon: 'error'
+        })
+        this.setData({ loading: false })
+        wx.stopPullDownRefresh()
+      })
   },
 
-  // 鏍煎紡鍖栨椂闂�
-  formatTime(dateString) {
-    const now = new Date()
-    const date = new Date(dateString)
-    const diff = now.getTime() - date.getTime()
+  // 鏍煎紡鍖栨秷鎭椂闂�
+  formatMessageTime(timeStr) {
+    if (!timeStr) return ''
     
-    // 涓�澶╁唴鏄剧ず鐩稿鏃堕棿
-    if (diff < 24 * 60 * 60 * 1000) {
-      return formatRelativeTime(dateString)
-    }
-    
-    // 瓒呰繃涓�澶╂樉绀哄叿浣撴棩鏈�
-    return formatDate(dateString, 'MM-DD HH:mm')
-  },
-
-  // 鍒嗕韩椤甸潰
-  onShareAppMessage() {
-    return {
-      title: '钃夋槗鍒� - 娑堟伅涓績',
-      path: '/pages/index/index'
+    try {
+      const date = new Date(timeStr)
+      const now = new Date()
+      const diff = now.getTime() - date.getTime()
+      
+      // 濡傛灉鏄粖澶�
+      if (diff < 24 * 60 * 60 * 1000) {
+        const hours = date.getHours().toString().padStart(2, '0')
+        const minutes = date.getMinutes().toString().padStart(2, '0')
+        return `${hours}:${minutes}`
+      }
+      
+      // 濡傛灉鏄槰澶�
+      if (diff < 48 * 60 * 60 * 1000) {
+        const hours = date.getHours().toString().padStart(2, '0')
+        const minutes = date.getMinutes().toString().padStart(2, '0')
+        return `鏄ㄥぉ ${hours}:${minutes}`
+      }
+      
+      // 鍏朵粬鏃ユ湡
+      const month = (date.getMonth() + 1).toString().padStart(2, '0')
+      const day = date.getDate().toString().padStart(2, '0')
+      const hours = date.getHours().toString().padStart(2, '0')
+      const minutes = date.getMinutes().toString().padStart(2, '0')
+      return `${month}-${day} ${hours}:${minutes}`
+    } catch (error) {
+      console.error('鏃堕棿鏍煎紡鍖栧け璐�:', error)
+      return timeStr
     }
   }
 })
\ No newline at end of file
diff --git a/wx/pages/message/message.wxml b/wx/pages/message/message.wxml
index d48b7f5..bb9e218 100644
--- a/wx/pages/message/message.wxml
+++ b/wx/pages/message/message.wxml
@@ -8,160 +8,28 @@
 
   <!-- 娑堟伅鍐呭 -->
   <view wx:else class="message-content">
-    <!-- 椤堕儴缁熻鍜屾搷浣滄爮 -->
-    <view class="header-bar">
-      <view class="stats-info">
-        <text class="total-count">鍏� {{stats.total}} 鏉℃秷鎭�</text>
-        <text wx:if="{{stats.unread > 0}}" class="unread-count">{{stats.unread}} 鏉℃湭璇�</text>
-      </view>
-      
-      <view class="header-actions">
-        <!-- 绛涢�夋寜閽� -->
-        <view class="filter-btn {{showFilter ? 'active' : ''}}" bindtap="onToggleFilter">
-          <text class="icon ic-filter"></text>
-          <text class="filter-text">绛涢��</text>
-        </view>
-        
-        <!-- 閫夋嫨妯″紡鎸夐挳 -->
-        <view class="select-btn {{selectMode ? 'active' : ''}}" bindtap="onToggleSelectMode">
-          <text class="icon {{selectMode ? 'ic-close' : 'ic-choose'}}"></text>
-          <text class="select-text">{{selectMode ? '鍙栨秷' : '閫夋嫨'}}</text>
-        </view>
-        
-        <!-- 鍏ㄩ儴宸茶鎸夐挳 -->
-        <view wx:if="{{stats.unread > 0 && !selectMode}}" class="mark-all-btn" bindtap="markAllAsRead">
-          <text class="icon ic-choose"></text>
-          <text class="mark-all-text">鍏ㄩ儴宸茶</text>
-        </view>
-      </view>
+    <!-- 娑堟伅缁熻 -->
+    <view class="message-stats">
+      <text class="stats-text">鍏� {{messages.length}} 鏉℃秷鎭�</text>
     </view>
-
-    <!-- 绛涢�夐潰鏉� -->
-    <view wx:if="{{showFilter}}" class="filter-panel">
-      <view class="filter-section">
-        <text class="filter-label">娑堟伅绫诲瀷锛�</text>
-        <view class="filter-options">
-          <view 
-            wx:for="{{typeOptions}}" 
-            wx:key="value"
-            class="filter-option {{filter.type === item.value ? 'active' : ''}}"
-            data-type="type"
-            data-value="{{item.value}}"
-            bindtap="onFilterChange"
-          >
-            {{item.label}}
-          </view>
-        </view>
-      </view>
-      
-      <view class="filter-section">
-        <text class="filter-label">闃呰鐘舵�侊細</text>
-        <view class="filter-options">
-          <view 
-            wx:for="{{statusOptions}}" 
-            wx:key="value"
-            class="filter-option {{filter.status === item.value ? 'active' : ''}}"
-            data-type="status"
-            data-value="{{item.value}}"
-            bindtap="onFilterChange"
-          >
-            {{item.label}}
-          </view>
-        </view>
-      </view>
-    </view>
-
-    <!-- 閫夋嫨妯″紡鎿嶄綔鏍� -->
-    <view wx:if="{{selectMode}}" class="select-actions">
-      <view class="select-all-btn" bindtap="onToggleSelectAll">
-        <text class="select-all-icon">{{selectedMessages.length === messages.length && messages.length > 0 ? '鈽�' : '鈽�'}}</text>
-        <text class="select-all-text">鍏ㄩ��</text>
-      </view>
-      
-      <view class="selected-count">
-        宸查�夋嫨 {{selectedMessages.length}} 鏉�
-      </view>
-      
-      <view class="batch-actions">
-        <view wx:if="{{selectedMessages.length > 0}}" class="delete-selected-btn" bindtap="onDeleteSelected">
-          <text class="delete-icon">馃棏</text>
-          <text class="delete-text">鍒犻櫎</text>
-        </view>
-      </view>
-    </view>
-
+    
     <!-- 娑堟伅鍒楄〃 -->
     <view class="message-list">
+      <!-- 绌虹姸鎬� -->
+      <view wx:if="{{messages.length === 0}}" class="empty-state">
+        <text class="empty-icon">馃摥</text>
+        <text class="empty-text">鏆傛棤娑堟伅</text>
+      </view>
+      
       <!-- 娑堟伅椤� -->
       <view 
         wx:for="{{messages}}" 
         wx:key="id"
-        class="message-item {{!item.isRead ? 'unread' : ''}} {{selectMode && item.isSelected ? 'selected' : ''}}"
-        data-id="{{item.id}}"
-        data-index="{{index}}"
-        bindtap="onMessageTap"
-        bindlongpress="onMessageLongPress"
+        class="message-item"
       >
-        <!-- 閫夋嫨妗� -->
-        <view wx:if="{{selectMode}}" class="message-checkbox">
-          <text class="checkbox-icon">{{item.isSelected ? '鈽�' : '鈽�'}}</text>
-        </view>
-        
-        <!-- 娑堟伅鍥炬爣 -->
-        <view class="message-icon">
-          <text class="type-icon">{{getTypeIcon(item.type)}}</text>
-          <view wx:if="{{!item.isRead}}" class="unread-dot"></view>
-        </view>
-        
-        <!-- 娑堟伅鍐呭 -->
-        <view class="message-content-area">
-          <view class="message-header">
-            <text class="message-title">{{item.title}}</text>
-            <text class="message-time">{{formatTime(item.createdAt)}}</text>
-          </view>
-          
-          <view class="message-body">
-            <text class="message-text">{{item.content}}</text>
-          </view>
-          
-          <view class="message-footer">
-            <text class="message-type">{{getTypeText(item.type)}}</text>
-            <view wx:if="{{item.relatedActivity}}" class="related-activity">
-              <text class="activity-label">鐩稿叧娲诲姩锛�</text>
-              <text class="activity-title">{{item.relatedActivity.title}}</text>
-            </view>
-          </view>
-        </view>
-        
-        <!-- 鏈鏍囪瘑 -->
-        <view wx:if="{{!item.isRead && !selectMode}}" class="unread-badge">
-          <text class="unread-text">鏈</text>
-        </view>
-      </view>
-      
-      <!-- 鍔犺浇鏇村 -->
-      <view wx:if="{{loadingMore}}" class="loading-more">
-        <view class="loading-spinner small"></view>
-        <text class="loading-text">鍔犺浇鏇村...</text>
-      </view>
-      
-      <!-- 娌℃湁鏇村鏁版嵁 -->
-      <view wx:if="{{!hasMore && messages.length > 0}}" class="no-more">
-        <text class="no-more-text">娌℃湁鏇村娑堟伅浜�</text>
-      </view>
-      
-      <!-- 绌虹姸鎬� -->
-      <view wx:if="{{!loading && messages.length === 0}}" class="empty-state">
-        <view class="empty-icon">馃摥</view>
-        <text class="empty-title">鏆傛棤娑堟伅</text>
-        <text class="empty-desc">鎮ㄨ繕娌℃湁鏀跺埌浠讳綍娑堟伅</text>
+        <view class="message-content-text">{{item.content}}</view>
+        <view class="message-time">{{item.formattedTime}}</view>
       </view>
     </view>
-  </view>
-
-  <!-- 鍒锋柊鎻愮ず -->
-  <view wx:if="{{refreshing}}" class="refresh-tip">
-    <view class="refresh-spinner"></view>
-    <text class="refresh-text">鍒锋柊涓�...</text>
   </view>
 </view>
\ No newline at end of file
diff --git a/wx/pages/message/message.wxss b/wx/pages/message/message.wxss
index 39a508d..ddde0f9 100644
--- a/wx/pages/message/message.wxss
+++ b/wx/pages/message/message.wxss
@@ -1,5 +1,4 @@
 /* pages/message/message.wxss */
-@import "../../style/icon.wxss";
 .container {
   min-height: 100vh;
   background-color: #f5f5f5;
@@ -18,20 +17,13 @@
   width: 40rpx;
   height: 40rpx;
   border: 4rpx solid #e0e0e0;
-  border-top: 4rpx solid #007aff;
+  border-top: 4rpx solid #1976d2;
   border-radius: 50%;
   animation: spin 1s linear infinite;
-  margin-bottom: 20rpx;
-}
-
-.loading-spinner.small {
-  width: 30rpx;
-  height: 30rpx;
-  border-width: 3rpx;
-  margin-bottom: 10rpx;
 }
 
 .loading-text {
+  margin-top: 20rpx;
   font-size: 28rpx;
   color: #666;
 }
@@ -43,337 +35,52 @@
 
 /* 娑堟伅鍐呭 */
 .message-content {
-  padding-bottom: 20rpx;
+  padding: 20rpx;
 }
 
-/* 椤堕儴缁熻鍜屾搷浣滄爮 */
-.header-bar {
-  display: flex;
-  justify-content: space-between;
-  align-items: center;
-  padding: 20rpx 30rpx;
+/* 娑堟伅缁熻 */
+.message-stats {
   background-color: #fff;
-  border-bottom: 1rpx solid #e0e0e0;
-}
-
-.stats-info {
-  display: flex;
-  align-items: center;
-  gap: 20rpx;
-}
-
-.total-count {
-  font-size: 28rpx;
-  color: #333;
-}
-
-.unread-count {
-  font-size: 24rpx;
-  color: #ff4757;
-  background-color: #ffe8ea;
-  padding: 4rpx 12rpx;
-  border-radius: 12rpx;
-}
-
-.header-actions {
-  display: flex;
-  align-items: center;
-  gap: 20rpx;
-}
-
-.filter-btn,
-.select-btn,
-.mark-all-btn {
-  display: flex;
-  align-items: center;
-  gap: 8rpx;
-  padding: 12rpx 20rpx;
-  background-color: #f8f9fa;
-  border-radius: 20rpx;
-  font-size: 24rpx;
-  color: #666;
-  transition: all 0.3s ease;
-}
-
-.filter-btn.active,
-.select-btn.active {
-  background-color: #007aff;
-  color: #fff;
-}
-
-.mark-all-btn {
-  background-color: #28a745;
-  color: #fff;
-}
-
-.filter-icon,
-.select-icon,
-.mark-all-icon {
-  font-size: 20rpx;
-}
-
-.filter-text,
-.select-text,
-.mark-all-text {
-  font-size: 24rpx;
-}
-
-/* 绛涢�夐潰鏉� */
-.filter-panel {
-  background-color: #fff;
-  padding: 30rpx;
-  border-bottom: 1rpx solid #e0e0e0;
-}
-
-.filter-section {
-  margin-bottom: 30rpx;
-}
-
-.filter-section:last-child {
-  margin-bottom: 0;
-}
-
-.filter-label {
-  font-size: 28rpx;
-  color: #333;
-  font-weight: 500;
+  border-radius: 16rpx;
+  padding: 24rpx;
   margin-bottom: 20rpx;
-  display: block;
+  box-shadow: 0 2rpx 8rpx rgba(0, 0, 0, 0.1);
 }
 
-.filter-options {
-  display: flex;
-  flex-wrap: wrap;
-  gap: 20rpx;
-}
-
-.filter-option {
-  padding: 12rpx 24rpx;
-  background-color: #f8f9fa;
-  border-radius: 20rpx;
-  font-size: 26rpx;
+.stats-text {
+  font-size: 28rpx;
   color: #666;
-  transition: all 0.3s ease;
-}
-
-.filter-option.active {
-  background-color: #007aff;
-  color: #fff;
-}
-
-/* 閫夋嫨妯″紡鎿嶄綔鏍� */
-.select-actions {
-  display: flex;
-  justify-content: space-between;
-  align-items: center;
-  padding: 20rpx 30rpx;
-  background-color: #fff;
-  border-bottom: 1rpx solid #e0e0e0;
-}
-
-.select-all-btn {
-  display: flex;
-  align-items: center;
-  gap: 8rpx;
-  font-size: 26rpx;
-  color: #007aff;
-}
-
-.select-all-icon {
-  font-size: 24rpx;
-}
-
-.selected-count {
-  font-size: 26rpx;
-  color: #666;
-}
-
-.batch-actions {
-  display: flex;
-  gap: 20rpx;
-}
-
-.delete-selected-btn {
-  display: flex;
-  align-items: center;
-  gap: 8rpx;
-  padding: 12rpx 20rpx;
-  background-color: #ff4757;
-  color: #fff;
-  border-radius: 20rpx;
-  font-size: 24rpx;
-}
-
-.delete-icon {
-  font-size: 20rpx;
+  font-weight: 500;
 }
 
 /* 娑堟伅鍒楄〃 */
 .message-list {
-  padding: 0 30rpx;
-}
-
-.message-item {
-  display: flex;
-  align-items: flex-start;
-  padding: 30rpx 0;
-  border-bottom: 1rpx solid #e0e0e0;
   background-color: #fff;
-  margin-bottom: 20rpx;
   border-radius: 16rpx;
-  padding: 30rpx;
-  position: relative;
-  transition: all 0.3s ease;
-}
-
-.message-item.unread {
-  background-color: #f8f9ff;
-  border-left: 6rpx solid #007aff;
-}
-
-.message-item.selected {
-  background-color: #e3f2fd;
-  border: 2rpx solid #007aff;
-}
-
-.message-checkbox {
-  margin-right: 20rpx;
-  padding-top: 10rpx;
-}
-
-.checkbox-icon {
-  font-size: 32rpx;
-  color: #007aff;
-}
-
-.message-icon {
-  position: relative;
-  margin-right: 20rpx;
-  padding-top: 10rpx;
-}
-
-.type-icon {
-  font-size: 40rpx;
-}
-
-.unread-dot {
-  position: absolute;
-  top: 5rpx;
-  right: -5rpx;
-  width: 12rpx;
-  height: 12rpx;
-  background-color: #ff4757;
-  border-radius: 50%;
-}
-
-.message-content-area {
-  flex: 1;
-  min-width: 0;
-}
-
-.message-header {
-  display: flex;
-  justify-content: space-between;
-  align-items: flex-start;
-  margin-bottom: 12rpx;
-}
-
-.message-title {
-  font-size: 30rpx;
-  font-weight: 500;
-  color: #333;
-  flex: 1;
-  margin-right: 20rpx;
   overflow: hidden;
-  text-overflow: ellipsis;
-  white-space: nowrap;
+}
+
+/* 娑堟伅椤� */
+.message-item {
+  padding: 30rpx 24rpx;
+  border-bottom: 1rpx solid #f0f0f0;
+  background-color: #fff;
+}
+
+.message-item:last-child {
+  border-bottom: none;
+}
+
+.message-content-text {
+  font-size: 32rpx;
+  color: #333;
+  line-height: 1.5;
+  margin-bottom: 16rpx;
+  word-wrap: break-word;
 }
 
 .message-time {
   font-size: 24rpx;
-  color: #999;
-  white-space: nowrap;
-}
-
-.message-body {
-  margin-bottom: 16rpx;
-}
-
-.message-text {
-  font-size: 28rpx;
-  color: #666;
-  line-height: 1.5;
-  display: -webkit-box;
-  -webkit-box-orient: vertical;
-  -webkit-line-clamp: 2;
-  overflow: hidden;
-}
-
-.message-footer {
-  display: flex;
-  justify-content: space-between;
-  align-items: center;
-  flex-wrap: wrap;
-  gap: 10rpx;
-}
-
-.message-type {
-  font-size: 22rpx;
-  color: #007aff;
-  background-color: #e3f2fd;
-  padding: 4rpx 12rpx;
-  border-radius: 12rpx;
-}
-
-.related-activity {
-  display: flex;
-  align-items: center;
-  gap: 8rpx;
-  flex: 1;
-  min-width: 0;
-}
-
-.activity-label {
-  font-size: 22rpx;
-  color: #999;
-  white-space: nowrap;
-}
-
-.activity-title {
-  font-size: 22rpx;
-  color: #666;
-  overflow: hidden;
-  text-overflow: ellipsis;
-  white-space: nowrap;
-}
-
-.unread-badge {
-  position: absolute;
-  top: 20rpx;
-  right: 20rpx;
-  background-color: #ff4757;
-  color: #fff;
-  padding: 4rpx 12rpx;
-  border-radius: 12rpx;
-  font-size: 20rpx;
-}
-
-/* 鍔犺浇鏇村 */
-.loading-more {
-  display: flex;
-  flex-direction: column;
-  align-items: center;
-  padding: 40rpx 0;
-}
-
-/* 娌℃湁鏇村鏁版嵁 */
-.no-more {
-  text-align: center;
-  padding: 40rpx 0;
-}
-
-.no-more-text {
-  font-size: 26rpx;
   color: #999;
 }
 
@@ -389,65 +96,10 @@
 
 .empty-icon {
   font-size: 120rpx;
-  margin-bottom: 30rpx;
-  opacity: 0.5;
+  margin-bottom: 24rpx;
 }
 
-.empty-title {
-  font-size: 32rpx;
-  color: #333;
-  margin-bottom: 16rpx;
-  font-weight: 500;
-}
-
-.empty-desc {
-  font-size: 26rpx;
+.empty-text {
+  font-size: 28rpx;
   color: #999;
-  line-height: 1.5;
-}
-
-/* 鍒锋柊鎻愮ず */
-.refresh-tip {
-  position: fixed;
-  top: 0;
-  left: 50%;
-  transform: translateX(-50%);
-  display: flex;
-  align-items: center;
-  gap: 16rpx;
-  background-color: rgba(0, 0, 0, 0.8);
-  color: #fff;
-  padding: 20rpx 40rpx;
-  border-radius: 0 0 20rpx 20rpx;
-  font-size: 26rpx;
-  z-index: 1000;
-}
-
-.refresh-spinner {
-  width: 24rpx;
-  height: 24rpx;
-  border: 3rpx solid rgba(255, 255, 255, 0.3);
-  border-top: 3rpx solid #fff;
-  border-radius: 50%;
-  animation: spin 1s linear infinite;
-}
-
-/* 鍝嶅簲寮忛�傞厤 */
-@media (max-width: 375px) {
-  .header-bar {
-    padding: 15rpx 20rpx;
-  }
-  
-  .message-item {
-    padding: 25rpx 20rpx;
-    margin-bottom: 15rpx;
-  }
-  
-  .message-title {
-    font-size: 28rpx;
-  }
-  
-  .message-text {
-    font-size: 26rpx;
-  }
 }
\ No newline at end of file
diff --git a/wx/pages/registration/registration.js b/wx/pages/registration/registration.js
index e797579..f4ca562 100644
--- a/wx/pages/registration/registration.js
+++ b/wx/pages/registration/registration.js
@@ -9,6 +9,7 @@
     activityId: '',
     activity: null,
     loading: false,
+    userInfo: null, // 褰撳墠鐢ㄦ埛淇℃伅
     
     // 琛ㄥ崟鏁版嵁
     formData: {
@@ -102,12 +103,15 @@
       console.log('鉂� 娌℃湁鎺ユ敹鍒癮ctivityId鍙傛暟')
     }
     
+    // 鍔犺浇鐢ㄦ埛淇℃伅
+    this.loadUserInfo()
+    
     // 浠庡叏灞�鏁版嵁鑾峰彇鐢ㄦ埛淇℃伅棰勫~鍏�
     this.prefillUserInfo()
     
     // 鍔犺浇鍖哄煙鏁版嵁
     this.loadRegions()
-  },
+  }
 
   // 鍔犺浇娲诲姩淇℃伅
   async loadActivityInfo() {
@@ -210,15 +214,80 @@
     }
   },
 
+  // 鍔犺浇鐢ㄦ埛淇℃伅
+  loadUserInfo() {
+    const userInfo = app.globalData.userInfo
+    console.log('馃攳 鍔犺浇鐢ㄦ埛淇℃伅鐢ㄤ簬鏄剧ず:', userInfo)
+    
+    if (userInfo) {
+      let displayUserInfo = {
+        name: userInfo.name || '',
+        phone: userInfo.phone || '',
+        avatarUrl: userInfo.avatarUrl || '',
+        gender: null,
+        education: ''
+      }
+      
+      // 濡傛灉鐢ㄦ埛鏈塒layer淇℃伅锛屼紭鍏堜娇鐢≒layer鐨勮缁嗕俊鎭�
+      if (userInfo.player) {
+        console.log('馃搵 浣跨敤Player淇℃伅鏄剧ず:', userInfo.player)
+        displayUserInfo.name = userInfo.player.name || userInfo.name || ''
+        displayUserInfo.phone = userInfo.player.phone || userInfo.phone || ''
+        displayUserInfo.avatarUrl = userInfo.player.avatarUrl || userInfo.avatarUrl || ''
+        
+        // 澶勭悊鎬у埆淇℃伅锛�0=鐢凤紝1=濂�
+        if (userInfo.player.gender !== undefined && userInfo.player.gender !== null) {
+          displayUserInfo.gender = parseInt(userInfo.player.gender)
+        }
+        
+        // 澶勭悊瀛﹀巻淇℃伅
+        if (userInfo.player.education) {
+          displayUserInfo.education = userInfo.player.education
+        }
+      }
+      
+      console.log('鉁� 璁剧疆鏄剧ず鐢ㄦ埛淇℃伅:', displayUserInfo)
+      this.setData({
+        userInfo: displayUserInfo
+      })
+    } else {
+      console.log('鈿狅笍 鏈壘鍒扮敤鎴蜂俊鎭�')
+    }
+  },
+
   // 棰勫~鍏呯敤鎴蜂俊鎭�
   prefillUserInfo() {
     const userInfo = app.globalData.userInfo
+    console.log('馃攳 棰勫~鍏呯敤鎴蜂俊鎭�:', userInfo)
+    
     if (userInfo) {
-      this.setData({
+      const updateData = {
         'formData.name': userInfo.name || '',
         'formData.phone': userInfo.phone || '',
         'formData.email': userInfo.email || ''
-      })
+      }
+      
+      // 濡傛灉鐢ㄦ埛鏈塒layer淇℃伅锛屼紭鍏堜娇鐢≒layer鐨勮缁嗕俊鎭�
+      if (userInfo.player) {
+        console.log('馃搵 浣跨敤Player淇℃伅棰勫~鍏�:', userInfo.player)
+        updateData['formData.name'] = userInfo.player.name || userInfo.name || ''
+        updateData['formData.phone'] = userInfo.player.phone || userInfo.phone || ''
+        
+        // 澶勭悊鎬у埆淇℃伅锛�0=鐢凤紝1=濂�
+        if (userInfo.player.gender !== undefined && userInfo.player.gender !== null) {
+          const genderIndex = parseInt(userInfo.player.gender)
+          if (genderIndex === 0 || genderIndex === 1) {
+            updateData['formData.gender'] = genderIndex
+            updateData['genderIndex'] = genderIndex
+            console.log('馃懁 璁剧疆鎬у埆:', genderIndex === 0 ? '鐢�' : '濂�')
+          }
+        }
+      }
+      
+      console.log('鉁� 棰勫~鍏呮暟鎹�:', updateData)
+      this.setData(updateData)
+    } else {
+      console.log('鈿狅笍 鏈壘鍒扮敤鎴蜂俊鎭紝鏃犳硶棰勫~鍏�')
     }
   },
 
diff --git a/wx/pages/registration/registration.wxml b/wx/pages/registration/registration.wxml
index 5722221..7caa068 100644
--- a/wx/pages/registration/registration.wxml
+++ b/wx/pages/registration/registration.wxml
@@ -14,6 +14,39 @@
       <text class="activity-desc">{{activity.description}}</text>
     </view>
 
+    <!-- 褰撳墠鐢ㄦ埛淇℃伅 -->
+    <view wx:if="{{userInfo}}" class="user-info-section">
+      <view class="section-title">褰撳墠鐧诲綍鐢ㄦ埛</view>
+      <view class="user-info-card">
+        <view class="user-avatar-wrapper">
+          <image 
+            wx:if="{{userInfo.avatarUrl}}" 
+            class="user-avatar" 
+            src="{{userInfo.avatarUrl}}" 
+            mode="aspectFill"
+          />
+          <view wx:else class="user-avatar-placeholder">
+            <text class="avatar-text">{{userInfo.name ? userInfo.name.substring(0, 1) : '鐢�'}}</text>
+          </view>
+        </view>
+        <view class="user-details">
+          <view class="user-name">{{userInfo.name || '鏈缃�'}}</view>
+          <view class="user-info-row" wx:if="{{userInfo.phone}}">
+            <text class="info-label">鎵嬫満鍙凤細</text>
+            <text class="info-value">{{userInfo.phone}}</text>
+          </view>
+          <view class="user-info-row" wx:if="{{userInfo.gender !== null && userInfo.gender !== undefined}}">
+            <text class="info-label">鎬у埆锛�</text>
+            <text class="info-value">{{userInfo.gender === 0 ? '鐢�' : '濂�'}}</text>
+          </view>
+          <view class="user-info-row" wx:if="{{userInfo.education}}">
+            <text class="info-label">瀛﹀巻锛�</text>
+            <text class="info-value">{{userInfo.education}}</text>
+          </view>
+        </view>
+      </view>
+    </view>
+
     <!-- 鍩烘湰淇℃伅 -->
     <view class="form-section">
       <view class="section-title">鍩烘湰淇℃伅</view>
diff --git a/wx/pages/registration/registration.wxss b/wx/pages/registration/registration.wxss
index 087ca4d..36e4507 100644
--- a/wx/pages/registration/registration.wxss
+++ b/wx/pages/registration/registration.wxss
@@ -50,6 +50,87 @@
   line-height: 1.6;
 }
 
+/* 鐢ㄦ埛淇℃伅鍖哄煙鏍峰紡 */
+.user-info-section {
+  background: #ffffff;
+  margin-bottom: 20rpx;
+  border-radius: 12rpx;
+  overflow: hidden;
+  box-shadow: 0 2rpx 8rpx rgba(0, 0, 0, 0.1);
+}
+
+.user-info-card {
+  padding: 30rpx;
+  display: flex;
+  align-items: center;
+  gap: 24rpx;
+}
+
+.user-avatar-wrapper {
+  flex-shrink: 0;
+}
+
+.user-avatar {
+  width: 120rpx;
+  height: 120rpx;
+  border-radius: 60rpx;
+  border: 4rpx solid #f0f0f0;
+}
+
+.user-avatar-placeholder {
+  width: 120rpx;
+  height: 120rpx;
+  border-radius: 60rpx;
+  background: linear-gradient(135deg, #42a5f5 0%, #1976d2 100%);
+  display: flex;
+  align-items: center;
+  justify-content: center;
+  border: 4rpx solid #f0f0f0;
+}
+
+.avatar-text {
+  color: #ffffff;
+  font-size: 48rpx;
+  font-weight: bold;
+}
+
+.user-details {
+  flex: 1;
+  min-width: 0;
+}
+
+.user-name {
+  font-size: 32rpx;
+  font-weight: bold;
+  color: #333333;
+  margin-bottom: 16rpx;
+  overflow: hidden;
+  text-overflow: ellipsis;
+  white-space: nowrap;
+}
+
+.user-info-row {
+  display: flex;
+  align-items: center;
+  margin-bottom: 8rpx;
+  font-size: 26rpx;
+}
+
+.info-label {
+  color: #666666;
+  min-width: 100rpx;
+  margin-right: 12rpx;
+}
+
+.info-value {
+  color: #333333;
+  flex: 1;
+  min-width: 0;
+  overflow: hidden;
+  text-overflow: ellipsis;
+  white-space: nowrap;
+}
+
 /* 琛ㄥ崟鍖哄煙鏍峰紡 */
 .form-section {
   background: #ffffff;

--
Gitblit v1.8.0