Files
DashBoard/openspec/changes/archive/2026-02-07-hold-detail-vite-hardening/design.md
2026-02-08 08:30:48 +08:00

51 lines
2.3 KiB
Markdown
Raw 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.

## Context
目前主要報表頁多已採 `frontend_asset(...) + Vite module + inline fallback` 模式,但 `hold_detail` 仍停留在純 inline script。這造成
- 例外頁面無法受益於共用模組治理與 build pipeline。
- 動態表格字串拼接保留 XSS 風險。
- 長期維護出現「主流程已模組化、單頁特例未遷移」的不一致。
## Goals / Non-Goals
**Goals:**
-`hold_detail` 與其他報表頁採同一套 Vite 載入模式。
- 保留既有功能語意(篩選、分頁、刷新、導航)與 MesApi 呼叫契約。
- 將高風險動態輸出改為 escape-safe 渲染。
- 加上模板整合測試覆蓋 module/fallback 分支。
**Non-Goals:**
- 不改後端資料模型與查詢邏輯。
- 不重設 UI 視覺樣式與互動流程。
- 不移除 fallback本次仍保留回退能力
## Decisions
### Decision 1: 以「抽取 inline script 到 Vite entry」完成遷移
- 選擇:新增 `frontend/src/hold-detail/main.js`,以既有邏輯為基礎遷移,模板改為 module 優先、fallback 次之。
- 理由:最小風險完成頁面納管,避免一次性重寫行為。
### Decision 2: 保持全域 handler 相容
- 選擇module 內維持 `window` 介面供既有 `onclick` 使用。
- 理由:降低模板 DOM 大改成本,優先保證 parity。
### Decision 3: 在 module 與 fallback 皆補 escape 防護
- 選擇:對 workcenter/package/lot 資料動態輸出加入 escape/quoted-string 保護。
- 理由:避免 fallback 成為安全漏洞旁路。
## Risks / Trade-offs
- [Risk] 複製遷移過程遺漏函式導致 runtime error → Mitigation: build + template test 覆蓋 module 路徑。
- [Risk] fallback 與 module 雙軌造成維護成本 → Mitigation: 保持語意對齊並在後續階段評估移除 fallback。
- [Risk] escape 導致個別顯示格式變化 → Mitigation: 僅防注入,不改原欄位值與排序/篩選語意。
## Migration Plan
1. 增加 `hold-detail` Vite entry 與 module 檔案。
2. 調整 `hold_detail.html` scripts block 為 module/fallback 雙軌。
3. 補強 module + fallback 的動態輸出 escape。
4. build 與 pytest 驗證,更新 tasks。
## Open Questions
- 是否在下一階段移除 `hold_detail` fallback inline script以降低雙路徑維運成本。