const fs = require('fs'); const path = require('path'); // 读取智能开发个人档案数据 const profileData = JSON.parse( fs.readFileSync('./网页未导入数据/智能开发产业/智能开发个人档案.json', 'utf-8') ); // 读取头像列表 const avatarList = JSON.parse( fs.readFileSync('./网页未导入数据/头像列表.json', 'utf-8') ); // 选择前10名学生 const top10Students = profileData.slice(0, 10); // 为每个学生分配头像 const studentsWithAvatars = top10Students.map((student, index) => { // 从头像列表中选择头像 const avatarIndex = index % avatarList.length; const avatarUrl = avatarList[avatarIndex].file_url; return { id: index + 1, rank: parseInt(student.班级排名), name: student.学员名称, studentId: student.学号, school: student.学校名称, major: student.专业名称, credits: parseInt(student.学分), score: parseInt(student.学分), // 分数等于学分 avatar: avatarUrl, mbti: student.MBTI, verticalDirection: student.垂直方向, // 标记袁嘉宇为当前用户 isCurrentUser: student.学员名称 === '袁嘉宇' }; }); // 找到袁嘉宇的数据 const yuanJiayu = studentsWithAvatars.find(s => s.name === '袁嘉宇'); if (!yuanJiayu) { console.error('未找到袁嘉宇的数据!'); process.exit(1); } console.log('找到袁嘉宇的数据:', yuanJiayu); // 读取当前的mockData.js文件 const mockDataPath = './src/data/mockData.js'; let mockDataContent = fs.readFileSync(mockDataPath, 'utf-8'); // 备份原文件 const backupPath = `${mockDataPath}.backup_${new Date().toISOString().replace(/[:.]/g, '-')}`; fs.writeFileSync(backupPath, mockDataContent); console.log(`已创建备份文件:${backupPath}`); // 生成新的班级排名数据 const topStudentsString = JSON.stringify(studentsWithAvatars, null, 4) .split('\n') .map(line => ' ' + line) .join('\n') .trim(); // 更新classRanking数组(主页班级排名) mockDataContent = mockDataContent.replace( /classRanking:\s*\[[\s\S]*?\](?=,\s*(?:learningProgress|profileOverview|personalProfile))/, `classRanking: [\n ${topStudentsString}\n ]` ); // 更新ranking.topStudents(Dashboard页面班级排名) mockDataContent = mockDataContent.replace( /topStudents:\s*\[[\s\S]*?\](?=\s*})/, `topStudents: [\n ${topStudentsString.split('\n').map(line => ' ' + line).join('\n')}\n ]` ); // 生成个人信息更新代码 const personalProfileUpdate = ` // 个人档案 - 袁嘉宇(智能开发产业) const personalProfile = { basicInfo: { name: "${yuanJiayu.name}", studentId: "${yuanJiayu.studentId}", school: "${yuanJiayu.school}", major: "${yuanJiayu.major}", class: "智能开发1班", credits: ${yuanJiayu.credits}, ranking: ${yuanJiayu.rank}, avatar: "${yuanJiayu.avatar}", mbti: "${yuanJiayu.mbti}", direction: "${yuanJiayu.verticalDirection}" }, classRanking: mockData.classRanking, // 使用相同的班级排名数据 learningRecords: mockData.learningRecords || [] }; mockData.personalProfile = personalProfile;`; // 查找并更新personalProfile定义 const personalProfileRegex = /\/\/\s*个人档案[\s\S]*?mockData\.personalProfile\s*=\s*personalProfile;/; if (personalProfileRegex.test(mockDataContent)) { mockDataContent = mockDataContent.replace(personalProfileRegex, personalProfileUpdate); } else { // 如果没有找到,在mockData定义之后添加 const mockDataDefIndex = mockDataContent.indexOf('const mockData = {'); if (mockDataDefIndex !== -1) { const insertIndex = mockDataContent.indexOf('};', mockDataDefIndex) + 2; mockDataContent = mockDataContent.slice(0, insertIndex) + '\n' + personalProfileUpdate + mockDataContent.slice(insertIndex); } } // 更新profileOverview中的ranking.rankings(个人档案页面的班级排名) mockDataContent = mockDataContent.replace( /profileOverview:\s*{[\s\S]*?ranking:\s*{[\s\S]*?rankings:\s*\[[\s\S]*?\][\s\S]*?}/, (match) => { return match.replace( /rankings:\s*\[[\s\S]*?\]/, `rankings: [\n ${topStudentsString.split('\n').map(line => ' ' + line).join('\n')}\n ]` ); } ); // 写回文件 fs.writeFileSync(mockDataPath, mockDataContent); console.log('✅ 个人档案数据更新完成!'); console.log('更新内容:'); console.log('- 个人信息:袁嘉宇(排名第5)'); console.log('- 班级排名:前10名学生'); console.log('- 所有相关数据已同步更新'); // 输出前3名学生信息作为验证 console.log('\n前3名学生:'); studentsWithAvatars.slice(0, 3).forEach(s => { console.log(`${s.rank}. ${s.name} - ${s.school} - ${s.credits}分`); });