更新品牌
概述
更改 CRM 徽标 和/或 标题。徽标在 两种主题 下显示于 五个屏幕(桌面 + 移动页眉、登录、注册、确认页面),标题在 三个 地方硬编码,单文件编辑会遗漏一个。以下步骤涵盖了所有情况。 退出标准:徽标在两种主题下、所有五个屏幕上正确渲染,并且在页眉、浏览器标签页和 PWA 名称中标题保持一致。
何时使用
- 用户想要更改、替换或重新品牌化 CRM 徽标和/或标题/名称。
- 可选:当用户还要求更新浏览器图标或 PWA 应用图标时。
不适用于主题颜色或组件样式,请参阅 Skill({skill: "shadcn-customization"})。
徽标:两个资产系列
确认用户指的是哪一个 — 大多数请求仅指 #1。
- 应用徽标 / 文字标记(常见)——
src/components/atomic-crm/root/logos/,由defaultConfiguration.ts作为模块资产导入(Vite 解析相对于 JS 块的 URL,因此它能存活于嵌套路由如/oauth/consent和子路径部署)。logo_atomic_crm_dark.svg是 浅色 图案,在 暗模式 + 所有认证页面 显示;logo_atomic_crm_light.svg是 深色 图案,在 亮模式 显示。(一个独立未使用的logo_atomic_crm.svg仍存在于public/logos/中。)文件以 它们显示的模式 命名,而不是它们的颜色 — “暗模式”徽标必须在深色背景上可读。
- 浏览器图标 + PWA 图标 — 仅在被要求时。更大(34 个 PNG);请参阅 下方。
代码默认值与运行时设置 — 它们冲突
- 代码默认值(本技能): 编辑
defaultConfiguration.ts+ 资产。提交后,全局生效,并且是更改浏览器标签页标题 / 浏览器图标 / PWA 图标的唯一方式。 - 设置 UI(
/settings→ 品牌,SettingsPage.tsx):已登录用户编辑标题 + 上传徽标,每个浏览器,保存到localStorage作为CRM.app.configuration(徽标作为 base64),永远不会提交。仅覆盖应用内徽标 + 页眉标题。
⚠️ 存储会遮盖代码。
useConfigurationContext返回{ ...defaultConfiguration, ...storedConfig }(ConfigurationContext.tsx)。如果品牌曾经通过/settings保存过,你对defaultConfiguration.ts的编辑在该浏览器中不会体现 — 清除CRM.app.configurationlocalStorage 键。当代码更改没有视觉效果时,请怀疑此问题。
步骤
- 获取资产。 询问文件/URL、格式(SVG 还是 PNG),以及是否有 单独的明/暗变体 或仅一张图片。
- 一个变体 → 将两者都设置为同一个配置键;警告 在一个主题中对比度可能较差(认证页面始终使用暗模式键)。
- 单色填充 SVG → 通过交换填充颜色(
white↔black)派生另一个变体。
- 放置文件 到
src/components/atomic-crm/root/logos/:- 直接覆盖(最简单): 覆盖
logo_atomic_crm_dark.svg/logo_atomic_crm_light.svg,保留完全相同的文件名 +.svg。defaultConfiguration.ts中的导入已经指向此处 — 完成。(仅限 SVG。) - 新名称 / 格式(例如 PNG): 将其作为新文件保存在它们旁边,然后更新
defaultConfiguration.ts顶部的两个import语句(它们提供defaultDarkModeLogo/defaultLightModeLogo;模块相对路径,因此是"./logos/<file>")。不要 将它们恢复为裸公共路径字符串 — 那会重新引入问题 #291。
- 直接覆盖(最简单): 覆盖
- 更新标题(如果名称更改)在所有 三个 位置 —
defaultTitle仅驱动第一个:defaultConfiguration.ts→defaultTitle— 页眉<h1>+ 徽标alt文本。index.html→<title>— 浏览器标签页标题(硬编码,不在运行时设置)。public/manifest.json→short_name+name— 已安装的 PWA 名称。
消费者(如果保留配置键则无需编辑):layout/Header.tsx + dashboard/MobileDashboard.tsx 渲染两个变体(CSS 切换,h-6);login/{LoginPage,SignupPage,ConfirmationRequired}.tsx 仅渲染 darkModeLogo。
常见误区
| 误区 | 现实 |
|---|---|
| “我更改了徽标文件,这就完成了全部工作。” | 徽标在两种主题下、五个屏幕上显示,标题存在于三个文件中。一次编辑会遗漏一个变体。 |
| “我的代码更改没有视觉效果,所以它没有生效。” | /settings 存储会遮盖每个浏览器的 defaultConfiguration.ts。清除 CRM.app.configuration localStorage 键。 |
| “一张图片对两种主题都适用。” | 认证页面始终使用暗模式键;一个资产在一个背景上会显示错误。警告或派生第二个变体。 |
| “我将重新生成几个图标尺寸。” | PWA 集是 34 个 PNG。从一个源文件重新生成所有尺寸,或让用户提供整个集合,不要手动编辑几个。 |
红旗
- 只编辑两个徽标资产键中的一个,或者交换明/暗文件。
- 在
defaultConfiguration.ts中更改了标题,但没有更改index.html和manifest.json。 - 代码更改没有视觉效果,且
CRM.app.configuration存储未被清除。 - 手动编辑一部分浏览器图标/PWA 尺寸,而不是重新生成完整集合。
- 在没有被要求的情况下触碰文档站点徽标(
doc/)。
验证
make typecheck 只能捕获配置键拼写错误。然后 make start 并检查:两种主题 下的 桌面 + 移动 页眉;登录/注册 页面(深色背景);如果标题更改了,检查页眉 <h1>、浏览器标签页和 PWA 名称。如果徽标在恰好一个主题中错误,意味着两个键指向同一个资产,或者明/暗文件被交换。
- 两个徽标变体都指向正确的明/暗资产(按显示模式命名,而非颜色)。
- 徽标在两种主题、桌面 + 移动以及登录/注册/确认页面上均正确渲染。
- 如果名称更改,标题已在
defaultConfiguration.ts、index.html和manifest.json中更新。 - 如果没有视觉影响,
CRM.app.configurationlocalStorage 键已被清除。 - 浏览器图标/PWA 图标仅在明确要求时作为完整集合重新生成。
浏览器图标 & 应用图标(可选)
仅在被要求时。被 index.html + public/manifest.json 引用:public/favicon.ico 和 public/appIcon/*.png(34 个尺寸,包括 maskable_icon*)。从一个正方形源文件(sharp / pwa-asset-generator)重新生成 每一个 尺寸,或要求用户提供集合 — 不要手动编辑几个。首先确认范围;manifest.json 中的 theme_color/background_color 可能也需要更新。
文档站点徽标(
doc/astro.config.mjs→doc/public/logo_atomic_crm_*.svg)是一个独立的 Astro 站点 — 除非被要求,否则不要动。