feat: 初始化画个标仓库 - AI驱动设计系统(BYOK模式) - 224源/371504图标+25海报源+130技能

This commit is contained in:
sgp
2026-10-03 21:44:18 +08:00
commit 9e222877ea
497 changed files with 43611 additions and 0 deletions
+74
View File
@@ -0,0 +1,74 @@
// 甄房换肤 · Electron 桌面外壳 + docs 独立工具页
// 注意:这些文件是「深色外壳」上下文,同一个旧色在这里的含义与 WEB 不同 ——
// 例如 #FFB31A 在 WEB 是警告色(→ #E76500),在外壳里是「品牌浅色」(→ #4D9BF6),
// 所以不能复用 WEB 的映射表,必须单独一套。
// 用法: node _design-test/apply-electron-colors.js (预演)
// node _design-test/apply-electron-colors.js --write (真写)
const fs = require('fs');
const WRITE = process.argv.includes('--write');
const ZF = 'e:/KF_7/ZhenOS-ZF';
const FILES = [
`${ZF}/xiaohuju/resources/splash/splash.html`,
`${ZF}/xiaohuju/resources/offline/offline.html`,
`${ZF}/xiaohuju/resources/blocked/blocked.html`,
`${ZF}/xiaohuju/src/common/constants.js`,
`${ZF}/xiaohuju/src/preload/titlebar.js`,
`${ZF}/docs/财务策算测算器-v2.html`,
`${ZF}/docs/财务策算测算器.html`
];
// 十六进制(大小写不敏感)
const HEX = [
['#ff822d', '#0070F2'], // blocked.html 里的品牌亮色
['#ff7a1a', '#0070F2'], // 品牌亮色 → 交互蓝
['#ff9a4d', '#4D9BF6'],
['#ff8a3d', '#4D9BF6'],
['#ffb31a', '#4D9BF6'], // 外壳里的「品牌浅色」→ 浅蓝(非警告橙)
['#ffc48a', '#A6CFFF'],
['#1a130d', '#071527'], // 最深底 → 甄房最深墨蓝
['#2e241a', '#0C2340'],
['#241c14', '#0A1D35'], // 标题栏底
['#33281d', '#0C2340'],
['#f1e4d2', '#EAF0F6'], // 标题栏符号(暖白 → 冷白)
['#f6ead8', '#F0F4F8'],
['#2a2118', '#131E29'],
['#3a322a', '#556B82'],
['#756a5e', '#5F7590'],
['#d9481c', '#AA0808'],
['#2e9e5b', '#256F3A'],
['#ffb31a', '#4D9BF6']
];
// rgb()/rgba() 三元组(保留 rgb/rgba 前缀与后面的 alpha)
const RGB = [
[/255,\s*122,\s*26/g, '0, 112, 242'],
[/255,\s*130,\s*45/g, '0, 112, 242'],
[/255,\s*179,\s*26/g, '77, 155, 246'],
[/241,\s*228,\s*210/g, '240, 244, 248'], // 暖白带透明
[/58,\s*50,\s*42/g, '12, 35, 64'],
[/26,\s*19,\s*13/g, '7, 21, 39'],
[/42,\s*33,\s*24/g, '19, 30, 41'],
[/51,\s*40,\s*29/g, '12, 35, 64']
];
let grand = 0, touched = 0;
for (const f of FILES) {
if (!fs.existsSync(f)) { console.log(' 跳过(不存在): ' + f.split('/').pop()); continue; }
let txt = fs.readFileSync(f, 'utf8');
const orig = txt;
const hits = [];
for (const [from, to] of HEX) {
const re = new RegExp(from, 'gi');
const n = (txt.match(re) || []).length;
if (n) { txt = txt.replace(re, to); hits.push(from + '→' + to + ' ×' + n); grand += n; }
}
for (const [re, to] of RGB) {
const n = (txt.match(re) || []).length;
if (n) { txt = txt.replace(re, to); hits.push('rgb元组 ×' + n); grand += n; }
}
if (txt !== orig) { touched++; console.log(' ' + f.replace(ZF + '/', '') + '\n ' + hits.join(' ')); }
if (WRITE && txt !== orig) fs.writeFileSync(f, txt);
}
console.log('\n涉及 ' + touched + ' 个文件 / 替换 ' + grand + ' 处 ' + (WRITE ? '(已写入)' : '(预演,加 --write 生效)'));