d28-diet-preferences.js 2.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  1. #!/usr/bin/env node
  2. /**
  3. * D28: diet/preferences.vue 饮食偏好页清理 (debt 48 -> 0)
  4. * #FFF3E6 -> $warm-cream(4 文件复用);其余暖棕/奶油色阶收编局部 $c-dp-*
  5. */
  6. const fs = require('fs');
  7. const F = 'pages/diet/preferences.vue';
  8. let src = fs.readFileSync(F, 'utf8');
  9. let replaced = 0;
  10. const styleIdx = src.indexOf('<style');
  11. const before = src.slice(0, styleIdx);
  12. let styleBody = src.slice(styleIdx);
  13. const GLOBAL = [['#FFF3E6', '$warm-cream']];
  14. for (const [from, to] of GLOBAL) {
  15. const re = new RegExp(from + '(?![0-9a-fA-F])', 'gi');
  16. replaced += (styleBody.match(re) || []).length;
  17. styleBody = styleBody.replace(re, to);
  18. }
  19. const LOCAL = [
  20. ['#FFE3C7', '$c-dp-track'],
  21. ['#C2A78A', '$c-dp-label'],
  22. ['#4A2E1A', '$c-dp-ink'],
  23. ['#A08B72', '$c-dp-muted'],
  24. ['#F5F0EA', '$c-dp-chip'],
  25. ['#6B5340', '$c-dp-chip-ink'],
  26. ['#E8732A', '$c-dp-accent'],
  27. ['#FFD9B8', '$c-dp-line'],
  28. ['#FFF9F2', '$c-dp-input'],
  29. ['#FFFDF8', '$c-dp-footer'],
  30. ['#FFE9D4', '$c-dp-footer-line'],
  31. ];
  32. for (const [from, to] of LOCAL) {
  33. const re = new RegExp(from + '(?![0-9a-fA-F])', 'gi');
  34. replaced += (styleBody.match(re) || []).length;
  35. styleBody = styleBody.replace(re, to);
  36. }
  37. const palette = [
  38. '// ===== 饮食偏好页专属色阶(暖棕/奶油问卷主题;单页专用,约定见 uni.scss §14)=====',
  39. '$c-dp-track: #FFE3C7; // 进度条底轨',
  40. '$c-dp-label: #C2A78A; // 进度标签文字',
  41. '$c-dp-ink: #4A2E1A; // 主文字深棕',
  42. '$c-dp-muted: #A08B72; // 辅助文字浅棕',
  43. '$c-dp-chip: #F5F0EA; // 选项胶囊底',
  44. '$c-dp-chip-ink: #6B5340; // 选项胶囊文字',
  45. '$c-dp-accent: #E8732A; // 选中态强调橙',
  46. '$c-dp-line: #FFD9B8; // 输入框描边',
  47. '$c-dp-input: #FFF9F2; // 输入框底',
  48. '$c-dp-footer: #FFFDF8; // 底部操作条底',
  49. '$c-dp-footer-line: #FFE9D4; // 底部操作条描边',
  50. ''
  51. ].join('\n');
  52. styleBody = styleBody.replace(/(<style[^>]*>\s*\n)/, '$1' + palette + '\n');
  53. fs.writeFileSync(F, before + styleBody);
  54. console.log('total replaced:', replaced);
  55. const out = fs.readFileSync(F, 'utf8');
  56. const lines = out.split('\n');
  57. let n = 0;
  58. for (let i = 0; i < lines.length; i++) {
  59. const L = lines[i].trim();
  60. if (/#[0-9a-fA-F]{3,8}\b/.test(L) && L.charAt(0) !== '$') { console.log('HEX ' + (i + 1) + ': ' + L.slice(0, 110)); n++; }
  61. }
  62. console.log('remaining non-palette hex:', n);