本卡屬 FR-150(母卡見上方連結),第 ② 棒:前端。依賴 FR-150.1 的兩支端點。長相對照雛形。
專案總覽動作列多一顆「寄送任務提醒」,按下去開一個彈窗:列出本輪未完成任務,PM 勾要催的、可留言,按寄出。通知紀錄頁要看得出哪幾列是 PM 手動寄的、誰寄的。
src/views/project/ProjectAuditorOverview.vue 2,134 行已超標:只准加一顆鈕+一行掛元件+一個 ref,彈窗邏輯全部放新元件。<Button v-if="isProjectManager && selectedApUid && !selectedAp?.is_finished"
outlined size="small" icon="pi pi-send"
:label="t('lang.job_due_reminder.btn_entry')"
@click="reminderDialogVisible = true" />
<JobDueReminderDialog v-model:visible="reminderDialogVisible" :project-uid="projectId" />
新元件 src/components/grc/job-due-reminder/JobDueReminderDialog.vue;資料與送出放 composable src/composables/useJobDueReminder.js。API 常數加 src/config/api/api.js,Service 繼承 BaseService。
min(960px, 95vw)。標題「寄送任務提醒」,副標一句說明。src/components/grc/job-drawer/JobDueDateText.vue,期限欄要夠寬讓標籤不換行)/上次提醒(「X 分鐘前」「X 小時前」「X 天前」「—」,10 分鐘內用 amber 字)。recipients 為空:勾選框 disabled、整列降透明度、處理人欄「尚未指派」、hover 提示「尚未指派人員,無法寄送」。maxlength=500,右下字數);摘要「將寄給 N 張任務、共 M 位處理人」(M 去重);「取消」「寄出」,沒勾任何卡時寄出 disabled。last_manual_reminded_at 在 10 分鐘內的卡,先 confirm.require「勾選的任務中有 N 張在 10 分鐘內已寄過提醒,確定要再寄一次嗎?」。src/views/project/ProjectAlertNotificationsView.vue:203 標籤是 t(lang.alert_notifications.job_due_${data.stage}),手動列 stage 是 manual_<epoch>,照拼會找不到 key、畫面露出 key 原字串。判 data.stage?.startsWith('manual_') 時改用 lang.alert_notifications.job_due_manual(「管理者提醒」),後接 · ${data.triggered_by_name}。