#!/usr/bin/env node const fs = require('fs'); const path = require('path'); // Load visual design data const visualDesignData = JSON.parse( fs.readFileSync('网页未导入数据/视觉设计产业/视觉设计岗位简历.json', 'utf-8') ); // Create backup const timestamp = new Date().toISOString().replace(/[:.]/g, '-').slice(0, -5); const backupPath = `src/mocks/resumeInterviewMock.js.backup_${timestamp}`; const mockContent = fs.readFileSync('src/mocks/resumeInterviewMock.js', 'utf-8'); fs.writeFileSync(backupPath, mockContent); console.log(`✓ Backup created: ${backupPath}`); // Position mapping const industryPositionMap = { 'UI设计': 'UI设计师', '包装设计': '包装设计师', '插画设计': '插画师', '灯光': '影视灯光', '动画设计': '动画师', '后期特效': '特效设计师', '剪辑': '剪辑师', '品牌设计': '品牌视觉内容策划', '平面设计': '平面设计师', '三维设计': 'CG总监助理', '摄影/摄像': '摄影师', '室内设计': '室内设计师', '调色': '调色师', '新媒体运营': '新媒体运营专员', '音频处理': '录音师', '影视节目策划': '文案策划', '直播': '直播专员' }; // Extract questions from content function extractQuestions(content, industryName) { const questions = []; const pattern = /(\d+)\.\s*问题[::]?\s*(.*?)(?:\n\s*)?(?:参考回答[::]?)(.*?)(?=\d+\.\s*问题|$)/gs; let match; let count = 0; while ((match = pattern.exec(content)) && count < 5) { count++; const questionText = match[2].trim(); const answerText = match[3].trim(); questions.push({ id: `q1_${count}`, question: questionText, answer: answerText }); } if (questions.length > 0) { return [{ id: "group_q1", question: `# ${industryName}面试题`, subQuestions: questions }]; } return []; } let updatedContent = mockContent; let successCount = 0; // Process each industry for (const [industryName, positionName] of Object.entries(industryPositionMap)) { console.log(`Processing ${industryName}...`); // Find interview content const positionData = visualDesignData.find( item => item['岗位名称'] === positionName && item['面试题内容'] ); if (!positionData) { console.log(` ⚠️ No interview questions found for ${positionName}`); continue; } // Extract questions const questions = extractQuestions(positionData['面试题内容'], industryName); if (questions.length === 0) { console.log(` ⚠️ Could not extract questions for ${positionName}`); continue; } // Create the replacement string const questionsStr = JSON.stringify(questions, null, 4) .split('\n') .map(line => ' ' + line) .join('\n') .trim(); // Find the industry section and replace questions const industryPattern = new RegExp( `("name":\\s*"${industryName.replace(/[.*+?^${}()|[\]\\]/g, '\\$&')}"[^}]*?"questions":\\s*)\\[[\\s\\S]*?\\](?=\\s*\\})`, 'g' ); const newContent = updatedContent.replace(industryPattern, (match, prefix) => { successCount++; console.log(` ✓ Updated (using ${positionName}, ${questions[0].subQuestions.length} questions)`); return prefix + questionsStr; }); if (newContent === updatedContent) { console.log(` ✗ Failed to update`); } else { updatedContent = newContent; } } // Save the updated file fs.writeFileSync('src/mocks/resumeInterviewMock.js', updatedContent); console.log(`\n✅ Update complete! Successfully updated ${successCount} industry groups`); // Verify syntax const { execSync } = require('child_process'); try { execSync('node -c src/mocks/resumeInterviewMock.js', { encoding: 'utf-8' }); console.log('✅ Syntax validation passed'); } catch (error) { console.error('❌ Syntax error detected, restoring backup...'); fs.writeFileSync('src/mocks/resumeInterviewMock.js', mockContent); console.log('Backup restored'); }