- 包含4个产业方向的前端项目:智能开发、智能制造、大健康、财经商贸 - 已清理node_modules、.yoyo等大文件,项目大小从2.6GB优化至631MB - 配置完善的.gitignore文件 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
141 lines
4.4 KiB
JavaScript
141 lines
4.4 KiB
JavaScript
import fs from 'fs';
|
||
import path from 'path';
|
||
import { fileURLToPath } from 'url';
|
||
|
||
const __filename = fileURLToPath(import.meta.url);
|
||
const __dirname = path.dirname(__filename);
|
||
|
||
// 读取财经商贸个人档案数据
|
||
const financeProfileData = JSON.parse(
|
||
fs.readFileSync(path.join(__dirname, '网页未导入数据/财经商贸产业/财经商贸个人档案.json'), 'utf-8')
|
||
);
|
||
|
||
// 读取头像列表
|
||
const avatarList = JSON.parse(
|
||
fs.readFileSync(path.join(__dirname, '网页未导入数据/头像列表.json'), 'utf-8')
|
||
);
|
||
|
||
// 按学分排序,重新分配排名
|
||
const sortedStudents = [...financeProfileData].sort((a, b) => {
|
||
return parseInt(b["学分"]) - parseInt(a["学分"]);
|
||
});
|
||
|
||
// 重新分配正确的排名
|
||
sortedStudents.forEach((student, index) => {
|
||
student.correctRank = index + 1;
|
||
});
|
||
|
||
// 为学生分配头像
|
||
const studentAvatars = {};
|
||
sortedStudents.forEach((student, index) => {
|
||
studentAvatars[student["学员名称"]] = avatarList[index % avatarList.length].url;
|
||
});
|
||
|
||
// 找到罗浩宇
|
||
const luoHaoyu = sortedStudents.find(s => s["学员名称"] === "罗浩宇");
|
||
const luoHaoyuRank = luoHaoyu ? luoHaoyu.correctRank : 6;
|
||
|
||
// 创建完整的班级排名数据
|
||
const fullClassRanking = sortedStudents.map((student) => {
|
||
return {
|
||
id: student.correctRank,
|
||
name: student["学员名称"],
|
||
studentName: student["学员名称"], // 兼容性字段
|
||
score: parseInt(student["学分"]),
|
||
rank: student.correctRank,
|
||
studentId: student["学号"],
|
||
school: student["学校名称"],
|
||
major: student["专业名称"],
|
||
mbti: student["MBTI"],
|
||
verticalDirection: student["垂直方向"],
|
||
avatar: studentAvatars[student["学员名称"]],
|
||
isCurrentUser: student["学员名称"] === "罗浩宇"
|
||
};
|
||
});
|
||
|
||
// 读取mockData.js文件
|
||
const mockDataPath = path.join(__dirname, 'src/data/mockData.js');
|
||
let mockDataContent = fs.readFileSync(mockDataPath, 'utf-8');
|
||
|
||
// 备份原文件
|
||
const backupPath = path.join(__dirname, 'src/data', `mockData.js.backup_${new Date().toISOString().replace(/[:.]/g, '-')}`);
|
||
fs.copyFileSync(mockDataPath, backupPath);
|
||
console.log(`备份已创建: ${backupPath}`);
|
||
|
||
// 1. 更新ranking.topStudents(前10名用于Dashboard)
|
||
const topStudentsStr = ` topStudents: ${JSON.stringify(fullClassRanking.slice(0, 10), null, 8).replace(/\n/g, '\n ')}`;
|
||
|
||
// 替换topStudents
|
||
mockDataContent = mockDataContent.replace(
|
||
/topStudents:\s*\[[^\]]*\](?=,[\s\n]*[}])/s,
|
||
topStudentsStr
|
||
);
|
||
|
||
// 2. 更新classRanking数组(前10名)
|
||
const classRankingStr = ` classRanking: ${JSON.stringify(fullClassRanking.slice(0, 10), null, 4).replace(/\n/g, '\n ')}`;
|
||
|
||
// 替换classRanking数组
|
||
mockDataContent = mockDataContent.replace(
|
||
/classRanking:\s*\[[^\]]*\]/s,
|
||
classRankingStr
|
||
);
|
||
|
||
// 3. 更新ranking.myRank
|
||
const myRankStr = ` myRank: {
|
||
rank: ${luoHaoyuRank},
|
||
totalStudents: ${sortedStudents.length},
|
||
trend: "stable",
|
||
change: 0,
|
||
}`;
|
||
|
||
// 替换myRank
|
||
mockDataContent = mockDataContent.replace(
|
||
/myRank:\s*\{[^}]*\}/g,
|
||
myRankStr
|
||
);
|
||
|
||
// 4. 更新user对象的classRank
|
||
mockDataContent = mockDataContent.replace(
|
||
/classRank:\s*\d+/g,
|
||
`classRank: ${luoHaoyuRank}`
|
||
);
|
||
|
||
// 5. 更新profileOverview中的相关字段
|
||
if (luoHaoyu) {
|
||
// 更新classRank
|
||
mockDataContent = mockDataContent.replace(
|
||
/classRank:\s*\d+(?=,[\s\n]*totalStudents)/g,
|
||
`classRank: ${luoHaoyuRank}`
|
||
);
|
||
|
||
// 更新myRank对象
|
||
const profileMyRankStr = ` myRank: {
|
||
rank: ${luoHaoyuRank},
|
||
score: ${luoHaoyu["学分"]},
|
||
}`;
|
||
|
||
mockDataContent = mockDataContent.replace(
|
||
/myRank:\s*\{[^}]*rank:[^}]*\}/g,
|
||
profileMyRankStr
|
||
);
|
||
}
|
||
|
||
// 6. 更新profileOverview.ranking.rankings(前10名)
|
||
const rankingsStr = ` rankings: ${JSON.stringify(fullClassRanking.slice(0, 10), null, 10).replace(/\n/g, '\n ')}`;
|
||
|
||
// 替换rankings数组
|
||
mockDataContent = mockDataContent.replace(
|
||
/rankings:\s*\[[^\]]*\](?=,?\s*\},\s*\/\/\s*个人评价)/s,
|
||
rankingsStr
|
||
);
|
||
|
||
// 写入更新后的文件
|
||
fs.writeFileSync(mockDataPath, mockDataContent, 'utf-8');
|
||
|
||
console.log(`\n成功修复班级排名数据:`);
|
||
console.log(`- 罗浩宇排名:第${luoHaoyuRank}名(学分:${luoHaoyu?.["学分"]})`);
|
||
console.log(`- 班级总人数:${sortedStudents.length}`);
|
||
console.log('\n前5名学生:');
|
||
fullClassRanking.slice(0, 5).forEach(s => {
|
||
console.log(` ${s.rank}. ${s.name} - ${s.score}分`);
|
||
}); |