- 包含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>
208 lines
7.4 KiB
JavaScript
208 lines
7.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 currentUser = financeProfileData.find(student => student["学员名称"] === "罗浩宇");
|
||
const currentUserAvatar = avatarList[16].url; // 为罗浩宇选择第17个头像
|
||
|
||
// 为其他学生分配头像
|
||
const studentAvatars = {};
|
||
financeProfileData.forEach((student, index) => {
|
||
// 确保每个学生都有不同的头像
|
||
studentAvatars[student["学员名称"]] = avatarList[index % avatarList.length].url;
|
||
});
|
||
|
||
// 创建班级排名数据
|
||
const classRankingData = financeProfileData.map((student, index) => {
|
||
return {
|
||
id: index + 1,
|
||
name: student["学员名称"],
|
||
studentName: student["学员名称"], // 添加studentName字段兼容性
|
||
score: parseInt(student["学分"]),
|
||
rank: parseInt(student["班级排名"]),
|
||
studentId: student["学号"],
|
||
school: student["学校名称"],
|
||
major: student["专业名称"],
|
||
mbti: student["MBTI"],
|
||
verticalDirection: student["垂直方向"],
|
||
avatar: studentAvatars[student["学员名称"]],
|
||
isCurrentUser: student["学员名称"] === "罗浩宇" // 标记当前用户
|
||
};
|
||
});
|
||
|
||
// 按排名排序
|
||
classRankingData.sort((a, b) => a.rank - b.rank);
|
||
|
||
// 读取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. 更新user对象(个人信息板块)
|
||
const userObjectStr = `user: {
|
||
name: "${currentUser["学员名称"]}",
|
||
avatar: "${currentUserAvatar}",
|
||
role: "学生",
|
||
studentId: "${currentUser["学号"]}",
|
||
school: "${currentUser["学校名称"]}",
|
||
major: "${currentUser["专业名称"]}",
|
||
credits: ${currentUser["学分"]},
|
||
classRank: ${currentUser["班级排名"]},
|
||
mbti: "${currentUser["MBTI"]}",
|
||
verticalDirection: "${currentUser["垂直方向"]}",
|
||
industry: "财经商贸"
|
||
}`;
|
||
|
||
// 替换user对象
|
||
mockDataContent = mockDataContent.replace(
|
||
/user:\s*\{[^}]*\}/s,
|
||
userObjectStr
|
||
);
|
||
|
||
// 2. 更新profile对象
|
||
const profileObjectStr = `profile: {
|
||
name: "${currentUser["学员名称"]}",
|
||
gender: "男",
|
||
studentId: "${currentUser["学号"]}",
|
||
avatar: "${currentUserAvatar}",
|
||
school: "${currentUser["学校名称"]}",
|
||
major: "${currentUser["专业名称"]}",
|
||
courses: ["复合能力培养", "财经商贸方向", "电商运营", "数字营销"],
|
||
className: "财经商贸",
|
||
studyPhase: "复合能力培养",
|
||
badges: {
|
||
credits: ${currentUser["学分"]},
|
||
classRank: ${currentUser["班级排名"]},
|
||
mbti: "${currentUser["MBTI"]}",
|
||
},`;
|
||
|
||
// 替换profile对象的开头部分
|
||
mockDataContent = mockDataContent.replace(
|
||
/profile:\s*\{[^}]*badges:\s*\{[^}]*\},/s,
|
||
profileObjectStr
|
||
);
|
||
|
||
// 3. 更新classRanking数组
|
||
const classRankingStr = `classRanking: ${JSON.stringify(classRankingData.slice(0, 10), null, 4).replace(/\n/g, '\n ')}`;
|
||
|
||
// 替换classRanking数组
|
||
mockDataContent = mockDataContent.replace(
|
||
/classRanking:\s*\[[^\]]*\]/s,
|
||
classRankingStr
|
||
);
|
||
|
||
// 4. 更新profileOverview对象
|
||
// 查找profileOverview的位置
|
||
const profileOverviewMatch = mockDataContent.match(/mockData\.profileOverview\s*=\s*\{/);
|
||
if (profileOverviewMatch) {
|
||
// 构建新的studentInfo对象
|
||
const studentInfoStr = ` // 学生基本信息
|
||
studentInfo: {
|
||
name: "${currentUser["学员名称"]}",
|
||
realName: "${currentUser["学员名称"]}",
|
||
studentId: "${currentUser["学号"]}",
|
||
studentNo: "${currentUser["学号"]}",
|
||
avatar: "${currentUserAvatar}",
|
||
school: "${currentUser["学校名称"]}",
|
||
major: "${currentUser["专业名称"]}",
|
||
className: "财经商贸班",
|
||
grade: "2023级",
|
||
studyPhase: "复合能力培养",
|
||
stageName: "${currentUser["垂直方向"]}",
|
||
mbti: "${currentUser["MBTI"]}",
|
||
mbtiType: "${currentUser["MBTI"]}",
|
||
enrollmentDate: "2023-09-01",
|
||
expectedGraduation: "2026-06-30",
|
||
credits: ${currentUser["学分"]},
|
||
gpa: 4.2,
|
||
classRank: ${currentUser["班级排名"]},
|
||
totalStudents: ${financeProfileData.length},
|
||
myRank: {
|
||
rank: ${currentUser["班级排名"]},
|
||
score: ${currentUser["学分"]},
|
||
},
|
||
},`;
|
||
|
||
// 替换studentInfo部分
|
||
mockDataContent = mockDataContent.replace(
|
||
/\/\/\s*学生基本信息\s*\n\s*studentInfo:\s*\{[^}]*myRank:\s*\{[^}]*\},[^}]*\},/s,
|
||
studentInfoStr
|
||
);
|
||
|
||
// 更新ranking对象中的topStudents
|
||
const topStudentsStr = ` topStudents: ${JSON.stringify(classRankingData.slice(0, 5).map(s => ({
|
||
...s,
|
||
studentName: s.name // 确保字段兼容性
|
||
})), null, 8).replace(/\n/g, '\n ')}`;
|
||
|
||
// 替换topStudents部分
|
||
mockDataContent = mockDataContent.replace(
|
||
/topStudents:\s*\[[^\]]*\]/s,
|
||
topStudentsStr
|
||
);
|
||
|
||
// 更新ranking.rankings数组
|
||
const rankingsStr = ` rankings: ${JSON.stringify(classRankingData.slice(0, 10).map(s => ({
|
||
...s,
|
||
studentName: s.name // 确保字段兼容性
|
||
})), null, 10).replace(/\n/g, '\n ')}`;
|
||
|
||
// 替换rankings部分
|
||
mockDataContent = mockDataContent.replace(
|
||
/rankings:\s*\[[^\]]*\](?=,?\s*\},\s*\/\/\s*个人评价)/s,
|
||
rankingsStr
|
||
);
|
||
}
|
||
|
||
// 5. 更新ClassRankModal组件的数据引用
|
||
const classRankModalPath = path.join(__dirname, 'src/components/ClassRankModal/index.jsx');
|
||
if (fs.existsSync(classRankModalPath)) {
|
||
let classRankModalContent = fs.readFileSync(classRankModalPath, 'utf-8');
|
||
|
||
// 备份ClassRankModal文件
|
||
const classRankModalBackup = path.join(__dirname, 'src/components/ClassRankModal', `index.jsx.backup_${new Date().toISOString().replace(/[:.]/g, '-')}`);
|
||
fs.copyFileSync(classRankModalPath, classRankModalBackup);
|
||
|
||
// 更新头像映射
|
||
const avatarMappingStr = classRankingData.slice(0, 10).reduce((acc, student) => {
|
||
acc[student.name] = student.avatar;
|
||
return acc;
|
||
}, {});
|
||
|
||
// 查找并替换头像映射部分(如果存在)
|
||
const avatarMappingPattern = /const\s+avatarMapping\s*=\s*\{[^}]*\}/s;
|
||
if (avatarMappingPattern.test(classRankModalContent)) {
|
||
classRankModalContent = classRankModalContent.replace(
|
||
avatarMappingPattern,
|
||
`const avatarMapping = ${JSON.stringify(avatarMappingStr, null, 4)}`
|
||
);
|
||
fs.writeFileSync(classRankModalPath, classRankModalContent, 'utf-8');
|
||
console.log('成功更新ClassRankModal组件头像映射');
|
||
}
|
||
}
|
||
|
||
// 写入更新后的mockData.js
|
||
fs.writeFileSync(mockDataPath, mockDataContent, 'utf-8');
|
||
|
||
console.log(`成功更新个人信息和班级排名数据`);
|
||
console.log(`- 当前用户:${currentUser["学员名称"]} (排名: ${currentUser["班级排名"]})`);
|
||
console.log(`- 班级总人数:${financeProfileData.length}`);
|
||
console.log(`- 前10名学生已更新到班级排名列表`); |