本卡屬 FR-147,棒 3 第二張(FE)。依賴 3a 的 API。新子元件掛進資源庫頁,原檔只加一行與刪一顆鈕。
資源庫頁「控制項與評估目標」每條評估目標展開後,在既有欄位(實作狀態、缺失、建議附件、參考程序書)之後多一段「任務說明」:每個任務一張小卡,三格可填(任務名稱、描述、指南)。專案沒啟動時一張;啟動後列專案目前任務,多張時上方一條流程帶顯示先後,小卡右上角狀態徽章與指派人(唯讀)。左樹每條控制項右邊顯示「已填/任務數」。每條評估目標右邊原本的「流程編輯器」按鈕拿掉(決策者裁顧問不改流程)。雛形:prototype/library-tasks.html(已裁版)。
/Users/chouraymond/Projects/Billows/Audit-Manager/compliance-manager-fe/src/views/module_frame/ModuleFrameTemplateEditView.vue:1479-1487 AO 的流程編輯器 <button>(v-if=ao.workflow_template_uid, @click=openBpmnEditor)← 刪
/Users/chouraymond/Projects/Billows/Audit-Manager/compliance-manager-fe/src/views/module_frame/ModuleFrameTemplateEditView.vue:108 openBpmnEditor() ← 刪(確認無其他呼叫者)
/Users/chouraymond/Projects/Billows/Audit-Manager/compliance-manager-fe/src/views/module_frame/ModuleFrameTemplateEditView.vue:1496-1560 AO 展開面板;「參考程序書」區塊之後掛新元件
/Users/chouraymond/Projects/Billows/Audit-Manager/compliance-manager-fe/src/components/grc/planning/AoTaskForm.vue:395-420 三格的既有長相(label+InputText/Textarea)照抄
/Users/chouraymond/Projects/Billows/Audit-Manager/compliance-manager-fe/src/config/api/api.js 加 MODULE_FRAME_TASK_GUIDANCE 常數
/Users/chouraymond/Projects/Billows/Audit-Manager/compliance-manager-fe/src/config/capabilities.js:135 CAP.OSCAL_RESOURCE_LIBRARY_UPDATE 既有
src/components/grc/module-frame/AoTaskGuidanceSection.vue:props moduleFrameUid、controlCode、readonly;mounted 打 GET;渲染每 AO 的 tasks(source=project 且 tasks>1 時先畫流程帶);三格 @change 累積到 dirty map,expose flush() 回 [{key,name,description,guide}];唯讀時三欄文字顯示(照 FR-139 T-16 的唯讀改文字做法)。ModuleFrameTemplateEditView.vue:AO 面板「參考程序書」之後一行 <AoTaskGuidanceSection ref=... :module-frame-uid :control-code="selectedControl.code" :readonly="isVersionView || writeDisabled()" />;頁面既有「儲存」流程多呼叫一次 flush() 後 PUT;刪流程編輯器鈕與 openBpmnEditor。原檔淨增不得超過 10 行。summary,每條控制項名稱右邊 text-xs muted 顯示 filled/total。v-can="CAP.OSCAL_RESOURCE_LIBRARY_UPDATE";i18n 三語 key 走 lang.module_frame.task_guidance_*。border-left 粗框(交稿前 grep -n border-left)。FE 不寫;跑 npm run build 與 npx vitest run src/**tests**/v-can-guards.spec.js 綠。
ModuleFrameTemplateEditView.vue 1,954 行、job_import_service.py 546 行)一律新開檔再一行呼叫,不往裡塞。