Merge branch 'wkz'
commit
8c74752b2b
|
|
@ -0,0 +1,51 @@
|
|||
import request from '@/config/axios'
|
||||
|
||||
// 通知表(公告、新闻、制度) VO
|
||||
export interface AnnouncementVO {
|
||||
id: number // 唯一主键
|
||||
annoType: number // 通知类型(公告、新闻、制度)
|
||||
title: string // 标题
|
||||
content: string // 内容
|
||||
publishType: number // 公告类别(公告:人事任免、放假通知、其他)
|
||||
publishName: string // 署名
|
||||
attachment: string // 附件
|
||||
publishMode: number // 发布模式(0=立即,1=定时)
|
||||
publishPlanTime: Date // 计划发布时间. 立即发布时为空
|
||||
publishRealTime: Date // 实际发布时间
|
||||
publishRangerType: number // 发布范围类型 1公司 2部门 3人员
|
||||
publishRanger: string // 发布范围选择
|
||||
publishStatus: number // 发布状态。已发布 未发布
|
||||
}
|
||||
|
||||
// 通知表(公告、新闻、制度) API
|
||||
export const AnnouncementApi = {
|
||||
// 查询通知表(公告、新闻、制度)分页
|
||||
getAnnouncementPage: async (params: any) => {
|
||||
return await request.get({ url: `/hrm/announcement/page`, params })
|
||||
},
|
||||
|
||||
// 查询通知表(公告、新闻、制度)详情
|
||||
getAnnouncement: async (id: number) => {
|
||||
return await request.get({ url: `/hrm/announcement/get?id=` + id })
|
||||
},
|
||||
|
||||
// 新增通知表(公告、新闻、制度)
|
||||
createAnnouncement: async (data: AnnouncementVO) => {
|
||||
return await request.post({ url: `/hrm/announcement/create`, data })
|
||||
},
|
||||
|
||||
// 修改通知表(公告、新闻、制度)
|
||||
updateAnnouncement: async (data: AnnouncementVO) => {
|
||||
return await request.put({ url: `/hrm/announcement/update`, data })
|
||||
},
|
||||
|
||||
// 删除通知表(公告、新闻、制度)
|
||||
deleteAnnouncement: async (id: number) => {
|
||||
return await request.delete({ url: `/hrm/announcement/delete?id=` + id })
|
||||
},
|
||||
|
||||
// 导出通知表(公告、新闻、制度) Excel
|
||||
exportAnnouncement: async (params) => {
|
||||
return await request.download({ url: `/hrm/announcement/export-excel`, params })
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,52 @@
|
|||
import request from '@/config/axios'
|
||||
|
||||
// 关怀通知 VO
|
||||
export interface CareNoticeVO {
|
||||
id: number // 主键,自动递增
|
||||
careType: number // 关怀类型(字典):生日、节日、入职周年、转正日期到期、任职开始/结束、退休到期、身份证有效期到期等
|
||||
noticeTitle: string // 通知主题
|
||||
publishRangerType: number // 发布范围类型 1公司 2部门 3人员
|
||||
releaseMethod: number // 发送时间方式(字典):前一天、当天、后一天
|
||||
publishRanger: string // 发布范围选择
|
||||
releaseTime: localtime // 发布时间
|
||||
releaseDate: Date // 发布日期/节日日期
|
||||
noticeMethod: number // 通知方式(字典):邮件、短信、系统通知
|
||||
noticeContent: string // 通知内容
|
||||
employmentDateType: number // 入职关怀日期类型
|
||||
employmentNoticeType: number // 入职关怀发送通知
|
||||
diyType: number // 自定义通知类型
|
||||
diyEventType: number // 自定义事件名称
|
||||
}
|
||||
|
||||
// 关怀通知 API
|
||||
export const CareNoticeApi = {
|
||||
// 查询关怀通知分页
|
||||
getCareNoticePage: async (params: any) => {
|
||||
return await request.get({ url: `/hrm/care-notice/page`, params })
|
||||
},
|
||||
|
||||
// 查询关怀通知详情
|
||||
getCareNotice: async (id: number) => {
|
||||
return await request.get({ url: `/hrm/care-notice/get?id=` + id })
|
||||
},
|
||||
|
||||
// 新增关怀通知
|
||||
createCareNotice: async (data: CareNoticeVO) => {
|
||||
return await request.post({ url: `/hrm/care-notice/create`, data })
|
||||
},
|
||||
|
||||
// 修改关怀通知
|
||||
updateCareNotice: async (data: CareNoticeVO) => {
|
||||
return await request.put({ url: `/hrm/care-notice/update`, data })
|
||||
},
|
||||
|
||||
// 删除关怀通知
|
||||
deleteCareNotice: async (id: number) => {
|
||||
return await request.delete({ url: `/hrm/care-notice/delete?id=` + id })
|
||||
},
|
||||
|
||||
// 导出关怀通知 Excel
|
||||
exportCareNotice: async (params) => {
|
||||
return await request.download({ url: `/hrm/care-notice/export-excel`, params })
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,45 @@
|
|||
import request from '@/config/axios'
|
||||
|
||||
// 人事证明申请 VO
|
||||
export interface CertificateRequestVO {
|
||||
id: number // 主键ID
|
||||
userId: number // 申请人ID
|
||||
processInstanceId: string // 工作流编号
|
||||
auditStatus: number // 审批状态
|
||||
certificateType: number // 证明类型(在职证明、实习证明)
|
||||
applicationDate: Date // 申请日期
|
||||
reason: string // 申请事由
|
||||
}
|
||||
|
||||
// 人事证明申请 API
|
||||
export const CertificateRequestApi = {
|
||||
// 查询人事证明申请分页
|
||||
getCertificateRequestPage: async (params: any) => {
|
||||
return await request.get({ url: `/hrm/certificate-request/page`, params })
|
||||
},
|
||||
|
||||
// 查询人事证明申请详情
|
||||
getCertificateRequest: async (id: number) => {
|
||||
return await request.get({ url: `/hrm/certificate-request/get?id=` + id })
|
||||
},
|
||||
|
||||
// 新增人事证明申请
|
||||
createCertificateRequest: async (data: CertificateRequestVO) => {
|
||||
return await request.post({ url: `/hrm/certificate-request/create`, data })
|
||||
},
|
||||
|
||||
// 修改人事证明申请
|
||||
updateCertificateRequest: async (data: CertificateRequestVO) => {
|
||||
return await request.put({ url: `/hrm/certificate-request/update`, data })
|
||||
},
|
||||
|
||||
// 删除人事证明申请
|
||||
deleteCertificateRequest: async (id: number) => {
|
||||
return await request.delete({ url: `/hrm/certificate-request/delete?id=` + id })
|
||||
},
|
||||
|
||||
// 导出人事证明申请 Excel
|
||||
exportCertificateRequest: async (params) => {
|
||||
return await request.download({ url: `/hrm/certificate-request/export-excel`, params })
|
||||
}
|
||||
}
|
||||
|
|
@ -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 })
|
||||
}
|
||||
}
|
||||
|
|
@ -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 })
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,50 @@
|
|||
import request from '@/config/axios'
|
||||
|
||||
// 学历进修申请 VO
|
||||
export interface EducationApplyVO {
|
||||
id: number // 主键ID
|
||||
userId: number // 员工ID
|
||||
processInstanceId: string // 工作流编号
|
||||
auditStatus: number // 审批状态
|
||||
currentEducation: number // 现学历
|
||||
advancedEducation: number // 进修后学历
|
||||
studyStartDate: Date // 开始进修时间
|
||||
studyEndDate: Date // 结束进修时间
|
||||
studyFee: number // 进修费用
|
||||
studySchool: string // 进修学校
|
||||
studyMajor: string // 进修专业
|
||||
elecSignature: string // 员工签字
|
||||
}
|
||||
|
||||
// 学历进修申请 API
|
||||
export const EducationApplyApi = {
|
||||
// 查询学历进修申请分页
|
||||
getEducationApplyPage: async (params: any) => {
|
||||
return await request.get({ url: `/hrm/education-apply/page`, params })
|
||||
},
|
||||
|
||||
// 查询学历进修申请详情
|
||||
getEducationApply: async (id: number) => {
|
||||
return await request.get({ url: `/hrm/education-apply/get?id=` + id })
|
||||
},
|
||||
|
||||
// 新增学历进修申请
|
||||
createEducationApply: async (data: EducationApplyVO) => {
|
||||
return await request.post({ url: `/hrm/education-apply/create`, data })
|
||||
},
|
||||
|
||||
// 修改学历进修申请
|
||||
updateEducationApply: async (data: EducationApplyVO) => {
|
||||
return await request.put({ url: `/hrm/education-apply/update`, data })
|
||||
},
|
||||
|
||||
// 删除学历进修申请
|
||||
deleteEducationApply: async (id: number) => {
|
||||
return await request.delete({ url: `/hrm/education-apply/delete?id=` + id })
|
||||
},
|
||||
|
||||
// 导出学历进修申请 Excel
|
||||
exportEducationApply: async (params) => {
|
||||
return await request.download({ url: `/hrm/education-apply/export-excel`, params })
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,51 @@
|
|||
import request from '@/config/axios'
|
||||
|
||||
// 转正申请 VO
|
||||
export interface FullMemberApplyVO {
|
||||
id: number // 主键,自动递增
|
||||
userId: number // 员工档案ID(关联hrm_user_infor)
|
||||
processInstanceId: string // 工作流编号
|
||||
auditStatus: number // 审批状态
|
||||
confirmationDate: Date // 转正日期
|
||||
isConfirmed: number // 是否转正(1:是,0:否)
|
||||
applicationDate: Date // 申请日期
|
||||
applicationNote: string // 转正申请说明
|
||||
workPerformanceScore: number // 工作业绩评分
|
||||
attendanceScore: number // 出勤情况评分
|
||||
teamworkScore: number // 团队协作评分
|
||||
abilityPerformanceScore: number // 能力表现评分
|
||||
eSignature: string // 本人签字
|
||||
}
|
||||
|
||||
// 转正申请 API
|
||||
export const FullMemberApplyApi = {
|
||||
// 查询转正申请分页
|
||||
getFullMemberApplyPage: async (params: any) => {
|
||||
return await request.get({ url: `/hrm/full-member-apply/page`, params })
|
||||
},
|
||||
|
||||
// 查询转正申请详情
|
||||
getFullMemberApply: async (id: number) => {
|
||||
return await request.get({ url: `/hrm/full-member-apply/get?id=` + id })
|
||||
},
|
||||
|
||||
// 新增转正申请
|
||||
createFullMemberApply: async (data: FullMemberApplyVO) => {
|
||||
return await request.post({ url: `/hrm/full-member-apply/create`, data })
|
||||
},
|
||||
|
||||
// 修改转正申请
|
||||
updateFullMemberApply: async (data: FullMemberApplyVO) => {
|
||||
return await request.put({ url: `/hrm/full-member-apply/update`, data })
|
||||
},
|
||||
|
||||
// 删除转正申请
|
||||
deleteFullMemberApply: async (id: number) => {
|
||||
return await request.delete({ url: `/hrm/full-member-apply/delete?id=` + id })
|
||||
},
|
||||
|
||||
// 导出转正申请 Excel
|
||||
exportFullMemberApply: async (params) => {
|
||||
return await request.download({ url: `/hrm/full-member-apply/export-excel`, params })
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,48 @@
|
|||
import request from '@/config/axios'
|
||||
|
||||
// 发起面试 VO
|
||||
export interface InterviewInitiationVO {
|
||||
id: number // 主键ID
|
||||
recruitmentRequestId: number // 招聘Id
|
||||
talentPoolId: number // 人才库ID(关联hrm_talent_pool)
|
||||
processInstanceId: string // 工作流编号
|
||||
auditStatus: number // 审批状态
|
||||
interviewAddress: number // 面试地址
|
||||
interviewTime: Date // 面试通知时间
|
||||
interviewEmail: string // 面试通知邮箱
|
||||
status: number // 状态
|
||||
deptId: number // 部门ID
|
||||
}
|
||||
|
||||
// 发起面试 API
|
||||
export const InterviewInitiationApi = {
|
||||
// 查询发起面试分页
|
||||
getInterviewInitiationPage: async (params: any) => {
|
||||
return await request.get({ url: `/hrm/interview-initiation/page`, params })
|
||||
},
|
||||
|
||||
// 查询发起面试详情
|
||||
getInterviewInitiation: async (id: number) => {
|
||||
return await request.get({ url: `/hrm/interview-initiation/get?id=` + id })
|
||||
},
|
||||
|
||||
// 新增发起面试
|
||||
createInterviewInitiation: async (data: InterviewInitiationVO) => {
|
||||
return await request.post({ url: `/hrm/interview-initiation/create`, data })
|
||||
},
|
||||
|
||||
// 修改发起面试
|
||||
updateInterviewInitiation: async (data: InterviewInitiationVO) => {
|
||||
return await request.put({ url: `/hrm/interview-initiation/update`, data })
|
||||
},
|
||||
|
||||
// 删除发起面试
|
||||
deleteInterviewInitiation: async (id: number) => {
|
||||
return await request.delete({ url: `/hrm/interview-initiation/delete?id=` + id })
|
||||
},
|
||||
|
||||
// 导出发起面试 Excel
|
||||
exportInterviewInitiation: async (params) => {
|
||||
return await request.download({ url: `/hrm/interview-initiation/export-excel`, params })
|
||||
}
|
||||
}
|
||||
|
|
@ -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 })
|
||||
}
|
||||
}
|
||||
|
|
@ -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 })
|
||||
}
|
||||
}
|
||||
|
|
@ -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 })
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,58 @@
|
|||
import request from '@/config/axios'
|
||||
|
||||
// 调岗申请 VO
|
||||
export interface JobTransferApplyVO {
|
||||
id: number // 主键,自动递增
|
||||
userId: number // 员工档案ID
|
||||
processInstanceId: string // 工作流编号
|
||||
auditStatus: number // 审批状态
|
||||
applyType: number // 调岗类型
|
||||
applyReason: number // 调岗原因
|
||||
beforeDeptId: number // 调动前部门
|
||||
beforePostLevel: number // 调动前职级
|
||||
beforeGradeLevel: number // 调动前档级
|
||||
beforeSalary: string // 调动前薪资
|
||||
beforePostId: number // 调动前岗位
|
||||
applyInfo: string // 申请说明
|
||||
afterDeptId: number // 调动后部门
|
||||
afterSalary: number // 调动后薪资
|
||||
afterPostLevel: number // 调动后职级
|
||||
afterGradeLevel: number // 调动前档级
|
||||
afterPostId: number // 调动后岗位
|
||||
afterPostName: string // 调动后岗位名称
|
||||
effectiverDate: Date // 生效日期
|
||||
attachment: string // 附件
|
||||
}
|
||||
|
||||
// 调岗申请 API
|
||||
export const JobTransferApplyApi = {
|
||||
// 查询调岗申请分页
|
||||
getJobTransferApplyPage: async (params: any) => {
|
||||
return await request.get({ url: `/hrm/job-transfer-apply/page`, params })
|
||||
},
|
||||
|
||||
// 查询调岗申请详情
|
||||
getJobTransferApply: async (id: number) => {
|
||||
return await request.get({ url: `/hrm/job-transfer-apply/get?id=` + id })
|
||||
},
|
||||
|
||||
// 新增调岗申请
|
||||
createJobTransferApply: async (data: JobTransferApplyVO) => {
|
||||
return await request.post({ url: `/hrm/job-transfer-apply/create`, data })
|
||||
},
|
||||
|
||||
// 修改调岗申请
|
||||
updateJobTransferApply: async (data: JobTransferApplyVO) => {
|
||||
return await request.put({ url: `/hrm/job-transfer-apply/update`, data })
|
||||
},
|
||||
|
||||
// 删除调岗申请
|
||||
deleteJobTransferApply: async (id: number) => {
|
||||
return await request.delete({ url: `/hrm/job-transfer-apply/delete?id=` + id })
|
||||
},
|
||||
|
||||
// 导出调岗申请 Excel
|
||||
exportJobTransferApply: async (params) => {
|
||||
return await request.download({ url: `/hrm/job-transfer-apply/export-excel`, params })
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,45 @@
|
|||
import request from '@/config/axios'
|
||||
|
||||
// 师徒申请 VO
|
||||
export interface MentorsApplyVO {
|
||||
id: number // 主键,自动递增
|
||||
userId: number // 员工档案ID
|
||||
processInstanceId: string // 工作流编号
|
||||
auditStatus: number // 审批状态
|
||||
mentorsType: number // 师徒类型. 0拜师 1收徒
|
||||
acceptUserId: number // 接受员工Id
|
||||
effectiverDate: Date // 生效日期
|
||||
}
|
||||
|
||||
// 师徒申请 API
|
||||
export const MentorsApplyApi = {
|
||||
// 查询师徒申请分页
|
||||
getMentorsApplyPage: async (params: any) => {
|
||||
return await request.get({ url: `/hrm/mentors-apply/page`, params })
|
||||
},
|
||||
|
||||
// 查询师徒申请详情
|
||||
getMentorsApply: async (id: number) => {
|
||||
return await request.get({ url: `/hrm/mentors-apply/get?id=` + id })
|
||||
},
|
||||
|
||||
// 新增师徒申请
|
||||
createMentorsApply: async (data: MentorsApplyVO) => {
|
||||
return await request.post({ url: `/hrm/mentors-apply/create`, data })
|
||||
},
|
||||
|
||||
// 修改师徒申请
|
||||
updateMentorsApply: async (data: MentorsApplyVO) => {
|
||||
return await request.put({ url: `/hrm/mentors-apply/update`, data })
|
||||
},
|
||||
|
||||
// 删除师徒申请
|
||||
deleteMentorsApply: async (id: number) => {
|
||||
return await request.delete({ url: `/hrm/mentors-apply/delete?id=` + id })
|
||||
},
|
||||
|
||||
// 导出师徒申请 Excel
|
||||
exportMentorsApply: async (params) => {
|
||||
return await request.download({ url: `/hrm/mentors-apply/export-excel`, params })
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,53 @@
|
|||
import request from '@/config/axios'
|
||||
|
||||
// 招聘需求申请 VO
|
||||
export interface RecruitmentRequestVO {
|
||||
id: number // 主键,自动递增
|
||||
requestType: number // 需求类型:新增需求、替换需求、储备需求
|
||||
requestDeptId: number // 所属部门
|
||||
processInstanceId: string // 工作流编号
|
||||
auditStatus: number // 审批状态
|
||||
postId: number // 岗位id
|
||||
positionName: string // 需求岗位名称
|
||||
expectedOnboard: Date // 期望到岗日期
|
||||
requestedCount: number // 需求人数
|
||||
ageRange: string // 年龄范围,如:18-25,25-35,30-45
|
||||
monthlySalary: string // 薪资(月),如:4k-7k,5k-8k,10k-15k
|
||||
minEducation: number // 最低学历:1=高中,2=大专,3=本科,4=硕士,5=博士
|
||||
workLocation: number // 工作地点
|
||||
maritalStatus: number // 婚姻状况:未婚、已婚、离异、丧偶
|
||||
experience: string // 从业经验
|
||||
}
|
||||
|
||||
// 招聘需求申请 API
|
||||
export const RecruitmentRequestApi = {
|
||||
// 查询招聘需求申请分页
|
||||
getRecruitmentRequestPage: async (params: any) => {
|
||||
return await request.get({ url: `/hrm/recruitment-request/page`, params })
|
||||
},
|
||||
|
||||
// 查询招聘需求申请详情
|
||||
getRecruitmentRequest: async (id: number) => {
|
||||
return await request.get({ url: `/hrm/recruitment-request/get?id=` + id })
|
||||
},
|
||||
|
||||
// 新增招聘需求申请
|
||||
createRecruitmentRequest: async (data: RecruitmentRequestVO) => {
|
||||
return await request.post({ url: `/hrm/recruitment-request/create`, data })
|
||||
},
|
||||
|
||||
// 修改招聘需求申请
|
||||
updateRecruitmentRequest: async (data: RecruitmentRequestVO) => {
|
||||
return await request.put({ url: `/hrm/recruitment-request/update`, data })
|
||||
},
|
||||
|
||||
// 删除招聘需求申请
|
||||
deleteRecruitmentRequest: async (id: number) => {
|
||||
return await request.delete({ url: `/hrm/recruitment-request/delete?id=` + id })
|
||||
},
|
||||
|
||||
// 导出招聘需求申请 Excel
|
||||
exportRecruitmentRequest: async (params) => {
|
||||
return await request.download({ url: `/hrm/recruitment-request/export-excel`, params })
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,48 @@
|
|||
import request from '@/config/axios'
|
||||
|
||||
// 离职申请 VO
|
||||
export interface ResignationApplyVO {
|
||||
id: number // 主键,自动递增
|
||||
userId: number // 员工档案ID
|
||||
processInstanceId: string // 工作流编号
|
||||
auditStatus: number // 审批状态
|
||||
expectedResignDate: Date // 预计离职日期
|
||||
resignationReason: number // 离职原因:个人原因、发展原因、薪酬原因、工作压力大、不接受组织调整、其他
|
||||
reasonDescription: string // 离职原因说明
|
||||
feedbackOnWorkEnv: string // 对工作等环境和公司文化的反馈
|
||||
suggestions: string // 对公司的意见和建议
|
||||
suggestionsForImprovement: string // 希望公司在未来的发展中能够做到的改进
|
||||
}
|
||||
|
||||
// 离职申请 API
|
||||
export const ResignationApplyApi = {
|
||||
// 查询离职申请分页
|
||||
getResignationApplyPage: async (params: any) => {
|
||||
return await request.get({ url: `/hrm/resignation-apply/page`, params })
|
||||
},
|
||||
|
||||
// 查询离职申请详情
|
||||
getResignationApply: async (id: number) => {
|
||||
return await request.get({ url: `/hrm/resignation-apply/get?id=` + id })
|
||||
},
|
||||
|
||||
// 新增离职申请
|
||||
createResignationApply: async (data: ResignationApplyVO) => {
|
||||
return await request.post({ url: `/hrm/resignation-apply/create`, data })
|
||||
},
|
||||
|
||||
// 修改离职申请
|
||||
updateResignationApply: async (data: ResignationApplyVO) => {
|
||||
return await request.put({ url: `/hrm/resignation-apply/update`, data })
|
||||
},
|
||||
|
||||
// 删除离职申请
|
||||
deleteResignationApply: async (id: number) => {
|
||||
return await request.delete({ url: `/hrm/resignation-apply/delete?id=` + id })
|
||||
},
|
||||
|
||||
// 导出离职申请 Excel
|
||||
exportResignationApply: async (params) => {
|
||||
return await request.download({ url: `/hrm/resignation-apply/export-excel`, params })
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,50 @@
|
|||
import request from '@/config/axios'
|
||||
|
||||
// 用章申请 VO
|
||||
export interface SealRequestVO {
|
||||
id: number // 主键ID
|
||||
applicantId: number // 申请人ID
|
||||
companyId: number // 用章主体ID
|
||||
sealType: number // 印章类型
|
||||
processInstanceId: string // 工作流编号
|
||||
auditStatus: number // 审批状态
|
||||
fileName: string // 文件名称
|
||||
sealCount: number // 用章次数
|
||||
attachment: string // 附件
|
||||
isPrint: boolean // 是否打印
|
||||
instructions: string // 申请说明
|
||||
applicantTime: Date // 申请时间
|
||||
}
|
||||
|
||||
// 用章申请 API
|
||||
export const SealRequestApi = {
|
||||
// 查询用章申请分页
|
||||
getSealRequestPage: async (params: any) => {
|
||||
return await request.get({ url: `/hrm/seal-request/page`, params })
|
||||
},
|
||||
|
||||
// 查询用章申请详情
|
||||
getSealRequest: async (id: number) => {
|
||||
return await request.get({ url: `/hrm/seal-request/get?id=` + id })
|
||||
},
|
||||
|
||||
// 新增用章申请
|
||||
createSealRequest: async (data: SealRequestVO) => {
|
||||
return await request.post({ url: `/hrm/seal-request/create`, data })
|
||||
},
|
||||
|
||||
// 修改用章申请
|
||||
updateSealRequest: async (data: SealRequestVO) => {
|
||||
return await request.put({ url: `/hrm/seal-request/update`, data })
|
||||
},
|
||||
|
||||
// 删除用章申请
|
||||
deleteSealRequest: async (id: number) => {
|
||||
return await request.delete({ url: `/hrm/seal-request/delete?id=` + id })
|
||||
},
|
||||
|
||||
// 导出用章申请 Excel
|
||||
exportSealRequest: async (params) => {
|
||||
return await request.download({ url: `/hrm/seal-request/export-excel`, params })
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,52 @@
|
|||
import request from '@/config/axios'
|
||||
|
||||
// 补助申请 VO
|
||||
export interface SubsidyApplyVO {
|
||||
id: number // 主键,自动递增
|
||||
userId: number // 员工ID
|
||||
processInstanceId: string // 工作流编号
|
||||
auditStatus: number // 审批状态
|
||||
effectiveDate: Date // 生效日期
|
||||
applyDesc: string // 申请说明
|
||||
elecSignature: string // 本人签字
|
||||
}
|
||||
|
||||
// 补助申请 API
|
||||
export const SubsidyApplyApi = {
|
||||
// 查询补助申请分页
|
||||
getSubsidyApplyPage: async (params: any) => {
|
||||
return await request.get({ url: `/hrm/subsidy-apply/page`, params })
|
||||
},
|
||||
|
||||
// 查询补助申请详情
|
||||
getSubsidyApply: async (id: number) => {
|
||||
return await request.get({ url: `/hrm/subsidy-apply/get?id=` + id })
|
||||
},
|
||||
|
||||
// 新增补助申请
|
||||
createSubsidyApply: async (data: SubsidyApplyVO) => {
|
||||
return await request.post({ url: `/hrm/subsidy-apply/create`, data })
|
||||
},
|
||||
|
||||
// 修改补助申请
|
||||
updateSubsidyApply: async (data: SubsidyApplyVO) => {
|
||||
return await request.put({ url: `/hrm/subsidy-apply/update`, data })
|
||||
},
|
||||
|
||||
// 删除补助申请
|
||||
deleteSubsidyApply: async (id: number) => {
|
||||
return await request.delete({ url: `/hrm/subsidy-apply/delete?id=` + id })
|
||||
},
|
||||
|
||||
// 导出补助申请 Excel
|
||||
exportSubsidyApply: async (params) => {
|
||||
return await request.download({ url: `/hrm/subsidy-apply/export-excel`, params })
|
||||
},
|
||||
|
||||
// ==================== 子表(补助申请明细) ====================
|
||||
|
||||
// 获得补助申请明细列表
|
||||
getSubsidyApplyDetailListBySubsidyApplicationId: async (subsidyApplicationId) => {
|
||||
return await request.get({ url: `/hrm/subsidy-apply/subsidy-apply-detail/list-by-subsidy-application-id?subsidyApplicationId=` + subsidyApplicationId })
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,43 @@
|
|||
import request from '@/config/axios'
|
||||
|
||||
// 补助申请明细 VO
|
||||
export interface SubsidyApplyDetailVO {
|
||||
id: number // 主键,自动递增
|
||||
subsidyApplicationId: number // 补助申请ID
|
||||
subsidyType: number // 补助类型
|
||||
beforeMoney: number // 原补助金额
|
||||
afterMoney: number // 补助后金额
|
||||
}
|
||||
|
||||
// 补助申请明细 API
|
||||
export const SubsidyApplyDetailApi = {
|
||||
// 查询补助申请明细分页
|
||||
getSubsidyApplyDetailPage: async (params: any) => {
|
||||
return await request.get({ url: `/hrm/subsidy-apply-detail/page`, params })
|
||||
},
|
||||
|
||||
// 查询补助申请明细详情
|
||||
getSubsidyApplyDetail: async (id: number) => {
|
||||
return await request.get({ url: `/hrm/subsidy-apply-detail/get?id=` + id })
|
||||
},
|
||||
|
||||
// 新增补助申请明细
|
||||
createSubsidyApplyDetail: async (data: SubsidyApplyDetailVO) => {
|
||||
return await request.post({ url: `/hrm/subsidy-apply-detail/create`, data })
|
||||
},
|
||||
|
||||
// 修改补助申请明细
|
||||
updateSubsidyApplyDetail: async (data: SubsidyApplyDetailVO) => {
|
||||
return await request.put({ url: `/hrm/subsidy-apply-detail/update`, data })
|
||||
},
|
||||
|
||||
// 删除补助申请明细
|
||||
deleteSubsidyApplyDetail: async (id: number) => {
|
||||
return await request.delete({ url: `/hrm/subsidy-apply-detail/delete?id=` + id })
|
||||
},
|
||||
|
||||
// 导出补助申请明细 Excel
|
||||
exportSubsidyApplyDetail: async (params) => {
|
||||
return await request.download({ url: `/hrm/subsidy-apply-detail/export-excel`, params })
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,59 @@
|
|||
import request from '@/config/axios'
|
||||
|
||||
// 人才库 VO
|
||||
export interface TalentPoolVO {
|
||||
id: number // 主键ID
|
||||
recruitmentRequestId: number // 招聘需求ID
|
||||
name: string // 姓名
|
||||
gender: string // 性别
|
||||
birthPlace: string // 籍贯
|
||||
age: number // 年龄
|
||||
email: string // 电子邮箱
|
||||
school: string // 学校
|
||||
major: string // 专业
|
||||
phone: string // 手机号
|
||||
birthday: Date // 出生日期
|
||||
postId: number // 岗位id
|
||||
desiredPosition: string // 意向岗位名称
|
||||
desiredCity: string // 意向城市
|
||||
highestEducation: number // 最高学历(大专、本科、硕士、博士)
|
||||
personalPhoto: string // 个人照片
|
||||
workCaseAttachment: string // 工作案例附件
|
||||
resumeAttachment: string // 简历附件
|
||||
isInternalRef: number // 是否内推(内部推荐、BOSS直聘、猎聘、智联招聘、脉脉、公众号)
|
||||
maritalStatus: number // 婚育情况(未婚、已婚未育、已婚已育)
|
||||
deptId: number // 部门ID
|
||||
}
|
||||
|
||||
// 人才库 API
|
||||
export const TalentPoolApi = {
|
||||
// 查询人才库分页
|
||||
getTalentPoolPage: async (params: any) => {
|
||||
return await request.get({ url: `/hrm/talent-pool/page`, params })
|
||||
},
|
||||
|
||||
// 查询人才库详情
|
||||
getTalentPool: async (id: number) => {
|
||||
return await request.get({ url: `/hrm/talent-pool/get?id=` + id })
|
||||
},
|
||||
|
||||
// 新增人才库
|
||||
createTalentPool: async (data: TalentPoolVO) => {
|
||||
return await request.post({ url: `/hrm/talent-pool/create`, data })
|
||||
},
|
||||
|
||||
// 修改人才库
|
||||
updateTalentPool: async (data: TalentPoolVO) => {
|
||||
return await request.put({ url: `/hrm/talent-pool/update`, data })
|
||||
},
|
||||
|
||||
// 删除人才库
|
||||
deleteTalentPool: async (id: number) => {
|
||||
return await request.delete({ url: `/hrm/talent-pool/delete?id=` + id })
|
||||
},
|
||||
|
||||
// 导出人才库 Excel
|
||||
exportTalentPool: async (params) => {
|
||||
return await request.download({ url: `/hrm/talent-pool/export-excel`, params })
|
||||
}
|
||||
}
|
||||
|
|
@ -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 })
|
||||
}
|
||||
}
|
||||
|
|
@ -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 })
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,106 @@
|
|||
import request from '@/config/axios'
|
||||
|
||||
// 员工档案信息 VO
|
||||
export interface UserVO {
|
||||
id: number // 唯一主键
|
||||
acctId: number // 用户登录账号IDsys_user表
|
||||
userNo: string // 员工编号
|
||||
realName: string // 员工姓名
|
||||
phone: string // 手机号
|
||||
email: string // 邮箱
|
||||
employmentDate: Date // 入职日期
|
||||
regularizationDate: Date // 转正日期
|
||||
postId: number // 岗位Id
|
||||
postLevel: number // 职级
|
||||
gradeLevel: number // 档级
|
||||
employType: number // 聘用形式(全职、见习、实习、劳务、联创、其他)
|
||||
trialStartDate: Date // 试用开始日期
|
||||
trialEndDate: Date // 试用结束日期
|
||||
probationPeriod: number // 试用期限(月)
|
||||
contractStartDate: Date // 合同开始日期
|
||||
contractEndDate: Date // 合同结束日期
|
||||
contractTerm: number // 合同期限(年)
|
||||
gender: number // 性别(男、女、其他)
|
||||
age: string // 年龄
|
||||
resume: string // 简历附件
|
||||
workPhoto: string // 形象照
|
||||
idCardFaceSide: string // 身份证人像
|
||||
idCardNationalEmblemSide: string // 身份证国徽
|
||||
currentAddress: string // 现住址
|
||||
idCardNumber: string // 身份证号
|
||||
birthDate: Date // 出生日期
|
||||
issuingAuthority: string // 发证机关
|
||||
nation: number // 民族(56个民族)
|
||||
householdRegistrationScan: string // 户口扫描件
|
||||
householdType: number // 户籍类型(农村、城镇)
|
||||
householdAddress: string // 户籍地
|
||||
politicalStatus: number // 政治面貌(共青团员、中共预备党员、中共党员、群众、其他)
|
||||
maritalStatus: number // 婚姻状况(未婚、已婚未育、已婚已育)
|
||||
relationship1: number // 关系1(父母、夫妻、兄弟、姊妹、朋友、其他)
|
||||
contactName1: string // 联系人姓名1
|
||||
contactPhone1: string // 联系手机号1
|
||||
relationship2: number // 关系2(父母、夫妻、兄弟、姊妹、朋友、其他)
|
||||
contactName2: string // 联系人姓名2
|
||||
contactPhone2: string // 联系手机号2
|
||||
bankBranch: string // 工商银行开户支行
|
||||
salaryCardNumber: string // 工资卡卡号
|
||||
accountRelationship: number // 账户名与本人关系(父亲、母亲)
|
||||
pensionCardHolder: string // 敬老费银行卡户名
|
||||
pensionAccountNumber: string // 敬老费银行账号
|
||||
pensionBankBranch: string // 敬老费开户行网点
|
||||
insuranceStatus: number // 五险缴纳情况(未缴纳过、已缴纳过)
|
||||
oneInchPhoto: string // 1寸白底照(当未缴纳五险一金,需要上传)
|
||||
resignationCertScan: string // 离职证明扫描件
|
||||
highestEducation: string // 最高学历
|
||||
educationSystemType: number // 学制类型(全日制、非全日制)
|
||||
educationCertificateScan: string // 学历扫描件
|
||||
status: number // 状态
|
||||
deptId: number // 部门ID
|
||||
}
|
||||
|
||||
// 员工档案信息 API
|
||||
export const UserApi = {
|
||||
// 查询员工档案信息分页
|
||||
getUserPage: async (params: any) => {
|
||||
return await request.get({ url: `/hrm/user/page`, params })
|
||||
},
|
||||
|
||||
// 查询员工档案信息详情
|
||||
getUser: async (id: number) => {
|
||||
return await request.get({ url: `/hrm/user/get?id=` + id })
|
||||
},
|
||||
|
||||
// 新增员工档案信息
|
||||
createUser: async (data: UserVO) => {
|
||||
return await request.post({ url: `/hrm/user/create`, data })
|
||||
},
|
||||
|
||||
// 修改员工档案信息
|
||||
updateUser: async (data: UserVO) => {
|
||||
return await request.put({ url: `/hrm/user/update`, data })
|
||||
},
|
||||
|
||||
// 删除员工档案信息
|
||||
deleteUser: async (id: number) => {
|
||||
return await request.delete({ url: `/hrm/user/delete?id=` + id })
|
||||
},
|
||||
|
||||
// 导出员工档案信息 Excel
|
||||
exportUser: async (params) => {
|
||||
return await request.download({ url: `/hrm/user/export-excel`, params })
|
||||
},
|
||||
|
||||
// ==================== 子表(教育信息) ====================
|
||||
|
||||
// 获得教育信息列表
|
||||
getUserEducationInfoListByUserId: async (userId) => {
|
||||
return await request.get({ url: `/hrm/user/user-education-info/list-by-user-id?userId=` + userId })
|
||||
},
|
||||
|
||||
// ==================== 子表(工作经历信息) ====================
|
||||
|
||||
// 获得工作经历信息列表
|
||||
getUserWorkInfoListByUserId: async (userId) => {
|
||||
return await request.get({ url: `/hrm/user/user-work-info/list-by-user-id?userId=` + userId })
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,45 @@
|
|||
import request from '@/config/axios'
|
||||
|
||||
// 教育信息 VO
|
||||
export interface UserEducationInfoVO {
|
||||
id: number // 唯一主键
|
||||
userId: number // 员工档案ID(关联hrm_user_infor)
|
||||
education: number // 学历
|
||||
beginDate: Date // 入学日期
|
||||
graduationDate: Date // 毕业日期
|
||||
schoolName: string // 学校名称
|
||||
major: string // 专业名称
|
||||
}
|
||||
|
||||
// 教育信息 API
|
||||
export const UserEducationInfoApi = {
|
||||
// 查询教育信息分页
|
||||
getUserEducationInfoPage: async (params: any) => {
|
||||
return await request.get({ url: `/hrm/user-education-info/page`, params })
|
||||
},
|
||||
|
||||
// 查询教育信息详情
|
||||
getUserEducationInfo: async (id: number) => {
|
||||
return await request.get({ url: `/hrm/user-education-info/get?id=` + id })
|
||||
},
|
||||
|
||||
// 新增教育信息
|
||||
createUserEducationInfo: async (data: UserEducationInfoVO) => {
|
||||
return await request.post({ url: `/hrm/user-education-info/create`, data })
|
||||
},
|
||||
|
||||
// 修改教育信息
|
||||
updateUserEducationInfo: async (data: UserEducationInfoVO) => {
|
||||
return await request.put({ url: `/hrm/user-education-info/update`, data })
|
||||
},
|
||||
|
||||
// 删除教育信息
|
||||
deleteUserEducationInfo: async (id: number) => {
|
||||
return await request.delete({ url: `/hrm/user-education-info/delete?id=` + id })
|
||||
},
|
||||
|
||||
// 导出教育信息 Excel
|
||||
exportUserEducationInfo: async (params) => {
|
||||
return await request.download({ url: `/hrm/user-education-info/export-excel`, params })
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,48 @@
|
|||
import request from '@/config/axios'
|
||||
|
||||
// 员工消息 VO
|
||||
export interface UserMessageVO {
|
||||
id: number // 主键 ID
|
||||
userId: number // 员工ID
|
||||
messageType: number // 消息类型,如系统通知、提醒、关怀等
|
||||
careType: number // 消息关怀类型,如生日、节日等
|
||||
title: string // 通知主题
|
||||
content: string // 通知内容
|
||||
noticeMethod: number // 通知方式,如邮件、短信、系统通知
|
||||
noticeTime: Date // 通知时间
|
||||
messageStatus: number // 消息状态:0=未读,1=已读
|
||||
readTime: Date // 已读时间
|
||||
}
|
||||
|
||||
// 员工消息 API
|
||||
export const UserMessageApi = {
|
||||
// 查询员工消息分页
|
||||
getUserMessagePage: async (params: any) => {
|
||||
return await request.get({ url: `/hrm/user-message/page`, params })
|
||||
},
|
||||
|
||||
// 查询员工消息详情
|
||||
getUserMessage: async (id: number) => {
|
||||
return await request.get({ url: `/hrm/user-message/get?id=` + id })
|
||||
},
|
||||
|
||||
// 新增员工消息
|
||||
createUserMessage: async (data: UserMessageVO) => {
|
||||
return await request.post({ url: `/hrm/user-message/create`, data })
|
||||
},
|
||||
|
||||
// 修改员工消息
|
||||
updateUserMessage: async (data: UserMessageVO) => {
|
||||
return await request.put({ url: `/hrm/user-message/update`, data })
|
||||
},
|
||||
|
||||
// 删除员工消息
|
||||
deleteUserMessage: async (id: number) => {
|
||||
return await request.delete({ url: `/hrm/user-message/delete?id=` + id })
|
||||
},
|
||||
|
||||
// 导出员工消息 Excel
|
||||
exportUserMessage: async (params) => {
|
||||
return await request.download({ url: `/hrm/user-message/export-excel`, params })
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,46 @@
|
|||
import request from '@/config/axios'
|
||||
|
||||
// 入职申请 VO
|
||||
export interface UserOnboardingVO {
|
||||
id: number // 主键,自动递增
|
||||
talentId: number // 人才库id
|
||||
userId: number // 员工ID
|
||||
processInstanceId: string // 工作流编号
|
||||
auditStatus: number // 审批状态
|
||||
employType: number // 聘用形式(全职、见习、实习、劳务、劳动、联创、其他)
|
||||
eSignature: string // 员工签字
|
||||
submissionDate: Date // 提交日期
|
||||
}
|
||||
|
||||
// 入职申请 API
|
||||
export const UserOnboardingApi = {
|
||||
// 查询入职申请分页
|
||||
getUserOnboardingPage: async (params: any) => {
|
||||
return await request.get({ url: `/hrm/user-onboarding/page`, params })
|
||||
},
|
||||
|
||||
// 查询入职申请详情
|
||||
getUserOnboarding: async (id: number) => {
|
||||
return await request.get({ url: `/hrm/user-onboarding/get?id=` + id })
|
||||
},
|
||||
|
||||
// 新增入职申请
|
||||
createUserOnboarding: async (data: UserOnboardingVO) => {
|
||||
return await request.post({ url: `/hrm/user-onboarding/create`, data })
|
||||
},
|
||||
|
||||
// 修改入职申请
|
||||
updateUserOnboarding: async (data: UserOnboardingVO) => {
|
||||
return await request.put({ url: `/hrm/user-onboarding/update`, data })
|
||||
},
|
||||
|
||||
// 删除入职申请
|
||||
deleteUserOnboarding: async (id: number) => {
|
||||
return await request.delete({ url: `/hrm/user-onboarding/delete?id=` + id })
|
||||
},
|
||||
|
||||
// 导出入职申请 Excel
|
||||
exportUserOnboarding: async (params) => {
|
||||
return await request.download({ url: `/hrm/user-onboarding/export-excel`, params })
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,46 @@
|
|||
import request from '@/config/axios'
|
||||
|
||||
// 工作经历信息 VO
|
||||
export interface UserWorkInfoVO {
|
||||
id: number // 唯一主键
|
||||
userId: number // 员工档案ID(关联hrm_user_infor)
|
||||
companyName: string // 单位名称
|
||||
deptName: string // 部门名称
|
||||
postName: string // 职位名称
|
||||
startDate: Date // 开始日期
|
||||
endDate: Date // 离职日期
|
||||
monthlySalary: number // 待遇(元/月)
|
||||
}
|
||||
|
||||
// 工作经历信息 API
|
||||
export const UserWorkInfoApi = {
|
||||
// 查询工作经历信息分页
|
||||
getUserWorkInfoPage: async (params: any) => {
|
||||
return await request.get({ url: `/hrm/user-work-info/page`, params })
|
||||
},
|
||||
|
||||
// 查询工作经历信息详情
|
||||
getUserWorkInfo: async (id: number) => {
|
||||
return await request.get({ url: `/hrm/user-work-info/get?id=` + id })
|
||||
},
|
||||
|
||||
// 新增工作经历信息
|
||||
createUserWorkInfo: async (data: UserWorkInfoVO) => {
|
||||
return await request.post({ url: `/hrm/user-work-info/create`, data })
|
||||
},
|
||||
|
||||
// 修改工作经历信息
|
||||
updateUserWorkInfo: async (data: UserWorkInfoVO) => {
|
||||
return await request.put({ url: `/hrm/user-work-info/update`, data })
|
||||
},
|
||||
|
||||
// 删除工作经历信息
|
||||
deleteUserWorkInfo: async (id: number) => {
|
||||
return await request.delete({ url: `/hrm/user-work-info/delete?id=` + id })
|
||||
},
|
||||
|
||||
// 导出工作经历信息 Excel
|
||||
exportUserWorkInfo: async (params) => {
|
||||
return await request.download({ url: `/hrm/user-work-info/export-excel`, params })
|
||||
}
|
||||
}
|
||||
|
|
@ -49,8 +49,8 @@ const formData = ref({
|
|||
description: undefined,
|
||||
})
|
||||
const formRules = reactive({
|
||||
name: [{ required: true, message: '合同名称不能为空', trigger: 'blur' }],
|
||||
url: [{ required: true, message: '文件地址不能为空', trigger: 'blur' }],
|
||||
// name: [{ required: true, message: '合同名称不能为空', trigger: 'blur' }],
|
||||
// url: [{ required: true, message: '文件地址不能为空', trigger: 'blur' }],
|
||||
})
|
||||
const formRef = ref() // 表单 Ref
|
||||
|
||||
|
|
|
|||
|
|
@ -0,0 +1,197 @@
|
|||
<template>
|
||||
<Dialog :title="dialogTitle" v-model="dialogVisible">
|
||||
<el-form
|
||||
ref="formRef"
|
||||
:model="formData"
|
||||
:rules="formRules"
|
||||
label-width="100px"
|
||||
v-loading="formLoading"
|
||||
>
|
||||
<el-form-item label="通知类型(公告、新闻、制度)" prop="annoType">
|
||||
<el-select v-model="formData.annoType" placeholder="请选择通知类型(公告、新闻、制度)">
|
||||
<el-option
|
||||
v-for="dict in getIntDictOptions(DICT_TYPE.HRM_ANNO_TYPE)"
|
||||
:key="dict.value"
|
||||
:label="dict.label"
|
||||
:value="dict.value"
|
||||
/>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item label="标题" prop="title">
|
||||
<el-input v-model="formData.title" placeholder="请输入标题" />
|
||||
</el-form-item>
|
||||
<el-form-item label="内容" prop="content">
|
||||
<Editor v-model="formData.content" height="150px" />
|
||||
</el-form-item>
|
||||
<el-form-item label="公告类别(公告:人事任免、放假通知、其他)" prop="publishType">
|
||||
<el-select v-model="formData.publishType" placeholder="请选择公告类别(公告:人事任免、放假通知、其他)">
|
||||
<el-option
|
||||
v-for="dict in getIntDictOptions(DICT_TYPE.HRM_PUBLISH_TYPE)"
|
||||
:key="dict.value"
|
||||
:label="dict.label"
|
||||
:value="dict.value"
|
||||
/>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item label="署名" prop="publishName">
|
||||
<el-input v-model="formData.publishName" placeholder="请输入署名" />
|
||||
</el-form-item>
|
||||
<el-form-item label="附件" prop="attachment">
|
||||
<el-input v-model="formData.attachment" placeholder="请输入附件" />
|
||||
</el-form-item>
|
||||
<el-form-item label="发布模式(0=立即,1=定时)" prop="publishMode">
|
||||
<el-select v-model="formData.publishMode" placeholder="请选择发布模式(0=立即,1=定时)">
|
||||
<el-option
|
||||
v-for="dict in getIntDictOptions(DICT_TYPE.HRM_PUBLISH_MODE)"
|
||||
:key="dict.value"
|
||||
:label="dict.label"
|
||||
:value="dict.value"
|
||||
/>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item label="计划发布时间. 立即发布时为空" prop="publishPlanTime">
|
||||
<el-date-picker
|
||||
v-model="formData.publishPlanTime"
|
||||
type="date"
|
||||
value-format="x"
|
||||
placeholder="选择计划发布时间. 立即发布时为空"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="实际发布时间" prop="publishRealTime">
|
||||
<el-date-picker
|
||||
v-model="formData.publishRealTime"
|
||||
type="date"
|
||||
value-format="x"
|
||||
placeholder="选择实际发布时间"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="发布范围类型 1公司 2部门 3人员" prop="publishRangerType">
|
||||
<el-select v-model="formData.publishRangerType" placeholder="请选择发布范围类型 1公司 2部门 3人员">
|
||||
<el-option
|
||||
v-for="dict in getIntDictOptions(DICT_TYPE.HRM_PUBLISH_RANGER_TYPE)"
|
||||
:key="dict.value"
|
||||
:label="dict.label"
|
||||
:value="dict.value"
|
||||
/>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item label="发布范围选择" prop="publishRanger">
|
||||
<el-input v-model="formData.publishRanger" placeholder="请输入发布范围选择" />
|
||||
</el-form-item>
|
||||
<el-form-item label="发布状态。已发布 未发布" prop="publishStatus">
|
||||
<el-select v-model="formData.publishStatus" placeholder="请选择发布状态。已发布 未发布">
|
||||
<el-option
|
||||
v-for="dict in getIntDictOptions(DICT_TYPE.HRM_PUBLISH_STATUS)"
|
||||
:key="dict.value"
|
||||
:label="dict.label"
|
||||
:value="dict.value"
|
||||
/>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
<template #footer>
|
||||
<el-button @click="submitForm" type="primary" :disabled="formLoading">确 定</el-button>
|
||||
<el-button @click="dialogVisible = false">取 消</el-button>
|
||||
</template>
|
||||
</Dialog>
|
||||
</template>
|
||||
<script setup lang="ts">
|
||||
import { getIntDictOptions, DICT_TYPE } from '@/utils/dict'
|
||||
import { AnnouncementApi, AnnouncementVO } from '@/api/hrm/announcement'
|
||||
|
||||
/** 通知表(公告、新闻、制度) 表单 */
|
||||
defineOptions({ name: 'AnnouncementForm' })
|
||||
|
||||
const { t } = useI18n() // 国际化
|
||||
const message = useMessage() // 消息弹窗
|
||||
|
||||
const dialogVisible = ref(false) // 弹窗的是否展示
|
||||
const dialogTitle = ref('') // 弹窗的标题
|
||||
const formLoading = ref(false) // 表单的加载中:1)修改时的数据加载;2)提交的按钮禁用
|
||||
const formType = ref('') // 表单的类型:create - 新增;update - 修改
|
||||
const formData = ref({
|
||||
id: undefined,
|
||||
annoType: undefined,
|
||||
title: undefined,
|
||||
content: undefined,
|
||||
publishType: undefined,
|
||||
publishName: undefined,
|
||||
attachment: undefined,
|
||||
publishMode: undefined,
|
||||
publishPlanTime: undefined,
|
||||
publishRealTime: undefined,
|
||||
publishRangerType: undefined,
|
||||
publishRanger: undefined,
|
||||
publishStatus: undefined
|
||||
})
|
||||
const formRules = reactive({
|
||||
annoType: [{ required: true, message: '通知类型(公告、新闻、制度)不能为空', trigger: 'change' }],
|
||||
title: [{ required: true, message: '标题不能为空', trigger: 'blur' }],
|
||||
content: [{ required: true, message: '内容不能为空', trigger: 'blur' }],
|
||||
publishName: [{ required: true, message: '署名不能为空', trigger: 'blur' }],
|
||||
publishMode: [{ required: true, message: '发布模式(0=立即,1=定时)不能为空', trigger: 'change' }]
|
||||
})
|
||||
const formRef = ref() // 表单 Ref
|
||||
|
||||
/** 打开弹窗 */
|
||||
const open = async (type: string, id?: number) => {
|
||||
dialogVisible.value = true
|
||||
dialogTitle.value = t('action.' + type)
|
||||
formType.value = type
|
||||
resetForm()
|
||||
// 修改时,设置数据
|
||||
if (id) {
|
||||
formLoading.value = true
|
||||
try {
|
||||
formData.value = await AnnouncementApi.getAnnouncement(id)
|
||||
} finally {
|
||||
formLoading.value = false
|
||||
}
|
||||
}
|
||||
}
|
||||
defineExpose({ open }) // 提供 open 方法,用于打开弹窗
|
||||
|
||||
/** 提交表单 */
|
||||
const emit = defineEmits(['success']) // 定义 success 事件,用于操作成功后的回调
|
||||
const submitForm = async () => {
|
||||
// 校验表单
|
||||
await formRef.value.validate()
|
||||
// 提交请求
|
||||
formLoading.value = true
|
||||
try {
|
||||
const data = formData.value as unknown as AnnouncementVO
|
||||
if (formType.value === 'create') {
|
||||
await AnnouncementApi.createAnnouncement(data)
|
||||
message.success(t('common.createSuccess'))
|
||||
} else {
|
||||
await AnnouncementApi.updateAnnouncement(data)
|
||||
message.success(t('common.updateSuccess'))
|
||||
}
|
||||
dialogVisible.value = false
|
||||
// 发送操作成功的事件
|
||||
emit('success')
|
||||
} finally {
|
||||
formLoading.value = false
|
||||
}
|
||||
}
|
||||
|
||||
/** 重置表单 */
|
||||
const resetForm = () => {
|
||||
formData.value = {
|
||||
id: undefined,
|
||||
annoType: undefined,
|
||||
title: undefined,
|
||||
content: undefined,
|
||||
publishType: undefined,
|
||||
publishName: undefined,
|
||||
attachment: undefined,
|
||||
publishMode: undefined,
|
||||
publishPlanTime: undefined,
|
||||
publishRealTime: undefined,
|
||||
publishRangerType: undefined,
|
||||
publishRanger: undefined,
|
||||
publishStatus: undefined
|
||||
}
|
||||
formRef.value?.resetFields()
|
||||
}
|
||||
</script>
|
||||
|
|
@ -0,0 +1,366 @@
|
|||
<template>
|
||||
<ContentWrap>
|
||||
<!-- 搜索工作栏 -->
|
||||
<el-form
|
||||
class="-mb-15px"
|
||||
:model="queryParams"
|
||||
ref="queryFormRef"
|
||||
:inline="true"
|
||||
label-width="68px"
|
||||
>
|
||||
<el-form-item label="通知类型(公告、新闻、制度)" prop="annoType">
|
||||
<el-select
|
||||
v-model="queryParams.annoType"
|
||||
placeholder="请选择通知类型(公告、新闻、制度)"
|
||||
clearable
|
||||
class="!w-240px"
|
||||
>
|
||||
<el-option
|
||||
v-for="dict in getIntDictOptions(DICT_TYPE.HRM_ANNO_TYPE)"
|
||||
:key="dict.value"
|
||||
:label="dict.label"
|
||||
:value="dict.value"
|
||||
/>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item label="标题" prop="title">
|
||||
<el-input
|
||||
v-model="queryParams.title"
|
||||
placeholder="请输入标题"
|
||||
clearable
|
||||
@keyup.enter="handleQuery"
|
||||
class="!w-240px"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="公告类别(公告:人事任免、放假通知、其他)" prop="publishType">
|
||||
<el-select
|
||||
v-model="queryParams.publishType"
|
||||
placeholder="请选择公告类别(公告:人事任免、放假通知、其他)"
|
||||
clearable
|
||||
class="!w-240px"
|
||||
>
|
||||
<el-option
|
||||
v-for="dict in getIntDictOptions(DICT_TYPE.HRM_PUBLISH_TYPE)"
|
||||
:key="dict.value"
|
||||
:label="dict.label"
|
||||
:value="dict.value"
|
||||
/>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item label="署名" prop="publishName">
|
||||
<el-input
|
||||
v-model="queryParams.publishName"
|
||||
placeholder="请输入署名"
|
||||
clearable
|
||||
@keyup.enter="handleQuery"
|
||||
class="!w-240px"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="附件" prop="attachment">
|
||||
<el-input
|
||||
v-model="queryParams.attachment"
|
||||
placeholder="请输入附件"
|
||||
clearable
|
||||
@keyup.enter="handleQuery"
|
||||
class="!w-240px"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="发布模式(0=立即,1=定时)" prop="publishMode">
|
||||
<el-select
|
||||
v-model="queryParams.publishMode"
|
||||
placeholder="请选择发布模式(0=立即,1=定时)"
|
||||
clearable
|
||||
class="!w-240px"
|
||||
>
|
||||
<el-option
|
||||
v-for="dict in getIntDictOptions(DICT_TYPE.HRM_PUBLISH_MODE)"
|
||||
:key="dict.value"
|
||||
:label="dict.label"
|
||||
:value="dict.value"
|
||||
/>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item label="计划发布时间. 立即发布时为空" prop="publishPlanTime">
|
||||
<el-date-picker
|
||||
v-model="queryParams.publishPlanTime"
|
||||
value-format="YYYY-MM-DD HH:mm:ss"
|
||||
type="daterange"
|
||||
start-placeholder="开始日期"
|
||||
end-placeholder="结束日期"
|
||||
:default-time="[new Date('1 00:00:00'), new Date('1 23:59:59')]"
|
||||
class="!w-220px"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="实际发布时间" prop="publishRealTime">
|
||||
<el-date-picker
|
||||
v-model="queryParams.publishRealTime"
|
||||
value-format="YYYY-MM-DD HH:mm:ss"
|
||||
type="daterange"
|
||||
start-placeholder="开始日期"
|
||||
end-placeholder="结束日期"
|
||||
:default-time="[new Date('1 00:00:00'), new Date('1 23:59:59')]"
|
||||
class="!w-220px"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="发布范围类型 1公司 2部门 3人员" prop="publishRangerType">
|
||||
<el-select
|
||||
v-model="queryParams.publishRangerType"
|
||||
placeholder="请选择发布范围类型 1公司 2部门 3人员"
|
||||
clearable
|
||||
class="!w-240px"
|
||||
>
|
||||
<el-option
|
||||
v-for="dict in getIntDictOptions(DICT_TYPE.HRM_PUBLISH_RANGER_TYPE)"
|
||||
:key="dict.value"
|
||||
:label="dict.label"
|
||||
:value="dict.value"
|
||||
/>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item label="发布范围选择" prop="publishRanger">
|
||||
<el-input
|
||||
v-model="queryParams.publishRanger"
|
||||
placeholder="请输入发布范围选择"
|
||||
clearable
|
||||
@keyup.enter="handleQuery"
|
||||
class="!w-240px"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="发布状态。已发布 未发布" prop="publishStatus">
|
||||
<el-select
|
||||
v-model="queryParams.publishStatus"
|
||||
placeholder="请选择发布状态。已发布 未发布"
|
||||
clearable
|
||||
class="!w-240px"
|
||||
>
|
||||
<el-option
|
||||
v-for="dict in getIntDictOptions(DICT_TYPE.HRM_PUBLISH_STATUS)"
|
||||
:key="dict.value"
|
||||
:label="dict.label"
|
||||
:value="dict.value"
|
||||
/>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item label="创建时间" prop="createTime">
|
||||
<el-date-picker
|
||||
v-model="queryParams.createTime"
|
||||
value-format="YYYY-MM-DD HH:mm:ss"
|
||||
type="daterange"
|
||||
start-placeholder="开始日期"
|
||||
end-placeholder="结束日期"
|
||||
:default-time="[new Date('1 00:00:00'), new Date('1 23:59:59')]"
|
||||
class="!w-220px"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item>
|
||||
<el-button @click="handleQuery"><Icon icon="ep:search" class="mr-5px" /> 搜索</el-button>
|
||||
<el-button @click="resetQuery"><Icon icon="ep:refresh" class="mr-5px" /> 重置</el-button>
|
||||
<el-button
|
||||
type="primary"
|
||||
plain
|
||||
@click="openForm('create')"
|
||||
v-hasPermi="['hrm:announcement:create']"
|
||||
>
|
||||
<Icon icon="ep:plus" class="mr-5px" /> 新增
|
||||
</el-button>
|
||||
<el-button
|
||||
type="success"
|
||||
plain
|
||||
@click="handleExport"
|
||||
:loading="exportLoading"
|
||||
v-hasPermi="['hrm:announcement:export']"
|
||||
>
|
||||
<Icon icon="ep:download" class="mr-5px" /> 导出
|
||||
</el-button>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
</ContentWrap>
|
||||
|
||||
<!-- 列表 -->
|
||||
<ContentWrap>
|
||||
<el-table v-loading="loading" :data="list" :stripe="true" :show-overflow-tooltip="true">
|
||||
<el-table-column label="唯一主键" align="center" prop="id" />
|
||||
<el-table-column label="通知类型(公告、新闻、制度)" align="center" prop="annoType">
|
||||
<template #default="scope">
|
||||
<dict-tag :type="DICT_TYPE.HRM_ANNO_TYPE" :value="scope.row.annoType" />
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="标题" align="center" prop="title" />
|
||||
<el-table-column label="内容" align="center" prop="content" />
|
||||
<el-table-column label="公告类别(公告:人事任免、放假通知、其他)" align="center" prop="publishType">
|
||||
<template #default="scope">
|
||||
<dict-tag :type="DICT_TYPE.HRM_PUBLISH_TYPE" :value="scope.row.publishType" />
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="署名" align="center" prop="publishName" />
|
||||
<el-table-column label="附件" align="center" prop="attachment" />
|
||||
<el-table-column label="发布模式(0=立即,1=定时)" align="center" prop="publishMode">
|
||||
<template #default="scope">
|
||||
<dict-tag :type="DICT_TYPE.HRM_PUBLISH_MODE" :value="scope.row.publishMode" />
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column
|
||||
label="计划发布时间. 立即发布时为空"
|
||||
align="center"
|
||||
prop="publishPlanTime"
|
||||
:formatter="dateFormatter"
|
||||
width="180px"
|
||||
/>
|
||||
<el-table-column
|
||||
label="实际发布时间"
|
||||
align="center"
|
||||
prop="publishRealTime"
|
||||
:formatter="dateFormatter"
|
||||
width="180px"
|
||||
/>
|
||||
<el-table-column label="发布范围类型 1公司 2部门 3人员" align="center" prop="publishRangerType">
|
||||
<template #default="scope">
|
||||
<dict-tag :type="DICT_TYPE.HRM_PUBLISH_RANGER_TYPE" :value="scope.row.publishRangerType" />
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="发布范围选择" align="center" prop="publishRanger" />
|
||||
<el-table-column label="发布状态。已发布 未发布" align="center" prop="publishStatus">
|
||||
<template #default="scope">
|
||||
<dict-tag :type="DICT_TYPE.HRM_PUBLISH_STATUS" :value="scope.row.publishStatus" />
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column
|
||||
label="创建时间"
|
||||
align="center"
|
||||
prop="createTime"
|
||||
:formatter="dateFormatter"
|
||||
width="180px"
|
||||
/>
|
||||
<el-table-column label="操作" align="center" min-width="120px">
|
||||
<template #default="scope">
|
||||
<el-button
|
||||
link
|
||||
type="primary"
|
||||
@click="openForm('update', scope.row.id)"
|
||||
v-hasPermi="['hrm:announcement:update']"
|
||||
>
|
||||
编辑
|
||||
</el-button>
|
||||
<el-button
|
||||
link
|
||||
type="danger"
|
||||
@click="handleDelete(scope.row.id)"
|
||||
v-hasPermi="['hrm:announcement:delete']"
|
||||
>
|
||||
删除
|
||||
</el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
<!-- 分页 -->
|
||||
<Pagination
|
||||
:total="total"
|
||||
v-model:page="queryParams.pageNo"
|
||||
v-model:limit="queryParams.pageSize"
|
||||
@pagination="getList"
|
||||
/>
|
||||
</ContentWrap>
|
||||
|
||||
<!-- 表单弹窗:添加/修改 -->
|
||||
<AnnouncementForm ref="formRef" @success="getList" />
|
||||
</template>
|
||||
|
||||
<script setup lang="ts">
|
||||
import { getIntDictOptions, DICT_TYPE } from '@/utils/dict'
|
||||
import { dateFormatter } from '@/utils/formatTime'
|
||||
import download from '@/utils/download'
|
||||
import { AnnouncementApi, AnnouncementVO } from '@/api/hrm/announcement'
|
||||
import AnnouncementForm from './AnnouncementForm.vue'
|
||||
|
||||
/** 通知表(公告、新闻、制度) 列表 */
|
||||
defineOptions({ name: 'Announcement' })
|
||||
|
||||
const message = useMessage() // 消息弹窗
|
||||
const { t } = useI18n() // 国际化
|
||||
|
||||
const loading = ref(true) // 列表的加载中
|
||||
const list = ref<AnnouncementVO[]>([]) // 列表的数据
|
||||
const total = ref(0) // 列表的总页数
|
||||
const queryParams = reactive({
|
||||
pageNo: 1,
|
||||
pageSize: 10,
|
||||
annoType: undefined,
|
||||
title: undefined,
|
||||
content: undefined,
|
||||
publishType: undefined,
|
||||
publishName: undefined,
|
||||
attachment: undefined,
|
||||
publishMode: undefined,
|
||||
publishPlanTime: [],
|
||||
publishRealTime: [],
|
||||
publishRangerType: undefined,
|
||||
publishRanger: undefined,
|
||||
publishStatus: undefined,
|
||||
createTime: []
|
||||
})
|
||||
const queryFormRef = ref() // 搜索的表单
|
||||
const exportLoading = ref(false) // 导出的加载中
|
||||
|
||||
/** 查询列表 */
|
||||
const getList = async () => {
|
||||
loading.value = true
|
||||
try {
|
||||
const data = await AnnouncementApi.getAnnouncementPage(queryParams)
|
||||
list.value = data.list
|
||||
total.value = data.total
|
||||
} finally {
|
||||
loading.value = false
|
||||
}
|
||||
}
|
||||
|
||||
/** 搜索按钮操作 */
|
||||
const handleQuery = () => {
|
||||
queryParams.pageNo = 1
|
||||
getList()
|
||||
}
|
||||
|
||||
/** 重置按钮操作 */
|
||||
const resetQuery = () => {
|
||||
queryFormRef.value.resetFields()
|
||||
handleQuery()
|
||||
}
|
||||
|
||||
/** 添加/修改操作 */
|
||||
const formRef = ref()
|
||||
const openForm = (type: string, id?: number) => {
|
||||
formRef.value.open(type, id)
|
||||
}
|
||||
|
||||
/** 删除按钮操作 */
|
||||
const handleDelete = async (id: number) => {
|
||||
try {
|
||||
// 删除的二次确认
|
||||
await message.delConfirm()
|
||||
// 发起删除
|
||||
await AnnouncementApi.deleteAnnouncement(id)
|
||||
message.success(t('common.delSuccess'))
|
||||
// 刷新列表
|
||||
await getList()
|
||||
} catch {}
|
||||
}
|
||||
|
||||
/** 导出按钮操作 */
|
||||
const handleExport = async () => {
|
||||
try {
|
||||
// 导出的二次确认
|
||||
await message.exportConfirm()
|
||||
// 发起导出
|
||||
exportLoading.value = true
|
||||
const data = await AnnouncementApi.exportAnnouncement(queryParams)
|
||||
download.excel(data, '通知表(公告、新闻、制度).xls')
|
||||
} catch {
|
||||
} finally {
|
||||
exportLoading.value = false
|
||||
}
|
||||
}
|
||||
|
||||
/** 初始化 **/
|
||||
onMounted(() => {
|
||||
getList()
|
||||
})
|
||||
</script>
|
||||
|
|
@ -0,0 +1,224 @@
|
|||
<template>
|
||||
<Dialog :title="dialogTitle" v-model="dialogVisible">
|
||||
<el-form
|
||||
ref="formRef"
|
||||
:model="formData"
|
||||
:rules="formRules"
|
||||
label-width="100px"
|
||||
v-loading="formLoading"
|
||||
>
|
||||
<el-form-item label="关怀类型(字典):生日、节日、入职周年、转正日期到期、任职开始/结束、退休到期、身份证有效期到期等" prop="careType">
|
||||
<el-select v-model="formData.careType" placeholder="请选择关怀类型(字典):生日、节日、入职周年、转正日期到期、任职开始/结束、退休到期、身份证有效期到期等">
|
||||
<el-option
|
||||
v-for="dict in getIntDictOptions(DICT_TYPE.HRM_CARA_TYPE)"
|
||||
:key="dict.value"
|
||||
:label="dict.label"
|
||||
:value="dict.value"
|
||||
/>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item label="通知主题" prop="noticeTitle">
|
||||
<el-input v-model="formData.noticeTitle" placeholder="请输入通知主题" />
|
||||
</el-form-item>
|
||||
<el-form-item label="发布范围类型 1公司 2部门 3人员" prop="publishRangerType">
|
||||
<el-select v-model="formData.publishRangerType" placeholder="请选择发布范围类型 1公司 2部门 3人员">
|
||||
<el-option
|
||||
v-for="dict in getIntDictOptions(DICT_TYPE.HRM_PUBLISH_RANGER_TYPE)"
|
||||
:key="dict.value"
|
||||
:label="dict.label"
|
||||
:value="dict.value"
|
||||
/>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item label="发送时间方式(字典):前一天、当天、后一天" prop="releaseMethod">
|
||||
<el-select v-model="formData.releaseMethod" placeholder="请选择发送时间方式(字典):前一天、当天、后一天">
|
||||
<el-option
|
||||
v-for="dict in getIntDictOptions(DICT_TYPE.HRM_RELEASE_METHOD)"
|
||||
:key="dict.value"
|
||||
:label="dict.label"
|
||||
:value="dict.value"
|
||||
/>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item label="发布范围选择" prop="publishRanger">
|
||||
<el-input v-model="formData.publishRanger" placeholder="请输入发布范围选择" />
|
||||
</el-form-item>
|
||||
<el-form-item label="发布时间" prop="releaseTime">
|
||||
<el-date-picker
|
||||
v-model="formData.releaseTime"
|
||||
type="date"
|
||||
value-format="x"
|
||||
placeholder="选择发布时间"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="发布日期/节日日期" prop="releaseDate">
|
||||
<el-date-picker
|
||||
v-model="formData.releaseDate"
|
||||
type="date"
|
||||
value-format="x"
|
||||
placeholder="选择发布日期/节日日期"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="通知方式(字典):邮件、短信、系统通知" prop="noticeMethod">
|
||||
<el-select v-model="formData.noticeMethod" placeholder="请选择通知方式(字典):邮件、短信、系统通知">
|
||||
<el-option
|
||||
v-for="dict in getIntDictOptions(DICT_TYPE.HRM_NOTICE_METHOD)"
|
||||
:key="dict.value"
|
||||
:label="dict.label"
|
||||
:value="dict.value"
|
||||
/>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item label="通知内容" prop="noticeContent">
|
||||
<Editor v-model="formData.noticeContent" height="150px" />
|
||||
</el-form-item>
|
||||
<el-form-item label="入职关怀日期类型" prop="employmentDateType">
|
||||
<el-select v-model="formData.employmentDateType" placeholder="请选择入职关怀日期类型">
|
||||
<el-option
|
||||
v-for="dict in getIntDictOptions(DICT_TYPE.HRM_EMPLOYMENT_TYPE)"
|
||||
:key="dict.value"
|
||||
:label="dict.label"
|
||||
:value="dict.value"
|
||||
/>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item label="入职关怀发送通知" prop="employmentNoticeType">
|
||||
<el-select v-model="formData.employmentNoticeType" placeholder="请选择入职关怀发送通知">
|
||||
<el-option
|
||||
v-for="dict in getIntDictOptions(DICT_TYPE.HRM_EMPLOYMENT_NOTICE_TYPE)"
|
||||
:key="dict.value"
|
||||
:label="dict.label"
|
||||
:value="dict.value"
|
||||
/>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item label="自定义通知类型" prop="diyType">
|
||||
<el-select v-model="formData.diyType" placeholder="请选择自定义通知类型">
|
||||
<el-option
|
||||
v-for="dict in getIntDictOptions(DICT_TYPE.HRM_DIY_TYPE)"
|
||||
:key="dict.value"
|
||||
:label="dict.label"
|
||||
:value="dict.value"
|
||||
/>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item label="自定义事件名称" prop="diyEventType">
|
||||
<el-select v-model="formData.diyEventType" placeholder="请选择自定义事件名称">
|
||||
<el-option
|
||||
v-for="dict in getIntDictOptions(DICT_TYPE.HRM_DIY_EVENT_TYPE)"
|
||||
:key="dict.value"
|
||||
:label="dict.label"
|
||||
:value="dict.value"
|
||||
/>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
<template #footer>
|
||||
<el-button @click="submitForm" type="primary" :disabled="formLoading">确 定</el-button>
|
||||
<el-button @click="dialogVisible = false">取 消</el-button>
|
||||
</template>
|
||||
</Dialog>
|
||||
</template>
|
||||
<script setup lang="ts">
|
||||
import { getIntDictOptions, DICT_TYPE } from '@/utils/dict'
|
||||
import { CareNoticeApi, CareNoticeVO } from '@/api/hrm/carenotice'
|
||||
|
||||
/** 关怀通知 表单 */
|
||||
defineOptions({ name: 'CareNoticeForm' })
|
||||
|
||||
const { t } = useI18n() // 国际化
|
||||
const message = useMessage() // 消息弹窗
|
||||
|
||||
const dialogVisible = ref(false) // 弹窗的是否展示
|
||||
const dialogTitle = ref('') // 弹窗的标题
|
||||
const formLoading = ref(false) // 表单的加载中:1)修改时的数据加载;2)提交的按钮禁用
|
||||
const formType = ref('') // 表单的类型:create - 新增;update - 修改
|
||||
const formData = ref({
|
||||
id: undefined,
|
||||
careType: undefined,
|
||||
noticeTitle: undefined,
|
||||
publishRangerType: undefined,
|
||||
releaseMethod: undefined,
|
||||
publishRanger: undefined,
|
||||
releaseTime: undefined,
|
||||
releaseDate: undefined,
|
||||
noticeMethod: undefined,
|
||||
noticeContent: undefined,
|
||||
employmentDateType: undefined,
|
||||
employmentNoticeType: undefined,
|
||||
diyType: undefined,
|
||||
diyEventType: undefined
|
||||
})
|
||||
const formRules = reactive({
|
||||
careType: [{ required: true, message: '关怀类型(字典):生日、节日、入职周年、转正日期到期、任职开始/结束、退休到期、身份证有效期到期等不能为空', trigger: 'change' }],
|
||||
noticeTitle: [{ required: true, message: '通知主题不能为空', trigger: 'blur' }],
|
||||
releaseMethod: [{ required: true, message: '发送时间方式(字典):前一天、当天、后一天不能为空', trigger: 'change' }],
|
||||
releaseTime: [{ required: true, message: '发布时间不能为空', trigger: 'blur' }],
|
||||
noticeMethod: [{ required: true, message: '通知方式(字典):邮件、短信、系统通知不能为空', trigger: 'change' }],
|
||||
noticeContent: [{ required: true, message: '通知内容不能为空', trigger: 'blur' }]
|
||||
})
|
||||
const formRef = ref() // 表单 Ref
|
||||
|
||||
/** 打开弹窗 */
|
||||
const open = async (type: string, id?: number) => {
|
||||
dialogVisible.value = true
|
||||
dialogTitle.value = t('action.' + type)
|
||||
formType.value = type
|
||||
resetForm()
|
||||
// 修改时,设置数据
|
||||
if (id) {
|
||||
formLoading.value = true
|
||||
try {
|
||||
formData.value = await CareNoticeApi.getCareNotice(id)
|
||||
} finally {
|
||||
formLoading.value = false
|
||||
}
|
||||
}
|
||||
}
|
||||
defineExpose({ open }) // 提供 open 方法,用于打开弹窗
|
||||
|
||||
/** 提交表单 */
|
||||
const emit = defineEmits(['success']) // 定义 success 事件,用于操作成功后的回调
|
||||
const submitForm = async () => {
|
||||
// 校验表单
|
||||
await formRef.value.validate()
|
||||
// 提交请求
|
||||
formLoading.value = true
|
||||
try {
|
||||
const data = formData.value as unknown as CareNoticeVO
|
||||
if (formType.value === 'create') {
|
||||
await CareNoticeApi.createCareNotice(data)
|
||||
message.success(t('common.createSuccess'))
|
||||
} else {
|
||||
await CareNoticeApi.updateCareNotice(data)
|
||||
message.success(t('common.updateSuccess'))
|
||||
}
|
||||
dialogVisible.value = false
|
||||
// 发送操作成功的事件
|
||||
emit('success')
|
||||
} finally {
|
||||
formLoading.value = false
|
||||
}
|
||||
}
|
||||
|
||||
/** 重置表单 */
|
||||
const resetForm = () => {
|
||||
formData.value = {
|
||||
id: undefined,
|
||||
careType: undefined,
|
||||
noticeTitle: undefined,
|
||||
publishRangerType: undefined,
|
||||
releaseMethod: undefined,
|
||||
publishRanger: undefined,
|
||||
releaseTime: undefined,
|
||||
releaseDate: undefined,
|
||||
noticeMethod: undefined,
|
||||
noticeContent: undefined,
|
||||
employmentDateType: undefined,
|
||||
employmentNoticeType: undefined,
|
||||
diyType: undefined,
|
||||
diyEventType: undefined
|
||||
}
|
||||
formRef.value?.resetFields()
|
||||
}
|
||||
</script>
|
||||
|
|
@ -0,0 +1,395 @@
|
|||
<template>
|
||||
<ContentWrap>
|
||||
<!-- 搜索工作栏 -->
|
||||
<el-form
|
||||
class="-mb-15px"
|
||||
:model="queryParams"
|
||||
ref="queryFormRef"
|
||||
:inline="true"
|
||||
label-width="68px"
|
||||
>
|
||||
<el-form-item label="关怀类型(字典):生日、节日、入职周年、转正日期到期、任职开始/结束、退休到期、身份证有效期到期等" prop="careType">
|
||||
<el-select
|
||||
v-model="queryParams.careType"
|
||||
placeholder="请选择关怀类型(字典):生日、节日、入职周年、转正日期到期、任职开始/结束、退休到期、身份证有效期到期等"
|
||||
clearable
|
||||
class="!w-240px"
|
||||
>
|
||||
<el-option
|
||||
v-for="dict in getIntDictOptions(DICT_TYPE.HRM_CARA_TYPE)"
|
||||
:key="dict.value"
|
||||
:label="dict.label"
|
||||
:value="dict.value"
|
||||
/>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item label="通知主题" prop="noticeTitle">
|
||||
<el-input
|
||||
v-model="queryParams.noticeTitle"
|
||||
placeholder="请输入通知主题"
|
||||
clearable
|
||||
@keyup.enter="handleQuery"
|
||||
class="!w-240px"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="发布范围类型 1公司 2部门 3人员" prop="publishRangerType">
|
||||
<el-select
|
||||
v-model="queryParams.publishRangerType"
|
||||
placeholder="请选择发布范围类型 1公司 2部门 3人员"
|
||||
clearable
|
||||
class="!w-240px"
|
||||
>
|
||||
<el-option
|
||||
v-for="dict in getIntDictOptions(DICT_TYPE.HRM_PUBLISH_RANGER_TYPE)"
|
||||
:key="dict.value"
|
||||
:label="dict.label"
|
||||
:value="dict.value"
|
||||
/>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item label="发送时间方式(字典):前一天、当天、后一天" prop="releaseMethod">
|
||||
<el-select
|
||||
v-model="queryParams.releaseMethod"
|
||||
placeholder="请选择发送时间方式(字典):前一天、当天、后一天"
|
||||
clearable
|
||||
class="!w-240px"
|
||||
>
|
||||
<el-option
|
||||
v-for="dict in getIntDictOptions(DICT_TYPE.HRM_RELEASE_METHOD)"
|
||||
:key="dict.value"
|
||||
:label="dict.label"
|
||||
:value="dict.value"
|
||||
/>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item label="发布范围选择" prop="publishRanger">
|
||||
<el-input
|
||||
v-model="queryParams.publishRanger"
|
||||
placeholder="请输入发布范围选择"
|
||||
clearable
|
||||
@keyup.enter="handleQuery"
|
||||
class="!w-240px"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="发布时间" prop="releaseTime">
|
||||
<el-date-picker
|
||||
v-model="queryParams.releaseTime"
|
||||
value-format="YYYY-MM-DD HH:mm:ss"
|
||||
type="daterange"
|
||||
start-placeholder="开始日期"
|
||||
end-placeholder="结束日期"
|
||||
:default-time="[new Date('1 00:00:00'), new Date('1 23:59:59')]"
|
||||
class="!w-220px"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="发布日期/节日日期" prop="releaseDate">
|
||||
<el-date-picker
|
||||
v-model="queryParams.releaseDate"
|
||||
value-format="YYYY-MM-DD HH:mm:ss"
|
||||
type="daterange"
|
||||
start-placeholder="开始日期"
|
||||
end-placeholder="结束日期"
|
||||
:default-time="[new Date('1 00:00:00'), new Date('1 23:59:59')]"
|
||||
class="!w-220px"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="通知方式(字典):邮件、短信、系统通知" prop="noticeMethod">
|
||||
<el-select
|
||||
v-model="queryParams.noticeMethod"
|
||||
placeholder="请选择通知方式(字典):邮件、短信、系统通知"
|
||||
clearable
|
||||
class="!w-240px"
|
||||
>
|
||||
<el-option
|
||||
v-for="dict in getIntDictOptions(DICT_TYPE.HRM_NOTICE_METHOD)"
|
||||
:key="dict.value"
|
||||
:label="dict.label"
|
||||
:value="dict.value"
|
||||
/>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item label="入职关怀日期类型" prop="employmentDateType">
|
||||
<el-select
|
||||
v-model="queryParams.employmentDateType"
|
||||
placeholder="请选择入职关怀日期类型"
|
||||
clearable
|
||||
class="!w-240px"
|
||||
>
|
||||
<el-option
|
||||
v-for="dict in getIntDictOptions(DICT_TYPE.HRM_EMPLOYMENT_TYPE)"
|
||||
:key="dict.value"
|
||||
:label="dict.label"
|
||||
:value="dict.value"
|
||||
/>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item label="入职关怀发送通知" prop="employmentNoticeType">
|
||||
<el-select
|
||||
v-model="queryParams.employmentNoticeType"
|
||||
placeholder="请选择入职关怀发送通知"
|
||||
clearable
|
||||
class="!w-240px"
|
||||
>
|
||||
<el-option
|
||||
v-for="dict in getIntDictOptions(DICT_TYPE.HRM_EMPLOYMENT_NOTICE_TYPE)"
|
||||
:key="dict.value"
|
||||
:label="dict.label"
|
||||
:value="dict.value"
|
||||
/>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item label="自定义通知类型" prop="diyType">
|
||||
<el-select
|
||||
v-model="queryParams.diyType"
|
||||
placeholder="请选择自定义通知类型"
|
||||
clearable
|
||||
class="!w-240px"
|
||||
>
|
||||
<el-option
|
||||
v-for="dict in getIntDictOptions(DICT_TYPE.HRM_DIY_TYPE)"
|
||||
:key="dict.value"
|
||||
:label="dict.label"
|
||||
:value="dict.value"
|
||||
/>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item label="自定义事件名称" prop="diyEventType">
|
||||
<el-select
|
||||
v-model="queryParams.diyEventType"
|
||||
placeholder="请选择自定义事件名称"
|
||||
clearable
|
||||
class="!w-240px"
|
||||
>
|
||||
<el-option
|
||||
v-for="dict in getIntDictOptions(DICT_TYPE.HRM_DIY_EVENT_TYPE)"
|
||||
:key="dict.value"
|
||||
:label="dict.label"
|
||||
:value="dict.value"
|
||||
/>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item label="创建时间" prop="createTime">
|
||||
<el-date-picker
|
||||
v-model="queryParams.createTime"
|
||||
value-format="YYYY-MM-DD HH:mm:ss"
|
||||
type="daterange"
|
||||
start-placeholder="开始日期"
|
||||
end-placeholder="结束日期"
|
||||
:default-time="[new Date('1 00:00:00'), new Date('1 23:59:59')]"
|
||||
class="!w-220px"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item>
|
||||
<el-button @click="handleQuery"><Icon icon="ep:search" class="mr-5px" /> 搜索</el-button>
|
||||
<el-button @click="resetQuery"><Icon icon="ep:refresh" class="mr-5px" /> 重置</el-button>
|
||||
<el-button
|
||||
type="primary"
|
||||
plain
|
||||
@click="openForm('create')"
|
||||
v-hasPermi="['hrm:care-notice:create']"
|
||||
>
|
||||
<Icon icon="ep:plus" class="mr-5px" /> 新增
|
||||
</el-button>
|
||||
<el-button
|
||||
type="success"
|
||||
plain
|
||||
@click="handleExport"
|
||||
:loading="exportLoading"
|
||||
v-hasPermi="['hrm:care-notice:export']"
|
||||
>
|
||||
<Icon icon="ep:download" class="mr-5px" /> 导出
|
||||
</el-button>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
</ContentWrap>
|
||||
|
||||
<!-- 列表 -->
|
||||
<ContentWrap>
|
||||
<el-table v-loading="loading" :data="list" :stripe="true" :show-overflow-tooltip="true">
|
||||
<el-table-column label="主键,自动递增" align="center" prop="id" />
|
||||
<el-table-column label="关怀类型(字典):生日、节日、入职周年、转正日期到期、任职开始/结束、退休到期、身份证有效期到期等" align="center" prop="careType">
|
||||
<template #default="scope">
|
||||
<dict-tag :type="DICT_TYPE.HRM_CARA_TYPE" :value="scope.row.careType" />
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="通知主题" align="center" prop="noticeTitle" />
|
||||
<el-table-column label="发布范围类型 1公司 2部门 3人员" align="center" prop="publishRangerType">
|
||||
<template #default="scope">
|
||||
<dict-tag :type="DICT_TYPE.HRM_PUBLISH_RANGER_TYPE" :value="scope.row.publishRangerType" />
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="发送时间方式(字典):前一天、当天、后一天" align="center" prop="releaseMethod">
|
||||
<template #default="scope">
|
||||
<dict-tag :type="DICT_TYPE.HRM_RELEASE_METHOD" :value="scope.row.releaseMethod" />
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="发布范围选择" align="center" prop="publishRanger" />
|
||||
<el-table-column label="发布时间" align="center" prop="releaseTime" />
|
||||
<el-table-column label="发布日期/节日日期" align="center" prop="releaseDate" />
|
||||
<el-table-column label="通知方式(字典):邮件、短信、系统通知" align="center" prop="noticeMethod">
|
||||
<template #default="scope">
|
||||
<dict-tag :type="DICT_TYPE.HRM_NOTICE_METHOD" :value="scope.row.noticeMethod" />
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="通知内容" align="center" prop="noticeContent" />
|
||||
<el-table-column label="入职关怀日期类型" align="center" prop="employmentDateType">
|
||||
<template #default="scope">
|
||||
<dict-tag :type="DICT_TYPE.HRM_EMPLOYMENT_TYPE" :value="scope.row.employmentDateType" />
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="入职关怀发送通知" align="center" prop="employmentNoticeType">
|
||||
<template #default="scope">
|
||||
<dict-tag :type="DICT_TYPE.HRM_EMPLOYMENT_NOTICE_TYPE" :value="scope.row.employmentNoticeType" />
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="自定义通知类型" align="center" prop="diyType">
|
||||
<template #default="scope">
|
||||
<dict-tag :type="DICT_TYPE.HRM_DIY_TYPE" :value="scope.row.diyType" />
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="自定义事件名称" align="center" prop="diyEventType">
|
||||
<template #default="scope">
|
||||
<dict-tag :type="DICT_TYPE.HRM_DIY_EVENT_TYPE" :value="scope.row.diyEventType" />
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column
|
||||
label="创建时间"
|
||||
align="center"
|
||||
prop="createTime"
|
||||
:formatter="dateFormatter"
|
||||
width="180px"
|
||||
/>
|
||||
<el-table-column label="操作" align="center" min-width="120px">
|
||||
<template #default="scope">
|
||||
<el-button
|
||||
link
|
||||
type="primary"
|
||||
@click="openForm('update', scope.row.id)"
|
||||
v-hasPermi="['hrm:care-notice:update']"
|
||||
>
|
||||
编辑
|
||||
</el-button>
|
||||
<el-button
|
||||
link
|
||||
type="danger"
|
||||
@click="handleDelete(scope.row.id)"
|
||||
v-hasPermi="['hrm:care-notice:delete']"
|
||||
>
|
||||
删除
|
||||
</el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
<!-- 分页 -->
|
||||
<Pagination
|
||||
:total="total"
|
||||
v-model:page="queryParams.pageNo"
|
||||
v-model:limit="queryParams.pageSize"
|
||||
@pagination="getList"
|
||||
/>
|
||||
</ContentWrap>
|
||||
|
||||
<!-- 表单弹窗:添加/修改 -->
|
||||
<CareNoticeForm ref="formRef" @success="getList" />
|
||||
</template>
|
||||
|
||||
<script setup lang="ts">
|
||||
import { getIntDictOptions, DICT_TYPE } from '@/utils/dict'
|
||||
import { dateFormatter } from '@/utils/formatTime'
|
||||
import download from '@/utils/download'
|
||||
import { CareNoticeApi, CareNoticeVO } from '@/api/hrm/carenotice'
|
||||
import CareNoticeForm from './CareNoticeForm.vue'
|
||||
|
||||
/** 关怀通知 列表 */
|
||||
defineOptions({ name: 'CareNotice' })
|
||||
|
||||
const message = useMessage() // 消息弹窗
|
||||
const { t } = useI18n() // 国际化
|
||||
|
||||
const loading = ref(true) // 列表的加载中
|
||||
const list = ref<CareNoticeVO[]>([]) // 列表的数据
|
||||
const total = ref(0) // 列表的总页数
|
||||
const queryParams = reactive({
|
||||
pageNo: 1,
|
||||
pageSize: 10,
|
||||
careType: undefined,
|
||||
noticeTitle: undefined,
|
||||
publishRangerType: undefined,
|
||||
releaseMethod: undefined,
|
||||
publishRanger: undefined,
|
||||
releaseTime: [],
|
||||
releaseDate: [],
|
||||
noticeMethod: undefined,
|
||||
noticeContent: undefined,
|
||||
employmentDateType: undefined,
|
||||
employmentNoticeType: undefined,
|
||||
diyType: undefined,
|
||||
diyEventType: undefined,
|
||||
createTime: []
|
||||
})
|
||||
const queryFormRef = ref() // 搜索的表单
|
||||
const exportLoading = ref(false) // 导出的加载中
|
||||
|
||||
/** 查询列表 */
|
||||
const getList = async () => {
|
||||
loading.value = true
|
||||
try {
|
||||
const data = await CareNoticeApi.getCareNoticePage(queryParams)
|
||||
list.value = data.list
|
||||
total.value = data.total
|
||||
} finally {
|
||||
loading.value = false
|
||||
}
|
||||
}
|
||||
|
||||
/** 搜索按钮操作 */
|
||||
const handleQuery = () => {
|
||||
queryParams.pageNo = 1
|
||||
getList()
|
||||
}
|
||||
|
||||
/** 重置按钮操作 */
|
||||
const resetQuery = () => {
|
||||
queryFormRef.value.resetFields()
|
||||
handleQuery()
|
||||
}
|
||||
|
||||
/** 添加/修改操作 */
|
||||
const formRef = ref()
|
||||
const openForm = (type: string, id?: number) => {
|
||||
formRef.value.open(type, id)
|
||||
}
|
||||
|
||||
/** 删除按钮操作 */
|
||||
const handleDelete = async (id: number) => {
|
||||
try {
|
||||
// 删除的二次确认
|
||||
await message.delConfirm()
|
||||
// 发起删除
|
||||
await CareNoticeApi.deleteCareNotice(id)
|
||||
message.success(t('common.delSuccess'))
|
||||
// 刷新列表
|
||||
await getList()
|
||||
} catch {}
|
||||
}
|
||||
|
||||
/** 导出按钮操作 */
|
||||
const handleExport = async () => {
|
||||
try {
|
||||
// 导出的二次确认
|
||||
await message.exportConfirm()
|
||||
// 发起导出
|
||||
exportLoading.value = true
|
||||
const data = await CareNoticeApi.exportCareNotice(queryParams)
|
||||
download.excel(data, '关怀通知.xls')
|
||||
} catch {
|
||||
} finally {
|
||||
exportLoading.value = false
|
||||
}
|
||||
}
|
||||
|
||||
/** 初始化 **/
|
||||
onMounted(() => {
|
||||
getList()
|
||||
})
|
||||
</script>
|
||||
|
|
@ -0,0 +1,136 @@
|
|||
<template>
|
||||
<Dialog :title="dialogTitle" v-model="dialogVisible">
|
||||
<el-form
|
||||
ref="formRef"
|
||||
:model="formData"
|
||||
:rules="formRules"
|
||||
label-width="100px"
|
||||
v-loading="formLoading"
|
||||
>
|
||||
<el-form-item label="申请人ID" prop="userId">
|
||||
<el-input v-model="formData.userId" placeholder="请输入申请人ID" />
|
||||
</el-form-item>
|
||||
<el-form-item label="工作流编号" prop="processInstanceId">
|
||||
<el-input v-model="formData.processInstanceId" placeholder="请输入工作流编号" />
|
||||
</el-form-item>
|
||||
<el-form-item label="审批状态" prop="auditStatus">
|
||||
<el-radio-group v-model="formData.auditStatus">
|
||||
<el-radio value="1">请选择字典生成</el-radio>
|
||||
</el-radio-group>
|
||||
</el-form-item>
|
||||
<el-form-item label="证明类型(在职证明、实习证明)" prop="certificateType">
|
||||
<el-select v-model="formData.certificateType" placeholder="请选择证明类型(在职证明、实习证明)">
|
||||
<el-option
|
||||
v-for="dict in getIntDictOptions(DICT_TYPE.HRM_CERTIFICATE_TYPE)"
|
||||
:key="dict.value"
|
||||
:label="dict.label"
|
||||
:value="dict.value"
|
||||
/>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item label="申请日期" prop="applicationDate">
|
||||
<el-date-picker
|
||||
v-model="formData.applicationDate"
|
||||
type="date"
|
||||
value-format="x"
|
||||
placeholder="选择申请日期"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="申请事由" prop="reason">
|
||||
<el-input v-model="formData.reason" placeholder="请输入申请事由" />
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
<template #footer>
|
||||
<el-button @click="submitForm" type="primary" :disabled="formLoading">确 定</el-button>
|
||||
<el-button @click="dialogVisible = false">取 消</el-button>
|
||||
</template>
|
||||
</Dialog>
|
||||
</template>
|
||||
<script setup lang="ts">
|
||||
import { getIntDictOptions, DICT_TYPE } from '@/utils/dict'
|
||||
import { CertificateRequestApi, CertificateRequestVO } from '@/api/hrm/certificaterequest'
|
||||
|
||||
/** 人事证明申请 表单 */
|
||||
defineOptions({ name: 'CertificateRequestForm' })
|
||||
|
||||
const { t } = useI18n() // 国际化
|
||||
const message = useMessage() // 消息弹窗
|
||||
|
||||
const dialogVisible = ref(false) // 弹窗的是否展示
|
||||
const dialogTitle = ref('') // 弹窗的标题
|
||||
const formLoading = ref(false) // 表单的加载中:1)修改时的数据加载;2)提交的按钮禁用
|
||||
const formType = ref('') // 表单的类型:create - 新增;update - 修改
|
||||
const formData = ref({
|
||||
id: undefined,
|
||||
userId: undefined,
|
||||
processInstanceId: undefined,
|
||||
auditStatus: undefined,
|
||||
certificateType: undefined,
|
||||
applicationDate: undefined,
|
||||
reason: undefined
|
||||
})
|
||||
const formRules = reactive({
|
||||
userId: [{ required: true, message: '申请人ID不能为空', trigger: 'blur' }],
|
||||
auditStatus: [{ required: true, message: '审批状态不能为空', trigger: 'blur' }],
|
||||
certificateType: [{ required: true, message: '证明类型(在职证明、实习证明)不能为空', trigger: 'change' }],
|
||||
applicationDate: [{ required: true, message: '申请日期不能为空', trigger: 'blur' }],
|
||||
reason: [{ required: true, message: '申请事由不能为空', trigger: 'blur' }]
|
||||
})
|
||||
const formRef = ref() // 表单 Ref
|
||||
|
||||
/** 打开弹窗 */
|
||||
const open = async (type: string, id?: number) => {
|
||||
dialogVisible.value = true
|
||||
dialogTitle.value = t('action.' + type)
|
||||
formType.value = type
|
||||
resetForm()
|
||||
// 修改时,设置数据
|
||||
if (id) {
|
||||
formLoading.value = true
|
||||
try {
|
||||
formData.value = await CertificateRequestApi.getCertificateRequest(id)
|
||||
} finally {
|
||||
formLoading.value = false
|
||||
}
|
||||
}
|
||||
}
|
||||
defineExpose({ open }) // 提供 open 方法,用于打开弹窗
|
||||
|
||||
/** 提交表单 */
|
||||
const emit = defineEmits(['success']) // 定义 success 事件,用于操作成功后的回调
|
||||
const submitForm = async () => {
|
||||
// 校验表单
|
||||
await formRef.value.validate()
|
||||
// 提交请求
|
||||
formLoading.value = true
|
||||
try {
|
||||
const data = formData.value as unknown as CertificateRequestVO
|
||||
if (formType.value === 'create') {
|
||||
await CertificateRequestApi.createCertificateRequest(data)
|
||||
message.success(t('common.createSuccess'))
|
||||
} else {
|
||||
await CertificateRequestApi.updateCertificateRequest(data)
|
||||
message.success(t('common.updateSuccess'))
|
||||
}
|
||||
dialogVisible.value = false
|
||||
// 发送操作成功的事件
|
||||
emit('success')
|
||||
} finally {
|
||||
formLoading.value = false
|
||||
}
|
||||
}
|
||||
|
||||
/** 重置表单 */
|
||||
const resetForm = () => {
|
||||
formData.value = {
|
||||
id: undefined,
|
||||
userId: undefined,
|
||||
processInstanceId: undefined,
|
||||
auditStatus: undefined,
|
||||
certificateType: undefined,
|
||||
applicationDate: undefined,
|
||||
reason: undefined
|
||||
}
|
||||
formRef.value?.resetFields()
|
||||
}
|
||||
</script>
|
||||
|
|
@ -0,0 +1,256 @@
|
|||
<template>
|
||||
<ContentWrap>
|
||||
<!-- 搜索工作栏 -->
|
||||
<el-form
|
||||
class="-mb-15px"
|
||||
:model="queryParams"
|
||||
ref="queryFormRef"
|
||||
:inline="true"
|
||||
label-width="68px"
|
||||
>
|
||||
<el-form-item label="申请人ID" prop="userId">
|
||||
<el-input
|
||||
v-model="queryParams.userId"
|
||||
placeholder="请输入申请人ID"
|
||||
clearable
|
||||
@keyup.enter="handleQuery"
|
||||
class="!w-240px"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="工作流编号" prop="processInstanceId">
|
||||
<el-input
|
||||
v-model="queryParams.processInstanceId"
|
||||
placeholder="请输入工作流编号"
|
||||
clearable
|
||||
@keyup.enter="handleQuery"
|
||||
class="!w-240px"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="审批状态" prop="auditStatus">
|
||||
<el-select
|
||||
v-model="queryParams.auditStatus"
|
||||
placeholder="请选择审批状态"
|
||||
clearable
|
||||
class="!w-240px"
|
||||
>
|
||||
<el-option label="请选择字典生成" value="" />
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item label="证明类型(在职证明、实习证明)" prop="certificateType">
|
||||
<el-select
|
||||
v-model="queryParams.certificateType"
|
||||
placeholder="请选择证明类型(在职证明、实习证明)"
|
||||
clearable
|
||||
class="!w-240px"
|
||||
>
|
||||
<el-option
|
||||
v-for="dict in getIntDictOptions(DICT_TYPE.HRM_CERTIFICATE_TYPE)"
|
||||
:key="dict.value"
|
||||
:label="dict.label"
|
||||
:value="dict.value"
|
||||
/>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item label="申请日期" prop="applicationDate">
|
||||
<el-date-picker
|
||||
v-model="queryParams.applicationDate"
|
||||
value-format="YYYY-MM-DD HH:mm:ss"
|
||||
type="daterange"
|
||||
start-placeholder="开始日期"
|
||||
end-placeholder="结束日期"
|
||||
:default-time="[new Date('1 00:00:00'), new Date('1 23:59:59')]"
|
||||
class="!w-220px"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="申请事由" prop="reason">
|
||||
<el-input
|
||||
v-model="queryParams.reason"
|
||||
placeholder="请输入申请事由"
|
||||
clearable
|
||||
@keyup.enter="handleQuery"
|
||||
class="!w-240px"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="创建时间" prop="createTime">
|
||||
<el-date-picker
|
||||
v-model="queryParams.createTime"
|
||||
value-format="YYYY-MM-DD HH:mm:ss"
|
||||
type="daterange"
|
||||
start-placeholder="开始日期"
|
||||
end-placeholder="结束日期"
|
||||
:default-time="[new Date('1 00:00:00'), new Date('1 23:59:59')]"
|
||||
class="!w-220px"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item>
|
||||
<el-button @click="handleQuery"><Icon icon="ep:search" class="mr-5px" /> 搜索</el-button>
|
||||
<el-button @click="resetQuery"><Icon icon="ep:refresh" class="mr-5px" /> 重置</el-button>
|
||||
<el-button
|
||||
type="primary"
|
||||
plain
|
||||
@click="openForm('create')"
|
||||
v-hasPermi="['hrm:certificate-request:create']"
|
||||
>
|
||||
<Icon icon="ep:plus" class="mr-5px" /> 新增
|
||||
</el-button>
|
||||
<el-button
|
||||
type="success"
|
||||
plain
|
||||
@click="handleExport"
|
||||
:loading="exportLoading"
|
||||
v-hasPermi="['hrm:certificate-request:export']"
|
||||
>
|
||||
<Icon icon="ep:download" class="mr-5px" /> 导出
|
||||
</el-button>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
</ContentWrap>
|
||||
|
||||
<!-- 列表 -->
|
||||
<ContentWrap>
|
||||
<el-table v-loading="loading" :data="list" :stripe="true" :show-overflow-tooltip="true">
|
||||
<el-table-column label="主键ID" align="center" prop="id" />
|
||||
<el-table-column label="申请人ID" align="center" prop="userId" />
|
||||
<el-table-column label="工作流编号" align="center" prop="processInstanceId" />
|
||||
<el-table-column label="审批状态" align="center" prop="auditStatus" />
|
||||
<el-table-column label="证明类型(在职证明、实习证明)" align="center" prop="certificateType">
|
||||
<template #default="scope">
|
||||
<dict-tag :type="DICT_TYPE.HRM_CERTIFICATE_TYPE" :value="scope.row.certificateType" />
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="申请日期" align="center" prop="applicationDate" />
|
||||
<el-table-column label="申请事由" align="center" prop="reason" />
|
||||
<el-table-column
|
||||
label="创建时间"
|
||||
align="center"
|
||||
prop="createTime"
|
||||
:formatter="dateFormatter"
|
||||
width="180px"
|
||||
/>
|
||||
<el-table-column label="操作" align="center" min-width="120px">
|
||||
<template #default="scope">
|
||||
<el-button
|
||||
link
|
||||
type="primary"
|
||||
@click="openForm('update', scope.row.id)"
|
||||
v-hasPermi="['hrm:certificate-request:update']"
|
||||
>
|
||||
编辑
|
||||
</el-button>
|
||||
<el-button
|
||||
link
|
||||
type="danger"
|
||||
@click="handleDelete(scope.row.id)"
|
||||
v-hasPermi="['hrm:certificate-request:delete']"
|
||||
>
|
||||
删除
|
||||
</el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
<!-- 分页 -->
|
||||
<Pagination
|
||||
:total="total"
|
||||
v-model:page="queryParams.pageNo"
|
||||
v-model:limit="queryParams.pageSize"
|
||||
@pagination="getList"
|
||||
/>
|
||||
</ContentWrap>
|
||||
|
||||
<!-- 表单弹窗:添加/修改 -->
|
||||
<CertificateRequestForm ref="formRef" @success="getList" />
|
||||
</template>
|
||||
|
||||
<script setup lang="ts">
|
||||
import { getIntDictOptions, DICT_TYPE } from '@/utils/dict'
|
||||
import { dateFormatter } from '@/utils/formatTime'
|
||||
import download from '@/utils/download'
|
||||
import { CertificateRequestApi, CertificateRequestVO } from '@/api/hrm/certificaterequest'
|
||||
import CertificateRequestForm from './CertificateRequestForm.vue'
|
||||
|
||||
/** 人事证明申请 列表 */
|
||||
defineOptions({ name: 'CertificateRequest' })
|
||||
|
||||
const message = useMessage() // 消息弹窗
|
||||
const { t } = useI18n() // 国际化
|
||||
|
||||
const loading = ref(true) // 列表的加载中
|
||||
const list = ref<CertificateRequestVO[]>([]) // 列表的数据
|
||||
const total = ref(0) // 列表的总页数
|
||||
const queryParams = reactive({
|
||||
pageNo: 1,
|
||||
pageSize: 10,
|
||||
userId: undefined,
|
||||
processInstanceId: undefined,
|
||||
auditStatus: undefined,
|
||||
certificateType: undefined,
|
||||
applicationDate: [],
|
||||
reason: undefined,
|
||||
createTime: []
|
||||
})
|
||||
const queryFormRef = ref() // 搜索的表单
|
||||
const exportLoading = ref(false) // 导出的加载中
|
||||
|
||||
/** 查询列表 */
|
||||
const getList = async () => {
|
||||
loading.value = true
|
||||
try {
|
||||
const data = await CertificateRequestApi.getCertificateRequestPage(queryParams)
|
||||
list.value = data.list
|
||||
total.value = data.total
|
||||
} finally {
|
||||
loading.value = false
|
||||
}
|
||||
}
|
||||
|
||||
/** 搜索按钮操作 */
|
||||
const handleQuery = () => {
|
||||
queryParams.pageNo = 1
|
||||
getList()
|
||||
}
|
||||
|
||||
/** 重置按钮操作 */
|
||||
const resetQuery = () => {
|
||||
queryFormRef.value.resetFields()
|
||||
handleQuery()
|
||||
}
|
||||
|
||||
/** 添加/修改操作 */
|
||||
const formRef = ref()
|
||||
const openForm = (type: string, id?: number) => {
|
||||
formRef.value.open(type, id)
|
||||
}
|
||||
|
||||
/** 删除按钮操作 */
|
||||
const handleDelete = async (id: number) => {
|
||||
try {
|
||||
// 删除的二次确认
|
||||
await message.delConfirm()
|
||||
// 发起删除
|
||||
await CertificateRequestApi.deleteCertificateRequest(id)
|
||||
message.success(t('common.delSuccess'))
|
||||
// 刷新列表
|
||||
await getList()
|
||||
} catch {}
|
||||
}
|
||||
|
||||
/** 导出按钮操作 */
|
||||
const handleExport = async () => {
|
||||
try {
|
||||
// 导出的二次确认
|
||||
await message.exportConfirm()
|
||||
// 发起导出
|
||||
exportLoading.value = true
|
||||
const data = await CertificateRequestApi.exportCertificateRequest(queryParams)
|
||||
download.excel(data, '人事证明申请.xls')
|
||||
} catch {
|
||||
} finally {
|
||||
exportLoading.value = false
|
||||
}
|
||||
}
|
||||
|
||||
/** 初始化 **/
|
||||
onMounted(() => {
|
||||
getList()
|
||||
})
|
||||
</script>
|
||||
|
|
@ -0,0 +1,163 @@
|
|||
<template>
|
||||
<Dialog :title="dialogTitle" v-model="dialogVisible">
|
||||
<el-form
|
||||
ref="formRef"
|
||||
:model="formData"
|
||||
:rules="formRules"
|
||||
label-width="100px"
|
||||
v-loading="formLoading"
|
||||
>
|
||||
<el-form-item label="课件名称" prop="coursewareName">
|
||||
<el-input v-model="formData.coursewareName" placeholder="请输入课件名称" />
|
||||
</el-form-item>
|
||||
<el-form-item label="作者" prop="author">
|
||||
<el-input v-model="formData.author" placeholder="请输入作者" />
|
||||
</el-form-item>
|
||||
<el-form-item label="工作流编号" prop="processInstanceId">
|
||||
<el-input v-model="formData.processInstanceId" placeholder="请输入工作流编号" />
|
||||
</el-form-item>
|
||||
<el-form-item label="审批状态" prop="auditStatus">
|
||||
<el-radio-group v-model="formData.auditStatus">
|
||||
<el-radio value="1">请选择字典生成</el-radio>
|
||||
</el-radio-group>
|
||||
</el-form-item>
|
||||
<el-form-item label="课程类型" prop="courseType">
|
||||
<el-select v-model="formData.courseType" placeholder="请选择课程类型">
|
||||
<el-option
|
||||
v-for="dict in getIntDictOptions(DICT_TYPE.HRM_COURSE_TYPE)"
|
||||
:key="dict.value"
|
||||
:label="dict.label"
|
||||
:value="dict.value"
|
||||
/>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item label="适合学习的部门. 逗号分隔的部门id" prop="suitableDept">
|
||||
<el-input v-model="formData.suitableDept" placeholder="请输入适合学习的部门. 逗号分隔的部门id" />
|
||||
</el-form-item>
|
||||
<el-form-item label="课件内容" prop="content">
|
||||
<Editor v-model="formData.content" height="150px" />
|
||||
</el-form-item>
|
||||
<el-form-item label="视频附件" prop="videoAttachment">
|
||||
<el-input v-model="formData.videoAttachment" placeholder="请输入视频附件" />
|
||||
</el-form-item>
|
||||
<el-form-item label="课件大纲" prop="outline">
|
||||
<el-input v-model="formData.outline" placeholder="请输入课件大纲" />
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
<!-- 子表的表单 -->
|
||||
<el-tabs v-model="subTabsName">
|
||||
<el-tab-pane label="课件详情" name="coursewareDetail">
|
||||
<CoursewareDetailForm ref="coursewareDetailFormRef" :courseware-id="formData.id" />
|
||||
</el-tab-pane>
|
||||
</el-tabs>
|
||||
<template #footer>
|
||||
<el-button @click="submitForm" type="primary" :disabled="formLoading">确 定</el-button>
|
||||
<el-button @click="dialogVisible = false">取 消</el-button>
|
||||
</template>
|
||||
</Dialog>
|
||||
</template>
|
||||
<script setup lang="ts">
|
||||
import { getIntDictOptions, DICT_TYPE } from '@/utils/dict'
|
||||
import { CoursewareApi, CoursewareVO } from '@/api/hrm/courseware'
|
||||
import CoursewareDetailForm from './components/CoursewareDetailForm.vue'
|
||||
|
||||
/** 课件 表单 */
|
||||
defineOptions({ name: 'CoursewareForm' })
|
||||
|
||||
const { t } = useI18n() // 国际化
|
||||
const message = useMessage() // 消息弹窗
|
||||
|
||||
const dialogVisible = ref(false) // 弹窗的是否展示
|
||||
const dialogTitle = ref('') // 弹窗的标题
|
||||
const formLoading = ref(false) // 表单的加载中:1)修改时的数据加载;2)提交的按钮禁用
|
||||
const formType = ref('') // 表单的类型:create - 新增;update - 修改
|
||||
const formData = ref({
|
||||
id: undefined,
|
||||
coursewareName: undefined,
|
||||
author: undefined,
|
||||
processInstanceId: undefined,
|
||||
auditStatus: undefined,
|
||||
courseType: undefined,
|
||||
suitableDept: undefined,
|
||||
content: undefined,
|
||||
videoAttachment: undefined,
|
||||
outline: undefined
|
||||
})
|
||||
const formRules = reactive({
|
||||
coursewareName: [{ required: true, message: '课件名称不能为空', trigger: 'blur' }],
|
||||
auditStatus: [{ required: true, message: '审批状态不能为空', trigger: 'blur' }]
|
||||
})
|
||||
const formRef = ref() // 表单 Ref
|
||||
|
||||
/** 子表的表单 */
|
||||
const subTabsName = ref('coursewareDetail')
|
||||
const coursewareDetailFormRef = ref()
|
||||
|
||||
/** 打开弹窗 */
|
||||
const open = async (type: string, id?: number) => {
|
||||
dialogVisible.value = true
|
||||
dialogTitle.value = t('action.' + type)
|
||||
formType.value = type
|
||||
resetForm()
|
||||
// 修改时,设置数据
|
||||
if (id) {
|
||||
formLoading.value = true
|
||||
try {
|
||||
formData.value = await CoursewareApi.getCourseware(id)
|
||||
} finally {
|
||||
formLoading.value = false
|
||||
}
|
||||
}
|
||||
}
|
||||
defineExpose({ open }) // 提供 open 方法,用于打开弹窗
|
||||
|
||||
/** 提交表单 */
|
||||
const emit = defineEmits(['success']) // 定义 success 事件,用于操作成功后的回调
|
||||
const submitForm = async () => {
|
||||
// 校验表单
|
||||
await formRef.value.validate()
|
||||
// 校验子表单
|
||||
try {
|
||||
await coursewareDetailFormRef.value.validate()
|
||||
} catch (e) {
|
||||
subTabsName.value = 'coursewareDetail'
|
||||
return
|
||||
}
|
||||
// 提交请求
|
||||
formLoading.value = true
|
||||
try {
|
||||
const data = formData.value as unknown as CoursewareVO
|
||||
// 拼接子表的数据
|
||||
data.coursewareDetails = coursewareDetailFormRef.value.getData()
|
||||
if (formType.value === 'create') {
|
||||
await CoursewareApi.createCourseware(data)
|
||||
message.success(t('common.createSuccess'))
|
||||
} else {
|
||||
await CoursewareApi.updateCourseware(data)
|
||||
message.success(t('common.updateSuccess'))
|
||||
}
|
||||
dialogVisible.value = false
|
||||
// 发送操作成功的事件
|
||||
emit('success')
|
||||
} finally {
|
||||
formLoading.value = false
|
||||
}
|
||||
}
|
||||
|
||||
/** 重置表单 */
|
||||
const resetForm = () => {
|
||||
formData.value = {
|
||||
id: undefined,
|
||||
coursewareName: undefined,
|
||||
author: undefined,
|
||||
processInstanceId: undefined,
|
||||
auditStatus: undefined,
|
||||
courseType: undefined,
|
||||
suitableDept: undefined,
|
||||
content: undefined,
|
||||
videoAttachment: undefined,
|
||||
outline: undefined
|
||||
}
|
||||
formRef.value?.resetFields()
|
||||
}
|
||||
</script>
|
||||
|
|
@ -0,0 +1,148 @@
|
|||
<template>
|
||||
<el-form
|
||||
ref="formRef"
|
||||
:model="formData"
|
||||
:rules="formRules"
|
||||
v-loading="formLoading"
|
||||
label-width="0px"
|
||||
:inline-message="true"
|
||||
>
|
||||
<el-table :data="formData" class="-mt-10px">
|
||||
<el-table-column label="序号" type="index" width="100" />
|
||||
<el-table-column label="题目" min-width="150">
|
||||
<template #default="{ row, $index }">
|
||||
<el-form-item :prop="`${$index}.question`" :rules="formRules.question" class="mb-0px!">
|
||||
<el-input v-model="row.question" placeholder="请输入题目" />
|
||||
</el-form-item>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="题目类型(选择、填空、论述)" min-width="150">
|
||||
<template #default="{ row, $index }">
|
||||
<el-form-item :prop="`${$index}.questionType`" :rules="formRules.questionType" class="mb-0px!">
|
||||
<el-select v-model="row.questionType" placeholder="请选择题目类型(选择、填空、论述)">
|
||||
<el-option
|
||||
v-for="dict in getIntDictOptions(DICT_TYPE.HRM_QUESTION_TYPE)"
|
||||
:key="dict.value"
|
||||
:label="dict.label"
|
||||
:value="dict.value"
|
||||
/>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="答案" min-width="150">
|
||||
<template #default="{ row, $index }">
|
||||
<el-form-item :prop="`${$index}.answer`" :rules="formRules.answer" class="mb-0px!">
|
||||
<el-input v-model="row.answer" placeholder="请输入答案" />
|
||||
</el-form-item>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="选择题选项A" min-width="150">
|
||||
<template #default="{ row, $index }">
|
||||
<el-form-item :prop="`${$index}.optionA`" :rules="formRules.optionA" class="mb-0px!">
|
||||
<el-input v-model="row.optionA" placeholder="请输入选择题选项A" />
|
||||
</el-form-item>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="选择题选项B" min-width="150">
|
||||
<template #default="{ row, $index }">
|
||||
<el-form-item :prop="`${$index}.optionB`" :rules="formRules.optionB" class="mb-0px!">
|
||||
<el-input v-model="row.optionB" placeholder="请输入选择题选项B" />
|
||||
</el-form-item>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="选择题选项C" min-width="150">
|
||||
<template #default="{ row, $index }">
|
||||
<el-form-item :prop="`${$index}.optionC`" :rules="formRules.optionC" class="mb-0px!">
|
||||
<el-input v-model="row.optionC" placeholder="请输入选择题选项C" />
|
||||
</el-form-item>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="选择题选项D" min-width="150">
|
||||
<template #default="{ row, $index }">
|
||||
<el-form-item :prop="`${$index}.optionD`" :rules="formRules.optionD" class="mb-0px!">
|
||||
<el-input v-model="row.optionD" placeholder="请输入选择题选项D" />
|
||||
</el-form-item>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column align="center" fixed="right" label="操作" width="60">
|
||||
<template #default="{ $index }">
|
||||
<el-button @click="handleDelete($index)" link>—</el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
</el-form>
|
||||
<el-row justify="center" class="mt-3">
|
||||
<el-button @click="handleAdd" round>+ 添加课件详情</el-button>
|
||||
</el-row>
|
||||
</template>
|
||||
<script setup lang="ts">
|
||||
import { getIntDictOptions, DICT_TYPE } from '@/utils/dict'
|
||||
import { CoursewareApi } from '@/api/hrm/courseware'
|
||||
|
||||
const props = defineProps<{
|
||||
coursewareId: undefined // 课件ID,关联courseware表(主表的关联字段)
|
||||
}>()
|
||||
const formLoading = ref(false) // 表单的加载中
|
||||
const formData = ref([])
|
||||
const formRules = reactive({
|
||||
coursewareId: [{ required: true, message: '课件ID,关联courseware表不能为空', trigger: 'blur' }],
|
||||
question: [{ required: true, message: '题目不能为空', trigger: 'blur' }],
|
||||
questionType: [{ required: true, message: '题目类型(选择、填空、论述)不能为空', trigger: 'change' }]
|
||||
})
|
||||
const formRef = ref() // 表单 Ref
|
||||
|
||||
/** 监听主表的关联字段的变化,加载对应的子表数据 */
|
||||
watch(
|
||||
() => props.coursewareId,
|
||||
async (val) => {
|
||||
// 1. 重置表单
|
||||
formData.value = []
|
||||
// 2. val 非空,则加载数据
|
||||
if (!val) {
|
||||
return;
|
||||
}
|
||||
try {
|
||||
formLoading.value = true
|
||||
formData.value = await CoursewareApi.getCoursewareDetailListByCoursewareId(val)
|
||||
} finally {
|
||||
formLoading.value = false
|
||||
}
|
||||
},
|
||||
{ immediate: true }
|
||||
)
|
||||
|
||||
/** 新增按钮操作 */
|
||||
const handleAdd = () => {
|
||||
const row = {
|
||||
id: undefined,
|
||||
coursewareId: undefined,
|
||||
question: undefined,
|
||||
questionType: undefined,
|
||||
answer: undefined,
|
||||
optionA: undefined,
|
||||
optionB: undefined,
|
||||
optionC: undefined,
|
||||
optionD: undefined
|
||||
}
|
||||
row.coursewareId = props.coursewareId
|
||||
formData.value.push(row)
|
||||
}
|
||||
|
||||
/** 删除按钮操作 */
|
||||
const handleDelete = (index) => {
|
||||
formData.value.splice(index, 1)
|
||||
}
|
||||
|
||||
/** 表单校验 */
|
||||
const validate = () => {
|
||||
return formRef.value.validate()
|
||||
}
|
||||
|
||||
/** 表单值 */
|
||||
const getData = () => {
|
||||
return formData.value
|
||||
}
|
||||
|
||||
defineExpose({ validate, getData })
|
||||
</script>
|
||||
|
|
@ -0,0 +1,278 @@
|
|||
<template>
|
||||
<ContentWrap>
|
||||
<!-- 搜索工作栏 -->
|
||||
<el-form
|
||||
class="-mb-15px"
|
||||
:model="queryParams"
|
||||
ref="queryFormRef"
|
||||
:inline="true"
|
||||
label-width="68px"
|
||||
>
|
||||
<el-form-item label="课件名称" prop="coursewareName">
|
||||
<el-input
|
||||
v-model="queryParams.coursewareName"
|
||||
placeholder="请输入课件名称"
|
||||
clearable
|
||||
@keyup.enter="handleQuery"
|
||||
class="!w-240px"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="作者" prop="author">
|
||||
<el-input
|
||||
v-model="queryParams.author"
|
||||
placeholder="请输入作者"
|
||||
clearable
|
||||
@keyup.enter="handleQuery"
|
||||
class="!w-240px"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="工作流编号" prop="processInstanceId">
|
||||
<el-input
|
||||
v-model="queryParams.processInstanceId"
|
||||
placeholder="请输入工作流编号"
|
||||
clearable
|
||||
@keyup.enter="handleQuery"
|
||||
class="!w-240px"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="审批状态" prop="auditStatus">
|
||||
<el-select
|
||||
v-model="queryParams.auditStatus"
|
||||
placeholder="请选择审批状态"
|
||||
clearable
|
||||
class="!w-240px"
|
||||
>
|
||||
<el-option label="请选择字典生成" value="" />
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item label="课程类型" prop="courseType">
|
||||
<el-select
|
||||
v-model="queryParams.courseType"
|
||||
placeholder="请选择课程类型"
|
||||
clearable
|
||||
class="!w-240px"
|
||||
>
|
||||
<el-option
|
||||
v-for="dict in getIntDictOptions(DICT_TYPE.HRM_COURSE_TYPE)"
|
||||
:key="dict.value"
|
||||
:label="dict.label"
|
||||
:value="dict.value"
|
||||
/>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item label="适合学习的部门. 逗号分隔的部门id" prop="suitableDept">
|
||||
<el-input
|
||||
v-model="queryParams.suitableDept"
|
||||
placeholder="请输入适合学习的部门. 逗号分隔的部门id"
|
||||
clearable
|
||||
@keyup.enter="handleQuery"
|
||||
class="!w-240px"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="视频附件" prop="videoAttachment">
|
||||
<el-input
|
||||
v-model="queryParams.videoAttachment"
|
||||
placeholder="请输入视频附件"
|
||||
clearable
|
||||
@keyup.enter="handleQuery"
|
||||
class="!w-240px"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="课件大纲" prop="outline">
|
||||
<el-input
|
||||
v-model="queryParams.outline"
|
||||
placeholder="请输入课件大纲"
|
||||
clearable
|
||||
@keyup.enter="handleQuery"
|
||||
class="!w-240px"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="创建时间" prop="createTime">
|
||||
<el-date-picker
|
||||
v-model="queryParams.createTime"
|
||||
value-format="YYYY-MM-DD HH:mm:ss"
|
||||
type="daterange"
|
||||
start-placeholder="开始日期"
|
||||
end-placeholder="结束日期"
|
||||
:default-time="[new Date('1 00:00:00'), new Date('1 23:59:59')]"
|
||||
class="!w-220px"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item>
|
||||
<el-button @click="handleQuery"><Icon icon="ep:search" class="mr-5px" /> 搜索</el-button>
|
||||
<el-button @click="resetQuery"><Icon icon="ep:refresh" class="mr-5px" /> 重置</el-button>
|
||||
<el-button
|
||||
type="primary"
|
||||
plain
|
||||
@click="openForm('create')"
|
||||
v-hasPermi="['hrm:courseware:create']"
|
||||
>
|
||||
<Icon icon="ep:plus" class="mr-5px" /> 新增
|
||||
</el-button>
|
||||
<el-button
|
||||
type="success"
|
||||
plain
|
||||
@click="handleExport"
|
||||
:loading="exportLoading"
|
||||
v-hasPermi="['hrm:courseware:export']"
|
||||
>
|
||||
<Icon icon="ep:download" class="mr-5px" /> 导出
|
||||
</el-button>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
</ContentWrap>
|
||||
|
||||
<!-- 列表 -->
|
||||
<ContentWrap>
|
||||
<el-table v-loading="loading" :data="list" :stripe="true" :show-overflow-tooltip="true">
|
||||
<el-table-column label="主键ID" align="center" prop="id" />
|
||||
<el-table-column label="课件名称" align="center" prop="coursewareName" />
|
||||
<el-table-column label="作者" align="center" prop="author" />
|
||||
<el-table-column label="工作流编号" align="center" prop="processInstanceId" />
|
||||
<el-table-column label="审批状态" align="center" prop="auditStatus" />
|
||||
<el-table-column label="课程类型" align="center" prop="courseType">
|
||||
<template #default="scope">
|
||||
<dict-tag :type="DICT_TYPE.HRM_COURSE_TYPE" :value="scope.row.courseType" />
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="适合学习的部门. 逗号分隔的部门id" align="center" prop="suitableDept" />
|
||||
<el-table-column label="课件内容" align="center" prop="content" />
|
||||
<el-table-column label="视频附件" align="center" prop="videoAttachment" />
|
||||
<el-table-column label="课件大纲" align="center" prop="outline" />
|
||||
<el-table-column
|
||||
label="创建时间"
|
||||
align="center"
|
||||
prop="createTime"
|
||||
:formatter="dateFormatter"
|
||||
width="180px"
|
||||
/>
|
||||
<el-table-column label="操作" align="center" min-width="120px">
|
||||
<template #default="scope">
|
||||
<el-button
|
||||
link
|
||||
type="primary"
|
||||
@click="openForm('update', scope.row.id)"
|
||||
v-hasPermi="['hrm:courseware:update']"
|
||||
>
|
||||
编辑
|
||||
</el-button>
|
||||
<el-button
|
||||
link
|
||||
type="danger"
|
||||
@click="handleDelete(scope.row.id)"
|
||||
v-hasPermi="['hrm:courseware:delete']"
|
||||
>
|
||||
删除
|
||||
</el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
<!-- 分页 -->
|
||||
<Pagination
|
||||
:total="total"
|
||||
v-model:page="queryParams.pageNo"
|
||||
v-model:limit="queryParams.pageSize"
|
||||
@pagination="getList"
|
||||
/>
|
||||
</ContentWrap>
|
||||
|
||||
<!-- 表单弹窗:添加/修改 -->
|
||||
<CoursewareForm ref="formRef" @success="getList" />
|
||||
</template>
|
||||
|
||||
<script setup lang="ts">
|
||||
import { getIntDictOptions, DICT_TYPE } from '@/utils/dict'
|
||||
import { dateFormatter } from '@/utils/formatTime'
|
||||
import download from '@/utils/download'
|
||||
import { CoursewareApi, CoursewareVO } from '@/api/hrm/courseware'
|
||||
import CoursewareForm from './CoursewareForm.vue'
|
||||
|
||||
/** 课件 列表 */
|
||||
defineOptions({ name: 'Courseware' })
|
||||
|
||||
const message = useMessage() // 消息弹窗
|
||||
const { t } = useI18n() // 国际化
|
||||
|
||||
const loading = ref(true) // 列表的加载中
|
||||
const list = ref<CoursewareVO[]>([]) // 列表的数据
|
||||
const total = ref(0) // 列表的总页数
|
||||
const queryParams = reactive({
|
||||
pageNo: 1,
|
||||
pageSize: 10,
|
||||
coursewareName: undefined,
|
||||
author: undefined,
|
||||
processInstanceId: undefined,
|
||||
auditStatus: undefined,
|
||||
courseType: undefined,
|
||||
suitableDept: undefined,
|
||||
content: undefined,
|
||||
videoAttachment: undefined,
|
||||
outline: undefined,
|
||||
createTime: []
|
||||
})
|
||||
const queryFormRef = ref() // 搜索的表单
|
||||
const exportLoading = ref(false) // 导出的加载中
|
||||
|
||||
/** 查询列表 */
|
||||
const getList = async () => {
|
||||
loading.value = true
|
||||
try {
|
||||
const data = await CoursewareApi.getCoursewarePage(queryParams)
|
||||
list.value = data.list
|
||||
total.value = data.total
|
||||
} finally {
|
||||
loading.value = false
|
||||
}
|
||||
}
|
||||
|
||||
/** 搜索按钮操作 */
|
||||
const handleQuery = () => {
|
||||
queryParams.pageNo = 1
|
||||
getList()
|
||||
}
|
||||
|
||||
/** 重置按钮操作 */
|
||||
const resetQuery = () => {
|
||||
queryFormRef.value.resetFields()
|
||||
handleQuery()
|
||||
}
|
||||
|
||||
/** 添加/修改操作 */
|
||||
const formRef = ref()
|
||||
const openForm = (type: string, id?: number) => {
|
||||
formRef.value.open(type, id)
|
||||
}
|
||||
|
||||
/** 删除按钮操作 */
|
||||
const handleDelete = async (id: number) => {
|
||||
try {
|
||||
// 删除的二次确认
|
||||
await message.delConfirm()
|
||||
// 发起删除
|
||||
await CoursewareApi.deleteCourseware(id)
|
||||
message.success(t('common.delSuccess'))
|
||||
// 刷新列表
|
||||
await getList()
|
||||
} catch {}
|
||||
}
|
||||
|
||||
/** 导出按钮操作 */
|
||||
const handleExport = async () => {
|
||||
try {
|
||||
// 导出的二次确认
|
||||
await message.exportConfirm()
|
||||
// 发起导出
|
||||
exportLoading.value = true
|
||||
const data = await CoursewareApi.exportCourseware(queryParams)
|
||||
download.excel(data, '课件.xls')
|
||||
} catch {
|
||||
} finally {
|
||||
exportLoading.value = false
|
||||
}
|
||||
}
|
||||
|
||||
/** 初始化 **/
|
||||
onMounted(() => {
|
||||
getList()
|
||||
})
|
||||
</script>
|
||||
|
|
@ -0,0 +1,137 @@
|
|||
<template>
|
||||
<Dialog :title="dialogTitle" v-model="dialogVisible">
|
||||
<el-form
|
||||
ref="formRef"
|
||||
:model="formData"
|
||||
:rules="formRules"
|
||||
label-width="100px"
|
||||
v-loading="formLoading"
|
||||
>
|
||||
<el-form-item label="课件ID,关联courseware表" prop="coursewareId">
|
||||
<el-input v-model="formData.coursewareId" placeholder="请输入课件ID,关联courseware表" />
|
||||
</el-form-item>
|
||||
<el-form-item label="题目" prop="question">
|
||||
<el-input v-model="formData.question" placeholder="请输入题目" />
|
||||
</el-form-item>
|
||||
<el-form-item label="题目类型(选择、填空、论述)" prop="questionType">
|
||||
<el-select v-model="formData.questionType" placeholder="请选择题目类型(选择、填空、论述)">
|
||||
<el-option
|
||||
v-for="dict in getIntDictOptions(DICT_TYPE.HRM_QUESTION_TYPE)"
|
||||
:key="dict.value"
|
||||
:label="dict.label"
|
||||
:value="dict.value"
|
||||
/>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item label="答案" prop="answer">
|
||||
<el-input v-model="formData.answer" placeholder="请输入答案" />
|
||||
</el-form-item>
|
||||
<el-form-item label="选择题选项A" prop="optionA">
|
||||
<el-input v-model="formData.optionA" placeholder="请输入选择题选项A" />
|
||||
</el-form-item>
|
||||
<el-form-item label="选择题选项B" prop="optionB">
|
||||
<el-input v-model="formData.optionB" placeholder="请输入选择题选项B" />
|
||||
</el-form-item>
|
||||
<el-form-item label="选择题选项C" prop="optionC">
|
||||
<el-input v-model="formData.optionC" placeholder="请输入选择题选项C" />
|
||||
</el-form-item>
|
||||
<el-form-item label="选择题选项D" prop="optionD">
|
||||
<el-input v-model="formData.optionD" placeholder="请输入选择题选项D" />
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
<template #footer>
|
||||
<el-button @click="submitForm" type="primary" :disabled="formLoading">确 定</el-button>
|
||||
<el-button @click="dialogVisible = false">取 消</el-button>
|
||||
</template>
|
||||
</Dialog>
|
||||
</template>
|
||||
<script setup lang="ts">
|
||||
import { getIntDictOptions, DICT_TYPE } from '@/utils/dict'
|
||||
import { CoursewareDetailApi, CoursewareDetailVO } from '@/api/hrm/coursewaredetail'
|
||||
|
||||
/** 课件详情 表单 */
|
||||
defineOptions({ name: 'CoursewareDetailForm' })
|
||||
|
||||
const { t } = useI18n() // 国际化
|
||||
const message = useMessage() // 消息弹窗
|
||||
|
||||
const dialogVisible = ref(false) // 弹窗的是否展示
|
||||
const dialogTitle = ref('') // 弹窗的标题
|
||||
const formLoading = ref(false) // 表单的加载中:1)修改时的数据加载;2)提交的按钮禁用
|
||||
const formType = ref('') // 表单的类型:create - 新增;update - 修改
|
||||
const formData = ref({
|
||||
id: undefined,
|
||||
coursewareId: undefined,
|
||||
question: undefined,
|
||||
questionType: undefined,
|
||||
answer: undefined,
|
||||
optionA: undefined,
|
||||
optionB: undefined,
|
||||
optionC: undefined,
|
||||
optionD: undefined
|
||||
})
|
||||
const formRules = reactive({
|
||||
coursewareId: [{ required: true, message: '课件ID,关联courseware表不能为空', trigger: 'blur' }],
|
||||
question: [{ required: true, message: '题目不能为空', trigger: 'blur' }],
|
||||
questionType: [{ required: true, message: '题目类型(选择、填空、论述)不能为空', trigger: 'change' }]
|
||||
})
|
||||
const formRef = ref() // 表单 Ref
|
||||
|
||||
/** 打开弹窗 */
|
||||
const open = async (type: string, id?: number) => {
|
||||
dialogVisible.value = true
|
||||
dialogTitle.value = t('action.' + type)
|
||||
formType.value = type
|
||||
resetForm()
|
||||
// 修改时,设置数据
|
||||
if (id) {
|
||||
formLoading.value = true
|
||||
try {
|
||||
formData.value = await CoursewareDetailApi.getCoursewareDetail(id)
|
||||
} finally {
|
||||
formLoading.value = false
|
||||
}
|
||||
}
|
||||
}
|
||||
defineExpose({ open }) // 提供 open 方法,用于打开弹窗
|
||||
|
||||
/** 提交表单 */
|
||||
const emit = defineEmits(['success']) // 定义 success 事件,用于操作成功后的回调
|
||||
const submitForm = async () => {
|
||||
// 校验表单
|
||||
await formRef.value.validate()
|
||||
// 提交请求
|
||||
formLoading.value = true
|
||||
try {
|
||||
const data = formData.value as unknown as CoursewareDetailVO
|
||||
if (formType.value === 'create') {
|
||||
await CoursewareDetailApi.createCoursewareDetail(data)
|
||||
message.success(t('common.createSuccess'))
|
||||
} else {
|
||||
await CoursewareDetailApi.updateCoursewareDetail(data)
|
||||
message.success(t('common.updateSuccess'))
|
||||
}
|
||||
dialogVisible.value = false
|
||||
// 发送操作成功的事件
|
||||
emit('success')
|
||||
} finally {
|
||||
formLoading.value = false
|
||||
}
|
||||
}
|
||||
|
||||
/** 重置表单 */
|
||||
const resetForm = () => {
|
||||
formData.value = {
|
||||
id: undefined,
|
||||
coursewareId: undefined,
|
||||
question: undefined,
|
||||
questionType: undefined,
|
||||
answer: undefined,
|
||||
optionA: undefined,
|
||||
optionB: undefined,
|
||||
optionC: undefined,
|
||||
optionD: undefined
|
||||
}
|
||||
formRef.value?.resetFields()
|
||||
}
|
||||
</script>
|
||||
|
|
@ -0,0 +1,255 @@
|
|||
<template>
|
||||
<ContentWrap>
|
||||
<!-- 搜索工作栏 -->
|
||||
<el-form
|
||||
class="-mb-15px"
|
||||
:model="queryParams"
|
||||
ref="queryFormRef"
|
||||
:inline="true"
|
||||
label-width="68px"
|
||||
>
|
||||
<el-form-item label="课件ID,关联courseware表" prop="coursewareId">
|
||||
<el-input
|
||||
v-model="queryParams.coursewareId"
|
||||
placeholder="请输入课件ID,关联courseware表"
|
||||
clearable
|
||||
@keyup.enter="handleQuery"
|
||||
class="!w-240px"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="题目" prop="question">
|
||||
<el-input
|
||||
v-model="queryParams.question"
|
||||
placeholder="请输入题目"
|
||||
clearable
|
||||
@keyup.enter="handleQuery"
|
||||
class="!w-240px"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="题目类型(选择、填空、论述)" prop="questionType">
|
||||
<el-select
|
||||
v-model="queryParams.questionType"
|
||||
placeholder="请选择题目类型(选择、填空、论述)"
|
||||
clearable
|
||||
class="!w-240px"
|
||||
>
|
||||
<el-option
|
||||
v-for="dict in getIntDictOptions(DICT_TYPE.HRM_QUESTION_TYPE)"
|
||||
:key="dict.value"
|
||||
:label="dict.label"
|
||||
:value="dict.value"
|
||||
/>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item label="答案" prop="answer">
|
||||
<el-input
|
||||
v-model="queryParams.answer"
|
||||
placeholder="请输入答案"
|
||||
clearable
|
||||
@keyup.enter="handleQuery"
|
||||
class="!w-240px"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="选择题选项A" prop="optionA">
|
||||
<el-input
|
||||
v-model="queryParams.optionA"
|
||||
placeholder="请输入选择题选项A"
|
||||
clearable
|
||||
@keyup.enter="handleQuery"
|
||||
class="!w-240px"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="选择题选项B" prop="optionB">
|
||||
<el-input
|
||||
v-model="queryParams.optionB"
|
||||
placeholder="请输入选择题选项B"
|
||||
clearable
|
||||
@keyup.enter="handleQuery"
|
||||
class="!w-240px"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="选择题选项C" prop="optionC">
|
||||
<el-input
|
||||
v-model="queryParams.optionC"
|
||||
placeholder="请输入选择题选项C"
|
||||
clearable
|
||||
@keyup.enter="handleQuery"
|
||||
class="!w-240px"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="选择题选项D" prop="optionD">
|
||||
<el-input
|
||||
v-model="queryParams.optionD"
|
||||
placeholder="请输入选择题选项D"
|
||||
clearable
|
||||
@keyup.enter="handleQuery"
|
||||
class="!w-240px"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item>
|
||||
<el-button @click="handleQuery"><Icon icon="ep:search" class="mr-5px" /> 搜索</el-button>
|
||||
<el-button @click="resetQuery"><Icon icon="ep:refresh" class="mr-5px" /> 重置</el-button>
|
||||
<el-button
|
||||
type="primary"
|
||||
plain
|
||||
@click="openForm('create')"
|
||||
v-hasPermi="['hrm:courseware-detail:create']"
|
||||
>
|
||||
<Icon icon="ep:plus" class="mr-5px" /> 新增
|
||||
</el-button>
|
||||
<el-button
|
||||
type="success"
|
||||
plain
|
||||
@click="handleExport"
|
||||
:loading="exportLoading"
|
||||
v-hasPermi="['hrm:courseware-detail:export']"
|
||||
>
|
||||
<Icon icon="ep:download" class="mr-5px" /> 导出
|
||||
</el-button>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
</ContentWrap>
|
||||
|
||||
<!-- 列表 -->
|
||||
<ContentWrap>
|
||||
<el-table v-loading="loading" :data="list" :stripe="true" :show-overflow-tooltip="true">
|
||||
<el-table-column label="主键ID" align="center" prop="id" />
|
||||
<el-table-column label="课件ID,关联courseware表" align="center" prop="coursewareId" />
|
||||
<el-table-column label="题目" align="center" prop="question" />
|
||||
<el-table-column label="题目类型(选择、填空、论述)" align="center" prop="questionType">
|
||||
<template #default="scope">
|
||||
<dict-tag :type="DICT_TYPE.HRM_QUESTION_TYPE" :value="scope.row.questionType" />
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="答案" align="center" prop="answer" />
|
||||
<el-table-column label="选择题选项A" align="center" prop="optionA" />
|
||||
<el-table-column label="选择题选项B" align="center" prop="optionB" />
|
||||
<el-table-column label="选择题选项C" align="center" prop="optionC" />
|
||||
<el-table-column label="选择题选项D" align="center" prop="optionD" />
|
||||
<el-table-column label="操作" align="center" min-width="120px">
|
||||
<template #default="scope">
|
||||
<el-button
|
||||
link
|
||||
type="primary"
|
||||
@click="openForm('update', scope.row.id)"
|
||||
v-hasPermi="['hrm:courseware-detail:update']"
|
||||
>
|
||||
编辑
|
||||
</el-button>
|
||||
<el-button
|
||||
link
|
||||
type="danger"
|
||||
@click="handleDelete(scope.row.id)"
|
||||
v-hasPermi="['hrm:courseware-detail:delete']"
|
||||
>
|
||||
删除
|
||||
</el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
<!-- 分页 -->
|
||||
<Pagination
|
||||
:total="total"
|
||||
v-model:page="queryParams.pageNo"
|
||||
v-model:limit="queryParams.pageSize"
|
||||
@pagination="getList"
|
||||
/>
|
||||
</ContentWrap>
|
||||
|
||||
<!-- 表单弹窗:添加/修改 -->
|
||||
<CoursewareDetailForm ref="formRef" @success="getList" />
|
||||
</template>
|
||||
|
||||
<script setup lang="ts">
|
||||
import { getIntDictOptions, DICT_TYPE } from '@/utils/dict'
|
||||
import download from '@/utils/download'
|
||||
import { CoursewareDetailApi, CoursewareDetailVO } from '@/api/hrm/coursewaredetail'
|
||||
import CoursewareDetailForm from './CoursewareDetailForm.vue'
|
||||
|
||||
/** 课件详情 列表 */
|
||||
defineOptions({ name: 'CoursewareDetail' })
|
||||
|
||||
const message = useMessage() // 消息弹窗
|
||||
const { t } = useI18n() // 国际化
|
||||
|
||||
const loading = ref(true) // 列表的加载中
|
||||
const list = ref<CoursewareDetailVO[]>([]) // 列表的数据
|
||||
const total = ref(0) // 列表的总页数
|
||||
const queryParams = reactive({
|
||||
pageNo: 1,
|
||||
pageSize: 10,
|
||||
coursewareId: undefined,
|
||||
question: undefined,
|
||||
questionType: undefined,
|
||||
answer: undefined,
|
||||
optionA: undefined,
|
||||
optionB: undefined,
|
||||
optionC: undefined,
|
||||
optionD: undefined
|
||||
})
|
||||
const queryFormRef = ref() // 搜索的表单
|
||||
const exportLoading = ref(false) // 导出的加载中
|
||||
|
||||
/** 查询列表 */
|
||||
const getList = async () => {
|
||||
loading.value = true
|
||||
try {
|
||||
const data = await CoursewareDetailApi.getCoursewareDetailPage(queryParams)
|
||||
list.value = data.list
|
||||
total.value = data.total
|
||||
} finally {
|
||||
loading.value = false
|
||||
}
|
||||
}
|
||||
|
||||
/** 搜索按钮操作 */
|
||||
const handleQuery = () => {
|
||||
queryParams.pageNo = 1
|
||||
getList()
|
||||
}
|
||||
|
||||
/** 重置按钮操作 */
|
||||
const resetQuery = () => {
|
||||
queryFormRef.value.resetFields()
|
||||
handleQuery()
|
||||
}
|
||||
|
||||
/** 添加/修改操作 */
|
||||
const formRef = ref()
|
||||
const openForm = (type: string, id?: number) => {
|
||||
formRef.value.open(type, id)
|
||||
}
|
||||
|
||||
/** 删除按钮操作 */
|
||||
const handleDelete = async (id: number) => {
|
||||
try {
|
||||
// 删除的二次确认
|
||||
await message.delConfirm()
|
||||
// 发起删除
|
||||
await CoursewareDetailApi.deleteCoursewareDetail(id)
|
||||
message.success(t('common.delSuccess'))
|
||||
// 刷新列表
|
||||
await getList()
|
||||
} catch {}
|
||||
}
|
||||
|
||||
/** 导出按钮操作 */
|
||||
const handleExport = async () => {
|
||||
try {
|
||||
// 导出的二次确认
|
||||
await message.exportConfirm()
|
||||
// 发起导出
|
||||
exportLoading.value = true
|
||||
const data = await CoursewareDetailApi.exportCoursewareDetail(queryParams)
|
||||
download.excel(data, '课件详情.xls')
|
||||
} catch {
|
||||
} finally {
|
||||
exportLoading.value = false
|
||||
}
|
||||
}
|
||||
|
||||
/** 初始化 **/
|
||||
onMounted(() => {
|
||||
getList()
|
||||
})
|
||||
</script>
|
||||
|
|
@ -0,0 +1,174 @@
|
|||
<template>
|
||||
<Dialog :title="dialogTitle" v-model="dialogVisible">
|
||||
<el-form
|
||||
ref="formRef"
|
||||
:model="formData"
|
||||
:rules="formRules"
|
||||
label-width="100px"
|
||||
v-loading="formLoading"
|
||||
>
|
||||
<el-form-item label="员工ID" prop="userId">
|
||||
<el-input v-model="formData.userId" placeholder="请输入员工ID" />
|
||||
</el-form-item>
|
||||
<el-form-item label="工作流编号" prop="processInstanceId">
|
||||
<el-input v-model="formData.processInstanceId" placeholder="请输入工作流编号" />
|
||||
</el-form-item>
|
||||
<el-form-item label="审批状态" prop="auditStatus">
|
||||
<el-radio-group v-model="formData.auditStatus">
|
||||
<el-radio value="1">请选择字典生成</el-radio>
|
||||
</el-radio-group>
|
||||
</el-form-item>
|
||||
<el-form-item label="现学历" prop="currentEducation">
|
||||
<el-select v-model="formData.currentEducation" placeholder="请选择现学历">
|
||||
<el-option
|
||||
v-for="dict in getIntDictOptions(DICT_TYPE.HRM_EDUCATION)"
|
||||
:key="dict.value"
|
||||
:label="dict.label"
|
||||
:value="dict.value"
|
||||
/>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item label="进修后学历" prop="advancedEducation">
|
||||
<el-select v-model="formData.advancedEducation" placeholder="请选择进修后学历">
|
||||
<el-option
|
||||
v-for="dict in getIntDictOptions(DICT_TYPE.HRM_EDUCATION)"
|
||||
:key="dict.value"
|
||||
:label="dict.label"
|
||||
:value="dict.value"
|
||||
/>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item label="开始进修时间" prop="studyStartDate">
|
||||
<el-date-picker
|
||||
v-model="formData.studyStartDate"
|
||||
type="date"
|
||||
value-format="x"
|
||||
placeholder="选择开始进修时间"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="结束进修时间" prop="studyEndDate">
|
||||
<el-date-picker
|
||||
v-model="formData.studyEndDate"
|
||||
type="date"
|
||||
value-format="x"
|
||||
placeholder="选择结束进修时间"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="进修费用" prop="studyFee">
|
||||
<el-input v-model="formData.studyFee" placeholder="请输入进修费用" />
|
||||
</el-form-item>
|
||||
<el-form-item label="进修学校" prop="studySchool">
|
||||
<el-input v-model="formData.studySchool" placeholder="请输入进修学校" />
|
||||
</el-form-item>
|
||||
<el-form-item label="进修专业" prop="studyMajor">
|
||||
<el-input v-model="formData.studyMajor" placeholder="请输入进修专业" />
|
||||
</el-form-item>
|
||||
<el-form-item label="员工签字" prop="elecSignature">
|
||||
<el-input v-model="formData.elecSignature" placeholder="请输入员工签字" />
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
<template #footer>
|
||||
<el-button @click="submitForm" type="primary" :disabled="formLoading">确 定</el-button>
|
||||
<el-button @click="dialogVisible = false">取 消</el-button>
|
||||
</template>
|
||||
</Dialog>
|
||||
</template>
|
||||
<script setup lang="ts">
|
||||
import { getIntDictOptions, DICT_TYPE } from '@/utils/dict'
|
||||
import { EducationApplyApi, EducationApplyVO } from '@/api/hrm/educationapply'
|
||||
|
||||
/** 学历进修申请 表单 */
|
||||
defineOptions({ name: 'EducationApplyForm' })
|
||||
|
||||
const { t } = useI18n() // 国际化
|
||||
const message = useMessage() // 消息弹窗
|
||||
|
||||
const dialogVisible = ref(false) // 弹窗的是否展示
|
||||
const dialogTitle = ref('') // 弹窗的标题
|
||||
const formLoading = ref(false) // 表单的加载中:1)修改时的数据加载;2)提交的按钮禁用
|
||||
const formType = ref('') // 表单的类型:create - 新增;update - 修改
|
||||
const formData = ref({
|
||||
id: undefined,
|
||||
userId: undefined,
|
||||
processInstanceId: undefined,
|
||||
auditStatus: undefined,
|
||||
currentEducation: undefined,
|
||||
advancedEducation: undefined,
|
||||
studyStartDate: undefined,
|
||||
studyEndDate: undefined,
|
||||
studyFee: undefined,
|
||||
studySchool: undefined,
|
||||
studyMajor: undefined,
|
||||
elecSignature: undefined
|
||||
})
|
||||
const formRules = reactive({
|
||||
userId: [{ required: true, message: '员工ID不能为空', trigger: 'blur' }],
|
||||
auditStatus: [{ required: true, message: '审批状态不能为空', trigger: 'blur' }],
|
||||
currentEducation: [{ required: true, message: '现学历不能为空', trigger: 'change' }],
|
||||
advancedEducation: [{ required: true, message: '进修后学历不能为空', trigger: 'change' }],
|
||||
studyStartDate: [{ required: true, message: '开始进修时间不能为空', trigger: 'blur' }],
|
||||
studyEndDate: [{ required: true, message: '结束进修时间不能为空', trigger: 'blur' }]
|
||||
})
|
||||
const formRef = ref() // 表单 Ref
|
||||
|
||||
/** 打开弹窗 */
|
||||
const open = async (type: string, id?: number) => {
|
||||
dialogVisible.value = true
|
||||
dialogTitle.value = t('action.' + type)
|
||||
formType.value = type
|
||||
resetForm()
|
||||
// 修改时,设置数据
|
||||
if (id) {
|
||||
formLoading.value = true
|
||||
try {
|
||||
formData.value = await EducationApplyApi.getEducationApply(id)
|
||||
} finally {
|
||||
formLoading.value = false
|
||||
}
|
||||
}
|
||||
}
|
||||
defineExpose({ open }) // 提供 open 方法,用于打开弹窗
|
||||
|
||||
/** 提交表单 */
|
||||
const emit = defineEmits(['success']) // 定义 success 事件,用于操作成功后的回调
|
||||
const submitForm = async () => {
|
||||
// 校验表单
|
||||
await formRef.value.validate()
|
||||
// 提交请求
|
||||
formLoading.value = true
|
||||
try {
|
||||
const data = formData.value as unknown as EducationApplyVO
|
||||
if (formType.value === 'create') {
|
||||
await EducationApplyApi.createEducationApply(data)
|
||||
message.success(t('common.createSuccess'))
|
||||
} else {
|
||||
await EducationApplyApi.updateEducationApply(data)
|
||||
message.success(t('common.updateSuccess'))
|
||||
}
|
||||
dialogVisible.value = false
|
||||
// 发送操作成功的事件
|
||||
emit('success')
|
||||
} finally {
|
||||
formLoading.value = false
|
||||
}
|
||||
}
|
||||
|
||||
/** 重置表单 */
|
||||
const resetForm = () => {
|
||||
formData.value = {
|
||||
id: undefined,
|
||||
userId: undefined,
|
||||
processInstanceId: undefined,
|
||||
auditStatus: undefined,
|
||||
currentEducation: undefined,
|
||||
advancedEducation: undefined,
|
||||
studyStartDate: undefined,
|
||||
studyEndDate: undefined,
|
||||
studyFee: undefined,
|
||||
studySchool: undefined,
|
||||
studyMajor: undefined,
|
||||
elecSignature: undefined
|
||||
}
|
||||
formRef.value?.resetFields()
|
||||
}
|
||||
</script>
|
||||
|
|
@ -0,0 +1,323 @@
|
|||
<template>
|
||||
<ContentWrap>
|
||||
<!-- 搜索工作栏 -->
|
||||
<el-form
|
||||
class="-mb-15px"
|
||||
:model="queryParams"
|
||||
ref="queryFormRef"
|
||||
:inline="true"
|
||||
label-width="68px"
|
||||
>
|
||||
<el-form-item label="员工ID" prop="userId">
|
||||
<el-input
|
||||
v-model="queryParams.userId"
|
||||
placeholder="请输入员工ID"
|
||||
clearable
|
||||
@keyup.enter="handleQuery"
|
||||
class="!w-240px"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="工作流编号" prop="processInstanceId">
|
||||
<el-input
|
||||
v-model="queryParams.processInstanceId"
|
||||
placeholder="请输入工作流编号"
|
||||
clearable
|
||||
@keyup.enter="handleQuery"
|
||||
class="!w-240px"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="审批状态" prop="auditStatus">
|
||||
<el-select
|
||||
v-model="queryParams.auditStatus"
|
||||
placeholder="请选择审批状态"
|
||||
clearable
|
||||
class="!w-240px"
|
||||
>
|
||||
<el-option label="请选择字典生成" value="" />
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item label="现学历" prop="currentEducation">
|
||||
<el-select
|
||||
v-model="queryParams.currentEducation"
|
||||
placeholder="请选择现学历"
|
||||
clearable
|
||||
class="!w-240px"
|
||||
>
|
||||
<el-option
|
||||
v-for="dict in getIntDictOptions(DICT_TYPE.HRM_EDUCATION)"
|
||||
:key="dict.value"
|
||||
:label="dict.label"
|
||||
:value="dict.value"
|
||||
/>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item label="进修后学历" prop="advancedEducation">
|
||||
<el-select
|
||||
v-model="queryParams.advancedEducation"
|
||||
placeholder="请选择进修后学历"
|
||||
clearable
|
||||
class="!w-240px"
|
||||
>
|
||||
<el-option
|
||||
v-for="dict in getIntDictOptions(DICT_TYPE.HRM_EDUCATION)"
|
||||
:key="dict.value"
|
||||
:label="dict.label"
|
||||
:value="dict.value"
|
||||
/>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item label="开始进修时间" prop="studyStartDate">
|
||||
<el-date-picker
|
||||
v-model="queryParams.studyStartDate"
|
||||
value-format="YYYY-MM-DD HH:mm:ss"
|
||||
type="daterange"
|
||||
start-placeholder="开始日期"
|
||||
end-placeholder="结束日期"
|
||||
:default-time="[new Date('1 00:00:00'), new Date('1 23:59:59')]"
|
||||
class="!w-220px"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="结束进修时间" prop="studyEndDate">
|
||||
<el-date-picker
|
||||
v-model="queryParams.studyEndDate"
|
||||
value-format="YYYY-MM-DD HH:mm:ss"
|
||||
type="daterange"
|
||||
start-placeholder="开始日期"
|
||||
end-placeholder="结束日期"
|
||||
:default-time="[new Date('1 00:00:00'), new Date('1 23:59:59')]"
|
||||
class="!w-220px"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="进修费用" prop="studyFee">
|
||||
<el-input
|
||||
v-model="queryParams.studyFee"
|
||||
placeholder="请输入进修费用"
|
||||
clearable
|
||||
@keyup.enter="handleQuery"
|
||||
class="!w-240px"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="进修学校" prop="studySchool">
|
||||
<el-input
|
||||
v-model="queryParams.studySchool"
|
||||
placeholder="请输入进修学校"
|
||||
clearable
|
||||
@keyup.enter="handleQuery"
|
||||
class="!w-240px"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="进修专业" prop="studyMajor">
|
||||
<el-input
|
||||
v-model="queryParams.studyMajor"
|
||||
placeholder="请输入进修专业"
|
||||
clearable
|
||||
@keyup.enter="handleQuery"
|
||||
class="!w-240px"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="员工签字" prop="elecSignature">
|
||||
<el-input
|
||||
v-model="queryParams.elecSignature"
|
||||
placeholder="请输入员工签字"
|
||||
clearable
|
||||
@keyup.enter="handleQuery"
|
||||
class="!w-240px"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="创建时间" prop="createTime">
|
||||
<el-date-picker
|
||||
v-model="queryParams.createTime"
|
||||
value-format="YYYY-MM-DD HH:mm:ss"
|
||||
type="daterange"
|
||||
start-placeholder="开始日期"
|
||||
end-placeholder="结束日期"
|
||||
:default-time="[new Date('1 00:00:00'), new Date('1 23:59:59')]"
|
||||
class="!w-220px"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item>
|
||||
<el-button @click="handleQuery"><Icon icon="ep:search" class="mr-5px" /> 搜索</el-button>
|
||||
<el-button @click="resetQuery"><Icon icon="ep:refresh" class="mr-5px" /> 重置</el-button>
|
||||
<el-button
|
||||
type="primary"
|
||||
plain
|
||||
@click="openForm('create')"
|
||||
v-hasPermi="['hrm:education-apply:create']"
|
||||
>
|
||||
<Icon icon="ep:plus" class="mr-5px" /> 新增
|
||||
</el-button>
|
||||
<el-button
|
||||
type="success"
|
||||
plain
|
||||
@click="handleExport"
|
||||
:loading="exportLoading"
|
||||
v-hasPermi="['hrm:education-apply:export']"
|
||||
>
|
||||
<Icon icon="ep:download" class="mr-5px" /> 导出
|
||||
</el-button>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
</ContentWrap>
|
||||
|
||||
<!-- 列表 -->
|
||||
<ContentWrap>
|
||||
<el-table v-loading="loading" :data="list" :stripe="true" :show-overflow-tooltip="true">
|
||||
<el-table-column label="主键ID" align="center" prop="id" />
|
||||
<el-table-column label="员工ID" align="center" prop="userId" />
|
||||
<el-table-column label="工作流编号" align="center" prop="processInstanceId" />
|
||||
<el-table-column label="审批状态" align="center" prop="auditStatus" />
|
||||
<el-table-column label="现学历" align="center" prop="currentEducation">
|
||||
<template #default="scope">
|
||||
<dict-tag :type="DICT_TYPE.HRM_EDUCATION" :value="scope.row.currentEducation" />
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="进修后学历" align="center" prop="advancedEducation">
|
||||
<template #default="scope">
|
||||
<dict-tag :type="DICT_TYPE.HRM_EDUCATION" :value="scope.row.advancedEducation" />
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="开始进修时间" align="center" prop="studyStartDate" />
|
||||
<el-table-column label="结束进修时间" align="center" prop="studyEndDate" />
|
||||
<el-table-column label="进修费用" align="center" prop="studyFee" />
|
||||
<el-table-column label="进修学校" align="center" prop="studySchool" />
|
||||
<el-table-column label="进修专业" align="center" prop="studyMajor" />
|
||||
<el-table-column label="员工签字" align="center" prop="elecSignature" />
|
||||
<el-table-column
|
||||
label="创建时间"
|
||||
align="center"
|
||||
prop="createTime"
|
||||
:formatter="dateFormatter"
|
||||
width="180px"
|
||||
/>
|
||||
<el-table-column label="操作" align="center" min-width="120px">
|
||||
<template #default="scope">
|
||||
<el-button
|
||||
link
|
||||
type="primary"
|
||||
@click="openForm('update', scope.row.id)"
|
||||
v-hasPermi="['hrm:education-apply:update']"
|
||||
>
|
||||
编辑
|
||||
</el-button>
|
||||
<el-button
|
||||
link
|
||||
type="danger"
|
||||
@click="handleDelete(scope.row.id)"
|
||||
v-hasPermi="['hrm:education-apply:delete']"
|
||||
>
|
||||
删除
|
||||
</el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
<!-- 分页 -->
|
||||
<Pagination
|
||||
:total="total"
|
||||
v-model:page="queryParams.pageNo"
|
||||
v-model:limit="queryParams.pageSize"
|
||||
@pagination="getList"
|
||||
/>
|
||||
</ContentWrap>
|
||||
|
||||
<!-- 表单弹窗:添加/修改 -->
|
||||
<EducationApplyForm ref="formRef" @success="getList" />
|
||||
</template>
|
||||
|
||||
<script setup lang="ts">
|
||||
import { getIntDictOptions, DICT_TYPE } from '@/utils/dict'
|
||||
import { dateFormatter } from '@/utils/formatTime'
|
||||
import download from '@/utils/download'
|
||||
import { EducationApplyApi, EducationApplyVO } from '@/api/hrm/educationapply'
|
||||
import EducationApplyForm from './EducationApplyForm.vue'
|
||||
|
||||
/** 学历进修申请 列表 */
|
||||
defineOptions({ name: 'EducationApply' })
|
||||
|
||||
const message = useMessage() // 消息弹窗
|
||||
const { t } = useI18n() // 国际化
|
||||
|
||||
const loading = ref(true) // 列表的加载中
|
||||
const list = ref<EducationApplyVO[]>([]) // 列表的数据
|
||||
const total = ref(0) // 列表的总页数
|
||||
const queryParams = reactive({
|
||||
pageNo: 1,
|
||||
pageSize: 10,
|
||||
userId: undefined,
|
||||
processInstanceId: undefined,
|
||||
auditStatus: undefined,
|
||||
currentEducation: undefined,
|
||||
advancedEducation: undefined,
|
||||
studyStartDate: [],
|
||||
studyEndDate: [],
|
||||
studyFee: undefined,
|
||||
studySchool: undefined,
|
||||
studyMajor: undefined,
|
||||
elecSignature: undefined,
|
||||
createTime: []
|
||||
})
|
||||
const queryFormRef = ref() // 搜索的表单
|
||||
const exportLoading = ref(false) // 导出的加载中
|
||||
|
||||
/** 查询列表 */
|
||||
const getList = async () => {
|
||||
loading.value = true
|
||||
try {
|
||||
const data = await EducationApplyApi.getEducationApplyPage(queryParams)
|
||||
list.value = data.list
|
||||
total.value = data.total
|
||||
} finally {
|
||||
loading.value = false
|
||||
}
|
||||
}
|
||||
|
||||
/** 搜索按钮操作 */
|
||||
const handleQuery = () => {
|
||||
queryParams.pageNo = 1
|
||||
getList()
|
||||
}
|
||||
|
||||
/** 重置按钮操作 */
|
||||
const resetQuery = () => {
|
||||
queryFormRef.value.resetFields()
|
||||
handleQuery()
|
||||
}
|
||||
|
||||
/** 添加/修改操作 */
|
||||
const formRef = ref()
|
||||
const openForm = (type: string, id?: number) => {
|
||||
formRef.value.open(type, id)
|
||||
}
|
||||
|
||||
/** 删除按钮操作 */
|
||||
const handleDelete = async (id: number) => {
|
||||
try {
|
||||
// 删除的二次确认
|
||||
await message.delConfirm()
|
||||
// 发起删除
|
||||
await EducationApplyApi.deleteEducationApply(id)
|
||||
message.success(t('common.delSuccess'))
|
||||
// 刷新列表
|
||||
await getList()
|
||||
} catch {}
|
||||
}
|
||||
|
||||
/** 导出按钮操作 */
|
||||
const handleExport = async () => {
|
||||
try {
|
||||
// 导出的二次确认
|
||||
await message.exportConfirm()
|
||||
// 发起导出
|
||||
exportLoading.value = true
|
||||
const data = await EducationApplyApi.exportEducationApply(queryParams)
|
||||
download.excel(data, '学历进修申请.xls')
|
||||
} catch {
|
||||
} finally {
|
||||
exportLoading.value = false
|
||||
}
|
||||
}
|
||||
|
||||
/** 初始化 **/
|
||||
onMounted(() => {
|
||||
getList()
|
||||
})
|
||||
</script>
|
||||
|
|
@ -0,0 +1,175 @@
|
|||
<template>
|
||||
<Dialog :title="dialogTitle" v-model="dialogVisible">
|
||||
<el-form
|
||||
ref="formRef"
|
||||
:model="formData"
|
||||
:rules="formRules"
|
||||
label-width="100px"
|
||||
v-loading="formLoading"
|
||||
>
|
||||
<el-form-item label="员工档案ID(关联hrm_user_infor)" prop="userId">
|
||||
<el-input v-model="formData.userId" placeholder="请输入员工档案ID(关联hrm_user_infor)" />
|
||||
</el-form-item>
|
||||
<el-form-item label="工作流编号" prop="processInstanceId">
|
||||
<el-input v-model="formData.processInstanceId" placeholder="请输入工作流编号" />
|
||||
</el-form-item>
|
||||
<el-form-item label="审批状态" prop="auditStatus">
|
||||
<el-radio-group v-model="formData.auditStatus">
|
||||
<el-radio value="1">请选择字典生成</el-radio>
|
||||
</el-radio-group>
|
||||
</el-form-item>
|
||||
<el-form-item label="转正日期" prop="confirmationDate">
|
||||
<el-date-picker
|
||||
v-model="formData.confirmationDate"
|
||||
type="date"
|
||||
value-format="x"
|
||||
placeholder="选择转正日期"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="是否转正(1:是,0:否)" prop="isConfirmed">
|
||||
<el-select v-model="formData.isConfirmed" placeholder="请选择是否转正(1:是,0:否)">
|
||||
<el-option
|
||||
v-for="dict in getIntDictOptions(DICT_TYPE.INFRA_BOOLEAN_STRING)"
|
||||
:key="dict.value"
|
||||
:label="dict.label"
|
||||
:value="dict.value"
|
||||
/>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item label="申请日期" prop="applicationDate">
|
||||
<el-date-picker
|
||||
v-model="formData.applicationDate"
|
||||
type="date"
|
||||
value-format="x"
|
||||
placeholder="选择申请日期"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="转正申请说明" prop="applicationNote">
|
||||
<el-input v-model="formData.applicationNote" placeholder="请输入转正申请说明" />
|
||||
</el-form-item>
|
||||
<el-form-item label="工作业绩评分" prop="workPerformanceScore">
|
||||
<el-input v-model="formData.workPerformanceScore" placeholder="请输入工作业绩评分" />
|
||||
</el-form-item>
|
||||
<el-form-item label="出勤情况评分" prop="attendanceScore">
|
||||
<el-input v-model="formData.attendanceScore" placeholder="请输入出勤情况评分" />
|
||||
</el-form-item>
|
||||
<el-form-item label="团队协作评分" prop="teamworkScore">
|
||||
<el-input v-model="formData.teamworkScore" placeholder="请输入团队协作评分" />
|
||||
</el-form-item>
|
||||
<el-form-item label="能力表现评分" prop="abilityPerformanceScore">
|
||||
<el-input v-model="formData.abilityPerformanceScore" placeholder="请输入能力表现评分" />
|
||||
</el-form-item>
|
||||
<el-form-item label="本人签字" prop="eSignature">
|
||||
<el-input v-model="formData.eSignature" placeholder="请输入本人签字" />
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
<template #footer>
|
||||
<el-button @click="submitForm" type="primary" :disabled="formLoading">确 定</el-button>
|
||||
<el-button @click="dialogVisible = false">取 消</el-button>
|
||||
</template>
|
||||
</Dialog>
|
||||
</template>
|
||||
<script setup lang="ts">
|
||||
import { getIntDictOptions, DICT_TYPE } from '@/utils/dict'
|
||||
import { FullMemberApplyApi, FullMemberApplyVO } from '@/api/hrm/fullmemberapply'
|
||||
|
||||
/** 转正申请 表单 */
|
||||
defineOptions({ name: 'FullMemberApplyForm' })
|
||||
|
||||
const { t } = useI18n() // 国际化
|
||||
const message = useMessage() // 消息弹窗
|
||||
|
||||
const dialogVisible = ref(false) // 弹窗的是否展示
|
||||
const dialogTitle = ref('') // 弹窗的标题
|
||||
const formLoading = ref(false) // 表单的加载中:1)修改时的数据加载;2)提交的按钮禁用
|
||||
const formType = ref('') // 表单的类型:create - 新增;update - 修改
|
||||
const formData = ref({
|
||||
id: undefined,
|
||||
userId: undefined,
|
||||
processInstanceId: undefined,
|
||||
auditStatus: undefined,
|
||||
confirmationDate: undefined,
|
||||
isConfirmed: undefined,
|
||||
applicationDate: undefined,
|
||||
applicationNote: undefined,
|
||||
workPerformanceScore: undefined,
|
||||
attendanceScore: undefined,
|
||||
teamworkScore: undefined,
|
||||
abilityPerformanceScore: undefined,
|
||||
eSignature: undefined
|
||||
})
|
||||
const formRules = reactive({
|
||||
userId: [{ required: true, message: '员工档案ID(关联hrm_user_infor)不能为空', trigger: 'blur' }],
|
||||
auditStatus: [{ required: true, message: '审批状态不能为空', trigger: 'blur' }],
|
||||
confirmationDate: [{ required: true, message: '转正日期不能为空', trigger: 'blur' }],
|
||||
isConfirmed: [{ required: true, message: '是否转正(1:是,0:否)不能为空', trigger: 'change' }],
|
||||
applicationDate: [{ required: true, message: '申请日期不能为空', trigger: 'blur' }],
|
||||
workPerformanceScore: [{ required: true, message: '工作业绩评分不能为空', trigger: 'blur' }],
|
||||
attendanceScore: [{ required: true, message: '出勤情况评分不能为空', trigger: 'blur' }],
|
||||
teamworkScore: [{ required: true, message: '团队协作评分不能为空', trigger: 'blur' }],
|
||||
abilityPerformanceScore: [{ required: true, message: '能力表现评分不能为空', trigger: 'blur' }]
|
||||
})
|
||||
const formRef = ref() // 表单 Ref
|
||||
|
||||
/** 打开弹窗 */
|
||||
const open = async (type: string, id?: number) => {
|
||||
dialogVisible.value = true
|
||||
dialogTitle.value = t('action.' + type)
|
||||
formType.value = type
|
||||
resetForm()
|
||||
// 修改时,设置数据
|
||||
if (id) {
|
||||
formLoading.value = true
|
||||
try {
|
||||
formData.value = await FullMemberApplyApi.getFullMemberApply(id)
|
||||
} finally {
|
||||
formLoading.value = false
|
||||
}
|
||||
}
|
||||
}
|
||||
defineExpose({ open }) // 提供 open 方法,用于打开弹窗
|
||||
|
||||
/** 提交表单 */
|
||||
const emit = defineEmits(['success']) // 定义 success 事件,用于操作成功后的回调
|
||||
const submitForm = async () => {
|
||||
// 校验表单
|
||||
await formRef.value.validate()
|
||||
// 提交请求
|
||||
formLoading.value = true
|
||||
try {
|
||||
const data = formData.value as unknown as FullMemberApplyVO
|
||||
if (formType.value === 'create') {
|
||||
await FullMemberApplyApi.createFullMemberApply(data)
|
||||
message.success(t('common.createSuccess'))
|
||||
} else {
|
||||
await FullMemberApplyApi.updateFullMemberApply(data)
|
||||
message.success(t('common.updateSuccess'))
|
||||
}
|
||||
dialogVisible.value = false
|
||||
// 发送操作成功的事件
|
||||
emit('success')
|
||||
} finally {
|
||||
formLoading.value = false
|
||||
}
|
||||
}
|
||||
|
||||
/** 重置表单 */
|
||||
const resetForm = () => {
|
||||
formData.value = {
|
||||
id: undefined,
|
||||
userId: undefined,
|
||||
processInstanceId: undefined,
|
||||
auditStatus: undefined,
|
||||
confirmationDate: undefined,
|
||||
isConfirmed: undefined,
|
||||
applicationDate: undefined,
|
||||
applicationNote: undefined,
|
||||
workPerformanceScore: undefined,
|
||||
attendanceScore: undefined,
|
||||
teamworkScore: undefined,
|
||||
abilityPerformanceScore: undefined,
|
||||
eSignature: undefined
|
||||
}
|
||||
formRef.value?.resetFields()
|
||||
}
|
||||
</script>
|
||||
|
|
@ -0,0 +1,324 @@
|
|||
<template>
|
||||
<ContentWrap>
|
||||
<!-- 搜索工作栏 -->
|
||||
<el-form
|
||||
class="-mb-15px"
|
||||
:model="queryParams"
|
||||
ref="queryFormRef"
|
||||
:inline="true"
|
||||
label-width="68px"
|
||||
>
|
||||
<el-form-item label="员工档案ID(关联hrm_user_infor)" prop="userId">
|
||||
<el-input
|
||||
v-model="queryParams.userId"
|
||||
placeholder="请输入员工档案ID(关联hrm_user_infor)"
|
||||
clearable
|
||||
@keyup.enter="handleQuery"
|
||||
class="!w-240px"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="工作流编号" prop="processInstanceId">
|
||||
<el-input
|
||||
v-model="queryParams.processInstanceId"
|
||||
placeholder="请输入工作流编号"
|
||||
clearable
|
||||
@keyup.enter="handleQuery"
|
||||
class="!w-240px"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="审批状态" prop="auditStatus">
|
||||
<el-select
|
||||
v-model="queryParams.auditStatus"
|
||||
placeholder="请选择审批状态"
|
||||
clearable
|
||||
class="!w-240px"
|
||||
>
|
||||
<el-option label="请选择字典生成" value="" />
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item label="转正日期" prop="confirmationDate">
|
||||
<el-date-picker
|
||||
v-model="queryParams.confirmationDate"
|
||||
value-format="YYYY-MM-DD HH:mm:ss"
|
||||
type="daterange"
|
||||
start-placeholder="开始日期"
|
||||
end-placeholder="结束日期"
|
||||
:default-time="[new Date('1 00:00:00'), new Date('1 23:59:59')]"
|
||||
class="!w-220px"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="是否转正(1:是,0:否)" prop="isConfirmed">
|
||||
<el-select
|
||||
v-model="queryParams.isConfirmed"
|
||||
placeholder="请选择是否转正(1:是,0:否)"
|
||||
clearable
|
||||
class="!w-240px"
|
||||
>
|
||||
<el-option
|
||||
v-for="dict in getIntDictOptions(DICT_TYPE.INFRA_BOOLEAN_STRING)"
|
||||
:key="dict.value"
|
||||
:label="dict.label"
|
||||
:value="dict.value"
|
||||
/>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item label="申请日期" prop="applicationDate">
|
||||
<el-date-picker
|
||||
v-model="queryParams.applicationDate"
|
||||
value-format="YYYY-MM-DD HH:mm:ss"
|
||||
type="daterange"
|
||||
start-placeholder="开始日期"
|
||||
end-placeholder="结束日期"
|
||||
:default-time="[new Date('1 00:00:00'), new Date('1 23:59:59')]"
|
||||
class="!w-220px"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="转正申请说明" prop="applicationNote">
|
||||
<el-input
|
||||
v-model="queryParams.applicationNote"
|
||||
placeholder="请输入转正申请说明"
|
||||
clearable
|
||||
@keyup.enter="handleQuery"
|
||||
class="!w-240px"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="工作业绩评分" prop="workPerformanceScore">
|
||||
<el-input
|
||||
v-model="queryParams.workPerformanceScore"
|
||||
placeholder="请输入工作业绩评分"
|
||||
clearable
|
||||
@keyup.enter="handleQuery"
|
||||
class="!w-240px"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="出勤情况评分" prop="attendanceScore">
|
||||
<el-input
|
||||
v-model="queryParams.attendanceScore"
|
||||
placeholder="请输入出勤情况评分"
|
||||
clearable
|
||||
@keyup.enter="handleQuery"
|
||||
class="!w-240px"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="团队协作评分" prop="teamworkScore">
|
||||
<el-input
|
||||
v-model="queryParams.teamworkScore"
|
||||
placeholder="请输入团队协作评分"
|
||||
clearable
|
||||
@keyup.enter="handleQuery"
|
||||
class="!w-240px"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="能力表现评分" prop="abilityPerformanceScore">
|
||||
<el-input
|
||||
v-model="queryParams.abilityPerformanceScore"
|
||||
placeholder="请输入能力表现评分"
|
||||
clearable
|
||||
@keyup.enter="handleQuery"
|
||||
class="!w-240px"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="本人签字" prop="eSignature">
|
||||
<el-input
|
||||
v-model="queryParams.eSignature"
|
||||
placeholder="请输入本人签字"
|
||||
clearable
|
||||
@keyup.enter="handleQuery"
|
||||
class="!w-240px"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="创建时间" prop="createTime">
|
||||
<el-date-picker
|
||||
v-model="queryParams.createTime"
|
||||
value-format="YYYY-MM-DD HH:mm:ss"
|
||||
type="daterange"
|
||||
start-placeholder="开始日期"
|
||||
end-placeholder="结束日期"
|
||||
:default-time="[new Date('1 00:00:00'), new Date('1 23:59:59')]"
|
||||
class="!w-220px"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item>
|
||||
<el-button @click="handleQuery"><Icon icon="ep:search" class="mr-5px" /> 搜索</el-button>
|
||||
<el-button @click="resetQuery"><Icon icon="ep:refresh" class="mr-5px" /> 重置</el-button>
|
||||
<el-button
|
||||
type="primary"
|
||||
plain
|
||||
@click="openForm('create')"
|
||||
v-hasPermi="['hrm:full-member-apply:create']"
|
||||
>
|
||||
<Icon icon="ep:plus" class="mr-5px" /> 新增
|
||||
</el-button>
|
||||
<el-button
|
||||
type="success"
|
||||
plain
|
||||
@click="handleExport"
|
||||
:loading="exportLoading"
|
||||
v-hasPermi="['hrm:full-member-apply:export']"
|
||||
>
|
||||
<Icon icon="ep:download" class="mr-5px" /> 导出
|
||||
</el-button>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
</ContentWrap>
|
||||
|
||||
<!-- 列表 -->
|
||||
<ContentWrap>
|
||||
<el-table v-loading="loading" :data="list" :stripe="true" :show-overflow-tooltip="true">
|
||||
<el-table-column label="主键,自动递增" align="center" prop="id" />
|
||||
<el-table-column label="员工档案ID(关联hrm_user_infor)" align="center" prop="userId" />
|
||||
<el-table-column label="工作流编号" align="center" prop="processInstanceId" />
|
||||
<el-table-column label="审批状态" align="center" prop="auditStatus" />
|
||||
<el-table-column label="转正日期" align="center" prop="confirmationDate" />
|
||||
<el-table-column label="是否转正(1:是,0:否)" align="center" prop="isConfirmed">
|
||||
<template #default="scope">
|
||||
<dict-tag :type="DICT_TYPE.INFRA_BOOLEAN_STRING" :value="scope.row.isConfirmed" />
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="申请日期" align="center" prop="applicationDate" />
|
||||
<el-table-column label="转正申请说明" align="center" prop="applicationNote" />
|
||||
<el-table-column label="工作业绩评分" align="center" prop="workPerformanceScore" />
|
||||
<el-table-column label="出勤情况评分" align="center" prop="attendanceScore" />
|
||||
<el-table-column label="团队协作评分" align="center" prop="teamworkScore" />
|
||||
<el-table-column label="能力表现评分" align="center" prop="abilityPerformanceScore" />
|
||||
<el-table-column label="本人签字" align="center" prop="eSignature" />
|
||||
<el-table-column
|
||||
label="创建时间"
|
||||
align="center"
|
||||
prop="createTime"
|
||||
:formatter="dateFormatter"
|
||||
width="180px"
|
||||
/>
|
||||
<el-table-column label="操作" align="center" min-width="120px">
|
||||
<template #default="scope">
|
||||
<el-button
|
||||
link
|
||||
type="primary"
|
||||
@click="openForm('update', scope.row.id)"
|
||||
v-hasPermi="['hrm:full-member-apply:update']"
|
||||
>
|
||||
编辑
|
||||
</el-button>
|
||||
<el-button
|
||||
link
|
||||
type="danger"
|
||||
@click="handleDelete(scope.row.id)"
|
||||
v-hasPermi="['hrm:full-member-apply:delete']"
|
||||
>
|
||||
删除
|
||||
</el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
<!-- 分页 -->
|
||||
<Pagination
|
||||
:total="total"
|
||||
v-model:page="queryParams.pageNo"
|
||||
v-model:limit="queryParams.pageSize"
|
||||
@pagination="getList"
|
||||
/>
|
||||
</ContentWrap>
|
||||
|
||||
<!-- 表单弹窗:添加/修改 -->
|
||||
<FullMemberApplyForm ref="formRef" @success="getList" />
|
||||
</template>
|
||||
|
||||
<script setup lang="ts">
|
||||
import { getIntDictOptions, DICT_TYPE } from '@/utils/dict'
|
||||
import { dateFormatter } from '@/utils/formatTime'
|
||||
import download from '@/utils/download'
|
||||
import { FullMemberApplyApi, FullMemberApplyVO } from '@/api/hrm/fullmemberapply'
|
||||
import FullMemberApplyForm from './FullMemberApplyForm.vue'
|
||||
|
||||
/** 转正申请 列表 */
|
||||
defineOptions({ name: 'FullMemberApply' })
|
||||
|
||||
const message = useMessage() // 消息弹窗
|
||||
const { t } = useI18n() // 国际化
|
||||
|
||||
const loading = ref(true) // 列表的加载中
|
||||
const list = ref<FullMemberApplyVO[]>([]) // 列表的数据
|
||||
const total = ref(0) // 列表的总页数
|
||||
const queryParams = reactive({
|
||||
pageNo: 1,
|
||||
pageSize: 10,
|
||||
userId: undefined,
|
||||
processInstanceId: undefined,
|
||||
auditStatus: undefined,
|
||||
confirmationDate: [],
|
||||
isConfirmed: undefined,
|
||||
applicationDate: [],
|
||||
applicationNote: undefined,
|
||||
workPerformanceScore: undefined,
|
||||
attendanceScore: undefined,
|
||||
teamworkScore: undefined,
|
||||
abilityPerformanceScore: undefined,
|
||||
eSignature: undefined,
|
||||
createTime: []
|
||||
})
|
||||
const queryFormRef = ref() // 搜索的表单
|
||||
const exportLoading = ref(false) // 导出的加载中
|
||||
|
||||
/** 查询列表 */
|
||||
const getList = async () => {
|
||||
loading.value = true
|
||||
try {
|
||||
const data = await FullMemberApplyApi.getFullMemberApplyPage(queryParams)
|
||||
list.value = data.list
|
||||
total.value = data.total
|
||||
} finally {
|
||||
loading.value = false
|
||||
}
|
||||
}
|
||||
|
||||
/** 搜索按钮操作 */
|
||||
const handleQuery = () => {
|
||||
queryParams.pageNo = 1
|
||||
getList()
|
||||
}
|
||||
|
||||
/** 重置按钮操作 */
|
||||
const resetQuery = () => {
|
||||
queryFormRef.value.resetFields()
|
||||
handleQuery()
|
||||
}
|
||||
|
||||
/** 添加/修改操作 */
|
||||
const formRef = ref()
|
||||
const openForm = (type: string, id?: number) => {
|
||||
formRef.value.open(type, id)
|
||||
}
|
||||
|
||||
/** 删除按钮操作 */
|
||||
const handleDelete = async (id: number) => {
|
||||
try {
|
||||
// 删除的二次确认
|
||||
await message.delConfirm()
|
||||
// 发起删除
|
||||
await FullMemberApplyApi.deleteFullMemberApply(id)
|
||||
message.success(t('common.delSuccess'))
|
||||
// 刷新列表
|
||||
await getList()
|
||||
} catch {}
|
||||
}
|
||||
|
||||
/** 导出按钮操作 */
|
||||
const handleExport = async () => {
|
||||
try {
|
||||
// 导出的二次确认
|
||||
await message.exportConfirm()
|
||||
// 发起导出
|
||||
exportLoading.value = true
|
||||
const data = await FullMemberApplyApi.exportFullMemberApply(queryParams)
|
||||
download.excel(data, '转正申请.xls')
|
||||
} catch {
|
||||
} finally {
|
||||
exportLoading.value = false
|
||||
}
|
||||
}
|
||||
|
||||
/** 初始化 **/
|
||||
onMounted(() => {
|
||||
getList()
|
||||
})
|
||||
</script>
|
||||
|
|
@ -0,0 +1,149 @@
|
|||
<template>
|
||||
<Dialog :title="dialogTitle" v-model="dialogVisible">
|
||||
<el-form
|
||||
ref="formRef"
|
||||
:model="formData"
|
||||
:rules="formRules"
|
||||
label-width="100px"
|
||||
v-loading="formLoading"
|
||||
>
|
||||
<el-form-item label="招聘Id" prop="recruitmentRequestId">
|
||||
<el-input v-model="formData.recruitmentRequestId" placeholder="请输入招聘Id" />
|
||||
</el-form-item>
|
||||
<el-form-item label="人才库ID(关联hrm_talent_pool)" prop="talentPoolId">
|
||||
<el-input v-model="formData.talentPoolId" placeholder="请输入人才库ID(关联hrm_talent_pool)" />
|
||||
</el-form-item>
|
||||
<el-form-item label="工作流编号" prop="processInstanceId">
|
||||
<el-input v-model="formData.processInstanceId" placeholder="请输入工作流编号" />
|
||||
</el-form-item>
|
||||
<el-form-item label="审批状态" prop="auditStatus">
|
||||
<el-radio-group v-model="formData.auditStatus">
|
||||
<el-radio value="1">请选择字典生成</el-radio>
|
||||
</el-radio-group>
|
||||
</el-form-item>
|
||||
<el-form-item label="面试地址" prop="interviewAddress">
|
||||
<el-select v-model="formData.interviewAddress" placeholder="请选择面试地址">
|
||||
<el-option label="请选择字典生成" value="" />
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item label="面试通知时间" prop="interviewTime">
|
||||
<el-date-picker
|
||||
v-model="formData.interviewTime"
|
||||
type="date"
|
||||
value-format="x"
|
||||
placeholder="选择面试通知时间"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="面试通知邮箱" prop="interviewEmail">
|
||||
<el-input v-model="formData.interviewEmail" placeholder="请输入面试通知邮箱" />
|
||||
</el-form-item>
|
||||
<el-form-item label="状态" prop="status">
|
||||
<el-radio-group v-model="formData.status">
|
||||
<el-radio value="1">请选择字典生成</el-radio>
|
||||
</el-radio-group>
|
||||
</el-form-item>
|
||||
<el-form-item label="部门ID" prop="deptId">
|
||||
<el-input v-model="formData.deptId" placeholder="请输入部门ID" />
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
<template #footer>
|
||||
<el-button @click="submitForm" type="primary" :disabled="formLoading">确 定</el-button>
|
||||
<el-button @click="dialogVisible = false">取 消</el-button>
|
||||
</template>
|
||||
</Dialog>
|
||||
</template>
|
||||
<script setup lang="ts">
|
||||
import { InterviewInitiationApi, InterviewInitiationVO } from '@/api/hrm/interviewinitiation'
|
||||
|
||||
/** 发起面试 表单 */
|
||||
defineOptions({ name: 'InterviewInitiationForm' })
|
||||
|
||||
const { t } = useI18n() // 国际化
|
||||
const message = useMessage() // 消息弹窗
|
||||
|
||||
const dialogVisible = ref(false) // 弹窗的是否展示
|
||||
const dialogTitle = ref('') // 弹窗的标题
|
||||
const formLoading = ref(false) // 表单的加载中:1)修改时的数据加载;2)提交的按钮禁用
|
||||
const formType = ref('') // 表单的类型:create - 新增;update - 修改
|
||||
const formData = ref({
|
||||
id: undefined,
|
||||
recruitmentRequestId: undefined,
|
||||
talentPoolId: undefined,
|
||||
processInstanceId: undefined,
|
||||
auditStatus: undefined,
|
||||
interviewAddress: undefined,
|
||||
interviewTime: undefined,
|
||||
interviewEmail: undefined,
|
||||
status: undefined,
|
||||
deptId: undefined
|
||||
})
|
||||
const formRules = reactive({
|
||||
recruitmentRequestId: [{ required: true, message: '招聘Id不能为空', trigger: 'blur' }],
|
||||
talentPoolId: [{ required: true, message: '人才库ID(关联hrm_talent_pool)不能为空', trigger: 'blur' }],
|
||||
auditStatus: [{ required: true, message: '审批状态不能为空', trigger: 'blur' }],
|
||||
interviewAddress: [{ required: true, message: '面试地址不能为空', trigger: 'change' }],
|
||||
interviewTime: [{ required: true, message: '面试通知时间不能为空', trigger: 'blur' }],
|
||||
interviewEmail: [{ required: true, message: '面试通知邮箱不能为空', trigger: 'blur' }],
|
||||
deptId: [{ required: true, message: '部门ID不能为空', trigger: 'blur' }]
|
||||
})
|
||||
const formRef = ref() // 表单 Ref
|
||||
|
||||
/** 打开弹窗 */
|
||||
const open = async (type: string, id?: number) => {
|
||||
dialogVisible.value = true
|
||||
dialogTitle.value = t('action.' + type)
|
||||
formType.value = type
|
||||
resetForm()
|
||||
// 修改时,设置数据
|
||||
if (id) {
|
||||
formLoading.value = true
|
||||
try {
|
||||
formData.value = await InterviewInitiationApi.getInterviewInitiation(id)
|
||||
} finally {
|
||||
formLoading.value = false
|
||||
}
|
||||
}
|
||||
}
|
||||
defineExpose({ open }) // 提供 open 方法,用于打开弹窗
|
||||
|
||||
/** 提交表单 */
|
||||
const emit = defineEmits(['success']) // 定义 success 事件,用于操作成功后的回调
|
||||
const submitForm = async () => {
|
||||
// 校验表单
|
||||
await formRef.value.validate()
|
||||
// 提交请求
|
||||
formLoading.value = true
|
||||
try {
|
||||
const data = formData.value as unknown as InterviewInitiationVO
|
||||
if (formType.value === 'create') {
|
||||
await InterviewInitiationApi.createInterviewInitiation(data)
|
||||
message.success(t('common.createSuccess'))
|
||||
} else {
|
||||
await InterviewInitiationApi.updateInterviewInitiation(data)
|
||||
message.success(t('common.updateSuccess'))
|
||||
}
|
||||
dialogVisible.value = false
|
||||
// 发送操作成功的事件
|
||||
emit('success')
|
||||
} finally {
|
||||
formLoading.value = false
|
||||
}
|
||||
}
|
||||
|
||||
/** 重置表单 */
|
||||
const resetForm = () => {
|
||||
formData.value = {
|
||||
id: undefined,
|
||||
recruitmentRequestId: undefined,
|
||||
talentPoolId: undefined,
|
||||
processInstanceId: undefined,
|
||||
auditStatus: undefined,
|
||||
interviewAddress: undefined,
|
||||
interviewTime: undefined,
|
||||
interviewEmail: undefined,
|
||||
status: undefined,
|
||||
deptId: undefined
|
||||
}
|
||||
formRef.value?.resetFields()
|
||||
}
|
||||
</script>
|
||||
|
|
@ -0,0 +1,286 @@
|
|||
<template>
|
||||
<ContentWrap>
|
||||
<!-- 搜索工作栏 -->
|
||||
<el-form
|
||||
class="-mb-15px"
|
||||
:model="queryParams"
|
||||
ref="queryFormRef"
|
||||
:inline="true"
|
||||
label-width="68px"
|
||||
>
|
||||
<el-form-item label="招聘Id" prop="recruitmentRequestId">
|
||||
<el-input
|
||||
v-model="queryParams.recruitmentRequestId"
|
||||
placeholder="请输入招聘Id"
|
||||
clearable
|
||||
@keyup.enter="handleQuery"
|
||||
class="!w-240px"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="人才库ID(关联hrm_talent_pool)" prop="talentPoolId">
|
||||
<el-input
|
||||
v-model="queryParams.talentPoolId"
|
||||
placeholder="请输入人才库ID(关联hrm_talent_pool)"
|
||||
clearable
|
||||
@keyup.enter="handleQuery"
|
||||
class="!w-240px"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="工作流编号" prop="processInstanceId">
|
||||
<el-input
|
||||
v-model="queryParams.processInstanceId"
|
||||
placeholder="请输入工作流编号"
|
||||
clearable
|
||||
@keyup.enter="handleQuery"
|
||||
class="!w-240px"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="审批状态" prop="auditStatus">
|
||||
<el-select
|
||||
v-model="queryParams.auditStatus"
|
||||
placeholder="请选择审批状态"
|
||||
clearable
|
||||
class="!w-240px"
|
||||
>
|
||||
<el-option label="请选择字典生成" value="" />
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item label="面试地址" prop="interviewAddress">
|
||||
<el-select
|
||||
v-model="queryParams.interviewAddress"
|
||||
placeholder="请选择面试地址"
|
||||
clearable
|
||||
class="!w-240px"
|
||||
>
|
||||
<el-option label="请选择字典生成" value="" />
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item label="面试通知时间" prop="interviewTime">
|
||||
<el-date-picker
|
||||
v-model="queryParams.interviewTime"
|
||||
value-format="YYYY-MM-DD HH:mm:ss"
|
||||
type="daterange"
|
||||
start-placeholder="开始日期"
|
||||
end-placeholder="结束日期"
|
||||
:default-time="[new Date('1 00:00:00'), new Date('1 23:59:59')]"
|
||||
class="!w-220px"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="面试通知邮箱" prop="interviewEmail">
|
||||
<el-input
|
||||
v-model="queryParams.interviewEmail"
|
||||
placeholder="请输入面试通知邮箱"
|
||||
clearable
|
||||
@keyup.enter="handleQuery"
|
||||
class="!w-240px"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="状态" prop="status">
|
||||
<el-select
|
||||
v-model="queryParams.status"
|
||||
placeholder="请选择状态"
|
||||
clearable
|
||||
class="!w-240px"
|
||||
>
|
||||
<el-option label="请选择字典生成" value="" />
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item label="部门ID" prop="deptId">
|
||||
<el-input
|
||||
v-model="queryParams.deptId"
|
||||
placeholder="请输入部门ID"
|
||||
clearable
|
||||
@keyup.enter="handleQuery"
|
||||
class="!w-240px"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="创建时间" prop="createTime">
|
||||
<el-date-picker
|
||||
v-model="queryParams.createTime"
|
||||
value-format="YYYY-MM-DD HH:mm:ss"
|
||||
type="daterange"
|
||||
start-placeholder="开始日期"
|
||||
end-placeholder="结束日期"
|
||||
:default-time="[new Date('1 00:00:00'), new Date('1 23:59:59')]"
|
||||
class="!w-220px"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item>
|
||||
<el-button @click="handleQuery"><Icon icon="ep:search" class="mr-5px" /> 搜索</el-button>
|
||||
<el-button @click="resetQuery"><Icon icon="ep:refresh" class="mr-5px" /> 重置</el-button>
|
||||
<el-button
|
||||
type="primary"
|
||||
plain
|
||||
@click="openForm('create')"
|
||||
v-hasPermi="['hrm:interview-initiation:create']"
|
||||
>
|
||||
<Icon icon="ep:plus" class="mr-5px" /> 新增
|
||||
</el-button>
|
||||
<el-button
|
||||
type="success"
|
||||
plain
|
||||
@click="handleExport"
|
||||
:loading="exportLoading"
|
||||
v-hasPermi="['hrm:interview-initiation:export']"
|
||||
>
|
||||
<Icon icon="ep:download" class="mr-5px" /> 导出
|
||||
</el-button>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
</ContentWrap>
|
||||
|
||||
<!-- 列表 -->
|
||||
<ContentWrap>
|
||||
<el-table v-loading="loading" :data="list" :stripe="true" :show-overflow-tooltip="true">
|
||||
<el-table-column label="主键ID" align="center" prop="id" />
|
||||
<el-table-column label="招聘Id" align="center" prop="recruitmentRequestId" />
|
||||
<el-table-column label="人才库ID(关联hrm_talent_pool)" align="center" prop="talentPoolId" />
|
||||
<el-table-column label="工作流编号" align="center" prop="processInstanceId" />
|
||||
<el-table-column label="审批状态" align="center" prop="auditStatus" />
|
||||
<el-table-column label="面试地址" align="center" prop="interviewAddress" />
|
||||
<el-table-column
|
||||
label="面试通知时间"
|
||||
align="center"
|
||||
prop="interviewTime"
|
||||
:formatter="dateFormatter"
|
||||
width="180px"
|
||||
/>
|
||||
<el-table-column label="面试通知邮箱" align="center" prop="interviewEmail" />
|
||||
<el-table-column label="状态" align="center" prop="status" />
|
||||
<el-table-column label="部门ID" align="center" prop="deptId" />
|
||||
<el-table-column
|
||||
label="创建时间"
|
||||
align="center"
|
||||
prop="createTime"
|
||||
:formatter="dateFormatter"
|
||||
width="180px"
|
||||
/>
|
||||
<el-table-column label="操作" align="center" min-width="120px">
|
||||
<template #default="scope">
|
||||
<el-button
|
||||
link
|
||||
type="primary"
|
||||
@click="openForm('update', scope.row.id)"
|
||||
v-hasPermi="['hrm:interview-initiation:update']"
|
||||
>
|
||||
编辑
|
||||
</el-button>
|
||||
<el-button
|
||||
link
|
||||
type="danger"
|
||||
@click="handleDelete(scope.row.id)"
|
||||
v-hasPermi="['hrm:interview-initiation:delete']"
|
||||
>
|
||||
删除
|
||||
</el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
<!-- 分页 -->
|
||||
<Pagination
|
||||
:total="total"
|
||||
v-model:page="queryParams.pageNo"
|
||||
v-model:limit="queryParams.pageSize"
|
||||
@pagination="getList"
|
||||
/>
|
||||
</ContentWrap>
|
||||
|
||||
<!-- 表单弹窗:添加/修改 -->
|
||||
<InterviewInitiationForm ref="formRef" @success="getList" />
|
||||
</template>
|
||||
|
||||
<script setup lang="ts">
|
||||
import { dateFormatter } from '@/utils/formatTime'
|
||||
import download from '@/utils/download'
|
||||
import { InterviewInitiationApi, InterviewInitiationVO } from '@/api/hrm/interviewinitiation'
|
||||
import InterviewInitiationForm from './InterviewInitiationForm.vue'
|
||||
|
||||
/** 发起面试 列表 */
|
||||
defineOptions({ name: 'InterviewInitiation' })
|
||||
|
||||
const message = useMessage() // 消息弹窗
|
||||
const { t } = useI18n() // 国际化
|
||||
|
||||
const loading = ref(true) // 列表的加载中
|
||||
const list = ref<InterviewInitiationVO[]>([]) // 列表的数据
|
||||
const total = ref(0) // 列表的总页数
|
||||
const queryParams = reactive({
|
||||
pageNo: 1,
|
||||
pageSize: 10,
|
||||
recruitmentRequestId: undefined,
|
||||
talentPoolId: undefined,
|
||||
processInstanceId: undefined,
|
||||
auditStatus: undefined,
|
||||
interviewAddress: undefined,
|
||||
interviewTime: [],
|
||||
interviewEmail: undefined,
|
||||
status: undefined,
|
||||
deptId: undefined,
|
||||
createTime: []
|
||||
})
|
||||
const queryFormRef = ref() // 搜索的表单
|
||||
const exportLoading = ref(false) // 导出的加载中
|
||||
|
||||
/** 查询列表 */
|
||||
const getList = async () => {
|
||||
loading.value = true
|
||||
try {
|
||||
const data = await InterviewInitiationApi.getInterviewInitiationPage(queryParams)
|
||||
list.value = data.list
|
||||
total.value = data.total
|
||||
} finally {
|
||||
loading.value = false
|
||||
}
|
||||
}
|
||||
|
||||
/** 搜索按钮操作 */
|
||||
const handleQuery = () => {
|
||||
queryParams.pageNo = 1
|
||||
getList()
|
||||
}
|
||||
|
||||
/** 重置按钮操作 */
|
||||
const resetQuery = () => {
|
||||
queryFormRef.value.resetFields()
|
||||
handleQuery()
|
||||
}
|
||||
|
||||
/** 添加/修改操作 */
|
||||
const formRef = ref()
|
||||
const openForm = (type: string, id?: number) => {
|
||||
formRef.value.open(type, id)
|
||||
}
|
||||
|
||||
/** 删除按钮操作 */
|
||||
const handleDelete = async (id: number) => {
|
||||
try {
|
||||
// 删除的二次确认
|
||||
await message.delConfirm()
|
||||
// 发起删除
|
||||
await InterviewInitiationApi.deleteInterviewInitiation(id)
|
||||
message.success(t('common.delSuccess'))
|
||||
// 刷新列表
|
||||
await getList()
|
||||
} catch {}
|
||||
}
|
||||
|
||||
/** 导出按钮操作 */
|
||||
const handleExport = async () => {
|
||||
try {
|
||||
// 导出的二次确认
|
||||
await message.exportConfirm()
|
||||
// 发起导出
|
||||
exportLoading.value = true
|
||||
const data = await InterviewInitiationApi.exportInterviewInitiation(queryParams)
|
||||
download.excel(data, '发起面试.xls')
|
||||
} catch {
|
||||
} finally {
|
||||
exportLoading.value = false
|
||||
}
|
||||
}
|
||||
|
||||
/** 初始化 **/
|
||||
onMounted(() => {
|
||||
getList()
|
||||
})
|
||||
</script>
|
||||
|
|
@ -0,0 +1,134 @@
|
|||
<template>
|
||||
<Dialog :title="dialogTitle" v-model="dialogVisible">
|
||||
<el-form
|
||||
ref="formRef"
|
||||
:model="formData"
|
||||
:rules="formRules"
|
||||
label-width="100px"
|
||||
v-loading="formLoading"
|
||||
>
|
||||
<el-form-item label="物品编码" prop="itemCode">
|
||||
<el-input v-model="formData.itemCode" placeholder="请输入物品编码" />
|
||||
</el-form-item>
|
||||
<el-form-item label="物品分类(办公用品、办公设备等)" prop="itemCategory">
|
||||
<el-select v-model="formData.itemCategory" placeholder="请选择物品分类(办公用品、办公设备等)">
|
||||
<el-option
|
||||
v-for="dict in getIntDictOptions(DICT_TYPE.HRM_ITEM_CATEGORY)"
|
||||
:key="dict.value"
|
||||
:label="dict.label"
|
||||
:value="dict.value"
|
||||
/>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item label="物品名称" prop="itemName">
|
||||
<el-input v-model="formData.itemName" placeholder="请输入物品名称" />
|
||||
</el-form-item>
|
||||
<el-form-item label="目前库存数量" prop="itemCount">
|
||||
<el-input v-model="formData.itemCount" placeholder="请输入目前库存数量" />
|
||||
</el-form-item>
|
||||
<el-form-item label="规格" prop="itemType">
|
||||
<el-select v-model="formData.itemType" placeholder="请选择规格">
|
||||
<el-option
|
||||
v-for="dict in getIntDictOptions(DICT_TYPE.HRM_ITEM_TYPE)"
|
||||
:key="dict.value"
|
||||
:label="dict.label"
|
||||
:value="dict.value"
|
||||
/>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item label="备注" prop="remark">
|
||||
<el-input v-model="formData.remark" placeholder="请输入备注" />
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
<template #footer>
|
||||
<el-button @click="submitForm" type="primary" :disabled="formLoading">确 定</el-button>
|
||||
<el-button @click="dialogVisible = false">取 消</el-button>
|
||||
</template>
|
||||
</Dialog>
|
||||
</template>
|
||||
<script setup lang="ts">
|
||||
import { getIntDictOptions, DICT_TYPE } from '@/utils/dict'
|
||||
import { ItemApi, ItemVO } from '@/api/hrm/item'
|
||||
|
||||
/** 物品管理 表单 */
|
||||
defineOptions({ name: 'ItemForm' })
|
||||
|
||||
const { t } = useI18n() // 国际化
|
||||
const message = useMessage() // 消息弹窗
|
||||
|
||||
const dialogVisible = ref(false) // 弹窗的是否展示
|
||||
const dialogTitle = ref('') // 弹窗的标题
|
||||
const formLoading = ref(false) // 表单的加载中:1)修改时的数据加载;2)提交的按钮禁用
|
||||
const formType = ref('') // 表单的类型:create - 新增;update - 修改
|
||||
const formData = ref({
|
||||
id: undefined,
|
||||
itemCode: undefined,
|
||||
itemCategory: undefined,
|
||||
itemName: undefined,
|
||||
itemCount: undefined,
|
||||
itemType: undefined,
|
||||
remark: undefined
|
||||
})
|
||||
const formRules = reactive({
|
||||
itemCategory: [{ required: true, message: '物品分类(办公用品、办公设备等)不能为空', trigger: 'change' }],
|
||||
itemName: [{ required: true, message: '物品名称不能为空', trigger: 'blur' }],
|
||||
itemCount: [{ required: true, message: '目前库存数量不能为空', trigger: 'blur' }]
|
||||
})
|
||||
const formRef = ref() // 表单 Ref
|
||||
|
||||
/** 打开弹窗 */
|
||||
const open = async (type: string, id?: number) => {
|
||||
dialogVisible.value = true
|
||||
dialogTitle.value = t('action.' + type)
|
||||
formType.value = type
|
||||
resetForm()
|
||||
// 修改时,设置数据
|
||||
if (id) {
|
||||
formLoading.value = true
|
||||
try {
|
||||
formData.value = await ItemApi.getItem(id)
|
||||
} finally {
|
||||
formLoading.value = false
|
||||
}
|
||||
}
|
||||
}
|
||||
defineExpose({ open }) // 提供 open 方法,用于打开弹窗
|
||||
|
||||
/** 提交表单 */
|
||||
const emit = defineEmits(['success']) // 定义 success 事件,用于操作成功后的回调
|
||||
const submitForm = async () => {
|
||||
// 校验表单
|
||||
await formRef.value.validate()
|
||||
// 提交请求
|
||||
formLoading.value = true
|
||||
try {
|
||||
const data = formData.value as unknown as ItemVO
|
||||
if (formType.value === 'create') {
|
||||
await ItemApi.createItem(data)
|
||||
message.success(t('common.createSuccess'))
|
||||
} else {
|
||||
await ItemApi.updateItem(data)
|
||||
message.success(t('common.updateSuccess'))
|
||||
}
|
||||
dialogVisible.value = false
|
||||
// 发送操作成功的事件
|
||||
emit('success')
|
||||
} finally {
|
||||
formLoading.value = false
|
||||
}
|
||||
}
|
||||
|
||||
/** 重置表单 */
|
||||
const resetForm = () => {
|
||||
formData.value = {
|
||||
id: undefined,
|
||||
itemCode: undefined,
|
||||
itemCategory: undefined,
|
||||
itemName: undefined,
|
||||
itemCount: undefined,
|
||||
itemType: undefined,
|
||||
remark: undefined
|
||||
}
|
||||
formRef.value?.resetFields()
|
||||
}
|
||||
</script>
|
||||
|
|
@ -0,0 +1,263 @@
|
|||
<template>
|
||||
<ContentWrap>
|
||||
<!-- 搜索工作栏 -->
|
||||
<el-form
|
||||
class="-mb-15px"
|
||||
:model="queryParams"
|
||||
ref="queryFormRef"
|
||||
:inline="true"
|
||||
label-width="68px"
|
||||
>
|
||||
<el-form-item label="物品编码" prop="itemCode">
|
||||
<el-input
|
||||
v-model="queryParams.itemCode"
|
||||
placeholder="请输入物品编码"
|
||||
clearable
|
||||
@keyup.enter="handleQuery"
|
||||
class="!w-240px"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="物品分类(办公用品、办公设备等)" prop="itemCategory">
|
||||
<el-select
|
||||
v-model="queryParams.itemCategory"
|
||||
placeholder="请选择物品分类(办公用品、办公设备等)"
|
||||
clearable
|
||||
class="!w-240px"
|
||||
>
|
||||
<el-option
|
||||
v-for="dict in getIntDictOptions(DICT_TYPE.HRM_ITEM_CATEGORY)"
|
||||
:key="dict.value"
|
||||
:label="dict.label"
|
||||
:value="dict.value"
|
||||
/>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item label="物品名称" prop="itemName">
|
||||
<el-input
|
||||
v-model="queryParams.itemName"
|
||||
placeholder="请输入物品名称"
|
||||
clearable
|
||||
@keyup.enter="handleQuery"
|
||||
class="!w-240px"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="目前库存数量" prop="itemCount">
|
||||
<el-input
|
||||
v-model="queryParams.itemCount"
|
||||
placeholder="请输入目前库存数量"
|
||||
clearable
|
||||
@keyup.enter="handleQuery"
|
||||
class="!w-240px"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="规格" prop="itemType">
|
||||
<el-select
|
||||
v-model="queryParams.itemType"
|
||||
placeholder="请选择规格"
|
||||
clearable
|
||||
class="!w-240px"
|
||||
>
|
||||
<el-option
|
||||
v-for="dict in getIntDictOptions(DICT_TYPE.HRM_ITEM_TYPE)"
|
||||
:key="dict.value"
|
||||
:label="dict.label"
|
||||
:value="dict.value"
|
||||
/>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item label="备注" prop="remark">
|
||||
<el-input
|
||||
v-model="queryParams.remark"
|
||||
placeholder="请输入备注"
|
||||
clearable
|
||||
@keyup.enter="handleQuery"
|
||||
class="!w-240px"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="创建时间" prop="createTime">
|
||||
<el-date-picker
|
||||
v-model="queryParams.createTime"
|
||||
value-format="YYYY-MM-DD HH:mm:ss"
|
||||
type="daterange"
|
||||
start-placeholder="开始日期"
|
||||
end-placeholder="结束日期"
|
||||
:default-time="[new Date('1 00:00:00'), new Date('1 23:59:59')]"
|
||||
class="!w-220px"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item>
|
||||
<el-button @click="handleQuery"><Icon icon="ep:search" class="mr-5px" /> 搜索</el-button>
|
||||
<el-button @click="resetQuery"><Icon icon="ep:refresh" class="mr-5px" /> 重置</el-button>
|
||||
<el-button
|
||||
type="primary"
|
||||
plain
|
||||
@click="openForm('create')"
|
||||
v-hasPermi="['hrm:item:create']"
|
||||
>
|
||||
<Icon icon="ep:plus" class="mr-5px" /> 新增
|
||||
</el-button>
|
||||
<el-button
|
||||
type="success"
|
||||
plain
|
||||
@click="handleExport"
|
||||
:loading="exportLoading"
|
||||
v-hasPermi="['hrm:item:export']"
|
||||
>
|
||||
<Icon icon="ep:download" class="mr-5px" /> 导出
|
||||
</el-button>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
</ContentWrap>
|
||||
|
||||
<!-- 列表 -->
|
||||
<ContentWrap>
|
||||
<el-table v-loading="loading" :data="list" :stripe="true" :show-overflow-tooltip="true">
|
||||
<el-table-column label="唯一主键" align="center" prop="id" />
|
||||
<el-table-column label="物品编码" align="center" prop="itemCode" />
|
||||
<el-table-column label="物品分类(办公用品、办公设备等)" align="center" prop="itemCategory">
|
||||
<template #default="scope">
|
||||
<dict-tag :type="DICT_TYPE.HRM_ITEM_CATEGORY" :value="scope.row.itemCategory" />
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="物品名称" align="center" prop="itemName" />
|
||||
<el-table-column label="目前库存数量" align="center" prop="itemCount" />
|
||||
<el-table-column label="规格" align="center" prop="itemType">
|
||||
<template #default="scope">
|
||||
<dict-tag :type="DICT_TYPE.HRM_ITEM_TYPE" :value="scope.row.itemType" />
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="备注" align="center" prop="remark" />
|
||||
<el-table-column
|
||||
label="创建时间"
|
||||
align="center"
|
||||
prop="createTime"
|
||||
:formatter="dateFormatter"
|
||||
width="180px"
|
||||
/>
|
||||
<el-table-column label="操作" align="center" min-width="120px">
|
||||
<template #default="scope">
|
||||
<el-button
|
||||
link
|
||||
type="primary"
|
||||
@click="openForm('update', scope.row.id)"
|
||||
v-hasPermi="['hrm:item:update']"
|
||||
>
|
||||
编辑
|
||||
</el-button>
|
||||
<el-button
|
||||
link
|
||||
type="danger"
|
||||
@click="handleDelete(scope.row.id)"
|
||||
v-hasPermi="['hrm:item:delete']"
|
||||
>
|
||||
删除
|
||||
</el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
<!-- 分页 -->
|
||||
<Pagination
|
||||
:total="total"
|
||||
v-model:page="queryParams.pageNo"
|
||||
v-model:limit="queryParams.pageSize"
|
||||
@pagination="getList"
|
||||
/>
|
||||
</ContentWrap>
|
||||
|
||||
<!-- 表单弹窗:添加/修改 -->
|
||||
<ItemForm ref="formRef" @success="getList" />
|
||||
</template>
|
||||
|
||||
<script setup lang="ts">
|
||||
import { getIntDictOptions, DICT_TYPE } from '@/utils/dict'
|
||||
import { dateFormatter } from '@/utils/formatTime'
|
||||
import download from '@/utils/download'
|
||||
import { ItemApi, ItemVO } from '@/api/hrm/item'
|
||||
import ItemForm from './ItemForm.vue'
|
||||
|
||||
/** 物品管理 列表 */
|
||||
defineOptions({ name: 'Item' })
|
||||
|
||||
const message = useMessage() // 消息弹窗
|
||||
const { t } = useI18n() // 国际化
|
||||
|
||||
const loading = ref(true) // 列表的加载中
|
||||
const list = ref<ItemVO[]>([]) // 列表的数据
|
||||
const total = ref(0) // 列表的总页数
|
||||
const queryParams = reactive({
|
||||
pageNo: 1,
|
||||
pageSize: 10,
|
||||
itemCode: undefined,
|
||||
itemCategory: undefined,
|
||||
itemName: undefined,
|
||||
itemCount: undefined,
|
||||
itemType: undefined,
|
||||
remark: undefined,
|
||||
createTime: []
|
||||
})
|
||||
const queryFormRef = ref() // 搜索的表单
|
||||
const exportLoading = ref(false) // 导出的加载中
|
||||
|
||||
/** 查询列表 */
|
||||
const getList = async () => {
|
||||
loading.value = true
|
||||
try {
|
||||
const data = await ItemApi.getItemPage(queryParams)
|
||||
list.value = data.list
|
||||
total.value = data.total
|
||||
} finally {
|
||||
loading.value = false
|
||||
}
|
||||
}
|
||||
|
||||
/** 搜索按钮操作 */
|
||||
const handleQuery = () => {
|
||||
queryParams.pageNo = 1
|
||||
getList()
|
||||
}
|
||||
|
||||
/** 重置按钮操作 */
|
||||
const resetQuery = () => {
|
||||
queryFormRef.value.resetFields()
|
||||
handleQuery()
|
||||
}
|
||||
|
||||
/** 添加/修改操作 */
|
||||
const formRef = ref()
|
||||
const openForm = (type: string, id?: number) => {
|
||||
formRef.value.open(type, id)
|
||||
}
|
||||
|
||||
/** 删除按钮操作 */
|
||||
const handleDelete = async (id: number) => {
|
||||
try {
|
||||
// 删除的二次确认
|
||||
await message.delConfirm()
|
||||
// 发起删除
|
||||
await ItemApi.deleteItem(id)
|
||||
message.success(t('common.delSuccess'))
|
||||
// 刷新列表
|
||||
await getList()
|
||||
} catch {}
|
||||
}
|
||||
|
||||
/** 导出按钮操作 */
|
||||
const handleExport = async () => {
|
||||
try {
|
||||
// 导出的二次确认
|
||||
await message.exportConfirm()
|
||||
// 发起导出
|
||||
exportLoading.value = true
|
||||
const data = await ItemApi.exportItem(queryParams)
|
||||
download.excel(data, '物品管理.xls')
|
||||
} catch {
|
||||
} finally {
|
||||
exportLoading.value = false
|
||||
}
|
||||
}
|
||||
|
||||
/** 初始化 **/
|
||||
onMounted(() => {
|
||||
getList()
|
||||
})
|
||||
</script>
|
||||
|
|
@ -0,0 +1,142 @@
|
|||
<template>
|
||||
<Dialog :title="dialogTitle" v-model="dialogVisible">
|
||||
<el-form
|
||||
ref="formRef"
|
||||
:model="formData"
|
||||
:rules="formRules"
|
||||
label-width="100px"
|
||||
v-loading="formLoading"
|
||||
>
|
||||
<el-form-item label="领用人ID" prop="applicantId">
|
||||
<el-input v-model="formData.applicantId" placeholder="请输入领用人ID" />
|
||||
</el-form-item>
|
||||
<el-form-item label="申请日期" prop="requestDate">
|
||||
<el-date-picker
|
||||
v-model="formData.requestDate"
|
||||
type="date"
|
||||
value-format="x"
|
||||
placeholder="选择申请日期"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="领用人电子签名" prop="eSignature">
|
||||
<el-input v-model="formData.eSignature" placeholder="请输入领用人电子签名" />
|
||||
</el-form-item>
|
||||
<el-form-item label="工作流编号" prop="processInstanceId">
|
||||
<el-input v-model="formData.processInstanceId" placeholder="请输入工作流编号" />
|
||||
</el-form-item>
|
||||
<el-form-item label="审批状态" prop="auditStatus">
|
||||
<el-radio-group v-model="formData.auditStatus">
|
||||
<el-radio value="1">请选择字典生成</el-radio>
|
||||
</el-radio-group>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
<!-- 子表的表单 -->
|
||||
<el-tabs v-model="subTabsName">
|
||||
<el-tab-pane label="物品申请明细" name="itemRequestDetail">
|
||||
<ItemRequestDetailForm ref="itemRequestDetailFormRef" :item-request-id="formData.id" />
|
||||
</el-tab-pane>
|
||||
</el-tabs>
|
||||
<template #footer>
|
||||
<el-button @click="submitForm" type="primary" :disabled="formLoading">确 定</el-button>
|
||||
<el-button @click="dialogVisible = false">取 消</el-button>
|
||||
</template>
|
||||
</Dialog>
|
||||
</template>
|
||||
<script setup lang="ts">
|
||||
import { ItemRequestApi, ItemRequestVO } from '@/api/hrm/itemrequest'
|
||||
import ItemRequestDetailForm from './components/ItemRequestDetailForm.vue'
|
||||
|
||||
/** 物品申请 表单 */
|
||||
defineOptions({ name: 'ItemRequestForm' })
|
||||
|
||||
const { t } = useI18n() // 国际化
|
||||
const message = useMessage() // 消息弹窗
|
||||
|
||||
const dialogVisible = ref(false) // 弹窗的是否展示
|
||||
const dialogTitle = ref('') // 弹窗的标题
|
||||
const formLoading = ref(false) // 表单的加载中:1)修改时的数据加载;2)提交的按钮禁用
|
||||
const formType = ref('') // 表单的类型:create - 新增;update - 修改
|
||||
const formData = ref({
|
||||
id: undefined,
|
||||
applicantId: undefined,
|
||||
requestDate: undefined,
|
||||
eSignature: undefined,
|
||||
processInstanceId: undefined,
|
||||
auditStatus: undefined
|
||||
})
|
||||
const formRules = reactive({
|
||||
applicantId: [{ required: true, message: '领用人ID不能为空', trigger: 'blur' }],
|
||||
requestDate: [{ required: true, message: '申请日期不能为空', trigger: 'blur' }],
|
||||
eSignature: [{ required: true, message: '领用人电子签名不能为空', trigger: 'blur' }],
|
||||
auditStatus: [{ required: true, message: '审批状态不能为空', trigger: 'blur' }]
|
||||
})
|
||||
const formRef = ref() // 表单 Ref
|
||||
|
||||
/** 子表的表单 */
|
||||
const subTabsName = ref('itemRequestDetail')
|
||||
const itemRequestDetailFormRef = ref()
|
||||
|
||||
/** 打开弹窗 */
|
||||
const open = async (type: string, id?: number) => {
|
||||
dialogVisible.value = true
|
||||
dialogTitle.value = t('action.' + type)
|
||||
formType.value = type
|
||||
resetForm()
|
||||
// 修改时,设置数据
|
||||
if (id) {
|
||||
formLoading.value = true
|
||||
try {
|
||||
formData.value = await ItemRequestApi.getItemRequest(id)
|
||||
} finally {
|
||||
formLoading.value = false
|
||||
}
|
||||
}
|
||||
}
|
||||
defineExpose({ open }) // 提供 open 方法,用于打开弹窗
|
||||
|
||||
/** 提交表单 */
|
||||
const emit = defineEmits(['success']) // 定义 success 事件,用于操作成功后的回调
|
||||
const submitForm = async () => {
|
||||
// 校验表单
|
||||
await formRef.value.validate()
|
||||
// 校验子表单
|
||||
try {
|
||||
await itemRequestDetailFormRef.value.validate()
|
||||
} catch (e) {
|
||||
subTabsName.value = 'itemRequestDetail'
|
||||
return
|
||||
}
|
||||
// 提交请求
|
||||
formLoading.value = true
|
||||
try {
|
||||
const data = formData.value as unknown as ItemRequestVO
|
||||
// 拼接子表的数据
|
||||
data.itemRequestDetails = itemRequestDetailFormRef.value.getData()
|
||||
if (formType.value === 'create') {
|
||||
await ItemRequestApi.createItemRequest(data)
|
||||
message.success(t('common.createSuccess'))
|
||||
} else {
|
||||
await ItemRequestApi.updateItemRequest(data)
|
||||
message.success(t('common.updateSuccess'))
|
||||
}
|
||||
dialogVisible.value = false
|
||||
// 发送操作成功的事件
|
||||
emit('success')
|
||||
} finally {
|
||||
formLoading.value = false
|
||||
}
|
||||
}
|
||||
|
||||
/** 重置表单 */
|
||||
const resetForm = () => {
|
||||
formData.value = {
|
||||
id: undefined,
|
||||
applicantId: undefined,
|
||||
requestDate: undefined,
|
||||
eSignature: undefined,
|
||||
processInstanceId: undefined,
|
||||
auditStatus: undefined
|
||||
}
|
||||
formRef.value?.resetFields()
|
||||
}
|
||||
</script>
|
||||
|
|
@ -0,0 +1,108 @@
|
|||
<template>
|
||||
<el-form
|
||||
ref="formRef"
|
||||
:model="formData"
|
||||
:rules="formRules"
|
||||
v-loading="formLoading"
|
||||
label-width="0px"
|
||||
:inline-message="true"
|
||||
>
|
||||
<el-table :data="formData" class="-mt-10px">
|
||||
<el-table-column label="序号" type="index" width="100" />
|
||||
<el-table-column label="物品管理ID(关联 hrm_item)" min-width="150">
|
||||
<template #default="{ row, $index }">
|
||||
<el-form-item :prop="`${$index}.itemId`" :rules="formRules.itemId" class="mb-0px!">
|
||||
<el-input v-model="row.itemId" placeholder="请输入物品管理ID(关联 hrm_item)" />
|
||||
</el-form-item>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="领用数量" min-width="150">
|
||||
<template #default="{ row, $index }">
|
||||
<el-form-item :prop="`${$index}.requestCount`" :rules="formRules.requestCount" class="mb-0px!">
|
||||
<el-input v-model="row.requestCount" placeholder="请输入领用数量" />
|
||||
</el-form-item>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="申请说明" min-width="150">
|
||||
<template #default="{ row, $index }">
|
||||
<el-form-item :prop="`${$index}.instructions`" :rules="formRules.instructions" class="mb-0px!">
|
||||
<el-input v-model="row.instructions" placeholder="请输入申请说明" />
|
||||
</el-form-item>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column align="center" fixed="right" label="操作" width="60">
|
||||
<template #default="{ $index }">
|
||||
<el-button @click="handleDelete($index)" link>—</el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
</el-form>
|
||||
<el-row justify="center" class="mt-3">
|
||||
<el-button @click="handleAdd" round>+ 添加物品申请明细</el-button>
|
||||
</el-row>
|
||||
</template>
|
||||
<script setup lang="ts">
|
||||
import { ItemRequestApi } from '@/api/hrm/itemrequest'
|
||||
|
||||
const props = defineProps<{
|
||||
itemRequestId: undefined // 物品申请ID(关联 hrm_item_request)(主表的关联字段)
|
||||
}>()
|
||||
const formLoading = ref(false) // 表单的加载中
|
||||
const formData = ref([])
|
||||
const formRules = reactive({
|
||||
itemRequestId: [{ required: true, message: '物品申请ID(关联 hrm_item_request)不能为空', trigger: 'blur' }],
|
||||
itemId: [{ required: true, message: '物品管理ID(关联 hrm_item)不能为空', trigger: 'blur' }],
|
||||
requestCount: [{ required: true, message: '领用数量不能为空', trigger: 'blur' }]
|
||||
})
|
||||
const formRef = ref() // 表单 Ref
|
||||
|
||||
/** 监听主表的关联字段的变化,加载对应的子表数据 */
|
||||
watch(
|
||||
() => props.itemRequestId,
|
||||
async (val) => {
|
||||
// 1. 重置表单
|
||||
formData.value = []
|
||||
// 2. val 非空,则加载数据
|
||||
if (!val) {
|
||||
return;
|
||||
}
|
||||
try {
|
||||
formLoading.value = true
|
||||
formData.value = await ItemRequestApi.getItemRequestDetailListByItemRequestId(val)
|
||||
} finally {
|
||||
formLoading.value = false
|
||||
}
|
||||
},
|
||||
{ immediate: true }
|
||||
)
|
||||
|
||||
/** 新增按钮操作 */
|
||||
const handleAdd = () => {
|
||||
const row = {
|
||||
id: undefined,
|
||||
itemRequestId: undefined,
|
||||
itemId: undefined,
|
||||
requestCount: undefined,
|
||||
instructions: undefined
|
||||
}
|
||||
row.itemRequestId = props.itemRequestId
|
||||
formData.value.push(row)
|
||||
}
|
||||
|
||||
/** 删除按钮操作 */
|
||||
const handleDelete = (index) => {
|
||||
formData.value.splice(index, 1)
|
||||
}
|
||||
|
||||
/** 表单校验 */
|
||||
const validate = () => {
|
||||
return formRef.value.validate()
|
||||
}
|
||||
|
||||
/** 表单值 */
|
||||
const getData = () => {
|
||||
return formData.value
|
||||
}
|
||||
|
||||
defineExpose({ validate, getData })
|
||||
</script>
|
||||
|
|
@ -0,0 +1,234 @@
|
|||
<template>
|
||||
<ContentWrap>
|
||||
<!-- 搜索工作栏 -->
|
||||
<el-form
|
||||
class="-mb-15px"
|
||||
:model="queryParams"
|
||||
ref="queryFormRef"
|
||||
:inline="true"
|
||||
label-width="68px"
|
||||
>
|
||||
<el-form-item label="领用人ID" prop="applicantId">
|
||||
<el-input
|
||||
v-model="queryParams.applicantId"
|
||||
placeholder="请输入领用人ID"
|
||||
clearable
|
||||
@keyup.enter="handleQuery"
|
||||
class="!w-240px"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="申请日期" prop="requestDate">
|
||||
<el-date-picker
|
||||
v-model="queryParams.requestDate"
|
||||
value-format="YYYY-MM-DD HH:mm:ss"
|
||||
type="daterange"
|
||||
start-placeholder="开始日期"
|
||||
end-placeholder="结束日期"
|
||||
:default-time="[new Date('1 00:00:00'), new Date('1 23:59:59')]"
|
||||
class="!w-220px"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="领用人电子签名" prop="eSignature">
|
||||
<el-input
|
||||
v-model="queryParams.eSignature"
|
||||
placeholder="请输入领用人电子签名"
|
||||
clearable
|
||||
@keyup.enter="handleQuery"
|
||||
class="!w-240px"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="工作流编号" prop="processInstanceId">
|
||||
<el-input
|
||||
v-model="queryParams.processInstanceId"
|
||||
placeholder="请输入工作流编号"
|
||||
clearable
|
||||
@keyup.enter="handleQuery"
|
||||
class="!w-240px"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="审批状态" prop="auditStatus">
|
||||
<el-select
|
||||
v-model="queryParams.auditStatus"
|
||||
placeholder="请选择审批状态"
|
||||
clearable
|
||||
class="!w-240px"
|
||||
>
|
||||
<el-option label="请选择字典生成" value="" />
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item label="创建时间" prop="createTime">
|
||||
<el-date-picker
|
||||
v-model="queryParams.createTime"
|
||||
value-format="YYYY-MM-DD HH:mm:ss"
|
||||
type="daterange"
|
||||
start-placeholder="开始日期"
|
||||
end-placeholder="结束日期"
|
||||
:default-time="[new Date('1 00:00:00'), new Date('1 23:59:59')]"
|
||||
class="!w-220px"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item>
|
||||
<el-button @click="handleQuery"><Icon icon="ep:search" class="mr-5px" /> 搜索</el-button>
|
||||
<el-button @click="resetQuery"><Icon icon="ep:refresh" class="mr-5px" /> 重置</el-button>
|
||||
<el-button
|
||||
type="primary"
|
||||
plain
|
||||
@click="openForm('create')"
|
||||
v-hasPermi="['hrm:item-request:create']"
|
||||
>
|
||||
<Icon icon="ep:plus" class="mr-5px" /> 新增
|
||||
</el-button>
|
||||
<el-button
|
||||
type="success"
|
||||
plain
|
||||
@click="handleExport"
|
||||
:loading="exportLoading"
|
||||
v-hasPermi="['hrm:item-request:export']"
|
||||
>
|
||||
<Icon icon="ep:download" class="mr-5px" /> 导出
|
||||
</el-button>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
</ContentWrap>
|
||||
|
||||
<!-- 列表 -->
|
||||
<ContentWrap>
|
||||
<el-table v-loading="loading" :data="list" :stripe="true" :show-overflow-tooltip="true">
|
||||
<el-table-column label="自动递增的主键" align="center" prop="id" />
|
||||
<el-table-column label="领用人ID" align="center" prop="applicantId" />
|
||||
<el-table-column label="申请日期" align="center" prop="requestDate" />
|
||||
<el-table-column label="领用人电子签名" align="center" prop="eSignature" />
|
||||
<el-table-column label="工作流编号" align="center" prop="processInstanceId" />
|
||||
<el-table-column label="审批状态" align="center" prop="auditStatus" />
|
||||
<el-table-column
|
||||
label="创建时间"
|
||||
align="center"
|
||||
prop="createTime"
|
||||
:formatter="dateFormatter"
|
||||
width="180px"
|
||||
/>
|
||||
<el-table-column label="操作" align="center" min-width="120px">
|
||||
<template #default="scope">
|
||||
<el-button
|
||||
link
|
||||
type="primary"
|
||||
@click="openForm('update', scope.row.id)"
|
||||
v-hasPermi="['hrm:item-request:update']"
|
||||
>
|
||||
编辑
|
||||
</el-button>
|
||||
<el-button
|
||||
link
|
||||
type="danger"
|
||||
@click="handleDelete(scope.row.id)"
|
||||
v-hasPermi="['hrm:item-request:delete']"
|
||||
>
|
||||
删除
|
||||
</el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
<!-- 分页 -->
|
||||
<Pagination
|
||||
:total="total"
|
||||
v-model:page="queryParams.pageNo"
|
||||
v-model:limit="queryParams.pageSize"
|
||||
@pagination="getList"
|
||||
/>
|
||||
</ContentWrap>
|
||||
|
||||
<!-- 表单弹窗:添加/修改 -->
|
||||
<ItemRequestForm ref="formRef" @success="getList" />
|
||||
</template>
|
||||
|
||||
<script setup lang="ts">
|
||||
import { dateFormatter } from '@/utils/formatTime'
|
||||
import download from '@/utils/download'
|
||||
import { ItemRequestApi, ItemRequestVO } from '@/api/hrm/itemrequest'
|
||||
import ItemRequestForm from './ItemRequestForm.vue'
|
||||
|
||||
/** 物品申请 列表 */
|
||||
defineOptions({ name: 'ItemRequest' })
|
||||
|
||||
const message = useMessage() // 消息弹窗
|
||||
const { t } = useI18n() // 国际化
|
||||
|
||||
const loading = ref(true) // 列表的加载中
|
||||
const list = ref<ItemRequestVO[]>([]) // 列表的数据
|
||||
const total = ref(0) // 列表的总页数
|
||||
const queryParams = reactive({
|
||||
pageNo: 1,
|
||||
pageSize: 10,
|
||||
applicantId: undefined,
|
||||
requestDate: [],
|
||||
eSignature: undefined,
|
||||
processInstanceId: undefined,
|
||||
auditStatus: undefined,
|
||||
createTime: []
|
||||
})
|
||||
const queryFormRef = ref() // 搜索的表单
|
||||
const exportLoading = ref(false) // 导出的加载中
|
||||
|
||||
/** 查询列表 */
|
||||
const getList = async () => {
|
||||
loading.value = true
|
||||
try {
|
||||
const data = await ItemRequestApi.getItemRequestPage(queryParams)
|
||||
list.value = data.list
|
||||
total.value = data.total
|
||||
} finally {
|
||||
loading.value = false
|
||||
}
|
||||
}
|
||||
|
||||
/** 搜索按钮操作 */
|
||||
const handleQuery = () => {
|
||||
queryParams.pageNo = 1
|
||||
getList()
|
||||
}
|
||||
|
||||
/** 重置按钮操作 */
|
||||
const resetQuery = () => {
|
||||
queryFormRef.value.resetFields()
|
||||
handleQuery()
|
||||
}
|
||||
|
||||
/** 添加/修改操作 */
|
||||
const formRef = ref()
|
||||
const openForm = (type: string, id?: number) => {
|
||||
formRef.value.open(type, id)
|
||||
}
|
||||
|
||||
/** 删除按钮操作 */
|
||||
const handleDelete = async (id: number) => {
|
||||
try {
|
||||
// 删除的二次确认
|
||||
await message.delConfirm()
|
||||
// 发起删除
|
||||
await ItemRequestApi.deleteItemRequest(id)
|
||||
message.success(t('common.delSuccess'))
|
||||
// 刷新列表
|
||||
await getList()
|
||||
} catch {}
|
||||
}
|
||||
|
||||
/** 导出按钮操作 */
|
||||
const handleExport = async () => {
|
||||
try {
|
||||
// 导出的二次确认
|
||||
await message.exportConfirm()
|
||||
// 发起导出
|
||||
exportLoading.value = true
|
||||
const data = await ItemRequestApi.exportItemRequest(queryParams)
|
||||
download.excel(data, '物品申请.xls')
|
||||
} catch {
|
||||
} finally {
|
||||
exportLoading.value = false
|
||||
}
|
||||
}
|
||||
|
||||
/** 初始化 **/
|
||||
onMounted(() => {
|
||||
getList()
|
||||
})
|
||||
</script>
|
||||
|
|
@ -0,0 +1,109 @@
|
|||
<template>
|
||||
<Dialog :title="dialogTitle" v-model="dialogVisible">
|
||||
<el-form
|
||||
ref="formRef"
|
||||
:model="formData"
|
||||
:rules="formRules"
|
||||
label-width="100px"
|
||||
v-loading="formLoading"
|
||||
>
|
||||
<el-form-item label="物品申请ID(关联 hrm_item_request)" prop="itemRequestId">
|
||||
<el-input v-model="formData.itemRequestId" placeholder="请输入物品申请ID(关联 hrm_item_request)" />
|
||||
</el-form-item>
|
||||
<el-form-item label="物品管理ID(关联 hrm_item)" prop="itemId">
|
||||
<el-input v-model="formData.itemId" placeholder="请输入物品管理ID(关联 hrm_item)" />
|
||||
</el-form-item>
|
||||
<el-form-item label="领用数量" prop="requestCount">
|
||||
<el-input v-model="formData.requestCount" placeholder="请输入领用数量" />
|
||||
</el-form-item>
|
||||
<el-form-item label="申请说明" prop="instructions">
|
||||
<el-input v-model="formData.instructions" placeholder="请输入申请说明" />
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
<template #footer>
|
||||
<el-button @click="submitForm" type="primary" :disabled="formLoading">确 定</el-button>
|
||||
<el-button @click="dialogVisible = false">取 消</el-button>
|
||||
</template>
|
||||
</Dialog>
|
||||
</template>
|
||||
<script setup lang="ts">
|
||||
import { ItemRequestDetailApi, ItemRequestDetailVO } from '@/api/hrm/itemrequestdetail'
|
||||
|
||||
/** 物品申请明细 表单 */
|
||||
defineOptions({ name: 'ItemRequestDetailForm' })
|
||||
|
||||
const { t } = useI18n() // 国际化
|
||||
const message = useMessage() // 消息弹窗
|
||||
|
||||
const dialogVisible = ref(false) // 弹窗的是否展示
|
||||
const dialogTitle = ref('') // 弹窗的标题
|
||||
const formLoading = ref(false) // 表单的加载中:1)修改时的数据加载;2)提交的按钮禁用
|
||||
const formType = ref('') // 表单的类型:create - 新增;update - 修改
|
||||
const formData = ref({
|
||||
id: undefined,
|
||||
itemRequestId: undefined,
|
||||
itemId: undefined,
|
||||
requestCount: undefined,
|
||||
instructions: undefined
|
||||
})
|
||||
const formRules = reactive({
|
||||
itemRequestId: [{ required: true, message: '物品申请ID(关联 hrm_item_request)不能为空', trigger: 'blur' }],
|
||||
itemId: [{ required: true, message: '物品管理ID(关联 hrm_item)不能为空', trigger: 'blur' }],
|
||||
requestCount: [{ required: true, message: '领用数量不能为空', trigger: 'blur' }]
|
||||
})
|
||||
const formRef = ref() // 表单 Ref
|
||||
|
||||
/** 打开弹窗 */
|
||||
const open = async (type: string, id?: number) => {
|
||||
dialogVisible.value = true
|
||||
dialogTitle.value = t('action.' + type)
|
||||
formType.value = type
|
||||
resetForm()
|
||||
// 修改时,设置数据
|
||||
if (id) {
|
||||
formLoading.value = true
|
||||
try {
|
||||
formData.value = await ItemRequestDetailApi.getItemRequestDetail(id)
|
||||
} finally {
|
||||
formLoading.value = false
|
||||
}
|
||||
}
|
||||
}
|
||||
defineExpose({ open }) // 提供 open 方法,用于打开弹窗
|
||||
|
||||
/** 提交表单 */
|
||||
const emit = defineEmits(['success']) // 定义 success 事件,用于操作成功后的回调
|
||||
const submitForm = async () => {
|
||||
// 校验表单
|
||||
await formRef.value.validate()
|
||||
// 提交请求
|
||||
formLoading.value = true
|
||||
try {
|
||||
const data = formData.value as unknown as ItemRequestDetailVO
|
||||
if (formType.value === 'create') {
|
||||
await ItemRequestDetailApi.createItemRequestDetail(data)
|
||||
message.success(t('common.createSuccess'))
|
||||
} else {
|
||||
await ItemRequestDetailApi.updateItemRequestDetail(data)
|
||||
message.success(t('common.updateSuccess'))
|
||||
}
|
||||
dialogVisible.value = false
|
||||
// 发送操作成功的事件
|
||||
emit('success')
|
||||
} finally {
|
||||
formLoading.value = false
|
||||
}
|
||||
}
|
||||
|
||||
/** 重置表单 */
|
||||
const resetForm = () => {
|
||||
formData.value = {
|
||||
id: undefined,
|
||||
itemRequestId: undefined,
|
||||
itemId: undefined,
|
||||
requestCount: undefined,
|
||||
instructions: undefined
|
||||
}
|
||||
formRef.value?.resetFields()
|
||||
}
|
||||
</script>
|
||||
|
|
@ -0,0 +1,200 @@
|
|||
<template>
|
||||
<ContentWrap>
|
||||
<!-- 搜索工作栏 -->
|
||||
<el-form
|
||||
class="-mb-15px"
|
||||
:model="queryParams"
|
||||
ref="queryFormRef"
|
||||
:inline="true"
|
||||
label-width="68px"
|
||||
>
|
||||
<el-form-item label="物品申请ID(关联 hrm_item_request)" prop="itemRequestId">
|
||||
<el-input
|
||||
v-model="queryParams.itemRequestId"
|
||||
placeholder="请输入物品申请ID(关联 hrm_item_request)"
|
||||
clearable
|
||||
@keyup.enter="handleQuery"
|
||||
class="!w-240px"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="物品管理ID(关联 hrm_item)" prop="itemId">
|
||||
<el-input
|
||||
v-model="queryParams.itemId"
|
||||
placeholder="请输入物品管理ID(关联 hrm_item)"
|
||||
clearable
|
||||
@keyup.enter="handleQuery"
|
||||
class="!w-240px"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="领用数量" prop="requestCount">
|
||||
<el-input
|
||||
v-model="queryParams.requestCount"
|
||||
placeholder="请输入领用数量"
|
||||
clearable
|
||||
@keyup.enter="handleQuery"
|
||||
class="!w-240px"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="申请说明" prop="instructions">
|
||||
<el-input
|
||||
v-model="queryParams.instructions"
|
||||
placeholder="请输入申请说明"
|
||||
clearable
|
||||
@keyup.enter="handleQuery"
|
||||
class="!w-240px"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item>
|
||||
<el-button @click="handleQuery"><Icon icon="ep:search" class="mr-5px" /> 搜索</el-button>
|
||||
<el-button @click="resetQuery"><Icon icon="ep:refresh" class="mr-5px" /> 重置</el-button>
|
||||
<el-button
|
||||
type="primary"
|
||||
plain
|
||||
@click="openForm('create')"
|
||||
v-hasPermi="['hrm:item-request-detail:create']"
|
||||
>
|
||||
<Icon icon="ep:plus" class="mr-5px" /> 新增
|
||||
</el-button>
|
||||
<el-button
|
||||
type="success"
|
||||
plain
|
||||
@click="handleExport"
|
||||
:loading="exportLoading"
|
||||
v-hasPermi="['hrm:item-request-detail:export']"
|
||||
>
|
||||
<Icon icon="ep:download" class="mr-5px" /> 导出
|
||||
</el-button>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
</ContentWrap>
|
||||
|
||||
<!-- 列表 -->
|
||||
<ContentWrap>
|
||||
<el-table v-loading="loading" :data="list" :stripe="true" :show-overflow-tooltip="true">
|
||||
<el-table-column label="主键" align="center" prop="id" />
|
||||
<el-table-column label="物品申请ID(关联 hrm_item_request)" align="center" prop="itemRequestId" />
|
||||
<el-table-column label="物品管理ID(关联 hrm_item)" align="center" prop="itemId" />
|
||||
<el-table-column label="领用数量" align="center" prop="requestCount" />
|
||||
<el-table-column label="申请说明" align="center" prop="instructions" />
|
||||
<el-table-column label="操作" align="center" min-width="120px">
|
||||
<template #default="scope">
|
||||
<el-button
|
||||
link
|
||||
type="primary"
|
||||
@click="openForm('update', scope.row.id)"
|
||||
v-hasPermi="['hrm:item-request-detail:update']"
|
||||
>
|
||||
编辑
|
||||
</el-button>
|
||||
<el-button
|
||||
link
|
||||
type="danger"
|
||||
@click="handleDelete(scope.row.id)"
|
||||
v-hasPermi="['hrm:item-request-detail:delete']"
|
||||
>
|
||||
删除
|
||||
</el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
<!-- 分页 -->
|
||||
<Pagination
|
||||
:total="total"
|
||||
v-model:page="queryParams.pageNo"
|
||||
v-model:limit="queryParams.pageSize"
|
||||
@pagination="getList"
|
||||
/>
|
||||
</ContentWrap>
|
||||
|
||||
<!-- 表单弹窗:添加/修改 -->
|
||||
<ItemRequestDetailForm ref="formRef" @success="getList" />
|
||||
</template>
|
||||
|
||||
<script setup lang="ts">
|
||||
import download from '@/utils/download'
|
||||
import { ItemRequestDetailApi, ItemRequestDetailVO } from '@/api/hrm/itemrequestdetail'
|
||||
import ItemRequestDetailForm from './ItemRequestDetailForm.vue'
|
||||
|
||||
/** 物品申请明细 列表 */
|
||||
defineOptions({ name: 'ItemRequestDetail' })
|
||||
|
||||
const message = useMessage() // 消息弹窗
|
||||
const { t } = useI18n() // 国际化
|
||||
|
||||
const loading = ref(true) // 列表的加载中
|
||||
const list = ref<ItemRequestDetailVO[]>([]) // 列表的数据
|
||||
const total = ref(0) // 列表的总页数
|
||||
const queryParams = reactive({
|
||||
pageNo: 1,
|
||||
pageSize: 10,
|
||||
itemRequestId: undefined,
|
||||
itemId: undefined,
|
||||
requestCount: undefined,
|
||||
instructions: undefined
|
||||
})
|
||||
const queryFormRef = ref() // 搜索的表单
|
||||
const exportLoading = ref(false) // 导出的加载中
|
||||
|
||||
/** 查询列表 */
|
||||
const getList = async () => {
|
||||
loading.value = true
|
||||
try {
|
||||
const data = await ItemRequestDetailApi.getItemRequestDetailPage(queryParams)
|
||||
list.value = data.list
|
||||
total.value = data.total
|
||||
} finally {
|
||||
loading.value = false
|
||||
}
|
||||
}
|
||||
|
||||
/** 搜索按钮操作 */
|
||||
const handleQuery = () => {
|
||||
queryParams.pageNo = 1
|
||||
getList()
|
||||
}
|
||||
|
||||
/** 重置按钮操作 */
|
||||
const resetQuery = () => {
|
||||
queryFormRef.value.resetFields()
|
||||
handleQuery()
|
||||
}
|
||||
|
||||
/** 添加/修改操作 */
|
||||
const formRef = ref()
|
||||
const openForm = (type: string, id?: number) => {
|
||||
formRef.value.open(type, id)
|
||||
}
|
||||
|
||||
/** 删除按钮操作 */
|
||||
const handleDelete = async (id: number) => {
|
||||
try {
|
||||
// 删除的二次确认
|
||||
await message.delConfirm()
|
||||
// 发起删除
|
||||
await ItemRequestDetailApi.deleteItemRequestDetail(id)
|
||||
message.success(t('common.delSuccess'))
|
||||
// 刷新列表
|
||||
await getList()
|
||||
} catch {}
|
||||
}
|
||||
|
||||
/** 导出按钮操作 */
|
||||
const handleExport = async () => {
|
||||
try {
|
||||
// 导出的二次确认
|
||||
await message.exportConfirm()
|
||||
// 发起导出
|
||||
exportLoading.value = true
|
||||
const data = await ItemRequestDetailApi.exportItemRequestDetail(queryParams)
|
||||
download.excel(data, '物品申请明细.xls')
|
||||
} catch {
|
||||
} finally {
|
||||
exportLoading.value = false
|
||||
}
|
||||
}
|
||||
|
||||
/** 初始化 **/
|
||||
onMounted(() => {
|
||||
getList()
|
||||
})
|
||||
</script>
|
||||
|
|
@ -0,0 +1,210 @@
|
|||
<template>
|
||||
<Dialog :title="dialogTitle" v-model="dialogVisible">
|
||||
<el-form
|
||||
ref="formRef"
|
||||
:model="formData"
|
||||
:rules="formRules"
|
||||
label-width="100px"
|
||||
v-loading="formLoading"
|
||||
>
|
||||
<el-form-item label="员工档案ID" prop="userId">
|
||||
<el-input v-model="formData.userId" placeholder="请输入员工档案ID" />
|
||||
</el-form-item>
|
||||
<el-form-item label="工作流编号" prop="processInstanceId">
|
||||
<el-input v-model="formData.processInstanceId" placeholder="请输入工作流编号" />
|
||||
</el-form-item>
|
||||
<el-form-item label="审批状态" prop="auditStatus">
|
||||
<el-radio-group v-model="formData.auditStatus">
|
||||
<el-radio value="1">请选择字典生成</el-radio>
|
||||
</el-radio-group>
|
||||
</el-form-item>
|
||||
<el-form-item label="调岗类型" prop="applyType">
|
||||
<el-select v-model="formData.applyType" placeholder="请选择调岗类型">
|
||||
<el-option
|
||||
v-for="dict in getIntDictOptions(DICT_TYPE.HRM_APPLY_TYPE)"
|
||||
:key="dict.value"
|
||||
:label="dict.label"
|
||||
:value="dict.value"
|
||||
/>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item label="调岗原因" prop="applyReason">
|
||||
<el-select v-model="formData.applyReason" placeholder="请选择调岗原因">
|
||||
<el-option
|
||||
v-for="dict in getIntDictOptions(DICT_TYPE.HRM_APPLY_REASON)"
|
||||
:key="dict.value"
|
||||
:label="dict.label"
|
||||
:value="dict.value"
|
||||
/>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item label="调动前部门" prop="beforeDeptId">
|
||||
<el-input v-model="formData.beforeDeptId" placeholder="请输入调动前部门" />
|
||||
</el-form-item>
|
||||
<el-form-item label="调动前职级" prop="beforePostLevel">
|
||||
<el-input v-model="formData.beforePostLevel" placeholder="请输入调动前职级" />
|
||||
</el-form-item>
|
||||
<el-form-item label="调动前档级" prop="beforeGradeLevel">
|
||||
<el-input v-model="formData.beforeGradeLevel" placeholder="请输入调动前档级" />
|
||||
</el-form-item>
|
||||
<el-form-item label="调动前薪资" prop="beforeSalary">
|
||||
<el-input v-model="formData.beforeSalary" placeholder="请输入调动前薪资" />
|
||||
</el-form-item>
|
||||
<el-form-item label="调动前岗位" prop="beforePostId">
|
||||
<el-input v-model="formData.beforePostId" placeholder="请输入调动前岗位" />
|
||||
</el-form-item>
|
||||
<el-form-item label="申请说明" prop="applyInfo">
|
||||
<el-input v-model="formData.applyInfo" placeholder="请输入申请说明" />
|
||||
</el-form-item>
|
||||
<el-form-item label="调动后部门" prop="afterDeptId">
|
||||
<el-input v-model="formData.afterDeptId" placeholder="请输入调动后部门" />
|
||||
</el-form-item>
|
||||
<el-form-item label="调动后薪资" prop="afterSalary">
|
||||
<el-input v-model="formData.afterSalary" placeholder="请输入调动后薪资" />
|
||||
</el-form-item>
|
||||
<el-form-item label="调动后职级" prop="afterPostLevel">
|
||||
<el-input v-model="formData.afterPostLevel" placeholder="请输入调动后职级" />
|
||||
</el-form-item>
|
||||
<el-form-item label="调动前档级" prop="afterGradeLevel">
|
||||
<el-input v-model="formData.afterGradeLevel" placeholder="请输入调动前档级" />
|
||||
</el-form-item>
|
||||
<el-form-item label="调动后岗位" prop="afterPostId">
|
||||
<el-input v-model="formData.afterPostId" placeholder="请输入调动后岗位" />
|
||||
</el-form-item>
|
||||
<el-form-item label="调动后岗位名称" prop="afterPostName">
|
||||
<el-input v-model="formData.afterPostName" placeholder="请输入调动后岗位名称" />
|
||||
</el-form-item>
|
||||
<el-form-item label="生效日期" prop="effectiverDate">
|
||||
<el-date-picker
|
||||
v-model="formData.effectiverDate"
|
||||
type="date"
|
||||
value-format="x"
|
||||
placeholder="选择生效日期"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="附件" prop="attachment">
|
||||
<el-input v-model="formData.attachment" placeholder="请输入附件" />
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
<template #footer>
|
||||
<el-button @click="submitForm" type="primary" :disabled="formLoading">确 定</el-button>
|
||||
<el-button @click="dialogVisible = false">取 消</el-button>
|
||||
</template>
|
||||
</Dialog>
|
||||
</template>
|
||||
<script setup lang="ts">
|
||||
import { getIntDictOptions, DICT_TYPE } from '@/utils/dict'
|
||||
import { JobTransferApplyApi, JobTransferApplyVO } from '@/api/hrm/jobtransferapply'
|
||||
|
||||
/** 调岗申请 表单 */
|
||||
defineOptions({ name: 'JobTransferApplyForm' })
|
||||
|
||||
const { t } = useI18n() // 国际化
|
||||
const message = useMessage() // 消息弹窗
|
||||
|
||||
const dialogVisible = ref(false) // 弹窗的是否展示
|
||||
const dialogTitle = ref('') // 弹窗的标题
|
||||
const formLoading = ref(false) // 表单的加载中:1)修改时的数据加载;2)提交的按钮禁用
|
||||
const formType = ref('') // 表单的类型:create - 新增;update - 修改
|
||||
const formData = ref({
|
||||
id: undefined,
|
||||
userId: undefined,
|
||||
processInstanceId: undefined,
|
||||
auditStatus: undefined,
|
||||
applyType: undefined,
|
||||
applyReason: undefined,
|
||||
beforeDeptId: undefined,
|
||||
beforePostLevel: undefined,
|
||||
beforeGradeLevel: undefined,
|
||||
beforeSalary: undefined,
|
||||
beforePostId: undefined,
|
||||
applyInfo: undefined,
|
||||
afterDeptId: undefined,
|
||||
afterSalary: undefined,
|
||||
afterPostLevel: undefined,
|
||||
afterGradeLevel: undefined,
|
||||
afterPostId: undefined,
|
||||
afterPostName: undefined,
|
||||
effectiverDate: undefined,
|
||||
attachment: undefined
|
||||
})
|
||||
const formRules = reactive({
|
||||
userId: [{ required: true, message: '员工档案ID不能为空', trigger: 'blur' }],
|
||||
auditStatus: [{ required: true, message: '审批状态不能为空', trigger: 'blur' }],
|
||||
applyType: [{ required: true, message: '调岗类型不能为空', trigger: 'change' }],
|
||||
applyReason: [{ required: true, message: '调岗原因不能为空', trigger: 'change' }],
|
||||
beforeDeptId: [{ required: true, message: '调动前部门不能为空', trigger: 'blur' }],
|
||||
effectiverDate: [{ required: true, message: '生效日期不能为空', trigger: 'blur' }],
|
||||
attachment: [{ required: true, message: '附件不能为空', trigger: 'blur' }]
|
||||
})
|
||||
const formRef = ref() // 表单 Ref
|
||||
|
||||
/** 打开弹窗 */
|
||||
const open = async (type: string, id?: number) => {
|
||||
dialogVisible.value = true
|
||||
dialogTitle.value = t('action.' + type)
|
||||
formType.value = type
|
||||
resetForm()
|
||||
// 修改时,设置数据
|
||||
if (id) {
|
||||
formLoading.value = true
|
||||
try {
|
||||
formData.value = await JobTransferApplyApi.getJobTransferApply(id)
|
||||
} finally {
|
||||
formLoading.value = false
|
||||
}
|
||||
}
|
||||
}
|
||||
defineExpose({ open }) // 提供 open 方法,用于打开弹窗
|
||||
|
||||
/** 提交表单 */
|
||||
const emit = defineEmits(['success']) // 定义 success 事件,用于操作成功后的回调
|
||||
const submitForm = async () => {
|
||||
// 校验表单
|
||||
await formRef.value.validate()
|
||||
// 提交请求
|
||||
formLoading.value = true
|
||||
try {
|
||||
const data = formData.value as unknown as JobTransferApplyVO
|
||||
if (formType.value === 'create') {
|
||||
await JobTransferApplyApi.createJobTransferApply(data)
|
||||
message.success(t('common.createSuccess'))
|
||||
} else {
|
||||
await JobTransferApplyApi.updateJobTransferApply(data)
|
||||
message.success(t('common.updateSuccess'))
|
||||
}
|
||||
dialogVisible.value = false
|
||||
// 发送操作成功的事件
|
||||
emit('success')
|
||||
} finally {
|
||||
formLoading.value = false
|
||||
}
|
||||
}
|
||||
|
||||
/** 重置表单 */
|
||||
const resetForm = () => {
|
||||
formData.value = {
|
||||
id: undefined,
|
||||
userId: undefined,
|
||||
processInstanceId: undefined,
|
||||
auditStatus: undefined,
|
||||
applyType: undefined,
|
||||
applyReason: undefined,
|
||||
beforeDeptId: undefined,
|
||||
beforePostLevel: undefined,
|
||||
beforeGradeLevel: undefined,
|
||||
beforeSalary: undefined,
|
||||
beforePostId: undefined,
|
||||
applyInfo: undefined,
|
||||
afterDeptId: undefined,
|
||||
afterSalary: undefined,
|
||||
afterPostLevel: undefined,
|
||||
afterGradeLevel: undefined,
|
||||
afterPostId: undefined,
|
||||
afterPostName: undefined,
|
||||
effectiverDate: undefined,
|
||||
attachment: undefined
|
||||
}
|
||||
formRef.value?.resetFields()
|
||||
}
|
||||
</script>
|
||||
|
|
@ -0,0 +1,409 @@
|
|||
<template>
|
||||
<ContentWrap>
|
||||
<!-- 搜索工作栏 -->
|
||||
<el-form
|
||||
class="-mb-15px"
|
||||
:model="queryParams"
|
||||
ref="queryFormRef"
|
||||
:inline="true"
|
||||
label-width="68px"
|
||||
>
|
||||
<el-form-item label="员工档案ID" prop="userId">
|
||||
<el-input
|
||||
v-model="queryParams.userId"
|
||||
placeholder="请输入员工档案ID"
|
||||
clearable
|
||||
@keyup.enter="handleQuery"
|
||||
class="!w-240px"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="工作流编号" prop="processInstanceId">
|
||||
<el-input
|
||||
v-model="queryParams.processInstanceId"
|
||||
placeholder="请输入工作流编号"
|
||||
clearable
|
||||
@keyup.enter="handleQuery"
|
||||
class="!w-240px"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="审批状态" prop="auditStatus">
|
||||
<el-select
|
||||
v-model="queryParams.auditStatus"
|
||||
placeholder="请选择审批状态"
|
||||
clearable
|
||||
class="!w-240px"
|
||||
>
|
||||
<el-option label="请选择字典生成" value="" />
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item label="调岗类型" prop="applyType">
|
||||
<el-select
|
||||
v-model="queryParams.applyType"
|
||||
placeholder="请选择调岗类型"
|
||||
clearable
|
||||
class="!w-240px"
|
||||
>
|
||||
<el-option
|
||||
v-for="dict in getIntDictOptions(DICT_TYPE.HRM_APPLY_TYPE)"
|
||||
:key="dict.value"
|
||||
:label="dict.label"
|
||||
:value="dict.value"
|
||||
/>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item label="调岗原因" prop="applyReason">
|
||||
<el-select
|
||||
v-model="queryParams.applyReason"
|
||||
placeholder="请选择调岗原因"
|
||||
clearable
|
||||
class="!w-240px"
|
||||
>
|
||||
<el-option
|
||||
v-for="dict in getIntDictOptions(DICT_TYPE.HRM_APPLY_REASON)"
|
||||
:key="dict.value"
|
||||
:label="dict.label"
|
||||
:value="dict.value"
|
||||
/>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item label="调动前部门" prop="beforeDeptId">
|
||||
<el-input
|
||||
v-model="queryParams.beforeDeptId"
|
||||
placeholder="请输入调动前部门"
|
||||
clearable
|
||||
@keyup.enter="handleQuery"
|
||||
class="!w-240px"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="调动前职级" prop="beforePostLevel">
|
||||
<el-input
|
||||
v-model="queryParams.beforePostLevel"
|
||||
placeholder="请输入调动前职级"
|
||||
clearable
|
||||
@keyup.enter="handleQuery"
|
||||
class="!w-240px"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="调动前档级" prop="beforeGradeLevel">
|
||||
<el-input
|
||||
v-model="queryParams.beforeGradeLevel"
|
||||
placeholder="请输入调动前档级"
|
||||
clearable
|
||||
@keyup.enter="handleQuery"
|
||||
class="!w-240px"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="调动前薪资" prop="beforeSalary">
|
||||
<el-input
|
||||
v-model="queryParams.beforeSalary"
|
||||
placeholder="请输入调动前薪资"
|
||||
clearable
|
||||
@keyup.enter="handleQuery"
|
||||
class="!w-240px"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="调动前岗位" prop="beforePostId">
|
||||
<el-input
|
||||
v-model="queryParams.beforePostId"
|
||||
placeholder="请输入调动前岗位"
|
||||
clearable
|
||||
@keyup.enter="handleQuery"
|
||||
class="!w-240px"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="申请说明" prop="applyInfo">
|
||||
<el-input
|
||||
v-model="queryParams.applyInfo"
|
||||
placeholder="请输入申请说明"
|
||||
clearable
|
||||
@keyup.enter="handleQuery"
|
||||
class="!w-240px"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="调动后部门" prop="afterDeptId">
|
||||
<el-input
|
||||
v-model="queryParams.afterDeptId"
|
||||
placeholder="请输入调动后部门"
|
||||
clearable
|
||||
@keyup.enter="handleQuery"
|
||||
class="!w-240px"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="调动后薪资" prop="afterSalary">
|
||||
<el-input
|
||||
v-model="queryParams.afterSalary"
|
||||
placeholder="请输入调动后薪资"
|
||||
clearable
|
||||
@keyup.enter="handleQuery"
|
||||
class="!w-240px"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="调动后职级" prop="afterPostLevel">
|
||||
<el-input
|
||||
v-model="queryParams.afterPostLevel"
|
||||
placeholder="请输入调动后职级"
|
||||
clearable
|
||||
@keyup.enter="handleQuery"
|
||||
class="!w-240px"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="调动前档级" prop="afterGradeLevel">
|
||||
<el-input
|
||||
v-model="queryParams.afterGradeLevel"
|
||||
placeholder="请输入调动前档级"
|
||||
clearable
|
||||
@keyup.enter="handleQuery"
|
||||
class="!w-240px"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="调动后岗位" prop="afterPostId">
|
||||
<el-input
|
||||
v-model="queryParams.afterPostId"
|
||||
placeholder="请输入调动后岗位"
|
||||
clearable
|
||||
@keyup.enter="handleQuery"
|
||||
class="!w-240px"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="调动后岗位名称" prop="afterPostName">
|
||||
<el-input
|
||||
v-model="queryParams.afterPostName"
|
||||
placeholder="请输入调动后岗位名称"
|
||||
clearable
|
||||
@keyup.enter="handleQuery"
|
||||
class="!w-240px"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="生效日期" prop="effectiverDate">
|
||||
<el-date-picker
|
||||
v-model="queryParams.effectiverDate"
|
||||
value-format="YYYY-MM-DD HH:mm:ss"
|
||||
type="daterange"
|
||||
start-placeholder="开始日期"
|
||||
end-placeholder="结束日期"
|
||||
:default-time="[new Date('1 00:00:00'), new Date('1 23:59:59')]"
|
||||
class="!w-220px"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="附件" prop="attachment">
|
||||
<el-input
|
||||
v-model="queryParams.attachment"
|
||||
placeholder="请输入附件"
|
||||
clearable
|
||||
@keyup.enter="handleQuery"
|
||||
class="!w-240px"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="创建时间" prop="createTime">
|
||||
<el-date-picker
|
||||
v-model="queryParams.createTime"
|
||||
value-format="YYYY-MM-DD HH:mm:ss"
|
||||
type="daterange"
|
||||
start-placeholder="开始日期"
|
||||
end-placeholder="结束日期"
|
||||
:default-time="[new Date('1 00:00:00'), new Date('1 23:59:59')]"
|
||||
class="!w-220px"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item>
|
||||
<el-button @click="handleQuery"><Icon icon="ep:search" class="mr-5px" /> 搜索</el-button>
|
||||
<el-button @click="resetQuery"><Icon icon="ep:refresh" class="mr-5px" /> 重置</el-button>
|
||||
<el-button
|
||||
type="primary"
|
||||
plain
|
||||
@click="openForm('create')"
|
||||
v-hasPermi="['hrm:job-transfer-apply:create']"
|
||||
>
|
||||
<Icon icon="ep:plus" class="mr-5px" /> 新增
|
||||
</el-button>
|
||||
<el-button
|
||||
type="success"
|
||||
plain
|
||||
@click="handleExport"
|
||||
:loading="exportLoading"
|
||||
v-hasPermi="['hrm:job-transfer-apply:export']"
|
||||
>
|
||||
<Icon icon="ep:download" class="mr-5px" /> 导出
|
||||
</el-button>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
</ContentWrap>
|
||||
|
||||
<!-- 列表 -->
|
||||
<ContentWrap>
|
||||
<el-table v-loading="loading" :data="list" :stripe="true" :show-overflow-tooltip="true">
|
||||
<el-table-column label="主键,自动递增" align="center" prop="id" />
|
||||
<el-table-column label="员工档案ID" align="center" prop="userId" />
|
||||
<el-table-column label="工作流编号" align="center" prop="processInstanceId" />
|
||||
<el-table-column label="审批状态" align="center" prop="auditStatus" />
|
||||
<el-table-column label="调岗类型" align="center" prop="applyType">
|
||||
<template #default="scope">
|
||||
<dict-tag :type="DICT_TYPE.HRM_APPLY_TYPE" :value="scope.row.applyType" />
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="调岗原因" align="center" prop="applyReason">
|
||||
<template #default="scope">
|
||||
<dict-tag :type="DICT_TYPE.HRM_APPLY_REASON" :value="scope.row.applyReason" />
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="调动前部门" align="center" prop="beforeDeptId" />
|
||||
<el-table-column label="调动前职级" align="center" prop="beforePostLevel" />
|
||||
<el-table-column label="调动前档级" align="center" prop="beforeGradeLevel" />
|
||||
<el-table-column label="调动前薪资" align="center" prop="beforeSalary" />
|
||||
<el-table-column label="调动前岗位" align="center" prop="beforePostId" />
|
||||
<el-table-column label="申请说明" align="center" prop="applyInfo" />
|
||||
<el-table-column label="调动后部门" align="center" prop="afterDeptId" />
|
||||
<el-table-column label="调动后薪资" align="center" prop="afterSalary" />
|
||||
<el-table-column label="调动后职级" align="center" prop="afterPostLevel" />
|
||||
<el-table-column label="调动前档级" align="center" prop="afterGradeLevel" />
|
||||
<el-table-column label="调动后岗位" align="center" prop="afterPostId" />
|
||||
<el-table-column label="调动后岗位名称" align="center" prop="afterPostName" />
|
||||
<el-table-column label="生效日期" align="center" prop="effectiverDate" />
|
||||
<el-table-column label="附件" align="center" prop="attachment" />
|
||||
<el-table-column
|
||||
label="创建时间"
|
||||
align="center"
|
||||
prop="createTime"
|
||||
:formatter="dateFormatter"
|
||||
width="180px"
|
||||
/>
|
||||
<el-table-column label="操作" align="center" min-width="120px">
|
||||
<template #default="scope">
|
||||
<el-button
|
||||
link
|
||||
type="primary"
|
||||
@click="openForm('update', scope.row.id)"
|
||||
v-hasPermi="['hrm:job-transfer-apply:update']"
|
||||
>
|
||||
编辑
|
||||
</el-button>
|
||||
<el-button
|
||||
link
|
||||
type="danger"
|
||||
@click="handleDelete(scope.row.id)"
|
||||
v-hasPermi="['hrm:job-transfer-apply:delete']"
|
||||
>
|
||||
删除
|
||||
</el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
<!-- 分页 -->
|
||||
<Pagination
|
||||
:total="total"
|
||||
v-model:page="queryParams.pageNo"
|
||||
v-model:limit="queryParams.pageSize"
|
||||
@pagination="getList"
|
||||
/>
|
||||
</ContentWrap>
|
||||
|
||||
<!-- 表单弹窗:添加/修改 -->
|
||||
<JobTransferApplyForm ref="formRef" @success="getList" />
|
||||
</template>
|
||||
|
||||
<script setup lang="ts">
|
||||
import { getIntDictOptions, DICT_TYPE } from '@/utils/dict'
|
||||
import { dateFormatter } from '@/utils/formatTime'
|
||||
import download from '@/utils/download'
|
||||
import { JobTransferApplyApi, JobTransferApplyVO } from '@/api/hrm/jobtransferapply'
|
||||
import JobTransferApplyForm from './JobTransferApplyForm.vue'
|
||||
|
||||
/** 调岗申请 列表 */
|
||||
defineOptions({ name: 'JobTransferApply' })
|
||||
|
||||
const message = useMessage() // 消息弹窗
|
||||
const { t } = useI18n() // 国际化
|
||||
|
||||
const loading = ref(true) // 列表的加载中
|
||||
const list = ref<JobTransferApplyVO[]>([]) // 列表的数据
|
||||
const total = ref(0) // 列表的总页数
|
||||
const queryParams = reactive({
|
||||
pageNo: 1,
|
||||
pageSize: 10,
|
||||
userId: undefined,
|
||||
processInstanceId: undefined,
|
||||
auditStatus: undefined,
|
||||
applyType: undefined,
|
||||
applyReason: undefined,
|
||||
beforeDeptId: undefined,
|
||||
beforePostLevel: undefined,
|
||||
beforeGradeLevel: undefined,
|
||||
beforeSalary: undefined,
|
||||
beforePostId: undefined,
|
||||
applyInfo: undefined,
|
||||
afterDeptId: undefined,
|
||||
afterSalary: undefined,
|
||||
afterPostLevel: undefined,
|
||||
afterGradeLevel: undefined,
|
||||
afterPostId: undefined,
|
||||
afterPostName: undefined,
|
||||
effectiverDate: [],
|
||||
attachment: undefined,
|
||||
createTime: []
|
||||
})
|
||||
const queryFormRef = ref() // 搜索的表单
|
||||
const exportLoading = ref(false) // 导出的加载中
|
||||
|
||||
/** 查询列表 */
|
||||
const getList = async () => {
|
||||
loading.value = true
|
||||
try {
|
||||
const data = await JobTransferApplyApi.getJobTransferApplyPage(queryParams)
|
||||
list.value = data.list
|
||||
total.value = data.total
|
||||
} finally {
|
||||
loading.value = false
|
||||
}
|
||||
}
|
||||
|
||||
/** 搜索按钮操作 */
|
||||
const handleQuery = () => {
|
||||
queryParams.pageNo = 1
|
||||
getList()
|
||||
}
|
||||
|
||||
/** 重置按钮操作 */
|
||||
const resetQuery = () => {
|
||||
queryFormRef.value.resetFields()
|
||||
handleQuery()
|
||||
}
|
||||
|
||||
/** 添加/修改操作 */
|
||||
const formRef = ref()
|
||||
const openForm = (type: string, id?: number) => {
|
||||
formRef.value.open(type, id)
|
||||
}
|
||||
|
||||
/** 删除按钮操作 */
|
||||
const handleDelete = async (id: number) => {
|
||||
try {
|
||||
// 删除的二次确认
|
||||
await message.delConfirm()
|
||||
// 发起删除
|
||||
await JobTransferApplyApi.deleteJobTransferApply(id)
|
||||
message.success(t('common.delSuccess'))
|
||||
// 刷新列表
|
||||
await getList()
|
||||
} catch {}
|
||||
}
|
||||
|
||||
/** 导出按钮操作 */
|
||||
const handleExport = async () => {
|
||||
try {
|
||||
// 导出的二次确认
|
||||
await message.exportConfirm()
|
||||
// 发起导出
|
||||
exportLoading.value = true
|
||||
const data = await JobTransferApplyApi.exportJobTransferApply(queryParams)
|
||||
download.excel(data, '调岗申请.xls')
|
||||
} catch {
|
||||
} finally {
|
||||
exportLoading.value = false
|
||||
}
|
||||
}
|
||||
|
||||
/** 初始化 **/
|
||||
onMounted(() => {
|
||||
getList()
|
||||
})
|
||||
</script>
|
||||
|
|
@ -0,0 +1,136 @@
|
|||
<template>
|
||||
<Dialog :title="dialogTitle" v-model="dialogVisible">
|
||||
<el-form
|
||||
ref="formRef"
|
||||
:model="formData"
|
||||
:rules="formRules"
|
||||
label-width="100px"
|
||||
v-loading="formLoading"
|
||||
>
|
||||
<el-form-item label="员工档案ID" prop="userId">
|
||||
<el-input v-model="formData.userId" placeholder="请输入员工档案ID" />
|
||||
</el-form-item>
|
||||
<el-form-item label="工作流编号" prop="processInstanceId">
|
||||
<el-input v-model="formData.processInstanceId" placeholder="请输入工作流编号" />
|
||||
</el-form-item>
|
||||
<el-form-item label="审批状态" prop="auditStatus">
|
||||
<el-radio-group v-model="formData.auditStatus">
|
||||
<el-radio value="1">请选择字典生成</el-radio>
|
||||
</el-radio-group>
|
||||
</el-form-item>
|
||||
<el-form-item label="师徒类型. 0拜师 1收徒" prop="mentorsType">
|
||||
<el-select v-model="formData.mentorsType" placeholder="请选择师徒类型. 0拜师 1收徒">
|
||||
<el-option
|
||||
v-for="dict in getIntDictOptions(DICT_TYPE.HRM_MENTORS_TYPE)"
|
||||
:key="dict.value"
|
||||
:label="dict.label"
|
||||
:value="dict.value"
|
||||
/>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item label="接受员工Id" prop="acceptUserId">
|
||||
<el-input v-model="formData.acceptUserId" placeholder="请输入接受员工Id" />
|
||||
</el-form-item>
|
||||
<el-form-item label="生效日期" prop="effectiverDate">
|
||||
<el-date-picker
|
||||
v-model="formData.effectiverDate"
|
||||
type="date"
|
||||
value-format="x"
|
||||
placeholder="选择生效日期"
|
||||
/>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
<template #footer>
|
||||
<el-button @click="submitForm" type="primary" :disabled="formLoading">确 定</el-button>
|
||||
<el-button @click="dialogVisible = false">取 消</el-button>
|
||||
</template>
|
||||
</Dialog>
|
||||
</template>
|
||||
<script setup lang="ts">
|
||||
import { getIntDictOptions, DICT_TYPE } from '@/utils/dict'
|
||||
import { MentorsApplyApi, MentorsApplyVO } from '@/api/hrm/mentorsapply'
|
||||
|
||||
/** 师徒申请 表单 */
|
||||
defineOptions({ name: 'MentorsApplyForm' })
|
||||
|
||||
const { t } = useI18n() // 国际化
|
||||
const message = useMessage() // 消息弹窗
|
||||
|
||||
const dialogVisible = ref(false) // 弹窗的是否展示
|
||||
const dialogTitle = ref('') // 弹窗的标题
|
||||
const formLoading = ref(false) // 表单的加载中:1)修改时的数据加载;2)提交的按钮禁用
|
||||
const formType = ref('') // 表单的类型:create - 新增;update - 修改
|
||||
const formData = ref({
|
||||
id: undefined,
|
||||
userId: undefined,
|
||||
processInstanceId: undefined,
|
||||
auditStatus: undefined,
|
||||
mentorsType: undefined,
|
||||
acceptUserId: undefined,
|
||||
effectiverDate: undefined
|
||||
})
|
||||
const formRules = reactive({
|
||||
userId: [{ required: true, message: '员工档案ID不能为空', trigger: 'blur' }],
|
||||
auditStatus: [{ required: true, message: '审批状态不能为空', trigger: 'blur' }],
|
||||
mentorsType: [{ required: true, message: '师徒类型. 0拜师 1收徒不能为空', trigger: 'change' }],
|
||||
acceptUserId: [{ required: true, message: '接受员工Id不能为空', trigger: 'blur' }],
|
||||
effectiverDate: [{ required: true, message: '生效日期不能为空', trigger: 'blur' }]
|
||||
})
|
||||
const formRef = ref() // 表单 Ref
|
||||
|
||||
/** 打开弹窗 */
|
||||
const open = async (type: string, id?: number) => {
|
||||
dialogVisible.value = true
|
||||
dialogTitle.value = t('action.' + type)
|
||||
formType.value = type
|
||||
resetForm()
|
||||
// 修改时,设置数据
|
||||
if (id) {
|
||||
formLoading.value = true
|
||||
try {
|
||||
formData.value = await MentorsApplyApi.getMentorsApply(id)
|
||||
} finally {
|
||||
formLoading.value = false
|
||||
}
|
||||
}
|
||||
}
|
||||
defineExpose({ open }) // 提供 open 方法,用于打开弹窗
|
||||
|
||||
/** 提交表单 */
|
||||
const emit = defineEmits(['success']) // 定义 success 事件,用于操作成功后的回调
|
||||
const submitForm = async () => {
|
||||
// 校验表单
|
||||
await formRef.value.validate()
|
||||
// 提交请求
|
||||
formLoading.value = true
|
||||
try {
|
||||
const data = formData.value as unknown as MentorsApplyVO
|
||||
if (formType.value === 'create') {
|
||||
await MentorsApplyApi.createMentorsApply(data)
|
||||
message.success(t('common.createSuccess'))
|
||||
} else {
|
||||
await MentorsApplyApi.updateMentorsApply(data)
|
||||
message.success(t('common.updateSuccess'))
|
||||
}
|
||||
dialogVisible.value = false
|
||||
// 发送操作成功的事件
|
||||
emit('success')
|
||||
} finally {
|
||||
formLoading.value = false
|
||||
}
|
||||
}
|
||||
|
||||
/** 重置表单 */
|
||||
const resetForm = () => {
|
||||
formData.value = {
|
||||
id: undefined,
|
||||
userId: undefined,
|
||||
processInstanceId: undefined,
|
||||
auditStatus: undefined,
|
||||
mentorsType: undefined,
|
||||
acceptUserId: undefined,
|
||||
effectiverDate: undefined
|
||||
}
|
||||
formRef.value?.resetFields()
|
||||
}
|
||||
</script>
|
||||
|
|
@ -0,0 +1,256 @@
|
|||
<template>
|
||||
<ContentWrap>
|
||||
<!-- 搜索工作栏 -->
|
||||
<el-form
|
||||
class="-mb-15px"
|
||||
:model="queryParams"
|
||||
ref="queryFormRef"
|
||||
:inline="true"
|
||||
label-width="68px"
|
||||
>
|
||||
<el-form-item label="员工档案ID" prop="userId">
|
||||
<el-input
|
||||
v-model="queryParams.userId"
|
||||
placeholder="请输入员工档案ID"
|
||||
clearable
|
||||
@keyup.enter="handleQuery"
|
||||
class="!w-240px"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="工作流编号" prop="processInstanceId">
|
||||
<el-input
|
||||
v-model="queryParams.processInstanceId"
|
||||
placeholder="请输入工作流编号"
|
||||
clearable
|
||||
@keyup.enter="handleQuery"
|
||||
class="!w-240px"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="审批状态" prop="auditStatus">
|
||||
<el-select
|
||||
v-model="queryParams.auditStatus"
|
||||
placeholder="请选择审批状态"
|
||||
clearable
|
||||
class="!w-240px"
|
||||
>
|
||||
<el-option label="请选择字典生成" value="" />
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item label="师徒类型. 0拜师 1收徒" prop="mentorsType">
|
||||
<el-select
|
||||
v-model="queryParams.mentorsType"
|
||||
placeholder="请选择师徒类型. 0拜师 1收徒"
|
||||
clearable
|
||||
class="!w-240px"
|
||||
>
|
||||
<el-option
|
||||
v-for="dict in getIntDictOptions(DICT_TYPE.HRM_MENTORS_TYPE)"
|
||||
:key="dict.value"
|
||||
:label="dict.label"
|
||||
:value="dict.value"
|
||||
/>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item label="接受员工Id" prop="acceptUserId">
|
||||
<el-input
|
||||
v-model="queryParams.acceptUserId"
|
||||
placeholder="请输入接受员工Id"
|
||||
clearable
|
||||
@keyup.enter="handleQuery"
|
||||
class="!w-240px"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="生效日期" prop="effectiverDate">
|
||||
<el-date-picker
|
||||
v-model="queryParams.effectiverDate"
|
||||
value-format="YYYY-MM-DD HH:mm:ss"
|
||||
type="daterange"
|
||||
start-placeholder="开始日期"
|
||||
end-placeholder="结束日期"
|
||||
:default-time="[new Date('1 00:00:00'), new Date('1 23:59:59')]"
|
||||
class="!w-220px"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="创建时间" prop="createTime">
|
||||
<el-date-picker
|
||||
v-model="queryParams.createTime"
|
||||
value-format="YYYY-MM-DD HH:mm:ss"
|
||||
type="daterange"
|
||||
start-placeholder="开始日期"
|
||||
end-placeholder="结束日期"
|
||||
:default-time="[new Date('1 00:00:00'), new Date('1 23:59:59')]"
|
||||
class="!w-220px"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item>
|
||||
<el-button @click="handleQuery"><Icon icon="ep:search" class="mr-5px" /> 搜索</el-button>
|
||||
<el-button @click="resetQuery"><Icon icon="ep:refresh" class="mr-5px" /> 重置</el-button>
|
||||
<el-button
|
||||
type="primary"
|
||||
plain
|
||||
@click="openForm('create')"
|
||||
v-hasPermi="['hrm:mentors-apply:create']"
|
||||
>
|
||||
<Icon icon="ep:plus" class="mr-5px" /> 新增
|
||||
</el-button>
|
||||
<el-button
|
||||
type="success"
|
||||
plain
|
||||
@click="handleExport"
|
||||
:loading="exportLoading"
|
||||
v-hasPermi="['hrm:mentors-apply:export']"
|
||||
>
|
||||
<Icon icon="ep:download" class="mr-5px" /> 导出
|
||||
</el-button>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
</ContentWrap>
|
||||
|
||||
<!-- 列表 -->
|
||||
<ContentWrap>
|
||||
<el-table v-loading="loading" :data="list" :stripe="true" :show-overflow-tooltip="true">
|
||||
<el-table-column label="主键,自动递增" align="center" prop="id" />
|
||||
<el-table-column label="员工档案ID" align="center" prop="userId" />
|
||||
<el-table-column label="工作流编号" align="center" prop="processInstanceId" />
|
||||
<el-table-column label="审批状态" align="center" prop="auditStatus" />
|
||||
<el-table-column label="师徒类型. 0拜师 1收徒" align="center" prop="mentorsType">
|
||||
<template #default="scope">
|
||||
<dict-tag :type="DICT_TYPE.HRM_MENTORS_TYPE" :value="scope.row.mentorsType" />
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="接受员工Id" align="center" prop="acceptUserId" />
|
||||
<el-table-column label="生效日期" align="center" prop="effectiverDate" />
|
||||
<el-table-column
|
||||
label="创建时间"
|
||||
align="center"
|
||||
prop="createTime"
|
||||
:formatter="dateFormatter"
|
||||
width="180px"
|
||||
/>
|
||||
<el-table-column label="操作" align="center" min-width="120px">
|
||||
<template #default="scope">
|
||||
<el-button
|
||||
link
|
||||
type="primary"
|
||||
@click="openForm('update', scope.row.id)"
|
||||
v-hasPermi="['hrm:mentors-apply:update']"
|
||||
>
|
||||
编辑
|
||||
</el-button>
|
||||
<el-button
|
||||
link
|
||||
type="danger"
|
||||
@click="handleDelete(scope.row.id)"
|
||||
v-hasPermi="['hrm:mentors-apply:delete']"
|
||||
>
|
||||
删除
|
||||
</el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
<!-- 分页 -->
|
||||
<Pagination
|
||||
:total="total"
|
||||
v-model:page="queryParams.pageNo"
|
||||
v-model:limit="queryParams.pageSize"
|
||||
@pagination="getList"
|
||||
/>
|
||||
</ContentWrap>
|
||||
|
||||
<!-- 表单弹窗:添加/修改 -->
|
||||
<MentorsApplyForm ref="formRef" @success="getList" />
|
||||
</template>
|
||||
|
||||
<script setup lang="ts">
|
||||
import { getIntDictOptions, DICT_TYPE } from '@/utils/dict'
|
||||
import { dateFormatter } from '@/utils/formatTime'
|
||||
import download from '@/utils/download'
|
||||
import { MentorsApplyApi, MentorsApplyVO } from '@/api/hrm/mentorsapply'
|
||||
import MentorsApplyForm from './MentorsApplyForm.vue'
|
||||
|
||||
/** 师徒申请 列表 */
|
||||
defineOptions({ name: 'MentorsApply' })
|
||||
|
||||
const message = useMessage() // 消息弹窗
|
||||
const { t } = useI18n() // 国际化
|
||||
|
||||
const loading = ref(true) // 列表的加载中
|
||||
const list = ref<MentorsApplyVO[]>([]) // 列表的数据
|
||||
const total = ref(0) // 列表的总页数
|
||||
const queryParams = reactive({
|
||||
pageNo: 1,
|
||||
pageSize: 10,
|
||||
userId: undefined,
|
||||
processInstanceId: undefined,
|
||||
auditStatus: undefined,
|
||||
mentorsType: undefined,
|
||||
acceptUserId: undefined,
|
||||
effectiverDate: [],
|
||||
createTime: []
|
||||
})
|
||||
const queryFormRef = ref() // 搜索的表单
|
||||
const exportLoading = ref(false) // 导出的加载中
|
||||
|
||||
/** 查询列表 */
|
||||
const getList = async () => {
|
||||
loading.value = true
|
||||
try {
|
||||
const data = await MentorsApplyApi.getMentorsApplyPage(queryParams)
|
||||
list.value = data.list
|
||||
total.value = data.total
|
||||
} finally {
|
||||
loading.value = false
|
||||
}
|
||||
}
|
||||
|
||||
/** 搜索按钮操作 */
|
||||
const handleQuery = () => {
|
||||
queryParams.pageNo = 1
|
||||
getList()
|
||||
}
|
||||
|
||||
/** 重置按钮操作 */
|
||||
const resetQuery = () => {
|
||||
queryFormRef.value.resetFields()
|
||||
handleQuery()
|
||||
}
|
||||
|
||||
/** 添加/修改操作 */
|
||||
const formRef = ref()
|
||||
const openForm = (type: string, id?: number) => {
|
||||
formRef.value.open(type, id)
|
||||
}
|
||||
|
||||
/** 删除按钮操作 */
|
||||
const handleDelete = async (id: number) => {
|
||||
try {
|
||||
// 删除的二次确认
|
||||
await message.delConfirm()
|
||||
// 发起删除
|
||||
await MentorsApplyApi.deleteMentorsApply(id)
|
||||
message.success(t('common.delSuccess'))
|
||||
// 刷新列表
|
||||
await getList()
|
||||
} catch {}
|
||||
}
|
||||
|
||||
/** 导出按钮操作 */
|
||||
const handleExport = async () => {
|
||||
try {
|
||||
// 导出的二次确认
|
||||
await message.exportConfirm()
|
||||
// 发起导出
|
||||
exportLoading.value = true
|
||||
const data = await MentorsApplyApi.exportMentorsApply(queryParams)
|
||||
download.excel(data, '师徒申请.xls')
|
||||
} catch {
|
||||
} finally {
|
||||
exportLoading.value = false
|
||||
}
|
||||
}
|
||||
|
||||
/** 初始化 **/
|
||||
onMounted(() => {
|
||||
getList()
|
||||
})
|
||||
</script>
|
||||
|
|
@ -0,0 +1,201 @@
|
|||
<template>
|
||||
<Dialog :title="dialogTitle" v-model="dialogVisible">
|
||||
<el-form
|
||||
ref="formRef"
|
||||
:model="formData"
|
||||
:rules="formRules"
|
||||
label-width="100px"
|
||||
v-loading="formLoading"
|
||||
>
|
||||
<el-form-item label="需求类型:新增需求、替换需求、储备需求" prop="requestType">
|
||||
<el-select v-model="formData.requestType" placeholder="请选择需求类型:新增需求、替换需求、储备需求">
|
||||
<el-option
|
||||
v-for="dict in getIntDictOptions(DICT_TYPE.HRM_REQUEST_TYPE)"
|
||||
:key="dict.value"
|
||||
:label="dict.label"
|
||||
:value="dict.value"
|
||||
/>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item label="所属部门" prop="requestDeptId">
|
||||
<el-input v-model="formData.requestDeptId" placeholder="请输入所属部门" />
|
||||
</el-form-item>
|
||||
<el-form-item label="工作流编号" prop="processInstanceId">
|
||||
<el-input v-model="formData.processInstanceId" placeholder="请输入工作流编号" />
|
||||
</el-form-item>
|
||||
<el-form-item label="审批状态" prop="auditStatus">
|
||||
<el-select v-model="formData.auditStatus" placeholder="请选择审批状态">
|
||||
<el-option
|
||||
v-for="dict in getIntDictOptions(DICT_TYPE.CRM_AUDIT_STATUS)"
|
||||
:key="dict.value"
|
||||
:label="dict.label"
|
||||
:value="dict.value"
|
||||
/>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item label="岗位id" prop="postId">
|
||||
<el-input v-model="formData.postId" placeholder="请输入岗位id" />
|
||||
</el-form-item>
|
||||
<el-form-item label="需求岗位名称" prop="positionName">
|
||||
<el-input v-model="formData.positionName" placeholder="请输入需求岗位名称" />
|
||||
</el-form-item>
|
||||
<el-form-item label="期望到岗日期" prop="expectedOnboard">
|
||||
<el-input v-model="formData.expectedOnboard" placeholder="请输入期望到岗日期" />
|
||||
</el-form-item>
|
||||
<el-form-item label="需求人数" prop="requestedCount">
|
||||
<el-input v-model="formData.requestedCount" placeholder="请输入需求人数" />
|
||||
</el-form-item>
|
||||
<el-form-item label="年龄范围,如:18-25,25-35,30-45" prop="ageRange">
|
||||
<el-input v-model="formData.ageRange" placeholder="请输入年龄范围,如:18-25,25-35,30-45" />
|
||||
</el-form-item>
|
||||
<el-form-item label="薪资(月),如:4k-7k,5k-8k,10k-15k" prop="monthlySalary">
|
||||
<el-input v-model="formData.monthlySalary" type="textarea" placeholder="请输入薪资(月),如:4k-7k,5k-8k,10k-15k" />
|
||||
</el-form-item>
|
||||
<el-form-item label="最低学历:1=高中,2=大专,3=本科,4=硕士,5=博士" prop="minEducation">
|
||||
<el-select v-model="formData.minEducation" placeholder="请选择最低学历:1=高中,2=大专,3=本科,4=硕士,5=博士">
|
||||
<el-option
|
||||
v-for="dict in getIntDictOptions(DICT_TYPE.HRM_EDUCATION)"
|
||||
:key="dict.value"
|
||||
:label="dict.label"
|
||||
:value="dict.value"
|
||||
/>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item label="工作地点" prop="workLocation">
|
||||
<el-select v-model="formData.workLocation" placeholder="请选择工作地点">
|
||||
<el-option
|
||||
v-for="dict in getIntDictOptions(DICT_TYPE.HRM_WORK_LOCATION)"
|
||||
:key="dict.value"
|
||||
:label="dict.label"
|
||||
:value="dict.value"
|
||||
/>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item label="婚姻状况:未婚、已婚、离异、丧偶" prop="maritalStatus">
|
||||
<el-select v-model="formData.maritalStatus" placeholder="请选择婚姻状况:未婚、已婚、离异、丧偶">
|
||||
<el-option
|
||||
v-for="dict in getIntDictOptions(DICT_TYPE.HRM_MARITAL_STATUS)"
|
||||
:key="dict.value"
|
||||
:label="dict.label"
|
||||
:value="dict.value"
|
||||
/>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item label="从业经验" prop="experience">
|
||||
<el-input v-model="formData.experience" placeholder="请输入从业经验" />
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
<template #footer>
|
||||
<el-button @click="submitForm" type="primary" :disabled="formLoading">确 定</el-button>
|
||||
<el-button @click="dialogVisible = false">取 消</el-button>
|
||||
</template>
|
||||
</Dialog>
|
||||
</template>
|
||||
<script setup lang="ts">
|
||||
import { getIntDictOptions, DICT_TYPE } from '@/utils/dict'
|
||||
import { RecruitmentRequestApi, RecruitmentRequestVO } from '@/api/hrm/recruitmentrequest'
|
||||
|
||||
/** 招聘需求申请 表单 */
|
||||
defineOptions({ name: 'RecruitmentRequestForm' })
|
||||
|
||||
const { t } = useI18n() // 国际化
|
||||
const message = useMessage() // 消息弹窗
|
||||
|
||||
const dialogVisible = ref(false) // 弹窗的是否展示
|
||||
const dialogTitle = ref('') // 弹窗的标题
|
||||
const formLoading = ref(false) // 表单的加载中:1)修改时的数据加载;2)提交的按钮禁用
|
||||
const formType = ref('') // 表单的类型:create - 新增;update - 修改
|
||||
const formData = ref({
|
||||
id: undefined,
|
||||
requestType: undefined,
|
||||
requestDeptId: undefined,
|
||||
processInstanceId: undefined,
|
||||
auditStatus: undefined,
|
||||
postId: undefined,
|
||||
positionName: undefined,
|
||||
expectedOnboard: undefined,
|
||||
requestedCount: undefined,
|
||||
ageRange: undefined,
|
||||
monthlySalary: undefined,
|
||||
minEducation: undefined,
|
||||
workLocation: undefined,
|
||||
maritalStatus: undefined,
|
||||
experience: undefined
|
||||
})
|
||||
const formRules = reactive({
|
||||
requestType: [{ required: true, message: '需求类型:新增需求、替换需求、储备需求不能为空', trigger: 'change' }],
|
||||
requestDeptId: [{ required: true, message: '所属部门不能为空', trigger: 'blur' }],
|
||||
auditStatus: [{ required: true, message: '审批状态不能为空', trigger: 'change' }],
|
||||
postId: [{ required: true, message: '岗位id不能为空', trigger: 'blur' }],
|
||||
expectedOnboard: [{ required: true, message: '期望到岗日期不能为空', trigger: 'blur' }],
|
||||
ageRange: [{ required: true, message: '年龄范围,如:18-25,25-35,30-45不能为空', trigger: 'blur' }],
|
||||
monthlySalary: [{ required: true, message: '薪资(月),如:4k-7k,5k-8k,10k-15k不能为空', trigger: 'blur' }],
|
||||
minEducation: [{ required: true, message: '最低学历:1=高中,2=大专,3=本科,4=硕士,5=博士不能为空', trigger: 'change' }],
|
||||
workLocation: [{ required: true, message: '工作地点不能为空', trigger: 'change' }]
|
||||
})
|
||||
const formRef = ref() // 表单 Ref
|
||||
|
||||
/** 打开弹窗 */
|
||||
const open = async (type: string, id?: number) => {
|
||||
dialogVisible.value = true
|
||||
dialogTitle.value = t('action.' + type)
|
||||
formType.value = type
|
||||
resetForm()
|
||||
// 修改时,设置数据
|
||||
if (id) {
|
||||
formLoading.value = true
|
||||
try {
|
||||
formData.value = await RecruitmentRequestApi.getRecruitmentRequest(id)
|
||||
} finally {
|
||||
formLoading.value = false
|
||||
}
|
||||
}
|
||||
}
|
||||
defineExpose({ open }) // 提供 open 方法,用于打开弹窗
|
||||
|
||||
/** 提交表单 */
|
||||
const emit = defineEmits(['success']) // 定义 success 事件,用于操作成功后的回调
|
||||
const submitForm = async () => {
|
||||
// 校验表单
|
||||
await formRef.value.validate()
|
||||
// 提交请求
|
||||
formLoading.value = true
|
||||
try {
|
||||
const data = formData.value as unknown as RecruitmentRequestVO
|
||||
if (formType.value === 'create') {
|
||||
await RecruitmentRequestApi.createRecruitmentRequest(data)
|
||||
message.success(t('common.createSuccess'))
|
||||
} else {
|
||||
await RecruitmentRequestApi.updateRecruitmentRequest(data)
|
||||
message.success(t('common.updateSuccess'))
|
||||
}
|
||||
dialogVisible.value = false
|
||||
// 发送操作成功的事件
|
||||
emit('success')
|
||||
} finally {
|
||||
formLoading.value = false
|
||||
}
|
||||
}
|
||||
|
||||
/** 重置表单 */
|
||||
const resetForm = () => {
|
||||
formData.value = {
|
||||
id: undefined,
|
||||
requestType: undefined,
|
||||
requestDeptId: undefined,
|
||||
processInstanceId: undefined,
|
||||
auditStatus: undefined,
|
||||
postId: undefined,
|
||||
positionName: undefined,
|
||||
expectedOnboard: undefined,
|
||||
requestedCount: undefined,
|
||||
ageRange: undefined,
|
||||
monthlySalary: undefined,
|
||||
minEducation: undefined,
|
||||
workLocation: undefined,
|
||||
maritalStatus: undefined,
|
||||
experience: undefined
|
||||
}
|
||||
formRef.value?.resetFields()
|
||||
}
|
||||
</script>
|
||||
|
|
@ -0,0 +1,372 @@
|
|||
<template>
|
||||
<ContentWrap>
|
||||
<!-- 搜索工作栏 -->
|
||||
<el-form
|
||||
class="-mb-15px"
|
||||
:model="queryParams"
|
||||
ref="queryFormRef"
|
||||
:inline="true"
|
||||
label-width="68px"
|
||||
>
|
||||
<el-form-item label="需求类型:新增需求、替换需求、储备需求" prop="requestType">
|
||||
<el-select
|
||||
v-model="queryParams.requestType"
|
||||
placeholder="请选择需求类型:新增需求、替换需求、储备需求"
|
||||
clearable
|
||||
class="!w-240px"
|
||||
>
|
||||
<el-option
|
||||
v-for="dict in getIntDictOptions(DICT_TYPE.HRM_REQUEST_TYPE)"
|
||||
:key="dict.value"
|
||||
:label="dict.label"
|
||||
:value="dict.value"
|
||||
/>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item label="所属部门" prop="requestDeptId">
|
||||
<el-input
|
||||
v-model="queryParams.requestDeptId"
|
||||
placeholder="请输入所属部门"
|
||||
clearable
|
||||
@keyup.enter="handleQuery"
|
||||
class="!w-240px"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="工作流编号" prop="processInstanceId">
|
||||
<el-input
|
||||
v-model="queryParams.processInstanceId"
|
||||
placeholder="请输入工作流编号"
|
||||
clearable
|
||||
@keyup.enter="handleQuery"
|
||||
class="!w-240px"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="审批状态" prop="auditStatus">
|
||||
<el-select
|
||||
v-model="queryParams.auditStatus"
|
||||
placeholder="请选择审批状态"
|
||||
clearable
|
||||
class="!w-240px"
|
||||
>
|
||||
<el-option
|
||||
v-for="dict in getIntDictOptions(DICT_TYPE.CRM_AUDIT_STATUS)"
|
||||
:key="dict.value"
|
||||
:label="dict.label"
|
||||
:value="dict.value"
|
||||
/>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item label="岗位id" prop="postId">
|
||||
<el-input
|
||||
v-model="queryParams.postId"
|
||||
placeholder="请输入岗位id"
|
||||
clearable
|
||||
@keyup.enter="handleQuery"
|
||||
class="!w-240px"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="需求岗位名称" prop="positionName">
|
||||
<el-input
|
||||
v-model="queryParams.positionName"
|
||||
placeholder="请输入需求岗位名称"
|
||||
clearable
|
||||
@keyup.enter="handleQuery"
|
||||
class="!w-240px"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="期望到岗日期" prop="expectedOnboard">
|
||||
<el-input
|
||||
v-model="queryParams.expectedOnboard"
|
||||
placeholder="请输入期望到岗日期"
|
||||
clearable
|
||||
@keyup.enter="handleQuery"
|
||||
class="!w-240px"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="需求人数" prop="requestedCount">
|
||||
<el-input
|
||||
v-model="queryParams.requestedCount"
|
||||
placeholder="请输入需求人数"
|
||||
clearable
|
||||
@keyup.enter="handleQuery"
|
||||
class="!w-240px"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="年龄范围,如:18-25,25-35,30-45" prop="ageRange">
|
||||
<el-input
|
||||
v-model="queryParams.ageRange"
|
||||
placeholder="请输入年龄范围,如:18-25,25-35,30-45"
|
||||
clearable
|
||||
@keyup.enter="handleQuery"
|
||||
class="!w-240px"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="最低学历:1=高中,2=大专,3=本科,4=硕士,5=博士" prop="minEducation">
|
||||
<el-select
|
||||
v-model="queryParams.minEducation"
|
||||
placeholder="请选择最低学历:1=高中,2=大专,3=本科,4=硕士,5=博士"
|
||||
clearable
|
||||
class="!w-240px"
|
||||
>
|
||||
<el-option
|
||||
v-for="dict in getIntDictOptions(DICT_TYPE.HRM_EDUCATION)"
|
||||
:key="dict.value"
|
||||
:label="dict.label"
|
||||
:value="dict.value"
|
||||
/>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item label="工作地点" prop="workLocation">
|
||||
<el-select
|
||||
v-model="queryParams.workLocation"
|
||||
placeholder="请选择工作地点"
|
||||
clearable
|
||||
class="!w-240px"
|
||||
>
|
||||
<el-option
|
||||
v-for="dict in getIntDictOptions(DICT_TYPE.HRM_WORK_LOCATION)"
|
||||
:key="dict.value"
|
||||
:label="dict.label"
|
||||
:value="dict.value"
|
||||
/>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item label="婚姻状况:未婚、已婚、离异、丧偶" prop="maritalStatus">
|
||||
<el-select
|
||||
v-model="queryParams.maritalStatus"
|
||||
placeholder="请选择婚姻状况:未婚、已婚、离异、丧偶"
|
||||
clearable
|
||||
class="!w-240px"
|
||||
>
|
||||
<el-option
|
||||
v-for="dict in getIntDictOptions(DICT_TYPE.HRM_MARITAL_STATUS)"
|
||||
:key="dict.value"
|
||||
:label="dict.label"
|
||||
:value="dict.value"
|
||||
/>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item label="从业经验" prop="experience">
|
||||
<el-input
|
||||
v-model="queryParams.experience"
|
||||
placeholder="请输入从业经验"
|
||||
clearable
|
||||
@keyup.enter="handleQuery"
|
||||
class="!w-240px"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="创建时间" prop="createTime">
|
||||
<el-date-picker
|
||||
v-model="queryParams.createTime"
|
||||
value-format="YYYY-MM-DD HH:mm:ss"
|
||||
type="daterange"
|
||||
start-placeholder="开始日期"
|
||||
end-placeholder="结束日期"
|
||||
:default-time="[new Date('1 00:00:00'), new Date('1 23:59:59')]"
|
||||
class="!w-220px"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item>
|
||||
<el-button @click="handleQuery"><Icon icon="ep:search" class="mr-5px" /> 搜索</el-button>
|
||||
<el-button @click="resetQuery"><Icon icon="ep:refresh" class="mr-5px" /> 重置</el-button>
|
||||
<el-button
|
||||
type="primary"
|
||||
plain
|
||||
@click="openForm('create')"
|
||||
v-hasPermi="['hrm:recruitment-request:create']"
|
||||
>
|
||||
<Icon icon="ep:plus" class="mr-5px" /> 新增
|
||||
</el-button>
|
||||
<el-button
|
||||
type="success"
|
||||
plain
|
||||
@click="handleExport"
|
||||
:loading="exportLoading"
|
||||
v-hasPermi="['hrm:recruitment-request:export']"
|
||||
>
|
||||
<Icon icon="ep:download" class="mr-5px" /> 导出
|
||||
</el-button>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
</ContentWrap>
|
||||
|
||||
<!-- 列表 -->
|
||||
<ContentWrap>
|
||||
<el-table v-loading="loading" :data="list" :stripe="true" :show-overflow-tooltip="true">
|
||||
<el-table-column label="主键,自动递增" align="center" prop="id" />
|
||||
<el-table-column label="需求类型:新增需求、替换需求、储备需求" align="center" prop="requestType">
|
||||
<template #default="scope">
|
||||
<dict-tag :type="DICT_TYPE.HRM_REQUEST_TYPE" :value="scope.row.requestType" />
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="所属部门" align="center" prop="requestDeptId" />
|
||||
<el-table-column label="工作流编号" align="center" prop="processInstanceId" />
|
||||
<el-table-column label="审批状态" align="center" prop="auditStatus">
|
||||
<template #default="scope">
|
||||
<dict-tag :type="DICT_TYPE.CRM_AUDIT_STATUS" :value="scope.row.auditStatus" />
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="岗位id" align="center" prop="postId" />
|
||||
<el-table-column label="需求岗位名称" align="center" prop="positionName" />
|
||||
<el-table-column label="期望到岗日期" align="center" prop="expectedOnboard" />
|
||||
<el-table-column label="需求人数" align="center" prop="requestedCount" />
|
||||
<el-table-column label="年龄范围,如:18-25,25-35,30-45" align="center" prop="ageRange" />
|
||||
<el-table-column label="薪资(月),如:4k-7k,5k-8k,10k-15k" align="center" prop="monthlySalary" />
|
||||
<el-table-column label="最低学历:1=高中,2=大专,3=本科,4=硕士,5=博士" align="center" prop="minEducation">
|
||||
<template #default="scope">
|
||||
<dict-tag :type="DICT_TYPE.HRM_EDUCATION" :value="scope.row.minEducation" />
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="工作地点" align="center" prop="workLocation">
|
||||
<template #default="scope">
|
||||
<dict-tag :type="DICT_TYPE.HRM_WORK_LOCATION" :value="scope.row.workLocation" />
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="婚姻状况:未婚、已婚、离异、丧偶" align="center" prop="maritalStatus">
|
||||
<template #default="scope">
|
||||
<dict-tag :type="DICT_TYPE.HRM_MARITAL_STATUS" :value="scope.row.maritalStatus" />
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="从业经验" align="center" prop="experience" />
|
||||
<el-table-column
|
||||
label="创建时间"
|
||||
align="center"
|
||||
prop="createTime"
|
||||
:formatter="dateFormatter"
|
||||
width="180px"
|
||||
/>
|
||||
<el-table-column label="操作" align="center" min-width="120px">
|
||||
<template #default="scope">
|
||||
<el-button
|
||||
link
|
||||
type="primary"
|
||||
@click="openForm('update', scope.row.id)"
|
||||
v-hasPermi="['hrm:recruitment-request:update']"
|
||||
>
|
||||
编辑
|
||||
</el-button>
|
||||
<el-button
|
||||
link
|
||||
type="danger"
|
||||
@click="handleDelete(scope.row.id)"
|
||||
v-hasPermi="['hrm:recruitment-request:delete']"
|
||||
>
|
||||
删除
|
||||
</el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
<!-- 分页 -->
|
||||
<Pagination
|
||||
:total="total"
|
||||
v-model:page="queryParams.pageNo"
|
||||
v-model:limit="queryParams.pageSize"
|
||||
@pagination="getList"
|
||||
/>
|
||||
</ContentWrap>
|
||||
|
||||
<!-- 表单弹窗:添加/修改 -->
|
||||
<RecruitmentRequestForm ref="formRef" @success="getList" />
|
||||
</template>
|
||||
|
||||
<script setup lang="ts">
|
||||
import { getIntDictOptions, DICT_TYPE } from '@/utils/dict'
|
||||
import { dateFormatter } from '@/utils/formatTime'
|
||||
import download from '@/utils/download'
|
||||
import { RecruitmentRequestApi, RecruitmentRequestVO } from '@/api/hrm/recruitmentrequest'
|
||||
import RecruitmentRequestForm from './RecruitmentRequestForm.vue'
|
||||
|
||||
/** 招聘需求申请 列表 */
|
||||
defineOptions({ name: 'RecruitmentRequest' })
|
||||
|
||||
const message = useMessage() // 消息弹窗
|
||||
const { t } = useI18n() // 国际化
|
||||
|
||||
const loading = ref(true) // 列表的加载中
|
||||
const list = ref<RecruitmentRequestVO[]>([]) // 列表的数据
|
||||
const total = ref(0) // 列表的总页数
|
||||
const queryParams = reactive({
|
||||
pageNo: 1,
|
||||
pageSize: 10,
|
||||
requestType: undefined,
|
||||
requestDeptId: undefined,
|
||||
processInstanceId: undefined,
|
||||
auditStatus: undefined,
|
||||
postId: undefined,
|
||||
positionName: undefined,
|
||||
expectedOnboard: undefined,
|
||||
requestedCount: undefined,
|
||||
ageRange: undefined,
|
||||
monthlySalary: undefined,
|
||||
minEducation: undefined,
|
||||
workLocation: undefined,
|
||||
maritalStatus: undefined,
|
||||
experience: undefined,
|
||||
createTime: []
|
||||
})
|
||||
const queryFormRef = ref() // 搜索的表单
|
||||
const exportLoading = ref(false) // 导出的加载中
|
||||
|
||||
/** 查询列表 */
|
||||
const getList = async () => {
|
||||
loading.value = true
|
||||
try {
|
||||
const data = await RecruitmentRequestApi.getRecruitmentRequestPage(queryParams)
|
||||
list.value = data.list
|
||||
total.value = data.total
|
||||
} finally {
|
||||
loading.value = false
|
||||
}
|
||||
}
|
||||
|
||||
/** 搜索按钮操作 */
|
||||
const handleQuery = () => {
|
||||
queryParams.pageNo = 1
|
||||
getList()
|
||||
}
|
||||
|
||||
/** 重置按钮操作 */
|
||||
const resetQuery = () => {
|
||||
queryFormRef.value.resetFields()
|
||||
handleQuery()
|
||||
}
|
||||
|
||||
/** 添加/修改操作 */
|
||||
const formRef = ref()
|
||||
const openForm = (type: string, id?: number) => {
|
||||
formRef.value.open(type, id)
|
||||
}
|
||||
|
||||
/** 删除按钮操作 */
|
||||
const handleDelete = async (id: number) => {
|
||||
try {
|
||||
// 删除的二次确认
|
||||
await message.delConfirm()
|
||||
// 发起删除
|
||||
await RecruitmentRequestApi.deleteRecruitmentRequest(id)
|
||||
message.success(t('common.delSuccess'))
|
||||
// 刷新列表
|
||||
await getList()
|
||||
} catch {}
|
||||
}
|
||||
|
||||
/** 导出按钮操作 */
|
||||
const handleExport = async () => {
|
||||
try {
|
||||
// 导出的二次确认
|
||||
await message.exportConfirm()
|
||||
// 发起导出
|
||||
exportLoading.value = true
|
||||
const data = await RecruitmentRequestApi.exportRecruitmentRequest(queryParams)
|
||||
download.excel(data, '招聘需求申请.xls')
|
||||
} catch {
|
||||
} finally {
|
||||
exportLoading.value = false
|
||||
}
|
||||
}
|
||||
|
||||
/** 初始化 **/
|
||||
onMounted(() => {
|
||||
getList()
|
||||
})
|
||||
</script>
|
||||
|
|
@ -0,0 +1,142 @@
|
|||
<template>
|
||||
<Dialog :title="dialogTitle" v-model="dialogVisible">
|
||||
<el-form
|
||||
ref="formRef"
|
||||
:model="formData"
|
||||
:rules="formRules"
|
||||
label-width="100px"
|
||||
v-loading="formLoading"
|
||||
>
|
||||
<el-form-item label="员工档案ID" prop="userId">
|
||||
<el-input v-model="formData.userId" placeholder="请输入员工档案ID" />
|
||||
</el-form-item>
|
||||
<el-form-item label="工作流编号" prop="processInstanceId">
|
||||
<el-input v-model="formData.processInstanceId" placeholder="请输入工作流编号" />
|
||||
</el-form-item>
|
||||
<el-form-item label="审批状态" prop="auditStatus">
|
||||
<el-radio-group v-model="formData.auditStatus">
|
||||
<el-radio value="1">请选择字典生成</el-radio>
|
||||
</el-radio-group>
|
||||
</el-form-item>
|
||||
<el-form-item label="预计离职日期" prop="expectedResignDate">
|
||||
<el-date-picker
|
||||
v-model="formData.expectedResignDate"
|
||||
type="date"
|
||||
value-format="x"
|
||||
placeholder="选择预计离职日期"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="离职原因:个人原因、发展原因、薪酬原因、工作压力大、不接受组织调整、其他" prop="resignationReason">
|
||||
<el-input v-model="formData.resignationReason" placeholder="请输入离职原因:个人原因、发展原因、薪酬原因、工作压力大、不接受组织调整、其他" />
|
||||
</el-form-item>
|
||||
<el-form-item label="离职原因说明" prop="reasonDescription">
|
||||
<Editor v-model="formData.reasonDescription" height="150px" />
|
||||
</el-form-item>
|
||||
<el-form-item label="对工作等环境和公司文化的反馈" prop="feedbackOnWorkEnv">
|
||||
<el-input v-model="formData.feedbackOnWorkEnv" placeholder="请输入对工作等环境和公司文化的反馈" />
|
||||
</el-form-item>
|
||||
<el-form-item label="对公司的意见和建议" prop="suggestions">
|
||||
<el-input v-model="formData.suggestions" placeholder="请输入对公司的意见和建议" />
|
||||
</el-form-item>
|
||||
<el-form-item label="希望公司在未来的发展中能够做到的改进" prop="suggestionsForImprovement">
|
||||
<el-input v-model="formData.suggestionsForImprovement" placeholder="请输入希望公司在未来的发展中能够做到的改进" />
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
<template #footer>
|
||||
<el-button @click="submitForm" type="primary" :disabled="formLoading">确 定</el-button>
|
||||
<el-button @click="dialogVisible = false">取 消</el-button>
|
||||
</template>
|
||||
</Dialog>
|
||||
</template>
|
||||
<script setup lang="ts">
|
||||
import { ResignationApplyApi, ResignationApplyVO } from '@/api/hrm/resignationapply'
|
||||
|
||||
/** 离职申请 表单 */
|
||||
defineOptions({ name: 'ResignationApplyForm' })
|
||||
|
||||
const { t } = useI18n() // 国际化
|
||||
const message = useMessage() // 消息弹窗
|
||||
|
||||
const dialogVisible = ref(false) // 弹窗的是否展示
|
||||
const dialogTitle = ref('') // 弹窗的标题
|
||||
const formLoading = ref(false) // 表单的加载中:1)修改时的数据加载;2)提交的按钮禁用
|
||||
const formType = ref('') // 表单的类型:create - 新增;update - 修改
|
||||
const formData = ref({
|
||||
id: undefined,
|
||||
userId: undefined,
|
||||
processInstanceId: undefined,
|
||||
auditStatus: undefined,
|
||||
expectedResignDate: undefined,
|
||||
resignationReason: undefined,
|
||||
reasonDescription: undefined,
|
||||
feedbackOnWorkEnv: undefined,
|
||||
suggestions: undefined,
|
||||
suggestionsForImprovement: undefined
|
||||
})
|
||||
const formRules = reactive({
|
||||
userId: [{ required: true, message: '员工档案ID不能为空', trigger: 'blur' }],
|
||||
auditStatus: [{ required: true, message: '审批状态不能为空', trigger: 'blur' }],
|
||||
expectedResignDate: [{ required: true, message: '预计离职日期不能为空', trigger: 'blur' }],
|
||||
resignationReason: [{ required: true, message: '离职原因:个人原因、发展原因、薪酬原因、工作压力大、不接受组织调整、其他不能为空', trigger: 'blur' }]
|
||||
})
|
||||
const formRef = ref() // 表单 Ref
|
||||
|
||||
/** 打开弹窗 */
|
||||
const open = async (type: string, id?: number) => {
|
||||
dialogVisible.value = true
|
||||
dialogTitle.value = t('action.' + type)
|
||||
formType.value = type
|
||||
resetForm()
|
||||
// 修改时,设置数据
|
||||
if (id) {
|
||||
formLoading.value = true
|
||||
try {
|
||||
formData.value = await ResignationApplyApi.getResignationApply(id)
|
||||
} finally {
|
||||
formLoading.value = false
|
||||
}
|
||||
}
|
||||
}
|
||||
defineExpose({ open }) // 提供 open 方法,用于打开弹窗
|
||||
|
||||
/** 提交表单 */
|
||||
const emit = defineEmits(['success']) // 定义 success 事件,用于操作成功后的回调
|
||||
const submitForm = async () => {
|
||||
// 校验表单
|
||||
await formRef.value.validate()
|
||||
// 提交请求
|
||||
formLoading.value = true
|
||||
try {
|
||||
const data = formData.value as unknown as ResignationApplyVO
|
||||
if (formType.value === 'create') {
|
||||
await ResignationApplyApi.createResignationApply(data)
|
||||
message.success(t('common.createSuccess'))
|
||||
} else {
|
||||
await ResignationApplyApi.updateResignationApply(data)
|
||||
message.success(t('common.updateSuccess'))
|
||||
}
|
||||
dialogVisible.value = false
|
||||
// 发送操作成功的事件
|
||||
emit('success')
|
||||
} finally {
|
||||
formLoading.value = false
|
||||
}
|
||||
}
|
||||
|
||||
/** 重置表单 */
|
||||
const resetForm = () => {
|
||||
formData.value = {
|
||||
id: undefined,
|
||||
userId: undefined,
|
||||
processInstanceId: undefined,
|
||||
auditStatus: undefined,
|
||||
expectedResignDate: undefined,
|
||||
resignationReason: undefined,
|
||||
reasonDescription: undefined,
|
||||
feedbackOnWorkEnv: undefined,
|
||||
suggestions: undefined,
|
||||
suggestionsForImprovement: undefined
|
||||
}
|
||||
formRef.value?.resetFields()
|
||||
}
|
||||
</script>
|
||||
|
|
@ -0,0 +1,269 @@
|
|||
<template>
|
||||
<ContentWrap>
|
||||
<!-- 搜索工作栏 -->
|
||||
<el-form
|
||||
class="-mb-15px"
|
||||
:model="queryParams"
|
||||
ref="queryFormRef"
|
||||
:inline="true"
|
||||
label-width="68px"
|
||||
>
|
||||
<el-form-item label="员工档案ID" prop="userId">
|
||||
<el-input
|
||||
v-model="queryParams.userId"
|
||||
placeholder="请输入员工档案ID"
|
||||
clearable
|
||||
@keyup.enter="handleQuery"
|
||||
class="!w-240px"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="工作流编号" prop="processInstanceId">
|
||||
<el-input
|
||||
v-model="queryParams.processInstanceId"
|
||||
placeholder="请输入工作流编号"
|
||||
clearable
|
||||
@keyup.enter="handleQuery"
|
||||
class="!w-240px"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="审批状态" prop="auditStatus">
|
||||
<el-select
|
||||
v-model="queryParams.auditStatus"
|
||||
placeholder="请选择审批状态"
|
||||
clearable
|
||||
class="!w-240px"
|
||||
>
|
||||
<el-option label="请选择字典生成" value="" />
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item label="预计离职日期" prop="expectedResignDate">
|
||||
<el-date-picker
|
||||
v-model="queryParams.expectedResignDate"
|
||||
value-format="YYYY-MM-DD HH:mm:ss"
|
||||
type="daterange"
|
||||
start-placeholder="开始日期"
|
||||
end-placeholder="结束日期"
|
||||
:default-time="[new Date('1 00:00:00'), new Date('1 23:59:59')]"
|
||||
class="!w-220px"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="离职原因:个人原因、发展原因、薪酬原因、工作压力大、不接受组织调整、其他" prop="resignationReason">
|
||||
<el-input
|
||||
v-model="queryParams.resignationReason"
|
||||
placeholder="请输入离职原因:个人原因、发展原因、薪酬原因、工作压力大、不接受组织调整、其他"
|
||||
clearable
|
||||
@keyup.enter="handleQuery"
|
||||
class="!w-240px"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="对工作等环境和公司文化的反馈" prop="feedbackOnWorkEnv">
|
||||
<el-input
|
||||
v-model="queryParams.feedbackOnWorkEnv"
|
||||
placeholder="请输入对工作等环境和公司文化的反馈"
|
||||
clearable
|
||||
@keyup.enter="handleQuery"
|
||||
class="!w-240px"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="对公司的意见和建议" prop="suggestions">
|
||||
<el-input
|
||||
v-model="queryParams.suggestions"
|
||||
placeholder="请输入对公司的意见和建议"
|
||||
clearable
|
||||
@keyup.enter="handleQuery"
|
||||
class="!w-240px"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="希望公司在未来的发展中能够做到的改进" prop="suggestionsForImprovement">
|
||||
<el-input
|
||||
v-model="queryParams.suggestionsForImprovement"
|
||||
placeholder="请输入希望公司在未来的发展中能够做到的改进"
|
||||
clearable
|
||||
@keyup.enter="handleQuery"
|
||||
class="!w-240px"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="创建时间" prop="createTime">
|
||||
<el-date-picker
|
||||
v-model="queryParams.createTime"
|
||||
value-format="YYYY-MM-DD HH:mm:ss"
|
||||
type="daterange"
|
||||
start-placeholder="开始日期"
|
||||
end-placeholder="结束日期"
|
||||
:default-time="[new Date('1 00:00:00'), new Date('1 23:59:59')]"
|
||||
class="!w-220px"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item>
|
||||
<el-button @click="handleQuery"><Icon icon="ep:search" class="mr-5px" /> 搜索</el-button>
|
||||
<el-button @click="resetQuery"><Icon icon="ep:refresh" class="mr-5px" /> 重置</el-button>
|
||||
<el-button
|
||||
type="primary"
|
||||
plain
|
||||
@click="openForm('create')"
|
||||
v-hasPermi="['hrm:resignation-apply:create']"
|
||||
>
|
||||
<Icon icon="ep:plus" class="mr-5px" /> 新增
|
||||
</el-button>
|
||||
<el-button
|
||||
type="success"
|
||||
plain
|
||||
@click="handleExport"
|
||||
:loading="exportLoading"
|
||||
v-hasPermi="['hrm:resignation-apply:export']"
|
||||
>
|
||||
<Icon icon="ep:download" class="mr-5px" /> 导出
|
||||
</el-button>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
</ContentWrap>
|
||||
|
||||
<!-- 列表 -->
|
||||
<ContentWrap>
|
||||
<el-table v-loading="loading" :data="list" :stripe="true" :show-overflow-tooltip="true">
|
||||
<el-table-column label="主键,自动递增" align="center" prop="id" />
|
||||
<el-table-column label="员工档案ID" align="center" prop="userId" />
|
||||
<el-table-column label="工作流编号" align="center" prop="processInstanceId" />
|
||||
<el-table-column label="审批状态" align="center" prop="auditStatus" />
|
||||
<el-table-column label="预计离职日期" align="center" prop="expectedResignDate" />
|
||||
<el-table-column label="离职原因:个人原因、发展原因、薪酬原因、工作压力大、不接受组织调整、其他" align="center" prop="resignationReason" />
|
||||
<el-table-column label="离职原因说明" align="center" prop="reasonDescription" />
|
||||
<el-table-column label="对工作等环境和公司文化的反馈" align="center" prop="feedbackOnWorkEnv" />
|
||||
<el-table-column label="对公司的意见和建议" align="center" prop="suggestions" />
|
||||
<el-table-column label="希望公司在未来的发展中能够做到的改进" align="center" prop="suggestionsForImprovement" />
|
||||
<el-table-column
|
||||
label="创建时间"
|
||||
align="center"
|
||||
prop="createTime"
|
||||
:formatter="dateFormatter"
|
||||
width="180px"
|
||||
/>
|
||||
<el-table-column label="操作" align="center" min-width="120px">
|
||||
<template #default="scope">
|
||||
<el-button
|
||||
link
|
||||
type="primary"
|
||||
@click="openForm('update', scope.row.id)"
|
||||
v-hasPermi="['hrm:resignation-apply:update']"
|
||||
>
|
||||
编辑
|
||||
</el-button>
|
||||
<el-button
|
||||
link
|
||||
type="danger"
|
||||
@click="handleDelete(scope.row.id)"
|
||||
v-hasPermi="['hrm:resignation-apply:delete']"
|
||||
>
|
||||
删除
|
||||
</el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
<!-- 分页 -->
|
||||
<Pagination
|
||||
:total="total"
|
||||
v-model:page="queryParams.pageNo"
|
||||
v-model:limit="queryParams.pageSize"
|
||||
@pagination="getList"
|
||||
/>
|
||||
</ContentWrap>
|
||||
|
||||
<!-- 表单弹窗:添加/修改 -->
|
||||
<ResignationApplyForm ref="formRef" @success="getList" />
|
||||
</template>
|
||||
|
||||
<script setup lang="ts">
|
||||
import { dateFormatter } from '@/utils/formatTime'
|
||||
import download from '@/utils/download'
|
||||
import { ResignationApplyApi, ResignationApplyVO } from '@/api/hrm/resignationapply'
|
||||
import ResignationApplyForm from './ResignationApplyForm.vue'
|
||||
|
||||
/** 离职申请 列表 */
|
||||
defineOptions({ name: 'ResignationApply' })
|
||||
|
||||
const message = useMessage() // 消息弹窗
|
||||
const { t } = useI18n() // 国际化
|
||||
|
||||
const loading = ref(true) // 列表的加载中
|
||||
const list = ref<ResignationApplyVO[]>([]) // 列表的数据
|
||||
const total = ref(0) // 列表的总页数
|
||||
const queryParams = reactive({
|
||||
pageNo: 1,
|
||||
pageSize: 10,
|
||||
userId: undefined,
|
||||
processInstanceId: undefined,
|
||||
auditStatus: undefined,
|
||||
expectedResignDate: [],
|
||||
resignationReason: undefined,
|
||||
reasonDescription: undefined,
|
||||
feedbackOnWorkEnv: undefined,
|
||||
suggestions: undefined,
|
||||
suggestionsForImprovement: undefined,
|
||||
createTime: []
|
||||
})
|
||||
const queryFormRef = ref() // 搜索的表单
|
||||
const exportLoading = ref(false) // 导出的加载中
|
||||
|
||||
/** 查询列表 */
|
||||
const getList = async () => {
|
||||
loading.value = true
|
||||
try {
|
||||
const data = await ResignationApplyApi.getResignationApplyPage(queryParams)
|
||||
list.value = data.list
|
||||
total.value = data.total
|
||||
} finally {
|
||||
loading.value = false
|
||||
}
|
||||
}
|
||||
|
||||
/** 搜索按钮操作 */
|
||||
const handleQuery = () => {
|
||||
queryParams.pageNo = 1
|
||||
getList()
|
||||
}
|
||||
|
||||
/** 重置按钮操作 */
|
||||
const resetQuery = () => {
|
||||
queryFormRef.value.resetFields()
|
||||
handleQuery()
|
||||
}
|
||||
|
||||
/** 添加/修改操作 */
|
||||
const formRef = ref()
|
||||
const openForm = (type: string, id?: number) => {
|
||||
formRef.value.open(type, id)
|
||||
}
|
||||
|
||||
/** 删除按钮操作 */
|
||||
const handleDelete = async (id: number) => {
|
||||
try {
|
||||
// 删除的二次确认
|
||||
await message.delConfirm()
|
||||
// 发起删除
|
||||
await ResignationApplyApi.deleteResignationApply(id)
|
||||
message.success(t('common.delSuccess'))
|
||||
// 刷新列表
|
||||
await getList()
|
||||
} catch {}
|
||||
}
|
||||
|
||||
/** 导出按钮操作 */
|
||||
const handleExport = async () => {
|
||||
try {
|
||||
// 导出的二次确认
|
||||
await message.exportConfirm()
|
||||
// 发起导出
|
||||
exportLoading.value = true
|
||||
const data = await ResignationApplyApi.exportResignationApply(queryParams)
|
||||
download.excel(data, '离职申请.xls')
|
||||
} catch {
|
||||
} finally {
|
||||
exportLoading.value = false
|
||||
}
|
||||
}
|
||||
|
||||
/** 初始化 **/
|
||||
onMounted(() => {
|
||||
getList()
|
||||
})
|
||||
</script>
|
||||
|
|
@ -0,0 +1,168 @@
|
|||
<template>
|
||||
<Dialog :title="dialogTitle" v-model="dialogVisible">
|
||||
<el-form
|
||||
ref="formRef"
|
||||
:model="formData"
|
||||
:rules="formRules"
|
||||
label-width="100px"
|
||||
v-loading="formLoading"
|
||||
>
|
||||
<el-form-item label="申请人ID" prop="applicantId">
|
||||
<el-input v-model="formData.applicantId" placeholder="请输入申请人ID" />
|
||||
</el-form-item>
|
||||
<el-form-item label="用章主体ID" prop="companyId">
|
||||
<el-input v-model="formData.companyId" placeholder="请输入用章主体ID" />
|
||||
</el-form-item>
|
||||
<el-form-item label="印章类型" prop="sealType">
|
||||
<el-select v-model="formData.sealType" placeholder="请选择印章类型">
|
||||
<el-option
|
||||
v-for="dict in getIntDictOptions(DICT_TYPE.HRM_SEAL_TYPE)"
|
||||
:key="dict.value"
|
||||
:label="dict.label"
|
||||
:value="dict.value"
|
||||
/>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item label="工作流编号" prop="processInstanceId">
|
||||
<el-input v-model="formData.processInstanceId" placeholder="请输入工作流编号" />
|
||||
</el-form-item>
|
||||
<el-form-item label="审批状态" prop="auditStatus">
|
||||
<el-radio-group v-model="formData.auditStatus">
|
||||
<el-radio value="1">请选择字典生成</el-radio>
|
||||
</el-radio-group>
|
||||
</el-form-item>
|
||||
<el-form-item label="文件名称" prop="fileName">
|
||||
<el-input v-model="formData.fileName" placeholder="请输入文件名称" />
|
||||
</el-form-item>
|
||||
<el-form-item label="用章次数" prop="sealCount">
|
||||
<el-input v-model="formData.sealCount" placeholder="请输入用章次数" />
|
||||
</el-form-item>
|
||||
<el-form-item label="附件" prop="attachment">
|
||||
<el-input v-model="formData.attachment" placeholder="请输入附件" />
|
||||
</el-form-item>
|
||||
<el-form-item label="是否打印" prop="isPrint">
|
||||
<el-radio-group v-model="formData.isPrint">
|
||||
<el-radio value="1">请选择字典生成</el-radio>
|
||||
</el-radio-group>
|
||||
</el-form-item>
|
||||
<el-form-item label="申请说明" prop="instructions">
|
||||
<el-input v-model="formData.instructions" placeholder="请输入申请说明" />
|
||||
</el-form-item>
|
||||
<el-form-item label="申请时间" prop="applicantTime">
|
||||
<el-date-picker
|
||||
v-model="formData.applicantTime"
|
||||
type="date"
|
||||
value-format="x"
|
||||
placeholder="选择申请时间"
|
||||
/>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
<template #footer>
|
||||
<el-button @click="submitForm" type="primary" :disabled="formLoading">确 定</el-button>
|
||||
<el-button @click="dialogVisible = false">取 消</el-button>
|
||||
</template>
|
||||
</Dialog>
|
||||
</template>
|
||||
<script setup lang="ts">
|
||||
import { getIntDictOptions, DICT_TYPE } from '@/utils/dict'
|
||||
import { SealRequestApi, SealRequestVO } from '@/api/hrm/sealrequest'
|
||||
|
||||
/** 用章申请 表单 */
|
||||
defineOptions({ name: 'SealRequestForm' })
|
||||
|
||||
const { t } = useI18n() // 国际化
|
||||
const message = useMessage() // 消息弹窗
|
||||
|
||||
const dialogVisible = ref(false) // 弹窗的是否展示
|
||||
const dialogTitle = ref('') // 弹窗的标题
|
||||
const formLoading = ref(false) // 表单的加载中:1)修改时的数据加载;2)提交的按钮禁用
|
||||
const formType = ref('') // 表单的类型:create - 新增;update - 修改
|
||||
const formData = ref({
|
||||
id: undefined,
|
||||
applicantId: undefined,
|
||||
companyId: undefined,
|
||||
sealType: undefined,
|
||||
processInstanceId: undefined,
|
||||
auditStatus: undefined,
|
||||
fileName: undefined,
|
||||
sealCount: undefined,
|
||||
attachment: undefined,
|
||||
isPrint: undefined,
|
||||
instructions: undefined,
|
||||
applicantTime: undefined
|
||||
})
|
||||
const formRules = reactive({
|
||||
applicantId: [{ required: true, message: '申请人ID不能为空', trigger: 'blur' }],
|
||||
companyId: [{ required: true, message: '用章主体ID不能为空', trigger: 'blur' }],
|
||||
sealType: [{ required: true, message: '印章类型不能为空', trigger: 'change' }],
|
||||
auditStatus: [{ required: true, message: '审批状态不能为空', trigger: 'blur' }],
|
||||
fileName: [{ required: true, message: '文件名称不能为空', trigger: 'blur' }],
|
||||
sealCount: [{ required: true, message: '用章次数不能为空', trigger: 'blur' }],
|
||||
attachment: [{ required: true, message: '附件不能为空', trigger: 'blur' }],
|
||||
isPrint: [{ required: true, message: '是否打印不能为空', trigger: 'blur' }],
|
||||
instructions: [{ required: true, message: '申请说明不能为空', trigger: 'blur' }],
|
||||
applicantTime: [{ required: true, message: '申请时间不能为空', trigger: 'blur' }]
|
||||
})
|
||||
const formRef = ref() // 表单 Ref
|
||||
|
||||
/** 打开弹窗 */
|
||||
const open = async (type: string, id?: number) => {
|
||||
dialogVisible.value = true
|
||||
dialogTitle.value = t('action.' + type)
|
||||
formType.value = type
|
||||
resetForm()
|
||||
// 修改时,设置数据
|
||||
if (id) {
|
||||
formLoading.value = true
|
||||
try {
|
||||
formData.value = await SealRequestApi.getSealRequest(id)
|
||||
} finally {
|
||||
formLoading.value = false
|
||||
}
|
||||
}
|
||||
}
|
||||
defineExpose({ open }) // 提供 open 方法,用于打开弹窗
|
||||
|
||||
/** 提交表单 */
|
||||
const emit = defineEmits(['success']) // 定义 success 事件,用于操作成功后的回调
|
||||
const submitForm = async () => {
|
||||
// 校验表单
|
||||
await formRef.value.validate()
|
||||
// 提交请求
|
||||
formLoading.value = true
|
||||
try {
|
||||
const data = formData.value as unknown as SealRequestVO
|
||||
if (formType.value === 'create') {
|
||||
await SealRequestApi.createSealRequest(data)
|
||||
message.success(t('common.createSuccess'))
|
||||
} else {
|
||||
await SealRequestApi.updateSealRequest(data)
|
||||
message.success(t('common.updateSuccess'))
|
||||
}
|
||||
dialogVisible.value = false
|
||||
// 发送操作成功的事件
|
||||
emit('success')
|
||||
} finally {
|
||||
formLoading.value = false
|
||||
}
|
||||
}
|
||||
|
||||
/** 重置表单 */
|
||||
const resetForm = () => {
|
||||
formData.value = {
|
||||
id: undefined,
|
||||
applicantId: undefined,
|
||||
companyId: undefined,
|
||||
sealType: undefined,
|
||||
processInstanceId: undefined,
|
||||
auditStatus: undefined,
|
||||
fileName: undefined,
|
||||
sealCount: undefined,
|
||||
attachment: undefined,
|
||||
isPrint: undefined,
|
||||
instructions: undefined,
|
||||
applicantTime: undefined
|
||||
}
|
||||
formRef.value?.resetFields()
|
||||
}
|
||||
</script>
|
||||
|
|
@ -0,0 +1,318 @@
|
|||
<template>
|
||||
<ContentWrap>
|
||||
<!-- 搜索工作栏 -->
|
||||
<el-form
|
||||
class="-mb-15px"
|
||||
:model="queryParams"
|
||||
ref="queryFormRef"
|
||||
:inline="true"
|
||||
label-width="68px"
|
||||
>
|
||||
<el-form-item label="申请人ID" prop="applicantId">
|
||||
<el-input
|
||||
v-model="queryParams.applicantId"
|
||||
placeholder="请输入申请人ID"
|
||||
clearable
|
||||
@keyup.enter="handleQuery"
|
||||
class="!w-240px"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="用章主体ID" prop="companyId">
|
||||
<el-input
|
||||
v-model="queryParams.companyId"
|
||||
placeholder="请输入用章主体ID"
|
||||
clearable
|
||||
@keyup.enter="handleQuery"
|
||||
class="!w-240px"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="印章类型" prop="sealType">
|
||||
<el-select
|
||||
v-model="queryParams.sealType"
|
||||
placeholder="请选择印章类型"
|
||||
clearable
|
||||
class="!w-240px"
|
||||
>
|
||||
<el-option
|
||||
v-for="dict in getIntDictOptions(DICT_TYPE.HRM_SEAL_TYPE)"
|
||||
:key="dict.value"
|
||||
:label="dict.label"
|
||||
:value="dict.value"
|
||||
/>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item label="工作流编号" prop="processInstanceId">
|
||||
<el-input
|
||||
v-model="queryParams.processInstanceId"
|
||||
placeholder="请输入工作流编号"
|
||||
clearable
|
||||
@keyup.enter="handleQuery"
|
||||
class="!w-240px"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="审批状态" prop="auditStatus">
|
||||
<el-select
|
||||
v-model="queryParams.auditStatus"
|
||||
placeholder="请选择审批状态"
|
||||
clearable
|
||||
class="!w-240px"
|
||||
>
|
||||
<el-option label="请选择字典生成" value="" />
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item label="文件名称" prop="fileName">
|
||||
<el-input
|
||||
v-model="queryParams.fileName"
|
||||
placeholder="请输入文件名称"
|
||||
clearable
|
||||
@keyup.enter="handleQuery"
|
||||
class="!w-240px"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="用章次数" prop="sealCount">
|
||||
<el-input
|
||||
v-model="queryParams.sealCount"
|
||||
placeholder="请输入用章次数"
|
||||
clearable
|
||||
@keyup.enter="handleQuery"
|
||||
class="!w-240px"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="附件" prop="attachment">
|
||||
<el-input
|
||||
v-model="queryParams.attachment"
|
||||
placeholder="请输入附件"
|
||||
clearable
|
||||
@keyup.enter="handleQuery"
|
||||
class="!w-240px"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="是否打印" prop="isPrint">
|
||||
<el-select
|
||||
v-model="queryParams.isPrint"
|
||||
placeholder="请选择是否打印"
|
||||
clearable
|
||||
class="!w-240px"
|
||||
>
|
||||
<el-option label="请选择字典生成" value="" />
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item label="申请说明" prop="instructions">
|
||||
<el-input
|
||||
v-model="queryParams.instructions"
|
||||
placeholder="请输入申请说明"
|
||||
clearable
|
||||
@keyup.enter="handleQuery"
|
||||
class="!w-240px"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="申请时间" prop="applicantTime">
|
||||
<el-date-picker
|
||||
v-model="queryParams.applicantTime"
|
||||
value-format="YYYY-MM-DD HH:mm:ss"
|
||||
type="daterange"
|
||||
start-placeholder="开始日期"
|
||||
end-placeholder="结束日期"
|
||||
:default-time="[new Date('1 00:00:00'), new Date('1 23:59:59')]"
|
||||
class="!w-220px"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="创建时间" prop="createTime">
|
||||
<el-date-picker
|
||||
v-model="queryParams.createTime"
|
||||
value-format="YYYY-MM-DD HH:mm:ss"
|
||||
type="daterange"
|
||||
start-placeholder="开始日期"
|
||||
end-placeholder="结束日期"
|
||||
:default-time="[new Date('1 00:00:00'), new Date('1 23:59:59')]"
|
||||
class="!w-220px"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item>
|
||||
<el-button @click="handleQuery"><Icon icon="ep:search" class="mr-5px" /> 搜索</el-button>
|
||||
<el-button @click="resetQuery"><Icon icon="ep:refresh" class="mr-5px" /> 重置</el-button>
|
||||
<el-button
|
||||
type="primary"
|
||||
plain
|
||||
@click="openForm('create')"
|
||||
v-hasPermi="['hrm:seal-request:create']"
|
||||
>
|
||||
<Icon icon="ep:plus" class="mr-5px" /> 新增
|
||||
</el-button>
|
||||
<el-button
|
||||
type="success"
|
||||
plain
|
||||
@click="handleExport"
|
||||
:loading="exportLoading"
|
||||
v-hasPermi="['hrm:seal-request:export']"
|
||||
>
|
||||
<Icon icon="ep:download" class="mr-5px" /> 导出
|
||||
</el-button>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
</ContentWrap>
|
||||
|
||||
<!-- 列表 -->
|
||||
<ContentWrap>
|
||||
<el-table v-loading="loading" :data="list" :stripe="true" :show-overflow-tooltip="true">
|
||||
<el-table-column label="主键ID" align="center" prop="id" />
|
||||
<el-table-column label="申请人ID" align="center" prop="applicantId" />
|
||||
<el-table-column label="用章主体ID" align="center" prop="companyId" />
|
||||
<el-table-column label="印章类型" align="center" prop="sealType">
|
||||
<template #default="scope">
|
||||
<dict-tag :type="DICT_TYPE.HRM_SEAL_TYPE" :value="scope.row.sealType" />
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="工作流编号" align="center" prop="processInstanceId" />
|
||||
<el-table-column label="审批状态" align="center" prop="auditStatus" />
|
||||
<el-table-column label="文件名称" align="center" prop="fileName" />
|
||||
<el-table-column label="用章次数" align="center" prop="sealCount" />
|
||||
<el-table-column label="附件" align="center" prop="attachment" />
|
||||
<el-table-column label="是否打印" align="center" prop="isPrint" />
|
||||
<el-table-column label="申请说明" align="center" prop="instructions" />
|
||||
<el-table-column
|
||||
label="申请时间"
|
||||
align="center"
|
||||
prop="applicantTime"
|
||||
:formatter="dateFormatter"
|
||||
width="180px"
|
||||
/>
|
||||
<el-table-column
|
||||
label="创建时间"
|
||||
align="center"
|
||||
prop="createTime"
|
||||
:formatter="dateFormatter"
|
||||
width="180px"
|
||||
/>
|
||||
<el-table-column label="操作" align="center" min-width="120px">
|
||||
<template #default="scope">
|
||||
<el-button
|
||||
link
|
||||
type="primary"
|
||||
@click="openForm('update', scope.row.id)"
|
||||
v-hasPermi="['hrm:seal-request:update']"
|
||||
>
|
||||
编辑
|
||||
</el-button>
|
||||
<el-button
|
||||
link
|
||||
type="danger"
|
||||
@click="handleDelete(scope.row.id)"
|
||||
v-hasPermi="['hrm:seal-request:delete']"
|
||||
>
|
||||
删除
|
||||
</el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
<!-- 分页 -->
|
||||
<Pagination
|
||||
:total="total"
|
||||
v-model:page="queryParams.pageNo"
|
||||
v-model:limit="queryParams.pageSize"
|
||||
@pagination="getList"
|
||||
/>
|
||||
</ContentWrap>
|
||||
|
||||
<!-- 表单弹窗:添加/修改 -->
|
||||
<SealRequestForm ref="formRef" @success="getList" />
|
||||
</template>
|
||||
|
||||
<script setup lang="ts">
|
||||
import { getIntDictOptions, DICT_TYPE } from '@/utils/dict'
|
||||
import { dateFormatter } from '@/utils/formatTime'
|
||||
import download from '@/utils/download'
|
||||
import { SealRequestApi, SealRequestVO } from '@/api/hrm/sealrequest'
|
||||
import SealRequestForm from './SealRequestForm.vue'
|
||||
|
||||
/** 用章申请 列表 */
|
||||
defineOptions({ name: 'SealRequest' })
|
||||
|
||||
const message = useMessage() // 消息弹窗
|
||||
const { t } = useI18n() // 国际化
|
||||
|
||||
const loading = ref(true) // 列表的加载中
|
||||
const list = ref<SealRequestVO[]>([]) // 列表的数据
|
||||
const total = ref(0) // 列表的总页数
|
||||
const queryParams = reactive({
|
||||
pageNo: 1,
|
||||
pageSize: 10,
|
||||
applicantId: undefined,
|
||||
companyId: undefined,
|
||||
sealType: undefined,
|
||||
processInstanceId: undefined,
|
||||
auditStatus: undefined,
|
||||
fileName: undefined,
|
||||
sealCount: undefined,
|
||||
attachment: undefined,
|
||||
isPrint: undefined,
|
||||
instructions: undefined,
|
||||
applicantTime: [],
|
||||
createTime: []
|
||||
})
|
||||
const queryFormRef = ref() // 搜索的表单
|
||||
const exportLoading = ref(false) // 导出的加载中
|
||||
|
||||
/** 查询列表 */
|
||||
const getList = async () => {
|
||||
loading.value = true
|
||||
try {
|
||||
const data = await SealRequestApi.getSealRequestPage(queryParams)
|
||||
list.value = data.list
|
||||
total.value = data.total
|
||||
} finally {
|
||||
loading.value = false
|
||||
}
|
||||
}
|
||||
|
||||
/** 搜索按钮操作 */
|
||||
const handleQuery = () => {
|
||||
queryParams.pageNo = 1
|
||||
getList()
|
||||
}
|
||||
|
||||
/** 重置按钮操作 */
|
||||
const resetQuery = () => {
|
||||
queryFormRef.value.resetFields()
|
||||
handleQuery()
|
||||
}
|
||||
|
||||
/** 添加/修改操作 */
|
||||
const formRef = ref()
|
||||
const openForm = (type: string, id?: number) => {
|
||||
formRef.value.open(type, id)
|
||||
}
|
||||
|
||||
/** 删除按钮操作 */
|
||||
const handleDelete = async (id: number) => {
|
||||
try {
|
||||
// 删除的二次确认
|
||||
await message.delConfirm()
|
||||
// 发起删除
|
||||
await SealRequestApi.deleteSealRequest(id)
|
||||
message.success(t('common.delSuccess'))
|
||||
// 刷新列表
|
||||
await getList()
|
||||
} catch {}
|
||||
}
|
||||
|
||||
/** 导出按钮操作 */
|
||||
const handleExport = async () => {
|
||||
try {
|
||||
// 导出的二次确认
|
||||
await message.exportConfirm()
|
||||
// 发起导出
|
||||
exportLoading.value = true
|
||||
const data = await SealRequestApi.exportSealRequest(queryParams)
|
||||
download.excel(data, '用章申请.xls')
|
||||
} catch {
|
||||
} finally {
|
||||
exportLoading.value = false
|
||||
}
|
||||
}
|
||||
|
||||
/** 初始化 **/
|
||||
onMounted(() => {
|
||||
getList()
|
||||
})
|
||||
</script>
|
||||
|
|
@ -0,0 +1,147 @@
|
|||
<template>
|
||||
<Dialog :title="dialogTitle" v-model="dialogVisible">
|
||||
<el-form
|
||||
ref="formRef"
|
||||
:model="formData"
|
||||
:rules="formRules"
|
||||
label-width="100px"
|
||||
v-loading="formLoading"
|
||||
>
|
||||
<el-form-item label="员工ID" prop="userId">
|
||||
<el-input v-model="formData.userId" placeholder="请输入员工ID" />
|
||||
</el-form-item>
|
||||
<el-form-item label="工作流编号" prop="processInstanceId">
|
||||
<el-input v-model="formData.processInstanceId" placeholder="请输入工作流编号" />
|
||||
</el-form-item>
|
||||
<el-form-item label="审批状态" prop="auditStatus">
|
||||
<el-radio-group v-model="formData.auditStatus">
|
||||
<el-radio value="1">请选择字典生成</el-radio>
|
||||
</el-radio-group>
|
||||
</el-form-item>
|
||||
<el-form-item label="生效日期" prop="effectiveDate">
|
||||
<el-date-picker
|
||||
v-model="formData.effectiveDate"
|
||||
type="date"
|
||||
value-format="x"
|
||||
placeholder="选择生效日期"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="申请说明" prop="applyDesc">
|
||||
<el-input v-model="formData.applyDesc" placeholder="请输入申请说明" />
|
||||
</el-form-item>
|
||||
<el-form-item label="本人签字" prop="elecSignature">
|
||||
<el-input v-model="formData.elecSignature" placeholder="请输入本人签字" />
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
<!-- 子表的表单 -->
|
||||
<el-tabs v-model="subTabsName">
|
||||
<el-tab-pane label="补助申请明细" name="subsidyApplyDetail">
|
||||
<SubsidyApplyDetailForm ref="subsidyApplyDetailFormRef" :subsidy-application-id="formData.id" />
|
||||
</el-tab-pane>
|
||||
</el-tabs>
|
||||
<template #footer>
|
||||
<el-button @click="submitForm" type="primary" :disabled="formLoading">确 定</el-button>
|
||||
<el-button @click="dialogVisible = false">取 消</el-button>
|
||||
</template>
|
||||
</Dialog>
|
||||
</template>
|
||||
<script setup lang="ts">
|
||||
import { SubsidyApplyApi, SubsidyApplyVO } from '@/api/hrm/subsidyapply'
|
||||
import SubsidyApplyDetailForm from './components/SubsidyApplyDetailForm.vue'
|
||||
|
||||
/** 补助申请 表单 */
|
||||
defineOptions({ name: 'SubsidyApplyForm' })
|
||||
|
||||
const { t } = useI18n() // 国际化
|
||||
const message = useMessage() // 消息弹窗
|
||||
|
||||
const dialogVisible = ref(false) // 弹窗的是否展示
|
||||
const dialogTitle = ref('') // 弹窗的标题
|
||||
const formLoading = ref(false) // 表单的加载中:1)修改时的数据加载;2)提交的按钮禁用
|
||||
const formType = ref('') // 表单的类型:create - 新增;update - 修改
|
||||
const formData = ref({
|
||||
id: undefined,
|
||||
userId: undefined,
|
||||
processInstanceId: undefined,
|
||||
auditStatus: undefined,
|
||||
effectiveDate: undefined,
|
||||
applyDesc: undefined,
|
||||
elecSignature: undefined
|
||||
})
|
||||
const formRules = reactive({
|
||||
userId: [{ required: true, message: '员工ID不能为空', trigger: 'blur' }],
|
||||
auditStatus: [{ required: true, message: '审批状态不能为空', trigger: 'blur' }],
|
||||
effectiveDate: [{ required: true, message: '生效日期不能为空', trigger: 'blur' }],
|
||||
applyDesc: [{ required: true, message: '申请说明不能为空', trigger: 'blur' }]
|
||||
})
|
||||
const formRef = ref() // 表单 Ref
|
||||
|
||||
/** 子表的表单 */
|
||||
const subTabsName = ref('subsidyApplyDetail')
|
||||
const subsidyApplyDetailFormRef = ref()
|
||||
|
||||
/** 打开弹窗 */
|
||||
const open = async (type: string, id?: number) => {
|
||||
dialogVisible.value = true
|
||||
dialogTitle.value = t('action.' + type)
|
||||
formType.value = type
|
||||
resetForm()
|
||||
// 修改时,设置数据
|
||||
if (id) {
|
||||
formLoading.value = true
|
||||
try {
|
||||
formData.value = await SubsidyApplyApi.getSubsidyApply(id)
|
||||
} finally {
|
||||
formLoading.value = false
|
||||
}
|
||||
}
|
||||
}
|
||||
defineExpose({ open }) // 提供 open 方法,用于打开弹窗
|
||||
|
||||
/** 提交表单 */
|
||||
const emit = defineEmits(['success']) // 定义 success 事件,用于操作成功后的回调
|
||||
const submitForm = async () => {
|
||||
// 校验表单
|
||||
await formRef.value.validate()
|
||||
// 校验子表单
|
||||
try {
|
||||
await subsidyApplyDetailFormRef.value.validate()
|
||||
} catch (e) {
|
||||
subTabsName.value = 'subsidyApplyDetail'
|
||||
return
|
||||
}
|
||||
// 提交请求
|
||||
formLoading.value = true
|
||||
try {
|
||||
const data = formData.value as unknown as SubsidyApplyVO
|
||||
// 拼接子表的数据
|
||||
data.subsidyApplyDetails = subsidyApplyDetailFormRef.value.getData()
|
||||
if (formType.value === 'create') {
|
||||
await SubsidyApplyApi.createSubsidyApply(data)
|
||||
message.success(t('common.createSuccess'))
|
||||
} else {
|
||||
await SubsidyApplyApi.updateSubsidyApply(data)
|
||||
message.success(t('common.updateSuccess'))
|
||||
}
|
||||
dialogVisible.value = false
|
||||
// 发送操作成功的事件
|
||||
emit('success')
|
||||
} finally {
|
||||
formLoading.value = false
|
||||
}
|
||||
}
|
||||
|
||||
/** 重置表单 */
|
||||
const resetForm = () => {
|
||||
formData.value = {
|
||||
id: undefined,
|
||||
userId: undefined,
|
||||
processInstanceId: undefined,
|
||||
auditStatus: undefined,
|
||||
effectiveDate: undefined,
|
||||
applyDesc: undefined,
|
||||
elecSignature: undefined
|
||||
}
|
||||
formRef.value?.resetFields()
|
||||
}
|
||||
</script>
|
||||
|
|
@ -0,0 +1,117 @@
|
|||
<template>
|
||||
<el-form
|
||||
ref="formRef"
|
||||
:model="formData"
|
||||
:rules="formRules"
|
||||
v-loading="formLoading"
|
||||
label-width="0px"
|
||||
:inline-message="true"
|
||||
>
|
||||
<el-table :data="formData" class="-mt-10px">
|
||||
<el-table-column label="序号" type="index" width="100" />
|
||||
<el-table-column label="补助类型" min-width="150">
|
||||
<template #default="{ row, $index }">
|
||||
<el-form-item :prop="`${$index}.subsidyType`" :rules="formRules.subsidyType" class="mb-0px!">
|
||||
<el-select v-model="row.subsidyType" placeholder="请选择补助类型">
|
||||
<el-option
|
||||
v-for="dict in getIntDictOptions(DICT_TYPE.HRM_SUBSIDY_TYPE)"
|
||||
:key="dict.value"
|
||||
:label="dict.label"
|
||||
:value="dict.value"
|
||||
/>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="原补助金额" min-width="150">
|
||||
<template #default="{ row, $index }">
|
||||
<el-form-item :prop="`${$index}.beforeMoney`" :rules="formRules.beforeMoney" class="mb-0px!">
|
||||
<el-input v-model="row.beforeMoney" placeholder="请输入原补助金额" />
|
||||
</el-form-item>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="补助后金额" min-width="150">
|
||||
<template #default="{ row, $index }">
|
||||
<el-form-item :prop="`${$index}.afterMoney`" :rules="formRules.afterMoney" class="mb-0px!">
|
||||
<el-input v-model="row.afterMoney" placeholder="请输入补助后金额" />
|
||||
</el-form-item>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column align="center" fixed="right" label="操作" width="60">
|
||||
<template #default="{ $index }">
|
||||
<el-button @click="handleDelete($index)" link>—</el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
</el-form>
|
||||
<el-row justify="center" class="mt-3">
|
||||
<el-button @click="handleAdd" round>+ 添加补助申请明细</el-button>
|
||||
</el-row>
|
||||
</template>
|
||||
<script setup lang="ts">
|
||||
import { getIntDictOptions, DICT_TYPE } from '@/utils/dict'
|
||||
import { SubsidyApplyApi } from '@/api/hrm/subsidyapply'
|
||||
|
||||
const props = defineProps<{
|
||||
subsidyApplicationId: undefined // 补助申请ID(主表的关联字段)
|
||||
}>()
|
||||
const formLoading = ref(false) // 表单的加载中
|
||||
const formData = ref([])
|
||||
const formRules = reactive({
|
||||
subsidyApplicationId: [{ required: true, message: '补助申请ID不能为空', trigger: 'blur' }],
|
||||
subsidyType: [{ required: true, message: '补助类型不能为空', trigger: 'change' }],
|
||||
beforeMoney: [{ required: true, message: '原补助金额不能为空', trigger: 'blur' }],
|
||||
afterMoney: [{ required: true, message: '补助后金额不能为空', trigger: 'blur' }]
|
||||
})
|
||||
const formRef = ref() // 表单 Ref
|
||||
|
||||
/** 监听主表的关联字段的变化,加载对应的子表数据 */
|
||||
watch(
|
||||
() => props.subsidyApplicationId,
|
||||
async (val) => {
|
||||
// 1. 重置表单
|
||||
formData.value = []
|
||||
// 2. val 非空,则加载数据
|
||||
if (!val) {
|
||||
return;
|
||||
}
|
||||
try {
|
||||
formLoading.value = true
|
||||
formData.value = await SubsidyApplyApi.getSubsidyApplyDetailListBySubsidyApplicationId(val)
|
||||
} finally {
|
||||
formLoading.value = false
|
||||
}
|
||||
},
|
||||
{ immediate: true }
|
||||
)
|
||||
|
||||
/** 新增按钮操作 */
|
||||
const handleAdd = () => {
|
||||
const row = {
|
||||
id: undefined,
|
||||
subsidyApplicationId: undefined,
|
||||
subsidyType: undefined,
|
||||
beforeMoney: undefined,
|
||||
afterMoney: undefined
|
||||
}
|
||||
row.subsidyApplicationId = props.subsidyApplicationId
|
||||
formData.value.push(row)
|
||||
}
|
||||
|
||||
/** 删除按钮操作 */
|
||||
const handleDelete = (index) => {
|
||||
formData.value.splice(index, 1)
|
||||
}
|
||||
|
||||
/** 表单校验 */
|
||||
const validate = () => {
|
||||
return formRef.value.validate()
|
||||
}
|
||||
|
||||
/** 表单值 */
|
||||
const getData = () => {
|
||||
return formData.value
|
||||
}
|
||||
|
||||
defineExpose({ validate, getData })
|
||||
</script>
|
||||
|
|
@ -0,0 +1,245 @@
|
|||
<template>
|
||||
<ContentWrap>
|
||||
<!-- 搜索工作栏 -->
|
||||
<el-form
|
||||
class="-mb-15px"
|
||||
:model="queryParams"
|
||||
ref="queryFormRef"
|
||||
:inline="true"
|
||||
label-width="68px"
|
||||
>
|
||||
<el-form-item label="员工ID" prop="userId">
|
||||
<el-input
|
||||
v-model="queryParams.userId"
|
||||
placeholder="请输入员工ID"
|
||||
clearable
|
||||
@keyup.enter="handleQuery"
|
||||
class="!w-240px"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="工作流编号" prop="processInstanceId">
|
||||
<el-input
|
||||
v-model="queryParams.processInstanceId"
|
||||
placeholder="请输入工作流编号"
|
||||
clearable
|
||||
@keyup.enter="handleQuery"
|
||||
class="!w-240px"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="审批状态" prop="auditStatus">
|
||||
<el-select
|
||||
v-model="queryParams.auditStatus"
|
||||
placeholder="请选择审批状态"
|
||||
clearable
|
||||
class="!w-240px"
|
||||
>
|
||||
<el-option label="请选择字典生成" value="" />
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item label="生效日期" prop="effectiveDate">
|
||||
<el-date-picker
|
||||
v-model="queryParams.effectiveDate"
|
||||
value-format="YYYY-MM-DD HH:mm:ss"
|
||||
type="daterange"
|
||||
start-placeholder="开始日期"
|
||||
end-placeholder="结束日期"
|
||||
:default-time="[new Date('1 00:00:00'), new Date('1 23:59:59')]"
|
||||
class="!w-220px"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="申请说明" prop="applyDesc">
|
||||
<el-input
|
||||
v-model="queryParams.applyDesc"
|
||||
placeholder="请输入申请说明"
|
||||
clearable
|
||||
@keyup.enter="handleQuery"
|
||||
class="!w-240px"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="本人签字" prop="elecSignature">
|
||||
<el-input
|
||||
v-model="queryParams.elecSignature"
|
||||
placeholder="请输入本人签字"
|
||||
clearable
|
||||
@keyup.enter="handleQuery"
|
||||
class="!w-240px"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="创建时间" prop="createTime">
|
||||
<el-date-picker
|
||||
v-model="queryParams.createTime"
|
||||
value-format="YYYY-MM-DD HH:mm:ss"
|
||||
type="daterange"
|
||||
start-placeholder="开始日期"
|
||||
end-placeholder="结束日期"
|
||||
:default-time="[new Date('1 00:00:00'), new Date('1 23:59:59')]"
|
||||
class="!w-220px"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item>
|
||||
<el-button @click="handleQuery"><Icon icon="ep:search" class="mr-5px" /> 搜索</el-button>
|
||||
<el-button @click="resetQuery"><Icon icon="ep:refresh" class="mr-5px" /> 重置</el-button>
|
||||
<el-button
|
||||
type="primary"
|
||||
plain
|
||||
@click="openForm('create')"
|
||||
v-hasPermi="['hrm:subsidy-apply:create']"
|
||||
>
|
||||
<Icon icon="ep:plus" class="mr-5px" /> 新增
|
||||
</el-button>
|
||||
<el-button
|
||||
type="success"
|
||||
plain
|
||||
@click="handleExport"
|
||||
:loading="exportLoading"
|
||||
v-hasPermi="['hrm:subsidy-apply:export']"
|
||||
>
|
||||
<Icon icon="ep:download" class="mr-5px" /> 导出
|
||||
</el-button>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
</ContentWrap>
|
||||
|
||||
<!-- 列表 -->
|
||||
<ContentWrap>
|
||||
<el-table v-loading="loading" :data="list" :stripe="true" :show-overflow-tooltip="true">
|
||||
<el-table-column label="主键,自动递增" align="center" prop="id" />
|
||||
<el-table-column label="员工ID" align="center" prop="userId" />
|
||||
<el-table-column label="工作流编号" align="center" prop="processInstanceId" />
|
||||
<el-table-column label="审批状态" align="center" prop="auditStatus" />
|
||||
<el-table-column label="生效日期" align="center" prop="effectiveDate" />
|
||||
<el-table-column label="申请说明" align="center" prop="applyDesc" />
|
||||
<el-table-column label="本人签字" align="center" prop="elecSignature" />
|
||||
<el-table-column
|
||||
label="创建时间"
|
||||
align="center"
|
||||
prop="createTime"
|
||||
:formatter="dateFormatter"
|
||||
width="180px"
|
||||
/>
|
||||
<el-table-column label="操作" align="center" min-width="120px">
|
||||
<template #default="scope">
|
||||
<el-button
|
||||
link
|
||||
type="primary"
|
||||
@click="openForm('update', scope.row.id)"
|
||||
v-hasPermi="['hrm:subsidy-apply:update']"
|
||||
>
|
||||
编辑
|
||||
</el-button>
|
||||
<el-button
|
||||
link
|
||||
type="danger"
|
||||
@click="handleDelete(scope.row.id)"
|
||||
v-hasPermi="['hrm:subsidy-apply:delete']"
|
||||
>
|
||||
删除
|
||||
</el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
<!-- 分页 -->
|
||||
<Pagination
|
||||
:total="total"
|
||||
v-model:page="queryParams.pageNo"
|
||||
v-model:limit="queryParams.pageSize"
|
||||
@pagination="getList"
|
||||
/>
|
||||
</ContentWrap>
|
||||
|
||||
<!-- 表单弹窗:添加/修改 -->
|
||||
<SubsidyApplyForm ref="formRef" @success="getList" />
|
||||
</template>
|
||||
|
||||
<script setup lang="ts">
|
||||
import { dateFormatter } from '@/utils/formatTime'
|
||||
import download from '@/utils/download'
|
||||
import { SubsidyApplyApi, SubsidyApplyVO } from '@/api/hrm/subsidyapply'
|
||||
import SubsidyApplyForm from './SubsidyApplyForm.vue'
|
||||
|
||||
/** 补助申请 列表 */
|
||||
defineOptions({ name: 'SubsidyApply' })
|
||||
|
||||
const message = useMessage() // 消息弹窗
|
||||
const { t } = useI18n() // 国际化
|
||||
|
||||
const loading = ref(true) // 列表的加载中
|
||||
const list = ref<SubsidyApplyVO[]>([]) // 列表的数据
|
||||
const total = ref(0) // 列表的总页数
|
||||
const queryParams = reactive({
|
||||
pageNo: 1,
|
||||
pageSize: 10,
|
||||
userId: undefined,
|
||||
processInstanceId: undefined,
|
||||
auditStatus: undefined,
|
||||
effectiveDate: [],
|
||||
applyDesc: undefined,
|
||||
elecSignature: undefined,
|
||||
createTime: []
|
||||
})
|
||||
const queryFormRef = ref() // 搜索的表单
|
||||
const exportLoading = ref(false) // 导出的加载中
|
||||
|
||||
/** 查询列表 */
|
||||
const getList = async () => {
|
||||
loading.value = true
|
||||
try {
|
||||
const data = await SubsidyApplyApi.getSubsidyApplyPage(queryParams)
|
||||
list.value = data.list
|
||||
total.value = data.total
|
||||
} finally {
|
||||
loading.value = false
|
||||
}
|
||||
}
|
||||
|
||||
/** 搜索按钮操作 */
|
||||
const handleQuery = () => {
|
||||
queryParams.pageNo = 1
|
||||
getList()
|
||||
}
|
||||
|
||||
/** 重置按钮操作 */
|
||||
const resetQuery = () => {
|
||||
queryFormRef.value.resetFields()
|
||||
handleQuery()
|
||||
}
|
||||
|
||||
/** 添加/修改操作 */
|
||||
const formRef = ref()
|
||||
const openForm = (type: string, id?: number) => {
|
||||
formRef.value.open(type, id)
|
||||
}
|
||||
|
||||
/** 删除按钮操作 */
|
||||
const handleDelete = async (id: number) => {
|
||||
try {
|
||||
// 删除的二次确认
|
||||
await message.delConfirm()
|
||||
// 发起删除
|
||||
await SubsidyApplyApi.deleteSubsidyApply(id)
|
||||
message.success(t('common.delSuccess'))
|
||||
// 刷新列表
|
||||
await getList()
|
||||
} catch {}
|
||||
}
|
||||
|
||||
/** 导出按钮操作 */
|
||||
const handleExport = async () => {
|
||||
try {
|
||||
// 导出的二次确认
|
||||
await message.exportConfirm()
|
||||
// 发起导出
|
||||
exportLoading.value = true
|
||||
const data = await SubsidyApplyApi.exportSubsidyApply(queryParams)
|
||||
download.excel(data, '补助申请.xls')
|
||||
} catch {
|
||||
} finally {
|
||||
exportLoading.value = false
|
||||
}
|
||||
}
|
||||
|
||||
/** 初始化 **/
|
||||
onMounted(() => {
|
||||
getList()
|
||||
})
|
||||
</script>
|
||||
|
|
@ -0,0 +1,118 @@
|
|||
<template>
|
||||
<Dialog :title="dialogTitle" v-model="dialogVisible">
|
||||
<el-form
|
||||
ref="formRef"
|
||||
:model="formData"
|
||||
:rules="formRules"
|
||||
label-width="100px"
|
||||
v-loading="formLoading"
|
||||
>
|
||||
<el-form-item label="补助申请ID" prop="subsidyApplicationId">
|
||||
<el-input v-model="formData.subsidyApplicationId" placeholder="请输入补助申请ID" />
|
||||
</el-form-item>
|
||||
<el-form-item label="补助类型" prop="subsidyType">
|
||||
<el-select v-model="formData.subsidyType" placeholder="请选择补助类型">
|
||||
<el-option
|
||||
v-for="dict in getIntDictOptions(DICT_TYPE.HRM_SUBSIDY_TYPE)"
|
||||
:key="dict.value"
|
||||
:label="dict.label"
|
||||
:value="dict.value"
|
||||
/>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item label="原补助金额" prop="beforeMoney">
|
||||
<el-input v-model="formData.beforeMoney" placeholder="请输入原补助金额" />
|
||||
</el-form-item>
|
||||
<el-form-item label="补助后金额" prop="afterMoney">
|
||||
<el-input v-model="formData.afterMoney" placeholder="请输入补助后金额" />
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
<template #footer>
|
||||
<el-button @click="submitForm" type="primary" :disabled="formLoading">确 定</el-button>
|
||||
<el-button @click="dialogVisible = false">取 消</el-button>
|
||||
</template>
|
||||
</Dialog>
|
||||
</template>
|
||||
<script setup lang="ts">
|
||||
import { getIntDictOptions, DICT_TYPE } from '@/utils/dict'
|
||||
import { SubsidyApplyDetailApi, SubsidyApplyDetailVO } from '@/api/hrm/subsidyapplydetail'
|
||||
|
||||
/** 补助申请明细 表单 */
|
||||
defineOptions({ name: 'SubsidyApplyDetailForm' })
|
||||
|
||||
const { t } = useI18n() // 国际化
|
||||
const message = useMessage() // 消息弹窗
|
||||
|
||||
const dialogVisible = ref(false) // 弹窗的是否展示
|
||||
const dialogTitle = ref('') // 弹窗的标题
|
||||
const formLoading = ref(false) // 表单的加载中:1)修改时的数据加载;2)提交的按钮禁用
|
||||
const formType = ref('') // 表单的类型:create - 新增;update - 修改
|
||||
const formData = ref({
|
||||
id: undefined,
|
||||
subsidyApplicationId: undefined,
|
||||
subsidyType: undefined,
|
||||
beforeMoney: undefined,
|
||||
afterMoney: undefined
|
||||
})
|
||||
const formRules = reactive({
|
||||
subsidyApplicationId: [{ required: true, message: '补助申请ID不能为空', trigger: 'blur' }],
|
||||
subsidyType: [{ required: true, message: '补助类型不能为空', trigger: 'change' }],
|
||||
beforeMoney: [{ required: true, message: '原补助金额不能为空', trigger: 'blur' }],
|
||||
afterMoney: [{ required: true, message: '补助后金额不能为空', trigger: 'blur' }]
|
||||
})
|
||||
const formRef = ref() // 表单 Ref
|
||||
|
||||
/** 打开弹窗 */
|
||||
const open = async (type: string, id?: number) => {
|
||||
dialogVisible.value = true
|
||||
dialogTitle.value = t('action.' + type)
|
||||
formType.value = type
|
||||
resetForm()
|
||||
// 修改时,设置数据
|
||||
if (id) {
|
||||
formLoading.value = true
|
||||
try {
|
||||
formData.value = await SubsidyApplyDetailApi.getSubsidyApplyDetail(id)
|
||||
} finally {
|
||||
formLoading.value = false
|
||||
}
|
||||
}
|
||||
}
|
||||
defineExpose({ open }) // 提供 open 方法,用于打开弹窗
|
||||
|
||||
/** 提交表单 */
|
||||
const emit = defineEmits(['success']) // 定义 success 事件,用于操作成功后的回调
|
||||
const submitForm = async () => {
|
||||
// 校验表单
|
||||
await formRef.value.validate()
|
||||
// 提交请求
|
||||
formLoading.value = true
|
||||
try {
|
||||
const data = formData.value as unknown as SubsidyApplyDetailVO
|
||||
if (formType.value === 'create') {
|
||||
await SubsidyApplyDetailApi.createSubsidyApplyDetail(data)
|
||||
message.success(t('common.createSuccess'))
|
||||
} else {
|
||||
await SubsidyApplyDetailApi.updateSubsidyApplyDetail(data)
|
||||
message.success(t('common.updateSuccess'))
|
||||
}
|
||||
dialogVisible.value = false
|
||||
// 发送操作成功的事件
|
||||
emit('success')
|
||||
} finally {
|
||||
formLoading.value = false
|
||||
}
|
||||
}
|
||||
|
||||
/** 重置表单 */
|
||||
const resetForm = () => {
|
||||
formData.value = {
|
||||
id: undefined,
|
||||
subsidyApplicationId: undefined,
|
||||
subsidyType: undefined,
|
||||
beforeMoney: undefined,
|
||||
afterMoney: undefined
|
||||
}
|
||||
formRef.value?.resetFields()
|
||||
}
|
||||
</script>
|
||||
|
|
@ -0,0 +1,231 @@
|
|||
<template>
|
||||
<ContentWrap>
|
||||
<!-- 搜索工作栏 -->
|
||||
<el-form
|
||||
class="-mb-15px"
|
||||
:model="queryParams"
|
||||
ref="queryFormRef"
|
||||
:inline="true"
|
||||
label-width="68px"
|
||||
>
|
||||
<el-form-item label="补助申请ID" prop="subsidyApplicationId">
|
||||
<el-input
|
||||
v-model="queryParams.subsidyApplicationId"
|
||||
placeholder="请输入补助申请ID"
|
||||
clearable
|
||||
@keyup.enter="handleQuery"
|
||||
class="!w-240px"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="补助类型" prop="subsidyType">
|
||||
<el-select
|
||||
v-model="queryParams.subsidyType"
|
||||
placeholder="请选择补助类型"
|
||||
clearable
|
||||
class="!w-240px"
|
||||
>
|
||||
<el-option
|
||||
v-for="dict in getIntDictOptions(DICT_TYPE.HRM_SUBSIDY_TYPE)"
|
||||
:key="dict.value"
|
||||
:label="dict.label"
|
||||
:value="dict.value"
|
||||
/>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item label="原补助金额" prop="beforeMoney">
|
||||
<el-input
|
||||
v-model="queryParams.beforeMoney"
|
||||
placeholder="请输入原补助金额"
|
||||
clearable
|
||||
@keyup.enter="handleQuery"
|
||||
class="!w-240px"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="补助后金额" prop="afterMoney">
|
||||
<el-input
|
||||
v-model="queryParams.afterMoney"
|
||||
placeholder="请输入补助后金额"
|
||||
clearable
|
||||
@keyup.enter="handleQuery"
|
||||
class="!w-240px"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="创建时间" prop="createTime">
|
||||
<el-date-picker
|
||||
v-model="queryParams.createTime"
|
||||
value-format="YYYY-MM-DD HH:mm:ss"
|
||||
type="daterange"
|
||||
start-placeholder="开始日期"
|
||||
end-placeholder="结束日期"
|
||||
:default-time="[new Date('1 00:00:00'), new Date('1 23:59:59')]"
|
||||
class="!w-220px"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item>
|
||||
<el-button @click="handleQuery"><Icon icon="ep:search" class="mr-5px" /> 搜索</el-button>
|
||||
<el-button @click="resetQuery"><Icon icon="ep:refresh" class="mr-5px" /> 重置</el-button>
|
||||
<el-button
|
||||
type="primary"
|
||||
plain
|
||||
@click="openForm('create')"
|
||||
v-hasPermi="['hrm:subsidy-apply-detail:create']"
|
||||
>
|
||||
<Icon icon="ep:plus" class="mr-5px" /> 新增
|
||||
</el-button>
|
||||
<el-button
|
||||
type="success"
|
||||
plain
|
||||
@click="handleExport"
|
||||
:loading="exportLoading"
|
||||
v-hasPermi="['hrm:subsidy-apply-detail:export']"
|
||||
>
|
||||
<Icon icon="ep:download" class="mr-5px" /> 导出
|
||||
</el-button>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
</ContentWrap>
|
||||
|
||||
<!-- 列表 -->
|
||||
<ContentWrap>
|
||||
<el-table v-loading="loading" :data="list" :stripe="true" :show-overflow-tooltip="true">
|
||||
<el-table-column label="主键,自动递增" align="center" prop="id" />
|
||||
<el-table-column label="补助申请ID" align="center" prop="subsidyApplicationId" />
|
||||
<el-table-column label="补助类型" align="center" prop="subsidyType">
|
||||
<template #default="scope">
|
||||
<dict-tag :type="DICT_TYPE.HRM_SUBSIDY_TYPE" :value="scope.row.subsidyType" />
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="原补助金额" align="center" prop="beforeMoney" />
|
||||
<el-table-column label="补助后金额" align="center" prop="afterMoney" />
|
||||
<el-table-column
|
||||
label="创建时间"
|
||||
align="center"
|
||||
prop="createTime"
|
||||
:formatter="dateFormatter"
|
||||
width="180px"
|
||||
/>
|
||||
<el-table-column label="操作" align="center" min-width="120px">
|
||||
<template #default="scope">
|
||||
<el-button
|
||||
link
|
||||
type="primary"
|
||||
@click="openForm('update', scope.row.id)"
|
||||
v-hasPermi="['hrm:subsidy-apply-detail:update']"
|
||||
>
|
||||
编辑
|
||||
</el-button>
|
||||
<el-button
|
||||
link
|
||||
type="danger"
|
||||
@click="handleDelete(scope.row.id)"
|
||||
v-hasPermi="['hrm:subsidy-apply-detail:delete']"
|
||||
>
|
||||
删除
|
||||
</el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
<!-- 分页 -->
|
||||
<Pagination
|
||||
:total="total"
|
||||
v-model:page="queryParams.pageNo"
|
||||
v-model:limit="queryParams.pageSize"
|
||||
@pagination="getList"
|
||||
/>
|
||||
</ContentWrap>
|
||||
|
||||
<!-- 表单弹窗:添加/修改 -->
|
||||
<SubsidyApplyDetailForm ref="formRef" @success="getList" />
|
||||
</template>
|
||||
|
||||
<script setup lang="ts">
|
||||
import { getIntDictOptions, DICT_TYPE } from '@/utils/dict'
|
||||
import { dateFormatter } from '@/utils/formatTime'
|
||||
import download from '@/utils/download'
|
||||
import { SubsidyApplyDetailApi, SubsidyApplyDetailVO } from '@/api/hrm/subsidyapplydetail'
|
||||
import SubsidyApplyDetailForm from './SubsidyApplyDetailForm.vue'
|
||||
|
||||
/** 补助申请明细 列表 */
|
||||
defineOptions({ name: 'SubsidyApplyDetail' })
|
||||
|
||||
const message = useMessage() // 消息弹窗
|
||||
const { t } = useI18n() // 国际化
|
||||
|
||||
const loading = ref(true) // 列表的加载中
|
||||
const list = ref<SubsidyApplyDetailVO[]>([]) // 列表的数据
|
||||
const total = ref(0) // 列表的总页数
|
||||
const queryParams = reactive({
|
||||
pageNo: 1,
|
||||
pageSize: 10,
|
||||
subsidyApplicationId: undefined,
|
||||
subsidyType: undefined,
|
||||
beforeMoney: undefined,
|
||||
afterMoney: undefined,
|
||||
createTime: []
|
||||
})
|
||||
const queryFormRef = ref() // 搜索的表单
|
||||
const exportLoading = ref(false) // 导出的加载中
|
||||
|
||||
/** 查询列表 */
|
||||
const getList = async () => {
|
||||
loading.value = true
|
||||
try {
|
||||
const data = await SubsidyApplyDetailApi.getSubsidyApplyDetailPage(queryParams)
|
||||
list.value = data.list
|
||||
total.value = data.total
|
||||
} finally {
|
||||
loading.value = false
|
||||
}
|
||||
}
|
||||
|
||||
/** 搜索按钮操作 */
|
||||
const handleQuery = () => {
|
||||
queryParams.pageNo = 1
|
||||
getList()
|
||||
}
|
||||
|
||||
/** 重置按钮操作 */
|
||||
const resetQuery = () => {
|
||||
queryFormRef.value.resetFields()
|
||||
handleQuery()
|
||||
}
|
||||
|
||||
/** 添加/修改操作 */
|
||||
const formRef = ref()
|
||||
const openForm = (type: string, id?: number) => {
|
||||
formRef.value.open(type, id)
|
||||
}
|
||||
|
||||
/** 删除按钮操作 */
|
||||
const handleDelete = async (id: number) => {
|
||||
try {
|
||||
// 删除的二次确认
|
||||
await message.delConfirm()
|
||||
// 发起删除
|
||||
await SubsidyApplyDetailApi.deleteSubsidyApplyDetail(id)
|
||||
message.success(t('common.delSuccess'))
|
||||
// 刷新列表
|
||||
await getList()
|
||||
} catch {}
|
||||
}
|
||||
|
||||
/** 导出按钮操作 */
|
||||
const handleExport = async () => {
|
||||
try {
|
||||
// 导出的二次确认
|
||||
await message.exportConfirm()
|
||||
// 发起导出
|
||||
exportLoading.value = true
|
||||
const data = await SubsidyApplyDetailApi.exportSubsidyApplyDetail(queryParams)
|
||||
download.excel(data, '补助申请明细.xls')
|
||||
} catch {
|
||||
} finally {
|
||||
exportLoading.value = false
|
||||
}
|
||||
}
|
||||
|
||||
/** 初始化 **/
|
||||
onMounted(() => {
|
||||
getList()
|
||||
})
|
||||
</script>
|
||||
|
|
@ -0,0 +1,216 @@
|
|||
<template>
|
||||
<Dialog :title="dialogTitle" v-model="dialogVisible">
|
||||
<el-form
|
||||
ref="formRef"
|
||||
:model="formData"
|
||||
:rules="formRules"
|
||||
label-width="100px"
|
||||
v-loading="formLoading"
|
||||
>
|
||||
<el-form-item label="招聘需求ID" prop="recruitmentRequestId">
|
||||
<el-input v-model="formData.recruitmentRequestId" placeholder="请输入招聘需求ID" />
|
||||
</el-form-item>
|
||||
<el-form-item label="姓名" prop="name">
|
||||
<el-input v-model="formData.name" placeholder="请输入姓名" />
|
||||
</el-form-item>
|
||||
<el-form-item label="性别" prop="gender">
|
||||
<el-select v-model="formData.gender" placeholder="请选择性别">
|
||||
<el-option
|
||||
v-for="dict in getStrDictOptions(DICT_TYPE.SYSTEM_USER_SEX)"
|
||||
:key="dict.value"
|
||||
:label="dict.label"
|
||||
:value="dict.value"
|
||||
/>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item label="籍贯" prop="birthPlace">
|
||||
<el-input v-model="formData.birthPlace" placeholder="请输入籍贯" />
|
||||
</el-form-item>
|
||||
<el-form-item label="年龄" prop="age">
|
||||
<el-input v-model="formData.age" placeholder="请输入年龄" />
|
||||
</el-form-item>
|
||||
<el-form-item label="电子邮箱" prop="email">
|
||||
<el-input v-model="formData.email" placeholder="请输入电子邮箱" />
|
||||
</el-form-item>
|
||||
<el-form-item label="学校" prop="school">
|
||||
<el-input v-model="formData.school" placeholder="请输入学校" />
|
||||
</el-form-item>
|
||||
<el-form-item label="专业" prop="major">
|
||||
<el-input v-model="formData.major" placeholder="请输入专业" />
|
||||
</el-form-item>
|
||||
<el-form-item label="手机号" prop="phone">
|
||||
<el-input v-model="formData.phone" placeholder="请输入手机号" />
|
||||
</el-form-item>
|
||||
<el-form-item label="出生日期" prop="birthday">
|
||||
<el-input v-model="formData.birthday" placeholder="请输入出生日期" />
|
||||
</el-form-item>
|
||||
<el-form-item label="岗位id" prop="postId">
|
||||
<el-input v-model="formData.postId" placeholder="请输入岗位id" />
|
||||
</el-form-item>
|
||||
<el-form-item label="意向岗位名称" prop="desiredPosition">
|
||||
<el-input v-model="formData.desiredPosition" placeholder="请输入意向岗位名称" />
|
||||
</el-form-item>
|
||||
<el-form-item label="意向城市" prop="desiredCity">
|
||||
<el-input v-model="formData.desiredCity" placeholder="请输入意向城市" />
|
||||
</el-form-item>
|
||||
<el-form-item label="最高学历(大专、本科、硕士、博士)" prop="highestEducation">
|
||||
<el-input v-model="formData.highestEducation" placeholder="请输入最高学历(大专、本科、硕士、博士)" />
|
||||
</el-form-item>
|
||||
<el-form-item label="个人照片" prop="personalPhoto">
|
||||
<el-input v-model="formData.personalPhoto" placeholder="请输入个人照片" />
|
||||
</el-form-item>
|
||||
<el-form-item label="工作案例附件" prop="workCaseAttachment">
|
||||
<el-input v-model="formData.workCaseAttachment" placeholder="请输入工作案例附件" />
|
||||
</el-form-item>
|
||||
<el-form-item label="简历附件" prop="resumeAttachment">
|
||||
<el-input v-model="formData.resumeAttachment" placeholder="请输入简历附件" />
|
||||
</el-form-item>
|
||||
<el-form-item label="是否内推(内部推荐、BOSS直聘、猎聘、智联招聘、脉脉、公众号)" prop="isInternalRef">
|
||||
<el-select v-model="formData.isInternalRef" placeholder="请选择是否内推(内部推荐、BOSS直聘、猎聘、智联招聘、脉脉、公众号)">
|
||||
<el-option
|
||||
v-for="dict in getIntDictOptions(DICT_TYPE.HRM_INTERNAL_REF)"
|
||||
:key="dict.value"
|
||||
:label="dict.label"
|
||||
:value="dict.value"
|
||||
/>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item label="婚育情况(未婚、已婚未育、已婚已育)" prop="maritalStatus">
|
||||
<el-select v-model="formData.maritalStatus" placeholder="请选择婚育情况(未婚、已婚未育、已婚已育)">
|
||||
<el-option
|
||||
v-for="dict in getIntDictOptions(DICT_TYPE.HRM_MARITAL_STATUS)"
|
||||
:key="dict.value"
|
||||
:label="dict.label"
|
||||
:value="dict.value"
|
||||
/>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item label="部门ID" prop="deptId">
|
||||
<el-input v-model="formData.deptId" placeholder="请输入部门ID" />
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
<template #footer>
|
||||
<el-button @click="submitForm" type="primary" :disabled="formLoading">确 定</el-button>
|
||||
<el-button @click="dialogVisible = false">取 消</el-button>
|
||||
</template>
|
||||
</Dialog>
|
||||
</template>
|
||||
<script setup lang="ts">
|
||||
import { getIntDictOptions, getStrDictOptions, DICT_TYPE } from '@/utils/dict'
|
||||
import { TalentPoolApi, TalentPoolVO } from '@/api/hrm/talentpool'
|
||||
|
||||
/** 人才库 表单 */
|
||||
defineOptions({ name: 'TalentPoolForm' })
|
||||
|
||||
const { t } = useI18n() // 国际化
|
||||
const message = useMessage() // 消息弹窗
|
||||
|
||||
const dialogVisible = ref(false) // 弹窗的是否展示
|
||||
const dialogTitle = ref('') // 弹窗的标题
|
||||
const formLoading = ref(false) // 表单的加载中:1)修改时的数据加载;2)提交的按钮禁用
|
||||
const formType = ref('') // 表单的类型:create - 新增;update - 修改
|
||||
const formData = ref({
|
||||
id: undefined,
|
||||
recruitmentRequestId: undefined,
|
||||
name: undefined,
|
||||
gender: undefined,
|
||||
birthPlace: undefined,
|
||||
age: undefined,
|
||||
email: undefined,
|
||||
school: undefined,
|
||||
major: undefined,
|
||||
phone: undefined,
|
||||
birthday: undefined,
|
||||
postId: undefined,
|
||||
desiredPosition: undefined,
|
||||
desiredCity: undefined,
|
||||
highestEducation: undefined,
|
||||
personalPhoto: undefined,
|
||||
workCaseAttachment: undefined,
|
||||
resumeAttachment: undefined,
|
||||
isInternalRef: undefined,
|
||||
maritalStatus: undefined,
|
||||
deptId: undefined
|
||||
})
|
||||
const formRules = reactive({
|
||||
name: [{ required: true, message: '姓名不能为空', trigger: 'blur' }],
|
||||
phone: [{ required: true, message: '手机号不能为空', trigger: 'blur' }],
|
||||
desiredPosition: [{ required: true, message: '意向岗位名称不能为空', trigger: 'blur' }],
|
||||
desiredCity: [{ required: true, message: '意向城市不能为空', trigger: 'blur' }],
|
||||
highestEducation: [{ required: true, message: '最高学历(大专、本科、硕士、博士)不能为空', trigger: 'blur' }],
|
||||
isInternalRef: [{ required: true, message: '是否内推(内部推荐、BOSS直聘、猎聘、智联招聘、脉脉、公众号)不能为空', trigger: 'change' }],
|
||||
maritalStatus: [{ required: true, message: '婚育情况(未婚、已婚未育、已婚已育)不能为空', trigger: 'change' }],
|
||||
deptId: [{ required: true, message: '部门ID不能为空', trigger: 'blur' }]
|
||||
})
|
||||
const formRef = ref() // 表单 Ref
|
||||
|
||||
/** 打开弹窗 */
|
||||
const open = async (type: string, id?: number) => {
|
||||
dialogVisible.value = true
|
||||
dialogTitle.value = t('action.' + type)
|
||||
formType.value = type
|
||||
resetForm()
|
||||
// 修改时,设置数据
|
||||
if (id) {
|
||||
formLoading.value = true
|
||||
try {
|
||||
formData.value = await TalentPoolApi.getTalentPool(id)
|
||||
} finally {
|
||||
formLoading.value = false
|
||||
}
|
||||
}
|
||||
}
|
||||
defineExpose({ open }) // 提供 open 方法,用于打开弹窗
|
||||
|
||||
/** 提交表单 */
|
||||
const emit = defineEmits(['success']) // 定义 success 事件,用于操作成功后的回调
|
||||
const submitForm = async () => {
|
||||
// 校验表单
|
||||
await formRef.value.validate()
|
||||
// 提交请求
|
||||
formLoading.value = true
|
||||
try {
|
||||
const data = formData.value as unknown as TalentPoolVO
|
||||
if (formType.value === 'create') {
|
||||
await TalentPoolApi.createTalentPool(data)
|
||||
message.success(t('common.createSuccess'))
|
||||
} else {
|
||||
await TalentPoolApi.updateTalentPool(data)
|
||||
message.success(t('common.updateSuccess'))
|
||||
}
|
||||
dialogVisible.value = false
|
||||
// 发送操作成功的事件
|
||||
emit('success')
|
||||
} finally {
|
||||
formLoading.value = false
|
||||
}
|
||||
}
|
||||
|
||||
/** 重置表单 */
|
||||
const resetForm = () => {
|
||||
formData.value = {
|
||||
id: undefined,
|
||||
recruitmentRequestId: undefined,
|
||||
name: undefined,
|
||||
gender: undefined,
|
||||
birthPlace: undefined,
|
||||
age: undefined,
|
||||
email: undefined,
|
||||
school: undefined,
|
||||
major: undefined,
|
||||
phone: undefined,
|
||||
birthday: undefined,
|
||||
postId: undefined,
|
||||
desiredPosition: undefined,
|
||||
desiredCity: undefined,
|
||||
highestEducation: undefined,
|
||||
personalPhoto: undefined,
|
||||
workCaseAttachment: undefined,
|
||||
resumeAttachment: undefined,
|
||||
isInternalRef: undefined,
|
||||
maritalStatus: undefined,
|
||||
deptId: undefined
|
||||
}
|
||||
formRef.value?.resetFields()
|
||||
}
|
||||
</script>
|
||||
|
|
@ -0,0 +1,427 @@
|
|||
<template>
|
||||
<ContentWrap>
|
||||
<!-- 搜索工作栏 -->
|
||||
<el-form
|
||||
class="-mb-15px"
|
||||
:model="queryParams"
|
||||
ref="queryFormRef"
|
||||
:inline="true"
|
||||
label-width="68px"
|
||||
>
|
||||
<el-form-item label="招聘需求ID" prop="recruitmentRequestId">
|
||||
<el-input
|
||||
v-model="queryParams.recruitmentRequestId"
|
||||
placeholder="请输入招聘需求ID"
|
||||
clearable
|
||||
@keyup.enter="handleQuery"
|
||||
class="!w-240px"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="姓名" prop="name">
|
||||
<el-input
|
||||
v-model="queryParams.name"
|
||||
placeholder="请输入姓名"
|
||||
clearable
|
||||
@keyup.enter="handleQuery"
|
||||
class="!w-240px"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="性别" prop="gender">
|
||||
<el-select
|
||||
v-model="queryParams.gender"
|
||||
placeholder="请选择性别"
|
||||
clearable
|
||||
class="!w-240px"
|
||||
>
|
||||
<el-option
|
||||
v-for="dict in getStrDictOptions(DICT_TYPE.SYSTEM_USER_SEX)"
|
||||
:key="dict.value"
|
||||
:label="dict.label"
|
||||
:value="dict.value"
|
||||
/>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item label="籍贯" prop="birthPlace">
|
||||
<el-input
|
||||
v-model="queryParams.birthPlace"
|
||||
placeholder="请输入籍贯"
|
||||
clearable
|
||||
@keyup.enter="handleQuery"
|
||||
class="!w-240px"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="年龄" prop="age">
|
||||
<el-input
|
||||
v-model="queryParams.age"
|
||||
placeholder="请输入年龄"
|
||||
clearable
|
||||
@keyup.enter="handleQuery"
|
||||
class="!w-240px"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="电子邮箱" prop="email">
|
||||
<el-input
|
||||
v-model="queryParams.email"
|
||||
placeholder="请输入电子邮箱"
|
||||
clearable
|
||||
@keyup.enter="handleQuery"
|
||||
class="!w-240px"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="学校" prop="school">
|
||||
<el-input
|
||||
v-model="queryParams.school"
|
||||
placeholder="请输入学校"
|
||||
clearable
|
||||
@keyup.enter="handleQuery"
|
||||
class="!w-240px"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="专业" prop="major">
|
||||
<el-input
|
||||
v-model="queryParams.major"
|
||||
placeholder="请输入专业"
|
||||
clearable
|
||||
@keyup.enter="handleQuery"
|
||||
class="!w-240px"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="手机号" prop="phone">
|
||||
<el-input
|
||||
v-model="queryParams.phone"
|
||||
placeholder="请输入手机号"
|
||||
clearable
|
||||
@keyup.enter="handleQuery"
|
||||
class="!w-240px"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="出生日期" prop="birthday">
|
||||
<el-input
|
||||
v-model="queryParams.birthday"
|
||||
placeholder="请输入出生日期"
|
||||
clearable
|
||||
@keyup.enter="handleQuery"
|
||||
class="!w-240px"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="岗位id" prop="postId">
|
||||
<el-input
|
||||
v-model="queryParams.postId"
|
||||
placeholder="请输入岗位id"
|
||||
clearable
|
||||
@keyup.enter="handleQuery"
|
||||
class="!w-240px"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="意向岗位名称" prop="desiredPosition">
|
||||
<el-input
|
||||
v-model="queryParams.desiredPosition"
|
||||
placeholder="请输入意向岗位名称"
|
||||
clearable
|
||||
@keyup.enter="handleQuery"
|
||||
class="!w-240px"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="意向城市" prop="desiredCity">
|
||||
<el-input
|
||||
v-model="queryParams.desiredCity"
|
||||
placeholder="请输入意向城市"
|
||||
clearable
|
||||
@keyup.enter="handleQuery"
|
||||
class="!w-240px"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="最高学历(大专、本科、硕士、博士)" prop="highestEducation">
|
||||
<el-input
|
||||
v-model="queryParams.highestEducation"
|
||||
placeholder="请输入最高学历(大专、本科、硕士、博士)"
|
||||
clearable
|
||||
@keyup.enter="handleQuery"
|
||||
class="!w-240px"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="个人照片" prop="personalPhoto">
|
||||
<el-input
|
||||
v-model="queryParams.personalPhoto"
|
||||
placeholder="请输入个人照片"
|
||||
clearable
|
||||
@keyup.enter="handleQuery"
|
||||
class="!w-240px"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="工作案例附件" prop="workCaseAttachment">
|
||||
<el-input
|
||||
v-model="queryParams.workCaseAttachment"
|
||||
placeholder="请输入工作案例附件"
|
||||
clearable
|
||||
@keyup.enter="handleQuery"
|
||||
class="!w-240px"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="简历附件" prop="resumeAttachment">
|
||||
<el-input
|
||||
v-model="queryParams.resumeAttachment"
|
||||
placeholder="请输入简历附件"
|
||||
clearable
|
||||
@keyup.enter="handleQuery"
|
||||
class="!w-240px"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="是否内推(内部推荐、BOSS直聘、猎聘、智联招聘、脉脉、公众号)" prop="isInternalRef">
|
||||
<el-select
|
||||
v-model="queryParams.isInternalRef"
|
||||
placeholder="请选择是否内推(内部推荐、BOSS直聘、猎聘、智联招聘、脉脉、公众号)"
|
||||
clearable
|
||||
class="!w-240px"
|
||||
>
|
||||
<el-option
|
||||
v-for="dict in getIntDictOptions(DICT_TYPE.HRM_INTERNAL_REF)"
|
||||
:key="dict.value"
|
||||
:label="dict.label"
|
||||
:value="dict.value"
|
||||
/>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item label="婚育情况(未婚、已婚未育、已婚已育)" prop="maritalStatus">
|
||||
<el-select
|
||||
v-model="queryParams.maritalStatus"
|
||||
placeholder="请选择婚育情况(未婚、已婚未育、已婚已育)"
|
||||
clearable
|
||||
class="!w-240px"
|
||||
>
|
||||
<el-option
|
||||
v-for="dict in getIntDictOptions(DICT_TYPE.HRM_MARITAL_STATUS)"
|
||||
:key="dict.value"
|
||||
:label="dict.label"
|
||||
:value="dict.value"
|
||||
/>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item label="部门ID" prop="deptId">
|
||||
<el-input
|
||||
v-model="queryParams.deptId"
|
||||
placeholder="请输入部门ID"
|
||||
clearable
|
||||
@keyup.enter="handleQuery"
|
||||
class="!w-240px"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="创建时间" prop="createTime">
|
||||
<el-date-picker
|
||||
v-model="queryParams.createTime"
|
||||
value-format="YYYY-MM-DD HH:mm:ss"
|
||||
type="daterange"
|
||||
start-placeholder="开始日期"
|
||||
end-placeholder="结束日期"
|
||||
:default-time="[new Date('1 00:00:00'), new Date('1 23:59:59')]"
|
||||
class="!w-220px"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item>
|
||||
<el-button @click="handleQuery"><Icon icon="ep:search" class="mr-5px" /> 搜索</el-button>
|
||||
<el-button @click="resetQuery"><Icon icon="ep:refresh" class="mr-5px" /> 重置</el-button>
|
||||
<el-button
|
||||
type="primary"
|
||||
plain
|
||||
@click="openForm('create')"
|
||||
v-hasPermi="['hrm:talent-pool:create']"
|
||||
>
|
||||
<Icon icon="ep:plus" class="mr-5px" /> 新增
|
||||
</el-button>
|
||||
<el-button
|
||||
type="success"
|
||||
plain
|
||||
@click="handleExport"
|
||||
:loading="exportLoading"
|
||||
v-hasPermi="['hrm:talent-pool:export']"
|
||||
>
|
||||
<Icon icon="ep:download" class="mr-5px" /> 导出
|
||||
</el-button>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
</ContentWrap>
|
||||
|
||||
<!-- 列表 -->
|
||||
<ContentWrap>
|
||||
<el-table v-loading="loading" :data="list" :stripe="true" :show-overflow-tooltip="true">
|
||||
<el-table-column label="主键ID" align="center" prop="id" />
|
||||
<el-table-column label="招聘需求ID" align="center" prop="recruitmentRequestId" />
|
||||
<el-table-column label="姓名" align="center" prop="name" />
|
||||
<el-table-column label="性别" align="center" prop="gender">
|
||||
<template #default="scope">
|
||||
<dict-tag :type="DICT_TYPE.SYSTEM_USER_SEX" :value="scope.row.gender" />
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="籍贯" align="center" prop="birthPlace" />
|
||||
<el-table-column label="年龄" align="center" prop="age" />
|
||||
<el-table-column label="电子邮箱" align="center" prop="email" />
|
||||
<el-table-column label="学校" align="center" prop="school" />
|
||||
<el-table-column label="专业" align="center" prop="major" />
|
||||
<el-table-column label="手机号" align="center" prop="phone" />
|
||||
<el-table-column label="出生日期" align="center" prop="birthday" />
|
||||
<el-table-column label="岗位id" align="center" prop="postId" />
|
||||
<el-table-column label="意向岗位名称" align="center" prop="desiredPosition" />
|
||||
<el-table-column label="意向城市" align="center" prop="desiredCity" />
|
||||
<el-table-column label="最高学历(大专、本科、硕士、博士)" align="center" prop="highestEducation" />
|
||||
<el-table-column label="个人照片" align="center" prop="personalPhoto" />
|
||||
<el-table-column label="工作案例附件" align="center" prop="workCaseAttachment" />
|
||||
<el-table-column label="简历附件" align="center" prop="resumeAttachment" />
|
||||
<el-table-column label="是否内推(内部推荐、BOSS直聘、猎聘、智联招聘、脉脉、公众号)" align="center" prop="isInternalRef">
|
||||
<template #default="scope">
|
||||
<dict-tag :type="DICT_TYPE.HRM_INTERNAL_REF" :value="scope.row.isInternalRef" />
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="婚育情况(未婚、已婚未育、已婚已育)" align="center" prop="maritalStatus">
|
||||
<template #default="scope">
|
||||
<dict-tag :type="DICT_TYPE.HRM_MARITAL_STATUS" :value="scope.row.maritalStatus" />
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="部门ID" align="center" prop="deptId" />
|
||||
<el-table-column
|
||||
label="创建时间"
|
||||
align="center"
|
||||
prop="createTime"
|
||||
:formatter="dateFormatter"
|
||||
width="180px"
|
||||
/>
|
||||
<el-table-column label="操作" align="center" min-width="120px">
|
||||
<template #default="scope">
|
||||
<el-button
|
||||
link
|
||||
type="primary"
|
||||
@click="openForm('update', scope.row.id)"
|
||||
v-hasPermi="['hrm:talent-pool:update']"
|
||||
>
|
||||
编辑
|
||||
</el-button>
|
||||
<el-button
|
||||
link
|
||||
type="danger"
|
||||
@click="handleDelete(scope.row.id)"
|
||||
v-hasPermi="['hrm:talent-pool:delete']"
|
||||
>
|
||||
删除
|
||||
</el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
<!-- 分页 -->
|
||||
<Pagination
|
||||
:total="total"
|
||||
v-model:page="queryParams.pageNo"
|
||||
v-model:limit="queryParams.pageSize"
|
||||
@pagination="getList"
|
||||
/>
|
||||
</ContentWrap>
|
||||
|
||||
<!-- 表单弹窗:添加/修改 -->
|
||||
<TalentPoolForm ref="formRef" @success="getList" />
|
||||
</template>
|
||||
|
||||
<script setup lang="ts">
|
||||
import { getIntDictOptions, getStrDictOptions, DICT_TYPE } from '@/utils/dict'
|
||||
import { dateFormatter } from '@/utils/formatTime'
|
||||
import download from '@/utils/download'
|
||||
import { TalentPoolApi, TalentPoolVO } from '@/api/hrm/talentpool'
|
||||
import TalentPoolForm from './TalentPoolForm.vue'
|
||||
|
||||
/** 人才库 列表 */
|
||||
defineOptions({ name: 'TalentPool' })
|
||||
|
||||
const message = useMessage() // 消息弹窗
|
||||
const { t } = useI18n() // 国际化
|
||||
|
||||
const loading = ref(true) // 列表的加载中
|
||||
const list = ref<TalentPoolVO[]>([]) // 列表的数据
|
||||
const total = ref(0) // 列表的总页数
|
||||
const queryParams = reactive({
|
||||
pageNo: 1,
|
||||
pageSize: 10,
|
||||
recruitmentRequestId: undefined,
|
||||
name: undefined,
|
||||
gender: undefined,
|
||||
birthPlace: undefined,
|
||||
age: undefined,
|
||||
email: undefined,
|
||||
school: undefined,
|
||||
major: undefined,
|
||||
phone: undefined,
|
||||
birthday: undefined,
|
||||
postId: undefined,
|
||||
desiredPosition: undefined,
|
||||
desiredCity: undefined,
|
||||
highestEducation: undefined,
|
||||
personalPhoto: undefined,
|
||||
workCaseAttachment: undefined,
|
||||
resumeAttachment: undefined,
|
||||
isInternalRef: undefined,
|
||||
maritalStatus: undefined,
|
||||
deptId: undefined,
|
||||
createTime: []
|
||||
})
|
||||
const queryFormRef = ref() // 搜索的表单
|
||||
const exportLoading = ref(false) // 导出的加载中
|
||||
|
||||
/** 查询列表 */
|
||||
const getList = async () => {
|
||||
loading.value = true
|
||||
try {
|
||||
const data = await TalentPoolApi.getTalentPoolPage(queryParams)
|
||||
list.value = data.list
|
||||
total.value = data.total
|
||||
} finally {
|
||||
loading.value = false
|
||||
}
|
||||
}
|
||||
|
||||
/** 搜索按钮操作 */
|
||||
const handleQuery = () => {
|
||||
queryParams.pageNo = 1
|
||||
getList()
|
||||
}
|
||||
|
||||
/** 重置按钮操作 */
|
||||
const resetQuery = () => {
|
||||
queryFormRef.value.resetFields()
|
||||
handleQuery()
|
||||
}
|
||||
|
||||
/** 添加/修改操作 */
|
||||
const formRef = ref()
|
||||
const openForm = (type: string, id?: number) => {
|
||||
formRef.value.open(type, id)
|
||||
}
|
||||
|
||||
/** 删除按钮操作 */
|
||||
const handleDelete = async (id: number) => {
|
||||
try {
|
||||
// 删除的二次确认
|
||||
await message.delConfirm()
|
||||
// 发起删除
|
||||
await TalentPoolApi.deleteTalentPool(id)
|
||||
message.success(t('common.delSuccess'))
|
||||
// 刷新列表
|
||||
await getList()
|
||||
} catch {}
|
||||
}
|
||||
|
||||
/** 导出按钮操作 */
|
||||
const handleExport = async () => {
|
||||
try {
|
||||
// 导出的二次确认
|
||||
await message.exportConfirm()
|
||||
// 发起导出
|
||||
exportLoading.value = true
|
||||
const data = await TalentPoolApi.exportTalentPool(queryParams)
|
||||
download.excel(data, '人才库.xls')
|
||||
} catch {
|
||||
} finally {
|
||||
exportLoading.value = false
|
||||
}
|
||||
}
|
||||
|
||||
/** 初始化 **/
|
||||
onMounted(() => {
|
||||
getList()
|
||||
})
|
||||
</script>
|
||||
|
|
@ -0,0 +1,159 @@
|
|||
<template>
|
||||
<Dialog :title="dialogTitle" v-model="dialogVisible">
|
||||
<el-form
|
||||
ref="formRef"
|
||||
:model="formData"
|
||||
:rules="formRules"
|
||||
label-width="100px"
|
||||
v-loading="formLoading"
|
||||
>
|
||||
<el-form-item label="课件ID,关联courseware表" prop="coursewareId">
|
||||
<el-input v-model="formData.coursewareId" placeholder="请输入课件ID,关联courseware表" />
|
||||
</el-form-item>
|
||||
<el-form-item label="培训名称" prop="trainingName">
|
||||
<el-input v-model="formData.trainingName" placeholder="请输入培训名称" />
|
||||
</el-form-item>
|
||||
<el-form-item label="工作流编号" prop="processInstanceId">
|
||||
<el-input v-model="formData.processInstanceId" placeholder="请输入工作流编号" />
|
||||
</el-form-item>
|
||||
<el-form-item label="审批状态" prop="auditStatus">
|
||||
<el-radio-group v-model="formData.auditStatus">
|
||||
<el-radio value="1">请选择字典生成</el-radio>
|
||||
</el-radio-group>
|
||||
</el-form-item>
|
||||
<el-form-item label="培训开始时间" prop="startTime">
|
||||
<el-date-picker
|
||||
v-model="formData.startTime"
|
||||
type="date"
|
||||
value-format="x"
|
||||
placeholder="选择培训开始时间"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="培训结束时间" prop="endTime">
|
||||
<el-date-picker
|
||||
v-model="formData.endTime"
|
||||
type="date"
|
||||
value-format="x"
|
||||
placeholder="选择培训结束时间"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="培训学时" prop="trainingHours">
|
||||
<el-input v-model="formData.trainingHours" placeholder="请输入培训学时" />
|
||||
</el-form-item>
|
||||
<el-form-item label="讲师" prop="lecturer">
|
||||
<el-input v-model="formData.lecturer" placeholder="请输入讲师" />
|
||||
</el-form-item>
|
||||
<el-form-item label="培训地点" prop="trainingLocation">
|
||||
<el-input v-model="formData.trainingLocation" placeholder="请输入培训地点" />
|
||||
</el-form-item>
|
||||
<el-form-item label="培训目的" prop="trainingPurpose">
|
||||
<el-input v-model="formData.trainingPurpose" placeholder="请输入培训目的" />
|
||||
</el-form-item>
|
||||
<el-form-item label="部门ID" prop="deptId">
|
||||
<el-input v-model="formData.deptId" placeholder="请输入部门ID" />
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
<template #footer>
|
||||
<el-button @click="submitForm" type="primary" :disabled="formLoading">确 定</el-button>
|
||||
<el-button @click="dialogVisible = false">取 消</el-button>
|
||||
</template>
|
||||
</Dialog>
|
||||
</template>
|
||||
<script setup lang="ts">
|
||||
import { TrainingApi, TrainingVO } from '@/api/hrm/training'
|
||||
|
||||
/** 培训信息 表单 */
|
||||
defineOptions({ name: 'TrainingForm' })
|
||||
|
||||
const { t } = useI18n() // 国际化
|
||||
const message = useMessage() // 消息弹窗
|
||||
|
||||
const dialogVisible = ref(false) // 弹窗的是否展示
|
||||
const dialogTitle = ref('') // 弹窗的标题
|
||||
const formLoading = ref(false) // 表单的加载中:1)修改时的数据加载;2)提交的按钮禁用
|
||||
const formType = ref('') // 表单的类型:create - 新增;update - 修改
|
||||
const formData = ref({
|
||||
id: undefined,
|
||||
coursewareId: undefined,
|
||||
trainingName: undefined,
|
||||
processInstanceId: undefined,
|
||||
auditStatus: undefined,
|
||||
startTime: undefined,
|
||||
endTime: undefined,
|
||||
trainingHours: undefined,
|
||||
lecturer: undefined,
|
||||
trainingLocation: undefined,
|
||||
trainingPurpose: undefined,
|
||||
deptId: undefined
|
||||
})
|
||||
const formRules = reactive({
|
||||
coursewareId: [{ required: true, message: '课件ID,关联courseware表不能为空', trigger: 'blur' }],
|
||||
trainingName: [{ required: true, message: '培训名称不能为空', trigger: 'blur' }],
|
||||
auditStatus: [{ required: true, message: '审批状态不能为空', trigger: 'blur' }],
|
||||
startTime: [{ required: true, message: '培训开始时间不能为空', trigger: 'blur' }],
|
||||
endTime: [{ required: true, message: '培训结束时间不能为空', trigger: 'blur' }],
|
||||
deptId: [{ required: true, message: '部门ID不能为空', trigger: 'blur' }]
|
||||
})
|
||||
const formRef = ref() // 表单 Ref
|
||||
|
||||
/** 打开弹窗 */
|
||||
const open = async (type: string, id?: number) => {
|
||||
dialogVisible.value = true
|
||||
dialogTitle.value = t('action.' + type)
|
||||
formType.value = type
|
||||
resetForm()
|
||||
// 修改时,设置数据
|
||||
if (id) {
|
||||
formLoading.value = true
|
||||
try {
|
||||
formData.value = await TrainingApi.getTraining(id)
|
||||
} finally {
|
||||
formLoading.value = false
|
||||
}
|
||||
}
|
||||
}
|
||||
defineExpose({ open }) // 提供 open 方法,用于打开弹窗
|
||||
|
||||
/** 提交表单 */
|
||||
const emit = defineEmits(['success']) // 定义 success 事件,用于操作成功后的回调
|
||||
const submitForm = async () => {
|
||||
// 校验表单
|
||||
await formRef.value.validate()
|
||||
// 提交请求
|
||||
formLoading.value = true
|
||||
try {
|
||||
const data = formData.value as unknown as TrainingVO
|
||||
if (formType.value === 'create') {
|
||||
await TrainingApi.createTraining(data)
|
||||
message.success(t('common.createSuccess'))
|
||||
} else {
|
||||
await TrainingApi.updateTraining(data)
|
||||
message.success(t('common.updateSuccess'))
|
||||
}
|
||||
dialogVisible.value = false
|
||||
// 发送操作成功的事件
|
||||
emit('success')
|
||||
} finally {
|
||||
formLoading.value = false
|
||||
}
|
||||
}
|
||||
|
||||
/** 重置表单 */
|
||||
const resetForm = () => {
|
||||
formData.value = {
|
||||
id: undefined,
|
||||
coursewareId: undefined,
|
||||
trainingName: undefined,
|
||||
processInstanceId: undefined,
|
||||
auditStatus: undefined,
|
||||
startTime: undefined,
|
||||
endTime: undefined,
|
||||
trainingHours: undefined,
|
||||
lecturer: undefined,
|
||||
trainingLocation: undefined,
|
||||
trainingPurpose: undefined,
|
||||
deptId: undefined
|
||||
}
|
||||
formRef.value?.resetFields()
|
||||
}
|
||||
</script>
|
||||
|
|
@ -0,0 +1,314 @@
|
|||
<template>
|
||||
<ContentWrap>
|
||||
<!-- 搜索工作栏 -->
|
||||
<el-form
|
||||
class="-mb-15px"
|
||||
:model="queryParams"
|
||||
ref="queryFormRef"
|
||||
:inline="true"
|
||||
label-width="68px"
|
||||
>
|
||||
<el-form-item label="课件ID,关联courseware表" prop="coursewareId">
|
||||
<el-input
|
||||
v-model="queryParams.coursewareId"
|
||||
placeholder="请输入课件ID,关联courseware表"
|
||||
clearable
|
||||
@keyup.enter="handleQuery"
|
||||
class="!w-240px"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="培训名称" prop="trainingName">
|
||||
<el-input
|
||||
v-model="queryParams.trainingName"
|
||||
placeholder="请输入培训名称"
|
||||
clearable
|
||||
@keyup.enter="handleQuery"
|
||||
class="!w-240px"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="工作流编号" prop="processInstanceId">
|
||||
<el-input
|
||||
v-model="queryParams.processInstanceId"
|
||||
placeholder="请输入工作流编号"
|
||||
clearable
|
||||
@keyup.enter="handleQuery"
|
||||
class="!w-240px"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="审批状态" prop="auditStatus">
|
||||
<el-select
|
||||
v-model="queryParams.auditStatus"
|
||||
placeholder="请选择审批状态"
|
||||
clearable
|
||||
class="!w-240px"
|
||||
>
|
||||
<el-option label="请选择字典生成" value="" />
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item label="培训开始时间" prop="startTime">
|
||||
<el-date-picker
|
||||
v-model="queryParams.startTime"
|
||||
value-format="YYYY-MM-DD HH:mm:ss"
|
||||
type="daterange"
|
||||
start-placeholder="开始日期"
|
||||
end-placeholder="结束日期"
|
||||
:default-time="[new Date('1 00:00:00'), new Date('1 23:59:59')]"
|
||||
class="!w-220px"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="培训结束时间" prop="endTime">
|
||||
<el-date-picker
|
||||
v-model="queryParams.endTime"
|
||||
value-format="YYYY-MM-DD HH:mm:ss"
|
||||
type="daterange"
|
||||
start-placeholder="开始日期"
|
||||
end-placeholder="结束日期"
|
||||
:default-time="[new Date('1 00:00:00'), new Date('1 23:59:59')]"
|
||||
class="!w-220px"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="培训学时" prop="trainingHours">
|
||||
<el-input
|
||||
v-model="queryParams.trainingHours"
|
||||
placeholder="请输入培训学时"
|
||||
clearable
|
||||
@keyup.enter="handleQuery"
|
||||
class="!w-240px"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="讲师" prop="lecturer">
|
||||
<el-input
|
||||
v-model="queryParams.lecturer"
|
||||
placeholder="请输入讲师"
|
||||
clearable
|
||||
@keyup.enter="handleQuery"
|
||||
class="!w-240px"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="培训地点" prop="trainingLocation">
|
||||
<el-input
|
||||
v-model="queryParams.trainingLocation"
|
||||
placeholder="请输入培训地点"
|
||||
clearable
|
||||
@keyup.enter="handleQuery"
|
||||
class="!w-240px"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="培训目的" prop="trainingPurpose">
|
||||
<el-input
|
||||
v-model="queryParams.trainingPurpose"
|
||||
placeholder="请输入培训目的"
|
||||
clearable
|
||||
@keyup.enter="handleQuery"
|
||||
class="!w-240px"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="部门ID" prop="deptId">
|
||||
<el-input
|
||||
v-model="queryParams.deptId"
|
||||
placeholder="请输入部门ID"
|
||||
clearable
|
||||
@keyup.enter="handleQuery"
|
||||
class="!w-240px"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="创建时间" prop="createTime">
|
||||
<el-date-picker
|
||||
v-model="queryParams.createTime"
|
||||
value-format="YYYY-MM-DD HH:mm:ss"
|
||||
type="daterange"
|
||||
start-placeholder="开始日期"
|
||||
end-placeholder="结束日期"
|
||||
:default-time="[new Date('1 00:00:00'), new Date('1 23:59:59')]"
|
||||
class="!w-220px"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item>
|
||||
<el-button @click="handleQuery"><Icon icon="ep:search" class="mr-5px" /> 搜索</el-button>
|
||||
<el-button @click="resetQuery"><Icon icon="ep:refresh" class="mr-5px" /> 重置</el-button>
|
||||
<el-button
|
||||
type="primary"
|
||||
plain
|
||||
@click="openForm('create')"
|
||||
v-hasPermi="['hrm:training:create']"
|
||||
>
|
||||
<Icon icon="ep:plus" class="mr-5px" /> 新增
|
||||
</el-button>
|
||||
<el-button
|
||||
type="success"
|
||||
plain
|
||||
@click="handleExport"
|
||||
:loading="exportLoading"
|
||||
v-hasPermi="['hrm:training:export']"
|
||||
>
|
||||
<Icon icon="ep:download" class="mr-5px" /> 导出
|
||||
</el-button>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
</ContentWrap>
|
||||
|
||||
<!-- 列表 -->
|
||||
<ContentWrap>
|
||||
<el-table v-loading="loading" :data="list" :stripe="true" :show-overflow-tooltip="true">
|
||||
<el-table-column label="主键ID" align="center" prop="id" />
|
||||
<el-table-column label="课件ID,关联courseware表" align="center" prop="coursewareId" />
|
||||
<el-table-column label="培训名称" align="center" prop="trainingName" />
|
||||
<el-table-column label="工作流编号" align="center" prop="processInstanceId" />
|
||||
<el-table-column label="审批状态" align="center" prop="auditStatus" />
|
||||
<el-table-column
|
||||
label="培训开始时间"
|
||||
align="center"
|
||||
prop="startTime"
|
||||
:formatter="dateFormatter"
|
||||
width="180px"
|
||||
/>
|
||||
<el-table-column
|
||||
label="培训结束时间"
|
||||
align="center"
|
||||
prop="endTime"
|
||||
:formatter="dateFormatter"
|
||||
width="180px"
|
||||
/>
|
||||
<el-table-column label="培训学时" align="center" prop="trainingHours" />
|
||||
<el-table-column label="讲师" align="center" prop="lecturer" />
|
||||
<el-table-column label="培训地点" align="center" prop="trainingLocation" />
|
||||
<el-table-column label="培训目的" align="center" prop="trainingPurpose" />
|
||||
<el-table-column label="部门ID" align="center" prop="deptId" />
|
||||
<el-table-column
|
||||
label="创建时间"
|
||||
align="center"
|
||||
prop="createTime"
|
||||
:formatter="dateFormatter"
|
||||
width="180px"
|
||||
/>
|
||||
<el-table-column label="操作" align="center" min-width="120px">
|
||||
<template #default="scope">
|
||||
<el-button
|
||||
link
|
||||
type="primary"
|
||||
@click="openForm('update', scope.row.id)"
|
||||
v-hasPermi="['hrm:training:update']"
|
||||
>
|
||||
编辑
|
||||
</el-button>
|
||||
<el-button
|
||||
link
|
||||
type="danger"
|
||||
@click="handleDelete(scope.row.id)"
|
||||
v-hasPermi="['hrm:training:delete']"
|
||||
>
|
||||
删除
|
||||
</el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
<!-- 分页 -->
|
||||
<Pagination
|
||||
:total="total"
|
||||
v-model:page="queryParams.pageNo"
|
||||
v-model:limit="queryParams.pageSize"
|
||||
@pagination="getList"
|
||||
/>
|
||||
</ContentWrap>
|
||||
|
||||
<!-- 表单弹窗:添加/修改 -->
|
||||
<TrainingForm ref="formRef" @success="getList" />
|
||||
</template>
|
||||
|
||||
<script setup lang="ts">
|
||||
import { dateFormatter } from '@/utils/formatTime'
|
||||
import download from '@/utils/download'
|
||||
import { TrainingApi, TrainingVO } from '@/api/hrm/training'
|
||||
import TrainingForm from './TrainingForm.vue'
|
||||
|
||||
/** 培训信息 列表 */
|
||||
defineOptions({ name: 'Training' })
|
||||
|
||||
const message = useMessage() // 消息弹窗
|
||||
const { t } = useI18n() // 国际化
|
||||
|
||||
const loading = ref(true) // 列表的加载中
|
||||
const list = ref<TrainingVO[]>([]) // 列表的数据
|
||||
const total = ref(0) // 列表的总页数
|
||||
const queryParams = reactive({
|
||||
pageNo: 1,
|
||||
pageSize: 10,
|
||||
coursewareId: undefined,
|
||||
trainingName: undefined,
|
||||
processInstanceId: undefined,
|
||||
auditStatus: undefined,
|
||||
startTime: [],
|
||||
endTime: [],
|
||||
trainingHours: undefined,
|
||||
lecturer: undefined,
|
||||
trainingLocation: undefined,
|
||||
trainingPurpose: undefined,
|
||||
deptId: undefined,
|
||||
createTime: []
|
||||
})
|
||||
const queryFormRef = ref() // 搜索的表单
|
||||
const exportLoading = ref(false) // 导出的加载中
|
||||
|
||||
/** 查询列表 */
|
||||
const getList = async () => {
|
||||
loading.value = true
|
||||
try {
|
||||
const data = await TrainingApi.getTrainingPage(queryParams)
|
||||
list.value = data.list
|
||||
total.value = data.total
|
||||
} finally {
|
||||
loading.value = false
|
||||
}
|
||||
}
|
||||
|
||||
/** 搜索按钮操作 */
|
||||
const handleQuery = () => {
|
||||
queryParams.pageNo = 1
|
||||
getList()
|
||||
}
|
||||
|
||||
/** 重置按钮操作 */
|
||||
const resetQuery = () => {
|
||||
queryFormRef.value.resetFields()
|
||||
handleQuery()
|
||||
}
|
||||
|
||||
/** 添加/修改操作 */
|
||||
const formRef = ref()
|
||||
const openForm = (type: string, id?: number) => {
|
||||
formRef.value.open(type, id)
|
||||
}
|
||||
|
||||
/** 删除按钮操作 */
|
||||
const handleDelete = async (id: number) => {
|
||||
try {
|
||||
// 删除的二次确认
|
||||
await message.delConfirm()
|
||||
// 发起删除
|
||||
await TrainingApi.deleteTraining(id)
|
||||
message.success(t('common.delSuccess'))
|
||||
// 刷新列表
|
||||
await getList()
|
||||
} catch {}
|
||||
}
|
||||
|
||||
/** 导出按钮操作 */
|
||||
const handleExport = async () => {
|
||||
try {
|
||||
// 导出的二次确认
|
||||
await message.exportConfirm()
|
||||
// 发起导出
|
||||
exportLoading.value = true
|
||||
const data = await TrainingApi.exportTraining(queryParams)
|
||||
download.excel(data, '培训信息.xls')
|
||||
} catch {
|
||||
} finally {
|
||||
exportLoading.value = false
|
||||
}
|
||||
}
|
||||
|
||||
/** 初始化 **/
|
||||
onMounted(() => {
|
||||
getList()
|
||||
})
|
||||
</script>
|
||||
|
|
@ -0,0 +1,140 @@
|
|||
<template>
|
||||
<Dialog :title="dialogTitle" v-model="dialogVisible">
|
||||
<el-form
|
||||
ref="formRef"
|
||||
:model="formData"
|
||||
:rules="formRules"
|
||||
label-width="100px"
|
||||
v-loading="formLoading"
|
||||
>
|
||||
<el-form-item label="员工ID" prop="userId">
|
||||
<el-input v-model="formData.userId" placeholder="请输入员工ID" />
|
||||
</el-form-item>
|
||||
<el-form-item label="培训ID,关联training表" prop="trainingId">
|
||||
<el-input v-model="formData.trainingId" placeholder="请输入培训ID,关联training表" />
|
||||
</el-form-item>
|
||||
<el-form-item label="培训开始时间" prop="startTime">
|
||||
<el-date-picker
|
||||
v-model="formData.startTime"
|
||||
type="date"
|
||||
value-format="x"
|
||||
placeholder="选择培训开始时间"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="培训结束时间" prop="endTime">
|
||||
<el-date-picker
|
||||
v-model="formData.endTime"
|
||||
type="date"
|
||||
value-format="x"
|
||||
placeholder="选择培训结束时间"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="培训成绩" prop="trainingScore">
|
||||
<el-input v-model="formData.trainingScore" placeholder="请输入培训成绩" />
|
||||
</el-form-item>
|
||||
<el-form-item label="培训证书名称" prop="certificate">
|
||||
<el-input v-model="formData.certificate" placeholder="请输入培训证书名称" />
|
||||
</el-form-item>
|
||||
<el-form-item label="培训证书编号" prop="certificateNumber">
|
||||
<el-input v-model="formData.certificateNumber" placeholder="请输入培训证书编号" />
|
||||
</el-form-item>
|
||||
<el-form-item label="备注" prop="remark">
|
||||
<el-input v-model="formData.remark" placeholder="请输入备注" />
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
<template #footer>
|
||||
<el-button @click="submitForm" type="primary" :disabled="formLoading">确 定</el-button>
|
||||
<el-button @click="dialogVisible = false">取 消</el-button>
|
||||
</template>
|
||||
</Dialog>
|
||||
</template>
|
||||
<script setup lang="ts">
|
||||
import { TrainingExperienceApi, TrainingExperienceVO } from '@/api/hrm/trainingexperience'
|
||||
|
||||
/** 培训经历 表单 */
|
||||
defineOptions({ name: 'TrainingExperienceForm' })
|
||||
|
||||
const { t } = useI18n() // 国际化
|
||||
const message = useMessage() // 消息弹窗
|
||||
|
||||
const dialogVisible = ref(false) // 弹窗的是否展示
|
||||
const dialogTitle = ref('') // 弹窗的标题
|
||||
const formLoading = ref(false) // 表单的加载中:1)修改时的数据加载;2)提交的按钮禁用
|
||||
const formType = ref('') // 表单的类型:create - 新增;update - 修改
|
||||
const formData = ref({
|
||||
id: undefined,
|
||||
userId: undefined,
|
||||
trainingId: undefined,
|
||||
startTime: undefined,
|
||||
endTime: undefined,
|
||||
trainingScore: undefined,
|
||||
certificate: undefined,
|
||||
certificateNumber: undefined,
|
||||
remark: undefined
|
||||
})
|
||||
const formRules = reactive({
|
||||
userId: [{ required: true, message: '员工ID不能为空', trigger: 'blur' }],
|
||||
trainingId: [{ required: true, message: '培训ID,关联training表不能为空', trigger: 'blur' }],
|
||||
startTime: [{ required: true, message: '培训开始时间不能为空', trigger: 'blur' }],
|
||||
endTime: [{ required: true, message: '培训结束时间不能为空', trigger: 'blur' }]
|
||||
})
|
||||
const formRef = ref() // 表单 Ref
|
||||
|
||||
/** 打开弹窗 */
|
||||
const open = async (type: string, id?: number) => {
|
||||
dialogVisible.value = true
|
||||
dialogTitle.value = t('action.' + type)
|
||||
formType.value = type
|
||||
resetForm()
|
||||
// 修改时,设置数据
|
||||
if (id) {
|
||||
formLoading.value = true
|
||||
try {
|
||||
formData.value = await TrainingExperienceApi.getTrainingExperience(id)
|
||||
} finally {
|
||||
formLoading.value = false
|
||||
}
|
||||
}
|
||||
}
|
||||
defineExpose({ open }) // 提供 open 方法,用于打开弹窗
|
||||
|
||||
/** 提交表单 */
|
||||
const emit = defineEmits(['success']) // 定义 success 事件,用于操作成功后的回调
|
||||
const submitForm = async () => {
|
||||
// 校验表单
|
||||
await formRef.value.validate()
|
||||
// 提交请求
|
||||
formLoading.value = true
|
||||
try {
|
||||
const data = formData.value as unknown as TrainingExperienceVO
|
||||
if (formType.value === 'create') {
|
||||
await TrainingExperienceApi.createTrainingExperience(data)
|
||||
message.success(t('common.createSuccess'))
|
||||
} else {
|
||||
await TrainingExperienceApi.updateTrainingExperience(data)
|
||||
message.success(t('common.updateSuccess'))
|
||||
}
|
||||
dialogVisible.value = false
|
||||
// 发送操作成功的事件
|
||||
emit('success')
|
||||
} finally {
|
||||
formLoading.value = false
|
||||
}
|
||||
}
|
||||
|
||||
/** 重置表单 */
|
||||
const resetForm = () => {
|
||||
formData.value = {
|
||||
id: undefined,
|
||||
userId: undefined,
|
||||
trainingId: undefined,
|
||||
startTime: undefined,
|
||||
endTime: undefined,
|
||||
trainingScore: undefined,
|
||||
certificate: undefined,
|
||||
certificateNumber: undefined,
|
||||
remark: undefined
|
||||
}
|
||||
formRef.value?.resetFields()
|
||||
}
|
||||
</script>
|
||||
|
|
@ -0,0 +1,261 @@
|
|||
<template>
|
||||
<ContentWrap>
|
||||
<!-- 搜索工作栏 -->
|
||||
<el-form
|
||||
class="-mb-15px"
|
||||
:model="queryParams"
|
||||
ref="queryFormRef"
|
||||
:inline="true"
|
||||
label-width="68px"
|
||||
>
|
||||
<el-form-item label="员工ID" prop="userId">
|
||||
<el-input
|
||||
v-model="queryParams.userId"
|
||||
placeholder="请输入员工ID"
|
||||
clearable
|
||||
@keyup.enter="handleQuery"
|
||||
class="!w-240px"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="培训ID,关联training表" prop="trainingId">
|
||||
<el-input
|
||||
v-model="queryParams.trainingId"
|
||||
placeholder="请输入培训ID,关联training表"
|
||||
clearable
|
||||
@keyup.enter="handleQuery"
|
||||
class="!w-240px"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="培训开始时间" prop="startTime">
|
||||
<el-date-picker
|
||||
v-model="queryParams.startTime"
|
||||
value-format="YYYY-MM-DD HH:mm:ss"
|
||||
type="daterange"
|
||||
start-placeholder="开始日期"
|
||||
end-placeholder="结束日期"
|
||||
:default-time="[new Date('1 00:00:00'), new Date('1 23:59:59')]"
|
||||
class="!w-220px"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="培训结束时间" prop="endTime">
|
||||
<el-date-picker
|
||||
v-model="queryParams.endTime"
|
||||
value-format="YYYY-MM-DD HH:mm:ss"
|
||||
type="daterange"
|
||||
start-placeholder="开始日期"
|
||||
end-placeholder="结束日期"
|
||||
:default-time="[new Date('1 00:00:00'), new Date('1 23:59:59')]"
|
||||
class="!w-220px"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="培训成绩" prop="trainingScore">
|
||||
<el-input
|
||||
v-model="queryParams.trainingScore"
|
||||
placeholder="请输入培训成绩"
|
||||
clearable
|
||||
@keyup.enter="handleQuery"
|
||||
class="!w-240px"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="培训证书名称" prop="certificate">
|
||||
<el-input
|
||||
v-model="queryParams.certificate"
|
||||
placeholder="请输入培训证书名称"
|
||||
clearable
|
||||
@keyup.enter="handleQuery"
|
||||
class="!w-240px"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="培训证书编号" prop="certificateNumber">
|
||||
<el-input
|
||||
v-model="queryParams.certificateNumber"
|
||||
placeholder="请输入培训证书编号"
|
||||
clearable
|
||||
@keyup.enter="handleQuery"
|
||||
class="!w-240px"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="备注" prop="remark">
|
||||
<el-input
|
||||
v-model="queryParams.remark"
|
||||
placeholder="请输入备注"
|
||||
clearable
|
||||
@keyup.enter="handleQuery"
|
||||
class="!w-240px"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item>
|
||||
<el-button @click="handleQuery"><Icon icon="ep:search" class="mr-5px" /> 搜索</el-button>
|
||||
<el-button @click="resetQuery"><Icon icon="ep:refresh" class="mr-5px" /> 重置</el-button>
|
||||
<el-button
|
||||
type="primary"
|
||||
plain
|
||||
@click="openForm('create')"
|
||||
v-hasPermi="['hrm:training-experience:create']"
|
||||
>
|
||||
<Icon icon="ep:plus" class="mr-5px" /> 新增
|
||||
</el-button>
|
||||
<el-button
|
||||
type="success"
|
||||
plain
|
||||
@click="handleExport"
|
||||
:loading="exportLoading"
|
||||
v-hasPermi="['hrm:training-experience:export']"
|
||||
>
|
||||
<Icon icon="ep:download" class="mr-5px" /> 导出
|
||||
</el-button>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
</ContentWrap>
|
||||
|
||||
<!-- 列表 -->
|
||||
<ContentWrap>
|
||||
<el-table v-loading="loading" :data="list" :stripe="true" :show-overflow-tooltip="true">
|
||||
<el-table-column label="主键ID" align="center" prop="id" />
|
||||
<el-table-column label="员工ID" align="center" prop="userId" />
|
||||
<el-table-column label="培训ID,关联training表" align="center" prop="trainingId" />
|
||||
<el-table-column
|
||||
label="培训开始时间"
|
||||
align="center"
|
||||
prop="startTime"
|
||||
:formatter="dateFormatter"
|
||||
width="180px"
|
||||
/>
|
||||
<el-table-column
|
||||
label="培训结束时间"
|
||||
align="center"
|
||||
prop="endTime"
|
||||
:formatter="dateFormatter"
|
||||
width="180px"
|
||||
/>
|
||||
<el-table-column label="培训成绩" align="center" prop="trainingScore" />
|
||||
<el-table-column label="培训证书名称" align="center" prop="certificate" />
|
||||
<el-table-column label="培训证书编号" align="center" prop="certificateNumber" />
|
||||
<el-table-column label="备注" align="center" prop="remark" />
|
||||
<el-table-column label="操作" align="center" min-width="120px">
|
||||
<template #default="scope">
|
||||
<el-button
|
||||
link
|
||||
type="primary"
|
||||
@click="openForm('update', scope.row.id)"
|
||||
v-hasPermi="['hrm:training-experience:update']"
|
||||
>
|
||||
编辑
|
||||
</el-button>
|
||||
<el-button
|
||||
link
|
||||
type="danger"
|
||||
@click="handleDelete(scope.row.id)"
|
||||
v-hasPermi="['hrm:training-experience:delete']"
|
||||
>
|
||||
删除
|
||||
</el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
<!-- 分页 -->
|
||||
<Pagination
|
||||
:total="total"
|
||||
v-model:page="queryParams.pageNo"
|
||||
v-model:limit="queryParams.pageSize"
|
||||
@pagination="getList"
|
||||
/>
|
||||
</ContentWrap>
|
||||
|
||||
<!-- 表单弹窗:添加/修改 -->
|
||||
<TrainingExperienceForm ref="formRef" @success="getList" />
|
||||
</template>
|
||||
|
||||
<script setup lang="ts">
|
||||
import { dateFormatter } from '@/utils/formatTime'
|
||||
import download from '@/utils/download'
|
||||
import { TrainingExperienceApi, TrainingExperienceVO } from '@/api/hrm/trainingexperience'
|
||||
import TrainingExperienceForm from './TrainingExperienceForm.vue'
|
||||
|
||||
/** 培训经历 列表 */
|
||||
defineOptions({ name: 'TrainingExperience' })
|
||||
|
||||
const message = useMessage() // 消息弹窗
|
||||
const { t } = useI18n() // 国际化
|
||||
|
||||
const loading = ref(true) // 列表的加载中
|
||||
const list = ref<TrainingExperienceVO[]>([]) // 列表的数据
|
||||
const total = ref(0) // 列表的总页数
|
||||
const queryParams = reactive({
|
||||
pageNo: 1,
|
||||
pageSize: 10,
|
||||
userId: undefined,
|
||||
trainingId: undefined,
|
||||
startTime: [],
|
||||
endTime: [],
|
||||
trainingScore: undefined,
|
||||
certificate: undefined,
|
||||
certificateNumber: undefined,
|
||||
remark: undefined
|
||||
})
|
||||
const queryFormRef = ref() // 搜索的表单
|
||||
const exportLoading = ref(false) // 导出的加载中
|
||||
|
||||
/** 查询列表 */
|
||||
const getList = async () => {
|
||||
loading.value = true
|
||||
try {
|
||||
const data = await TrainingExperienceApi.getTrainingExperiencePage(queryParams)
|
||||
list.value = data.list
|
||||
total.value = data.total
|
||||
} finally {
|
||||
loading.value = false
|
||||
}
|
||||
}
|
||||
|
||||
/** 搜索按钮操作 */
|
||||
const handleQuery = () => {
|
||||
queryParams.pageNo = 1
|
||||
getList()
|
||||
}
|
||||
|
||||
/** 重置按钮操作 */
|
||||
const resetQuery = () => {
|
||||
queryFormRef.value.resetFields()
|
||||
handleQuery()
|
||||
}
|
||||
|
||||
/** 添加/修改操作 */
|
||||
const formRef = ref()
|
||||
const openForm = (type: string, id?: number) => {
|
||||
formRef.value.open(type, id)
|
||||
}
|
||||
|
||||
/** 删除按钮操作 */
|
||||
const handleDelete = async (id: number) => {
|
||||
try {
|
||||
// 删除的二次确认
|
||||
await message.delConfirm()
|
||||
// 发起删除
|
||||
await TrainingExperienceApi.deleteTrainingExperience(id)
|
||||
message.success(t('common.delSuccess'))
|
||||
// 刷新列表
|
||||
await getList()
|
||||
} catch {}
|
||||
}
|
||||
|
||||
/** 导出按钮操作 */
|
||||
const handleExport = async () => {
|
||||
try {
|
||||
// 导出的二次确认
|
||||
await message.exportConfirm()
|
||||
// 发起导出
|
||||
exportLoading.value = true
|
||||
const data = await TrainingExperienceApi.exportTrainingExperience(queryParams)
|
||||
download.excel(data, '培训经历.xls')
|
||||
} catch {
|
||||
} finally {
|
||||
exportLoading.value = false
|
||||
}
|
||||
}
|
||||
|
||||
/** 初始化 **/
|
||||
onMounted(() => {
|
||||
getList()
|
||||
})
|
||||
</script>
|
||||
|
|
@ -0,0 +1,540 @@
|
|||
<template>
|
||||
<Dialog :title="dialogTitle" v-model="dialogVisible">
|
||||
<el-form
|
||||
ref="formRef"
|
||||
:model="formData"
|
||||
:rules="formRules"
|
||||
label-width="100px"
|
||||
v-loading="formLoading"
|
||||
>
|
||||
<el-form-item label="用户登录账号IDsys_user表" prop="acctId">
|
||||
<el-input v-model="formData.acctId" placeholder="请输入用户登录账号IDsys_user表" />
|
||||
</el-form-item>
|
||||
<el-form-item label="员工编号" prop="userNo">
|
||||
<el-input v-model="formData.userNo" placeholder="请输入员工编号" />
|
||||
</el-form-item>
|
||||
<el-form-item label="员工姓名" prop="realName">
|
||||
<el-input v-model="formData.realName" placeholder="请输入员工姓名" />
|
||||
</el-form-item>
|
||||
<el-form-item label="手机号" prop="phone">
|
||||
<el-input v-model="formData.phone" placeholder="请输入手机号" />
|
||||
</el-form-item>
|
||||
<el-form-item label="邮箱" prop="email">
|
||||
<el-input v-model="formData.email" placeholder="请输入邮箱" />
|
||||
</el-form-item>
|
||||
<el-form-item label="入职日期" prop="employmentDate">
|
||||
<el-date-picker
|
||||
v-model="formData.employmentDate"
|
||||
type="date"
|
||||
value-format="x"
|
||||
placeholder="选择入职日期"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="转正日期" prop="regularizationDate">
|
||||
<el-date-picker
|
||||
v-model="formData.regularizationDate"
|
||||
type="date"
|
||||
value-format="x"
|
||||
placeholder="选择转正日期"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="岗位Id" prop="postId">
|
||||
<el-input v-model="formData.postId" placeholder="请输入岗位Id" />
|
||||
</el-form-item>
|
||||
<el-form-item label="职级" prop="postLevel">
|
||||
<el-select v-model="formData.postLevel" placeholder="请选择职级">
|
||||
<el-option
|
||||
v-for="dict in getIntDictOptions(DICT_TYPE.HRM_POST_RANK)"
|
||||
:key="dict.value"
|
||||
:label="dict.label"
|
||||
:value="dict.value"
|
||||
/>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item label="档级" prop="gradeLevel">
|
||||
<el-select v-model="formData.gradeLevel" placeholder="请选择档级">
|
||||
<el-option
|
||||
v-for="dict in getIntDictOptions(DICT_TYPE.HRM_GRADE_LEVEL)"
|
||||
:key="dict.value"
|
||||
:label="dict.label"
|
||||
:value="dict.value"
|
||||
/>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item label="聘用形式(全职、见习、实习、劳务、联创、其他)" prop="employType">
|
||||
<el-select v-model="formData.employType" placeholder="请选择聘用形式(全职、见习、实习、劳务、联创、其他)">
|
||||
<el-option
|
||||
v-for="dict in getIntDictOptions(DICT_TYPE.HRM_EMPLOY_TYPE)"
|
||||
:key="dict.value"
|
||||
:label="dict.label"
|
||||
:value="dict.value"
|
||||
/>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item label="试用开始日期" prop="trialStartDate">
|
||||
<el-date-picker
|
||||
v-model="formData.trialStartDate"
|
||||
type="date"
|
||||
value-format="x"
|
||||
placeholder="选择试用开始日期"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="试用结束日期" prop="trialEndDate">
|
||||
<el-date-picker
|
||||
v-model="formData.trialEndDate"
|
||||
type="date"
|
||||
value-format="x"
|
||||
placeholder="选择试用结束日期"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="试用期限(月)" prop="probationPeriod">
|
||||
<el-input v-model="formData.probationPeriod" placeholder="请输入试用期限(月)" />
|
||||
</el-form-item>
|
||||
<el-form-item label="合同开始日期" prop="contractStartDate">
|
||||
<el-date-picker
|
||||
v-model="formData.contractStartDate"
|
||||
type="date"
|
||||
value-format="x"
|
||||
placeholder="选择合同开始日期"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="合同结束日期" prop="contractEndDate">
|
||||
<el-date-picker
|
||||
v-model="formData.contractEndDate"
|
||||
type="date"
|
||||
value-format="x"
|
||||
placeholder="选择合同结束日期"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="合同期限(年)" prop="contractTerm">
|
||||
<el-input v-model="formData.contractTerm" placeholder="请输入合同期限(年)" />
|
||||
</el-form-item>
|
||||
<el-form-item label="性别(男、女、其他)" prop="gender">
|
||||
<el-select v-model="formData.gender" placeholder="请选择性别(男、女、其他)">
|
||||
<el-option
|
||||
v-for="dict in getIntDictOptions(DICT_TYPE.SYSTEM_USER_SEX)"
|
||||
:key="dict.value"
|
||||
:label="dict.label"
|
||||
:value="dict.value"
|
||||
/>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item label="年龄" prop="age">
|
||||
<el-input v-model="formData.age" placeholder="请输入年龄" />
|
||||
</el-form-item>
|
||||
<el-form-item label="简历附件" prop="resume">
|
||||
<el-input v-model="formData.resume" placeholder="请输入简历附件" />
|
||||
</el-form-item>
|
||||
<el-form-item label="形象照" prop="workPhoto">
|
||||
<el-input v-model="formData.workPhoto" placeholder="请输入形象照" />
|
||||
</el-form-item>
|
||||
<el-form-item label="身份证人像" prop="idCardFaceSide">
|
||||
<el-input v-model="formData.idCardFaceSide" placeholder="请输入身份证人像" />
|
||||
</el-form-item>
|
||||
<el-form-item label="身份证国徽" prop="idCardNationalEmblemSide">
|
||||
<el-input v-model="formData.idCardNationalEmblemSide" placeholder="请输入身份证国徽" />
|
||||
</el-form-item>
|
||||
<el-form-item label="现住址" prop="currentAddress">
|
||||
<el-input v-model="formData.currentAddress" placeholder="请输入现住址" />
|
||||
</el-form-item>
|
||||
<el-form-item label="身份证号" prop="idCardNumber">
|
||||
<el-input v-model="formData.idCardNumber" placeholder="请输入身份证号" />
|
||||
</el-form-item>
|
||||
<el-form-item label="出生日期" prop="birthDate">
|
||||
<el-date-picker
|
||||
v-model="formData.birthDate"
|
||||
type="date"
|
||||
value-format="x"
|
||||
placeholder="选择出生日期"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="发证机关" prop="issuingAuthority">
|
||||
<el-input v-model="formData.issuingAuthority" placeholder="请输入发证机关" />
|
||||
</el-form-item>
|
||||
<el-form-item label="民族(56个民族)" prop="nation">
|
||||
<el-select v-model="formData.nation" placeholder="请选择民族(56个民族)">
|
||||
<el-option
|
||||
v-for="dict in getIntDictOptions(DICT_TYPE.HRM_NATION)"
|
||||
:key="dict.value"
|
||||
:label="dict.label"
|
||||
:value="dict.value"
|
||||
/>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item label="户口扫描件" prop="householdRegistrationScan">
|
||||
<el-input v-model="formData.householdRegistrationScan" placeholder="请输入户口扫描件" />
|
||||
</el-form-item>
|
||||
<el-form-item label="户籍类型(农村、城镇)" prop="householdType">
|
||||
<el-select v-model="formData.householdType" placeholder="请选择户籍类型(农村、城镇)">
|
||||
<el-option
|
||||
v-for="dict in getIntDictOptions(DICT_TYPE.HRM_HOUSEHOLD_TYPE)"
|
||||
:key="dict.value"
|
||||
:label="dict.label"
|
||||
:value="dict.value"
|
||||
/>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item label="户籍地" prop="householdAddress">
|
||||
<el-input v-model="formData.householdAddress" placeholder="请输入户籍地" />
|
||||
</el-form-item>
|
||||
<el-form-item label="政治面貌(共青团员、中共预备党员、中共党员、群众、其他)" prop="politicalStatus">
|
||||
<el-select v-model="formData.politicalStatus" placeholder="请选择政治面貌(共青团员、中共预备党员、中共党员、群众、其他)">
|
||||
<el-option
|
||||
v-for="dict in getIntDictOptions(DICT_TYPE.HRM_POLITICAL_STATUS)"
|
||||
:key="dict.value"
|
||||
:label="dict.label"
|
||||
:value="dict.value"
|
||||
/>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item label="婚姻状况(未婚、已婚未育、已婚已育)" prop="maritalStatus">
|
||||
<el-select v-model="formData.maritalStatus" placeholder="请选择婚姻状况(未婚、已婚未育、已婚已育)">
|
||||
<el-option
|
||||
v-for="dict in getIntDictOptions(DICT_TYPE.HRM_MARITAL_STATUS)"
|
||||
:key="dict.value"
|
||||
:label="dict.label"
|
||||
:value="dict.value"
|
||||
/>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item label="关系1(父母、夫妻、兄弟、姊妹、朋友、其他)" prop="relationship1">
|
||||
<el-select v-model="formData.relationship1" placeholder="请选择关系1(父母、夫妻、兄弟、姊妹、朋友、其他)">
|
||||
<el-option
|
||||
v-for="dict in getIntDictOptions(DICT_TYPE.HRM_RELATIONSHIP)"
|
||||
:key="dict.value"
|
||||
:label="dict.label"
|
||||
:value="dict.value"
|
||||
/>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item label="联系人姓名1" prop="contactName1">
|
||||
<el-input v-model="formData.contactName1" placeholder="请输入联系人姓名1" />
|
||||
</el-form-item>
|
||||
<el-form-item label="联系手机号1" prop="contactPhone1">
|
||||
<el-input v-model="formData.contactPhone1" placeholder="请输入联系手机号1" />
|
||||
</el-form-item>
|
||||
<el-form-item label="关系2(父母、夫妻、兄弟、姊妹、朋友、其他)" prop="relationship2">
|
||||
<el-select v-model="formData.relationship2" placeholder="请选择关系2(父母、夫妻、兄弟、姊妹、朋友、其他)">
|
||||
<el-option
|
||||
v-for="dict in getIntDictOptions(DICT_TYPE.HRM_RELATIONSHIP)"
|
||||
:key="dict.value"
|
||||
:label="dict.label"
|
||||
:value="dict.value"
|
||||
/>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item label="联系人姓名2" prop="contactName2">
|
||||
<el-input v-model="formData.contactName2" placeholder="请输入联系人姓名2" />
|
||||
</el-form-item>
|
||||
<el-form-item label="联系手机号2" prop="contactPhone2">
|
||||
<el-input v-model="formData.contactPhone2" placeholder="请输入联系手机号2" />
|
||||
</el-form-item>
|
||||
<el-form-item label="工商银行开户支行" prop="bankBranch">
|
||||
<el-input v-model="formData.bankBranch" placeholder="请输入工商银行开户支行" />
|
||||
</el-form-item>
|
||||
<el-form-item label="工资卡卡号" prop="salaryCardNumber">
|
||||
<el-input v-model="formData.salaryCardNumber" placeholder="请输入工资卡卡号" />
|
||||
</el-form-item>
|
||||
<el-form-item label="账户名与本人关系(父亲、母亲)" prop="accountRelationship">
|
||||
<el-select v-model="formData.accountRelationship" placeholder="请选择账户名与本人关系(父亲、母亲)">
|
||||
<el-option
|
||||
v-for="dict in getIntDictOptions(DICT_TYPE.HRM_RELATIONSHIP)"
|
||||
:key="dict.value"
|
||||
:label="dict.label"
|
||||
:value="dict.value"
|
||||
/>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item label="敬老费银行卡户名" prop="pensionCardHolder">
|
||||
<el-input v-model="formData.pensionCardHolder" placeholder="请输入敬老费银行卡户名" />
|
||||
</el-form-item>
|
||||
<el-form-item label="敬老费银行账号" prop="pensionAccountNumber">
|
||||
<el-input v-model="formData.pensionAccountNumber" placeholder="请输入敬老费银行账号" />
|
||||
</el-form-item>
|
||||
<el-form-item label="敬老费开户行网点" prop="pensionBankBranch">
|
||||
<el-input v-model="formData.pensionBankBranch" placeholder="请输入敬老费开户行网点" />
|
||||
</el-form-item>
|
||||
<el-form-item label="五险缴纳情况(未缴纳过、已缴纳过)" prop="insuranceStatus">
|
||||
<el-radio-group v-model="formData.insuranceStatus">
|
||||
<el-radio
|
||||
v-for="dict in getIntDictOptions(DICT_TYPE.HRM_INSURANCE_STATUS)"
|
||||
:key="dict.value"
|
||||
:label="dict.value"
|
||||
>
|
||||
{{ dict.label }}
|
||||
</el-radio>
|
||||
</el-radio-group>
|
||||
</el-form-item>
|
||||
<el-form-item label="1寸白底照(当未缴纳五险一金,需要上传)" prop="oneInchPhoto">
|
||||
<el-input v-model="formData.oneInchPhoto" placeholder="请输入1寸白底照(当未缴纳五险一金,需要上传)" />
|
||||
</el-form-item>
|
||||
<el-form-item label="离职证明扫描件" prop="resignationCertScan">
|
||||
<el-input v-model="formData.resignationCertScan" placeholder="请输入离职证明扫描件" />
|
||||
</el-form-item>
|
||||
<el-form-item label="最高学历" prop="highestEducation">
|
||||
<el-input v-model="formData.highestEducation" placeholder="请输入最高学历" />
|
||||
</el-form-item>
|
||||
<el-form-item label="学制类型(全日制、非全日制)" prop="educationSystemType">
|
||||
<el-select v-model="formData.educationSystemType" placeholder="请选择学制类型(全日制、非全日制)">
|
||||
<el-option
|
||||
v-for="dict in getIntDictOptions(DICT_TYPE.HRM_EDUCATION_SYSTEM_TYPE)"
|
||||
:key="dict.value"
|
||||
:label="dict.label"
|
||||
:value="dict.value"
|
||||
/>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item label="学历扫描件" prop="educationCertificateScan">
|
||||
<el-input v-model="formData.educationCertificateScan" placeholder="请输入学历扫描件" />
|
||||
</el-form-item>
|
||||
<el-form-item label="状态" prop="status">
|
||||
<el-radio-group v-model="formData.status">
|
||||
<el-radio value="1">请选择字典生成</el-radio>
|
||||
</el-radio-group>
|
||||
</el-form-item>
|
||||
<el-form-item label="部门ID" prop="deptId">
|
||||
<el-input v-model="formData.deptId" placeholder="请输入部门ID" />
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
<!-- 子表的表单 -->
|
||||
<el-tabs v-model="subTabsName">
|
||||
<el-tab-pane label="教育信息" name="userEducationInfo">
|
||||
<UserEducationInfoForm ref="userEducationInfoFormRef" :user-id="formData.id" />
|
||||
</el-tab-pane>
|
||||
<el-tab-pane label="工作经历信息" name="userWorkInfo">
|
||||
<UserWorkInfoForm ref="userWorkInfoFormRef" :user-id="formData.id" />
|
||||
</el-tab-pane>
|
||||
</el-tabs>
|
||||
<template #footer>
|
||||
<el-button @click="submitForm" type="primary" :disabled="formLoading">确 定</el-button>
|
||||
<el-button @click="dialogVisible = false">取 消</el-button>
|
||||
</template>
|
||||
</Dialog>
|
||||
</template>
|
||||
<script setup lang="ts">
|
||||
import { getIntDictOptions, DICT_TYPE } from '@/utils/dict'
|
||||
import { UserApi, UserVO } from '@/api/hrm/user'
|
||||
import UserEducationInfoForm from './components/UserEducationInfoForm.vue'
|
||||
import UserWorkInfoForm from './components/UserWorkInfoForm.vue'
|
||||
|
||||
/** 员工档案信息 表单 */
|
||||
defineOptions({ name: 'UserForm' })
|
||||
|
||||
const { t } = useI18n() // 国际化
|
||||
const message = useMessage() // 消息弹窗
|
||||
|
||||
const dialogVisible = ref(false) // 弹窗的是否展示
|
||||
const dialogTitle = ref('') // 弹窗的标题
|
||||
const formLoading = ref(false) // 表单的加载中:1)修改时的数据加载;2)提交的按钮禁用
|
||||
const formType = ref('') // 表单的类型:create - 新增;update - 修改
|
||||
const formData = ref({
|
||||
id: undefined,
|
||||
acctId: undefined,
|
||||
userNo: undefined,
|
||||
realName: undefined,
|
||||
phone: undefined,
|
||||
email: undefined,
|
||||
employmentDate: undefined,
|
||||
regularizationDate: undefined,
|
||||
postId: undefined,
|
||||
postLevel: undefined,
|
||||
gradeLevel: undefined,
|
||||
employType: undefined,
|
||||
trialStartDate: undefined,
|
||||
trialEndDate: undefined,
|
||||
probationPeriod: undefined,
|
||||
contractStartDate: undefined,
|
||||
contractEndDate: undefined,
|
||||
contractTerm: undefined,
|
||||
gender: undefined,
|
||||
age: undefined,
|
||||
resume: undefined,
|
||||
workPhoto: undefined,
|
||||
idCardFaceSide: undefined,
|
||||
idCardNationalEmblemSide: undefined,
|
||||
currentAddress: undefined,
|
||||
idCardNumber: undefined,
|
||||
birthDate: undefined,
|
||||
issuingAuthority: undefined,
|
||||
nation: undefined,
|
||||
householdRegistrationScan: undefined,
|
||||
householdType: undefined,
|
||||
householdAddress: undefined,
|
||||
politicalStatus: undefined,
|
||||
maritalStatus: undefined,
|
||||
relationship1: undefined,
|
||||
contactName1: undefined,
|
||||
contactPhone1: undefined,
|
||||
relationship2: undefined,
|
||||
contactName2: undefined,
|
||||
contactPhone2: undefined,
|
||||
bankBranch: undefined,
|
||||
salaryCardNumber: undefined,
|
||||
accountRelationship: undefined,
|
||||
pensionCardHolder: undefined,
|
||||
pensionAccountNumber: undefined,
|
||||
pensionBankBranch: undefined,
|
||||
insuranceStatus: undefined,
|
||||
oneInchPhoto: undefined,
|
||||
resignationCertScan: undefined,
|
||||
highestEducation: undefined,
|
||||
educationSystemType: undefined,
|
||||
educationCertificateScan: undefined,
|
||||
status: undefined,
|
||||
deptId: undefined
|
||||
})
|
||||
const formRules = reactive({
|
||||
userNo: [{ required: true, message: '员工编号不能为空', trigger: 'blur' }],
|
||||
realName: [{ required: true, message: '员工姓名不能为空', trigger: 'blur' }],
|
||||
phone: [{ required: true, message: '手机号不能为空', trigger: 'blur' }],
|
||||
postId: [{ required: true, message: '岗位Id不能为空', trigger: 'blur' }],
|
||||
employType: [{ required: true, message: '聘用形式(全职、见习、实习、劳务、联创、其他)不能为空', trigger: 'change' }],
|
||||
gender: [{ required: true, message: '性别(男、女、其他)不能为空', trigger: 'change' }],
|
||||
resume: [{ required: true, message: '简历附件不能为空', trigger: 'blur' }],
|
||||
workPhoto: [{ required: true, message: '形象照不能为空', trigger: 'blur' }],
|
||||
idCardFaceSide: [{ required: true, message: '身份证人像不能为空', trigger: 'blur' }],
|
||||
idCardNationalEmblemSide: [{ required: true, message: '身份证国徽不能为空', trigger: 'blur' }],
|
||||
currentAddress: [{ required: true, message: '现住址不能为空', trigger: 'blur' }],
|
||||
idCardNumber: [{ required: true, message: '身份证号不能为空', trigger: 'blur' }],
|
||||
householdRegistrationScan: [{ required: true, message: '户口扫描件不能为空', trigger: 'blur' }],
|
||||
relationship1: [{ required: true, message: '关系1(父母、夫妻、兄弟、姊妹、朋友、其他)不能为空', trigger: 'change' }],
|
||||
contactName1: [{ required: true, message: '联系人姓名1不能为空', trigger: 'blur' }],
|
||||
contactPhone1: [{ required: true, message: '联系手机号1不能为空', trigger: 'blur' }],
|
||||
bankBranch: [{ required: true, message: '工商银行开户支行不能为空', trigger: 'blur' }],
|
||||
salaryCardNumber: [{ required: true, message: '工资卡卡号不能为空', trigger: 'blur' }],
|
||||
accountRelationship: [{ required: true, message: '账户名与本人关系(父亲、母亲)不能为空', trigger: 'change' }],
|
||||
pensionCardHolder: [{ required: true, message: '敬老费银行卡户名不能为空', trigger: 'blur' }],
|
||||
pensionAccountNumber: [{ required: true, message: '敬老费银行账号不能为空', trigger: 'blur' }],
|
||||
pensionBankBranch: [{ required: true, message: '敬老费开户行网点不能为空', trigger: 'blur' }],
|
||||
insuranceStatus: [{ required: true, message: '五险缴纳情况(未缴纳过、已缴纳过)不能为空', trigger: 'blur' }],
|
||||
oneInchPhoto: [{ required: true, message: '1寸白底照(当未缴纳五险一金,需要上传)不能为空', trigger: 'blur' }],
|
||||
educationSystemType: [{ required: true, message: '学制类型(全日制、非全日制)不能为空', trigger: 'change' }],
|
||||
educationCertificateScan: [{ required: true, message: '学历扫描件不能为空', trigger: 'blur' }],
|
||||
deptId: [{ required: true, message: '部门ID不能为空', trigger: 'blur' }]
|
||||
})
|
||||
const formRef = ref() // 表单 Ref
|
||||
|
||||
/** 子表的表单 */
|
||||
const subTabsName = ref('userEducationInfo')
|
||||
const userEducationInfoFormRef = ref()
|
||||
const userWorkInfoFormRef = ref()
|
||||
|
||||
/** 打开弹窗 */
|
||||
const open = async (type: string, id?: number) => {
|
||||
dialogVisible.value = true
|
||||
dialogTitle.value = t('action.' + type)
|
||||
formType.value = type
|
||||
resetForm()
|
||||
// 修改时,设置数据
|
||||
if (id) {
|
||||
formLoading.value = true
|
||||
try {
|
||||
formData.value = await UserApi.getUser(id)
|
||||
} finally {
|
||||
formLoading.value = false
|
||||
}
|
||||
}
|
||||
}
|
||||
defineExpose({ open }) // 提供 open 方法,用于打开弹窗
|
||||
|
||||
/** 提交表单 */
|
||||
const emit = defineEmits(['success']) // 定义 success 事件,用于操作成功后的回调
|
||||
const submitForm = async () => {
|
||||
// 校验表单
|
||||
await formRef.value.validate()
|
||||
// 校验子表单
|
||||
try {
|
||||
await userEducationInfoFormRef.value.validate()
|
||||
} catch (e) {
|
||||
subTabsName.value = 'userEducationInfo'
|
||||
return
|
||||
}
|
||||
try {
|
||||
await userWorkInfoFormRef.value.validate()
|
||||
} catch (e) {
|
||||
subTabsName.value = 'userWorkInfo'
|
||||
return
|
||||
}
|
||||
// 提交请求
|
||||
formLoading.value = true
|
||||
try {
|
||||
const data = formData.value as unknown as UserVO
|
||||
// 拼接子表的数据
|
||||
data.userEducationInfos = userEducationInfoFormRef.value.getData()
|
||||
data.userWorkInfos = userWorkInfoFormRef.value.getData()
|
||||
if (formType.value === 'create') {
|
||||
await UserApi.createUser(data)
|
||||
message.success(t('common.createSuccess'))
|
||||
} else {
|
||||
await UserApi.updateUser(data)
|
||||
message.success(t('common.updateSuccess'))
|
||||
}
|
||||
dialogVisible.value = false
|
||||
// 发送操作成功的事件
|
||||
emit('success')
|
||||
} finally {
|
||||
formLoading.value = false
|
||||
}
|
||||
}
|
||||
|
||||
/** 重置表单 */
|
||||
const resetForm = () => {
|
||||
formData.value = {
|
||||
id: undefined,
|
||||
acctId: undefined,
|
||||
userNo: undefined,
|
||||
realName: undefined,
|
||||
phone: undefined,
|
||||
email: undefined,
|
||||
employmentDate: undefined,
|
||||
regularizationDate: undefined,
|
||||
postId: undefined,
|
||||
postLevel: undefined,
|
||||
gradeLevel: undefined,
|
||||
employType: undefined,
|
||||
trialStartDate: undefined,
|
||||
trialEndDate: undefined,
|
||||
probationPeriod: undefined,
|
||||
contractStartDate: undefined,
|
||||
contractEndDate: undefined,
|
||||
contractTerm: undefined,
|
||||
gender: undefined,
|
||||
age: undefined,
|
||||
resume: undefined,
|
||||
workPhoto: undefined,
|
||||
idCardFaceSide: undefined,
|
||||
idCardNationalEmblemSide: undefined,
|
||||
currentAddress: undefined,
|
||||
idCardNumber: undefined,
|
||||
birthDate: undefined,
|
||||
issuingAuthority: undefined,
|
||||
nation: undefined,
|
||||
householdRegistrationScan: undefined,
|
||||
householdType: undefined,
|
||||
householdAddress: undefined,
|
||||
politicalStatus: undefined,
|
||||
maritalStatus: undefined,
|
||||
relationship1: undefined,
|
||||
contactName1: undefined,
|
||||
contactPhone1: undefined,
|
||||
relationship2: undefined,
|
||||
contactName2: undefined,
|
||||
contactPhone2: undefined,
|
||||
bankBranch: undefined,
|
||||
salaryCardNumber: undefined,
|
||||
accountRelationship: undefined,
|
||||
pensionCardHolder: undefined,
|
||||
pensionAccountNumber: undefined,
|
||||
pensionBankBranch: undefined,
|
||||
insuranceStatus: undefined,
|
||||
oneInchPhoto: undefined,
|
||||
resignationCertScan: undefined,
|
||||
highestEducation: undefined,
|
||||
educationSystemType: undefined,
|
||||
educationCertificateScan: undefined,
|
||||
status: undefined,
|
||||
deptId: undefined
|
||||
}
|
||||
formRef.value?.resetFields()
|
||||
}
|
||||
</script>
|
||||
|
|
@ -0,0 +1,136 @@
|
|||
<template>
|
||||
<el-form
|
||||
ref="formRef"
|
||||
:model="formData"
|
||||
:rules="formRules"
|
||||
v-loading="formLoading"
|
||||
label-width="0px"
|
||||
:inline-message="true"
|
||||
>
|
||||
<el-table :data="formData" class="-mt-10px">
|
||||
<el-table-column label="序号" type="index" width="100" />
|
||||
<el-table-column label="学历" min-width="150">
|
||||
<template #default="{ row, $index }">
|
||||
<el-form-item :prop="`${$index}.education`" :rules="formRules.education" class="mb-0px!">
|
||||
<el-input v-model="row.education" placeholder="请输入学历" />
|
||||
</el-form-item>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="入学日期" min-width="150">
|
||||
<template #default="{ row, $index }">
|
||||
<el-form-item :prop="`${$index}.beginDate`" :rules="formRules.beginDate" class="mb-0px!">
|
||||
<el-date-picker
|
||||
v-model="row.beginDate"
|
||||
type="date"
|
||||
value-format="x"
|
||||
placeholder="选择入学日期"
|
||||
/>
|
||||
</el-form-item>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="毕业日期" min-width="150">
|
||||
<template #default="{ row, $index }">
|
||||
<el-form-item :prop="`${$index}.graduationDate`" :rules="formRules.graduationDate" class="mb-0px!">
|
||||
<el-date-picker
|
||||
v-model="row.graduationDate"
|
||||
type="date"
|
||||
value-format="x"
|
||||
placeholder="选择毕业日期"
|
||||
/>
|
||||
</el-form-item>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="学校名称" min-width="150">
|
||||
<template #default="{ row, $index }">
|
||||
<el-form-item :prop="`${$index}.schoolName`" :rules="formRules.schoolName" class="mb-0px!">
|
||||
<el-input v-model="row.schoolName" placeholder="请输入学校名称" />
|
||||
</el-form-item>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="专业名称" min-width="150">
|
||||
<template #default="{ row, $index }">
|
||||
<el-form-item :prop="`${$index}.major`" :rules="formRules.major" class="mb-0px!">
|
||||
<el-input v-model="row.major" placeholder="请输入专业名称" />
|
||||
</el-form-item>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column align="center" fixed="right" label="操作" width="60">
|
||||
<template #default="{ $index }">
|
||||
<el-button @click="handleDelete($index)" link>—</el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
</el-form>
|
||||
<el-row justify="center" class="mt-3">
|
||||
<el-button @click="handleAdd" round>+ 添加教育信息</el-button>
|
||||
</el-row>
|
||||
</template>
|
||||
<script setup lang="ts">
|
||||
import { UserApi } from '@/api/hrm/user'
|
||||
|
||||
const props = defineProps<{
|
||||
userId: undefined // 员工档案ID(关联hrm_user_infor)(主表的关联字段)
|
||||
}>()
|
||||
const formLoading = ref(false) // 表单的加载中
|
||||
const formData = ref([])
|
||||
const formRules = reactive({
|
||||
userId: [{ required: true, message: '员工档案ID(关联hrm_user_infor)不能为空', trigger: 'blur' }],
|
||||
education: [{ required: true, message: '学历不能为空', trigger: 'blur' }],
|
||||
beginDate: [{ required: true, message: '入学日期不能为空', trigger: 'blur' }],
|
||||
graduationDate: [{ required: true, message: '毕业日期不能为空', trigger: 'blur' }],
|
||||
schoolName: [{ required: true, message: '学校名称不能为空', trigger: 'blur' }]
|
||||
})
|
||||
const formRef = ref() // 表单 Ref
|
||||
|
||||
/** 监听主表的关联字段的变化,加载对应的子表数据 */
|
||||
watch(
|
||||
() => props.userId,
|
||||
async (val) => {
|
||||
// 1. 重置表单
|
||||
formData.value = []
|
||||
// 2. val 非空,则加载数据
|
||||
if (!val) {
|
||||
return;
|
||||
}
|
||||
try {
|
||||
formLoading.value = true
|
||||
formData.value = await UserApi.getUserEducationInfoListByUserId(val)
|
||||
} finally {
|
||||
formLoading.value = false
|
||||
}
|
||||
},
|
||||
{ immediate: true }
|
||||
)
|
||||
|
||||
/** 新增按钮操作 */
|
||||
const handleAdd = () => {
|
||||
const row = {
|
||||
id: undefined,
|
||||
userId: undefined,
|
||||
education: undefined,
|
||||
beginDate: undefined,
|
||||
graduationDate: undefined,
|
||||
schoolName: undefined,
|
||||
major: undefined
|
||||
}
|
||||
row.userId = props.userId
|
||||
formData.value.push(row)
|
||||
}
|
||||
|
||||
/** 删除按钮操作 */
|
||||
const handleDelete = (index) => {
|
||||
formData.value.splice(index, 1)
|
||||
}
|
||||
|
||||
/** 表单校验 */
|
||||
const validate = () => {
|
||||
return formRef.value.validate()
|
||||
}
|
||||
|
||||
/** 表单值 */
|
||||
const getData = () => {
|
||||
return formData.value
|
||||
}
|
||||
|
||||
defineExpose({ validate, getData })
|
||||
</script>
|
||||
|
|
@ -0,0 +1,146 @@
|
|||
<template>
|
||||
<el-form
|
||||
ref="formRef"
|
||||
:model="formData"
|
||||
:rules="formRules"
|
||||
v-loading="formLoading"
|
||||
label-width="0px"
|
||||
:inline-message="true"
|
||||
>
|
||||
<el-table :data="formData" class="-mt-10px">
|
||||
<el-table-column label="序号" type="index" width="100" />
|
||||
<el-table-column label="单位名称" min-width="150">
|
||||
<template #default="{ row, $index }">
|
||||
<el-form-item :prop="`${$index}.companyName`" :rules="formRules.companyName" class="mb-0px!">
|
||||
<el-input v-model="row.companyName" placeholder="请输入单位名称" />
|
||||
</el-form-item>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="部门名称" min-width="150">
|
||||
<template #default="{ row, $index }">
|
||||
<el-form-item :prop="`${$index}.deptName`" :rules="formRules.deptName" class="mb-0px!">
|
||||
<el-input v-model="row.deptName" placeholder="请输入部门名称" />
|
||||
</el-form-item>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="职位名称" min-width="150">
|
||||
<template #default="{ row, $index }">
|
||||
<el-form-item :prop="`${$index}.postName`" :rules="formRules.postName" class="mb-0px!">
|
||||
<el-input v-model="row.postName" placeholder="请输入职位名称" />
|
||||
</el-form-item>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="开始日期" min-width="150">
|
||||
<template #default="{ row, $index }">
|
||||
<el-form-item :prop="`${$index}.startDate`" :rules="formRules.startDate" class="mb-0px!">
|
||||
<el-date-picker
|
||||
v-model="row.startDate"
|
||||
type="date"
|
||||
value-format="x"
|
||||
placeholder="选择开始日期"
|
||||
/>
|
||||
</el-form-item>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="离职日期" min-width="150">
|
||||
<template #default="{ row, $index }">
|
||||
<el-form-item :prop="`${$index}.endDate`" :rules="formRules.endDate" class="mb-0px!">
|
||||
<el-date-picker
|
||||
v-model="row.endDate"
|
||||
type="date"
|
||||
value-format="x"
|
||||
placeholder="选择离职日期"
|
||||
/>
|
||||
</el-form-item>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="待遇(元/月)" min-width="150">
|
||||
<template #default="{ row, $index }">
|
||||
<el-form-item :prop="`${$index}.monthlySalary`" :rules="formRules.monthlySalary" class="mb-0px!">
|
||||
<el-input v-model="row.monthlySalary" placeholder="请输入待遇(元/月)" />
|
||||
</el-form-item>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column align="center" fixed="right" label="操作" width="60">
|
||||
<template #default="{ $index }">
|
||||
<el-button @click="handleDelete($index)" link>—</el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
</el-form>
|
||||
<el-row justify="center" class="mt-3">
|
||||
<el-button @click="handleAdd" round>+ 添加工作经历信息</el-button>
|
||||
</el-row>
|
||||
</template>
|
||||
<script setup lang="ts">
|
||||
import { UserApi } from '@/api/hrm/user'
|
||||
|
||||
const props = defineProps<{
|
||||
userId: undefined // 员工档案ID(关联hrm_user_infor)(主表的关联字段)
|
||||
}>()
|
||||
const formLoading = ref(false) // 表单的加载中
|
||||
const formData = ref([])
|
||||
const formRules = reactive({
|
||||
userId: [{ required: true, message: '员工档案ID(关联hrm_user_infor)不能为空', trigger: 'blur' }],
|
||||
companyName: [{ required: true, message: '单位名称不能为空', trigger: 'blur' }],
|
||||
deptName: [{ required: true, message: '部门名称不能为空', trigger: 'blur' }],
|
||||
postName: [{ required: true, message: '职位名称不能为空', trigger: 'blur' }],
|
||||
startDate: [{ required: true, message: '开始日期不能为空', trigger: 'blur' }],
|
||||
endDate: [{ required: true, message: '离职日期不能为空', trigger: 'blur' }],
|
||||
monthlySalary: [{ required: true, message: '待遇(元/月)不能为空', trigger: 'blur' }]
|
||||
})
|
||||
const formRef = ref() // 表单 Ref
|
||||
|
||||
/** 监听主表的关联字段的变化,加载对应的子表数据 */
|
||||
watch(
|
||||
() => props.userId,
|
||||
async (val) => {
|
||||
// 1. 重置表单
|
||||
formData.value = []
|
||||
// 2. val 非空,则加载数据
|
||||
if (!val) {
|
||||
return;
|
||||
}
|
||||
try {
|
||||
formLoading.value = true
|
||||
formData.value = await UserApi.getUserWorkInfoListByUserId(val)
|
||||
} finally {
|
||||
formLoading.value = false
|
||||
}
|
||||
},
|
||||
{ immediate: true }
|
||||
)
|
||||
|
||||
/** 新增按钮操作 */
|
||||
const handleAdd = () => {
|
||||
const row = {
|
||||
id: undefined,
|
||||
userId: undefined,
|
||||
companyName: undefined,
|
||||
deptName: undefined,
|
||||
postName: undefined,
|
||||
startDate: undefined,
|
||||
endDate: undefined,
|
||||
monthlySalary: undefined
|
||||
}
|
||||
row.userId = props.userId
|
||||
formData.value.push(row)
|
||||
}
|
||||
|
||||
/** 删除按钮操作 */
|
||||
const handleDelete = (index) => {
|
||||
formData.value.splice(index, 1)
|
||||
}
|
||||
|
||||
/** 表单校验 */
|
||||
const validate = () => {
|
||||
return formRef.value.validate()
|
||||
}
|
||||
|
||||
/** 表单值 */
|
||||
const getData = () => {
|
||||
return formData.value
|
||||
}
|
||||
|
||||
defineExpose({ validate, getData })
|
||||
</script>
|
||||
|
|
@ -0,0 +1,905 @@
|
|||
<template>
|
||||
<ContentWrap>
|
||||
<!-- 搜索工作栏 -->
|
||||
<el-form
|
||||
class="-mb-15px"
|
||||
:model="queryParams"
|
||||
ref="queryFormRef"
|
||||
:inline="true"
|
||||
label-width="68px"
|
||||
>
|
||||
<el-form-item label="用户登录账号IDsys_user表" prop="acctId">
|
||||
<el-input
|
||||
v-model="queryParams.acctId"
|
||||
placeholder="请输入用户登录账号IDsys_user表"
|
||||
clearable
|
||||
@keyup.enter="handleQuery"
|
||||
class="!w-240px"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="员工编号" prop="userNo">
|
||||
<el-input
|
||||
v-model="queryParams.userNo"
|
||||
placeholder="请输入员工编号"
|
||||
clearable
|
||||
@keyup.enter="handleQuery"
|
||||
class="!w-240px"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="员工姓名" prop="realName">
|
||||
<el-input
|
||||
v-model="queryParams.realName"
|
||||
placeholder="请输入员工姓名"
|
||||
clearable
|
||||
@keyup.enter="handleQuery"
|
||||
class="!w-240px"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="手机号" prop="phone">
|
||||
<el-input
|
||||
v-model="queryParams.phone"
|
||||
placeholder="请输入手机号"
|
||||
clearable
|
||||
@keyup.enter="handleQuery"
|
||||
class="!w-240px"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="邮箱" prop="email">
|
||||
<el-input
|
||||
v-model="queryParams.email"
|
||||
placeholder="请输入邮箱"
|
||||
clearable
|
||||
@keyup.enter="handleQuery"
|
||||
class="!w-240px"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="入职日期" prop="employmentDate">
|
||||
<el-date-picker
|
||||
v-model="queryParams.employmentDate"
|
||||
value-format="YYYY-MM-DD HH:mm:ss"
|
||||
type="daterange"
|
||||
start-placeholder="开始日期"
|
||||
end-placeholder="结束日期"
|
||||
:default-time="[new Date('1 00:00:00'), new Date('1 23:59:59')]"
|
||||
class="!w-220px"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="转正日期" prop="regularizationDate">
|
||||
<el-date-picker
|
||||
v-model="queryParams.regularizationDate"
|
||||
value-format="YYYY-MM-DD HH:mm:ss"
|
||||
type="daterange"
|
||||
start-placeholder="开始日期"
|
||||
end-placeholder="结束日期"
|
||||
:default-time="[new Date('1 00:00:00'), new Date('1 23:59:59')]"
|
||||
class="!w-220px"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="岗位Id" prop="postId">
|
||||
<el-input
|
||||
v-model="queryParams.postId"
|
||||
placeholder="请输入岗位Id"
|
||||
clearable
|
||||
@keyup.enter="handleQuery"
|
||||
class="!w-240px"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="职级" prop="postLevel">
|
||||
<el-select
|
||||
v-model="queryParams.postLevel"
|
||||
placeholder="请选择职级"
|
||||
clearable
|
||||
class="!w-240px"
|
||||
>
|
||||
<el-option
|
||||
v-for="dict in getIntDictOptions(DICT_TYPE.HRM_POST_RANK)"
|
||||
:key="dict.value"
|
||||
:label="dict.label"
|
||||
:value="dict.value"
|
||||
/>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item label="档级" prop="gradeLevel">
|
||||
<el-select
|
||||
v-model="queryParams.gradeLevel"
|
||||
placeholder="请选择档级"
|
||||
clearable
|
||||
class="!w-240px"
|
||||
>
|
||||
<el-option
|
||||
v-for="dict in getIntDictOptions(DICT_TYPE.HRM_GRADE_LEVEL)"
|
||||
:key="dict.value"
|
||||
:label="dict.label"
|
||||
:value="dict.value"
|
||||
/>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item label="聘用形式(全职、见习、实习、劳务、联创、其他)" prop="employType">
|
||||
<el-select
|
||||
v-model="queryParams.employType"
|
||||
placeholder="请选择聘用形式(全职、见习、实习、劳务、联创、其他)"
|
||||
clearable
|
||||
class="!w-240px"
|
||||
>
|
||||
<el-option
|
||||
v-for="dict in getIntDictOptions(DICT_TYPE.HRM_EMPLOY_TYPE)"
|
||||
:key="dict.value"
|
||||
:label="dict.label"
|
||||
:value="dict.value"
|
||||
/>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item label="试用开始日期" prop="trialStartDate">
|
||||
<el-date-picker
|
||||
v-model="queryParams.trialStartDate"
|
||||
value-format="YYYY-MM-DD HH:mm:ss"
|
||||
type="daterange"
|
||||
start-placeholder="开始日期"
|
||||
end-placeholder="结束日期"
|
||||
:default-time="[new Date('1 00:00:00'), new Date('1 23:59:59')]"
|
||||
class="!w-220px"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="试用结束日期" prop="trialEndDate">
|
||||
<el-date-picker
|
||||
v-model="queryParams.trialEndDate"
|
||||
value-format="YYYY-MM-DD HH:mm:ss"
|
||||
type="daterange"
|
||||
start-placeholder="开始日期"
|
||||
end-placeholder="结束日期"
|
||||
:default-time="[new Date('1 00:00:00'), new Date('1 23:59:59')]"
|
||||
class="!w-220px"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="试用期限(月)" prop="probationPeriod">
|
||||
<el-input
|
||||
v-model="queryParams.probationPeriod"
|
||||
placeholder="请输入试用期限(月)"
|
||||
clearable
|
||||
@keyup.enter="handleQuery"
|
||||
class="!w-240px"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="合同开始日期" prop="contractStartDate">
|
||||
<el-date-picker
|
||||
v-model="queryParams.contractStartDate"
|
||||
value-format="YYYY-MM-DD HH:mm:ss"
|
||||
type="daterange"
|
||||
start-placeholder="开始日期"
|
||||
end-placeholder="结束日期"
|
||||
:default-time="[new Date('1 00:00:00'), new Date('1 23:59:59')]"
|
||||
class="!w-220px"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="合同结束日期" prop="contractEndDate">
|
||||
<el-date-picker
|
||||
v-model="queryParams.contractEndDate"
|
||||
value-format="YYYY-MM-DD HH:mm:ss"
|
||||
type="daterange"
|
||||
start-placeholder="开始日期"
|
||||
end-placeholder="结束日期"
|
||||
:default-time="[new Date('1 00:00:00'), new Date('1 23:59:59')]"
|
||||
class="!w-220px"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="合同期限(年)" prop="contractTerm">
|
||||
<el-input
|
||||
v-model="queryParams.contractTerm"
|
||||
placeholder="请输入合同期限(年)"
|
||||
clearable
|
||||
@keyup.enter="handleQuery"
|
||||
class="!w-240px"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="性别(男、女、其他)" prop="gender">
|
||||
<el-select
|
||||
v-model="queryParams.gender"
|
||||
placeholder="请选择性别(男、女、其他)"
|
||||
clearable
|
||||
class="!w-240px"
|
||||
>
|
||||
<el-option
|
||||
v-for="dict in getIntDictOptions(DICT_TYPE.SYSTEM_USER_SEX)"
|
||||
:key="dict.value"
|
||||
:label="dict.label"
|
||||
:value="dict.value"
|
||||
/>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item label="年龄" prop="age">
|
||||
<el-input
|
||||
v-model="queryParams.age"
|
||||
placeholder="请输入年龄"
|
||||
clearable
|
||||
@keyup.enter="handleQuery"
|
||||
class="!w-240px"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="简历附件" prop="resume">
|
||||
<el-input
|
||||
v-model="queryParams.resume"
|
||||
placeholder="请输入简历附件"
|
||||
clearable
|
||||
@keyup.enter="handleQuery"
|
||||
class="!w-240px"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="形象照" prop="workPhoto">
|
||||
<el-input
|
||||
v-model="queryParams.workPhoto"
|
||||
placeholder="请输入形象照"
|
||||
clearable
|
||||
@keyup.enter="handleQuery"
|
||||
class="!w-240px"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="身份证人像" prop="idCardFaceSide">
|
||||
<el-input
|
||||
v-model="queryParams.idCardFaceSide"
|
||||
placeholder="请输入身份证人像"
|
||||
clearable
|
||||
@keyup.enter="handleQuery"
|
||||
class="!w-240px"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="身份证国徽" prop="idCardNationalEmblemSide">
|
||||
<el-input
|
||||
v-model="queryParams.idCardNationalEmblemSide"
|
||||
placeholder="请输入身份证国徽"
|
||||
clearable
|
||||
@keyup.enter="handleQuery"
|
||||
class="!w-240px"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="现住址" prop="currentAddress">
|
||||
<el-input
|
||||
v-model="queryParams.currentAddress"
|
||||
placeholder="请输入现住址"
|
||||
clearable
|
||||
@keyup.enter="handleQuery"
|
||||
class="!w-240px"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="身份证号" prop="idCardNumber">
|
||||
<el-input
|
||||
v-model="queryParams.idCardNumber"
|
||||
placeholder="请输入身份证号"
|
||||
clearable
|
||||
@keyup.enter="handleQuery"
|
||||
class="!w-240px"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="出生日期" prop="birthDate">
|
||||
<el-date-picker
|
||||
v-model="queryParams.birthDate"
|
||||
value-format="YYYY-MM-DD HH:mm:ss"
|
||||
type="daterange"
|
||||
start-placeholder="开始日期"
|
||||
end-placeholder="结束日期"
|
||||
:default-time="[new Date('1 00:00:00'), new Date('1 23:59:59')]"
|
||||
class="!w-220px"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="发证机关" prop="issuingAuthority">
|
||||
<el-input
|
||||
v-model="queryParams.issuingAuthority"
|
||||
placeholder="请输入发证机关"
|
||||
clearable
|
||||
@keyup.enter="handleQuery"
|
||||
class="!w-240px"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="民族(56个民族)" prop="nation">
|
||||
<el-select
|
||||
v-model="queryParams.nation"
|
||||
placeholder="请选择民族(56个民族)"
|
||||
clearable
|
||||
class="!w-240px"
|
||||
>
|
||||
<el-option
|
||||
v-for="dict in getIntDictOptions(DICT_TYPE.HRM_NATION)"
|
||||
:key="dict.value"
|
||||
:label="dict.label"
|
||||
:value="dict.value"
|
||||
/>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item label="户口扫描件" prop="householdRegistrationScan">
|
||||
<el-input
|
||||
v-model="queryParams.householdRegistrationScan"
|
||||
placeholder="请输入户口扫描件"
|
||||
clearable
|
||||
@keyup.enter="handleQuery"
|
||||
class="!w-240px"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="户籍类型(农村、城镇)" prop="householdType">
|
||||
<el-select
|
||||
v-model="queryParams.householdType"
|
||||
placeholder="请选择户籍类型(农村、城镇)"
|
||||
clearable
|
||||
class="!w-240px"
|
||||
>
|
||||
<el-option
|
||||
v-for="dict in getIntDictOptions(DICT_TYPE.HRM_HOUSEHOLD_TYPE)"
|
||||
:key="dict.value"
|
||||
:label="dict.label"
|
||||
:value="dict.value"
|
||||
/>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item label="户籍地" prop="householdAddress">
|
||||
<el-input
|
||||
v-model="queryParams.householdAddress"
|
||||
placeholder="请输入户籍地"
|
||||
clearable
|
||||
@keyup.enter="handleQuery"
|
||||
class="!w-240px"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="政治面貌(共青团员、中共预备党员、中共党员、群众、其他)" prop="politicalStatus">
|
||||
<el-select
|
||||
v-model="queryParams.politicalStatus"
|
||||
placeholder="请选择政治面貌(共青团员、中共预备党员、中共党员、群众、其他)"
|
||||
clearable
|
||||
class="!w-240px"
|
||||
>
|
||||
<el-option
|
||||
v-for="dict in getIntDictOptions(DICT_TYPE.HRM_POLITICAL_STATUS)"
|
||||
:key="dict.value"
|
||||
:label="dict.label"
|
||||
:value="dict.value"
|
||||
/>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item label="婚姻状况(未婚、已婚未育、已婚已育)" prop="maritalStatus">
|
||||
<el-select
|
||||
v-model="queryParams.maritalStatus"
|
||||
placeholder="请选择婚姻状况(未婚、已婚未育、已婚已育)"
|
||||
clearable
|
||||
class="!w-240px"
|
||||
>
|
||||
<el-option
|
||||
v-for="dict in getIntDictOptions(DICT_TYPE.HRM_MARITAL_STATUS)"
|
||||
:key="dict.value"
|
||||
:label="dict.label"
|
||||
:value="dict.value"
|
||||
/>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item label="关系1(父母、夫妻、兄弟、姊妹、朋友、其他)" prop="relationship1">
|
||||
<el-select
|
||||
v-model="queryParams.relationship1"
|
||||
placeholder="请选择关系1(父母、夫妻、兄弟、姊妹、朋友、其他)"
|
||||
clearable
|
||||
class="!w-240px"
|
||||
>
|
||||
<el-option
|
||||
v-for="dict in getIntDictOptions(DICT_TYPE.HRM_RELATIONSHIP)"
|
||||
:key="dict.value"
|
||||
:label="dict.label"
|
||||
:value="dict.value"
|
||||
/>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item label="联系人姓名1" prop="contactName1">
|
||||
<el-input
|
||||
v-model="queryParams.contactName1"
|
||||
placeholder="请输入联系人姓名1"
|
||||
clearable
|
||||
@keyup.enter="handleQuery"
|
||||
class="!w-240px"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="联系手机号1" prop="contactPhone1">
|
||||
<el-input
|
||||
v-model="queryParams.contactPhone1"
|
||||
placeholder="请输入联系手机号1"
|
||||
clearable
|
||||
@keyup.enter="handleQuery"
|
||||
class="!w-240px"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="关系2(父母、夫妻、兄弟、姊妹、朋友、其他)" prop="relationship2">
|
||||
<el-select
|
||||
v-model="queryParams.relationship2"
|
||||
placeholder="请选择关系2(父母、夫妻、兄弟、姊妹、朋友、其他)"
|
||||
clearable
|
||||
class="!w-240px"
|
||||
>
|
||||
<el-option
|
||||
v-for="dict in getIntDictOptions(DICT_TYPE.HRM_RELATIONSHIP)"
|
||||
:key="dict.value"
|
||||
:label="dict.label"
|
||||
:value="dict.value"
|
||||
/>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item label="联系人姓名2" prop="contactName2">
|
||||
<el-input
|
||||
v-model="queryParams.contactName2"
|
||||
placeholder="请输入联系人姓名2"
|
||||
clearable
|
||||
@keyup.enter="handleQuery"
|
||||
class="!w-240px"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="联系手机号2" prop="contactPhone2">
|
||||
<el-input
|
||||
v-model="queryParams.contactPhone2"
|
||||
placeholder="请输入联系手机号2"
|
||||
clearable
|
||||
@keyup.enter="handleQuery"
|
||||
class="!w-240px"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="工商银行开户支行" prop="bankBranch">
|
||||
<el-input
|
||||
v-model="queryParams.bankBranch"
|
||||
placeholder="请输入工商银行开户支行"
|
||||
clearable
|
||||
@keyup.enter="handleQuery"
|
||||
class="!w-240px"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="工资卡卡号" prop="salaryCardNumber">
|
||||
<el-input
|
||||
v-model="queryParams.salaryCardNumber"
|
||||
placeholder="请输入工资卡卡号"
|
||||
clearable
|
||||
@keyup.enter="handleQuery"
|
||||
class="!w-240px"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="账户名与本人关系(父亲、母亲)" prop="accountRelationship">
|
||||
<el-select
|
||||
v-model="queryParams.accountRelationship"
|
||||
placeholder="请选择账户名与本人关系(父亲、母亲)"
|
||||
clearable
|
||||
class="!w-240px"
|
||||
>
|
||||
<el-option
|
||||
v-for="dict in getIntDictOptions(DICT_TYPE.HRM_RELATIONSHIP)"
|
||||
:key="dict.value"
|
||||
:label="dict.label"
|
||||
:value="dict.value"
|
||||
/>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item label="敬老费银行卡户名" prop="pensionCardHolder">
|
||||
<el-input
|
||||
v-model="queryParams.pensionCardHolder"
|
||||
placeholder="请输入敬老费银行卡户名"
|
||||
clearable
|
||||
@keyup.enter="handleQuery"
|
||||
class="!w-240px"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="敬老费银行账号" prop="pensionAccountNumber">
|
||||
<el-input
|
||||
v-model="queryParams.pensionAccountNumber"
|
||||
placeholder="请输入敬老费银行账号"
|
||||
clearable
|
||||
@keyup.enter="handleQuery"
|
||||
class="!w-240px"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="敬老费开户行网点" prop="pensionBankBranch">
|
||||
<el-input
|
||||
v-model="queryParams.pensionBankBranch"
|
||||
placeholder="请输入敬老费开户行网点"
|
||||
clearable
|
||||
@keyup.enter="handleQuery"
|
||||
class="!w-240px"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="五险缴纳情况(未缴纳过、已缴纳过)" prop="insuranceStatus">
|
||||
<el-select
|
||||
v-model="queryParams.insuranceStatus"
|
||||
placeholder="请选择五险缴纳情况(未缴纳过、已缴纳过)"
|
||||
clearable
|
||||
class="!w-240px"
|
||||
>
|
||||
<el-option
|
||||
v-for="dict in getIntDictOptions(DICT_TYPE.HRM_INSURANCE_STATUS)"
|
||||
:key="dict.value"
|
||||
:label="dict.label"
|
||||
:value="dict.value"
|
||||
/>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item label="1寸白底照(当未缴纳五险一金,需要上传)" prop="oneInchPhoto">
|
||||
<el-input
|
||||
v-model="queryParams.oneInchPhoto"
|
||||
placeholder="请输入1寸白底照(当未缴纳五险一金,需要上传)"
|
||||
clearable
|
||||
@keyup.enter="handleQuery"
|
||||
class="!w-240px"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="离职证明扫描件" prop="resignationCertScan">
|
||||
<el-input
|
||||
v-model="queryParams.resignationCertScan"
|
||||
placeholder="请输入离职证明扫描件"
|
||||
clearable
|
||||
@keyup.enter="handleQuery"
|
||||
class="!w-240px"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="最高学历" prop="highestEducation">
|
||||
<el-input
|
||||
v-model="queryParams.highestEducation"
|
||||
placeholder="请输入最高学历"
|
||||
clearable
|
||||
@keyup.enter="handleQuery"
|
||||
class="!w-240px"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="学制类型(全日制、非全日制)" prop="educationSystemType">
|
||||
<el-select
|
||||
v-model="queryParams.educationSystemType"
|
||||
placeholder="请选择学制类型(全日制、非全日制)"
|
||||
clearable
|
||||
class="!w-240px"
|
||||
>
|
||||
<el-option
|
||||
v-for="dict in getIntDictOptions(DICT_TYPE.HRM_EDUCATION_SYSTEM_TYPE)"
|
||||
:key="dict.value"
|
||||
:label="dict.label"
|
||||
:value="dict.value"
|
||||
/>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item label="学历扫描件" prop="educationCertificateScan">
|
||||
<el-input
|
||||
v-model="queryParams.educationCertificateScan"
|
||||
placeholder="请输入学历扫描件"
|
||||
clearable
|
||||
@keyup.enter="handleQuery"
|
||||
class="!w-240px"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="状态" prop="status">
|
||||
<el-select
|
||||
v-model="queryParams.status"
|
||||
placeholder="请选择状态"
|
||||
clearable
|
||||
class="!w-240px"
|
||||
>
|
||||
<el-option label="请选择字典生成" value="" />
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item label="部门ID" prop="deptId">
|
||||
<el-input
|
||||
v-model="queryParams.deptId"
|
||||
placeholder="请输入部门ID"
|
||||
clearable
|
||||
@keyup.enter="handleQuery"
|
||||
class="!w-240px"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="创建时间" prop="createTime">
|
||||
<el-date-picker
|
||||
v-model="queryParams.createTime"
|
||||
value-format="YYYY-MM-DD HH:mm:ss"
|
||||
type="daterange"
|
||||
start-placeholder="开始日期"
|
||||
end-placeholder="结束日期"
|
||||
:default-time="[new Date('1 00:00:00'), new Date('1 23:59:59')]"
|
||||
class="!w-220px"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item>
|
||||
<el-button @click="handleQuery"><Icon icon="ep:search" class="mr-5px" /> 搜索</el-button>
|
||||
<el-button @click="resetQuery"><Icon icon="ep:refresh" class="mr-5px" /> 重置</el-button>
|
||||
<el-button
|
||||
type="primary"
|
||||
plain
|
||||
@click="openForm('create')"
|
||||
v-hasPermi="['hrm:user:create']"
|
||||
>
|
||||
<Icon icon="ep:plus" class="mr-5px" /> 新增
|
||||
</el-button>
|
||||
<el-button
|
||||
type="success"
|
||||
plain
|
||||
@click="handleExport"
|
||||
:loading="exportLoading"
|
||||
v-hasPermi="['hrm:user:export']"
|
||||
>
|
||||
<Icon icon="ep:download" class="mr-5px" /> 导出
|
||||
</el-button>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
</ContentWrap>
|
||||
|
||||
<!-- 列表 -->
|
||||
<ContentWrap>
|
||||
<el-table v-loading="loading" :data="list" :stripe="true" :show-overflow-tooltip="true">
|
||||
<el-table-column label="唯一主键" align="center" prop="id" />
|
||||
<el-table-column label="用户登录账号IDsys_user表" align="center" prop="acctId" />
|
||||
<el-table-column label="员工编号" align="center" prop="userNo" />
|
||||
<el-table-column label="员工姓名" align="center" prop="realName" />
|
||||
<el-table-column label="手机号" align="center" prop="phone" />
|
||||
<el-table-column label="邮箱" align="center" prop="email" />
|
||||
<el-table-column label="入职日期" align="center" prop="employmentDate" />
|
||||
<el-table-column label="转正日期" align="center" prop="regularizationDate" />
|
||||
<el-table-column label="岗位Id" align="center" prop="postId" />
|
||||
<el-table-column label="职级" align="center" prop="postLevel">
|
||||
<template #default="scope">
|
||||
<dict-tag :type="DICT_TYPE.HRM_POST_RANK" :value="scope.row.postLevel" />
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="档级" align="center" prop="gradeLevel">
|
||||
<template #default="scope">
|
||||
<dict-tag :type="DICT_TYPE.HRM_GRADE_LEVEL" :value="scope.row.gradeLevel" />
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="聘用形式(全职、见习、实习、劳务、联创、其他)" align="center" prop="employType">
|
||||
<template #default="scope">
|
||||
<dict-tag :type="DICT_TYPE.HRM_EMPLOY_TYPE" :value="scope.row.employType" />
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="试用开始日期" align="center" prop="trialStartDate" />
|
||||
<el-table-column label="试用结束日期" align="center" prop="trialEndDate" />
|
||||
<el-table-column label="试用期限(月)" align="center" prop="probationPeriod" />
|
||||
<el-table-column label="合同开始日期" align="center" prop="contractStartDate" />
|
||||
<el-table-column label="合同结束日期" align="center" prop="contractEndDate" />
|
||||
<el-table-column label="合同期限(年)" align="center" prop="contractTerm" />
|
||||
<el-table-column label="性别(男、女、其他)" align="center" prop="gender">
|
||||
<template #default="scope">
|
||||
<dict-tag :type="DICT_TYPE.SYSTEM_USER_SEX" :value="scope.row.gender" />
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="年龄" align="center" prop="age" />
|
||||
<el-table-column label="简历附件" align="center" prop="resume" />
|
||||
<el-table-column label="形象照" align="center" prop="workPhoto" />
|
||||
<el-table-column label="身份证人像" align="center" prop="idCardFaceSide" />
|
||||
<el-table-column label="身份证国徽" align="center" prop="idCardNationalEmblemSide" />
|
||||
<el-table-column label="现住址" align="center" prop="currentAddress" />
|
||||
<el-table-column label="身份证号" align="center" prop="idCardNumber" />
|
||||
<el-table-column label="出生日期" align="center" prop="birthDate" />
|
||||
<el-table-column label="发证机关" align="center" prop="issuingAuthority" />
|
||||
<el-table-column label="民族(56个民族)" align="center" prop="nation">
|
||||
<template #default="scope">
|
||||
<dict-tag :type="DICT_TYPE.HRM_NATION" :value="scope.row.nation" />
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="户口扫描件" align="center" prop="householdRegistrationScan" />
|
||||
<el-table-column label="户籍类型(农村、城镇)" align="center" prop="householdType">
|
||||
<template #default="scope">
|
||||
<dict-tag :type="DICT_TYPE.HRM_HOUSEHOLD_TYPE" :value="scope.row.householdType" />
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="户籍地" align="center" prop="householdAddress" />
|
||||
<el-table-column label="政治面貌(共青团员、中共预备党员、中共党员、群众、其他)" align="center" prop="politicalStatus">
|
||||
<template #default="scope">
|
||||
<dict-tag :type="DICT_TYPE.HRM_POLITICAL_STATUS" :value="scope.row.politicalStatus" />
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="婚姻状况(未婚、已婚未育、已婚已育)" align="center" prop="maritalStatus">
|
||||
<template #default="scope">
|
||||
<dict-tag :type="DICT_TYPE.HRM_MARITAL_STATUS" :value="scope.row.maritalStatus" />
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="关系1(父母、夫妻、兄弟、姊妹、朋友、其他)" align="center" prop="relationship1">
|
||||
<template #default="scope">
|
||||
<dict-tag :type="DICT_TYPE.HRM_RELATIONSHIP" :value="scope.row.relationship1" />
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="联系人姓名1" align="center" prop="contactName1" />
|
||||
<el-table-column label="联系手机号1" align="center" prop="contactPhone1" />
|
||||
<el-table-column label="关系2(父母、夫妻、兄弟、姊妹、朋友、其他)" align="center" prop="relationship2">
|
||||
<template #default="scope">
|
||||
<dict-tag :type="DICT_TYPE.HRM_RELATIONSHIP" :value="scope.row.relationship2" />
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="联系人姓名2" align="center" prop="contactName2" />
|
||||
<el-table-column label="联系手机号2" align="center" prop="contactPhone2" />
|
||||
<el-table-column label="工商银行开户支行" align="center" prop="bankBranch" />
|
||||
<el-table-column label="工资卡卡号" align="center" prop="salaryCardNumber" />
|
||||
<el-table-column label="账户名与本人关系(父亲、母亲)" align="center" prop="accountRelationship">
|
||||
<template #default="scope">
|
||||
<dict-tag :type="DICT_TYPE.HRM_RELATIONSHIP" :value="scope.row.accountRelationship" />
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="敬老费银行卡户名" align="center" prop="pensionCardHolder" />
|
||||
<el-table-column label="敬老费银行账号" align="center" prop="pensionAccountNumber" />
|
||||
<el-table-column label="敬老费开户行网点" align="center" prop="pensionBankBranch" />
|
||||
<el-table-column label="五险缴纳情况(未缴纳过、已缴纳过)" align="center" prop="insuranceStatus">
|
||||
<template #default="scope">
|
||||
<dict-tag :type="DICT_TYPE.HRM_INSURANCE_STATUS" :value="scope.row.insuranceStatus" />
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="1寸白底照(当未缴纳五险一金,需要上传)" align="center" prop="oneInchPhoto" />
|
||||
<el-table-column label="离职证明扫描件" align="center" prop="resignationCertScan" />
|
||||
<el-table-column label="最高学历" align="center" prop="highestEducation" />
|
||||
<el-table-column label="学制类型(全日制、非全日制)" align="center" prop="educationSystemType">
|
||||
<template #default="scope">
|
||||
<dict-tag :type="DICT_TYPE.HRM_EDUCATION_SYSTEM_TYPE" :value="scope.row.educationSystemType" />
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="学历扫描件" align="center" prop="educationCertificateScan" />
|
||||
<el-table-column label="状态" align="center" prop="status" />
|
||||
<el-table-column label="部门ID" align="center" prop="deptId" />
|
||||
<el-table-column
|
||||
label="创建时间"
|
||||
align="center"
|
||||
prop="createTime"
|
||||
:formatter="dateFormatter"
|
||||
width="180px"
|
||||
/>
|
||||
<el-table-column label="操作" align="center" min-width="120px">
|
||||
<template #default="scope">
|
||||
<el-button
|
||||
link
|
||||
type="primary"
|
||||
@click="openForm('update', scope.row.id)"
|
||||
v-hasPermi="['hrm:user:update']"
|
||||
>
|
||||
编辑
|
||||
</el-button>
|
||||
<el-button
|
||||
link
|
||||
type="danger"
|
||||
@click="handleDelete(scope.row.id)"
|
||||
v-hasPermi="['hrm:user:delete']"
|
||||
>
|
||||
删除
|
||||
</el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
<!-- 分页 -->
|
||||
<Pagination
|
||||
:total="total"
|
||||
v-model:page="queryParams.pageNo"
|
||||
v-model:limit="queryParams.pageSize"
|
||||
@pagination="getList"
|
||||
/>
|
||||
</ContentWrap>
|
||||
|
||||
<!-- 表单弹窗:添加/修改 -->
|
||||
<UserForm ref="formRef" @success="getList" />
|
||||
</template>
|
||||
|
||||
<script setup lang="ts">
|
||||
import { getIntDictOptions, DICT_TYPE } from '@/utils/dict'
|
||||
import { dateFormatter } from '@/utils/formatTime'
|
||||
import download from '@/utils/download'
|
||||
import { UserApi, UserVO } from '@/api/hrm/user'
|
||||
import UserForm from './UserForm.vue'
|
||||
|
||||
/** 员工档案信息 列表 */
|
||||
defineOptions({ name: 'User' })
|
||||
|
||||
const message = useMessage() // 消息弹窗
|
||||
const { t } = useI18n() // 国际化
|
||||
|
||||
const loading = ref(true) // 列表的加载中
|
||||
const list = ref<UserVO[]>([]) // 列表的数据
|
||||
const total = ref(0) // 列表的总页数
|
||||
const queryParams = reactive({
|
||||
pageNo: 1,
|
||||
pageSize: 10,
|
||||
acctId: undefined,
|
||||
userNo: undefined,
|
||||
realName: undefined,
|
||||
phone: undefined,
|
||||
email: undefined,
|
||||
employmentDate: [],
|
||||
regularizationDate: [],
|
||||
postId: undefined,
|
||||
postLevel: undefined,
|
||||
gradeLevel: undefined,
|
||||
employType: undefined,
|
||||
trialStartDate: [],
|
||||
trialEndDate: [],
|
||||
probationPeriod: undefined,
|
||||
contractStartDate: [],
|
||||
contractEndDate: [],
|
||||
contractTerm: undefined,
|
||||
gender: undefined,
|
||||
age: undefined,
|
||||
resume: undefined,
|
||||
workPhoto: undefined,
|
||||
idCardFaceSide: undefined,
|
||||
idCardNationalEmblemSide: undefined,
|
||||
currentAddress: undefined,
|
||||
idCardNumber: undefined,
|
||||
birthDate: [],
|
||||
issuingAuthority: undefined,
|
||||
nation: undefined,
|
||||
householdRegistrationScan: undefined,
|
||||
householdType: undefined,
|
||||
householdAddress: undefined,
|
||||
politicalStatus: undefined,
|
||||
maritalStatus: undefined,
|
||||
relationship1: undefined,
|
||||
contactName1: undefined,
|
||||
contactPhone1: undefined,
|
||||
relationship2: undefined,
|
||||
contactName2: undefined,
|
||||
contactPhone2: undefined,
|
||||
bankBranch: undefined,
|
||||
salaryCardNumber: undefined,
|
||||
accountRelationship: undefined,
|
||||
pensionCardHolder: undefined,
|
||||
pensionAccountNumber: undefined,
|
||||
pensionBankBranch: undefined,
|
||||
insuranceStatus: undefined,
|
||||
oneInchPhoto: undefined,
|
||||
resignationCertScan: undefined,
|
||||
highestEducation: undefined,
|
||||
educationSystemType: undefined,
|
||||
educationCertificateScan: undefined,
|
||||
status: undefined,
|
||||
deptId: undefined,
|
||||
createTime: []
|
||||
})
|
||||
const queryFormRef = ref() // 搜索的表单
|
||||
const exportLoading = ref(false) // 导出的加载中
|
||||
|
||||
/** 查询列表 */
|
||||
const getList = async () => {
|
||||
loading.value = true
|
||||
try {
|
||||
const data = await UserApi.getUserPage(queryParams)
|
||||
list.value = data.list
|
||||
total.value = data.total
|
||||
} finally {
|
||||
loading.value = false
|
||||
}
|
||||
}
|
||||
|
||||
/** 搜索按钮操作 */
|
||||
const handleQuery = () => {
|
||||
queryParams.pageNo = 1
|
||||
getList()
|
||||
}
|
||||
|
||||
/** 重置按钮操作 */
|
||||
const resetQuery = () => {
|
||||
queryFormRef.value.resetFields()
|
||||
handleQuery()
|
||||
}
|
||||
|
||||
/** 添加/修改操作 */
|
||||
const formRef = ref()
|
||||
const openForm = (type: string, id?: number) => {
|
||||
formRef.value.open(type, id)
|
||||
}
|
||||
|
||||
/** 删除按钮操作 */
|
||||
const handleDelete = async (id: number) => {
|
||||
try {
|
||||
// 删除的二次确认
|
||||
await message.delConfirm()
|
||||
// 发起删除
|
||||
await UserApi.deleteUser(id)
|
||||
message.success(t('common.delSuccess'))
|
||||
// 刷新列表
|
||||
await getList()
|
||||
} catch {}
|
||||
}
|
||||
|
||||
/** 导出按钮操作 */
|
||||
const handleExport = async () => {
|
||||
try {
|
||||
// 导出的二次确认
|
||||
await message.exportConfirm()
|
||||
// 发起导出
|
||||
exportLoading.value = true
|
||||
const data = await UserApi.exportUser(queryParams)
|
||||
download.excel(data, '员工档案信息.xls')
|
||||
} catch {
|
||||
} finally {
|
||||
exportLoading.value = false
|
||||
}
|
||||
}
|
||||
|
||||
/** 初始化 **/
|
||||
onMounted(() => {
|
||||
getList()
|
||||
})
|
||||
</script>
|
||||
|
|
@ -0,0 +1,131 @@
|
|||
<template>
|
||||
<Dialog :title="dialogTitle" v-model="dialogVisible">
|
||||
<el-form
|
||||
ref="formRef"
|
||||
:model="formData"
|
||||
:rules="formRules"
|
||||
label-width="100px"
|
||||
v-loading="formLoading"
|
||||
>
|
||||
<el-form-item label="员工档案ID(关联hrm_user_infor)" prop="userId">
|
||||
<el-input v-model="formData.userId" placeholder="请输入员工档案ID(关联hrm_user_infor)" />
|
||||
</el-form-item>
|
||||
<el-form-item label="学历" prop="education">
|
||||
<el-input v-model="formData.education" placeholder="请输入学历" />
|
||||
</el-form-item>
|
||||
<el-form-item label="入学日期" prop="beginDate">
|
||||
<el-date-picker
|
||||
v-model="formData.beginDate"
|
||||
type="date"
|
||||
value-format="x"
|
||||
placeholder="选择入学日期"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="毕业日期" prop="graduationDate">
|
||||
<el-date-picker
|
||||
v-model="formData.graduationDate"
|
||||
type="date"
|
||||
value-format="x"
|
||||
placeholder="选择毕业日期"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="学校名称" prop="schoolName">
|
||||
<el-input v-model="formData.schoolName" placeholder="请输入学校名称" />
|
||||
</el-form-item>
|
||||
<el-form-item label="专业名称" prop="major">
|
||||
<el-input v-model="formData.major" placeholder="请输入专业名称" />
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
<template #footer>
|
||||
<el-button @click="submitForm" type="primary" :disabled="formLoading">确 定</el-button>
|
||||
<el-button @click="dialogVisible = false">取 消</el-button>
|
||||
</template>
|
||||
</Dialog>
|
||||
</template>
|
||||
<script setup lang="ts">
|
||||
import { UserEducationInfoApi, UserEducationInfoVO } from '@/api/hrm/usereducationinfo'
|
||||
|
||||
/** 教育信息 表单 */
|
||||
defineOptions({ name: 'UserEducationInfoForm' })
|
||||
|
||||
const { t } = useI18n() // 国际化
|
||||
const message = useMessage() // 消息弹窗
|
||||
|
||||
const dialogVisible = ref(false) // 弹窗的是否展示
|
||||
const dialogTitle = ref('') // 弹窗的标题
|
||||
const formLoading = ref(false) // 表单的加载中:1)修改时的数据加载;2)提交的按钮禁用
|
||||
const formType = ref('') // 表单的类型:create - 新增;update - 修改
|
||||
const formData = ref({
|
||||
id: undefined,
|
||||
userId: undefined,
|
||||
education: undefined,
|
||||
beginDate: undefined,
|
||||
graduationDate: undefined,
|
||||
schoolName: undefined,
|
||||
major: undefined
|
||||
})
|
||||
const formRules = reactive({
|
||||
userId: [{ required: true, message: '员工档案ID(关联hrm_user_infor)不能为空', trigger: 'blur' }],
|
||||
education: [{ required: true, message: '学历不能为空', trigger: 'blur' }],
|
||||
beginDate: [{ required: true, message: '入学日期不能为空', trigger: 'blur' }],
|
||||
graduationDate: [{ required: true, message: '毕业日期不能为空', trigger: 'blur' }],
|
||||
schoolName: [{ required: true, message: '学校名称不能为空', trigger: 'blur' }]
|
||||
})
|
||||
const formRef = ref() // 表单 Ref
|
||||
|
||||
/** 打开弹窗 */
|
||||
const open = async (type: string, id?: number) => {
|
||||
dialogVisible.value = true
|
||||
dialogTitle.value = t('action.' + type)
|
||||
formType.value = type
|
||||
resetForm()
|
||||
// 修改时,设置数据
|
||||
if (id) {
|
||||
formLoading.value = true
|
||||
try {
|
||||
formData.value = await UserEducationInfoApi.getUserEducationInfo(id)
|
||||
} finally {
|
||||
formLoading.value = false
|
||||
}
|
||||
}
|
||||
}
|
||||
defineExpose({ open }) // 提供 open 方法,用于打开弹窗
|
||||
|
||||
/** 提交表单 */
|
||||
const emit = defineEmits(['success']) // 定义 success 事件,用于操作成功后的回调
|
||||
const submitForm = async () => {
|
||||
// 校验表单
|
||||
await formRef.value.validate()
|
||||
// 提交请求
|
||||
formLoading.value = true
|
||||
try {
|
||||
const data = formData.value as unknown as UserEducationInfoVO
|
||||
if (formType.value === 'create') {
|
||||
await UserEducationInfoApi.createUserEducationInfo(data)
|
||||
message.success(t('common.createSuccess'))
|
||||
} else {
|
||||
await UserEducationInfoApi.updateUserEducationInfo(data)
|
||||
message.success(t('common.updateSuccess'))
|
||||
}
|
||||
dialogVisible.value = false
|
||||
// 发送操作成功的事件
|
||||
emit('success')
|
||||
} finally {
|
||||
formLoading.value = false
|
||||
}
|
||||
}
|
||||
|
||||
/** 重置表单 */
|
||||
const resetForm = () => {
|
||||
formData.value = {
|
||||
id: undefined,
|
||||
userId: undefined,
|
||||
education: undefined,
|
||||
beginDate: undefined,
|
||||
graduationDate: undefined,
|
||||
schoolName: undefined,
|
||||
major: undefined
|
||||
}
|
||||
formRef.value?.resetFields()
|
||||
}
|
||||
</script>
|
||||
|
|
@ -0,0 +1,226 @@
|
|||
<template>
|
||||
<ContentWrap>
|
||||
<!-- 搜索工作栏 -->
|
||||
<el-form
|
||||
class="-mb-15px"
|
||||
:model="queryParams"
|
||||
ref="queryFormRef"
|
||||
:inline="true"
|
||||
label-width="68px"
|
||||
>
|
||||
<el-form-item label="员工档案ID(关联hrm_user_infor)" prop="userId">
|
||||
<el-input
|
||||
v-model="queryParams.userId"
|
||||
placeholder="请输入员工档案ID(关联hrm_user_infor)"
|
||||
clearable
|
||||
@keyup.enter="handleQuery"
|
||||
class="!w-240px"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="学历" prop="education">
|
||||
<el-input
|
||||
v-model="queryParams.education"
|
||||
placeholder="请输入学历"
|
||||
clearable
|
||||
@keyup.enter="handleQuery"
|
||||
class="!w-240px"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="入学日期" prop="beginDate">
|
||||
<el-date-picker
|
||||
v-model="queryParams.beginDate"
|
||||
value-format="YYYY-MM-DD HH:mm:ss"
|
||||
type="daterange"
|
||||
start-placeholder="开始日期"
|
||||
end-placeholder="结束日期"
|
||||
:default-time="[new Date('1 00:00:00'), new Date('1 23:59:59')]"
|
||||
class="!w-220px"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="毕业日期" prop="graduationDate">
|
||||
<el-date-picker
|
||||
v-model="queryParams.graduationDate"
|
||||
value-format="YYYY-MM-DD HH:mm:ss"
|
||||
type="daterange"
|
||||
start-placeholder="开始日期"
|
||||
end-placeholder="结束日期"
|
||||
:default-time="[new Date('1 00:00:00'), new Date('1 23:59:59')]"
|
||||
class="!w-220px"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="学校名称" prop="schoolName">
|
||||
<el-input
|
||||
v-model="queryParams.schoolName"
|
||||
placeholder="请输入学校名称"
|
||||
clearable
|
||||
@keyup.enter="handleQuery"
|
||||
class="!w-240px"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="专业名称" prop="major">
|
||||
<el-input
|
||||
v-model="queryParams.major"
|
||||
placeholder="请输入专业名称"
|
||||
clearable
|
||||
@keyup.enter="handleQuery"
|
||||
class="!w-240px"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item>
|
||||
<el-button @click="handleQuery"><Icon icon="ep:search" class="mr-5px" /> 搜索</el-button>
|
||||
<el-button @click="resetQuery"><Icon icon="ep:refresh" class="mr-5px" /> 重置</el-button>
|
||||
<el-button
|
||||
type="primary"
|
||||
plain
|
||||
@click="openForm('create')"
|
||||
v-hasPermi="['hrm:user-education-info:create']"
|
||||
>
|
||||
<Icon icon="ep:plus" class="mr-5px" /> 新增
|
||||
</el-button>
|
||||
<el-button
|
||||
type="success"
|
||||
plain
|
||||
@click="handleExport"
|
||||
:loading="exportLoading"
|
||||
v-hasPermi="['hrm:user-education-info:export']"
|
||||
>
|
||||
<Icon icon="ep:download" class="mr-5px" /> 导出
|
||||
</el-button>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
</ContentWrap>
|
||||
|
||||
<!-- 列表 -->
|
||||
<ContentWrap>
|
||||
<el-table v-loading="loading" :data="list" :stripe="true" :show-overflow-tooltip="true">
|
||||
<el-table-column label="唯一主键" align="center" prop="id" />
|
||||
<el-table-column label="员工档案ID(关联hrm_user_infor)" align="center" prop="userId" />
|
||||
<el-table-column label="学历" align="center" prop="education" />
|
||||
<el-table-column label="入学日期" align="center" prop="beginDate" />
|
||||
<el-table-column label="毕业日期" align="center" prop="graduationDate" />
|
||||
<el-table-column label="学校名称" align="center" prop="schoolName" />
|
||||
<el-table-column label="专业名称" align="center" prop="major" />
|
||||
<el-table-column label="操作" align="center" min-width="120px">
|
||||
<template #default="scope">
|
||||
<el-button
|
||||
link
|
||||
type="primary"
|
||||
@click="openForm('update', scope.row.id)"
|
||||
v-hasPermi="['hrm:user-education-info:update']"
|
||||
>
|
||||
编辑
|
||||
</el-button>
|
||||
<el-button
|
||||
link
|
||||
type="danger"
|
||||
@click="handleDelete(scope.row.id)"
|
||||
v-hasPermi="['hrm:user-education-info:delete']"
|
||||
>
|
||||
删除
|
||||
</el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
<!-- 分页 -->
|
||||
<Pagination
|
||||
:total="total"
|
||||
v-model:page="queryParams.pageNo"
|
||||
v-model:limit="queryParams.pageSize"
|
||||
@pagination="getList"
|
||||
/>
|
||||
</ContentWrap>
|
||||
|
||||
<!-- 表单弹窗:添加/修改 -->
|
||||
<UserEducationInfoForm ref="formRef" @success="getList" />
|
||||
</template>
|
||||
|
||||
<script setup lang="ts">
|
||||
import download from '@/utils/download'
|
||||
import { UserEducationInfoApi, UserEducationInfoVO } from '@/api/hrm/usereducationinfo'
|
||||
import UserEducationInfoForm from './UserEducationInfoForm.vue'
|
||||
|
||||
/** 教育信息 列表 */
|
||||
defineOptions({ name: 'UserEducationInfo' })
|
||||
|
||||
const message = useMessage() // 消息弹窗
|
||||
const { t } = useI18n() // 国际化
|
||||
|
||||
const loading = ref(true) // 列表的加载中
|
||||
const list = ref<UserEducationInfoVO[]>([]) // 列表的数据
|
||||
const total = ref(0) // 列表的总页数
|
||||
const queryParams = reactive({
|
||||
pageNo: 1,
|
||||
pageSize: 10,
|
||||
userId: undefined,
|
||||
education: undefined,
|
||||
beginDate: [],
|
||||
graduationDate: [],
|
||||
schoolName: undefined,
|
||||
major: undefined
|
||||
})
|
||||
const queryFormRef = ref() // 搜索的表单
|
||||
const exportLoading = ref(false) // 导出的加载中
|
||||
|
||||
/** 查询列表 */
|
||||
const getList = async () => {
|
||||
loading.value = true
|
||||
try {
|
||||
const data = await UserEducationInfoApi.getUserEducationInfoPage(queryParams)
|
||||
list.value = data.list
|
||||
total.value = data.total
|
||||
} finally {
|
||||
loading.value = false
|
||||
}
|
||||
}
|
||||
|
||||
/** 搜索按钮操作 */
|
||||
const handleQuery = () => {
|
||||
queryParams.pageNo = 1
|
||||
getList()
|
||||
}
|
||||
|
||||
/** 重置按钮操作 */
|
||||
const resetQuery = () => {
|
||||
queryFormRef.value.resetFields()
|
||||
handleQuery()
|
||||
}
|
||||
|
||||
/** 添加/修改操作 */
|
||||
const formRef = ref()
|
||||
const openForm = (type: string, id?: number) => {
|
||||
formRef.value.open(type, id)
|
||||
}
|
||||
|
||||
/** 删除按钮操作 */
|
||||
const handleDelete = async (id: number) => {
|
||||
try {
|
||||
// 删除的二次确认
|
||||
await message.delConfirm()
|
||||
// 发起删除
|
||||
await UserEducationInfoApi.deleteUserEducationInfo(id)
|
||||
message.success(t('common.delSuccess'))
|
||||
// 刷新列表
|
||||
await getList()
|
||||
} catch {}
|
||||
}
|
||||
|
||||
/** 导出按钮操作 */
|
||||
const handleExport = async () => {
|
||||
try {
|
||||
// 导出的二次确认
|
||||
await message.exportConfirm()
|
||||
// 发起导出
|
||||
exportLoading.value = true
|
||||
const data = await UserEducationInfoApi.exportUserEducationInfo(queryParams)
|
||||
download.excel(data, '教育信息.xls')
|
||||
} catch {
|
||||
} finally {
|
||||
exportLoading.value = false
|
||||
}
|
||||
}
|
||||
|
||||
/** 初始化 **/
|
||||
onMounted(() => {
|
||||
getList()
|
||||
})
|
||||
</script>
|
||||
|
|
@ -0,0 +1,177 @@
|
|||
<template>
|
||||
<Dialog :title="dialogTitle" v-model="dialogVisible">
|
||||
<el-form
|
||||
ref="formRef"
|
||||
:model="formData"
|
||||
:rules="formRules"
|
||||
label-width="100px"
|
||||
v-loading="formLoading"
|
||||
>
|
||||
<el-form-item label="员工ID" prop="userId">
|
||||
<el-input v-model="formData.userId" placeholder="请输入员工ID" />
|
||||
</el-form-item>
|
||||
<el-form-item label="消息类型,如系统通知、提醒、关怀等" prop="messageType">
|
||||
<el-select v-model="formData.messageType" placeholder="请选择消息类型,如系统通知、提醒、关怀等">
|
||||
<el-option
|
||||
v-for="dict in getIntDictOptions(DICT_TYPE.HRM_MESSAGE_TYPE)"
|
||||
:key="dict.value"
|
||||
:label="dict.label"
|
||||
:value="dict.value"
|
||||
/>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item label="消息关怀类型,如生日、节日等" prop="careType">
|
||||
<el-select v-model="formData.careType" placeholder="请选择消息关怀类型,如生日、节日等">
|
||||
<el-option
|
||||
v-for="dict in getIntDictOptions(DICT_TYPE.HRM_CARA_TYPE)"
|
||||
:key="dict.value"
|
||||
:label="dict.label"
|
||||
:value="dict.value"
|
||||
/>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item label="通知主题" prop="title">
|
||||
<el-input v-model="formData.title" placeholder="请输入通知主题" />
|
||||
</el-form-item>
|
||||
<el-form-item label="通知内容" prop="content">
|
||||
<Editor v-model="formData.content" height="150px" />
|
||||
</el-form-item>
|
||||
<el-form-item label="通知方式,如邮件、短信、系统通知" prop="noticeMethod">
|
||||
<el-select v-model="formData.noticeMethod" placeholder="请选择通知方式,如邮件、短信、系统通知">
|
||||
<el-option
|
||||
v-for="dict in getIntDictOptions(DICT_TYPE.HRM_NOTICE_METHOD)"
|
||||
:key="dict.value"
|
||||
:label="dict.label"
|
||||
:value="dict.value"
|
||||
/>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item label="通知时间" prop="noticeTime">
|
||||
<el-date-picker
|
||||
v-model="formData.noticeTime"
|
||||
type="date"
|
||||
value-format="x"
|
||||
placeholder="选择通知时间"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="消息状态:0=未读,1=已读" prop="messageStatus">
|
||||
<el-select v-model="formData.messageStatus" placeholder="请选择消息状态:0=未读,1=已读">
|
||||
<el-option
|
||||
v-for="dict in getIntDictOptions(DICT_TYPE.HRM_MESSAGE_STATUS)"
|
||||
:key="dict.value"
|
||||
:label="dict.label"
|
||||
:value="dict.value"
|
||||
/>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item label="已读时间" prop="readTime">
|
||||
<el-date-picker
|
||||
v-model="formData.readTime"
|
||||
type="date"
|
||||
value-format="x"
|
||||
placeholder="选择已读时间"
|
||||
/>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
<template #footer>
|
||||
<el-button @click="submitForm" type="primary" :disabled="formLoading">确 定</el-button>
|
||||
<el-button @click="dialogVisible = false">取 消</el-button>
|
||||
</template>
|
||||
</Dialog>
|
||||
</template>
|
||||
<script setup lang="ts">
|
||||
import { getIntDictOptions, DICT_TYPE } from '@/utils/dict'
|
||||
import { UserMessageApi, UserMessageVO } from '@/api/hrm/usermessage'
|
||||
|
||||
/** 员工消息 表单 */
|
||||
defineOptions({ name: 'UserMessageForm' })
|
||||
|
||||
const { t } = useI18n() // 国际化
|
||||
const message = useMessage() // 消息弹窗
|
||||
|
||||
const dialogVisible = ref(false) // 弹窗的是否展示
|
||||
const dialogTitle = ref('') // 弹窗的标题
|
||||
const formLoading = ref(false) // 表单的加载中:1)修改时的数据加载;2)提交的按钮禁用
|
||||
const formType = ref('') // 表单的类型:create - 新增;update - 修改
|
||||
const formData = ref({
|
||||
id: undefined,
|
||||
userId: undefined,
|
||||
messageType: undefined,
|
||||
careType: undefined,
|
||||
title: undefined,
|
||||
content: undefined,
|
||||
noticeMethod: undefined,
|
||||
noticeTime: undefined,
|
||||
messageStatus: undefined,
|
||||
readTime: undefined
|
||||
})
|
||||
const formRules = reactive({
|
||||
userId: [{ required: true, message: '员工ID不能为空', trigger: 'blur' }],
|
||||
messageType: [{ required: true, message: '消息类型,如系统通知、提醒、关怀等不能为空', trigger: 'change' }],
|
||||
title: [{ required: true, message: '通知主题不能为空', trigger: 'blur' }],
|
||||
content: [{ required: true, message: '通知内容不能为空', trigger: 'blur' }],
|
||||
noticeMethod: [{ required: true, message: '通知方式,如邮件、短信、系统通知不能为空', trigger: 'change' }],
|
||||
noticeTime: [{ required: true, message: '通知时间不能为空', trigger: 'blur' }],
|
||||
messageStatus: [{ required: true, message: '消息状态:0=未读,1=已读不能为空', trigger: 'change' }]
|
||||
})
|
||||
const formRef = ref() // 表单 Ref
|
||||
|
||||
/** 打开弹窗 */
|
||||
const open = async (type: string, id?: number) => {
|
||||
dialogVisible.value = true
|
||||
dialogTitle.value = t('action.' + type)
|
||||
formType.value = type
|
||||
resetForm()
|
||||
// 修改时,设置数据
|
||||
if (id) {
|
||||
formLoading.value = true
|
||||
try {
|
||||
formData.value = await UserMessageApi.getUserMessage(id)
|
||||
} finally {
|
||||
formLoading.value = false
|
||||
}
|
||||
}
|
||||
}
|
||||
defineExpose({ open }) // 提供 open 方法,用于打开弹窗
|
||||
|
||||
/** 提交表单 */
|
||||
const emit = defineEmits(['success']) // 定义 success 事件,用于操作成功后的回调
|
||||
const submitForm = async () => {
|
||||
// 校验表单
|
||||
await formRef.value.validate()
|
||||
// 提交请求
|
||||
formLoading.value = true
|
||||
try {
|
||||
const data = formData.value as unknown as UserMessageVO
|
||||
if (formType.value === 'create') {
|
||||
await UserMessageApi.createUserMessage(data)
|
||||
message.success(t('common.createSuccess'))
|
||||
} else {
|
||||
await UserMessageApi.updateUserMessage(data)
|
||||
message.success(t('common.updateSuccess'))
|
||||
}
|
||||
dialogVisible.value = false
|
||||
// 发送操作成功的事件
|
||||
emit('success')
|
||||
} finally {
|
||||
formLoading.value = false
|
||||
}
|
||||
}
|
||||
|
||||
/** 重置表单 */
|
||||
const resetForm = () => {
|
||||
formData.value = {
|
||||
id: undefined,
|
||||
userId: undefined,
|
||||
messageType: undefined,
|
||||
careType: undefined,
|
||||
title: undefined,
|
||||
content: undefined,
|
||||
noticeMethod: undefined,
|
||||
noticeTime: undefined,
|
||||
messageStatus: undefined,
|
||||
readTime: undefined
|
||||
}
|
||||
formRef.value?.resetFields()
|
||||
}
|
||||
</script>
|
||||
|
|
@ -0,0 +1,323 @@
|
|||
<template>
|
||||
<ContentWrap>
|
||||
<!-- 搜索工作栏 -->
|
||||
<el-form
|
||||
class="-mb-15px"
|
||||
:model="queryParams"
|
||||
ref="queryFormRef"
|
||||
:inline="true"
|
||||
label-width="68px"
|
||||
>
|
||||
<el-form-item label="员工ID" prop="userId">
|
||||
<el-input
|
||||
v-model="queryParams.userId"
|
||||
placeholder="请输入员工ID"
|
||||
clearable
|
||||
@keyup.enter="handleQuery"
|
||||
class="!w-240px"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="消息类型,如系统通知、提醒、关怀等" prop="messageType">
|
||||
<el-select
|
||||
v-model="queryParams.messageType"
|
||||
placeholder="请选择消息类型,如系统通知、提醒、关怀等"
|
||||
clearable
|
||||
class="!w-240px"
|
||||
>
|
||||
<el-option
|
||||
v-for="dict in getIntDictOptions(DICT_TYPE.HRM_MESSAGE_TYPE)"
|
||||
:key="dict.value"
|
||||
:label="dict.label"
|
||||
:value="dict.value"
|
||||
/>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item label="消息关怀类型,如生日、节日等" prop="careType">
|
||||
<el-select
|
||||
v-model="queryParams.careType"
|
||||
placeholder="请选择消息关怀类型,如生日、节日等"
|
||||
clearable
|
||||
class="!w-240px"
|
||||
>
|
||||
<el-option
|
||||
v-for="dict in getIntDictOptions(DICT_TYPE.HRM_CARA_TYPE)"
|
||||
:key="dict.value"
|
||||
:label="dict.label"
|
||||
:value="dict.value"
|
||||
/>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item label="通知主题" prop="title">
|
||||
<el-input
|
||||
v-model="queryParams.title"
|
||||
placeholder="请输入通知主题"
|
||||
clearable
|
||||
@keyup.enter="handleQuery"
|
||||
class="!w-240px"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="通知方式,如邮件、短信、系统通知" prop="noticeMethod">
|
||||
<el-select
|
||||
v-model="queryParams.noticeMethod"
|
||||
placeholder="请选择通知方式,如邮件、短信、系统通知"
|
||||
clearable
|
||||
class="!w-240px"
|
||||
>
|
||||
<el-option
|
||||
v-for="dict in getIntDictOptions(DICT_TYPE.HRM_NOTICE_METHOD)"
|
||||
:key="dict.value"
|
||||
:label="dict.label"
|
||||
:value="dict.value"
|
||||
/>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item label="通知时间" prop="noticeTime">
|
||||
<el-date-picker
|
||||
v-model="queryParams.noticeTime"
|
||||
value-format="YYYY-MM-DD HH:mm:ss"
|
||||
type="daterange"
|
||||
start-placeholder="开始日期"
|
||||
end-placeholder="结束日期"
|
||||
:default-time="[new Date('1 00:00:00'), new Date('1 23:59:59')]"
|
||||
class="!w-220px"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="消息状态:0=未读,1=已读" prop="messageStatus">
|
||||
<el-select
|
||||
v-model="queryParams.messageStatus"
|
||||
placeholder="请选择消息状态:0=未读,1=已读"
|
||||
clearable
|
||||
class="!w-240px"
|
||||
>
|
||||
<el-option
|
||||
v-for="dict in getIntDictOptions(DICT_TYPE.HRM_MESSAGE_STATUS)"
|
||||
:key="dict.value"
|
||||
:label="dict.label"
|
||||
:value="dict.value"
|
||||
/>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item label="已读时间" prop="readTime">
|
||||
<el-date-picker
|
||||
v-model="queryParams.readTime"
|
||||
value-format="YYYY-MM-DD HH:mm:ss"
|
||||
type="daterange"
|
||||
start-placeholder="开始日期"
|
||||
end-placeholder="结束日期"
|
||||
:default-time="[new Date('1 00:00:00'), new Date('1 23:59:59')]"
|
||||
class="!w-220px"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="创建时间" prop="createTime">
|
||||
<el-date-picker
|
||||
v-model="queryParams.createTime"
|
||||
value-format="YYYY-MM-DD HH:mm:ss"
|
||||
type="daterange"
|
||||
start-placeholder="开始日期"
|
||||
end-placeholder="结束日期"
|
||||
:default-time="[new Date('1 00:00:00'), new Date('1 23:59:59')]"
|
||||
class="!w-220px"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item>
|
||||
<el-button @click="handleQuery"><Icon icon="ep:search" class="mr-5px" /> 搜索</el-button>
|
||||
<el-button @click="resetQuery"><Icon icon="ep:refresh" class="mr-5px" /> 重置</el-button>
|
||||
<el-button
|
||||
type="primary"
|
||||
plain
|
||||
@click="openForm('create')"
|
||||
v-hasPermi="['hrm:user-message:create']"
|
||||
>
|
||||
<Icon icon="ep:plus" class="mr-5px" /> 新增
|
||||
</el-button>
|
||||
<el-button
|
||||
type="success"
|
||||
plain
|
||||
@click="handleExport"
|
||||
:loading="exportLoading"
|
||||
v-hasPermi="['hrm:user-message:export']"
|
||||
>
|
||||
<Icon icon="ep:download" class="mr-5px" /> 导出
|
||||
</el-button>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
</ContentWrap>
|
||||
|
||||
<!-- 列表 -->
|
||||
<ContentWrap>
|
||||
<el-table v-loading="loading" :data="list" :stripe="true" :show-overflow-tooltip="true">
|
||||
<el-table-column label="主键 ID" align="center" prop="id" />
|
||||
<el-table-column label="员工ID" align="center" prop="userId" />
|
||||
<el-table-column label="消息类型,如系统通知、提醒、关怀等" align="center" prop="messageType">
|
||||
<template #default="scope">
|
||||
<dict-tag :type="DICT_TYPE.HRM_MESSAGE_TYPE" :value="scope.row.messageType" />
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="消息关怀类型,如生日、节日等" align="center" prop="careType">
|
||||
<template #default="scope">
|
||||
<dict-tag :type="DICT_TYPE.HRM_CARA_TYPE" :value="scope.row.careType" />
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="通知主题" align="center" prop="title" />
|
||||
<el-table-column label="通知内容" align="center" prop="content" />
|
||||
<el-table-column label="通知方式,如邮件、短信、系统通知" align="center" prop="noticeMethod">
|
||||
<template #default="scope">
|
||||
<dict-tag :type="DICT_TYPE.HRM_NOTICE_METHOD" :value="scope.row.noticeMethod" />
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column
|
||||
label="通知时间"
|
||||
align="center"
|
||||
prop="noticeTime"
|
||||
:formatter="dateFormatter"
|
||||
width="180px"
|
||||
/>
|
||||
<el-table-column label="消息状态:0=未读,1=已读" align="center" prop="messageStatus">
|
||||
<template #default="scope">
|
||||
<dict-tag :type="DICT_TYPE.HRM_MESSAGE_STATUS" :value="scope.row.messageStatus" />
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column
|
||||
label="已读时间"
|
||||
align="center"
|
||||
prop="readTime"
|
||||
:formatter="dateFormatter"
|
||||
width="180px"
|
||||
/>
|
||||
<el-table-column
|
||||
label="创建时间"
|
||||
align="center"
|
||||
prop="createTime"
|
||||
:formatter="dateFormatter"
|
||||
width="180px"
|
||||
/>
|
||||
<el-table-column label="操作" align="center" min-width="120px">
|
||||
<template #default="scope">
|
||||
<el-button
|
||||
link
|
||||
type="primary"
|
||||
@click="openForm('update', scope.row.id)"
|
||||
v-hasPermi="['hrm:user-message:update']"
|
||||
>
|
||||
编辑
|
||||
</el-button>
|
||||
<el-button
|
||||
link
|
||||
type="danger"
|
||||
@click="handleDelete(scope.row.id)"
|
||||
v-hasPermi="['hrm:user-message:delete']"
|
||||
>
|
||||
删除
|
||||
</el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
<!-- 分页 -->
|
||||
<Pagination
|
||||
:total="total"
|
||||
v-model:page="queryParams.pageNo"
|
||||
v-model:limit="queryParams.pageSize"
|
||||
@pagination="getList"
|
||||
/>
|
||||
</ContentWrap>
|
||||
|
||||
<!-- 表单弹窗:添加/修改 -->
|
||||
<UserMessageForm ref="formRef" @success="getList" />
|
||||
</template>
|
||||
|
||||
<script setup lang="ts">
|
||||
import { getIntDictOptions, DICT_TYPE } from '@/utils/dict'
|
||||
import { dateFormatter } from '@/utils/formatTime'
|
||||
import download from '@/utils/download'
|
||||
import { UserMessageApi, UserMessageVO } from '@/api/hrm/usermessage'
|
||||
import UserMessageForm from './UserMessageForm.vue'
|
||||
|
||||
/** 员工消息 列表 */
|
||||
defineOptions({ name: 'UserMessage' })
|
||||
|
||||
const message = useMessage() // 消息弹窗
|
||||
const { t } = useI18n() // 国际化
|
||||
|
||||
const loading = ref(true) // 列表的加载中
|
||||
const list = ref<UserMessageVO[]>([]) // 列表的数据
|
||||
const total = ref(0) // 列表的总页数
|
||||
const queryParams = reactive({
|
||||
pageNo: 1,
|
||||
pageSize: 10,
|
||||
userId: undefined,
|
||||
messageType: undefined,
|
||||
careType: undefined,
|
||||
title: undefined,
|
||||
content: undefined,
|
||||
noticeMethod: undefined,
|
||||
noticeTime: [],
|
||||
messageStatus: undefined,
|
||||
readTime: [],
|
||||
createTime: []
|
||||
})
|
||||
const queryFormRef = ref() // 搜索的表单
|
||||
const exportLoading = ref(false) // 导出的加载中
|
||||
|
||||
/** 查询列表 */
|
||||
const getList = async () => {
|
||||
loading.value = true
|
||||
try {
|
||||
const data = await UserMessageApi.getUserMessagePage(queryParams)
|
||||
list.value = data.list
|
||||
total.value = data.total
|
||||
} finally {
|
||||
loading.value = false
|
||||
}
|
||||
}
|
||||
|
||||
/** 搜索按钮操作 */
|
||||
const handleQuery = () => {
|
||||
queryParams.pageNo = 1
|
||||
getList()
|
||||
}
|
||||
|
||||
/** 重置按钮操作 */
|
||||
const resetQuery = () => {
|
||||
queryFormRef.value.resetFields()
|
||||
handleQuery()
|
||||
}
|
||||
|
||||
/** 添加/修改操作 */
|
||||
const formRef = ref()
|
||||
const openForm = (type: string, id?: number) => {
|
||||
formRef.value.open(type, id)
|
||||
}
|
||||
|
||||
/** 删除按钮操作 */
|
||||
const handleDelete = async (id: number) => {
|
||||
try {
|
||||
// 删除的二次确认
|
||||
await message.delConfirm()
|
||||
// 发起删除
|
||||
await UserMessageApi.deleteUserMessage(id)
|
||||
message.success(t('common.delSuccess'))
|
||||
// 刷新列表
|
||||
await getList()
|
||||
} catch {}
|
||||
}
|
||||
|
||||
/** 导出按钮操作 */
|
||||
const handleExport = async () => {
|
||||
try {
|
||||
// 导出的二次确认
|
||||
await message.exportConfirm()
|
||||
// 发起导出
|
||||
exportLoading.value = true
|
||||
const data = await UserMessageApi.exportUserMessage(queryParams)
|
||||
download.excel(data, '员工消息.xls')
|
||||
} catch {
|
||||
} finally {
|
||||
exportLoading.value = false
|
||||
}
|
||||
}
|
||||
|
||||
/** 初始化 **/
|
||||
onMounted(() => {
|
||||
getList()
|
||||
})
|
||||
</script>
|
||||
|
|
@ -0,0 +1,140 @@
|
|||
<template>
|
||||
<Dialog :title="dialogTitle" v-model="dialogVisible">
|
||||
<el-form
|
||||
ref="formRef"
|
||||
:model="formData"
|
||||
:rules="formRules"
|
||||
label-width="100px"
|
||||
v-loading="formLoading"
|
||||
>
|
||||
<el-form-item label="人才库id" prop="talentId">
|
||||
<el-input v-model="formData.talentId" placeholder="请输入人才库id" />
|
||||
</el-form-item>
|
||||
<el-form-item label="员工ID" prop="userId">
|
||||
<el-input v-model="formData.userId" placeholder="请输入员工ID" />
|
||||
</el-form-item>
|
||||
<el-form-item label="工作流编号" prop="processInstanceId">
|
||||
<el-input v-model="formData.processInstanceId" placeholder="请输入工作流编号" />
|
||||
</el-form-item>
|
||||
<el-form-item label="审批状态" prop="auditStatus">
|
||||
<el-radio-group v-model="formData.auditStatus">
|
||||
<el-radio value="1">请选择字典生成</el-radio>
|
||||
</el-radio-group>
|
||||
</el-form-item>
|
||||
<el-form-item label="聘用形式(全职、见习、实习、劳务、劳动、联创、其他)" prop="employType">
|
||||
<el-select v-model="formData.employType" placeholder="请选择聘用形式(全职、见习、实习、劳务、劳动、联创、其他)">
|
||||
<el-option
|
||||
v-for="dict in getIntDictOptions(DICT_TYPE.HRM_EMPLOY_TYPE)"
|
||||
:key="dict.value"
|
||||
:label="dict.label"
|
||||
:value="dict.value"
|
||||
/>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item label="员工签字" prop="eSignature">
|
||||
<el-input v-model="formData.eSignature" placeholder="请输入员工签字" />
|
||||
</el-form-item>
|
||||
<el-form-item label="提交日期" prop="submissionDate">
|
||||
<el-date-picker
|
||||
v-model="formData.submissionDate"
|
||||
type="date"
|
||||
value-format="x"
|
||||
placeholder="选择提交日期"
|
||||
/>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
<template #footer>
|
||||
<el-button @click="submitForm" type="primary" :disabled="formLoading">确 定</el-button>
|
||||
<el-button @click="dialogVisible = false">取 消</el-button>
|
||||
</template>
|
||||
</Dialog>
|
||||
</template>
|
||||
<script setup lang="ts">
|
||||
import { getIntDictOptions, DICT_TYPE } from '@/utils/dict'
|
||||
import { UserOnboardingApi, UserOnboardingVO } from '@/api/hrm/useronboarding'
|
||||
|
||||
/** 入职申请 表单 */
|
||||
defineOptions({ name: 'UserOnboardingForm' })
|
||||
|
||||
const { t } = useI18n() // 国际化
|
||||
const message = useMessage() // 消息弹窗
|
||||
|
||||
const dialogVisible = ref(false) // 弹窗的是否展示
|
||||
const dialogTitle = ref('') // 弹窗的标题
|
||||
const formLoading = ref(false) // 表单的加载中:1)修改时的数据加载;2)提交的按钮禁用
|
||||
const formType = ref('') // 表单的类型:create - 新增;update - 修改
|
||||
const formData = ref({
|
||||
id: undefined,
|
||||
talentId: undefined,
|
||||
userId: undefined,
|
||||
processInstanceId: undefined,
|
||||
auditStatus: undefined,
|
||||
employType: undefined,
|
||||
eSignature: undefined,
|
||||
submissionDate: undefined
|
||||
})
|
||||
const formRules = reactive({
|
||||
talentId: [{ required: true, message: '人才库id不能为空', trigger: 'blur' }],
|
||||
userId: [{ required: true, message: '员工ID不能为空', trigger: 'blur' }],
|
||||
auditStatus: [{ required: true, message: '审批状态不能为空', trigger: 'blur' }],
|
||||
submissionDate: [{ required: true, message: '提交日期不能为空', trigger: 'blur' }]
|
||||
})
|
||||
const formRef = ref() // 表单 Ref
|
||||
|
||||
/** 打开弹窗 */
|
||||
const open = async (type: string, id?: number) => {
|
||||
dialogVisible.value = true
|
||||
dialogTitle.value = t('action.' + type)
|
||||
formType.value = type
|
||||
resetForm()
|
||||
// 修改时,设置数据
|
||||
if (id) {
|
||||
formLoading.value = true
|
||||
try {
|
||||
formData.value = await UserOnboardingApi.getUserOnboarding(id)
|
||||
} finally {
|
||||
formLoading.value = false
|
||||
}
|
||||
}
|
||||
}
|
||||
defineExpose({ open }) // 提供 open 方法,用于打开弹窗
|
||||
|
||||
/** 提交表单 */
|
||||
const emit = defineEmits(['success']) // 定义 success 事件,用于操作成功后的回调
|
||||
const submitForm = async () => {
|
||||
// 校验表单
|
||||
await formRef.value.validate()
|
||||
// 提交请求
|
||||
formLoading.value = true
|
||||
try {
|
||||
const data = formData.value as unknown as UserOnboardingVO
|
||||
if (formType.value === 'create') {
|
||||
await UserOnboardingApi.createUserOnboarding(data)
|
||||
message.success(t('common.createSuccess'))
|
||||
} else {
|
||||
await UserOnboardingApi.updateUserOnboarding(data)
|
||||
message.success(t('common.updateSuccess'))
|
||||
}
|
||||
dialogVisible.value = false
|
||||
// 发送操作成功的事件
|
||||
emit('success')
|
||||
} finally {
|
||||
formLoading.value = false
|
||||
}
|
||||
}
|
||||
|
||||
/** 重置表单 */
|
||||
const resetForm = () => {
|
||||
formData.value = {
|
||||
id: undefined,
|
||||
talentId: undefined,
|
||||
userId: undefined,
|
||||
processInstanceId: undefined,
|
||||
auditStatus: undefined,
|
||||
employType: undefined,
|
||||
eSignature: undefined,
|
||||
submissionDate: undefined
|
||||
}
|
||||
formRef.value?.resetFields()
|
||||
}
|
||||
</script>
|
||||
|
|
@ -0,0 +1,267 @@
|
|||
<template>
|
||||
<ContentWrap>
|
||||
<!-- 搜索工作栏 -->
|
||||
<el-form
|
||||
class="-mb-15px"
|
||||
:model="queryParams"
|
||||
ref="queryFormRef"
|
||||
:inline="true"
|
||||
label-width="68px"
|
||||
>
|
||||
<el-form-item label="人才库id" prop="talentId">
|
||||
<el-input
|
||||
v-model="queryParams.talentId"
|
||||
placeholder="请输入人才库id"
|
||||
clearable
|
||||
@keyup.enter="handleQuery"
|
||||
class="!w-240px"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="员工ID" prop="userId">
|
||||
<el-input
|
||||
v-model="queryParams.userId"
|
||||
placeholder="请输入员工ID"
|
||||
clearable
|
||||
@keyup.enter="handleQuery"
|
||||
class="!w-240px"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="工作流编号" prop="processInstanceId">
|
||||
<el-input
|
||||
v-model="queryParams.processInstanceId"
|
||||
placeholder="请输入工作流编号"
|
||||
clearable
|
||||
@keyup.enter="handleQuery"
|
||||
class="!w-240px"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="审批状态" prop="auditStatus">
|
||||
<el-select
|
||||
v-model="queryParams.auditStatus"
|
||||
placeholder="请选择审批状态"
|
||||
clearable
|
||||
class="!w-240px"
|
||||
>
|
||||
<el-option label="请选择字典生成" value="" />
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item label="聘用形式(全职、见习、实习、劳务、劳动、联创、其他)" prop="employType">
|
||||
<el-select
|
||||
v-model="queryParams.employType"
|
||||
placeholder="请选择聘用形式(全职、见习、实习、劳务、劳动、联创、其他)"
|
||||
clearable
|
||||
class="!w-240px"
|
||||
>
|
||||
<el-option
|
||||
v-for="dict in getIntDictOptions(DICT_TYPE.HRM_EMPLOY_TYPE)"
|
||||
:key="dict.value"
|
||||
:label="dict.label"
|
||||
:value="dict.value"
|
||||
/>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item label="员工签字" prop="eSignature">
|
||||
<el-input
|
||||
v-model="queryParams.eSignature"
|
||||
placeholder="请输入员工签字"
|
||||
clearable
|
||||
@keyup.enter="handleQuery"
|
||||
class="!w-240px"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="提交日期" prop="submissionDate">
|
||||
<el-date-picker
|
||||
v-model="queryParams.submissionDate"
|
||||
value-format="YYYY-MM-DD HH:mm:ss"
|
||||
type="daterange"
|
||||
start-placeholder="开始日期"
|
||||
end-placeholder="结束日期"
|
||||
:default-time="[new Date('1 00:00:00'), new Date('1 23:59:59')]"
|
||||
class="!w-220px"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="创建时间" prop="createTime">
|
||||
<el-date-picker
|
||||
v-model="queryParams.createTime"
|
||||
value-format="YYYY-MM-DD HH:mm:ss"
|
||||
type="daterange"
|
||||
start-placeholder="开始日期"
|
||||
end-placeholder="结束日期"
|
||||
:default-time="[new Date('1 00:00:00'), new Date('1 23:59:59')]"
|
||||
class="!w-220px"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item>
|
||||
<el-button @click="handleQuery"><Icon icon="ep:search" class="mr-5px" /> 搜索</el-button>
|
||||
<el-button @click="resetQuery"><Icon icon="ep:refresh" class="mr-5px" /> 重置</el-button>
|
||||
<el-button
|
||||
type="primary"
|
||||
plain
|
||||
@click="openForm('create')"
|
||||
v-hasPermi="['hrm:user-onboarding:create']"
|
||||
>
|
||||
<Icon icon="ep:plus" class="mr-5px" /> 新增
|
||||
</el-button>
|
||||
<el-button
|
||||
type="success"
|
||||
plain
|
||||
@click="handleExport"
|
||||
:loading="exportLoading"
|
||||
v-hasPermi="['hrm:user-onboarding:export']"
|
||||
>
|
||||
<Icon icon="ep:download" class="mr-5px" /> 导出
|
||||
</el-button>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
</ContentWrap>
|
||||
|
||||
<!-- 列表 -->
|
||||
<ContentWrap>
|
||||
<el-table v-loading="loading" :data="list" :stripe="true" :show-overflow-tooltip="true">
|
||||
<el-table-column label="主键,自动递增" align="center" prop="id" />
|
||||
<el-table-column label="人才库id" align="center" prop="talentId" />
|
||||
<el-table-column label="员工ID" align="center" prop="userId" />
|
||||
<el-table-column label="工作流编号" align="center" prop="processInstanceId" />
|
||||
<el-table-column label="审批状态" align="center" prop="auditStatus" />
|
||||
<el-table-column label="聘用形式(全职、见习、实习、劳务、劳动、联创、其他)" align="center" prop="employType">
|
||||
<template #default="scope">
|
||||
<dict-tag :type="DICT_TYPE.HRM_EMPLOY_TYPE" :value="scope.row.employType" />
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="员工签字" align="center" prop="eSignature" />
|
||||
<el-table-column label="提交日期" align="center" prop="submissionDate" />
|
||||
<el-table-column
|
||||
label="创建时间"
|
||||
align="center"
|
||||
prop="createTime"
|
||||
:formatter="dateFormatter"
|
||||
width="180px"
|
||||
/>
|
||||
<el-table-column label="操作" align="center" min-width="120px">
|
||||
<template #default="scope">
|
||||
<el-button
|
||||
link
|
||||
type="primary"
|
||||
@click="openForm('update', scope.row.id)"
|
||||
v-hasPermi="['hrm:user-onboarding:update']"
|
||||
>
|
||||
编辑
|
||||
</el-button>
|
||||
<el-button
|
||||
link
|
||||
type="danger"
|
||||
@click="handleDelete(scope.row.id)"
|
||||
v-hasPermi="['hrm:user-onboarding:delete']"
|
||||
>
|
||||
删除
|
||||
</el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
<!-- 分页 -->
|
||||
<Pagination
|
||||
:total="total"
|
||||
v-model:page="queryParams.pageNo"
|
||||
v-model:limit="queryParams.pageSize"
|
||||
@pagination="getList"
|
||||
/>
|
||||
</ContentWrap>
|
||||
|
||||
<!-- 表单弹窗:添加/修改 -->
|
||||
<UserOnboardingForm ref="formRef" @success="getList" />
|
||||
</template>
|
||||
|
||||
<script setup lang="ts">
|
||||
import { getIntDictOptions, DICT_TYPE } from '@/utils/dict'
|
||||
import { dateFormatter } from '@/utils/formatTime'
|
||||
import download from '@/utils/download'
|
||||
import { UserOnboardingApi, UserOnboardingVO } from '@/api/hrm/useronboarding'
|
||||
import UserOnboardingForm from './UserOnboardingForm.vue'
|
||||
|
||||
/** 入职申请 列表 */
|
||||
defineOptions({ name: 'UserOnboarding' })
|
||||
|
||||
const message = useMessage() // 消息弹窗
|
||||
const { t } = useI18n() // 国际化
|
||||
|
||||
const loading = ref(true) // 列表的加载中
|
||||
const list = ref<UserOnboardingVO[]>([]) // 列表的数据
|
||||
const total = ref(0) // 列表的总页数
|
||||
const queryParams = reactive({
|
||||
pageNo: 1,
|
||||
pageSize: 10,
|
||||
talentId: undefined,
|
||||
userId: undefined,
|
||||
processInstanceId: undefined,
|
||||
auditStatus: undefined,
|
||||
employType: undefined,
|
||||
eSignature: undefined,
|
||||
submissionDate: [],
|
||||
createTime: []
|
||||
})
|
||||
const queryFormRef = ref() // 搜索的表单
|
||||
const exportLoading = ref(false) // 导出的加载中
|
||||
|
||||
/** 查询列表 */
|
||||
const getList = async () => {
|
||||
loading.value = true
|
||||
try {
|
||||
const data = await UserOnboardingApi.getUserOnboardingPage(queryParams)
|
||||
list.value = data.list
|
||||
total.value = data.total
|
||||
} finally {
|
||||
loading.value = false
|
||||
}
|
||||
}
|
||||
|
||||
/** 搜索按钮操作 */
|
||||
const handleQuery = () => {
|
||||
queryParams.pageNo = 1
|
||||
getList()
|
||||
}
|
||||
|
||||
/** 重置按钮操作 */
|
||||
const resetQuery = () => {
|
||||
queryFormRef.value.resetFields()
|
||||
handleQuery()
|
||||
}
|
||||
|
||||
/** 添加/修改操作 */
|
||||
const formRef = ref()
|
||||
const openForm = (type: string, id?: number) => {
|
||||
formRef.value.open(type, id)
|
||||
}
|
||||
|
||||
/** 删除按钮操作 */
|
||||
const handleDelete = async (id: number) => {
|
||||
try {
|
||||
// 删除的二次确认
|
||||
await message.delConfirm()
|
||||
// 发起删除
|
||||
await UserOnboardingApi.deleteUserOnboarding(id)
|
||||
message.success(t('common.delSuccess'))
|
||||
// 刷新列表
|
||||
await getList()
|
||||
} catch {}
|
||||
}
|
||||
|
||||
/** 导出按钮操作 */
|
||||
const handleExport = async () => {
|
||||
try {
|
||||
// 导出的二次确认
|
||||
await message.exportConfirm()
|
||||
// 发起导出
|
||||
exportLoading.value = true
|
||||
const data = await UserOnboardingApi.exportUserOnboarding(queryParams)
|
||||
download.excel(data, '入职申请.xls')
|
||||
} catch {
|
||||
} finally {
|
||||
exportLoading.value = false
|
||||
}
|
||||
}
|
||||
|
||||
/** 初始化 **/
|
||||
onMounted(() => {
|
||||
getList()
|
||||
})
|
||||
</script>
|
||||
|
|
@ -0,0 +1,138 @@
|
|||
<template>
|
||||
<Dialog :title="dialogTitle" v-model="dialogVisible">
|
||||
<el-form
|
||||
ref="formRef"
|
||||
:model="formData"
|
||||
:rules="formRules"
|
||||
label-width="100px"
|
||||
v-loading="formLoading"
|
||||
>
|
||||
<el-form-item label="员工档案ID(关联hrm_user_infor)" prop="userId">
|
||||
<el-input v-model="formData.userId" placeholder="请输入员工档案ID(关联hrm_user_infor)" />
|
||||
</el-form-item>
|
||||
<el-form-item label="单位名称" prop="companyName">
|
||||
<el-input v-model="formData.companyName" placeholder="请输入单位名称" />
|
||||
</el-form-item>
|
||||
<el-form-item label="部门名称" prop="deptName">
|
||||
<el-input v-model="formData.deptName" placeholder="请输入部门名称" />
|
||||
</el-form-item>
|
||||
<el-form-item label="职位名称" prop="postName">
|
||||
<el-input v-model="formData.postName" placeholder="请输入职位名称" />
|
||||
</el-form-item>
|
||||
<el-form-item label="开始日期" prop="startDate">
|
||||
<el-date-picker
|
||||
v-model="formData.startDate"
|
||||
type="date"
|
||||
value-format="x"
|
||||
placeholder="选择开始日期"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="离职日期" prop="endDate">
|
||||
<el-date-picker
|
||||
v-model="formData.endDate"
|
||||
type="date"
|
||||
value-format="x"
|
||||
placeholder="选择离职日期"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="待遇(元/月)" prop="monthlySalary">
|
||||
<el-input v-model="formData.monthlySalary" placeholder="请输入待遇(元/月)" />
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
<template #footer>
|
||||
<el-button @click="submitForm" type="primary" :disabled="formLoading">确 定</el-button>
|
||||
<el-button @click="dialogVisible = false">取 消</el-button>
|
||||
</template>
|
||||
</Dialog>
|
||||
</template>
|
||||
<script setup lang="ts">
|
||||
import { UserWorkInfoApi, UserWorkInfoVO } from '@/api/hrm/userworkinfo'
|
||||
|
||||
/** 工作经历信息 表单 */
|
||||
defineOptions({ name: 'UserWorkInfoForm' })
|
||||
|
||||
const { t } = useI18n() // 国际化
|
||||
const message = useMessage() // 消息弹窗
|
||||
|
||||
const dialogVisible = ref(false) // 弹窗的是否展示
|
||||
const dialogTitle = ref('') // 弹窗的标题
|
||||
const formLoading = ref(false) // 表单的加载中:1)修改时的数据加载;2)提交的按钮禁用
|
||||
const formType = ref('') // 表单的类型:create - 新增;update - 修改
|
||||
const formData = ref({
|
||||
id: undefined,
|
||||
userId: undefined,
|
||||
companyName: undefined,
|
||||
deptName: undefined,
|
||||
postName: undefined,
|
||||
startDate: undefined,
|
||||
endDate: undefined,
|
||||
monthlySalary: undefined
|
||||
})
|
||||
const formRules = reactive({
|
||||
userId: [{ required: true, message: '员工档案ID(关联hrm_user_infor)不能为空', trigger: 'blur' }],
|
||||
companyName: [{ required: true, message: '单位名称不能为空', trigger: 'blur' }],
|
||||
deptName: [{ required: true, message: '部门名称不能为空', trigger: 'blur' }],
|
||||
postName: [{ required: true, message: '职位名称不能为空', trigger: 'blur' }],
|
||||
startDate: [{ required: true, message: '开始日期不能为空', trigger: 'blur' }],
|
||||
endDate: [{ required: true, message: '离职日期不能为空', trigger: 'blur' }],
|
||||
monthlySalary: [{ required: true, message: '待遇(元/月)不能为空', trigger: 'blur' }]
|
||||
})
|
||||
const formRef = ref() // 表单 Ref
|
||||
|
||||
/** 打开弹窗 */
|
||||
const open = async (type: string, id?: number) => {
|
||||
dialogVisible.value = true
|
||||
dialogTitle.value = t('action.' + type)
|
||||
formType.value = type
|
||||
resetForm()
|
||||
// 修改时,设置数据
|
||||
if (id) {
|
||||
formLoading.value = true
|
||||
try {
|
||||
formData.value = await UserWorkInfoApi.getUserWorkInfo(id)
|
||||
} finally {
|
||||
formLoading.value = false
|
||||
}
|
||||
}
|
||||
}
|
||||
defineExpose({ open }) // 提供 open 方法,用于打开弹窗
|
||||
|
||||
/** 提交表单 */
|
||||
const emit = defineEmits(['success']) // 定义 success 事件,用于操作成功后的回调
|
||||
const submitForm = async () => {
|
||||
// 校验表单
|
||||
await formRef.value.validate()
|
||||
// 提交请求
|
||||
formLoading.value = true
|
||||
try {
|
||||
const data = formData.value as unknown as UserWorkInfoVO
|
||||
if (formType.value === 'create') {
|
||||
await UserWorkInfoApi.createUserWorkInfo(data)
|
||||
message.success(t('common.createSuccess'))
|
||||
} else {
|
||||
await UserWorkInfoApi.updateUserWorkInfo(data)
|
||||
message.success(t('common.updateSuccess'))
|
||||
}
|
||||
dialogVisible.value = false
|
||||
// 发送操作成功的事件
|
||||
emit('success')
|
||||
} finally {
|
||||
formLoading.value = false
|
||||
}
|
||||
}
|
||||
|
||||
/** 重置表单 */
|
||||
const resetForm = () => {
|
||||
formData.value = {
|
||||
id: undefined,
|
||||
userId: undefined,
|
||||
companyName: undefined,
|
||||
deptName: undefined,
|
||||
postName: undefined,
|
||||
startDate: undefined,
|
||||
endDate: undefined,
|
||||
monthlySalary: undefined
|
||||
}
|
||||
formRef.value?.resetFields()
|
||||
}
|
||||
</script>
|
||||
|
|
@ -0,0 +1,237 @@
|
|||
<template>
|
||||
<ContentWrap>
|
||||
<!-- 搜索工作栏 -->
|
||||
<el-form
|
||||
class="-mb-15px"
|
||||
:model="queryParams"
|
||||
ref="queryFormRef"
|
||||
:inline="true"
|
||||
label-width="68px"
|
||||
>
|
||||
<el-form-item label="员工档案ID(关联hrm_user_infor)" prop="userId">
|
||||
<el-input
|
||||
v-model="queryParams.userId"
|
||||
placeholder="请输入员工档案ID(关联hrm_user_infor)"
|
||||
clearable
|
||||
@keyup.enter="handleQuery"
|
||||
class="!w-240px"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="单位名称" prop="companyName">
|
||||
<el-input
|
||||
v-model="queryParams.companyName"
|
||||
placeholder="请输入单位名称"
|
||||
clearable
|
||||
@keyup.enter="handleQuery"
|
||||
class="!w-240px"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="部门名称" prop="deptName">
|
||||
<el-input
|
||||
v-model="queryParams.deptName"
|
||||
placeholder="请输入部门名称"
|
||||
clearable
|
||||
@keyup.enter="handleQuery"
|
||||
class="!w-240px"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="职位名称" prop="postName">
|
||||
<el-input
|
||||
v-model="queryParams.postName"
|
||||
placeholder="请输入职位名称"
|
||||
clearable
|
||||
@keyup.enter="handleQuery"
|
||||
class="!w-240px"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="开始日期" prop="startDate">
|
||||
<el-date-picker
|
||||
v-model="queryParams.startDate"
|
||||
value-format="YYYY-MM-DD HH:mm:ss"
|
||||
type="daterange"
|
||||
start-placeholder="开始日期"
|
||||
end-placeholder="结束日期"
|
||||
:default-time="[new Date('1 00:00:00'), new Date('1 23:59:59')]"
|
||||
class="!w-220px"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="离职日期" prop="endDate">
|
||||
<el-date-picker
|
||||
v-model="queryParams.endDate"
|
||||
value-format="YYYY-MM-DD HH:mm:ss"
|
||||
type="daterange"
|
||||
start-placeholder="开始日期"
|
||||
end-placeholder="结束日期"
|
||||
:default-time="[new Date('1 00:00:00'), new Date('1 23:59:59')]"
|
||||
class="!w-220px"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="待遇(元/月)" prop="monthlySalary">
|
||||
<el-input
|
||||
v-model="queryParams.monthlySalary"
|
||||
placeholder="请输入待遇(元/月)"
|
||||
clearable
|
||||
@keyup.enter="handleQuery"
|
||||
class="!w-240px"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item>
|
||||
<el-button @click="handleQuery"><Icon icon="ep:search" class="mr-5px" /> 搜索</el-button>
|
||||
<el-button @click="resetQuery"><Icon icon="ep:refresh" class="mr-5px" /> 重置</el-button>
|
||||
<el-button
|
||||
type="primary"
|
||||
plain
|
||||
@click="openForm('create')"
|
||||
v-hasPermi="['hrm:user-work-info:create']"
|
||||
>
|
||||
<Icon icon="ep:plus" class="mr-5px" /> 新增
|
||||
</el-button>
|
||||
<el-button
|
||||
type="success"
|
||||
plain
|
||||
@click="handleExport"
|
||||
:loading="exportLoading"
|
||||
v-hasPermi="['hrm:user-work-info:export']"
|
||||
>
|
||||
<Icon icon="ep:download" class="mr-5px" /> 导出
|
||||
</el-button>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
</ContentWrap>
|
||||
|
||||
<!-- 列表 -->
|
||||
<ContentWrap>
|
||||
<el-table v-loading="loading" :data="list" :stripe="true" :show-overflow-tooltip="true">
|
||||
<el-table-column label="唯一主键" align="center" prop="id" />
|
||||
<el-table-column label="员工档案ID(关联hrm_user_infor)" align="center" prop="userId" />
|
||||
<el-table-column label="单位名称" align="center" prop="companyName" />
|
||||
<el-table-column label="部门名称" align="center" prop="deptName" />
|
||||
<el-table-column label="职位名称" align="center" prop="postName" />
|
||||
<el-table-column label="开始日期" align="center" prop="startDate" />
|
||||
<el-table-column label="离职日期" align="center" prop="endDate" />
|
||||
<el-table-column label="待遇(元/月)" align="center" prop="monthlySalary" />
|
||||
<el-table-column label="操作" align="center" min-width="120px">
|
||||
<template #default="scope">
|
||||
<el-button
|
||||
link
|
||||
type="primary"
|
||||
@click="openForm('update', scope.row.id)"
|
||||
v-hasPermi="['hrm:user-work-info:update']"
|
||||
>
|
||||
编辑
|
||||
</el-button>
|
||||
<el-button
|
||||
link
|
||||
type="danger"
|
||||
@click="handleDelete(scope.row.id)"
|
||||
v-hasPermi="['hrm:user-work-info:delete']"
|
||||
>
|
||||
删除
|
||||
</el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
<!-- 分页 -->
|
||||
<Pagination
|
||||
:total="total"
|
||||
v-model:page="queryParams.pageNo"
|
||||
v-model:limit="queryParams.pageSize"
|
||||
@pagination="getList"
|
||||
/>
|
||||
</ContentWrap>
|
||||
|
||||
<!-- 表单弹窗:添加/修改 -->
|
||||
<UserWorkInfoForm ref="formRef" @success="getList" />
|
||||
</template>
|
||||
|
||||
<script setup lang="ts">
|
||||
import download from '@/utils/download'
|
||||
import { UserWorkInfoApi, UserWorkInfoVO } from '@/api/hrm/userworkinfo'
|
||||
import UserWorkInfoForm from './UserWorkInfoForm.vue'
|
||||
|
||||
/** 工作经历信息 列表 */
|
||||
defineOptions({ name: 'UserWorkInfo' })
|
||||
|
||||
const message = useMessage() // 消息弹窗
|
||||
const { t } = useI18n() // 国际化
|
||||
|
||||
const loading = ref(true) // 列表的加载中
|
||||
const list = ref<UserWorkInfoVO[]>([]) // 列表的数据
|
||||
const total = ref(0) // 列表的总页数
|
||||
const queryParams = reactive({
|
||||
pageNo: 1,
|
||||
pageSize: 10,
|
||||
userId: undefined,
|
||||
companyName: undefined,
|
||||
deptName: undefined,
|
||||
postName: undefined,
|
||||
startDate: [],
|
||||
endDate: [],
|
||||
monthlySalary: undefined
|
||||
})
|
||||
const queryFormRef = ref() // 搜索的表单
|
||||
const exportLoading = ref(false) // 导出的加载中
|
||||
|
||||
/** 查询列表 */
|
||||
const getList = async () => {
|
||||
loading.value = true
|
||||
try {
|
||||
const data = await UserWorkInfoApi.getUserWorkInfoPage(queryParams)
|
||||
list.value = data.list
|
||||
total.value = data.total
|
||||
} finally {
|
||||
loading.value = false
|
||||
}
|
||||
}
|
||||
|
||||
/** 搜索按钮操作 */
|
||||
const handleQuery = () => {
|
||||
queryParams.pageNo = 1
|
||||
getList()
|
||||
}
|
||||
|
||||
/** 重置按钮操作 */
|
||||
const resetQuery = () => {
|
||||
queryFormRef.value.resetFields()
|
||||
handleQuery()
|
||||
}
|
||||
|
||||
/** 添加/修改操作 */
|
||||
const formRef = ref()
|
||||
const openForm = (type: string, id?: number) => {
|
||||
formRef.value.open(type, id)
|
||||
}
|
||||
|
||||
/** 删除按钮操作 */
|
||||
const handleDelete = async (id: number) => {
|
||||
try {
|
||||
// 删除的二次确认
|
||||
await message.delConfirm()
|
||||
// 发起删除
|
||||
await UserWorkInfoApi.deleteUserWorkInfo(id)
|
||||
message.success(t('common.delSuccess'))
|
||||
// 刷新列表
|
||||
await getList()
|
||||
} catch {}
|
||||
}
|
||||
|
||||
/** 导出按钮操作 */
|
||||
const handleExport = async () => {
|
||||
try {
|
||||
// 导出的二次确认
|
||||
await message.exportConfirm()
|
||||
// 发起导出
|
||||
exportLoading.value = true
|
||||
const data = await UserWorkInfoApi.exportUserWorkInfo(queryParams)
|
||||
download.excel(data, '工作经历信息.xls')
|
||||
} catch {
|
||||
} finally {
|
||||
exportLoading.value = false
|
||||
}
|
||||
}
|
||||
|
||||
/** 初始化 **/
|
||||
onMounted(() => {
|
||||
getList()
|
||||
})
|
||||
</script>
|
||||
Loading…
Reference in New Issue