const fs = require('fs'); // 修复所有破碎的 HTML 属性和标签 function fixBrokenHtml(content) { // 修复破碎的属性(缺少闭合引号) content = content.replace(/placeholder="([^"]*)"/g, (match, p1) => { if (!match.endsWith('"')) { return 'placeholder="' + p1 + '"'; } return match; }); content = content.replace(/title="([^"]*)"/g, (match, p1) => { if (!match.endsWith('"')) { return 'title="' + p1 + '"'; } return match; }); // 修复破碎的标签 content = content.replace(/>([^<]+)\/option>/g, '>$1'); content = content.replace(/>([^<]+)\/th>/g, '>$1'); content = content.replace(/>([^<]+)\/td>/g, '>$1'); content = content.replace(/>([^<]+)\/button>/g, '>$1'); content = content.replace(/>([^<]+)\/label>/g, '>$1'); content = content.replace(/>([^<]+)\/span>/g, '>$1'); content = content.replace(/>([^<]+)\/p>/g, '>$1

'); content = content.replace(/>([^<]+)\/h([1-6])>/g, '>$1'); content = content.replace(/>([^<]+)\/li>/g, '>$1'); content = content.replace(/>([^<]+)\/a>/g, '>$1'); content = content.replace(/>([^<]+)\/div>/g, '>$1'); return content; } const files = [ 'src/views/order/OrderList.vue', 'src/views/order/OrderFollow.vue', 'src/views/order/OrderRecheck.vue', 'src/views/order/OrderTracking.vue', 'src/views/quote/QuoteGenerate.vue' ]; let totalFixed = 0; files.forEach(file => { try { let content = fs.readFileSync(file, 'utf8'); const original = content; content = fixBrokenHtml(content); if (content !== original) { fs.writeFileSync(file, content, 'utf8'); console.log('Fixed: ' + file); totalFixed++; } else { console.log('No changes: ' + file); } } catch(e) { console.log('Error fixing ' + file + ': ' + e.message); } }); console.log('\nTotal fixed: ' + totalFixed + ' files');