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(', ')}`); });