Files
online_sys/frontend_智能开发/updatePersonalProfile.cjs

137 lines
4.6 KiB
JavaScript
Raw Normal View History

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.topStudentsDashboard页面班级排名
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}`);
});