Files
ewoooc/docs/guides/frontend_upgrade_roadmap.md
OoO 7d46ff9ba5
All checks were successful
CD Pipeline / deploy (push) Successful in 2m9s
feat(competitor): persist match attempts
2026-05-01 20:56:17 +08:00

234 lines
9.7 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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 1Dashboard 第一版更版
目標:先替換使用頻率最高的商品看板。
建議檔案:
- 改造 `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 4API 邊界整理
目標:為未來 React/Next.js 或更完整前端分離鋪路。
建議 API
- `GET /api/dashboard/summary`
- `GET /api/dashboard/focus`
- `GET /api/products`
- `GET /api/products/<i_code>`
- `GET /api/products/<i_code>/price-history`
- `GET /api/campaigns`
- `GET /api/campaigns/<campaign_id>`
- `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` 容器生命週期。