feat(tables): migrate /tables page from Jinja2 to Vue 3 + Vite

Rewrite 237-line vanilla JS + Jinja2 template into Vue 3 SFC components
(App.vue, TableCatalog.vue, DataViewer.vue, useTableData composable).
Establishes apiPost POST request pattern for pure Vite pages. Removes
templates/index.html, updates Vite entry to HTML, and Flask route to
send_from_directory. Includes sql_fragments WHERE_CLAUSE escaping fix,
updated integration tests, and OpenSpec artifact archive.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
egg
2026-02-09 14:52:14 +08:00
parent 44b89599a4
commit dcbf6dcf1f
23 changed files with 1483 additions and 838 deletions

View File

@@ -36,11 +36,15 @@
| 部署自動化 | ✅ 已完成 |
| Portal 動態抽屜導覽管理 | ✅ 已完成 |
| QC-GATE 即時狀態報表Vue 3 + Vite | ✅ 已完成 |
| 數據表查詢頁面 Vue 3 遷移 | ✅ 已完成 |
| 設備快取 DataFrame TTL 一致性修復 | ✅ 已完成 |
---
## 開發歷史Vite 重構後)
- 2026-02-09完成數據表查詢頁面`/tables`Vue 3 遷移 — 第二個純 Vite 頁面,建立 `apiPost` POST 請求模式237 行 vanilla JS 重寫為 Vue 3 SFC 元件。
- 2026-02-09修復設備快取 DataFrame TTL 一致性問題 — process-level DataFrame30s TTL過期後 derived index 仍為 ready導致 `/api/resource/status` 回傳空資料。新增 Redis fallback reload。
- 2026-02-09新增 QC-GATE 即時狀態報表 — 第一個純 Vue 3 + Vite 頁面(脫離 Jinja2建立後續前端遷移架構模式。
- 2026-02-09完成 Portal 動態抽屜導覽管理sidebar drawer/page 配置改為 admin 可管理。
- 2026-02-07完成 Flask + Vite 單一 port 架構切換,舊版 `DashBoard/` 停用。
@@ -450,9 +454,9 @@ A: 請確認瀏覽器允許下載檔案,並檢查查詢結果是否有資料
### Portal 入口頁面
透過側邊欄抽屜分組導覽切換各功能模組:
- **報表類**WIP 即時概況、QC-GATE 即時狀態
- **查詢類**WIP 明細查詢、Hold 狀態分析、設備狀態監控、設備歷史查詢、數據表查詢工具
- **開發工具**admin onlyExcel 批次查詢、TMTT 不良分析等
- **報表類**WIP 即時概況、設備即時概況、設備歷史績效、QC-GATE 即時狀態
- **查詢類**設備維修查詢、批次追蹤工具、TMTT 不良分析
- **開發工具**admin only數據表查詢、Excel 批次查詢、頁面管理、效能監控
- 抽屜/頁面配置可由管理員動態管理(新增、重排、刪除)
### WIP 即時概況
@@ -502,6 +506,15 @@ A: 請確認瀏覽器允許下載檔案,並檢查查詢結果是否有資料
- 站點排序依 DW_MES_SPEC_WORKCENTER_V 製程順序
- **技術架構**:第一個純 Vue 3 + Vite 頁面,完全脫離 Jinja2
### 數據表查詢工具
- 顯示所有 DWH 表格的分類卡片目錄(即時數據表/現況快照表/歷史累積表/輔助表)
- 大表標記:超過 1,000 萬筆資料的表格顯示 badge 提示
- 選擇表格後自動載入欄位資訊,每欄提供篩選輸入
- 支援 Enter 鍵或「查詢」按鈕觸發查詢(預設回傳最近 1000 筆)
- 使用中的篩選條件顯示為可移除的 tag支援一鍵清除全部
- **技術架構**:第二個純 Vue 3 + Vite 頁面,使用 `apiPost` 建立 POST 請求模式
### 管理員功能
- LDAP 認證登入(支援本地測試模式)
@@ -705,6 +718,16 @@ conda run -n mes-dashboard python scripts/run_cache_benchmarks.py --enforce
### 2026-02-09
- 完成數據表查詢頁面(`/tables`Vue 3 遷移:
- 237 行 vanilla JS + Jinja2 模板重寫為 Vue 3 SFC 元件App.vue、TableCatalog.vue、DataViewer.vue
- Vite entry 從 `main.js` 改為 `index.html`Flask route 改為 `send_from_directory`
- 使用 `apiPost` 建立純 Vite 頁面 POST 請求模式
- 移除 Jinja2 模板 `templates/index.html`,完全脫離 `window.MesApi` 依賴
- 修復設備即時概況(`/resource`)資料為空問題:
- 根因process-level DataFrame cache30s TTL過期後derived index 仍標記 `ready: true`
- `_records_from_index()` 取得 `df=None` 時直接回傳空 list
- 修復:新增 `_get_cached_data()` fallback從 Redis 重新載入 DataFrame
- 修正 `page_status.json` 設備頁面名稱:「機台狀態」→「設備即時概況」
- 新增 QC-GATE 即時狀態報表頁面(`/qc-gate`
- 第一個純 Vue 3 + Vite 頁面,完全脫離 Jinja2 模板
- ECharts 堆疊條圖顯示各 QC-GATE 站點 LOT 分佈(按 6hr 時間分級)
@@ -816,5 +839,5 @@ conda run -n mes-dashboard python scripts/run_cache_benchmarks.py --enforce
---
**文檔版本**: 5.0
**文檔版本**: 5.1
**最後更新**: 2026-02-09