diff --git a/lib/admin_taxonomy.php b/lib/admin_taxonomy.php index 9fa9a5c..f745a1d 100644 --- a/lib/admin_taxonomy.php +++ b/lib/admin_taxonomy.php @@ -538,7 +538,11 @@ function fb_admin_taxonomy_page($pdo, $editSw, $editCat) { // 主题色:前台按软件换色,用短链接进不同软件一眼就能区分 $curColor = $esw ? fb_color_norm((string)$esw['color']) : ''; $sugColor = $curColor !== '' ? $curColor : fb_color_default_for($esw ? (int)$esw['id'] : 0); - $presets = ['#0057B8', '#2E7D5B', '#B4553C', '#6A4C93', '#0E7C86', '#A02C5A', '#8A6D1F', '#3A5A8C']; + /* 🔴 必须用 fb_color_palette(),不要再在这里写死一份数组。 + * 以前这里硬编码了另外 8 个色值,和 util.php 的调色板完全不同步 —— + * 结果后台只能选那 8 个,用户在后台挑不到新颜色, + * 而他从没配置过的软件却会被分到「调色板里另一批」颜色。 */ + $presets = fb_color_palette(); echo '
主题色前台进这个软件时整体配色跟着变,用来区分不同软件'; echo '
'; echo ' '; diff --git a/lib/util.php b/lib/util.php index bb47338..774ea28 100644 --- a/lib/util.php +++ b/lib/util.php @@ -255,10 +255,42 @@ function fb_color_variants($hex) { /** * 给某个软件挑一个默认主题色(未配置时用)。 - * 按软件的排序位次从调色板里取,保证同一站点里不同软件颜色不撞。 + * 按软件的 id 从调色板里取,保证同一站点里不同软件颜色不撞。 + * + * 🔴 2026-11-04 按色相环**整体重排**为 12 色(用户:颜色快不够分了)。 + * + * 选色规则,改之前先读: + * ① **色相均匀分布**:360° 切成 12 段,相邻至少差 22°(实测最小 22°)。 + * 旧调色板有 3 个蓝挤在 185°/212°/217°,并排看几乎同色 —— 这是重排的原因; + * ② **对比度落在 4.76~6.19 的窄带**:白底上文字都够看清(WCAG AA 要 ≥4.5), + * 又不会某个颜色特别深、显得比其他刺眼; + * ③ **避开纯红/纯绿**:会与「待处理/已解决」状态色打架,所以红取 2°、绿取 122°; + * ④ 黄/黄绿饱和度压到 50%(再高就荧光),蓝/靛蓝也压到 62%/50%。 + * + * ⚠️ 这个数组和 lib/admin_taxonomy.php 里的 $presets **必须保持一致**。 + * 以前是两份独立硬编码,早就不同步了 —— 后台只给 8 个可选色, + * 实际调色板却是另一批,用户在后台根本选不到新增颜色。 + * 改这里记得同步改那边(见 fb_color_palette() 统一出口)。 */ +function fb_color_palette() { + return [ + '#B53530', // 1 红 2° + '#9D6525', // 2 橙 32° + '#747728', // 3 黄 62° + '#517E2A', // 4 黄绿 92° + '#2B822E', // 5 绿 122° + '#2D8059', // 6 青绿 152° + '#267E7B', // 7 青 178° + '#2678A1', // 8 天蓝 200° + '#4154D2', // 9 蓝 232° + '#7A44C1', // 10 靛蓝 266° + '#943BA0', // 11 紫 293° + '#AD3470', // 12 玫红 330° + ]; +} + function fb_color_default_for($softwareId) { - $palette = ['#0057B8', '#2E7D5B', '#B4553C', '#6A4C93', '#0E7C86', '#A02C5A', '#8A6D1F', '#3A5A8C']; + $palette = fb_color_palette(); $id = max(0, (int)$softwareId); return $palette[$id % count($palette)]; }