| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859 |
- // 票 15 实施(二):裸字号 → 语义档归并;KPI 数值接 --fs-kpi
- // 就近原则(不改可读性结论,±0.5u 内归并;差异 >1u 的保留裸值并在票面登记):
- // 9/9.5/10/10.5u → --fs-caption(11.5u);11u → --fs-caption;
- // 12.5/13/13.5u → --fs-body(14u);14u → --fs-body;14.5/15u → --fs-title(15.5u);
- // 21u(品牌主标题,独立档)→ --fs-heading(18u) 偏差大,保留裸值(登记);
- // 26u(入口页大标题,独立场景)→ 保留裸值(登记)。
- // 大号 KPI:.panel-kpi__value 系列 font-size 由 --fs-body(14u) 改 --fs-kpi(20u)。
- import { readFileSync, writeFileSync, readdirSync, statSync } from 'node:fs'
- import { join, relative } from 'node:path'
- const root = 'src/modules/cockpit'
- const files = []
- ;(function walk(dir) {
- for (const e of readdirSync(dir)) {
- const p = join(dir, e)
- if (statSync(p).isDirectory()) walk(p)
- else if (/\.(vue|css)$/.test(e)) files.push(p)
- }
- })(root)
- const MAP = {
- '9': 'var(--fs-caption, 11.5px)',
- '9.5': 'var(--fs-caption, 11.5px)',
- '10': 'var(--fs-caption, 11.5px)',
- '10.5': 'var(--fs-caption, 11.5px)',
- '11': 'var(--fs-caption, 11.5px)',
- '12': 'var(--fs-body, 14px)',
- '12.5': 'var(--fs-body, 14px)',
- '13': 'var(--fs-body, 14px)',
- '13.5': 'var(--fs-body, 14px)',
- '14': 'var(--fs-body, 14px)',
- '14.5': 'var(--fs-title, 15.5px)',
- '15': 'var(--fs-title, 15.5px)',
- }
- const re = /font-size:\s*calc\((9|9\.5|10|10\.5|11|12|12\.5|13|13\.5|14|14\.5|15)(\.\d+)?\s*\*\s*var\(--u(?:,\s*1px)?\)\)/g
- let total = 0
- const report = []
- for (const f of files) {
- const rel = relative('.', f)
- const src = readFileSync(f, 'utf8')
- let count = 0
- const out = src.replace(re, (m, n) => {
- // 只归并 MAP 里登记的档位(9/9.5/10/10.5/11/12.5/13/13.5/14.5/15;14 保留——它就是 body 本值,
- // 12 只在 CockpitIntro(12.5 误配)出现,已含于 12.5 规则)
- const mapped = MAP[n]
- if (!mapped || n === '14') return m
- count += 1
- return `font-size: ${mapped}`
- })
- if (count) {
- writeFileSync(f, out)
- report.push(`${rel}: ${count}`)
- total += count
- }
- }
- console.log(report.join('\n'))
- console.log(`\n合计归并 ${total} 处裸字号`)
|