feat: 新增崗位描述與清單整合功能 v2.1

主要功能更新:
- 崗位描述保存功能:保存後資料寫入資料庫
- 崗位清單自動刷新:切換模組時自動載入最新資料
- 崗位清單檢視功能:點擊「檢視」按鈕載入對應描述
- 管理者頁面擴充:新增崗位資料管理與匯出功能
- CSV 批次匯入:支援崗位與職務資料批次匯入

後端 API 新增:
- Position Description CRUD APIs
- Position List Query & Export APIs
- CSV Template Download & Import APIs

文件更新:
- SDD.md 更新至版本 2.1
- README.md 更新功能說明與版本歷史

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
2025-12-04 12:46:36 +08:00
parent d17af39bf4
commit b2584772c4
31 changed files with 6795 additions and 365 deletions

100
SDD.md
View File

@@ -1,8 +1,8 @@
# HR 基礎資料維護系統 - 軟體設計文件 (SDD)
**文件版本**2.0
**建立日期**2024-12-03
**最後更新**2024-12-04
**文件版本**2.1
**建立日期**2024-12-03
**最後更新**2024-12-04
**文件狀態**Released
---
@@ -22,6 +22,8 @@
| 崗位基礎資料 | 崗位主檔維護,含基礎資料與招聘要求 |
| 職務基礎資料 | 職務類別與屬性設定維護 |
| 崗位描述 | 職責描述、崗位要求與任職條件維護 |
| 崗位清單 | 顯示所有崗位資料,支援查看描述與匯出 |
| 管理者頁面 | 使用者管理與完整崗位資料匯出 |
### 1.3 參考文件
@@ -320,7 +322,33 @@
| DELETE | `/api/jobs/{id}` | 刪除職務 |
| POST | `/api/jobs/{id}/change-code` | 更改職務編號 |
#### 4.1.3 參照資料 API
#### 4.1.3 崗位描述 API
| 方法 | 端點 | 說明 |
|------|------|------|
| GET | `/api/position-descriptions` | 獲取所有崗位描述 |
| GET | `/api/position-descriptions/{position_code}` | 獲取單一崗位描述 |
| POST | `/api/position-descriptions` | 新增或更新崗位描述 |
| PUT | `/api/position-descriptions/{position_code}` | 更新崗位描述 |
| DELETE | `/api/position-descriptions/{position_code}` | 刪除崗位描述 |
#### 4.1.4 崗位清單 API
| 方法 | 端點 | 說明 |
|------|------|------|
| GET | `/api/position-list` | 獲取崗位清單(支援分頁、搜尋) |
| GET | `/api/position-list/export` | 匯出完整崗位清單為 CSV |
#### 4.1.5 CSV 匯入匯出 API
| 方法 | 端點 | 說明 |
|------|------|------|
| GET | `/api/positions/csv-template` | 下載崗位資料 CSV 範本 |
| POST | `/api/positions/import-csv` | 批次匯入崗位資料 |
| GET | `/api/jobs/csv-template` | 下載職務資料 CSV 範本 |
| POST | `/api/jobs/import-csv` | 批次匯入職務資料 |
#### 4.1.6 參照資料 API
| 方法 | 端點 | 說明 |
|------|------|------|
@@ -674,39 +702,40 @@ interface Job {
}
```
### 7.3 崗位描述資料 (JobDescription)
### 7.3 崗位描述資料 (PositionDescription)
```typescript
interface JobDescription {
id: string; // ID (PK)
basicInfo: {
empNo: string; // 工號
empName: string; // 姓名
positionCode: string; // 崗位代碼
versionDate: string; // 版本更新日期
};
positionInfo: {
positionName: string; // 崗位名稱
department: string; // 所屬部門
positionEffectiveDate: string; // 崗位生效日期
directSupervisor: string; // 直接領導職務
positionGradeJob: string; // 崗位職等&職務
reportTo: string; // 匯報對象職務
directReports: string; // 直接下級
workLocation: string; // 任職地點
empAttribute: string; // 員工屬性
};
responsibilities: {
positionPurpose: string; // 崗位設置目的
mainResponsibilities: string;// 主要崗位職責
};
requirements: {
education: string; // 教育程度
basicSkills: string; // 基本技能
professionalKnowledge: string; // 專業知識
workExperienceReq: string; // 工作經驗
otherRequirements: string; // 其他要求
};
interface PositionDescription {
id: string; // 崗位編號 (PK)
positionCode: string; // 崗位編號
positionName: string; // 崗位名稱
effectiveDate: string; // 生效日期
jobDuties: string; // 工作職責
requiredSkills: string; // 所需技能
workEnvironment: string; // 工作環境
careerPath: string; // 職涯發展路徑
createdAt: string; // 建立時間
updatedAt: string; // 更新時間
}
```
### 7.4 崗位清單資料 (PositionListItem)
```typescript
interface PositionListItem {
positionCode: string; // 崗位編號
positionName: string; // 崗位名稱
positionCategory: string; // 崗位類別
positionNature: string; // 崗位性質
headcount: string; // 編制人數
positionLevel: string; // 崗位等級
effectiveDate: string; // 生效日期
minEducation: string; // 最低學歷
salaryRange: string; // 薪資範圍
hasDescription: boolean; // 是否有描述
jobDuties: string; // 工作職責
requiredSkills: string; // 所需技能
workEnvironment: string; // 工作環境
createdAt: string; // 建立時間
updatedAt: string; // 更新時間
}
@@ -807,6 +836,7 @@ const i18n = {
|------|------|------|----------|
| 1.0 | 2024-12-03 | System | 初始版本,包含三大模組設計與 AI 功能 |
| 2.0 | 2024-12-04 | System | 新增 MySQL 資料庫整合、多 LLM API 支援、全局錯誤處理、Gitea 版本控制 |
| 2.1 | 2024-12-04 | System | 新增崗位描述保存功能、崗位清單模組、管理者頁面匯出功能、CSV 批次匯入 |
---