| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061 |
- #!/usr/bin/env node
- /**
- * D 批 1/5:ComprehensiveSurvey.vue 暖棕系收编为页面级局部变量
- * 约定:单页专有色阶由页面级局部变量承载(uni.scss §14),同值全局令牌优先外联
- * 本页暖棕系 10 色均为问卷页专属(#4A3728 深棕 / #B08968 中棕 / #6B5744 次棕 /
- * #FFF3E6 浅橙底 / #FFE6D2 浅橙描边 / #FFD4B8 边框 / #F7EFE6 分隔 / #C4A98E 极淡 /
- * #FFFDFA 近白底 / #E53E3E 警示红)
- */
- const fs = require('fs');
- const F = 'pages/health/components/ComprehensiveSurvey.vue';
- let src = fs.readFileSync(F, 'utf8');
- const MAP = [
- ['#FFF3E6', '$c-survey-warm'], // 浅橙底 x10
- ['#4A3728', '$c-survey-ink'], // 深棕主文字 x9
- ['#B08968', '$c-survey-text'], // 中棕次要文字 x7
- ['#6B5744', '$c-survey-sub'], // 次棕补充文字 x6
- ['#FFE6D2', '$c-survey-warm-soft'], // 浅橙描边·最浅 x3
- ['#E53E3E', '$c-survey-alert'], // 警示红(删除键 / 风险徽章)x2
- ['#F7EFE6', '$c-survey-divider'], // 分隔线 x2
- ['#FFD4B8', '$c-survey-warm-line'], // 浅橙描边·副档 x2
- ['#C4A98E', '$c-survey-faint'], // 极淡棕提示 x1
- ['#FFFDFA', '$c-survey-paper'], // 近白底(量表卡)x1
- ];
- // 按 hex 长度降序,避免前缀误匹配(#FFF 不匹配 #FFF3E6 等,这里全部 7 位无冲突)
- MAP.sort((a, b) => b[0].length - a[0].length);
- const styleIdx = src.indexOf('<style');
- const before = src.slice(0, styleIdx);
- let styleBody = src.slice(styleIdx);
- let total = 0;
- for (const [hex, token] of MAP) {
- const esc = hex.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
- const re = new RegExp(esc + '(?![0-9a-fA-F])', 'g');
- styleBody = styleBody.replace(re, () => { total++; return token; });
- }
- // 在 <style lang="scss"> 后插入局部调色板声明
- const palette = [
- '// ===== 问卷页专属色阶(单页专用,同值全局令牌已在其它页复用;约定见 uni.scss §14)=====',
- '$c-survey-warm: #FFF3E6; // 浅橙底(输入区 / 选中态)',
- '$c-survey-warm-soft: #FFE6D2; // 浅橙描边·最浅档',
- '$c-survey-warm-line: #FFD4B8; // 浅橙描边·副档(虚线 / 主描边)',
- '$c-survey-ink: #4A3728; // 深棕主文字(标题 / 输入值)',
- '$c-survey-text: #B08968; // 中棕次要文字(辅助说明 / 删除符)',
- '$c-survey-sub: #6B5744; // 次棕补充文字(标签 / 按钮)',
- '$c-survey-faint: #C4A98E; // 极淡棕提示(单位说明)',
- '$c-survey-divider: #F7EFE6; // 分隔线(浅暖灰)',
- '$c-survey-paper: #FFFDFA; // 近白底(量表卡)',
- '$c-survey-alert: #E53E3E; // 警示红(删除 / 风险徽章)',
- ''
- ].join('\n');
- styleBody = styleBody.replace(/(<style[^>]*>\s*\n)/, '$1' + palette + '\n');
- fs.writeFileSync(F, before + styleBody);
- console.log('replaced occurrences:', total);
- const rest = (before + styleBody).match(/#[0-9a-fA-F]{3,8}\b/g) || [];
- console.log('remaining uniq hex (含 palette 声明):', [...new Set(rest)]);
|