234 lines
9.7 KiB
Markdown
234 lines
9.7 KiB
Markdown
# 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/<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` 容器生命週期。
|