ETest-Vue-FastAPI/fix_dialogs.js

87 lines
2.1 KiB
JavaScript

/**
* 批量修复所有对话框,添加 :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;
// 匹配所有的 <el-dialog 标签,但不包含已经有 close-on-click-modal 属性的
const dialogRegex = /<el-dialog\s+([^>]*?)>/g;
content = content.replace(dialogRegex, (match, attributes) => {
// 检查是否已经有 close-on-click-modal 属性
if (attributes.includes('close-on-click-modal')) {
return match; // 已经有了,不修改
}
// 添加属性
modified = true;
return `<el-dialog ${attributes} :close-on-click-modal="false">`;
});
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();