Files
ALL-teach_sys/frontend/rebuild_homework_from_calendar.cjs

215 lines
5.6 KiB
JavaScript
Raw Permalink Normal View History

const fs = require('fs');
const path = require('path');
// 读取必要的文件
const calendarPath = path.join(__dirname, 'src/data/calendarCourses.json');
const posterMappingPath = path.join(__dirname, 'homework_poster_mapping.json');
const mockDataPath = path.join(__dirname, 'src/data/mockData.js');
const calendarData = JSON.parse(fs.readFileSync(calendarPath, 'utf-8'));
const posterMapping = JSON.parse(fs.readFileSync(posterMappingPath, 'utf-8'));
let mockDataContent = fs.readFileSync(mockDataPath, 'utf-8');
// 需要排除的单元名称
const excludedUnits = ['岗位体系认知', '产业认知课', '职业规划课'];
// 按单元组织课程
const compoundUnitMap = new Map();
const verticalUnitMap = new Map();
calendarData.forEach(day => {
const unitName = day['❌查询单元名称'] || '';
// 跳过排除的单元
if (excludedUnits.includes(unitName)) {
return;
}
// 复合技能课程
if (day['复合技能阶段'] && day['复合技能阶段'].trim()) {
const courseName = day['复合技能阶段'].trim();
// 跳过"单元小结"
if (courseName === '单元小结') {
return;
}
// 只处理有海报的课程
const imageUrl = posterMapping[courseName];
if (!imageUrl) {
return;
}
if (!compoundUnitMap.has(unitName)) {
compoundUnitMap.set(unitName, []);
}
const unit = compoundUnitMap.get(unitName);
if (!unit.some(c => c.name === courseName)) {
unit.push({
id: 0, // 稍后重新编号
name: courseName,
level: 'completed',
imageUrl: imageUrl
});
}
}
// 垂直方向课程
if (day['垂直方向阶段(方向二:商业活动策划)'] && day['垂直方向阶段(方向二:商业活动策划)'].trim()) {
const courseName = day['垂直方向阶段(方向二:商业活动策划)'].trim();
// 跳过"单元小结"
if (courseName === '单元小结') {
return;
}
// 只处理有海报的课程
const imageUrl = posterMapping[courseName];
if (!imageUrl) {
return;
}
if (!verticalUnitMap.has(unitName)) {
verticalUnitMap.set(unitName, []);
}
const unit = verticalUnitMap.get(unitName);
if (!unit.some(c => c.name === courseName)) {
unit.push({
id: 0,
name: courseName,
level: 'completed',
imageUrl: imageUrl
});
}
}
});
// 重新编号ID
let currentId = 1;
compoundUnitMap.forEach((courses) => {
courses.forEach(course => {
course.id = currentId++;
});
});
verticalUnitMap.forEach((courses) => {
courses.forEach(course => {
course.id = currentId++;
});
});
// 生成units结构
const compoundUnits = [];
compoundUnitMap.forEach((courses, unitName) => {
if (unitName && courses.length > 0) {
compoundUnits.push({
name: unitName,
courses: courses
});
}
});
const verticalUnits = [];
verticalUnitMap.forEach((courses, unitName) => {
if (unitName && courses.length > 0) {
// 特殊处理展会主题与品牌定位设置isShowCase
courses.forEach(course => {
if (course.name === '展会主题与品牌定位') {
course.isShowCase = true;
}
});
verticalUnits.push({
name: unitName,
courses: courses
});
}
});
console.log('===== 生成的homework结构 =====');
console.log(`复合能力课 - 单元数: ${compoundUnits.length}`);
compoundUnits.forEach(unit => {
console.log(` - ${unit.name}: ${unit.courses.length}个课程`);
});
console.log(`\n垂直能力课 - 单元数: ${verticalUnits.length}`);
verticalUnits.forEach(unit => {
console.log(` - ${unit.name}: ${unit.courses.length}个课程`);
});
console.log('\n总课程数:',
compoundUnits.reduce((sum, u) => sum + u.courses.length, 0) +
verticalUnits.reduce((sum, u) => sum + u.courses.length, 0)
);
// 生成新的homework数组JavaScript代码
const generateCourseString = (course) => {
let str = `{ id: ${course.id}, name: "${course.name}", level: "${course.level}"`;
if (course.imageUrl) {
str += `, imageUrl: "${course.imageUrl}"`;
}
if (course.isShowCase) {
str += `, isShowCase: true`;
}
str += ' }';
return str;
};
const generateUnitsString = (units) => {
return units.map(unit => ` {
name: "${unit.name}",
courses: [
${unit.courses.map(c => ' ' + generateCourseString(c)).join(',\n')}
]
}`).join(',\n');
};
// 生成list字段 - 所有课程的扁平化列表
const generateListString = (units) => {
const allCourses = [];
units.forEach(unit => {
allCourses.push(...unit.courses);
});
return allCourses.map(c => ' ' + generateCourseString(c)).join(',\n');
};
const compoundList = generateListString(compoundUnits);
const verticalList = generateListString(verticalUnits);
const newHomeworkCode = ` homework: [
{
name: "复合能力课",
id: 1,
units: [
${generateUnitsString(compoundUnits)}
],
list: [
${compoundList}
]
},
{
name: "垂直能力课",
id: 2,
units: [
${generateUnitsString(verticalUnits)}
],
list: [
${verticalList}
]
}
],`;
// 替换原来的homework数据
const homeworkPattern = /homework:\s*\[[\s\S]*?\],\s*\/\/ 1v1定制求职策略数据/;
if (homeworkPattern.test(mockDataContent)) {
mockDataContent = mockDataContent.replace(homeworkPattern, newHomeworkCode + '\n // 1v1定制求职策略数据');
fs.writeFileSync(mockDataPath, mockDataContent, 'utf-8');
console.log('\n✅ mockData.js已成功更新');
} else {
console.error('\n❌ 无法找到homework数据结构更新失败');
}