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