#!/usr/bin/env python3 # -*- coding: utf-8 -*- import re import json print("修复Mock文件结构...") # 读取文件 with open('/Users/apple/Documents/cursor/教务系统/frontend_大健康/src/mocks/resumeInterviewMock.js', 'r', encoding='utf-8') as f: content = f.read() # 先备份 with open('/Users/apple/Documents/cursor/教务系统/frontend_大健康/src/mocks/resumeInterviewMock.js.backup_before_structure_fix', 'w', encoding='utf-8') as f: f.write(content) # 找到所有岗位群 industry_pattern = r'"id":\s*"(health_\d+)"' industries = re.findall(industry_pattern, content) unique_industries = [] seen = set() for ind in industries: if ind not in seen: unique_industries.append(ind) seen.add(ind) print(f"找到 {len(unique_industries)} 个岗位群") # 对每个岗位群,确保questions在positions之后 for industry_id in unique_industries: # 查找该岗位群的整个块 pattern = rf'(\{{\s*"id":\s*"{industry_id}"[^{{]*?"name":\s*"[^"]+",\s*"positions":\s*\[)' match = re.search(pattern, content, re.DOTALL) if match: start_pos = match.start() # 找到这个岗位群块的结束位置(下一个岗位群开始或industries数组结束) next_industry = None for next_id in unique_industries: if next_id != industry_id: next_match = re.search(rf'\{{\s*"id":\s*"{next_id}"', content[start_pos + 100:]) if next_match: if next_industry is None or next_match.start() < next_industry: next_industry = start_pos + 100 + next_match.start() # 如果没有下一个岗位群,找industries数组的结束 if next_industry is None: end_match = re.search(r'\n\];', content[start_pos:]) if end_match: next_industry = start_pos + end_match.start() if next_industry: industry_block = content[start_pos:next_industry] # 检查是否有questions被错误地放在positions内部 if '"questions":' in industry_block: # 提取positions数组 positions_match = re.search(r'"positions":\s*\[(.*)', industry_block, re.DOTALL) if positions_match: positions_content = positions_match.group(1) # 找到positions数组的正确结束位置(不包含questions) bracket_count = 1 brace_count = 0 in_questions = False positions_end = 0 for i, char in enumerate(positions_content): if char == '[': bracket_count += 1 elif char == ']': bracket_count -= 1 if bracket_count == 0 and not in_questions: positions_end = i break elif char == '{': brace_count += 1 elif char == '}': brace_count -= 1 # 检查是否进入questions部分 if '"questions":' in positions_content[max(0, i-20):i+20]: in_questions = True # 现在提取questions部分 questions_match = re.search(r'"questions":\s*\[(.*?)\]\s*\}', industry_block, re.DOTALL) if questions_match: questions_content = questions_match.group(0) # 重构岗位群块 # 1. 移除positions中错误的questions clean_positions = re.sub(r',\s*"questions":\s*\[[^\]]*?\]', '', industry_block) # 2. 在positions数组后添加questions # 找到positions的结束位置 pos_end_match = re.search(r'(\]\s*)(,?\s*"questions":|\}\s*(?:,|\]|$))', clean_positions) if pos_end_match: # 在positions后插入questions insert_pos = pos_end_match.start() + len(pos_end_match.group(1)) new_block = clean_positions[:insert_pos] + ',\n ' + questions_content + clean_positions[insert_pos:] # 替换原内容 content = content[:start_pos] + new_block + content[next_industry:] print(f" ✓ 修复了 {industry_id} 的结构") # 清理多余的逗号和括号 content = re.sub(r',\s*\]', ']', content) content = re.sub(r',\s*\}', '}', content) # 写回文件 with open('/Users/apple/Documents/cursor/教务系统/frontend_大健康/src/mocks/resumeInterviewMock.js', 'w', encoding='utf-8') as f: f.write(content) print("✓ 结构修复完成!")