本卡屬 FR-192(母卡 FR-192 母案(同清單上一張)),卡 A-2,批 3。只改 FE(compliance-manager-fe)。依賴:F-1、A-1。
Agent 主控台的「意見回饋」頁本身。側欄「作業」群組最下多一項;頁面是清單加兩個對話框:按「新增回饋」開表單對話框,點任一列開「瀏覽回饋」對話框。表單的欄位、順序、名稱、版面與主系統回饋表單完全相同(標題整行、類別與功能並排、內文用主站同一支 TipTap 編輯器、檔案上傳用 F-1 的共用元件),「功能」固定「Agent 主控台」反灰。清單的回傳狀態欄與「立即重試」照「執行紀錄」頁。🔴 文案全部依 i18n 既有用語重寫,雛形的字一個都不複製。本卡不做編輯與刪除鈕(A-4)。
new(照型):表格與回傳狀態欄照 console/views/Runs.vue(狀態字沿用 agent_console_runs 的 sync 鍵);新增表單欄位照 src/views/feedback/system/SystemFeedbackForm.vue(標題整行、類別+功能並排、內文 @/views/project-summary-report/TipTapEditor.vue、檔案上傳 @/components/common/AttachmentDropList.vue);對話框照 console/views/Logs.vue 的 Dialog;extend:router.js 加一項
repo:~/Projects/Billows/Audit-Manager/compliance-manager-fe
改既有:console/router.js(feedback 項:group work、scope null)
改既有:console/main.js(若 TipTap 需全域註冊才加)
新開:console/views/Feedback.vue
新開:console/feedbackApi.js
新開:console/feedback.js(狀態對照、錯誤鍵)
新開:src/config/locales/i18n/zh-tw/agent-console-feedback.json、en/agent-console-feedback.json
console/router.js 加 { name: 'feedback', group: 'work', icon: 'pi pi-comment', view: 'Feedback', scope: null, dimOn: [] },放 logs 之後;只有本卡碰 router.js。console/views/Feedback.vue:上半 DataTable(送出時間/類別/標題/檔案數/回傳主系統/操作),列與狀態欄照 Runs.vue(col_sync 三態、retry 鈕、sync_error_* 文案沿用 agent_console_runs 鍵);工具列右側「新增回饋」鈕。點列開「瀏覽回饋」Dialog(照 Logs.vue 第 64 行 Dialog 寫法):欄位唯讀、附件列可預覽(走 ReportPreviewDialog 或既有 FilePreviewPane)、回傳失敗時頂部 hint-bar--error 一列原因+「立即重試」。本卡瀏覽對話框底部只有「關閉」(編輯/刪除是 A-4)。src/views/feedback/system/SystemFeedbackForm.vue 第 256~300 行——標題 InputText maxlength=150 整行;類別 Dropdown(選項打 GET /console/api/feedback-labels,空的時候新增鈕 disabled 並 tooltip「尚未從主系統取得類別」)與功能 Dropdown disabled 固定「Agent 主控台」並排;內文 @/views/project-summary-report/TipTapEditor.vue;檔案上傳 @/components/common/AttachmentDropList.vue。必填驗證照主系統(vuelidate)。送出:multipart json+file[] 打 POST /console/api/feedbacks;成功關閉並重載清單。console/feedbackApi.js(照 logsApi.js)、console/feedback.js(狀態對照、錯誤鍵)。src/config/locales/i18n/zh-tw/agent-console-feedback.json、en/…,命名空間 agent_console_feedback;🔴 每一句自己寫,沿用主系統 feedback_manage 既有鍵的直接 t('lang.feedback_manage.xxx')(標題、類別、功能、內文、檔案上傳、新增回饋、瀏覽回饋、必填訊息),不要複製一份。回寫列出沿用哪些、新增哪些。npm run build:CONSOLE,回寫 build 前後體積(TipTap 進 console);npm run lint;驗收 grep 兩條都要 0。npm run build:CONSOLE 過;側欄「作業」群組最下多「意見回饋」;按「新增回饋」開對話框,欄位與主系統表單同、功能反灰「Agent 主控台」、沒拉到類別時新增鈕反灰;儲存後清單立刻一列「待回傳」;點列開「瀏覽回饋」對話框,回傳失敗的頂部有原因與立即重試;grep -rn '本案新增\|審稿\|D[0-9]\|場景' console/views/Feedback.vue src/config/locales/i18n/*/agent-console-feedback.json 為 0;grep border-left console/ 為 0;回寫列出文案來源(沿用哪些鍵、新增哪些鍵)
~/Projects/Billows/Audit-Manager/compliance-manager-be/docs/features/FR-192-2611-agent-console-feedback/design.md §3 決策定案、§5 詳細設計(本卡那節)、§6 拆卡表本卡那列、§8 風險;討論稿 discussion.md §4 只在想知道「為什麼這樣裁」時看~/Projects/Billows/Audit-Manager/compliance-manager-be/docs/features/FR-192-2611-agent-console-feedback/prototype/index.html(純畫面,只取結構與資訊順序;文案依 i18n 重寫)guidant_agent/scan/app/local_runs.py(本機先存+同步欄位)、sync/app/outbox.py(待回傳佇列)、console/api/runs_routes.py(清單/404/resend)、files/app/blob_ops.py(附件存本機);主系統 api/source_scan/routes/agent_manual_scan_route.py(Agent 收單端點先例)、infra/upload_file/remote_agent_adapter.py(Agent 檔參照)、core/plugins/_agent_config_sections.py+_agent_config_notify.py(設定通道)、core/plugins/issue.py(jedi-issue 接線);jedi-issue app/feedback/service/feedback_service.py、api/routes/feedback_route.py、plugin/contract.py(SchemaExtensions);jedi-remote-agent app/service/local_run_service.py(ingest 形狀)、migrations/011-remote-agent-offline-operators.sql(RLS/GRANT 先例);FE src/views/feedback/system/SystemFeedbackForm.vue、console/views/Runs.vue、console/views/Logs.vue(Dialog)、src/views/source-scan/SourceFilePicker.vue(拖放)