d7-family-energy-bar.js 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475
  1. #!/usr/bin/env node
  2. /**
  3. * D7: FamilyEnergyBar.vue 家庭能量条组件清理
  4. * - script 顶部定义 DIM_COLORS 常量(维度色板 JS 单一事实源)引用 BrandColors
  5. * - maps 5 个维度色 + #999 fallback + memberColor 4 档分级色收编
  6. * - template 6 处内联 fallback hex 改绑 data.fallbackPrimaryColor/fallbackSecondaryColor
  7. * - brand-colors.js 补充 violet(#8B5CF6)/infoBlue(#3B82F6)
  8. */
  9. const fs = require('fs');
  10. const F = 'components/FamilyEnergyBar.vue';
  11. let src = fs.readFileSync(F, 'utf8');
  12. let replaced = 0;
  13. function repl(from, to, expect) {
  14. const cnt = src.split(from).length - 1;
  15. if (cnt === 0) { console.warn('NOT FOUND:', from.slice(0, 60)); return; }
  16. src = src.split(from).join(to);
  17. replaced += cnt;
  18. }
  19. // ---- 1. template 6 处内联 fallback -> data 绑定 ----
  20. repl("dualDimension.primary.color || '#8B5CF6'", 'dualDimension.primary.color || fallbackPrimaryColor');
  21. repl("dualDimension.secondary.color || '#3B82F6'", 'dualDimension.secondary.color || fallbackSecondaryColor');
  22. // ---- 2. script 顶部常量 + import ----
  23. repl(
  24. "<script>\nexport default {",
  25. [
  26. "<script>",
  27. "import { BrandColors } from '../utils/brand-colors.js'",
  28. "",
  29. "// 维度色板(JS 侧单一事实源;SCSS 侧等值令牌见 uni.scss $dim-*/$facade-violet/$status-info)",
  30. "var DIM_COLORS = {",
  31. " body: BrandColors.action, // 身体",
  32. " mind: BrandColors.violet, // 心",
  33. " wisdom: BrandColors.infoBlue, // 智",
  34. " action: BrandColors.primary, // 行动",
  35. " wealth: BrandColors.wealth // 富",
  36. "};",
  37. "",
  38. "export default {",
  39. ].join('\n')
  40. );
  41. // ---- 3. maps 五维色板收编 ----
  42. repl("body: { name: '身体', icon: '\\u{1F3C3}', color: '#10B981' },", "body: { name: '身体', icon: '\\u{1F3C3}', color: DIM_COLORS.body },");
  43. repl("mind: { name: '心', icon: '\\u2764', color: '#8B5CF6' },", "mind: { name: '心', icon: '\\u2764', color: DIM_COLORS.mind },");
  44. repl("wisdom: { name: '智', icon: '\\u{1F9E0}', color: '#3B82F6' },", "wisdom: { name: '智', icon: '\\u{1F9E0}', color: DIM_COLORS.wisdom },");
  45. repl("action: { name: '行动', icon: '\\u{1F3CB}', color: '#F97316' },", "action: { name: '行动', icon: '\\u{1F3CB}', color: DIM_COLORS.action },");
  46. repl("wealth: { name: '富', icon: '\\u{1F4B0}', color: '#F59E0B' }", "wealth: { name: '富', icon: '\\u{1F4B0}', color: DIM_COLORS.wealth }");
  47. repl("return maps[this.dimensionCode] || { name: '', icon: '', color: '#999' }",
  48. "return maps[this.dimensionCode] || { name: '', icon: '', color: BrandColors.textMuted }");
  49. // ---- 4. memberColor 分级色收编 ----
  50. repl("if (score >= 80) return '#10B981'", "if (score >= 80) return BrandColors.action");
  51. repl("if (score >= 60) return '#3B82F6'", "if (score >= 60) return BrandColors.infoBlue");
  52. repl("if (score >= 40) return '#F97316'", "if (score >= 40) return BrandColors.primary");
  53. repl("return '#EF4444'", "return BrandColors.danger");
  54. // ---- 5. data 注入 fallback 色 ----
  55. repl(
  56. " return {\n showMembers: false\n }",
  57. " return {\n showMembers: false,\n fallbackPrimaryColor: BrandColors.violet,\n fallbackSecondaryColor: BrandColors.infoBlue\n }"
  58. );
  59. fs.writeFileSync(F, src);
  60. console.log('total replaced:', replaced);
  61. // 校验
  62. const lines = src.split('\n');
  63. let n = 0;
  64. for (let i = 0; i < lines.length; i++) {
  65. if (/#[0-9a-fA-F]{3,8}\b/.test(lines[i])) { console.log('HEX ' + (i + 1) + ': ' + lines[i].trim()); n++; }
  66. }
  67. console.log('remaining hex lines:', n);