主要内容: - 包含12个产业的完整教务系统前端代码 - 智能启动脚本 (start-industry.sh) - 可视化产业导航页面 (index.html) - 项目文档 (README.md) 优化内容: - 删除所有node_modules和.yoyo文件夹,从7.5GB减少到2.7GB - 添加.gitignore文件避免上传不必要的文件 - 自动依赖管理和智能启动系统 产业列表: 1. 文旅产业 (5150) 2. 智能制造 (5151) 3. 智能开发 (5152) 4. 财经商贸 (5153) 5. 视觉设计 (5154) 6. 交通物流 (5155) 7. 大健康 (5156) 8. 土木水利 (5157) 9. 食品产业 (5158) 10. 化工产业 (5159) 11. 能源产业 (5160) 12. 环保产业 (5161) 🤖 Generated with Claude Code Co-Authored-By: Claude <noreply@anthropic.com>
179 lines
6.0 KiB
JavaScript
179 lines
6.0 KiB
JavaScript
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}`);
|
||
}); |