更新品牌
概覽
變更 CRM 標誌和/或標題。標誌會顯示在兩個主題中,橫跨五個畫面(桌面 + 行動頁首、登入、註冊、確認頁),而標題則寫死在三個地方,單純編輯一個檔案會遺留一個過時的版本。以下步驟會全面處理它們。 退出標準:標誌在兩個主題中的所有五個畫面上皆正確顯示,且標題在頁首、瀏覽器分頁和 PWA 名稱中保持一致。
使用時機
- 使用者想要變更、交換或重新命名 CRM 標誌和/或標題/名稱。
- 可選:當他們也要求更新 favicon 或 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/中。)檔案是根據它們顯示的模式命名,而非其顏色——「深色模式」標誌必須能在深色背景上閱讀。
- Favicon + PWA 圖示 — 僅在要求時處理。體積大得多(34 個 PNG);請參閱下方。
程式碼預設值 vs. 執行時設定——它們相互衝突
- 程式碼預設值(此技能): 編輯
defaultConfiguration.ts+ 資產。已提交,適用於所有情況,且是變更瀏覽器分頁標題 / favicon / PWA 圖示的唯一方式。 - 設定 UI(
/settings→ 品牌,SettingsPage.tsx):已登入的使用者可以編輯標題 + 上傳標誌,每個瀏覽器各自儲存,以localStorage保存為CRM.app.configuration(標誌為 base64),永遠不會提交。僅涵蓋應用程式內的標誌 + 頁首標題。
⚠️ 儲存會遮蔽程式碼。
useConfigurationContext會回傳{ ...defaultConfiguration, ...storedConfig }(ConfigurationContext.tsx)。如果曾經透過/settings儲存品牌設定,你對defaultConfiguration.ts的編輯在該瀏覽器中將不會顯示——請清除CRM.app.configuration的 localStorage 金鑰。每當程式碼變更沒有視覺效果時,請懷疑此情況。
步驟
- 取得資產。 詢問檔案/URL、格式(SVG vs 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 金鑰。 |
| 「一張圖片對兩個主題都很好。」 | 驗證頁面一律使用深色模式金鑰;單一資產在一個背景上會顯示錯誤。警告或推導出第二個變體。 |
| 「我只要重新產生幾個 favicon 尺寸就好。」 | PWA 集合有 34 個 PNG。從單一來源重新產生每個尺寸,或要求提供整組,不要手動編輯少數幾個。 |
紅旗
- 僅編輯兩個標誌資產金鑰中的一個,或互換了淺色/深色檔案。
- 在
defaultConfiguration.ts中變更了標題,但未變更index.html和manifest.json。 - 程式碼變更沒有可見效果,且
CRM.app.configuration儲存未清除。 - 手動編輯 favicon/PWA 尺寸的子集,而非重新產生完整集合。
- 未經要求觸及文件網站標誌(
doc/)。
驗證
make typecheck 僅能捕捉設定金鑰的拼寫錯誤。然後執行 make start 並檢查:兩個主題中的頁首,桌面 + 行動;登入/註冊頁面(深色背景);如果標題變更了,檢查頁首 <h1>、瀏覽器分頁和 PWA 名稱。如果標誌恰好只在一個主題中錯誤,表示兩個金鑰都指向同一個資產,或淺色/深色檔案被互換了。
- 兩個標誌變體都指向正確的淺色/深色資產(以顯示模式命名,而非顏色)。
- 標誌在兩個主題中、桌面 + 行動,以及登入/註冊/確認頁面上都能正確顯示。
- 如果名稱變更了,標題已在
defaultConfiguration.ts、index.html和manifest.json中更新。 - 如果沒有出現視覺效果,表示已清除
CRM.app.configuration的 localStorage 金鑰。 - Favicon/PWA 圖示僅在明確要求時才作為完整集合重新產生。
Favicon & 應用程式圖示(可選)
僅在要求時處理。由 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 網站——除非被要求,否則不要觸及。