d15-traditional.js 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
  1. #!/usr/bin/env node
  2. /**
  3. * D15: traditional.vue 传统天盘页清理 (debt 72)
  4. * script 五行/数字/五维色板全部收编 BrandColors(含 import)
  5. * template 头像 fallback 绑定 data
  6. * style #FFF8F0 -> $dim-body-tint
  7. */
  8. const fs = require('fs');
  9. const F = 'pages/tianpan/traditional.vue';
  10. let src = fs.readFileSync(F, 'utf8');
  11. let replaced = 0;
  12. function repl(from, to) {
  13. const cnt = src.split(from).length - 1;
  14. if (cnt === 0) { console.warn('NOT FOUND:', from.slice(0, 90)); return; }
  15. src = src.split(from).join(to);
  16. replaced += cnt;
  17. }
  18. // ---- 1. import(接在首个 import 后)----
  19. const m = src.match(/<script>([\s\S]{0,200})/);
  20. console.log('script head:', JSON.stringify(m[1].slice(0, 120)));
  21. if (!src.includes('utils/brand-colors.js')) {
  22. src = src.replace('<script>', "<script>\nimport { BrandColors } from '../../utils/brand-colors.js'");
  23. }
  24. // ---- 2. template fallback ----
  25. repl("backgroundColor: member.colorHex || '#6B7280'", "backgroundColor: member.colorHex || memberColorFallback");
  26. repl(" currentUser: null,", " currentUser: null,\n memberColorFallback: BrandColors.textSlate,");
  27. // ---- 3. 五行色板 ----
  28. repl("var colorMap = { wood: '#10B981', fire: '#FF6B9D', earth: '#FF8C42', metal: '#6366F1', water: '#3B82F6' }",
  29. "var colorMap = { wood: BrandColors.success, fire: BrandColors.mind, earth: BrandColors.body, metal: BrandColors.wisdom, water: BrandColors.infoBlue }");
  30. repl("colorMap[key] || '#94A3B8'", "colorMap[key] || BrandColors.appTextSubtle");
  31. // ---- 4. 数字色板 + 五维色板 ----
  32. repl("var colors = { 1: '#F97316', 2: '#EC4899', 3: '#8B5CF6', 4: '#F59E0B', 5: '#3B82F6', 6: '#10B981', 7: '#6366F1",
  33. "var colors = { 1: BrandColors.primary, 2: BrandColors.pink, 3: BrandColors.violet, 4: BrandColors.wealth, 5: BrandColors.infoBlue, 6: BrandColors.success, 7: BrandColors.wisdom");
  34. repl("return colors[num] || '#6B7280'", "return colors[num] || BrandColors.textSlate");
  35. repl("var colors = { body: '#FF8C42', mind: '#FF6B9D', wisdom: '#6366F1', action: '#10B981', wealth: '#F59E0B' }",
  36. "var colors = { body: BrandColors.body, mind: BrandColors.mind, wisdom: BrandColors.wisdom, action: BrandColors.action, wealth: BrandColors.wealth }");
  37. repl("return colors[key] || '#6B7280'", "return colors[key] || BrandColors.textSlate");
  38. // ---- 5. style ----
  39. const styleIdx = src.indexOf('<style');
  40. const before = src.slice(0, styleIdx);
  41. let styleBody = src.slice(styleIdx);
  42. styleBody = styleBody.replace(/#FFF8F0(?![0-9a-fA-F])/gi, '$dim-body-tint');
  43. fs.writeFileSync(F, before + styleBody);
  44. console.log('total replaced:', replaced);