Files
online_sys/frontend_智能开发/convertCalendarData.cjs
KQL a7242f0c69 Initial commit: 教务系统在线平台
- 包含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>
2025-12-12 18:16:55 +08:00

179 lines
6.0 KiB
JavaScript
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

const fs = require('fs');
const path = require('path');
// 读取智能开发课程日历数据
const calendarData = JSON.parse(
fs.readFileSync('./网页未导入数据/智能开发产业/智能开发课程日历.json', 'utf-8')
);
// 读取智能开发单元背景数据
const unitBackgroundData = JSON.parse(
fs.readFileSync('./网页未导入数据/智能开发产业/智能开发单元背景.json', 'utf-8')
);
// 处理日历数据,转换为系统需要的格式
const allCalendarEvents = [];
const unitPosters = {};
// 从单元背景数据中提取海报URL
unitBackgroundData.forEach(unit => {
unitPosters[unit['单元名称']] = unit['单元海报_url'] || '';
});
// 处理日历数据
let eventId = 1;
calendarData.forEach((item, index) => {
// 将日期格式从 YYYY/M/D 转换为 YYYY-MM-DD
const dateParts = item['日期'].split('/');
const year = dateParts[0];
const month = dateParts[1].padStart(2, '0');
const day = dateParts[2].padStart(2, '0');
const formattedDate = `${year}-${month}-${day}`;
// 处理时间格式 (20:00~21:00 转换为标准格式)
const timeStr = item['上课时间'] || '19:30-21:30';
let startTime = '19:30';
let endTime = '21:30';
if (timeStr.includes('~')) {
const timeParts = timeStr.split('~');
startTime = timeParts[0].trim();
endTime = timeParts[1].trim();
} else if (timeStr.includes('-')) {
const timeParts = timeStr.split('-');
startTime = timeParts[0].trim();
endTime = timeParts[1].trim();
}
// 处理个人课程
if (item['个人课程表'] && item['个人课程表'].trim()) {
const courseType = item['课程阶段(个人课程)'];
let eventType = 'class'; // 默认类型
// 根据课程阶段判断类型
if (courseType && courseType.includes('复合')) {
eventType = 'compound-skill';
} else if (courseType && courseType.includes('垂直')) {
eventType = 'vertical-skill';
}
allCalendarEvents.push({
id: `event-${eventId++}`,
title: item['个人课程表'],
startTime: `${formattedDate} ${startTime}`,
endTime: `${formattedDate} ${endTime}`,
type: eventType,
unit: item['所属单元(个人课程)'] || '未分类',
teacher: item['导师姓名查询'] || '待定',
location: item['上课地点'] || '线上',
status: item['课程状态'] || '待开课',
description: `${item['个人课程表']}课程`,
courseStage: courseType || '复合课阶段'
});
}
// 处理公共课
if (item['公共课'] && item['公共课'].trim()) {
allCalendarEvents.push({
id: `event-${eventId++}`,
title: item['公共课'],
startTime: `${formattedDate} ${startTime}`,
endTime: `${formattedDate} ${endTime}`,
type: 'public-course',
unit: item['所属单元(公共课)'] || '公共课',
teacher: item['导师姓名查询'] || '待定',
location: item['上课地点'] || '线上',
status: item['课程状态'] || '待开课',
description: `${item['公共课']}课程`,
courseStage: item['课程阶段(公共课)'] || '公共课'
});
}
// 处理企业高管公开课
if (item['企业高管公开课'] && item['企业高管公开课'].trim()) {
allCalendarEvents.push({
id: `event-${eventId++}`,
title: item['企业高管公开课'],
startTime: `${formattedDate} 19:30`,
endTime: `${formattedDate} 21:00`,
type: 'public-course',
unit: '企业高管公开课',
teacher: '企业高管',
location: '线上',
status: item['课程状态'] || '待开课',
description: `${item['企业高管公开课']}`,
courseStage: '企业高管公开课'
});
}
// 处理1V1规划
if (item['1V1 规划阶段'] && item['1V1 规划阶段'].trim()) {
allCalendarEvents.push({
id: `event-${eventId++}`,
title: item['1V1 规划阶段'],
startTime: `${formattedDate} 14:00`,
endTime: `${formattedDate} 15:00`,
type: 'one-on-one',
unit: '1V1规划',
teacher: '职业规划师',
location: '线上',
status: '待开课',
description: `${item['1V1 规划阶段']}`,
courseStage: '1V1规划'
});
}
// 处理模拟面试
if (item['模拟面试实战练习阶段'] && item['模拟面试实战练习阶段'].trim()) {
allCalendarEvents.push({
id: `event-${eventId++}`,
title: item['模拟面试实战练习阶段'],
startTime: `${formattedDate} 15:00`,
endTime: `${formattedDate} 16:30`,
type: 'interview',
unit: '模拟面试',
teacher: '面试官',
location: '线上',
status: '待开课',
description: `${item['模拟面试实战练习阶段']}`,
courseStage: '模拟面试'
});
}
});
// 创建courseLiveDataImport.js文件内容
const courseLiveDataImportContent = `// 智能开发课程数据
import calendarData from "@/data/智能开发课程日历.json";
import unitBackgroundData from "@/data/智能开发单元背景.json";
// 处理日历数据
const allCalendarEvents = ${JSON.stringify(allCalendarEvents, null, 2)};
// 单元海报数据
const unitPosters = ${JSON.stringify(unitPosters, null, 2)};
export { allCalendarEvents, unitPosters };`;
// 写入转换后的数据
fs.writeFileSync('./src/data/courseLiveDataImport.js', courseLiveDataImportContent, 'utf-8');
// 复制原始数据文件到src/data目录
fs.copyFileSync(
'./网页未导入数据/智能开发产业/智能开发课程日历.json',
'./src/data/智能开发课程日历.json'
);
fs.copyFileSync(
'./网页未导入数据/智能开发产业/智能开发单元背景.json',
'./src/data/智能开发单元背景.json'
);
console.log('✅ 日历数据转换完成!');
console.log(`- 共生成 ${allCalendarEvents.length} 个日历事件`);
console.log(`- 包含 ${Object.keys(unitPosters).length} 个单元海报`);
// 输出部分示例数据
console.log('\n前5个日历事件示例');
allCalendarEvents.slice(0, 5).forEach(event => {
console.log(` - ${event.startTime} | ${event.title} | ${event.type} | ${event.unit}`);
});