/** * Repair list-page layout corruption: nested duplicate forms inside list-search-actions. */ const fs = require('fs') const path = require('path') const viewsDir = process.argv[2] ? path.resolve(process.argv[2]) : path.join(__dirname, '../src/views') function walk(dir, files = []) { for (const name of fs.readdirSync(dir)) { const full = path.join(dir, name) if (fs.statSync(full).isDirectory()) walk(full, files) else if (name.endsWith('.vue')) files.push(full) } return files } function repair(content) { if (!content.includes('list-search-actions')) return content if (!/[\s\S]*?(head-container|ref="queryForm")/.test(content)) { return content } const searchBtn = content.match(/]*@click="handleQuery"[^>]*>[^<]*<\/el-button>/) const resetBtn = content.match(/]*@click="resetQuery"[^>]*>[^<]*<\/el-button>/) const searchHtml = searchBtn ? searchBtn[0].replace(/type="primary"/, 'type="cyan"').replace(/\stype="cyan"\s+type="cyan"/, ' type="cyan"') : '锟斤拷锟斤拷' const resetHtml = resetBtn ? resetBtn[0] : '锟斤拷锟斤拷' const actionsBlock = ` ${searchHtml} ${resetHtml} ` const repaired = content.replace( /(\s+<\/el-form-item>\s*\n)\s*[\s\S]*?<\/el-form>\s*\n\s*[\s\S]*?<\/el-form-item>\s*\n\s*<\/el-form>\s*\n(\s*)/, `$1${actionsBlock}\n\n$2` ) return repaired } let fixed = 0 for (const file of walk(viewsDir)) { const original = fs.readFileSync(file, 'utf8') const next = repair(original) if (next !== original) { fs.writeFileSync(file, next, 'utf8') fixed++ console.log(path.relative(viewsDir, file)) } } console.log('\nRepaired ' + fixed + ' files')