const fs = require('fs'); // 读取智能开发岗位简历数据,获取正确的岗位等级标签 const jobsData = JSON.parse( fs.readFileSync('./网页未导入数据/智能开发产业/智能开发岗位简历.json', 'utf-8') ); // 构建岗位等级映射表 const jobLevelMap = {}; jobsData.forEach(job => { const jobName = job['岗位名称']; const level = job['岗位等级标签']; if (jobName && level) { jobLevelMap[jobName] = level; } }); console.log('岗位等级映射表:'); console.log(jobLevelMap); // 读取智能开发项目案例数据 const projectData = JSON.parse( fs.readFileSync('./网页未导入数据/智能开发产业/智能开发项目案例.json', 'utf-8') ); // 重新构建项目数据,使用正确的岗位等级标签 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 = jobLevelMap[pos]; // 如果没找到,尝试模糊匹配 if (!level) { // 查找包含该岗位名称的映射 for (const [key, value] of Object.entries(jobLevelMap)) { if (key.includes(pos) || pos.includes(key)) { level = value; break; } } } // 如果还是没找到,使用默认值 if (!level) { // 基于关键词判断 if (pos.includes('助理') || pos.includes('实习')) { level = '普通岗'; } else if (pos.includes('高级') || pos.includes('专家') || pos.includes('总监') || pos.includes('经理')) { level = '储备干部岗'; } else { level = '技术骨干岗'; } console.log(`⚠️ 岗位"${pos}"未找到精确匹配,使用默认等级:${level}`); } return { level: level, position: pos }; }); // 提取项目详情 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(); overview = overview.replace(/^#\s*/gm, '').replace(/\*\*/g, '').replace(/\n+/g, ' '); 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(); } } if (!overview) { overview = `${item['案例名称']}是一个${item['所属垂直方向'] || '智能开发'}方向的项目,旨在提升相关技术能力和实践经验。`; } return { id: index + 1, name: item['案例名称'], positions: positions, // 带等级的岗位数组 positionsList: positionsList, // 岗位名称列表 unit: item['对应单元名称(垂直能力课)'] || item['对应单元名称(复合能力课)'] || '', direction: item['所属垂直方向'] || '智能开发', overview: overview, process: process, keyPoints: keyPoints, compoundUnit: item['对应单元名称(复合能力课)'] || '', verticalUnit: item['对应单元名称(垂直能力课)'] || '' }; }); // 更新projectLibraryMock.js const mockPath = './src/mocks/projectLibraryMock.js'; let mockContent = fs.readFileSync(mockPath, 'utf-8'); // 更新getMockProjectDetail函数,确保返回正确的岗位等级 const newGetMockProjectDetail = ` export const getMockProjectDetail = (id) => { // 智能开发项目详细数据(包含正确的岗位等级标签) const projects = ${JSON.stringify(projects, null, 2)}; const project = projects.find(p => p.id === parseInt(id)); if (!project) { return { success: false, code: 404, message: "项目不存在", data: null }; } // 构造返回数据 return { success: true, code: 0, message: "success", data: { id: project.id, title: project.name, category: project.direction, description: project.overview, overview: project.overview, applicablePositions: project.positions || [], // 使用带等级的岗位数组 correspondingUnits: project.unit ? [project.unit] : [], process: project.process || "", keyPoints: project.keyPoints || "", attachments: [] } }; };`; // 替换getMockProjectDetail函数 const detailFuncPattern = /export const getMockProjectDetail[\s\S]*?\n\};/; const detailFuncMatch = mockContent.match(detailFuncPattern); if (detailFuncMatch) { mockContent = mockContent.replace(detailFuncMatch[0], newGetMockProjectDetail); } else { mockContent += '\n' + newGetMockProjectDetail; } // 写入文件 fs.writeFileSync(mockPath, mockContent, 'utf-8'); console.log('\n✅ 岗位等级标签已修正!'); // 输出前5个项目的岗位等级信息 console.log('\n前5个项目的岗位等级:'); projects.slice(0, 5).forEach((p, i) => { console.log(`\n${i + 1}. ${p.name}`); p.positions.forEach(pos => { console.log(` - ${pos.position}: ${pos.level}`); }); });