87 lines
2.1 KiB
JavaScript
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();
|