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