<template>
|
<div style="background-color: #fff;height: 100%;">
|
<el-container>
|
<el-header :height="headerHeight">
|
<el-row style="margin-bottom: 10px;">
|
<el-col :span="15">
|
<h3 class="bu-tian-jia-title">员工转正提醒</h3>
|
</el-col>
|
</el-row>
|
</el-header>
|
<el-main style="height: 85%;">
|
<el-row style="margin: 10px 0 10px 0;">
|
<el-col :span="24">
|
<el-button type="primary" class="hr-but-all" @click="showDcyg(0)">导出EXCEL</el-button>
|
</el-col>
|
</el-row>
|
<el-table
|
ref="multipleTable"
|
:data="probationList"
|
:cell-style="{padding:'7px 0','text-align':'center'}"
|
:header-cell-style="{'height':'5.3vh','background-color':'#e6e6e6','text-align':'center'}"
|
stripe
|
border
|
style="width: 100%;color: #000;"
|
@sort-change="changeSort"
|
>
|
<el-table-column show-overflow-tooltip fixed="left" label="操作" width="150">
|
<template v-slot="scope">
|
<span
|
style="color: #a00515;display: inline-block;width: 30%;cursor: pointer"
|
@click="goOn(scope.row)"
|
>转正</span>
|
<span
|
style="color: #a00515;display: inline-block;width: 30%;cursor: pointer"
|
@click="goDismiss(scope.row)"
|
>解聘</span>
|
<span
|
style="color: #a00515;display: inline-block;width: 30%;cursor: pointer"
|
@click="goDelay(scope.row)"
|
>延期</span>
|
</template>
|
</el-table-column>
|
<el-table-column show-overflow-tooltip prop="empNumb" label="员工编号" width="120" />
|
<el-table-column show-overflow-tooltip prop="allDeptName" label="部门(护卫点)" />
|
<el-table-column show-overflow-tooltip prop="jobName" label="岗位" width="120" />
|
<el-table-column show-overflow-tooltip prop="empName" label="姓名" width="120" />
|
<el-table-column show-overflow-tooltip prop="certificateNumb" label="身份证号码" width="160" />
|
<el-table-column show-overflow-tooltip prop="birthdate" label="出生日期" width="150" />
|
<el-table-column show-overflow-tooltip prop="insuranceTypeName" label="社保档位" width="180" />
|
<el-table-column show-overflow-tooltip prop="socialNumb" label="社保电脑号" width="180" />
|
<el-table-column show-overflow-tooltip prop="entryDate" label="入职日期" width="150" />
|
<el-table-column show-overflow-tooltip prop="probationDate" label="转正日期" width="120" />
|
<el-table-column show-overflow-tooltip prop="probationStatusName" label="转正状态" width="120" />
|
</el-table>
|
<pagination
|
v-show="total>0"
|
style="text-align: right;width: 98%;"
|
:total="total"
|
:page.sync="pagination.num"
|
:limit.sync="pagination.size"
|
@pagination="search"
|
/>
|
</el-main>
|
</el-container>
|
<el-dialog :title="dialogTitle" :visible.sync="dialogShowContract" width="50%">
|
<el-form
|
ref="probationForm"
|
:model="probationForm"
|
:rules="contractRules"
|
label-position="right"
|
label-width="120px"
|
>
|
<el-row>
|
<el-col :span="12">
|
<el-form-item label="姓名" prop="empName">
|
<el-input v-model="probationForm.empName" />
|
</el-form-item>
|
<el-form-item label="身份证号码" prop="certificateNumb">
|
<el-input
|
v-model="probationForm.certificateNumb"
|
/>
|
</el-form-item>
|
<el-form-item label="性别" this-emp-base-info-form="sex">
|
<el-select v-model="probationForm.sex" placeholder="请选择性别">
|
<el-option
|
v-for="dict in sexOptions"
|
:key="dict.dicItemCode"
|
:label="dict.dicItemName"
|
:value="dict.dicItemCode"
|
/>
|
</el-select>
|
</el-form-item>
|
<el-form-item :label="dynamicDateLabel" prop="probationDate">
|
<el-date-picker
|
v-model="probationForm.probationDate"
|
value-format="yyyy-MM-dd"
|
type="date"
|
placeholder="选择日期"
|
/>
|
</el-form-item>
|
</el-col>
|
<el-col :span="12">
|
<el-form-item label="员工编号" prop="empNumb">
|
<el-input v-model="probationForm.empNumb" />
|
</el-form-item>
|
<el-form-item label="部门(护卫点)" prop="allDeptName">
|
<el-input v-model="probationForm.allDeptName" />
|
</el-form-item>
|
<el-form-item label="岗位" prop="jobName">
|
<el-input v-model="probationForm.jobName" />
|
</el-form-item>
|
</el-col>
|
</el-row>
|
</el-form>
|
<div slot="footer" class="dialog-footer">
|
<el-button type="primary" @click="putProbationInfo('probationForm')">保 存</el-button>
|
<el-button @click="dialogIsShow()">取 消</el-button>
|
</div>
|
</el-dialog>
|
<!-- 通用导出对话框 -->
|
<export-dialog
|
:visible.sync="exportDialogVisible"
|
:selected-fields="exportConfig.selectedFields"
|
@confirm="handleExportConfirm"
|
/>
|
</div>
|
</template>
|
<script>
|
import Pagination from '@/components/Pagination'
|
import '@riophae/vue-treeselect/dist/vue-treeselect.css'
|
import { dateDifference } from '@/utils/myUtil'
|
import ExportDialog from '@/components/ExportEmpBase.vue'
|
|
export default {
|
components: {
|
Pagination,
|
ExportDialog
|
},
|
data() {
|
return {
|
dialog: {
|
isVisible: false,
|
title: '',
|
type: ''
|
},
|
sort: {},
|
// 总数量
|
total: 0,
|
// 查询参数
|
queryParams: {
|
baseKey: ''
|
},
|
// 分页参数
|
pagination: {
|
size: 15,
|
num: 1
|
},
|
headerHeight: '30px',
|
// 转正信息
|
probationList: [],
|
// 转正信息
|
probationForm: {
|
empId: '',
|
empNumb: '',
|
empName: '',
|
certificateNumb: '',
|
sex: '',
|
deptId: '',
|
deptName: '',
|
allDeptName: '',
|
jobName: '',
|
delFlag: '',
|
empStatus: 0,
|
entryDate: '',
|
probationDate: '',
|
probationStatus: ''
|
},
|
sexOptions: [],
|
contractStatusOptions: [],
|
dialogTitle: '正常转正',
|
dynamicDateLabel: '转正日期',
|
dialogShowContract: false,
|
contractRules: {
|
empName: [{ required: true, message: '请选择员工', trigger: 'change' }],
|
probationDate: [{ required: true, message: '请选择日期', trigger: 'change' }]
|
},
|
exportDialogVisible: false,
|
exportConfig: {
|
selectedFields: [
|
'empNumb', // 员工编号
|
'allDeptName', // 部门 (护卫点)
|
'jobName', // 岗位
|
'empName', // 姓名
|
'certificateNumb', // 身份证号码
|
'birthdate', // 出生日期
|
'insuranceTypeName', // 社保档位
|
'socialNumb', // 社保电脑号
|
'entryDate', // 入职日期
|
'probationDate', // 转正日期
|
'probationStatusName' // 转正状态
|
],
|
exportUrl: 'hr/empBaseInfo/export/probation', // 需要后端提供接口
|
fileName: '员工转正提醒.xls'
|
}
|
}
|
},
|
mounted() {
|
this.fetch()
|
this.getDicts('sex').then(response => {
|
this.sexOptions = response.data
|
})
|
this.getDicts('CONTRACTSTATUS').then(response => {
|
this.contractStatusOptions = response.data
|
})
|
},
|
methods: {
|
search() {
|
this.queryParams.baseKey = ''
|
this.fetch({
|
...this.queryParams,
|
...this.sort
|
})
|
},
|
fetch(params = {}) {
|
const that = this
|
params.pageSize = this.pagination.size
|
params.pageNum = this.pagination.num
|
params.delFlag = 0
|
params.empStatus = 0
|
|
this.$get('hr/empBaseInfo/probation/alert', {
|
...params
|
}).then((r) => {
|
const data = r.data.data
|
that.total = data.total
|
that.probationList = data.rows
|
})
|
},
|
changeSort(val) {
|
this.sort.field = val.prop
|
this.sort.order = val.order
|
this.fetch()
|
},
|
// 正常(提前转正)转正
|
goOn(row) {
|
this.initContractData(row)
|
this.dialogTitle = '正常转正'
|
this.probationForm.probationStatus = '1'
|
this.dynamicDateLabel = '转正日期'
|
this.dialogShowContract = true
|
},
|
goDelay(row) {
|
this.initContractData(row)
|
this.dialogTitle = '延期转正'
|
this.probationForm.probationStatus = '3'
|
this.dynamicDateLabel = '延期日期'
|
this.dialogShowContract = true
|
},
|
goDismiss(row) {
|
this.initContractData(row)
|
this.dialogTitle = '试用解骋'
|
this.probationForm.probationStatus = '2'
|
this.dynamicDateLabel = '解聘日期'
|
this.dialogShowContract = true
|
},
|
dialogIsShow() {
|
this.dialogShowContract = false
|
},
|
// 不续签转正
|
discontinue(val) {
|
this.initContractData(val)
|
this.$post('hr/empContractInfo/remind/not', { ...this.probationForm }).then(() => {
|
this.buttonLoading = false
|
this.$message({
|
message: this.$t('tips.updateSuccess'),
|
type: 'success'
|
})
|
this.cleanContractData()
|
this.fetch()
|
})
|
},
|
// 初始化续签转正信息
|
initContractData(val) {
|
this.cleanContractData()
|
this.probationForm.empId = val.empId
|
this.probationForm.empNumb = val.empNumb
|
this.probationForm.empName = val.empName
|
this.probationForm.certificateNumb = val.certificateNumb
|
this.probationForm.sex = val.sex
|
this.probationForm.deptId = val.deptId
|
this.probationForm.deptName = val.deptName
|
this.probationForm.allDeptName = val.allDeptName
|
this.probationForm.JobId = val.JobId
|
this.probationForm.jobName = val.jobName
|
this.probationForm.probationDate = val.probationDate
|
this.probationForm.entryDate = val.entryDate
|
},
|
// 清除续签转正信息
|
cleanContractData() {
|
this.probationForm.contractId = ''
|
this.probationForm.empId = ''
|
this.probationForm.empNumb = ''
|
this.probationForm.empName = ''
|
this.probationForm.certificateNumb = ''
|
this.probationForm.sex = ''
|
this.probationForm.deptId = ''
|
this.probationForm.deptName = ''
|
this.probationForm.allDeptName = ''
|
this.probationForm.JobId = ''
|
this.probationForm.jobName = ''
|
this.probationForm.contractStatus = ''
|
this.probationForm.beginDate = ''
|
this.probationForm.endDate = ''
|
this.probationForm.contractPeriod = 0
|
this.probationForm.remark = ''
|
this.probationForm.transactor = ''
|
},
|
// 验证转正签订日期
|
startDate(rule, value, callback) {
|
// 如果结束日期没选,cb
|
if (!this.probationForm.endDate) {
|
callback()
|
} else {
|
// 结束日期有,进行判断
|
if (this.compareDate(value, this.probationForm.endDate)) {
|
// 如果起始在结束之前
|
callback()
|
} else {
|
callback(new Error('开始日期不能在结束日期之后,请重新选择'))
|
}
|
}
|
},
|
// 验证转正结束日期
|
endDate(rule, value, callback) {
|
// 如果起始日期没选,cb
|
if (!this.probationForm.signingDate) {
|
callback()
|
} else {
|
// 起始日期有,进行判断
|
if (this.compareDate(this.probationForm.signingDate, value)) {
|
// 如果起始在结束之前
|
this.probationForm.contractPeriod = dateDifference(this.probationForm.signingDate, this.probationForm.endDate, 'o')
|
callback()
|
} else {
|
callback(new Error('结束日期不能在开始始日期之前,请重新选择'))
|
}
|
}
|
},
|
compareDate(start, end) {
|
return new Date(end).getTime() > new Date(start).getTime()
|
},
|
// 续签转正提交
|
putProbationInfo(formName) {
|
this.$refs[formName].validate((valid) => {
|
if (valid) {
|
this.$post('hr/empBaseInfo/probation/change', { ...this.probationForm }).then(() => {
|
this.buttonLoading = false
|
this.$message({
|
message: this.$t('处理成功'),
|
type: 'success'
|
})
|
|
this.cleanContractData()
|
this.fetch()
|
this.dialogIsShow()
|
})
|
}
|
})
|
},
|
// 显示导出对话框
|
showDcyg() {
|
this.exportDialogVisible = true
|
},
|
// 确认导出
|
handleExportConfirm(selectedFields) {
|
const params = { ...this.queryParams }
|
params.empStatus = '0'
|
params.exportField = selectedFields.join(',')
|
|
this.$download(
|
this.exportConfig.exportUrl,
|
{ ...params },
|
this.exportConfig.fileName
|
).then(() => {
|
this.$message({
|
message: '下载成功!',
|
type: 'success'
|
})
|
})
|
}
|
}
|
}
|
|
</script>
|
<style lang="scss">
|
.zzyg-table {
|
.el-table th, .el-table td {
|
padding: 7px 0;
|
}
|
}
|
|
.fj-checkbox {
|
.el-checkbox__input.is-checked .el-checkbox__inner {
|
border-color: #a32c30;;
|
background: #a32c30;;
|
}
|
|
.el-checkbox__label {
|
color: #000 !important;
|
}
|
}
|
</style>
|
<style lang="scss" scoped>
|
.baseinfo .el-container {
|
.el-aside {
|
background-color: #fff;
|
}
|
|
.el-main {
|
background-color: #fff;
|
}
|
|
}
|
|
.el-main {
|
height: 600px;
|
}
|
|
.el-autocomplete {
|
width: 100%;
|
}
|
|
.el-select {
|
width: 100%;
|
}
|
|
.el-aside {
|
padding: 20px;
|
background: #f3f5f8;
|
height: 600px;
|
|
.el-tree {
|
height: 100%;
|
}
|
}
|
|
.searchTable {
|
margin-top: 10px;
|
border-collapse: collapse;
|
width: 100%;
|
|
tr {
|
border-bottom: 1px dashed #d9dadb;
|
}
|
|
.td {
|
width: 90px;
|
text-align: right;
|
}
|
|
.td-group {
|
padding-left: 20px;
|
}
|
}
|
|
.searchTable td,
|
.searchTable th {
|
color: #000;
|
height: 50px;
|
background-color: #fff;
|
}
|
|
#ygxq table {
|
border-collapse: collapse;
|
margin: 0 auto;
|
text-align: center;
|
width: 100%;
|
margin-top: 20px;
|
}
|
|
#ygxq table td,
|
#ygxq table th {
|
border: 1px solid #DDDCDC;
|
color: #666;
|
height: 30px;
|
}
|
|
#ygxq table thead th {
|
background-color: #CCE8EB;
|
width: 100px;
|
}
|
|
#ygxq table tr:nth-child(odd) {
|
background: #fff;
|
}
|
|
#ygxq table tr:nth-child(even) {
|
background: #F5FAFA;
|
}
|
|
.tdTitle {
|
font-size: 14px;
|
font-weight: 700;
|
text-align: left;
|
}
|
|
.link_button {
|
color: #169BD5;
|
}
|
|
.del_button {
|
color: #D9001B;
|
}
|
|
#dcygTable {
|
border-collapse: collapse;
|
|
tr {
|
width: 100%;
|
border-bottom: 1px dashed #ccc;
|
|
> td:nth-child(even) {
|
width: 100px;
|
text-align: left;
|
}
|
}
|
|
}
|
|
#dcygTable td {
|
width: 160px;
|
text-align: center;
|
height: 35px;
|
line-height: 35px;
|
font-size: 15px;
|
font-weight: 400;
|
}
|
|
.search-btn {
|
display: inline-block;
|
width: 3.64vw;
|
height: 3.2vh;
|
line-height: 3.2vh;
|
text-align: center;
|
background-color: #a00515;
|
color: #fff;
|
margin-left: 1vw;
|
box-sizing: border-box;
|
cursor: pointer;
|
vertical-align: middle;
|
}
|
|
.sup-search-btn {
|
display: inline-block;
|
width: 5.2vw;
|
height: 3.2vh;
|
line-height: 3.2vh;
|
text-align: center;
|
margin-left: 1vw;
|
color: #a00515;
|
border: 1px solid #a00515;
|
box-sizing: border-box;
|
cursor: pointer;
|
vertical-align: middle;
|
}
|
</style>
|