# EwoooC 前端更版推進路線圖 > 建立日期:2026-04-30 > 依據:`MOMO Pro/HANDOFF.md`、`MOMO Pro/design-tokens.css`、`MOMO Pro/app/*.jsx`、現有 `templates/` 與 `routes/` > 使用者確認:後續前端視覺呈現風格與 UI/UX,以 `MOMO Pro/` 新版本為主要依據。 ## 1. 目標 將 `MOMO Pro/` 內的 EwoooC 後台原型落地到正式 Flask 系統,先完成使用者可感知的新版後台殼層與核心頁,再逐步整理 API 與模板結構。 本次更版的視覺方向以原型為準: - 米色工作台背景、暖墨文字、焦糖橘 accent。 - 側邊欄 + 頂部工具列取代目前頂部橫向 navbar。 - 數字、ID、時間、價格使用等寬字體。 - Dashboard 採「監控總覽 / 焦點數據 / 商品列表」工作台結構。 - 表格改為安靜米色表頭,不延續舊紫藍漸層表頭。 - 新增或改版頁面不得再以舊紫藍 Bootstrap 後台作為主要視覺基準。 - 所有頁面內容必須使用真實資料來源;禁止用 mock data、假頁面或展示用 placeholder 冒充完成。 ## 2. 現況判斷 目前正式系統不是 React / Next.js,而是 Flask + Jinja + Bootstrap: - 主入口:`app.py` - 核心路由:`routes/dashboard_routes.py`、`routes/edm_routes.py`、`routes/vendor_routes.py` - 主要模板:`templates/dashboard.html`、`templates/edm_dashboard.html`、`templates/base.html`、`templates/components/_navbar.html` - 廠商缺貨模板另在:`web/templates/vendor_stockout/` 重要限制: - 多數頁面不是繼承 `base.html`,而是各自包含完整 HTML、CSS 與 navbar include。 - `templates/dashboard.html`、`templates/edm_dashboard.html`、`templates/sales_analysis.html`、`templates/daily_sales.html` 都是大型獨立頁。 - 因此不適合一開始就全站硬切 Next.js,也不適合只改 `base.html` 期待全站換版。 ## 3. 技術路線 採「Flask 先落地、API 漸進抽離、React/Next.js 延後決策」: 1. 第一階段先在現有 Flask/Jinja 內實作新版 design tokens、shell 與 Dashboard。 2. 第二階段將活動看板、商品列表、廠商缺貨等核心頁搬到同一套 shell 與元件樣式。 3. 第三階段把頁面需要的資料整理成 JSON API,讓日後要切 React/Next.js 時已有清楚資料邊界。 4. 若正式引入 Next.js、TanStack Query、Tailwind 等新前端建置系統,需另立 ADR。 這樣做的好處是可以快速讓正式系統出現新版前端,同時避免一次改動部署架構、認證、API、模板與容器。 `MOMO Pro/` 目錄定位為「最新前端原型來源」,不是正式 Flask runtime 依賴。正式落地時只抽取必要的設計 token、互動模式與版面結構到 `web/static/css/`、`templates/`、路由與測試;不把 prototype 的 React/Babel 工作檔直接部署成正式頁。待全站核心頁面同步完成後,再將 `MOMO Pro/` 歸檔或移除,避免專案長期保留兩套前端真相來源。 ## 4. 分階段工作 ### Phase 0:設計系統落地 目標:讓 Flask 模板可使用原型視覺語言。 建議檔案: - 新增 `static/css/ewoooc-tokens.css` - 新增 `static/css/ewoooc-shell.css` - 新增 `templates/components/_ewoooc_shell.html` - 保留 `templates/components/_navbar.html` 給尚未改版頁面使用 工作內容: - 從 `MOMO Pro/design-tokens.css` 搬移 CSS variables。 - 定義 `.momo-app`、`.momo-mono`、`.momo-label`、button、badge、card、table、responsive 工具 class。 - 建立新版 sidebar/topbar Jinja 組件,對應現有路由: - 商品看板 `/` - 活動看板 `/edm` - 分析報表 `/sales_analysis`、`/daily_sales`、`/growth_analysis`、`/monthly_summary_analysis` - 廠商缺貨 `/vendor-stockout` - AI 助手 `/ai_recommend`、`/ai_history` - 雲端匯入 `/auto_import` - 系統管理相關頁 驗收: - 桌面寬度 sidebar 固定,內容區可滾動。 - 手機寬度可折疊或轉為 drawer,不遮擋主要內容。 - 未改版頁面仍可正常載入。 ### Phase 1:Dashboard 第一版更版 目標:先替換使用頻率最高的商品看板。 建議檔案: - 改造 `templates/dashboard.html` - 視需要新增 `templates/components/_product_table.html` - 視需要在 `routes/dashboard_routes.py` 補齊 template 欄位,不改既有價格邏輯 工作內容: - 將原型 `page-dashboard.jsx` 轉成 Jinja + CSS: - 區塊 01:監控總覽 KPI - 區塊 02:焦點數據 - 區塊 03:商品列表與篩選列 - 沿用現有後端篩選、排序、分頁參數: - `q` - `category` - `filter` - `sort_by` - `order` - `page` - 商品圖片優先使用憲章規範的 CDN URL: - `https://m.momoshop.com.tw/moscdn/goods/{i_code}_m.webp` - 保留既有通知、匯出、價格歷史 modal 或 API 行為。 驗收: - `/` 在桌面與手機都可操作。 - 搜尋、分類、漲價、降價、新上架、下架篩選結果與舊版一致。 - 排序與分頁不退化。 - 價格漲跌邏輯不變,不碰 `product.momo_id`。 ### Phase 2:活動看板更版 目標:把促銷活動頁改為原型的 Campaigns 結構。 建議檔案: - 改造 `templates/edm_dashboard.html` - 視需要整理 `routes/edm_routes.py` 的頁面資料 shape 工作內容: - 將五個活動頁整合成同一視覺: - 限時搶購 `/edm` - 1.1 狂歡 `/festival` - 母親節 `/mothers_day` - 520 情人節 `/valentine_520` - 勞動節 `/labor_day` - 實作活動 segmented tabs、活動 hero、活動 KPI、限時搶購 timeline、分類 chips、商品列表。 - 手動更新、發送通知沿用既有 API,不改排程邏輯。 驗收: - 五個活動入口都可進入。 - 現有 sort query 行為保留。 - 手動更新與通知按鈕不破壞 CSRF 與既有 API。 ### Phase 3:核心營運頁統一殼層 目標:讓常用營運頁進入新版 shell,但先不重寫全部細節。 推進順序: 1. `templates/ai_intelligence.html` / `templates/ai_recommend.html` / `templates/ai_history.html` - 原因:AI 挑品、PChome 比對、建議信心度與待補證據是目前商品看板下一步核心工作流。 - 目標:新版 shell、AI 挑品清單、比對嘗試狀態、信心度證據缺口、操作回饋。 2. `templates/auto_import_index.html` - 原因:所有真實資料要完整入庫,匯入頁是營運資料進入系統的主要入口。 - 目標:新版 shell、匯入批次狀態、錯誤列、最近匯入紀錄與資料表落點。 3. `templates/sales_analysis.html` / `templates/daily_sales.html` / `templates/monthly_summary_analysis.html` - 原因:AI 挑品信心度需要銷售額、銷量、成本、毛利等證據支撐。 - 目標:保留原報表功能,改版為可掃描的營運分析工作台。 4. `web/templates/vendor_stockout/index.html`、`list.html`、`import.html` - 狀態:首頁、列表、匯入已先以 `templates/vendor_stockout_*_v2.html` 方式落地;後續補齊 history、vendor management、send email。 5. 系統管理相關頁:`templates/settings.html`、`templates/system_settings.html`、`templates/user_management.html`、`templates/logs.html` - 目標:新版 shell、設定群組化、狀態/權限/日誌統一呈現。 6. PChome / 趨勢 / 其他工具頁:`templates/pchome_crawler.html`、`templates/price_comparison.html`、`templates/trends.html` - 目標:接入新版 shell 與資料完整性狀態,不改核心爬蟲規則。 工作內容: - 先移除各頁重複 navbar 與 body 背景,接入新版 shell。 - 表格、按鈕、badge 改用 tokens。 - 大型功能頁不要在同一 PR 同時重構 JS 行為。 驗收: - 原本表單、匯入、寄信、批次操作可以正常執行。 - 手機版不出現文字重疊或表格爆版。 ### Phase 4:API 邊界整理 目標:為未來 React/Next.js 或更完整前端分離鋪路。 建議 API: - `GET /api/dashboard/summary` - `GET /api/dashboard/focus` - `GET /api/products` - `GET /api/products/` - `GET /api/products//price-history` - `GET /api/campaigns` - `GET /api/campaigns/` - `GET /api/vendors/out-of-stock` - `GET /api/schedule/status` 注意: - API 計算邏輯必須與 dashboard 現有 `get_full_dashboard_data()` / `get_consolidated_data()` 一致。 - 商品唯一識別使用 `product.i_code`。 - 不為了前端重寫而引入 N+1 查詢。 ### Phase 5:是否引入 React/Next.js 的決策 只有在以下條件成立時才啟動: - Dashboard / Campaigns 已有穩定 JSON API。 - 認證與 CSRF 邊界已確認。 - Docker / CD pipeline 可承接 Node build。 - 已立 ADR,明確記錄 Flask-only、Hybrid、Next.js 分離三種方案取捨。 ## 5. 首批建議任務 第一個實作批次建議控制在小而完整: 1. 新增 tokens 與 shell CSS。 2. 新增 `_ewoooc_shell.html`,但不替換舊 navbar。 3. 新增一份新版 dashboard template 草稿,先掛在內部測試路由或 feature flag。 4. 用同一份後端真實資料渲染新版 Dashboard,不建立假商品或假統計。 5. 本機以瀏覽器檢查桌面與手機 viewport。 完成後再決定是否將 `/` 切到新版。 ## 6. 驗收清單 - 全 UI 文字使用繁體中文。 - 桌面、平板、手機三種寬度都能操作。 - 表格可橫向滾動,文字不重疊。 - 漲價、降價、下架、新品數字與舊版一致。 - 通知、手動更新、匯出、排序、分頁等既有行為不退化。 - 修改後檢查 `logs/system.log` 無新增錯誤。 - 重大更新前依憲章執行備份;正式部署遵守 ADR-011 與部署 SOP。 ## 7. 不做事項 - 不在第一批直接引入 Next.js。 - 不在第一批重寫所有模板。 - 不在 UI 更版時改價格計算、爬蟲邏輯或資料庫 schema。 - 不使用 `docker compose ... --remove-orphans`。 - 不影響 `momo-db` 容器生命週期。