建議 model:sonnet/effort:medium — 純前端改造,資料形狀已由 T-3.3 定死;但 aoLookup 的 key 改動是全頁生死線。
本卡屬 FR-107(母卡 CM-1843)第 .3 棒(子需求卡 CM-1846),子任務 T-3.4:把既有的審閱頁改成讀新的分類結果,並做一個批次列表頁。
系統已經有一個「審閱頁」——AI 分類完之後,人工在上面看每份檔對到哪些檢查點,可以加、可以減、可以標「不適用」,然後儲存。這張卡把這個頁面留著畫面、換資料來源。
🔴 最關鍵的改動:頁面現在用 aoLookup.js:15 硬組出 ${ctrl.id}[${ao.letter}] 當作檢查點的 key(例如 AC.L1-3.1.1[a])。後端已經改成用 part_id(AC.L1-3.1.1_obj.2)。這行不改,整頁會對不到任何東西(design.md 風險 6)。字母仍由後端帶 ao_letter 過來給畫面顯示。
另外新增一個批次列表頁:某個稽核輪次底下有哪些批次、各是什麼狀態、可以進去審閱。分類中的狀態靠輪詢批次狀態(取代舊的 job 輪詢)。
前端 repo ~/Projects/Billows/Audit-Manager/compliance-manager-fe/(branch feature/review)
src/views/evidence-classification/EvidenceClassificationReview.vue ← 改資料來源
src/composables/ useEvidenceClassification.js ← 改吃 run_uid
src/.../aoLookup.js:15
🔴 現在:`${ctrl.id}[${ao.letter}]` 硬組 key
改成:以 part_id 為 key,ao_letter 只用於顯示
src/views/evidence-classification/EvidenceBatchList.vue ← 新頁
src/router/index.js:919
現在以 :runFolderId 定址 ← 🔴 舊路徑保留(舊 run 要打得開)
新增 /project/projects/:id/evidence-batches/:batchUid/review/:runUid
src/config/api/api.js:495-504 既有十支常數 ← 保留;新增 run_uid 版的常數
i18n 語系檔
GET /api/1.0/classification-run/<run_uid>/state 讀審閱結果
PUT /api/1.0/classification-run/<run_uid>/state 存審閱結果
GET /api/1.0/classification-run/<run_uid>/file/<file_uid>/preview 預覽檔案
GET /api/1.0/evidence-batches?round_uid=&status= 批次列表(分頁)
GET /api/1.0/evidence-batches/<batch_uid> 批次詳情(含 run)
POST /api/1.0/evidence-batches/<batch_uid>/classify 開始分類
state 的資料形狀(🔴 與舊的不同)
檔案 key:file_uid(原本是 Drive file id)
AO key: part_id,形如 AC.L1-3.1.1_obj.2(原本是 AC.L1-3.1.1[a])
每筆有 ao_letter 欄位 → 畫面顯示用它,但配對一律用 part_id
aoLookup.js,再改頁面。這支是配對的核心,改完先用假資料確認配得上,再接真 API。index.js:919 用 :runFolderId 的那條路由不要刪,舊的分類結果還要從舊入口打得開(D3)。新路徑是另外加的。GET /evidence-batches/<batch_uid>)。批次狀態是存在資料庫的,BE 重啟後也讀得到,而且後端有心跳逾時機制會把卡住的批次標成失敗——所以前端輪到 failed 要顯示失敗與重跑按鈕。classifying 時顯示「分類中」,上傳按鈕禁用(後端也會擋回 409,但前端不該顯示點了會失敗的按鈕)。docs/claude/frontend-overview.md(37+ 個現成 GRC 元件、design tokens、必填 UX 規則)再動手,不要自己重畫。ao_letter 顯示),但配對正確(part_id 為 key)——隨機挑三個檢查點對照後端 state 的內容確認沒錯位。