83 lines
3.5 KiB
Python
83 lines
3.5 KiB
Python
|
|
#!/usr/bin/env python3
|
|||
|
|
# -*- coding: utf-8 -*-
|
|||
|
|
|
|||
|
|
import json
|
|||
|
|
|
|||
|
|
# 读取大健康个人档案数据
|
|||
|
|
with open('网页未导入数据/大健康产业/大健康个人档案.json', 'r', encoding='utf-8') as f:
|
|||
|
|
health_profiles = json.load(f)
|
|||
|
|
|
|||
|
|
# 读取头像列表
|
|||
|
|
with open('网页未导入数据/头像列表.json', 'r', encoding='utf-8') as f:
|
|||
|
|
avatar_list = json.load(f)
|
|||
|
|
|
|||
|
|
# 头像映射(根据学生名称)
|
|||
|
|
avatar_map = {
|
|||
|
|
"于语涵": "https://ddcz-1315997005.cos.ap-nanjing.myqcloud.com/static/avatar/douyin/f1dcfee97ade582e97c666ebae40563f.jpg",
|
|||
|
|
"陈沐谦": "https://ddcz-1315997005.cos.ap-nanjing.myqcloud.com/static/avatar/douyin/d96aef8e47c87f01ac15e6ca51643e38.jpg",
|
|||
|
|
"魏思涵": "https://ddcz-1315997005.cos.ap-nanjing.myqcloud.com/static/avatar/douyin/9c8e2aa5e1f0aad6c3e528f088c9e1f0.jpg",
|
|||
|
|
"沈思宁": "https://ddcz-1315997005.cos.ap-nanjing.myqcloud.com/static/avatar/douyin/c825e86e5c2e03f43c38ee1f37f9e925.jpg",
|
|||
|
|
"鲁嘉树": "https://ddcz-1315997005.cos.ap-nanjing.myqcloud.com/static/avatar/douyin/2b1e3f5beebf23bb0b949c38e2ea85e1.jpg",
|
|||
|
|
"奚沐辰": "https://ddcz-1315997005.cos.ap-nanjing.myqcloud.com/static/avatar/douyin/67c67c0c8a1b4f95cf03ffa5fe12e0f1.jpg",
|
|||
|
|
"何泽": "https://ddcz-1315997005.cos.ap-nanjing.myqcloud.com/static/avatar/douyin/152361c6c68a193660cdbdf9074c2cf3.jpg",
|
|||
|
|
"杜思妍": "https://ddcz-1315997005.cos.ap-nanjing.myqcloud.com/static/avatar/douyin/d1ac60e4c1bb21e0f93a479e8c19e5f0.jpg",
|
|||
|
|
"张予安": "https://ddcz-1315997005.cos.ap-nanjing.myqcloud.com/static/avatar/douyin/c3e7c3c0f1d3e4c9bde1f1e8e9c4f9e0.jpg",
|
|||
|
|
"马哲宇": "https://ddcz-1315997005.cos.ap-nanjing.myqcloud.com/static/avatar/douyin/e9f1c4e8e9c4f9e0f1e8e9c4c3e7c3c0.jpg"
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
# 构建班级排名数据
|
|||
|
|
rankings = []
|
|||
|
|
for profile in health_profiles:
|
|||
|
|
name = profile['学员名称'].rstrip('') # 去除特殊字符
|
|||
|
|
rankings.append({
|
|||
|
|
"rank": int(profile['班级排名']),
|
|||
|
|
"studentId": profile['学号'],
|
|||
|
|
"studentName": name,
|
|||
|
|
"name": name,
|
|||
|
|
"avatar": avatar_map.get(name, avatar_list[int(profile['班级排名']) - 1] if int(profile['班级排名']) <= len(avatar_list) else ""),
|
|||
|
|
"score": int(profile['学分']),
|
|||
|
|
"credits": int(profile['学分']),
|
|||
|
|
"school": profile['学校名称'],
|
|||
|
|
"major": profile['专业名称'],
|
|||
|
|
"isMe": name == "何泽" # 何泽是当前用户
|
|||
|
|
})
|
|||
|
|
|
|||
|
|
# 按排名排序
|
|||
|
|
rankings.sort(key=lambda x: x['rank'])
|
|||
|
|
|
|||
|
|
# 构建完整的ranking对象
|
|||
|
|
ranking_data = {
|
|||
|
|
"myRank": {
|
|||
|
|
"rank": 7, # 何泽排名第7
|
|||
|
|
"score": 94,
|
|||
|
|
"totalStudents": 10,
|
|||
|
|
"trend": "stable",
|
|||
|
|
"change": 0
|
|||
|
|
},
|
|||
|
|
"classInfo": {
|
|||
|
|
"className": "大健康班",
|
|||
|
|
"totalStudents": 10,
|
|||
|
|
"averageScore": 94.9 # (98+98+96+96+95+95+94+93+93+90)/10
|
|||
|
|
},
|
|||
|
|
"rankings": rankings
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
# 读取mockData.js文件
|
|||
|
|
with open('src/data/mockData.js', 'r', encoding='utf-8') as f:
|
|||
|
|
content = f.read()
|
|||
|
|
|
|||
|
|
# 查找并替换ranking部分(在profileOverview中)
|
|||
|
|
import re
|
|||
|
|
|
|||
|
|
# 找到profileOverview的ranking部分
|
|||
|
|
pattern = r'(mockData\.profileOverview = \{[\s\S]*?ranking: )\{[\s\S]*?\n \},\n( // |\s+\w+:)'
|
|||
|
|
replacement = r'\1' + json.dumps(ranking_data, ensure_ascii=False, indent=6).replace('\n', '\n ') + ',\n\\2'
|
|||
|
|
|
|||
|
|
content = re.sub(pattern, replacement, content)
|
|||
|
|
|
|||
|
|
# 写回文件
|
|||
|
|
with open('src/data/mockData.js', 'w', encoding='utf-8') as f:
|
|||
|
|
f.write(content)
|
|||
|
|
|
|||
|
|
print("✅ 成功更新班级排名数据为大健康产业数据")
|
|||
|
|
print(f"✅ 共更新 {len(rankings)} 个学生的排名信息")
|