HRM 员工档案。入职申请 和转正申请

pull/781/head
quu 2025-05-10 14:33:34 +09:00
parent a5bf4d80b3
commit d986e37efc
17 changed files with 3659 additions and 0 deletions

View File

@ -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 // 是否转正10
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 })
}
}

106
src/api/hrm/user/index.ts Normal file
View File

@ -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 })
}
}

View File

@ -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 })
}
}

View File

@ -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 })
}
}

View File

@ -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 })
}
}

View File

@ -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="是否转正10" prop="isConfirmed">
<el-select v-model="formData.isConfirmed" placeholder="请选择是否转正10">
<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) // 12
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: '是否转正10不能为空', 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>

View File

@ -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="是否转正10" prop="isConfirmed">
<el-select
v-model="queryParams.isConfirmed"
placeholder="请选择是否转正10"
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="是否转正10" 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>

View File

@ -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) // 12
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>

View File

@ -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 // IDhrm_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>

View File

@ -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 // IDhrm_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>

View File

@ -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>

View File

@ -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) // 12
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>

View File

@ -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>

View File

@ -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) // 12
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>

View File

@ -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>

View File

@ -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) // 12
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>

View File

@ -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>