Files
online_sys/frontend_智能开发/updateProjectDetailsComplete.cjs

201 lines
6.5 KiB
JavaScript
Raw Permalink Normal View History

const fs = require('fs');
// 读取智能开发项目案例数据
const projectData = JSON.parse(
fs.readFileSync('./网页未导入数据/智能开发产业/智能开发项目案例.json', 'utf-8')
);
console.log(`找到 ${projectData.length} 个智能开发项目案例`);
// 1. 创建单元映射数据
const projectUnitsMapping = {};
projectData.forEach(item => {
const projectName = item['案例名称'];
projectUnitsMapping[projectName] = {
compoundUnits: item['对应单元名称(复合能力课)'] ? [item['对应单元名称(复合能力课)']] : [],
verticalUnits: item['对应单元名称(垂直能力课)'] ? [item['对应单元名称(垂直能力课)']] : []
};
});
// 生成projectUnitsMapping.js文件内容
const mappingFileContent = `// 项目案例对应单元映射数据 - 智能开发
// 基于 网页未导入数据/智能开发产业/智能开发项目案例.json
export const projectUnitsMapping = ${JSON.stringify(projectUnitsMapping, null, 2)};
// 获取项目的复合能力课程
export const getCompoundUnits = (projectTitle) => {
if (!projectTitle) return [];
// 直接匹配
if (projectUnitsMapping[projectTitle]) {
return projectUnitsMapping[projectTitle].compoundUnits || [];
}
// 尝试去除后缀后匹配(如"详情"
const cleanTitle = projectTitle.replace(/详情$/, '');
if (projectUnitsMapping[cleanTitle]) {
return projectUnitsMapping[cleanTitle].compoundUnits || [];
}
return [];
};
// 获取项目的垂直能力课程
export const getVerticalUnits = (projectTitle) => {
if (!projectTitle) return [];
// 直接匹配
if (projectUnitsMapping[projectTitle]) {
return projectUnitsMapping[projectTitle].verticalUnits || [];
}
// 尝试去除后缀后匹配(如"详情"
const cleanTitle = projectTitle.replace(/详情$/, '');
if (projectUnitsMapping[cleanTitle]) {
return projectUnitsMapping[cleanTitle].verticalUnits || [];
}
return [];
};
// 获取项目的所有对应单元
export const getProjectUnits = (projectTitle) => {
const mapping = projectUnitsMapping[projectTitle];
if (!mapping) return [];
return [...mapping.compoundUnits, ...mapping.verticalUnits];
};`;
// 写入projectUnitsMapping.js
fs.writeFileSync('./src/data/projectUnitsMapping.js', mappingFileContent, 'utf-8');
// 2. 更新项目数据,添加适用岗位的等级信息
const projects = projectData.map((item, index) => {
// 解析适用岗位并添加等级
const positionsStr = item['适用岗位'] || '';
const positionsList = positionsStr ? positionsStr.split(',').map(p => p.trim()) : [];
// 为岗位分配等级(根据岗位名称判断)
const positions = positionsList.map(pos => {
let level = '技术骨干岗'; // 默认级别
// 根据岗位名称判断等级
if (pos.includes('助理') || pos.includes('实习') || pos.includes('初级')) {
level = '普通岗';
} else if (pos.includes('高级') || pos.includes('专家') || pos.includes('经理') || pos.includes('总监')) {
level = '储备干部岗';
}
return {
level: level,
position: pos
};
});
// 确定单元名称
const unit = item['对应单元名称(垂直能力课)'] || item['对应单元名称(复合能力课)'] || '';
// 提取项目详情内容的各个部分
const projectDetail = item['项目案例内容'] || '';
let overview = '';
let process = '';
let keyPoints = '';
if (projectDetail) {
// 尝试提取项目概述
const overviewMatch = projectDetail.match(/项目概述[\s\S]*?(?=\n#|$)/);
if (overviewMatch) {
overview = overviewMatch[0].replace(/^.*项目概述\s*/, '').replace(/^\n+/, '').trim();
// 只取前500个字符作为概述
if (overview.length > 500) {
overview = overview.substring(0, 497) + '...';
}
}
// 尝试提取项目流程
const processMatch = projectDetail.match(/项目整体流程介绍[\s\S]*?(?=\n#.*项目案例关键技术点|$)/);
if (processMatch) {
process = processMatch[0].replace(/^.*项目整体流程介绍\s*/, '').trim();
}
// 尝试提取关键技术点
const keyPointsMatch = projectDetail.match(/项目案例关键技术点[\s\S]*$/);
if (keyPointsMatch) {
keyPoints = keyPointsMatch[0].replace(/^.*项目案例关键技术点\s*/, '').trim();
}
}
// 返回与原有格式完全一致的数据结构
return {
id: index + 1,
name: item['案例名称'],
positions: positions,
unit: unit,
overview: overview || `${item['案例名称']}是一个${item['所属垂直方向'] || '智能开发'}方向的项目,旨在提升相关技术能力和实践经验。`,
process: process || '',
keyPoints: keyPoints || ''
};
});
// 3. 更新projectLibraryMock.js文件
const mockFilePath = './src/mocks/projectLibraryMock.js';
let mockFileContent = fs.readFileSync(mockFilePath, 'utf-8');
// 只需要确保getMockProjectDetail使用正确的数据
// 检查getMockProjectDetail函数是否返回正确的详情数据
const detailFunctionPattern = /export const getMockProjectDetail = \(id\) => \{[\s\S]*?\n\};/;
const detailFunctionMatch = mockFileContent.match(detailFunctionPattern);
if (detailFunctionMatch) {
// 构建新的getMockProjectDetail函数
const newDetailFunction = `export const getMockProjectDetail = (id) => {
// 直接根据ID返回对应项目的详情
const projects = ${JSON.stringify(projects, null, 2)};
const project = projects.find(p => p.id === parseInt(id));
if (!project) {
return {
code: 404,
msg: "项目不存在",
data: null
};
}
return {
code: 0,
msg: "success",
data: {
...project,
title: project.name,
applicablePositions: project.positions || [],
correspondingUnits: project.unit ? [project.unit] : []
}
};
};`;
// 替换函数
mockFileContent = mockFileContent.replace(detailFunctionMatch[0], newDetailFunction);
// 写入文件
fs.writeFileSync(mockFilePath, mockFileContent, 'utf-8');
console.log('✅ 项目详情数据更新成功!');
} else {
console.error('❌ 未找到getMockProjectDetail函数');
}
console.log('\n✅ 所有更新完成!');
console.log('- 单元映射数据已更新');
console.log('- 岗位等级已添加');
console.log('- 项目详情函数已更新');
// 输出统计
console.log('\n前3个项目示例');
projects.slice(0, 3).forEach((p, i) => {
console.log(` ${i+1}. ${p.name}`);
console.log(` 单元: ${p.unit}`);
console.log(` 岗位: ${p.positions.map(pos => `${pos.position}(${pos.level})`).join(', ')}`);
});