更新12个教务系统并优化项目大小

主要更新:
- 更新所有12个产业的教务系统数据和功能
- 删除所有 node_modules 文件夹(节省3.7GB)
- 删除所有 .yoyo 缓存文件夹(节省1.2GB)
- 删除所有 dist 构建文件(节省55MB)

项目优化:
- 项目大小从 8.1GB 减少到 3.2GB(节省60%空间)
- 保留完整的源代码和配置文件
- .gitignore 已配置,防止再次提交大文件

启动脚本:
- start-industry.sh/bat/ps1 脚本会自动检测并安装依赖
- 首次启动时自动运行 npm install
- 支持单个或批量启动产业系统

🤖 Generated with Claude Code

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
KQL
2025-10-17 14:36:25 +08:00
parent 60921dbfb9
commit 38350dca36
792 changed files with 470498 additions and 11589 deletions

View File

@@ -0,0 +1,84 @@
const fs = require('fs');
// 读取数据
const companyJobsNewData = JSON.parse(fs.readFileSync('./src/data/companyJobsNew.json', 'utf8'));
const companyImagesData = JSON.parse(fs.readFileSync('./网页未导入数据/智能制造产业/智能制造_内推岗位企业图片.json', 'utf8'));
const interviewStatusData = JSON.parse(fs.readFileSync('./src/data/interviewStatus.json', 'utf8'));
console.log("=== 数据转换测试 ===\n");
// 创建图片映射复制mockData.js中的逻辑
const companyImagesMap = {};
companyImagesData.forEach(item => {
const positionName = item["内推岗位名称"];
const imageLinks = item["BOSS照片链接"];
if (positionName && imageLinks) {
companyImagesMap[positionName] = imageLinks.split(',').map(url => url.trim());
}
});
console.log("图片映射创建完成,共", Object.keys(companyImagesMap).length, "个岗位\n");
// 获取面试状态中的岗位
const interviewedPositions = interviewStatusData.map(status => status["查询岗位名称"]);
console.log("面试状态岗位数:", interviewedPositions.length);
console.log("面试状态岗位:", interviewedPositions.join(", "));
// 模拟transformCompanyJobs函数
const today = new Date();
today.setHours(0, 0, 0, 0);
const transformedJobs = companyJobsNewData
.filter(job => !interviewedPositions.includes(job["内推岗位名称"]))
.map((job, index) => {
const positionName = job["内推岗位名称"];
const companyImages = companyImagesMap[positionName] || [];
return {
id: index + 1,
position: positionName,
hasImages: companyImages.length > 0,
imageCount: companyImages.length,
details: {
companyImages: companyImages
}
};
});
console.log("\n=== 转换后的岗位数据 ===");
console.log("过滤后岗位总数:", transformedJobs.length);
console.log("有图片的岗位数:", transformedJobs.filter(j => j.hasImages).length);
console.log("\n=== 前10个转换后的岗位 ===");
transformedJobs.slice(0, 10).forEach((job, idx) => {
const mark = job.hasImages ? "✅" : "❌";
console.log(mark, (idx+1) + ".", job.position,
job.hasImages ? `(${job.imageCount}张)` : "(无图片)");
});
console.log("\n=== 有图片的岗位详细信息 ===");
const jobsWithImages = transformedJobs.filter(j => j.hasImages);
jobsWithImages.forEach((job, idx) => {
console.log(`${idx+1}. ${job.position}: ${job.imageCount}张图片`);
if (job.details.companyImages.length > 0) {
console.log(` 第一张: ${job.details.companyImages[0].substring(0, 80)}...`);
}
});
console.log("\n=== 被过滤掉的面试状态岗位中有图片的 ===");
const filteredJobsWithImages = companyJobsNewData
.filter(job => interviewedPositions.includes(job["内推岗位名称"]))
.filter(job => companyImagesMap[job["内推岗位名称"]])
.map(job => ({
position: job["内推岗位名称"],
imageCount: companyImagesMap[job["内推岗位名称"]].length
}));
if (filteredJobsWithImages.length > 0) {
console.log("注意:以下岗位有图片但因为在面试状态中被过滤:");
filteredJobsWithImages.forEach((job, idx) => {
console.log(` ${idx+1}. ${job.position} (${job.imageCount}张图片)`);
});
} else {
console.log("无");
}