Files
online_sys/frontend_财经商贸/updatePersonalAndRankingData.js

208 lines
7.4 KiB
JavaScript
Raw Permalink Normal View History

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名学生已更新到班级排名列表`);