diff --git a/src/api/hrm/courseware/index.ts b/src/api/hrm/courseware/index.ts
new file mode 100644
index 000000000..7107a4e9b
--- /dev/null
+++ b/src/api/hrm/courseware/index.ts
@@ -0,0 +1,55 @@
+import request from '@/config/axios'
+
+// 课件 VO
+export interface CoursewareVO {
+ id: number // 主键ID
+ coursewareName: string // 课件名称
+ author: number // 作者
+ processInstanceId: string // 工作流编号
+ auditStatus: number // 审批状态
+ courseType: number // 课程类型
+ suitableDept: string // 适合学习的部门. 逗号分隔的部门id
+ content: string // 课件内容
+ videoAttachment: string // 视频附件
+ outline: string // 课件大纲
+}
+
+// 课件 API
+export const CoursewareApi = {
+ // 查询课件分页
+ getCoursewarePage: async (params: any) => {
+ return await request.get({ url: `/hrm/courseware/page`, params })
+ },
+
+ // 查询课件详情
+ getCourseware: async (id: number) => {
+ return await request.get({ url: `/hrm/courseware/get?id=` + id })
+ },
+
+ // 新增课件
+ createCourseware: async (data: CoursewareVO) => {
+ return await request.post({ url: `/hrm/courseware/create`, data })
+ },
+
+ // 修改课件
+ updateCourseware: async (data: CoursewareVO) => {
+ return await request.put({ url: `/hrm/courseware/update`, data })
+ },
+
+ // 删除课件
+ deleteCourseware: async (id: number) => {
+ return await request.delete({ url: `/hrm/courseware/delete?id=` + id })
+ },
+
+ // 导出课件 Excel
+ exportCourseware: async (params) => {
+ return await request.download({ url: `/hrm/courseware/export-excel`, params })
+ },
+
+// ==================== 子表(课件详情) ====================
+
+ // 获得课件详情列表
+ getCoursewareDetailListByCoursewareId: async (coursewareId) => {
+ return await request.get({ url: `/hrm/courseware/courseware-detail/list-by-courseware-id?coursewareId=` + coursewareId })
+ }
+}
\ No newline at end of file
diff --git a/src/api/hrm/coursewaredetail/index.ts b/src/api/hrm/coursewaredetail/index.ts
new file mode 100644
index 000000000..d2de7985b
--- /dev/null
+++ b/src/api/hrm/coursewaredetail/index.ts
@@ -0,0 +1,47 @@
+import request from '@/config/axios'
+
+// 课件详情 VO
+export interface CoursewareDetailVO {
+ id: number // 主键ID
+ coursewareId: number // 课件ID,关联courseware表
+ question: string // 题目
+ questionType: number // 题目类型(选择、填空、论述)
+ answer: string // 答案
+ optionA: string // 选择题选项A
+ optionB: string // 选择题选项B
+ optionC: string // 选择题选项C
+ optionD: string // 选择题选项D
+}
+
+// 课件详情 API
+export const CoursewareDetailApi = {
+ // 查询课件详情分页
+ getCoursewareDetailPage: async (params: any) => {
+ return await request.get({ url: `/hrm/courseware-detail/page`, params })
+ },
+
+ // 查询课件详情详情
+ getCoursewareDetail: async (id: number) => {
+ return await request.get({ url: `/hrm/courseware-detail/get?id=` + id })
+ },
+
+ // 新增课件详情
+ createCoursewareDetail: async (data: CoursewareDetailVO) => {
+ return await request.post({ url: `/hrm/courseware-detail/create`, data })
+ },
+
+ // 修改课件详情
+ updateCoursewareDetail: async (data: CoursewareDetailVO) => {
+ return await request.put({ url: `/hrm/courseware-detail/update`, data })
+ },
+
+ // 删除课件详情
+ deleteCoursewareDetail: async (id: number) => {
+ return await request.delete({ url: `/hrm/courseware-detail/delete?id=` + id })
+ },
+
+ // 导出课件详情 Excel
+ exportCoursewareDetail: async (params) => {
+ return await request.download({ url: `/hrm/courseware-detail/export-excel`, params })
+ }
+}
\ No newline at end of file
diff --git a/src/api/hrm/item/index.ts b/src/api/hrm/item/index.ts
new file mode 100644
index 000000000..dab28ffd2
--- /dev/null
+++ b/src/api/hrm/item/index.ts
@@ -0,0 +1,45 @@
+import request from '@/config/axios'
+
+// 物品管理 VO
+export interface ItemVO {
+ id: number // 唯一主键
+ itemCode: string // 物品编码
+ itemCategory: number // 物品分类(办公用品、办公设备等)
+ itemName: string // 物品名称
+ itemCount: number // 目前库存数量
+ itemType: number // 规格
+ remark: string // 备注
+}
+
+// 物品管理 API
+export const ItemApi = {
+ // 查询物品管理分页
+ getItemPage: async (params: any) => {
+ return await request.get({ url: `/hrm/item/page`, params })
+ },
+
+ // 查询物品管理详情
+ getItem: async (id: number) => {
+ return await request.get({ url: `/hrm/item/get?id=` + id })
+ },
+
+ // 新增物品管理
+ createItem: async (data: ItemVO) => {
+ return await request.post({ url: `/hrm/item/create`, data })
+ },
+
+ // 修改物品管理
+ updateItem: async (data: ItemVO) => {
+ return await request.put({ url: `/hrm/item/update`, data })
+ },
+
+ // 删除物品管理
+ deleteItem: async (id: number) => {
+ return await request.delete({ url: `/hrm/item/delete?id=` + id })
+ },
+
+ // 导出物品管理 Excel
+ exportItem: async (params) => {
+ return await request.download({ url: `/hrm/item/export-excel`, params })
+ }
+}
\ No newline at end of file
diff --git a/src/api/hrm/itemrequest/index.ts b/src/api/hrm/itemrequest/index.ts
new file mode 100644
index 000000000..74030a6fd
--- /dev/null
+++ b/src/api/hrm/itemrequest/index.ts
@@ -0,0 +1,51 @@
+import request from '@/config/axios'
+
+// 物品申请 VO
+export interface ItemRequestVO {
+ id: number // 自动递增的主键
+ applicantId: number // 领用人ID
+ requestDate: Date // 申请日期
+ eSignature: string // 领用人电子签名
+ processInstanceId: string // 工作流编号
+ auditStatus: number // 审批状态
+}
+
+// 物品申请 API
+export const ItemRequestApi = {
+ // 查询物品申请分页
+ getItemRequestPage: async (params: any) => {
+ return await request.get({ url: `/hrm/item-request/page`, params })
+ },
+
+ // 查询物品申请详情
+ getItemRequest: async (id: number) => {
+ return await request.get({ url: `/hrm/item-request/get?id=` + id })
+ },
+
+ // 新增物品申请
+ createItemRequest: async (data: ItemRequestVO) => {
+ return await request.post({ url: `/hrm/item-request/create`, data })
+ },
+
+ // 修改物品申请
+ updateItemRequest: async (data: ItemRequestVO) => {
+ return await request.put({ url: `/hrm/item-request/update`, data })
+ },
+
+ // 删除物品申请
+ deleteItemRequest: async (id: number) => {
+ return await request.delete({ url: `/hrm/item-request/delete?id=` + id })
+ },
+
+ // 导出物品申请 Excel
+ exportItemRequest: async (params) => {
+ return await request.download({ url: `/hrm/item-request/export-excel`, params })
+ },
+
+// ==================== 子表(物品申请明细) ====================
+
+ // 获得物品申请明细列表
+ getItemRequestDetailListByItemRequestId: async (itemRequestId) => {
+ return await request.get({ url: `/hrm/item-request/item-request-detail/list-by-item-request-id?itemRequestId=` + itemRequestId })
+ }
+}
\ No newline at end of file
diff --git a/src/api/hrm/itemrequestdetail/index.ts b/src/api/hrm/itemrequestdetail/index.ts
new file mode 100644
index 000000000..06ddc7d97
--- /dev/null
+++ b/src/api/hrm/itemrequestdetail/index.ts
@@ -0,0 +1,43 @@
+import request from '@/config/axios'
+
+// 物品申请明细 VO
+export interface ItemRequestDetailVO {
+ id: number // 主键
+ itemRequestId: number // 物品申请ID(关联 hrm_item_request)
+ itemId: number // 物品管理ID(关联 hrm_item)
+ requestCount: number // 领用数量
+ instructions: string // 申请说明
+}
+
+// 物品申请明细 API
+export const ItemRequestDetailApi = {
+ // 查询物品申请明细分页
+ getItemRequestDetailPage: async (params: any) => {
+ return await request.get({ url: `/hrm/item-request-detail/page`, params })
+ },
+
+ // 查询物品申请明细详情
+ getItemRequestDetail: async (id: number) => {
+ return await request.get({ url: `/hrm/item-request-detail/get?id=` + id })
+ },
+
+ // 新增物品申请明细
+ createItemRequestDetail: async (data: ItemRequestDetailVO) => {
+ return await request.post({ url: `/hrm/item-request-detail/create`, data })
+ },
+
+ // 修改物品申请明细
+ updateItemRequestDetail: async (data: ItemRequestDetailVO) => {
+ return await request.put({ url: `/hrm/item-request-detail/update`, data })
+ },
+
+ // 删除物品申请明细
+ deleteItemRequestDetail: async (id: number) => {
+ return await request.delete({ url: `/hrm/item-request-detail/delete?id=` + id })
+ },
+
+ // 导出物品申请明细 Excel
+ exportItemRequestDetail: async (params) => {
+ return await request.download({ url: `/hrm/item-request-detail/export-excel`, params })
+ }
+}
\ No newline at end of file
diff --git a/src/api/hrm/training/index.ts b/src/api/hrm/training/index.ts
new file mode 100644
index 000000000..a32fcbde9
--- /dev/null
+++ b/src/api/hrm/training/index.ts
@@ -0,0 +1,50 @@
+import request from '@/config/axios'
+
+// 培训信息 VO
+export interface TrainingVO {
+ id: number // 主键ID
+ coursewareId: number // 课件ID,关联courseware表
+ trainingName: string // 培训名称
+ processInstanceId: string // 工作流编号
+ auditStatus: number // 审批状态
+ startTime: Date // 培训开始时间
+ endTime: Date // 培训结束时间
+ trainingHours: number // 培训学时
+ lecturer: string // 讲师
+ trainingLocation: string // 培训地点
+ trainingPurpose: string // 培训目的
+ deptId: number // 部门ID
+}
+
+// 培训信息 API
+export const TrainingApi = {
+ // 查询培训信息分页
+ getTrainingPage: async (params: any) => {
+ return await request.get({ url: `/hrm/training/page`, params })
+ },
+
+ // 查询培训信息详情
+ getTraining: async (id: number) => {
+ return await request.get({ url: `/hrm/training/get?id=` + id })
+ },
+
+ // 新增培训信息
+ createTraining: async (data: TrainingVO) => {
+ return await request.post({ url: `/hrm/training/create`, data })
+ },
+
+ // 修改培训信息
+ updateTraining: async (data: TrainingVO) => {
+ return await request.put({ url: `/hrm/training/update`, data })
+ },
+
+ // 删除培训信息
+ deleteTraining: async (id: number) => {
+ return await request.delete({ url: `/hrm/training/delete?id=` + id })
+ },
+
+ // 导出培训信息 Excel
+ exportTraining: async (params) => {
+ return await request.download({ url: `/hrm/training/export-excel`, params })
+ }
+}
\ No newline at end of file
diff --git a/src/api/hrm/trainingexperience/index.ts b/src/api/hrm/trainingexperience/index.ts
new file mode 100644
index 000000000..22435bf63
--- /dev/null
+++ b/src/api/hrm/trainingexperience/index.ts
@@ -0,0 +1,47 @@
+import request from '@/config/axios'
+
+// 培训经历 VO
+export interface TrainingExperienceVO {
+ id: number // 主键ID
+ userId: number // 员工ID
+ trainingId: number // 培训ID,关联training表
+ startTime: Date // 培训开始时间
+ endTime: Date // 培训结束时间
+ trainingScore: number // 培训成绩
+ certificate: string // 培训证书名称
+ certificateNumber: string // 培训证书编号
+ remark: string // 备注
+}
+
+// 培训经历 API
+export const TrainingExperienceApi = {
+ // 查询培训经历分页
+ getTrainingExperiencePage: async (params: any) => {
+ return await request.get({ url: `/hrm/training-experience/page`, params })
+ },
+
+ // 查询培训经历详情
+ getTrainingExperience: async (id: number) => {
+ return await request.get({ url: `/hrm/training-experience/get?id=` + id })
+ },
+
+ // 新增培训经历
+ createTrainingExperience: async (data: TrainingExperienceVO) => {
+ return await request.post({ url: `/hrm/training-experience/create`, data })
+ },
+
+ // 修改培训经历
+ updateTrainingExperience: async (data: TrainingExperienceVO) => {
+ return await request.put({ url: `/hrm/training-experience/update`, data })
+ },
+
+ // 删除培训经历
+ deleteTrainingExperience: async (id: number) => {
+ return await request.delete({ url: `/hrm/training-experience/delete?id=` + id })
+ },
+
+ // 导出培训经历 Excel
+ exportTrainingExperience: async (params) => {
+ return await request.download({ url: `/hrm/training-experience/export-excel`, params })
+ }
+}
\ No newline at end of file
diff --git a/src/views/hrm/courseware/CoursewareForm.vue b/src/views/hrm/courseware/CoursewareForm.vue
new file mode 100644
index 000000000..55b141a76
--- /dev/null
+++ b/src/views/hrm/courseware/CoursewareForm.vue
@@ -0,0 +1,163 @@
+
+
+
+
\ No newline at end of file
diff --git a/src/views/hrm/courseware/components/CoursewareDetailForm.vue b/src/views/hrm/courseware/components/CoursewareDetailForm.vue
new file mode 100644
index 000000000..b0e2dccc9
--- /dev/null
+++ b/src/views/hrm/courseware/components/CoursewareDetailForm.vue
@@ -0,0 +1,148 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ —
+
+
+
+
+
+ + 添加课件详情
+
+
+
\ No newline at end of file
diff --git a/src/views/hrm/courseware/index.vue b/src/views/hrm/courseware/index.vue
new file mode 100644
index 000000000..b34f29e36
--- /dev/null
+++ b/src/views/hrm/courseware/index.vue
@@ -0,0 +1,278 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 搜索
+ 重置
+
+ 新增
+
+
+ 导出
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 编辑
+
+
+ 删除
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/views/hrm/coursewaredetail/CoursewareDetailForm.vue b/src/views/hrm/coursewaredetail/CoursewareDetailForm.vue
new file mode 100644
index 000000000..4c454ff88
--- /dev/null
+++ b/src/views/hrm/coursewaredetail/CoursewareDetailForm.vue
@@ -0,0 +1,137 @@
+
+
+
+
\ No newline at end of file
diff --git a/src/views/hrm/coursewaredetail/index.vue b/src/views/hrm/coursewaredetail/index.vue
new file mode 100644
index 000000000..cf46af703
--- /dev/null
+++ b/src/views/hrm/coursewaredetail/index.vue
@@ -0,0 +1,255 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 搜索
+ 重置
+
+ 新增
+
+
+ 导出
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 编辑
+
+
+ 删除
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/views/hrm/item/ItemForm.vue b/src/views/hrm/item/ItemForm.vue
new file mode 100644
index 000000000..7bd37a160
--- /dev/null
+++ b/src/views/hrm/item/ItemForm.vue
@@ -0,0 +1,134 @@
+
+
+
+
\ No newline at end of file
diff --git a/src/views/hrm/item/index.vue b/src/views/hrm/item/index.vue
new file mode 100644
index 000000000..c4dc90c4d
--- /dev/null
+++ b/src/views/hrm/item/index.vue
@@ -0,0 +1,263 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 搜索
+ 重置
+
+ 新增
+
+
+ 导出
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 编辑
+
+
+ 删除
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/views/hrm/itemrequest/ItemRequestForm.vue b/src/views/hrm/itemrequest/ItemRequestForm.vue
new file mode 100644
index 000000000..e3b5bef2c
--- /dev/null
+++ b/src/views/hrm/itemrequest/ItemRequestForm.vue
@@ -0,0 +1,142 @@
+
+
+
+
\ No newline at end of file
diff --git a/src/views/hrm/itemrequest/components/ItemRequestDetailForm.vue b/src/views/hrm/itemrequest/components/ItemRequestDetailForm.vue
new file mode 100644
index 000000000..d67569086
--- /dev/null
+++ b/src/views/hrm/itemrequest/components/ItemRequestDetailForm.vue
@@ -0,0 +1,108 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ —
+
+
+
+
+
+ + 添加物品申请明细
+
+
+
\ No newline at end of file
diff --git a/src/views/hrm/itemrequest/index.vue b/src/views/hrm/itemrequest/index.vue
new file mode 100644
index 000000000..c5c429f18
--- /dev/null
+++ b/src/views/hrm/itemrequest/index.vue
@@ -0,0 +1,234 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 搜索
+ 重置
+
+ 新增
+
+
+ 导出
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 编辑
+
+
+ 删除
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/views/hrm/itemrequestdetail/ItemRequestDetailForm.vue b/src/views/hrm/itemrequestdetail/ItemRequestDetailForm.vue
new file mode 100644
index 000000000..dea347ac3
--- /dev/null
+++ b/src/views/hrm/itemrequestdetail/ItemRequestDetailForm.vue
@@ -0,0 +1,109 @@
+
+
+
+
\ No newline at end of file
diff --git a/src/views/hrm/itemrequestdetail/index.vue b/src/views/hrm/itemrequestdetail/index.vue
new file mode 100644
index 000000000..e93b260ff
--- /dev/null
+++ b/src/views/hrm/itemrequestdetail/index.vue
@@ -0,0 +1,200 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 搜索
+ 重置
+
+ 新增
+
+
+ 导出
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 编辑
+
+
+ 删除
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/views/hrm/training/TrainingForm.vue b/src/views/hrm/training/TrainingForm.vue
new file mode 100644
index 000000000..258570b0a
--- /dev/null
+++ b/src/views/hrm/training/TrainingForm.vue
@@ -0,0 +1,159 @@
+
+
+
+
\ No newline at end of file
diff --git a/src/views/hrm/training/index.vue b/src/views/hrm/training/index.vue
new file mode 100644
index 000000000..efb96074b
--- /dev/null
+++ b/src/views/hrm/training/index.vue
@@ -0,0 +1,314 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 搜索
+ 重置
+
+ 新增
+
+
+ 导出
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 编辑
+
+
+ 删除
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/views/hrm/trainingexperience/TrainingExperienceForm.vue b/src/views/hrm/trainingexperience/TrainingExperienceForm.vue
new file mode 100644
index 000000000..e4d681f34
--- /dev/null
+++ b/src/views/hrm/trainingexperience/TrainingExperienceForm.vue
@@ -0,0 +1,140 @@
+
+
+
+
\ No newline at end of file
diff --git a/src/views/hrm/trainingexperience/index.vue b/src/views/hrm/trainingexperience/index.vue
new file mode 100644
index 000000000..655257b00
--- /dev/null
+++ b/src/views/hrm/trainingexperience/index.vue
@@ -0,0 +1,261 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 搜索
+ 重置
+
+ 新增
+
+
+ 导出
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 编辑
+
+
+ 删除
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file