/** * 批量修复所有对话框,添加 :close-on-click-modal="false" 属性 * 运行方法: node fix_dialogs.js */ const fs = require('fs'); const path = require('path'); // 需要处理的目录 const directories = [ 'ruoyi-fastapi-frontend/src/views', 'ruoyi-fastapi-frontend/src/components' ]; // 递归读取目录中的所有.vue文件 function getAllVueFiles(dir, fileList = []) { const files = fs.readdirSync(dir); files.forEach(file => { const filePath = path.join(dir, file); const stat = fs.statSync(filePath); if (stat.isDirectory()) { getAllVueFiles(filePath, fileList); } else if (file.endsWith('.vue')) { fileList.push(filePath); } }); return fileList; } // 修复单个文件 function fixDialogInFile(filePath) { let content = fs.readFileSync(filePath, 'utf8'); let modified = false; // 匹配所有的 ]*?)>/g; content = content.replace(dialogRegex, (match, attributes) => { // 检查是否已经有 close-on-click-modal 属性 if (attributes.includes('close-on-click-modal')) { return match; // 已经有了,不修改 } // 添加属性 modified = true; return ``; }); if (modified) { fs.writeFileSync(filePath, content, 'utf8'); console.log(`✓ 已修复: ${filePath}`); return true; } return false; } // 主函数 function main() { console.log('开始批量修复对话框...\n'); let totalFiles = 0; let modifiedFiles = 0; directories.forEach(dir => { if (fs.existsSync(dir)) { const vueFiles = getAllVueFiles(dir); totalFiles += vueFiles.length; vueFiles.forEach(file => { if (fixDialogInFile(file)) { modifiedFiles++; } }); } }); console.log(`\n完成!`); console.log(`总共检查了 ${totalFiles} 个文件`); console.log(`修改了 ${modifiedFiles} 个文件`); } main();