fix-lobster-table-column-bug.js 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  1. /**
  2. * 修复 el-table-column 标签替换问题,避免响应式列宽塌陷
  3. */
  4. const fs = require('fs')
  5. const path = require('path')
  6. const projects = [
  7. path.join(__dirname, '../../saas-adminui/src/views/lobster'),
  8. path.join(__dirname, '../../saas-companyui/src/views/lobster')
  9. ]
  10. function walk(dir, files = []) {
  11. if (!fs.existsSync(dir)) return files
  12. for (const name of fs.readdirSync(dir)) {
  13. const full = path.join(dir, name)
  14. if (fs.statSync(full).isDirectory()) walk(full, files)
  15. else if (name.endsWith('.vue')) files.push(full)
  16. }
  17. return files
  18. }
  19. const COLUMN_FIXES = [
  20. [/label="配置名" prop="configName" width="200"/g, 'label="配置名" prop="configName" min-width="140"'],
  21. [/label="关键词" prop="keywords" width="320"/g, 'label="关键词" prop="keywords" min-width="180"'],
  22. [/label="敏感词" prop="word" width="220"/g, 'label="敏感词" prop="word" min-width="100"'],
  23. [/label="提示词名称" align="center" prop="prompt_name" width="180"/g, 'label="提示词名称" align="center" prop="prompt_name" min-width="120"'],
  24. [/label="提示词标识" align="center" prop="prompt_key" width="200"/g, 'label="提示词标识" align="center" prop="prompt_key" min-width="140"'],
  25. [/label="提示词名称" align="center" prop="promptName" width="180"/g, 'label="提示词名称" align="center" prop="promptName" min-width="120"'],
  26. [/label="提示词标识" align="center" prop="promptKey" width="200"/g, 'label="提示词标识" align="center" prop="promptKey" min-width="140"'],
  27. [/label="模型A (评分/初审)" prop="modelA" width="180"/g, 'label="模型A (评分/初审)" prop="modelA" min-width="120"'],
  28. [/label="模型B (重试/复审)" prop="modelB" width="180"/g, 'label="模型B (重试/复审)" prop="modelB" min-width="120"'],
  29. [/label="模型C (校验/终审)" prop="modelC" width="180"/g, 'label="模型C (校验/终审)" prop="modelC" min-width="120"']
  30. ];
  31. function addTableClass(content) {
  32. return content.replace(/<el-table(\s[^>]*?)>/g, (match, attrs) => {
  33. if (/lobster-list-table/.test(attrs)) return match
  34. if (/class="([^"]*)"/.test(attrs)) {
  35. return match.replace(/class="([^"]*)"/, 'class="$1 lobster-list-table"')
  36. }
  37. return `<el-table class="lobster-list-table"${attrs}>`
  38. })
  39. }
  40. let changed = 0
  41. for (const root of projects) {
  42. for (const file of walk(root)) {
  43. let content = fs.readFileSync(file, 'utf8')
  44. if (!content.includes('<el-table')) continue
  45. const original = content
  46. content = content.replace(/<el-table class="lobster-list-table"-column/g, '<el-table-column')
  47. content = addTableClass(content)
  48. for (const [pattern, replacement] of COLUMN_FIXES) {
  49. content = content.replace(pattern, replacement)
  50. }
  51. if (content !== original) {
  52. fs.writeFileSync(file, content, 'utf8')
  53. changed++
  54. console.log('fixed:', file)
  55. }
  56. }
  57. }
  58. console.log('done, files fixed:', changed)