| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879 |
- #!/usr/bin/env node
- /**
- * D12: report-detail.vue 健康报告详情页清理 (debt 78)
- *
- * style 全局令牌映射 6 色:
- * #D32F2F->$fortune-0-ink, #FFF8E1->$mat-amber-tint, #F57F17->$mat-amber-strong,
- * #66BB6A->$mat-green-light-2, #43A047->$mat-green-base-2, #FFD54F->$uni-warning-light
- * 专属色(医疗蓝 + Material 渐变 + 暖橙)收编局部 $c-rptd-* 变量
- */
- const fs = require('fs');
- const F = 'pages/health/report-detail.vue';
- let src = fs.readFileSync(F, 'utf8');
- const styleIdx = src.indexOf('<style');
- const before = src.slice(0, styleIdx);
- let styleBody = src.slice(styleIdx);
- const GLOBAL = [
- ['#D32F2F', '$fortune-0-ink'],
- ['#FFF8E1', '$mat-amber-tint'],
- ['#F57F17', '$mat-amber-strong'],
- ['#66BB6A', '$mat-green-light-2'],
- ['#43A047', '$mat-green-base-2'],
- ['#FFD54F', '$uni-warning-light'],
- ];
- for (const [f, t] of GLOBAL) {
- const esc = f.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
- styleBody = styleBody.replace(new RegExp(esc + '(?![0-9a-fA-F])', 'gi'), t);
- }
- const PAL = [
- ['#4a90d9', '$c-rptd-blue'], // 医疗蓝 x2
- ['#eef4ff', '$c-rptd-blue-bg'], // 医疗蓝浅底
- ['#E8EDF2', '$c-rptd-line'], // 浅灰分隔线
- ['#F8FAFB', '$c-rptd-card'], // 卡片底(浅灰白)x6
- ['#FFF0F0', '$c-rptd-red-bg'], // 警示浅红底
- ['#FFC107', '$c-rptd-amber-deep'], // Material 琥珀深档
- ['#FF8A65', '$c-rptd-orange-1'], // 低档渐变起
- ['#FF5722', '$c-rptd-orange-2'], // 低档渐变终(deep-orange-500)
- ['#EF9A9A', '$c-rptd-red-1'], // 无档渐变起
- ['#E53935', '$c-rptd-red-2'], // 无档渐变终
- ['#FFF0E0', '$c-rptd-orange-tint'],// 浅橙底(提示卡)
- ['#FFD4A8', '$c-rptd-orange-line'],// 暖橙描边 x2
- ];
- for (const [f, t] of PAL) {
- const esc = f.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
- styleBody = styleBody.replace(new RegExp(esc + '(?![0-9a-fA-F])', 'gi'), t);
- }
- const palette = [
- '// ===== 报告详情页专属色阶(医疗蓝 + Material 渐变档 + 暖橙提示;单页专用,约定见 uni.scss §14)=====',
- '$c-rptd-blue: #4a90d9; // 医疗蓝(标题/主元素)',
- '$c-rptd-blue-bg: #eef4ff; // 医疗蓝浅底',
- '$c-rptd-line: #E8EDF2; // 浅灰分隔线',
- '$c-rptd-card: #F8FAFB; // 卡片底(浅灰白)',
- '$c-rptd-red-bg: #FFF0F0; // 警示浅红底',
- '$c-rptd-amber-deep: #FFC107; // Material 琥珀深档',
- '$c-rptd-orange-1: #FF8A65; // 低档渐变起',
- '$c-rptd-orange-2: #FF5722; // 低档渐变终(deep-orange-500)',
- '$c-rptd-red-1: #EF9A9A; // 无档渐变起',
- '$c-rptd-red-2: #E53935; // 无档渐变终',
- '$c-rptd-orange-tint: #FFF0E0; // 浅橙底(提示卡)',
- '$c-rptd-orange-line: #FFD4A8; // 暖橙描边',
- ''
- ].join('\n');
- styleBody = styleBody.replace(/(<style[^>]*>\s*\n)/, '$1' + palette + '\n');
- fs.writeFileSync(F, before + styleBody);
- console.log('D12 done');
- 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])) {
- const L = lines[i].trim();
- if (L.indexOf('$c-') !== 0 && !/^\$c-/.test(L)) { console.log('HEX ' + (i + 1) + ': ' + L); n++; }
- }
- }
- console.log('remaining hex (excl palette):', n);
|