9.7 KiB
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 延後決策」:
- 第一階段先在現有 Flask/Jinja 內實作新版 design tokens、shell 與 Dashboard。
- 第二階段將活動看板、商品列表、廠商缺貨等核心頁搬到同一套 shell 與元件樣式。
- 第三階段把頁面需要的資料整理成 JSON API,讓日後要切 React/Next.js 時已有清楚資料邊界。
- 若正式引入 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:商品列表與篩選列
- 沿用現有後端篩選、排序、分頁參數:
qcategoryfiltersort_byorderpage
- 商品圖片優先使用憲章規範的 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,但先不重寫全部細節。
推進順序:
templates/ai_intelligence.html/templates/ai_recommend.html/templates/ai_history.html- 原因:AI 挑品、PChome 比對、建議信心度與待補證據是目前商品看板下一步核心工作流。
- 目標:新版 shell、AI 挑品清單、比對嘗試狀態、信心度證據缺口、操作回饋。
templates/auto_import_index.html- 原因:所有真實資料要完整入庫,匯入頁是營運資料進入系統的主要入口。
- 目標:新版 shell、匯入批次狀態、錯誤列、最近匯入紀錄與資料表落點。
templates/sales_analysis.html/templates/daily_sales.html/templates/monthly_summary_analysis.html- 原因:AI 挑品信心度需要銷售額、銷量、成本、毛利等證據支撐。
- 目標:保留原報表功能,改版為可掃描的營運分析工作台。
web/templates/vendor_stockout/index.html、list.html、import.html- 狀態:首頁、列表、匯入已先以
templates/vendor_stockout_*_v2.html方式落地;後續補齊 history、vendor management、send email。
- 狀態:首頁、列表、匯入已先以
- 系統管理相關頁:
templates/settings.html、templates/system_settings.html、templates/user_management.html、templates/logs.html- 目標:新版 shell、設定群組化、狀態/權限/日誌統一呈現。
- 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/summaryGET /api/dashboard/focusGET /api/productsGET /api/products/<i_code>GET /api/products/<i_code>/price-historyGET /api/campaignsGET /api/campaigns/<campaign_id>GET /api/vendors/out-of-stockGET /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. 首批建議任務
第一個實作批次建議控制在小而完整:
- 新增 tokens 與 shell CSS。
- 新增
_ewoooc_shell.html,但不替換舊 navbar。 - 新增一份新版 dashboard template 草稿,先掛在內部測試路由或 feature flag。
- 用同一份後端真實資料渲染新版 Dashboard,不建立假商品或假統計。
- 本機以瀏覽器檢查桌面與手機 viewport。
完成後再決定是否將 / 切到新版。
6. 驗收清單
- 全 UI 文字使用繁體中文。
- 桌面、平板、手機三種寬度都能操作。
- 表格可橫向滾動,文字不重疊。
- 漲價、降價、下架、新品數字與舊版一致。
- 通知、手動更新、匯出、排序、分頁等既有行為不退化。
- 修改後檢查
logs/system.log無新增錯誤。 - 重大更新前依憲章執行備份;正式部署遵守 ADR-011 與部署 SOP。
7. 不做事項
- 不在第一批直接引入 Next.js。
- 不在第一批重寫所有模板。
- 不在 UI 更版時改價格計算、爬蟲邏輯或資料庫 schema。
- 不使用
docker compose ... --remove-orphans。 - 不影響
momo-db容器生命週期。