<!-- 人员能力 -->
|
<template>
|
<div>
|
<div style="text-align: left; margin-bottom: 15px;padding: 0 16px">
|
<label>姓名</label>
|
<el-input v-model="userName" placeholder="请输入姓名" size="small" style="width: 20vh;"></el-input>
|
<el-button size="small" type="primary" @click="refreshTable">查询</el-button>
|
<div v-if="!isDepartment" style="float: right;">
|
<el-button size="small" type="primary" @click="addAppointPost('add')">新增</el-button>
|
</div>
|
</div>
|
<div class="table">
|
<TableCard :showForm="false" :showTitle="false">
|
<template v-slot:table>
|
<ZTTable
|
:column="yearColumnData"
|
:height="'calc(100vh - 20em)'"
|
:table-data="tableData"
|
:table-loading="yearLoading"
|
style="padding: 0 15px;margin-bottom: 16px"
|
>
|
<div slot="jobResponsibilities" slot-scope="scope">
|
<div v-html="changeLine(scope.row.responsibilities)"></div>
|
</div>
|
<div slot="placeWorkSlot" slot-scope="scope">
|
<div v-html="changeLine(scope.row.placeWork)"></div>
|
</div>
|
</ZTTable>
|
</template>
|
</TableCard>
|
<el-pagination :current-page="1" :page-size="search.size" :page-sizes="[10, 20, 30, 50, 100]"
|
:total="search.total" layout="->,total, sizes, prev, pager, next, jumper"
|
@size-change="handleSizeChange"
|
@current-change="handleCurrentChange">
|
</el-pagination>
|
</div>
|
<!--新增能力认定弹框-->
|
<el-dialog :close-on-click-modal="false" :close-on-press-escape="false" :title="title"
|
:visible.sync="dialogVisible"
|
width="80%" @close="resetForm">
|
<el-form v-if="dialogVisible" ref="infoForm" :model="form" :rules="rules">
|
<el-col :span="12">
|
<el-form-item label="人员:" label-width="110px" prop="userId">
|
<el-select v-model="form.userId" disabled clearable
|
filterable size="small" style="width: 100%;">
|
<el-option v-for="item in responsibleOptions" :key="item.id" :label="item.name" :value="item.id">
|
</el-option>
|
</el-select>
|
</el-form-item>
|
</el-col>
|
<!-- <el-col :span="12">-->
|
<!-- <el-form-item label="职称:" label-width="110px" prop="technicalPost">-->
|
<!-- <el-input v-model="form.technicalPost" :disabled="operationType === 'view'" clearable size="small" style="width: 100%;"/>-->
|
<!-- </el-form-item>-->
|
<!-- </el-col>-->
|
<el-col :span="24">
|
<div style="display: flex;justify-content: space-evenly;font-weight: 600">
|
<span>查核结果</span>
|
<span>符合与否</span>
|
<span>备注</span>
|
</div>
|
</el-col>
|
<el-col :span="8">
|
<el-form-item label="学历:" label-width="110px" prop="academicDegree">
|
<el-input v-model="form.academicDegree" :disabled="operationType === 'view' || operationType === 'confirm'" size="small"></el-input>
|
</el-form-item>
|
</el-col>
|
<el-col :span="8">
|
<el-form-item class="radio-group" prop="academicConformNot" style="text-align: center">
|
<el-radio-group v-model="form.academicConformNot" :disabled="operationType === 'view' || operationType === 'confirm'">
|
<el-radio :label="1">符合</el-radio>
|
<el-radio :label="2">不符合</el-radio>
|
<el-radio :label="3">不适用</el-radio>
|
</el-radio-group>
|
</el-form-item>
|
</el-col>
|
<el-col :span="8">
|
<el-form-item prop="academicRemarks">
|
<el-input v-model="form.academicRemarks" :disabled="operationType === 'view' || operationType === 'confirm'" size="small"></el-input>
|
</el-form-item>
|
</el-col>
|
<el-col :span="8">
|
<el-form-item label="相关年限:" label-width="110px" prop="relatedYears">
|
<el-input v-model="form.relatedYears" :disabled="operationType === 'view' || operationType === 'confirm'" size="small"></el-input>
|
</el-form-item>
|
</el-col>
|
<el-col :span="8">
|
<el-form-item class="radio-group" prop="relatedYearsConformNot" style="text-align: center">
|
<el-radio-group v-model="form.relatedYearsConformNot" :disabled="operationType === 'view' || operationType === 'confirm'">
|
<el-radio :label="1">符合</el-radio>
|
<el-radio :label="2">不符合</el-radio>
|
<el-radio :label="3">不适用</el-radio>
|
</el-radio-group>
|
</el-form-item>
|
</el-col>
|
<el-col :span="8">
|
<el-form-item prop="relatedYearsRemarks ">
|
<el-input v-model="form.relatedYearsRemarks " :disabled="operationType === 'view' || operationType === 'confirm'" size="small"></el-input>
|
</el-form-item>
|
</el-col>
|
<el-col :span="8">
|
<el-form-item label="相关培训:" label-width="110px" prop="relatedTraining">
|
<el-input v-model="form.relatedTraining" :disabled="operationType === 'view' || operationType === 'confirm'" size="small"></el-input>
|
</el-form-item>
|
</el-col>
|
<el-col :span="8">
|
<el-form-item class="radio-group" prop="relatedTrainingConformNot" style="text-align: center">
|
<el-radio-group v-model="form.relatedTrainingConformNot" :disabled="operationType === 'view' || operationType === 'confirm'">
|
<el-radio :label="1">符合</el-radio>
|
<el-radio :label="2">不符合</el-radio>
|
<el-radio :label="3">不适用</el-radio>
|
</el-radio-group>
|
</el-form-item>
|
</el-col>
|
<el-col :span="8">
|
<el-form-item prop="relatedTrainingRemarks">
|
<el-input v-model="form.relatedTrainingRemarks" :disabled="operationType === 'view' || operationType === 'confirm'"
|
size="small"></el-input>
|
</el-form-item>
|
</el-col>
|
<el-col :span="8">
|
<el-form-item label="相关经验:" label-width="110px" prop="relevantExperience">
|
<el-input v-model="form.relevantExperience" :disabled="operationType === 'view' || operationType === 'confirm'" size="small"></el-input>
|
</el-form-item>
|
</el-col>
|
<el-col :span="8">
|
<el-form-item class="radio-group" prop="relevantExperienceConformNot" style="text-align: center">
|
<el-radio-group v-model="form.relevantExperienceConformNot" :disabled="operationType === 'view' || operationType === 'confirm'">
|
<el-radio :label="1">符合</el-radio>
|
<el-radio :label="2">不符合</el-radio>
|
<el-radio :label="3">不适用</el-radio>
|
</el-radio-group>
|
</el-form-item>
|
</el-col>
|
<el-col :span="8">
|
<el-form-item prop="relevantExperienceRemarks">
|
<el-input v-model="form.relevantExperienceRemarks" :disabled="operationType === 'view' || operationType === 'confirm'"
|
size="small"></el-input>
|
</el-form-item>
|
</el-col>
|
<el-col :span="8">
|
<el-form-item label="上岗证:" label-width="110px" prop="workLicense">
|
<el-input v-model="form.workLicense" :disabled="operationType === 'view' || operationType === 'confirm'" size="small"
|
style="width: 100%">
|
</el-input>
|
</el-form-item>
|
</el-col>
|
<el-col :span="8">
|
<el-form-item class="radio-group" prop="workLicenseConformNot" style="text-align: center">
|
<el-radio-group v-model="form.workLicenseConformNot" :disabled="operationType === 'view' || operationType === 'confirm'">
|
<el-radio :label="1">符合</el-radio>
|
<el-radio :label="2">不符合</el-radio>
|
<el-radio :label="3">不适用</el-radio>
|
</el-radio-group>
|
</el-form-item>
|
</el-col>
|
<el-col :span="8">
|
<el-form-item prop="workLicenseRemarks">
|
<el-input v-model="form.workLicenseRemarks" :disabled="operationType === 'view' || operationType === 'confirm'" size="small"></el-input>
|
</el-form-item>
|
</el-col>
|
<el-col :span="8">
|
<el-form-item label="岗位职责:" label-width="110px" prop="jobResponsibilitiesTem" style="height: 450px">
|
<el-checkbox-group v-model="form.jobResponsibilitiesTem" :disabled="operationType === 'view' || operationType === 'confirm'"
|
@change="selectResponsibilities">
|
<el-checkbox v-for="city in responsibilities" :key="city.value" :label="city.label"
|
:value="city.value"></el-checkbox>
|
</el-checkbox-group>
|
</el-form-item>
|
</el-col>
|
<el-col :span="8">
|
<el-form-item class="radio-group" prop="jobResponsibilitiesConformNot"
|
style="text-align: center;height: 420px">
|
<el-radio-group v-model="form.jobResponsibilitiesConformNot" :disabled="operationType === 'view' || operationType === 'confirm'">
|
<el-radio :label="1">符合</el-radio>
|
<el-radio :label="2">不符合</el-radio>
|
<el-radio :label="3">不适用</el-radio>
|
</el-radio-group>
|
</el-form-item>
|
</el-col>
|
<el-col :span="8">
|
<el-form-item prop="jobResponsibilitiesRemarks" style="height: 420px">
|
<el-input v-model="form.jobResponsibilitiesRemarks" :disabled="operationType === 'view' || operationType === 'confirm'"
|
size="small"></el-input>
|
</el-form-item>
|
</el-col>
|
<el-col :span="24">
|
<span style="padding-left: 110px;font-size: 14px">备注:岗位职责达到5项及5项以上为符合</span>
|
</el-col>
|
<el-col :span="16">
|
<el-form-item label="综合评价:" label-width="110px" prop="comprehensiveAssessment">
|
<el-radio-group v-model="form.comprehensiveAssessment" :disabled="operationType === 'view' || operationType === 'confirm'">
|
<el-radio label="Qualified this position">可胜任该岗位</el-radio>
|
<el-radio label="You can work while training">可边培训边上岗</el-radio>
|
<el-radio label="Iconpetent for the position">不胜任该岗位</el-radio>
|
</el-radio-group>
|
</el-form-item>
|
</el-col>
|
<el-col :span="24">
|
<el-form-item prop="confirmOperatingPersonnelId" label="确认人:">
|
<el-select v-model="form.confirmOperatingPersonnelId" clearable :disabled="operationType === 'view' || operationType === 'confirm'"
|
filterable size="small" style="width: 50%;">
|
<el-option v-for="item in responsibleOptions" :key="item.id" :label="item.name" :value="item.id">
|
</el-option>
|
</el-select>
|
</el-form-item>
|
</el-col>
|
</el-form>
|
<span slot="footer" class="dialog-footer">
|
<el-button v-if="operationType !== 'view'" @click="resetForm">取消</el-button>
|
<el-button v-if="operationType !== 'view' && operationType !== 'confirm'" type="primary" @click="submitForm">保存</el-button>
|
<el-button v-if="operationType !== 'view' && operationType !== 'confirm'" type="primary" @click="submitForm1">提交并通知</el-button>
|
<el-button v-if="operationType === 'confirm'" type="primary" @click="verifyGet">确认</el-button>
|
</span>
|
</el-dialog>
|
</div>
|
</template>
|
|
<script>
|
|
export default {
|
props: {
|
departId: {
|
type: Number,
|
default: () => {
|
return null;
|
}
|
},
|
isDepartment: {
|
type: Boolean,
|
default: false
|
}
|
},
|
components: {
|
|
},
|
data() {
|
return {
|
userName: '',
|
tableData: [],
|
search: {
|
size: 20,
|
current: 1,
|
total: 0
|
},
|
title: '新增能力认定',
|
operationType: '',
|
yearColumnData: [
|
{
|
label: '岗位',
|
prop: 'postName',
|
minWidth: '100'
|
}, {
|
label: '姓名',
|
prop: 'userName',
|
minWidth: '100'
|
}, {
|
label: '学历',
|
prop: 'academicDegree',
|
minWidth: '100'
|
}, {
|
label: '专业',
|
prop: 'major',
|
minWidth: '100'
|
}, {
|
label: '职称',
|
prop: 'professionalTitle',
|
minWidth: '100'
|
}, {
|
dataType: 'slot',
|
label: '岗位职责',
|
prop: 'jobResponsibilities',
|
minWidth: '200px',
|
slot: 'jobResponsibilities'
|
}, {
|
dataType: 'tag',
|
label: '综合评价',
|
minWidth: '140px',
|
prop: 'comprehensiveAssessment',
|
formatData: (params) => {
|
if (params == 'Qualified this position') {
|
return '可胜任该岗位';
|
} else if (params == 'You can work while training') {
|
return '可边培训边上岗';
|
} else {
|
return '不胜任该岗位';
|
}
|
},
|
formatType: (params) => {
|
if (params == 'Qualified this position') {
|
return 'success';
|
} else if (params == 'You can work while training') {
|
return 'warning';
|
} else {
|
return 'danger';
|
}
|
}
|
}, {
|
label: '确认人',
|
prop: 'confirmOperatingPersonnelName',
|
minWidth: '100'
|
}, {
|
label: '确认日期',
|
prop: 'confirmDate',
|
minWidth: '160'
|
}, {
|
dataType: 'action',
|
minWidth: '220',
|
label: '操作',
|
fixed: 'right',
|
operation: [
|
{
|
name: '编辑',
|
type: 'text',
|
clickFun: (row) => {
|
this.handleViewClick('edit', row);
|
},
|
disabled: (row) => {
|
if (row.confirmDate) {
|
return true
|
} else {
|
return false
|
}
|
},
|
},
|
{
|
name: '查看',
|
type: 'text',
|
clickFun: (row) => {
|
this.handleViewClick('view', row);
|
}
|
},
|
{
|
name: '导出',
|
type: 'text',
|
clickFun: (row) => {
|
this.downLoadPost(row);
|
}
|
},
|
{
|
name: '确认',
|
type: 'text',
|
clickFun: (row) => {
|
this.handleViewClick('confirm', row);
|
},
|
disabled: (row) => {
|
if (row.confirmDate || JSON.parse(localStorage.getItem("user")).userId != row.confirmOperatingPersonnelId) {
|
return true
|
} else {
|
return false
|
}
|
},
|
},
|
{
|
name: '删除',
|
type: 'text',
|
color: '#f56c6c',
|
clickFun: (row) => {
|
this.deletePost(row.id);
|
},
|
disabled: (row) => {
|
if (row.confirmDate) {
|
return true
|
} else {
|
return false
|
}
|
}
|
}
|
]
|
}],
|
yearLoading: false,
|
dialogVisible: false,
|
verifyGetId: '',
|
form: {
|
jobResponsibilitiesTem: []
|
},
|
responsibleOptions: [],
|
rules: {
|
confirmOperatingPersonnelId: [{ required: true, message: '请选择确认人', trigger: 'change' }],
|
userId: [{ required: true, message: '请选择人员', trigger: 'change' }],
|
academicDegree: [{ required: true, message: '请输入学历查核结果', trigger: 'blur' }],
|
academicConformNot: [{ required: true, message: '请选择学历符合与否', trigger: 'change' }],
|
relatedYears: [{ required: true, message: '请输入相关年限查核结果', trigger: 'blur' }],
|
relatedYearsConformNot: [{ required: true, message: '请选择相关年限符合与否', trigger: 'change' }],
|
relatedTraining: [{ required: true, message: '请输入相培训限查核结果', trigger: 'blur' }],
|
relatedTrainingConformNot: [{ required: true, message: '请选择相关培训符合与否', trigger: 'change' }],
|
relevantExperience: [{ required: true, message: '请输入相关经验查核结果', trigger: 'blur' }],
|
relevantExperienceConformNot: [{ required: true, message: '请选择相关经验符合与否', trigger: 'change' }],
|
workLicense: [{ required: true, message: '请输入上岗证查核结果', trigger: 'blur' }],
|
workLicenseConformNot: [{ required: true, message: '请选择上岗证符合与否', trigger: 'change' }],
|
jobResponsibilitiesTem: [{ required: true, message: '请选择岗位职责查核结果', trigger: 'change' }],
|
jobResponsibilitiesConformNot: [{ required: true, message: '请选择岗位职责符合与否', trigger: 'change' }],
|
comprehensiveAssessment: [{ required: true, message: '请选择综合评价', trigger: 'change' }]
|
},
|
responsibilities: []
|
};
|
},
|
mounted() {
|
this.getList(this.departId);
|
},
|
methods: {
|
// 下载
|
downLoadPost(row) {
|
this.$axios.get(this.$api.personnel.exportPersonnelCapacity + '?id=' + row.id,{responseType: "blob"}).then(res => {
|
this.outLoading = false
|
const blob = new Blob([res],{ type: 'application/msword' });
|
//将Blob 对象转换成字符串
|
let reader = new FileReader();
|
reader.readAsText(blob, 'utf-8');
|
reader.onload = () => {
|
try {
|
let result = JSON.parse(reader.result);
|
if (result.message) {
|
this.$message.error(result.message);
|
} else {
|
const url = URL.createObjectURL(blob);
|
const link = document.createElement('a');
|
link.href = url;
|
link.download = "人员能力导出" + '.docx';
|
link.click();
|
this.$message.success('导出成功')
|
}
|
} catch (err) {
|
console.log(err);
|
const url = URL.createObjectURL(blob);
|
const link = document.createElement('a');
|
link.href = url;
|
link.download = "人员能力导出" + '.docx';
|
link.click();
|
this.$message.success('导出成功')
|
}
|
}
|
})
|
},
|
// 查询
|
refreshTable() {
|
this.getList(this.departId);
|
},
|
// 获取人员能力列表信息
|
getList(userId) {
|
this.search.userId = userId;
|
const name = this.isDepartment ? 'departmentId' : 'userId';
|
this.yearLoading = true
|
this.$axios.get(this.$api.personnel.personPersonnelCapacityPage + '?userName=' + this.userName + `&${name}=` + this.search.userId + '&size=' + this.search.size + '¤t=' + this.search.current).then(res => {
|
this.yearLoading = false
|
if (res.code === 201) return;
|
this.tableData = res.data.records;
|
this.search.total = res.data.total;
|
}).catch(err => {
|
console.log(err);
|
this.yearLoading = false
|
})
|
},
|
selectResponsibilities(arr) {
|
let arrTem = [];
|
arr.map(val => {
|
const index = this.responsibilities.findIndex(item => item.label === val);
|
if (index > -1) {
|
arrTem.push(this.responsibilities[index].value);
|
}
|
});
|
this.form.jobResponsibilities = arrTem.join(',');
|
},
|
getResponsibilities() {
|
this.$axios.post(this.$api.enums.selectEnumByCategory, {
|
category: '岗位职责'
|
}).then(res => {
|
this.responsibilities = res.data;
|
});
|
},
|
changeLine (val) {
|
if(val) {
|
return val.replace(/,/g, '<br>')
|
} else {
|
return
|
}
|
},
|
// 新增
|
addAppointPost(type) {
|
this.operationType = type;
|
this.title = '新增能力认定'
|
this.dialogVisible = true;
|
console.log('this.departId---', this.departId)
|
this.form = {
|
jobResponsibilitiesTem: []
|
}
|
this.form.userId = this.departId
|
this.getUserList();
|
this.getResponsibilities();
|
|
},
|
// 编辑/查看
|
handleViewClick(type, row) {
|
this.operationType = type;
|
this.verifyGetId = row.id
|
this.title = this.operationType === 'edit' ? '修改能力认定' : '查看能力认定'
|
this.dialogVisible = true;
|
this.form = {...row}
|
if(this.form.responsibilities) {
|
this.$set(this.form, 'jobResponsibilitiesTem', this.form.responsibilities.split(","))
|
} else {
|
this.$set(this.form, 'jobResponsibilitiesTem', [])
|
}
|
this.getUserList();
|
this.getResponsibilities();
|
},
|
// 保存
|
submitForm() {
|
this.$refs.infoForm.validate((valid) => {
|
if (valid) {
|
this.$axios.post(this.$api.personnel.addOrUpdatePersonPersonnelCapacity, this.form, {
|
headers: {
|
'Content-Type': 'application/json'
|
}
|
}).then(res => {
|
if (res.code == 200) {
|
this.$message.success('提交成功');
|
this.getList(this.departId);
|
this.dialogVisible = false;
|
}
|
});
|
}
|
});
|
},
|
// 提交并通知
|
submitForm1() {
|
this.$refs.infoForm.validate((valid) => {
|
if (valid) {
|
this.$axios.post(this.$api.personnel.submitConfirmPersonnelCapability, this.form, {
|
headers: {
|
'Content-Type': 'application/json'
|
}
|
}).then(res => {
|
if (res.code == 200) {
|
this.$message.success('提交成功');
|
this.getList(this.departId);
|
this.dialogVisible = false;
|
}
|
});
|
}
|
});
|
},
|
verifyGet () {
|
this.$axios.get(this.$api.personnel.confirmPersonnelCapability + '?id=' + this.verifyGetId).then(res => {
|
if (res.code == 200) {
|
this.$message.success('确认成功');
|
this.resetForm()
|
this.getList(this.departId);
|
}
|
});
|
},
|
// 删除岗位职责
|
deletePost(id) {
|
this.$confirm('此操作将永久删除此数据, 是否继续?', '提示', {
|
confirmButtonText: '确定',
|
cancelButtonText: '取消',
|
type: 'warning'
|
}).then(() => {
|
this.$axios.delete(this.$api.personnel.deletePersonPersonnelCapacity + '?id=' + id).then(res => {
|
if (res.code == 200) {
|
this.$message.success('删除成功');
|
this.getList(this.departId);
|
}
|
});
|
}).catch(() => {
|
this.$message.error('删除失败');
|
});
|
},
|
resetForm() {
|
this.$refs.infoForm.resetFields();
|
this.dialogVisible = false;
|
},
|
getUserList(){
|
this.$axios.get(this.$api.user.selectDepartmentLimsUserList).then(res => {
|
if (res.code == 200) {
|
this.responsibleOptions = res.data
|
}
|
})
|
},
|
handleSizeChange(val) {
|
this.search.size = val;
|
this.getList(this.departId);
|
},
|
handleCurrentChange(val) {
|
this.search.current = val;
|
this.getList(this.departId);
|
}
|
},
|
watch: {
|
// 监听点击el-tree的数据,进行数据刷新
|
departId: {
|
handler(newId, oldId) {
|
this.getList(newId);
|
}
|
},
|
// 监听点击el-tree的数据,进行数据刷新
|
isDepartment: {
|
handler(newId, oldId) {
|
this.getList(this.departId);
|
}
|
},
|
}
|
};
|
</script>
|
<style scoped>
|
>>>.el-dialog {
|
margin: 6vh auto 50px !important;
|
}
|
>>> .el-dialog__body {
|
max-height: 70vh;
|
overflow-y: auto;
|
}
|
|
.radio-group >>> .el-form-item__error {
|
padding-left: 38px;
|
}
|
>>>.el-checkbox__label {
|
width: 212px;
|
white-space: pre-wrap;
|
}
|
</style>
|