Files
ALL-teach_sys/frontend_视觉设计/fix_modal_fields.py

144 lines
4.6 KiB
Python
Raw Normal View History

#!/usr/bin/env python3
import json
import re
import os
from datetime import datetime
# 读取mock文件
mock_file = 'src/mocks/projectLibraryMock.js'
with open(mock_file, 'r', encoding='utf-8') as f:
content = f.read()
# 创建备份
backup_file = f"{mock_file}.backup_modal_fix_{datetime.now().strftime('%Y%m%d_%H%M%S')}"
with open(backup_file, 'w', encoding='utf-8') as f:
f.write(content)
print(f"已创建备份:{backup_file}")
# 岗位等级排序权重
level_order = {
"普通岗": 0,
"技术骨干岗": 1,
"储备干部岗": 2
}
# 处理每个项目添加applicablePositions
def fix_positions_field(text):
# 查找所有positions数组
pattern = r'("positions"\s*:\s*\[)((?:\s*\{[^}]+\}\s*,?\s*)+)(\])'
def process_match(match):
prefix = match.group(1)
positions_content = match.group(2)
suffix = match.group(3)
# 提取所有岗位对象
pos_pattern = r'\{\s*"level"\s*:\s*"([^"]+)"\s*,\s*"position"\s*:\s*"([^"]+)"\s*\}'
positions = []
for m in re.finditer(pos_pattern, positions_content):
level = m.group(1)
position = m.group(2)
positions.append({
'level': level,
'position': position,
'order': level_order.get(level, 99)
})
# 按等级排序
positions.sort(key=lambda x: x['order'])
# 重建positions数组已排序
sorted_positions = []
for p in positions:
sorted_positions.append(f'''
{{
"level": "{p['level']}",
"position": "{p['position']}"
}}''')
new_positions = prefix + ','.join(sorted_positions) + '\n ' + suffix
# 添加applicablePositions保持相同的排序
applicable = []
for p in positions:
applicable.append(f'''
{{
"level": "{p['level']}",
"position": "{p['position']}"
}}''')
applicable_positions = ',\n "applicablePositions": [' + ','.join(applicable) + '\n ]'
return new_positions + applicable_positions
# 替换所有positions数组
text = re.sub(pattern, process_match, text)
return text
# 处理unit字段添加compoundUnits和verticalUnits
def fix_unit_fields(text):
# 查找所有unit字段
pattern = r'"unit"\s*:\s*"([^"]+)"'
def process_match(match):
unit_content = match.group(1)
result = f'"unit": "{unit_content}"'
# 拆分单元信息
if ' / ' in unit_content:
parts = unit_content.split(' / ')
compound = parts[0].strip()
vertical = parts[1].strip()
result += f',\n "compoundUnits": ["{compound}"],\n "verticalUnits": ["{vertical}"]'
else:
compound = unit_content.strip()
result += f',\n "compoundUnits": ["{compound}"],\n "verticalUnits": []'
return result
# 只处理getMockProjectDetail函数中的unit字段
detail_start = text.find('export const getMockProjectDetail')
if detail_start > 0:
# 找到函数结束位置
func_end = text.find('export const', detail_start + 1)
if func_end == -1:
func_end = len(text)
# 只在这个函数范围内替换
before = text[:detail_start]
func_content = text[detail_start:func_end]
after = text[func_end:]
# 检查是否已经有compoundUnits
if '"compoundUnits"' not in func_content:
func_content = re.sub(pattern, process_match, func_content)
text = before + func_content + after
return text
# 应用修复
new_content = fix_positions_field(content)
new_content = fix_unit_fields(new_content)
# 写入文件
with open(mock_file, 'w', encoding='utf-8') as f:
f.write(new_content)
# 验证语法
result = os.popen(f'node -c {mock_file} 2>&1').read()
if result:
print(f"❌ 语法错误:{result}")
# 恢复备份
with open(backup_file, 'r', encoding='utf-8') as f:
content = f.read()
with open(mock_file, 'w', encoding='utf-8') as f:
f.write(content)
print("已恢复备份")
else:
print("✓ 语法验证通过")
print("✓ 成功添加applicablePositions字段已排序")
print("✓ 成功添加compoundUnits和verticalUnits字段")
print("✓ 岗位已按照\"普通岗→技术骨干岗→储备干部岗\"排序")