| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475 |
- #!/usr/bin/env node
- /**
- * D7: FamilyEnergyBar.vue 家庭能量条组件清理
- * - script 顶部定义 DIM_COLORS 常量(维度色板 JS 单一事实源)引用 BrandColors
- * - maps 5 个维度色 + #999 fallback + memberColor 4 档分级色收编
- * - template 6 处内联 fallback hex 改绑 data.fallbackPrimaryColor/fallbackSecondaryColor
- * - brand-colors.js 补充 violet(#8B5CF6)/infoBlue(#3B82F6)
- */
- const fs = require('fs');
- const F = 'components/FamilyEnergyBar.vue';
- let src = fs.readFileSync(F, 'utf8');
- let replaced = 0;
- function repl(from, to, expect) {
- const cnt = src.split(from).length - 1;
- if (cnt === 0) { console.warn('NOT FOUND:', from.slice(0, 60)); return; }
- src = src.split(from).join(to);
- replaced += cnt;
- }
- // ---- 1. template 6 处内联 fallback -> data 绑定 ----
- repl("dualDimension.primary.color || '#8B5CF6'", 'dualDimension.primary.color || fallbackPrimaryColor');
- repl("dualDimension.secondary.color || '#3B82F6'", 'dualDimension.secondary.color || fallbackSecondaryColor');
- // ---- 2. script 顶部常量 + import ----
- repl(
- "<script>\nexport default {",
- [
- "<script>",
- "import { BrandColors } from '../utils/brand-colors.js'",
- "",
- "// 维度色板(JS 侧单一事实源;SCSS 侧等值令牌见 uni.scss $dim-*/$facade-violet/$status-info)",
- "var DIM_COLORS = {",
- " body: BrandColors.action, // 身体",
- " mind: BrandColors.violet, // 心",
- " wisdom: BrandColors.infoBlue, // 智",
- " action: BrandColors.primary, // 行动",
- " wealth: BrandColors.wealth // 富",
- "};",
- "",
- "export default {",
- ].join('\n')
- );
- // ---- 3. maps 五维色板收编 ----
- repl("body: { name: '身体', icon: '\\u{1F3C3}', color: '#10B981' },", "body: { name: '身体', icon: '\\u{1F3C3}', color: DIM_COLORS.body },");
- repl("mind: { name: '心', icon: '\\u2764', color: '#8B5CF6' },", "mind: { name: '心', icon: '\\u2764', color: DIM_COLORS.mind },");
- repl("wisdom: { name: '智', icon: '\\u{1F9E0}', color: '#3B82F6' },", "wisdom: { name: '智', icon: '\\u{1F9E0}', color: DIM_COLORS.wisdom },");
- repl("action: { name: '行动', icon: '\\u{1F3CB}', color: '#F97316' },", "action: { name: '行动', icon: '\\u{1F3CB}', color: DIM_COLORS.action },");
- repl("wealth: { name: '富', icon: '\\u{1F4B0}', color: '#F59E0B' }", "wealth: { name: '富', icon: '\\u{1F4B0}', color: DIM_COLORS.wealth }");
- repl("return maps[this.dimensionCode] || { name: '', icon: '', color: '#999' }",
- "return maps[this.dimensionCode] || { name: '', icon: '', color: BrandColors.textMuted }");
- // ---- 4. memberColor 分级色收编 ----
- repl("if (score >= 80) return '#10B981'", "if (score >= 80) return BrandColors.action");
- repl("if (score >= 60) return '#3B82F6'", "if (score >= 60) return BrandColors.infoBlue");
- repl("if (score >= 40) return '#F97316'", "if (score >= 40) return BrandColors.primary");
- repl("return '#EF4444'", "return BrandColors.danger");
- // ---- 5. data 注入 fallback 色 ----
- repl(
- " return {\n showMembers: false\n }",
- " return {\n showMembers: false,\n fallbackPrimaryColor: BrandColors.violet,\n fallbackSecondaryColor: BrandColors.infoBlue\n }"
- );
- fs.writeFileSync(F, src);
- console.log('total replaced:', replaced);
- // 校验
- const lines = src.split('\n');
- let n = 0;
- for (let i = 0; i < lines.length; i++) {
- if (/#[0-9a-fA-F]{3,8}\b/.test(lines[i])) { console.log('HEX ' + (i + 1) + ': ' + lines[i].trim()); n++; }
- }
- console.log('remaining hex lines:', n);
|