公告系統(Announcements)
登入頁「最新消息」與系統公告的維護入口,HR 後台可增修。
資料表
Announcement:Id / Title(nvarchar 300) / Tag(HR|系統|指引) / LinkUrl / LinkLabel / IsPinned / PublishAt / ExpireAt / IsPublished / CreatedBy / CreatedAt / UpdatedAt
Migration:20260419022449_AddAnnouncements
API
| 端點 | Auth | 說明 |
|---|---|---|
GET /api/announcements/public | 免登入 | 登入頁使用。回最新 5 則已上架且未過期(依 IsPinned DESC → PublishAt/CreatedAt DESC) |
GET /api/announcements/login-meta | 免登入 | 回傳進行中週期 chip 資料 + 使用手冊 URL(取 Login:ManualUrl SystemSetting,空則前端預設 /manuals/PAM_一般考核主管操作手冊.pdf) |
GET /api/hr/announcements | HR/Admin | 列表(含未上架與已過期) |
POST /api/hr/announcements | HR/Admin | 新增 |
PUT /api/hr/announcements/{id} | HR/Admin | 編輯 |
DELETE /api/hr/announcements/{id} | HR/Admin | 刪除 |
自動公告(部門等第審核通過)
GradeReviewService.ConfirmDepartmentAsync 確認成功後(僅 GradeReview,Settlement 太晚不需要)自動建立 Announcement:
- Title:
【{部門}】{year} 年{年中/年終}考核已全數完成! - Tag:系統;ExpireAt = 14 天;以 Title 去重避免 HR 退回重確認時重複發布
- Program.cs 啟動補建:遍歷所有 Confirmed GradeReview 補公告(冪等)
Session Chip 邏輯(login-meta)
找 Status == "Active" 且日期在 StartDate ~ EndDate 區間的週期(若無則取任一 Active),再從 Reviewer1EndDate / Reviewer2EndDate / ApproverEndDate / EndDate 中挑最近一個尚未過期的截止日,回傳「{year} {periodTypeLabel}進行中 · {dueLabel}剩 {days} 天」。無進行中週期時 chip 隱藏。
前端頁面
- HR 後台:AnnouncementsPage.tsx — 列表 + 編輯 Dialog(標題 / 標籤 / 置頂 / 連結 / 上下架日期 / 已上架)+ 刪除確認
- 路由:
/hr/announcements,側邊欄 iconMegaphone - 登入頁:LoginPage.tsx — 使用
useQuery(['announcements','public'])+useQuery(['announcements','login-meta'])
HR 側邊欄命名
原本側邊欄「公告管理」項目(指向 /hr/notifications)實際為催繳通知系統,已改名為「通知管理」;新「公告管理」項目指向 /hr/announcements。