| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114 |
- #!/usr/bin/env node
- /**
- * D5: report-result.vue DAN 测评报告页清理 (debt 120)
- *
- * 1) template 6 处 RadarChart 内联色属性(fillColor/gridColor/labelColor x2 组)绑定到 data.chartColors
- * 2) style 块 7 色映射全局等值令牌
- * 3) style 块 15 个专属色(紫罗兰系 + 青/米黄/灰阶)收编为页面级局部 SCSS 变量
- */
- const fs = require('fs');
- const F = 'pages/dan-assessment/report-result.vue';
- let src = fs.readFileSync(F, 'utf8');
- // ---- 1. template 内联色属性 -> 动态绑定 ----
- const TEMPLATE_REPL = [
- ['fillColor="#6366F1"', ':fill-color="chartColors.wisdomFill"'],
- ['gridColor="#EEF0F6"', ':grid-color="chartColors.grid"'],
- ['labelColor="#1F2937"', ':label-color="chartColors.label"'],
- ['fillColor="#8B5CF6"', ':fill-color="chartColors.violetFill"'],
- ['gridColor="#F0ECFA"', ':grid-color="chartColors.gridViolet"'],
- ['labelColor="#5B21B6"', ':label-color="chartColors.labelViolet"'],
- ];
- for (const [from, to] of TEMPLATE_REPL) {
- if (!src.includes(from)) console.warn('TPL NOT FOUND:', from);
- src = src.split(from).join(to);
- }
- // ---- 2. script 顶部插入 JS 色板 + import ----
- const PALETTE_JS = [
- "import { getDanReportDetail } from '../../utils/api.js'",
- "import RadarChart from '../../components/RadarChart.vue'",
- "import { BrandColors } from '../../utils/brand-colors.js'",
- "",
- "// DAN 报告页专属色板(雷达图填充/网格/标签靛蓝+紫罗兰双主题)",
- "var REPORT_COLORS = {",
- " wisdomFill: BrandColors.dimWisdom, // #6366F1 能力雷达填充(靛蓝)",
- " grid: '#EEF0F6', // 能力雷达网格灰",
- " label: '#1F2937', // 能力雷达标签深灰",
- " violetFill: '#8B5CF6', // 大五人格雷达填充(紫罗兰)",
- " gridViolet: '#F0ECFA', // 大五雷达网格浅紫",
- " labelViolet: '#5B21B6', // 大五雷达标签深紫",
- "};",
- ].join('\n');
- src = src.replace(
- "import { getDanReportDetail } from '../../utils/api.js'\nimport RadarChart from '../../components/RadarChart.vue'",
- PALETTE_JS
- );
- // data() 注入 chartColors
- src = src.replace(
- / return \{\n reportId: null,/,
- " return {\n chartColors: REPORT_COLORS,\n reportId: null,"
- );
- // ---- 3. style 块 ----
- const styleIdx = src.indexOf('<style');
- const before = src.slice(0, styleIdx);
- let styleBody = src.slice(styleIdx);
- const GLOBAL_MAP = [
- ['#4F46E5', '$dim-wisdom-deep'],
- ['#7C3AED', '$facade-violet-deep'],
- ['#FDE68A', '$status-warning-light'],
- ['#FBBF24', '$status-warning'],
- ['#6EE7B7', '$status-success-light-2'],
- ['#F5F3FF', '$facade-violet-tint-2'],
- ['#A78BFA', '$facade-violet-light'],
- ];
- const PALETTE_MAP = [
- ['#F3F2FA', '$c-rpt-bg'], // 页面底(淡紫)
- ['#7C2D12', '$c-rpt-brown'], // 深棕徽章文字
- ['#A5F3FC', '$c-rpt-cyan-1'], // 渐变青浅档
- ['#67E8F9', '$c-rpt-cyan-2'], // 渐变青深档
- ['#FDBA74', '$c-rpt-orange'], // 暖橙(需关注/边框)
- ['#EEF0F6', '$c-rpt-grid'], // 网格灰(指标条底)
- ['#F0ECFA', '$c-rpt-violet-grid'], // 紫罗兰网格/底
- ['#C7C9D9', '$c-rpt-gray-line'], // 灰色分隔
- ['#C4B5FD', '$c-rpt-violet-soft'], // 紫罗兰浅渐变
- ['#FCD34D', '$c-rpt-yellow'], // 黄渐变
- ['#6D28D9', '$c-rpt-violet-text'], // 紫罗兰文字
- ['#F1F2F7', '$c-rpt-line'], // 浅紫分隔线
- ['#4B5563', '$c-rpt-body'], // 正文灰
- ['#B0B3C3', '$c-rpt-foot'], // 脚注灰
- ['#000', '$c-rpt-mask-ink'], // 遮罩渐变异色
- ];
- for (const [from, to] of [...GLOBAL_MAP, ...PALETTE_MAP]) {
- const esc = from.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
- styleBody = styleBody.replace(new RegExp(esc + '(?![0-9a-fA-F])', 'g'), to);
- }
- const palette = [
- '// ===== DAN 报告页专属色阶(紫罗兰主题 + 图表色板,单页专用;约定见 uni.scss §14)=====',
- '$c-rpt-bg: #F3F2FA; // 页面底(淡紫)',
- '$c-rpt-brown: #7C2D12; // 深棕徽章文字',
- '$c-rpt-cyan-1: #A5F3FC; // 渐变青浅档(星级光谱)',
- '$c-rpt-cyan-2: #67E8F9; // 渐变青深档',
- '$c-rpt-orange: #FDBA74; // 需关注暖橙(徽章/渐变/边框)',
- '$c-rpt-grid: #EEF0F6; // 图表网格灰',
- '$c-rpt-violet-grid: #F0ECFA; // 雷达网格/底(浅紫)',
- '$c-rpt-gray-line: #C7C9D9; // 灰色分隔',
- '$c-rpt-violet-soft: #C4B5FD; // 紫罗兰浅渐变起',
- '$c-rpt-yellow: #FCD34D; // 黄渐变起',
- '$c-rpt-violet-text: #6D28D9; // 紫罗兰文字',
- '$c-rpt-line: #F1F2F7; // 浅紫分隔线',
- '$c-rpt-body: #4B5563; // 正文灰',
- '$c-rpt-foot: #B0B3C3; // 脚注灰',
- '$c-rpt-mask-ink: #000; // 遮罩渐变异色(mask-image)',
- ''
- ].join('\n');
- styleBody = styleBody.replace(/(<style[^>]*>\s*\n)/, '$1' + palette + '\n');
- fs.writeFileSync(F, before + styleBody);
- console.log('D5 done');
|