人效管理-绩效管理-绩效模板维护-接口对接

dev-scheduling
ysn 1 month ago
parent d99287243c
commit f950f145b4
  1. 26
      src/api/performanceManagement/dataReporting.js
  2. 57
      src/api/performanceManagement/templateMaintenance.js
  3. 261
      src/views/personnelEfficiencyManagement/performanceManagement/components/batchAddContent.vue
  4. 431
      src/views/personnelEfficiencyManagement/performanceManagement/components/batchAddPerf.vue
  5. 367
      src/views/personnelEfficiencyManagement/performanceManagement/dataReporting.vue
  6. 268
      src/views/personnelEfficiencyManagement/performanceManagement/templateMaintenance.vue

@ -0,0 +1,26 @@
// 绩效填报相关接口
import request from '@/axios';
// 1. 绩效模板内容列表
export function listBsEfficiencyTempParam(params) {
return request({
url: '/blade-desk/bsEfficiencyTempParam/list',
method: 'get',
params
})
}
// 2. 绩效模板内容删除
export function removeBsEfficiencyTempParam(params) {
return request({
url: '/blade-desk/bsEfficiencyTempParam/remove',
method: 'post',
params
})
}
// 3. 绩效模板内容新增
export function submitBsEfficiencyTempParam(data) {
return request({
url: '/blade-desk/bsEfficiencyTempParam/submit',
method: 'post',
data
})
}

@ -1,39 +1,42 @@
// 绩效模板维护
// 绩效模板相关接口
import request from '@/axios';
// 列表
export const pageList = (params) => {
// 1. 绩效模板分页查询
export function pageBsEfficiencyTemp(params) {
return request({
url: '/blade-desk/bsEfficiencyTemp/page',
method: 'get',
params
});
};
// 查询用户列表
export const pageListUser = (params) => {
return request({
url: '/blade-system/user/page',
method: 'get',
params
});
};
// 新增
export const addItem = params => {
})
}
// 2. 绩效模板新增
export function submitBsEfficiencyTemp(data) {
return request({
url: '/blade-desk/bsEfficiencyTemp/submit',
method: 'post',
data: params
});
};
// 删除
export const delItem = params => {
data
})
}
// 3. 绩效模板详情
export function detailBsEfficiencyTemp(params) {
return request({
url: '/blade-desk/bsEfficiencyTemp/detail',
method: 'get',
params
})
}
// 4. 绩效模板删除
export function removeBsEfficiencyTemp(params) {
return request({
url: '/blade-desk/bsEfficiencyTemp/remove',
method: 'post',
params
});
};
})
}
// 5. 绩效模板下发
export function taskAssignmentBsEfficiencyTemp(data) {
return request({
url: '/blade-desk/bsEfficiencyTemp/taskAssignment',
method: 'post',
data
})
}

@ -1,99 +1,186 @@
<template>
<el-dialog :title="title" append-to-body :modelValue="openShow" width="70%" @close="closeDialog">
<div style="margin-bottom: 12px">
<el-button type="primary" @click="addTable">插入一行</el-button>
<el-button type="danger" @click="delTable">删除选中行</el-button>
</div>
<!-- 单个 Form 包裹整个表格 -->
<el-form
ref="tableForm"
:model="form"
:rules="formRules"
label-width="0px"
>
<!-- 全局错误提示 -->
<div v-if="formError" class="error-message" style="color: #f56c6c; margin-bottom: 10px;">
{{ formError }}
</div>
<el-table :data="form.tableData" @select="selectChange" border>
<el-table-column type="selection" width="55" :selectable="checkSelectable"></el-table-column>
<!-- 模板内容 -->
<el-table-column align="center" label="模板内容">
<template #header>
<span><i style="color: red">*</i>模板内容</span>
</template>
<template #default="scope">
<el-form-item :prop="`tableData[${scope.$index}].content`" :rules="formRules.content">
<el-input v-model="scope.row.content" :disabled="scope.$index == form.tableData.length - 1" placeholder="请输入模板内容"></el-input>
</el-form-item>
</template>
</el-table-column>
</el-table>
</el-form>
<template #footer>
<span class="dialog-footer">
<el-button @click="closeDialog"> </el-button>
<el-button type="primary" @click="submitForm"> </el-button>
</span>
</template>
</el-dialog>
<el-dialog :title="title" append-to-body :modelValue="openShow" width="70%" @close="closeDialog">
<div style="margin-bottom: 12px">
<el-button type="primary" @click="addTable">插入一行</el-button>
<el-button type="danger" @click="delTable">删除选中行</el-button>
</div>
<!-- 单个 Form 包裹整个表格 -->
<el-form ref="tableForm" :model="form" :rules="formRules" label-width="0px">
<!-- 全局错误提示 -->
<div v-if="formError" class="error-message" style="color: #f56c6c; margin-bottom: 10px">
{{ formError }}
</div>
<el-table :data="form.tableData" @selection-change="handleSelectionChange" border>
<el-table-column type="selection" width="55" :selectable="checkSelectable" />
<!-- 模板内容 -->
<el-table-column align="center" label="模板内容">
<template #header>
<span><i style="color: red">*</i>模板内容</span>
</template>
<template #default="scope">
<el-form-item
:prop="`tableData[${scope.$index}].paramName`"
:rules="formRules.paramName"
>
<el-input
v-model="scope.row.paramName"
:disabled="scope.$index == form.tableData.length - 1"
placeholder="请输入模板内容"
/>
</el-form-item>
</template>
</el-table-column>
</el-table>
</el-form>
<template #footer>
<span class="dialog-footer">
<el-button @click="closeDialog"> </el-button>
<el-button type="primary" @click="submitForm"> </el-button>
</span>
</template>
</el-dialog>
</template>
<script>
import {
listBsEfficiencyTempParam,
removeBsEfficiencyTempParam,
submitBsEfficiencyTempParam,
} from '@/api/performanceManagement/dataReporting';
export default {
props:{
showContent:{
type:Boolean,
default:false
},
title:{
type:String,
default:''
}
props: {
showContent: {
type: Boolean,
default: false,
},
title: {
type: String,
default: '',
},
data() {
return {
openShow: false,
formError:"",
form:{
tableData:[
{_select:false,content:'总分'}
]
},
formRules:{}
},
data() {
return {
openShow: false,
formError: '',
form: {
tableData: [],
},
formRules: {
paramName: [{ required: true, message: '请输入模板内容', trigger: 'blur' }],
},
selection: [],
};
},
created() {
this.openShow = this.showContent;
this.loadTemplateContent();
},
methods: {
closeDialog(val) {
this.openShow = false;
this.$emit('closeDialog', val);
},
//
loadTemplateContent() {
listBsEfficiencyTempParam().then(res => {
if (res.data.code === 200) {
const records = res.data.data || [];
if (records.length > 0) {
this.form.tableData = records.map(item => ({
...item,
_select: false,
}));
} else {
this.form.tableData = [{ _select: false, paramName: '总分' }];
this.addTable();
}
} else {
this.form.tableData = [{ _select: false, paramName: '总分' }];
this.addTable();
}
});
},
addTable() {
// arr.length - 1
const newItem = { _select: false, paramName: '' };
this.form.tableData.splice(this.form.tableData.length - 1, 0, newItem);
},
created(){
this.openShow = this.showContent
if(this.title == '模板内容维护' && this.form.tableData.length == 1){
this.addTable()
//
checkSelectable(row, index) {
// false
return index !== this.form.tableData.length - 1;
},
handleSelectionChange(selection) {
this.selection = selection;
},
//
delTable() {
if (this.selection.length === 0) {
this.$message.error('请至少选择一条数据');
return;
}
const count = this.selection.length;
this.$confirm(`确定要删除选中的 ${count} 条数据吗?此操作不可恢复!`, '删除确认', {
confirmButtonText: '确定删除',
cancelButtonText: '取消',
type: 'warning',
confirmButtonClass: 'el-button--danger',
})
.then(() => {
// id
const hasIdRows = this.selection.filter(item => item.id);
// 1. id
if (hasIdRows.length > 0) {
const ids = hasIdRows.map(item => item.id).join(',');
removeBsEfficiencyTempParam({ ids }).then(res => {
if (res.data.code == 200) {
this.doFrontDelete(); //
}
});
} else {
// 2. id
this.doFrontDelete();
}
})
.catch(() => {});
},
//
doFrontDelete() {
//
this.form.tableData = this.form.tableData.filter(
row => !this.selection.some(item => item === row)
);
this.selection = [];
this.$message.success('删除成功');
},
//
submitForm() {
this.formError = '';
this.$refs.tableForm.validate((isValid, invalidFields) => {
if (!isValid) {
this.formError = '存在未完善的字段,请检查表格中的红色提示';
this.$nextTick(() => {
const firstError = document.querySelector('.el-form-item.is-error');
if (firstError) {
firstError.scrollIntoView({ behavior: 'smooth', block: 'center' });
}
});
return;
}
const submitData = this.form.tableData.map(row => {
const { _select, ...validData } = row;
return validData;
});
console.log('提交数据', submitData); //
submitBsEfficiencyTempParam(submitData).then(res => {
if (res.data.code === 200) {
this.$message.success('保存成功');
this.closeDialog(true); //
}
});
});
},
methods:{
closeDialog(val) {
this.openShow = false
this.$emit('closeDialog', val)
},
addTable(){
console.log('1111111111111')
// arr.length - 1
const newItem = { _select: false, content: '' };
this.form.tableData.splice(this.form.tableData.length - 1, 0, newItem);
},
// 2:
checkSelectable(row, index) {
// false
return index !== this.form.tableData.length - 1;
},
selectChange(list, row){
row._select = !row._select;
},
//
delTable() {
this.form.tableData = this.form.tableData.filter(row => !row._select);
},
}
}
},
};
</script>
<style lang="scss" scoped>

@ -1,231 +1,234 @@
<template>
<el-dialog :title="title" append-to-body :modelValue="openShow" width="70%" @close="closeDialog">
<div style="margin-bottom: 12px" v-if="moldAddMore">
<el-button type="primary" @click="addTable">插入一行</el-button>
<el-button type="danger" @click="delTable">删除选中行</el-button>
</div>
<!-- 单个 Form 包裹整个表格 -->
<el-form
ref="tableForm"
:model="form"
:rules="formRules"
label-width="0px"
>
<!-- 全局错误提示 -->
<div v-if="formError" class="error-message" style="color: #f56c6c; margin-bottom: 10px;">
{{ formError }}
</div>
<el-table :data="form.tableData" @select="selectChange" border>
<el-table-column type="selection" width="55"></el-table-column>
<!-- 绩效任务名称 -->
<el-table-column align="center" label="绩效任务名称">
<template #header>
<span><i style="color: red">*</i>绩效任务名称</span>
</template>
<template #default="scope">
<el-form-item :prop="`tableData[${scope.$index}].taskName`" :rules="formRules.taskName">
<el-input
v-model="scope.row.taskName"
placeholder="请输入"
></el-input>
</el-form-item>
</template>
</el-table-column>
<!-- 绩效填报人 -->
<el-table-column align="center" label="绩效填报人">
<template #header>
<span><i style="color: red">*</i>绩效填报人</span>
</template>
<template #default="scope">
<el-form-item :prop="`tableData[${scope.$index}].reportUser`" :rules="formRules.reportUser">
<el-select
v-model="scope.row.reportUser"
placeholder="请选择绩效填报人"
filterable
<el-dialog :title="title" append-to-body :modelValue="openShow" width="70%" @close="closeDialog">
<div style="margin-bottom: 12px" v-if="moldAddMore">
<el-button type="primary" @click="addTable">插入一行</el-button>
<el-button type="danger" @click="delTable">删除选中行</el-button>
</div>
<!-- 单个 Form 包裹整个表格 -->
<el-form ref="tableForm" :model="form" :rules="formRules" label-width="0px">
<!-- 全局错误提示 -->
<div v-if="formError" class="error-message" style="color: #f56c6c; margin-bottom: 10px">
{{ formError }}
</div>
<el-table :data="form.tableData" @select="selectChange" border>
<el-table-column type="selection" width="55"></el-table-column>
<!-- 绩效任务名称 -->
<el-table-column align="center" label="绩效任务名称">
<template #header>
<span><i style="color: red">*</i>绩效任务名称</span>
</template>
<template #default="scope">
<el-form-item :prop="`tableData[${scope.$index}].taskName`" :rules="formRules.taskName">
<el-input v-model="scope.row.taskName" placeholder="请输入"></el-input>
</el-form-item>
</template>
</el-table-column>
<!-- 绩效填报人 -->
<el-table-column align="center" label="绩效填报人">
<template #header>
<span><i style="color: red">*</i>绩效填报人</span>
</template>
<template #default="scope">
<el-form-item
:prop="`tableData[${scope.$index}].reportUser`"
:rules="formRules.reportUser"
>
<el-select
v-model="scope.row.reportUser"
placeholder="请选择绩效填报人"
filterable
remote
:remote-method="remoteMethod"
:loading="loading"
>
<el-option
v-for="item in userData"
:key="item.id"
:label="item.realName"
:value="item.id"
/>
</el-select>
</el-form-item>
</template>
</el-table-column>
</el-table>
</el-form>
<template #footer>
<span class="dialog-footer">
<el-button @click="closeDialog"> </el-button>
<el-button type="primary" @click="submitForm"> </el-button>
</span>
</template>
</el-dialog>
reserve-keyword
:remote-method="remoteMethod"
:loading="loading"
>
<el-option
v-for="item in userData"
:key="item.id"
:label="item.realName"
:value="item.id"
/>
</el-select>
</el-form-item>
</template>
</el-table-column>
</el-table>
</el-form>
<template #footer>
<span class="dialog-footer">
<el-button @click="closeDialog"> </el-button>
<el-button type="primary" @click="submitForm"> </el-button>
</span>
</template>
</el-dialog>
</template>
<script>
import {pageListUser,addItem} from '@/api/performanceManagement/templateMaintenance'
import { submitBsEfficiencyTemp } from '@/api/performanceManagement/templateMaintenance';
import { getList } from '@/api/system/user';
export default {
props:{
showDialog:{
type:Boolean,
default:false
},
moldAddMore:{
type:Boolean,
default:false
},
title:{
type:String,
default:''
},
checkRow:{
type:Object,
default:() => {}
}
props: {
showDialog: {
type: Boolean,
default: false,
},
data(){
return {
openShow:false,
formError:'',
form:{
tableData:[]
},
loading:false,
userData:[],
formRules:{
moldAddMore: {
type: Boolean,
default: false,
},
title: {
type: String,
default: '',
},
checkRow: {
type: Object,
default: () => {},
},
},
data() {
return {
openShow: false,
formError: '',
form: {
tableData: [],
},
loading: false,
userData: [],
formRules: {
// 1
tableData: [
{
required: true,
message: '请至少添加一行数据',
trigger: 'submit',
type: 'array' //
},
{
validator: (rule, value, callback) => {
if (value.length === 0) {
callback(new Error('请至少添加一行数据'));
} else {
callback();
}
},
trigger: 'submit'
}
],
// wcId
taskName: [
{ required: true, message: '请输入绩效任务名称', trigger: ['change', 'submit'] }
],
// wcId
reportUser: [
{ required: true, message: '请选择绩效填报人', trigger: ['change', 'submit'] }
],
tableData: [
{
required: true,
message: '请至少添加一行数据',
trigger: 'submit',
type: 'array', //
},
{
validator: (rule, value, callback) => {
if (value.length === 0) {
callback(new Error('请至少添加一行数据'));
} else {
callback();
}
},
detailRow:{}
}
trigger: 'submit',
},
],
// wcId
taskName: [
{ required: true, message: '请输入绩效任务名称', trigger: ['change', 'submit'] },
],
// wcId
reportUser: [
{ required: true, message: '请选择绩效填报人', trigger: ['change', 'submit'] },
],
},
detailRow: {},
};
},
created() {
this.openShow = this.showDialog;
// detailRow
if (this.title == '新增') {
this.form.tableData = [];
this.addTable();
} else {
this.detailRow = JSON.parse(JSON.stringify(this.checkRow));
this.form.tableData = [];
this.form.tableData.push(this.detailRow);
}
//
this.remoteMethod('');
},
methods: {
closeDialog(val) {
this.openShow = false;
this.$emit('closeDialog', val);
},
created(){
this.openShow = this.showDialog
if(this.title == "新增"){
this.form.tableData = []
this.addTable()
}else{
this.detailRow = JSON.parse(JSON.stringify(this.checkRow))
this.form.tableData = []
this.form.tableData.push(this.detailRow)
}
addTable() {
this.form.tableData.push({
_select: false,
taskName: '',
reportUser: '',
});
},
selectChange(list, row) {
row._select = !row._select;
},
methods:{
closeDialog(val){
this.openShow = false
this.$emit('closeDialog',val)
},
addTable(){
this.form.tableData.push({
_select:false,
taskName:"",
reportUser:""
})
},
selectChange(list, row){
row._select = !row._select;
},
//
delTable() {
this.form.tableData = this.form.tableData.filter(row => !row._select);
},
remoteMethod(query){
console.log('query============',query)
this.loading = true
if(query == ""){
pageListUser({
current:1,size:300
}).then(res =>{
this.userData = res.data.data.records
this.loading = false
})
}else{
pageListUser({
current:1,size:300,
realName:query
}).then(res =>{
this.userData = res.data.data.records
this.loading = false
})
//
delTable() {
this.form.tableData = this.form.tableData.filter(row => !row._select);
},
//
remoteMethod(query) {
this.loading = true;
const page = { currentPage: 1, pageSize: 500 };
const queryParams = Object.assign({}, this.query || {}, {
status: this.auditMode ? 0 : 1,
userName: query,
});
getList(page.currentPage, page.pageSize, queryParams)
.then(res => {
const data = res.data.data;
this.userData = data.records;
if (this.detailRow.reportUser){
// id
const hasItem = this.userData.some(item => item.id == this.detailRow.reportUser);
if (!hasItem) {
//
this.userData.unshift({
id: this.detailRow.reportUser,
realName: this.detailRow.reportUserName,
});
}
}
})
.finally(() => {
this.loading = false;
});
},
//
submitForm() {
this.formError = '';
// Form
this.$refs.tableForm.validate((isValid, invalidFields) => {
if (!isValid) {
//
this.formError = '存在未完善的字段,请检查表格中的红色提示';
this.$nextTick(() => {
//
const firstError = document.querySelector('.el-form-item.is-error');
if (firstError) {
firstError.scrollIntoView({ behavior: 'smooth', block: 'center' });
}
},
//
submitForm() {
this.formError = '';
// Form
this.$refs.tableForm.validate((isValid, invalidFields) => {
if (!isValid) {
//
this.formError = '存在未完善的字段,请检查表格中的红色提示';
this.$nextTick(() => {
//
const firstError = document.querySelector('.el-form-item.is-error');
if (firstError) {
firstError.scrollIntoView({ behavior: 'smooth', block: 'center' });
}
});
return;
}
//
const submitData = this.form.tableData.map(row => {
const { _select, ...validData } = row; //
return validData;
});
if(this.title == "新增"){
addItem(submitData).then(res =>{
if(res.data.code == 200){
this.$message.success('新增成功')
this.closeDialog(true)
}
})
}else{
addItem(submitData).then(res =>{
if(res.data.code == 200){
this.$message.success('修改成功')
this.closeDialog(true)
}
})
}
})
});
return;
}
}
}
//
const submitData = this.form.tableData.map(row => {
const { _select, ...validData } = row; //
return validData;
});
if (this.title == '新增') {
submitBsEfficiencyTemp(submitData).then(res => {
if (res.data.code == 200) {
this.$message.success('新增成功');
this.closeDialog(true);
}
});
} else {
submitBsEfficiencyTemp(submitData).then(res => {
if (res.data.code == 200) {
this.$message.success('修改成功');
this.closeDialog(true);
}
});
}
});
},
},
};
</script>
<style lang="scss" scoped>
//
:deep(.el-table .el-form-item) {

@ -18,6 +18,9 @@
@refresh-change="refreshChange"
@on-load="onLoad"
>
<template #menu-left>
<el-button type="primary" @click="maintenanceContents">绩效内容维护</el-button>
</template>
<template #status="scope">
<el-tag v-if="scope.row.status == 1">进行中</el-tag>
<!-- <el-tag v-if="scope.row.status == 2" type="warning">待汇总</el-tag> -->
@ -27,45 +30,47 @@
<el-tag v-if="scope.row.status == 6" type="success">已完成</el-tag>
</template>
<template #menu="scope">
<el-button type="text" v-if="scope.row.status == 3 || scope.row.status == 5 || scope.row.status == 4" @click="detailRow(scope.row)">详情</el-button>
<el-button
type="text"
v-if="scope.row.status == 3 || scope.row.status == 5 || scope.row.status == 4"
@click="detailRow(scope.row)"
>详情</el-button
>
<el-button
type="text"
v-if="scope.row.status == 1 || scope.row.status == 5"
@click="fillRow(scope.row)"
>填报</el-button
>
<el-button type="text" v-if="(scope.row.parentId && scope.row.status == 6) ||
(!scope.row.parentId && scope.row.status == 1)"
<el-button
type="text"
v-if="
(scope.row.parentId && scope.row.status == 6) ||
(!scope.row.parentId && scope.row.status == 1)
"
>下载</el-button
>
<el-button type="text" v-if="scope.row.parentId && scope.row.status == 1"
>删除</el-button
>
<el-button type="text" v-if="scope.row.parentId && scope.row.status == 1">删除</el-button>
<el-button type="text" v-if="scope.row.status == 2" @click="collectRow(scope.row)"
>汇总</el-button
>
<el-button type="text" v-if="scope.row.status == 3" @click="examineRow(scope.row)"
>审批</el-button
>
<el-button type="text" v-if="scope.row.parentId && scope.row.status == 6"
>重置</el-button
>
<el-button type="text" v-if="scope.row.parentId && scope.row.status == 6">重置</el-button>
</template>
</avue-crud>
<reportingPerf v-if="showReport" :showReport="showReport" :isDetail="isDetail"
:title="title" @closeDialog="closeDialog"></reportingPerf>
<prefDetail
v-if="showDetail"
:showDetail="showDetail"
@closeDetail="closeDetail">
</prefDetail>
<reportingPerf
v-if="showReport"
:showReport="showReport"
:isDetail="isDetail"
:title="title"
@closeDialog="closeDialog"
></reportingPerf>
<prefDetail v-if="showDetail" :showDetail="showDetail" @closeDetail="closeDetail"> </prefDetail>
<el-dialog append-to-body title="填报" v-model="showDialog">
<avue-form
:option="excelOption"
v-model="excelForm"
:upload-after="uploadAfter"
></avue-form>
<avue-form :option="excelOption" v-model="excelForm" :upload-after="uploadAfter"></avue-form>
<template #footer>
<span class="dialog-footer">
<el-button @click="showDialog = false"> </el-button>
@ -119,12 +124,7 @@
<el-table-column align="center" label="通报" prop="notice"></el-table-column>
<el-table-column align="center" label="请假扣分" prop="leave"></el-table-column>
<el-table-column align="center" label="考勤扣分" prop="check"></el-table-column>
<el-table-column
align="center"
label="投稿加分项"
prop="add"
width="100"
></el-table-column>
<el-table-column align="center" label="投稿加分项" prop="add" width="100"></el-table-column>
<el-table-column align="center" label="群策群力" prop="all"></el-table-column>
<el-table-column
align="center"
@ -155,30 +155,39 @@
</span>
</template>
</el-dialog>
<batchAddContent
v-if="showContent"
:showContent="showContent"
:title="title"
@closeDialog="closeDialog"
/>
</basic-container>
</template>
<script>
import reportingPerf from "./components/reportingPerf.vue"
import reportingPerf from './components/reportingPerf.vue';
import prefDetail from './components/prefDetail.vue';
import { excelOption } from "./js/dataReportOption";
import batchAddContent from './components/batchAddContent.vue';
import { excelOption } from './js/dataReportOption';
export default {
components:{reportingPerf,prefDetail},
components: { reportingPerf, prefDetail,batchAddContent },
data() {
return {
showDialog: false,
excelForm: {},
excelOption: excelOption,
typeValue: "1",
resultValue: "",
showReport:false,
isDetail:false,
title:"",
typeValue: '1',
resultValue: '',
showReport: false,
isDetail: false,
title: '',
showContent: false,
tableData: [
{
id: 1,
userCode: "001",
userName: "张三",
userCode: '001',
userName: '张三',
KPI: 70,
lh: 26,
notice: 0,
@ -192,8 +201,8 @@ export default {
},
{
id: 1,
userCode: "002",
userName: "李四",
userCode: '002',
userName: '李四',
KPI: 68,
lh: 26,
notice: 0,
@ -207,8 +216,8 @@ export default {
},
{
id: 1,
userCode: "003",
userName: "王五",
userCode: '003',
userName: '王五',
KPI: 70,
user: 96,
lh: 26,
@ -223,8 +232,8 @@ export default {
},
{
id: 1,
userCode: "004",
userName: "刘明",
userCode: '004',
userName: '刘明',
KPI: 70,
user: 98,
lh: 26,
@ -238,7 +247,7 @@ export default {
total: 94,
},
],
showDetail:false,
showDetail: false,
showExamine: false,
loading: false,
data: [],
@ -249,15 +258,15 @@ export default {
total: 0,
},
option: {
height: "auto",
align: "center",
height: 'auto',
align: 'center',
calcHeight: 32,
rowKey: "id",
rowParentKey: "parentId",
rowKey: 'id',
rowParentKey: 'parentId',
tip: false,
simplePage: true,
searchShow: true,
searchMenuSpan:12,
searchMenuSpan: 12,
searchIcon: true,
searchIndex: 3,
tree: false,
@ -268,12 +277,12 @@ export default {
delBtn: false,
addBtn: false,
editBtn: false,
editBtnText: "修改",
addBtnIcon: " ",
viewBtnIcon: " ",
delBtnIcon: " ",
editBtnIcon: " ",
viewBtnText: "详情",
editBtnText: '修改',
addBtnIcon: ' ',
viewBtnIcon: ' ',
delBtnIcon: ' ',
editBtnIcon: ' ',
viewBtnText: '详情',
labelWidth: 120,
searchLabelWidth: 120,
menu: true,
@ -288,63 +297,63 @@ export default {
excelBtn: true,
columnSort: true,
showOverflowTooltip: true,
searchLabelPosition: "left",
searchLabelPosition: "left",
searchLabelPosition: 'left',
searchLabelPosition: 'left',
searchGutter: 24,
searchSpan: 6,
menuAlign: "center",
menuAlign: 'center',
gridBtn: false,
searchMenuPosition: "right",
searchMenuPosition: 'right',
column: [
{
label: "任务名称",
prop: "taskName",
label: '任务名称',
prop: 'taskName',
search: true,
sortable: true,
overHidden: true,
align: "left",
headerAlign: "center",
align: 'left',
headerAlign: 'center',
},
{
label: "绩效填报人",
prop: "informantUser",
label: '绩效填报人',
prop: 'informantUser',
search: true,
sortable: true,
overHidden: true,
},
{
label: "状态",
prop: "status",
type: "select",
label: '状态',
prop: 'status',
type: 'select',
search: false,
sortable: true,
overHidden: true,
dicData: [
{ label: "进行中", value: 1 },
{ label: "待汇总", value: 2 },
{ label: "待审批", value: 3 },
{ label: "审批通过", value: 4 },
{ label: "审批不通过", value: 5 },
{ label: "已完成", value: 6 },
{ label: '进行中', value: 1 },
{ label: '待汇总', value: 2 },
{ label: '待审批', value: 3 },
{ label: '审批通过', value: 4 },
{ label: '审批不通过', value: 5 },
{ label: '已完成', value: 6 },
],
},
{
label: "下发人",
prop: "taskUserName",
label: '下发人',
prop: 'taskUserName',
search: false,
sortable: true,
overHidden: true,
},
{
label: "下发时间",
prop: "createName",
label: '下发时间',
prop: 'createName',
search: false,
sortable: true,
overHidden: true,
},
{
label: "填报时间",
prop: "createName",
label: '填报时间',
prop: 'createName',
search: false,
sortable: true,
overHidden: true,
@ -355,44 +364,50 @@ export default {
},
mounted() {},
methods: {
maintenanceContents() {
this.title = '模板内容维护';
this.showContent = true;
},
//
fillRow(row) {
// this.showDialog = true;
this.title = row.parentId ? '任务明细填报' : "任务填报";
this.title = row.parentId ? '任务明细填报' : '任务填报';
this.isDetail = row.parentId ? true : false;
this.showReport = true;
},
closeDialog(val){
console.log('222222222222222222')
this.showReport = false
this.isDetail = false
this.showDetail = false
if(val){
this.onLoad()
closeDialog(val) {
console.log('222222222222222222');
this.showReport = false;
this.isDetail = false;
this.showDetail = false;
this.showContent = false;
if (val) {
this.onLoad();
}
},
closeDetail(val){
this.showDetail = false
closeDetail(val) {
this.showDetail = false;
},
detailRow(row){
console.log('1111111111111111111111')
this.showDetail = true
detailRow(row) {
console.log('1111111111111111111111');
this.showDetail = true;
},
//
collectRow(row) {
this.$confirm("确定汇总当前绩效?", {
confirmButtonText: "确定",
cancelButtonText: "取消",
type: "warning",
}).then((res) => {});
this.$confirm('确定汇总当前绩效?', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning',
}).then(res => {});
},
changeType(val) {
if (val == 1) {
this.tableData = [
{
id: 1,
userCode: "0001",
userName: "张三",
userCode: '0001',
userName: '张三',
KPI: 70,
lh: 26,
orderTime: 10,
@ -415,8 +430,8 @@ export default {
},
{
id: 1,
userCode: "0002",
userName: "李四",
userCode: '0002',
userName: '李四',
KPI: 68,
lh: 26,
orderTime: 10,
@ -439,8 +454,8 @@ export default {
},
{
id: 1,
userCode: "0003",
userName: "王五",
userCode: '0003',
userName: '王五',
KPI: 70,
lh: 26,
orderTime: 10,
@ -463,8 +478,8 @@ export default {
},
{
id: 1,
userCode: "0004",
userName: "刘明",
userCode: '0004',
userName: '刘明',
KPI: 70,
lh: 26,
orderTime: 10,
@ -490,8 +505,8 @@ export default {
this.tableData = [
{
id: 1,
userCode: "0005",
userName: "王红",
userCode: '0005',
userName: '王红',
KPI: 70,
lh: 26,
orderTime: 10,
@ -514,8 +529,8 @@ export default {
},
{
id: 1,
userCode: "0006",
userName: "王明",
userCode: '0006',
userName: '王明',
KPI: 68,
lh: 26,
orderTime: 10,
@ -538,8 +553,8 @@ export default {
},
{
id: 1,
userCode: "0007",
userName: "刘丽",
userCode: '0007',
userName: '刘丽',
KPI: 70,
lh: 26,
orderTime: 10,
@ -562,8 +577,8 @@ export default {
},
{
id: 1,
userCode: "0008",
userName: "张磊",
userCode: '0008',
userName: '张磊',
KPI: 70,
lh: 26,
orderTime: 10,
@ -589,8 +604,8 @@ export default {
this.tableData = [
{
id: 1,
userCode: "0010",
userName: "张三",
userCode: '0010',
userName: '张三',
KPI: 70,
lh: 26,
orderTime: 10,
@ -613,8 +628,8 @@ export default {
},
{
id: 1,
userCode: "0011",
userName: "李四",
userCode: '0011',
userName: '李四',
KPI: 68,
lh: 26,
orderTime: 10,
@ -637,8 +652,8 @@ export default {
},
{
id: 1,
userCode: "0012",
userName: "王五",
userCode: '0012',
userName: '王五',
KPI: 70,
lh: 26,
orderTime: 10,
@ -661,8 +676,8 @@ export default {
},
{
id: 1,
userCode: "0013",
userName: "刘明",
userCode: '0013',
userName: '刘明',
KPI: 70,
lh: 26,
orderTime: 10,
@ -688,8 +703,8 @@ export default {
this.tableData = [
{
id: 1,
userCode: "0014",
userName: "纪明",
userCode: '0014',
userName: '纪明',
KPI: 70,
lh: 26,
orderTime: 20,
@ -712,8 +727,8 @@ export default {
},
{
id: 1,
userCode: "0015",
userName: "齐磊",
userCode: '0015',
userName: '齐磊',
KPI: 68,
lh: 26,
orderTime: 18,
@ -736,8 +751,8 @@ export default {
},
{
id: 1,
userCode: "0016",
userName: "刘丽丽",
userCode: '0016',
userName: '刘丽丽',
KPI: 70,
lh: 26,
orderTime: 19,
@ -760,8 +775,8 @@ export default {
},
{
id: 1,
userCode: "0017",
userName: "王凯",
userCode: '0017',
userName: '王凯',
KPI: 70,
lh: 26,
orderTime: 16,
@ -793,125 +808,125 @@ export default {
this.data = [
{
id: 1,
taskName: "2025年09月绩效",
createName: "2025-10-01",
taskUserName: "张三",
taskName: '2025年09月绩效',
createName: '2025-10-01',
taskUserName: '张三',
status: 1,
children: [
{
parentId: 1,
id: 5,
taskName: "2025年09月绩效-质量 绩效模板",
createName: "2025-10-01",
taskUserName: "李四",
taskName: '2025年09月绩效-质量 绩效模板',
createName: '2025-10-01',
taskUserName: '李四',
status: 1,
},
{
parentId: 1,
id: 6,
taskName: "2025年09月绩效-一线员工 绩效模板",
createName: "2025-10-01",
taskUserName: "王五",
taskName: '2025年09月绩效-一线员工 绩效模板',
createName: '2025-10-01',
taskUserName: '王五',
status: 6,
},
],
},
{
id: 2,
taskName: "2025年08月绩效",
createName: "2025-09-01",
taskUserName: "张三",
taskName: '2025年08月绩效',
createName: '2025-09-01',
taskUserName: '张三',
status: 3,
children: [
{
parentId: 2,
id: 7,
taskName: "2025年08月绩效-质量 绩效模板",
createName: "2025-09-01",
taskUserName: "李四",
taskName: '2025年08月绩效-质量 绩效模板',
createName: '2025-09-01',
taskUserName: '李四',
status: 6,
},
{
parentId: 2,
id: 8,
taskName: "2025年08月绩效-一线员工 绩效模板",
createName: "2025-09-01",
taskUserName: "王五",
taskName: '2025年08月绩效-一线员工 绩效模板',
createName: '2025-09-01',
taskUserName: '王五',
status: 6,
},
],
},
{
id: 3,
taskName: "2025年07月绩效",
createName: "2025-08-01",
taskUserName: "张三",
taskName: '2025年07月绩效',
createName: '2025-08-01',
taskUserName: '张三',
status: 3,
children: [
{
parentId: 3,
id: 9,
taskName: "2025年07月绩效-质量 绩效模板",
createName: "2025-08-01",
taskUserName: "李四",
taskName: '2025年07月绩效-质量 绩效模板',
createName: '2025-08-01',
taskUserName: '李四',
status: 6,
},
{
parentId: 3,
id: 10,
taskName: "2025年07月绩效-一线员工 绩效模板",
createName: "2025-08-01",
taskUserName: "王五",
taskName: '2025年07月绩效-一线员工 绩效模板',
createName: '2025-08-01',
taskUserName: '王五',
status: 6,
},
],
},
{
id: 4,
taskName: "2025年06月绩效",
createName: "2025-07-01",
taskUserName: "张三",
taskName: '2025年06月绩效',
createName: '2025-07-01',
taskUserName: '张三',
status: 4,
children: [
{
parentId: 3,
id: 9,
taskName: "2025年06月绩效-质量 绩效模板",
createName: "2025-07-01",
taskUserName: "李四",
taskName: '2025年06月绩效-质量 绩效模板',
createName: '2025-07-01',
taskUserName: '李四',
status: 6,
},
{
parentId: 3,
id: 10,
taskName: "2025年06月绩效-一线员工 绩效模板",
createName: "2025-07-01",
taskUserName: "王五",
taskName: '2025年06月绩效-一线员工 绩效模板',
createName: '2025-07-01',
taskUserName: '王五',
status: 6,
},
],
},
{
id: 4,
taskName: "2025年06月绩效",
createName: "2025-07-01",
taskUserName: "张三",
taskName: '2025年06月绩效',
createName: '2025-07-01',
taskUserName: '张三',
status: 5,
children: [
{
parentId: 3,
id: 9,
taskName: "2025年06月绩效-质量 绩效模板",
createName: "2025-07-01",
taskUserName: "李四",
taskName: '2025年06月绩效-质量 绩效模板',
createName: '2025-07-01',
taskUserName: '李四',
status: 6,
},
{
parentId: 3,
id: 10,
taskName: "2025年06月绩效-一线员工 绩效模板",
createName: "2025-07-01",
taskUserName: "王五",
taskName: '2025年06月绩效-一线员工 绩效模板',
createName: '2025-07-01',
taskUserName: '王五',
status: 6,
},
],

@ -20,27 +20,47 @@
>
<template #menu-left>
<el-button type="primary" @click="handleAdd">新增绩效</el-button>
<el-button type="primary" @click="maintenanceContents">绩效内容维护</el-button>
<!-- <el-button type="danger" @click="batchDelete">删除</el-button> -->
<!-- <el-button type="primary" @click="maintenanceContents">绩效内容维护</el-button> -->
</template>
<template #menu="scope">
<el-button type="primary" text @click="editRow(scope.row)">修改</el-button>
<el-button type="primary" text @click="deleteRow(scope.row)">删除</el-button>
<el-button type="primary" text>下发</el-button>
<el-button type="primary" text @click="taskAssignment(scope.row)">下发</el-button>
</template>
</avue-crud>
<batchAddPerf v-if="showDialog" :showDialog="showDialog" :title="title"
:checkRow="checkRow"
:moldAddMore="moldAddMore" @closeDialog="closeDialog"></batchAddPerf>
<batchAddContent v-if="showContent" :showContent="showContent" :title="title" @closeDialog="closeDialog"></batchAddContent>
<batchAddPerf
v-if="showDialog"
:showDialog="showDialog"
:title="title"
:checkRow="checkRow"
:moldAddMore="moldAddMore"
@closeDialog="closeDialog"
/>
<!-- <batchAddContent
v-if="showContent"
:showContent="showContent"
:title="title"
@closeDialog="closeDialog"
/> -->
</basic-container>
</template>
<script>
import batchAddPerf from "./components/batchAddPerf.vue"
import batchAddContent from "./components/batchAddContent.vue"
import {pageList,delItem} from "@/api/performanceManagement/templateMaintenance.js"
import batchAddPerf from './components/batchAddPerf.vue';
// import batchAddContent from './components/batchAddContent.vue';
import {
pageBsEfficiencyTemp,
submitBsEfficiencyTemp,
detailBsEfficiencyTemp,
removeBsEfficiencyTemp,
taskAssignmentBsEfficiencyTemp,
} from '@/api/performanceManagement/templateMaintenance.js';
export default {
components: { batchAddPerf,batchAddContent },
components: {
batchAddPerf,
// batchAddContentx
},
data() {
return {
selectionList: [],
@ -48,19 +68,19 @@ export default {
loading: false,
data: [],
form: {},
showDialog:false,
moldAddMore:false,
showContent:false,
title:"",
checkRow:{},
showDialog: false,
moldAddMore: false,
showContent: false,
title: '',
checkRow: {},
page: {
pageSize: 10,
currentPage: 1,
total: 0,
},
option: {
height: "auto",
align: "center",
height: 'auto',
align: 'center',
calcHeight: 32,
tip: false,
simplePage: true,
@ -76,12 +96,12 @@ export default {
delBtn: false,
addBtn: false,
editBtn: false,
editBtnText: "修改",
addBtnIcon: " ",
viewBtnIcon: " ",
delBtnIcon: " ",
editBtnIcon: " ",
viewBtnText: "详情",
editBtnText: '修改',
addBtnIcon: ' ',
viewBtnIcon: ' ',
delBtnIcon: ' ',
editBtnIcon: ' ',
viewBtnText: '详情',
labelWidth: 120,
searchLabelWidth: 120,
menu: true,
@ -96,13 +116,13 @@ export default {
excelBtn: true,
columnSort: true,
showOverflowTooltip: true,
searchLabelPosition: "left",
searchLabelPosition: "left",
searchLabelPosition: 'left',
searchLabelPosition: 'left',
searchGutter: 24,
searchSpan: 6,
menuAlign: "center",
menuAlign: 'center',
gridBtn: false,
searchMenuPosition: "right",
searchMenuPosition: 'right',
column: [
// {
// label: "",
@ -166,16 +186,16 @@ export default {
// // ],
// },
{
label: "绩效任务名称",
prop: "taskName",
label: '绩效任务名称',
prop: 'taskName',
search: false,
sortable: true,
overHidden: true,
rules: [
{
required: true,
message: "请输入模板名称",
trigger: "blur",
message: '请输入绩效任务名称',
trigger: 'blur',
},
],
},
@ -195,30 +215,30 @@ export default {
// ],
// },
{
label: "绩效填报人",
prop: "reportUserName",
type: "select",
label: '绩效填报人',
prop: 'reportUserName',
type: 'select',
search: false,
sortable: true,
overHidden: true,
rules: [
{
required: true,
message: "请输入绩效填报人",
trigger: "blur",
message: '请输入绩效填报人',
trigger: 'blur',
},
],
},
{
label: "维护人",
prop: "createUser",
label: '维护人',
prop: 'createUser',
search: false,
sortable: true,
overHidden: true,
},
{
label: "维护时间",
prop: "updateTime",
label: '维护时间',
prop: 'createTime',
search: false,
sortable: true,
overHidden: true,
@ -229,45 +249,104 @@ export default {
},
mounted() {},
methods: {
closeDialog(val){
closeDialog(val) {
this.showDialog = false
this.moldAddMore = false
this.showContent = false
if(val){
this.onLoad()
// this.showContent = false
if (val) {
this.onLoad();
}
},
handleAdd(){
this.title = "新增"
this.moldAddMore = true
this.showDialog = true
handleAdd() {
this.title = '新增';
this.moldAddMore = true;
this.showDialog = true;
},
editRow(row){
this.title = "修改"
this.checkRow = row
this.moldAddMore = false
this.showDialog = true
editRow(row) {
this.title = '修改';
row.reportUser = row.reportUser + '';
this.checkRow = { ...row };
this.moldAddMore = false;
this.showDialog = true;
},
deleteRow(row){
//
batchDelete() {
if (this.selectionList.length == 0) {
this.$message.error('请至少选择一条数据');
return;
}
const count = this.selectionList.length;
this.$confirm(`确定要删除选中的 ${count} 条绩效模板吗?此操作不可恢复!`, '删除确认', {
confirmButtonText: '确定删除',
cancelButtonText: '取消',
type: 'warning',
confirmButtonClass: 'el-button--danger',
})
.then(() => {
removeBsEfficiencyTemp({
ids: this.selectionList.map(item => item.id).join(','),
}).then(res => {
if (res.data.code == 200) {
this.$message.success('删除成功');
this.selectionList = [];
this.onLoad();
}
});
})
.catch(() => {
//
});
},
deleteRow(row) {
this.$confirm('确定将选择数据删除?', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning',
}).then(() => {
delItem({
ids:row.id
}).then((res) => {
if(res.data.code == 200){
this.$message.success('删除成功')
this.onLoad()
}
})
})
.then(() => {
//
removeBsEfficiencyTemp({
ids: String(row.id),
})
.then(res => {
if (res.data.code == 200) {
this.$message.success('删除成功');
this.onLoad();
}
})
.catch(() => {
this.$message.error('删除失败,请重试');
});
})
.catch(() => {});
},
maintenanceContents(){
this.title = "模板内容维护"
this.showContent = true
taskAssignment(row) {
this.$confirm('确定将选择数据下发?', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning',
})
.then(() => {
//
taskAssignmentBsEfficiencyTemp({
id: row.id,
})
.then(res => {
if (res.data.code == 200) {
this.$message.success(res.data.msg);
this.onLoad();
}
})
.catch(() => {
this.$message.error('下发失败,请重试');
});
})
.catch(() => {});
},
// maintenanceContents() {
// this.title = '';
// this.showContent = true;
// },
currentChange(currentPage) {
this.page.currentPage = currentPage;
},
@ -279,7 +358,7 @@ export default {
},
searchReset() {
this.query = {};
this.treeDeptId = "";
this.treeDeptId = '';
this.onLoad(this.page);
},
searchChange(params, done) {
@ -296,52 +375,17 @@ export default {
this.$refs.crud.toggleSelection();
},
onLoad() {
this.loading = true
pageList({
current:this.page.currentPage,
size:this.page.pageSize,
this.loading = true;
pageBsEfficiencyTemp({
current: this.page.currentPage,
size: this.page.pageSize,
...this.query,
}).then((res) => {
this.data = res.data.data.records
this.page.total = res.data.data.total
this.loading = false
})
// this.data = [
// {
// templateType: 2,
// applicationDept: 1,
// templateName: " KPI",
// templateContent: "KPIKPI*70%",
// informant: 1,
// },
// {
// templateType: 2,
// applicationDept: 1,
// templateName: " ",
// templateContent: "*30%",
// informant: 1,
// },
// {
// templateType: 2,
// applicationDept: 4,
// templateName: "线 ",
// templateContent:
// "DPPM",
// informant: 1,
// },
// {
// templateType: 1,
// templateName: " ",
// templateContent:
// "稿",
// informant: 2,
// },
// ];
// this.page.total = this.data.length;
}).then(res => {
this.data = res.data.data.records;
this.page.total = res.data.data.total;
this.loading = false;
});
},
},
};
</script>
<style></style>
</script>
Loading…
Cancel
Save