const fs = require('fs'); // 读取智能开发项目案例数据 const projectData = JSON.parse( fs.readFileSync('./网页未导入数据/智能开发产业/智能开发项目案例.json', 'utf-8') ); console.log(`找到 ${projectData.length} 个智能开发项目案例`); // 转换为项目库页面需要的格式 - 保持原有的数据结构 const projects = projectData.map((item, index) => { // 解析适用岗位 const positionsStr = item['适用岗位'] || ''; const positionsList = positionsStr ? positionsStr.split(',').map(p => p.trim()) : []; // 将岗位转换为原有格式(带level的对象数组) const positions = positionsList.map(pos => ({ level: "技术骨干岗", // 默认级别 position: pos })); // 确定单元名称(优先使用垂直能力课,其次复合能力课) const unit = item['对应单元名称(垂直能力课)'] || item['对应单元名称(复合能力课)'] || ''; // 确定项目类别和方向 const direction = 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*/, '').trim(); } // 尝试提取项目流程 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['案例名称']}的项目概述`, process: process || '', keyPoints: keyPoints || '' }; }); // 读取现有的projectLibraryMock.js文件 const mockFilePath = './src/mocks/projectLibraryMock.js'; let mockFileContent = fs.readFileSync(mockFilePath, 'utf-8'); // 找到projects数组的位置并替换 const projectsStr = JSON.stringify(projects, null, 2); // 使用正则表达式替换projects数组 const startPattern = /const projects = \[/; const startMatch = mockFileContent.match(startPattern); if (startMatch) { const startIndex = startMatch.index; // 找到对应的结束位置 let bracketCount = 0; let inString = false; let escapeNext = false; let endIndex = -1; for (let i = startIndex + startMatch[0].length - 1; i < mockFileContent.length; i++) { const char = mockFileContent[i]; if (escapeNext) { escapeNext = false; continue; } if (char === '\\') { escapeNext = true; continue; } if (char === '"' && !inString) { inString = true; } else if (char === '"' && inString) { inString = false; } if (!inString) { if (char === '[') bracketCount++; if (char === ']') { bracketCount--; if (bracketCount === 0) { endIndex = i + 1; break; } } } } if (endIndex > 0) { // 构建新的projects部分 const newProjectsSection = `const projects = ${projectsStr}`; // 替换内容 mockFileContent = mockFileContent.substring(0, startIndex) + newProjectsSection + mockFileContent.substring(endIndex); // 写入文件 fs.writeFileSync(mockFilePath, mockFileContent, 'utf-8'); console.log('✅ 项目库数据替换成功!'); console.log(`- 共更新 ${projects.length} 个项目`); // 统计信息 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.length}`); }); } else { console.error('❌ 未找到projects数组结束位置'); } } else { console.error('❌ 未找到projects数组位置,请检查文件格式'); }