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

99 lines
3.9 KiB
Python
Raw Permalink Normal View History

#!/usr/bin/env python3
"""恢复班级排名数据为智能制造数据"""
import json
import re
from datetime import datetime
def load_manufacturing_data():
"""加载智能制造个人档案数据"""
with open('网页未导入数据/智能制造产业/智能制造个人档案.json', 'r', encoding='utf-8') as f:
return json.load(f)
def load_avatar_list():
"""加载头像列表"""
with open('网页未导入数据/头像列表.json', 'r', encoding='utf-8') as f:
avatars = json.load(f)
avatar_urls = []
for avatar in avatars[:20]:
url = avatar['file_url']
base_url = url.split('?')[0] if '?' in url else url
avatar_urls.append(base_url)
return avatar_urls
def transform_to_top_students(manufacturing_data, avatar_urls):
"""转换为topStudents格式"""
top_students = []
for idx, student in enumerate(manufacturing_data[:10]): # 取前10名
top_student = {
"rank": int(student["班级排名"]),
"studentId": student["学号"],
"studentName": student["学员名称"],
"name": student["学员名称"],
"avatar": avatar_urls[idx % len(avatar_urls)],
"score": int(student["学分"]),
"credits": int(student["学分"]),
"school": student["学校名称"],
"major": student["专业名称"],
"isMe": idx == 1 # 第2名(王强)是当前用户
}
top_students.append(top_student)
return top_students
def update_dashboard_statistics():
"""只更新mockData.js中的dashboardStatistics.ranking部分"""
# 加载数据
manufacturing_data = load_manufacturing_data()
avatar_urls = load_avatar_list()
# 读取现有文件
with open('src/data/mockData.js', 'r', encoding='utf-8') as f:
content = f.read()
# 备份
backup_time = datetime.now().strftime('%Y%m%d_%H%M%S')
with open(f'src/data/mockData.js.backup_{backup_time}_restore', 'w', encoding='utf-8') as f:
f.write(content)
# 生成新的topStudents数据
top_students = transform_to_top_students(manufacturing_data, avatar_urls)
# 转换为JavaScript格式
top_students_str = json.dumps(top_students, ensure_ascii=False, indent=6)
# 去掉属性名的引号
top_students_str = re.sub(r'"(\w+)":', r'\1:', top_students_str)
# 1. 替换dashboardStatistics.ranking.topStudents
# 使用更精确的模式匹配
pattern = r'(dashboardStatistics\s*=\s*{[^}]*?ranking:\s*{[^}]*?topStudents:\s*\[)[^\]]*\]'
def replace_dashboard_top_students(match):
return match.group(1) + '\n' + top_students_str + '\n]'
content = re.sub(pattern, replace_dashboard_top_students, content, flags=re.DOTALL)
# 2. 更新myRank为王强(第2名)的数据
current_student = manufacturing_data[1] # 第2名 王强
# 更新dashboardStatistics.ranking.myRank
pattern = r'(dashboardStatistics\s*=\s*{[^}]*?ranking:\s*{[^}]*?myRank:\s*{[^}]*?)rank:\s*\d+'
content = re.sub(pattern, rf'\1rank: {current_student["班级排名"]}', content, flags=re.DOTALL)
pattern = r'(dashboardStatistics\s*=\s*{[^}]*?ranking:\s*{[^}]*?myRank:\s*{[^}]*?)score:\s*\d+'
content = re.sub(pattern, rf'\1score: {current_student["学分"]}', content, flags=re.DOTALL)
# 写回文件
with open('src/data/mockData.js', 'w', encoding='utf-8') as f:
f.write(content)
print(f"✅ 已恢复 dashboardStatistics.ranking 为智能制造数据")
print(f" - topStudents: {len(top_students)} 条数据")
print(f" - 当前用户: {current_student['学员名称']} (第{current_student['班级排名']}名)")
print(f" - 备份文件: mockData.js.backup_{backup_time}_restore")
if __name__ == "__main__":
print("🚀 开始恢复班级排名数据为智能制造数据...")
update_dashboard_statistics()
print("🎉 恢复完成!")