<!-- 奖惩记录 -->
|
<template>
|
<div class="app-container">
|
<div style="display: flex; justify-content: space-between">
|
<div style="display: flex">
|
<div
|
style="
|
margin-bottom: 18px;
|
margin-right: 10px;
|
display: flex;
|
align-items: center;
|
line-height: 32px;
|
"
|
>
|
<span
|
style="
|
width: 48px;
|
font-size: 14px;
|
font-weight: 700;
|
color: #606266;
|
"
|
>姓名</span
|
>
|
<el-input
|
size="small"
|
placeholder="请输入"
|
clearable
|
v-model="search.userName"
|
@keyup.enter.native="getPersonnelTraining()"
|
></el-input>
|
</div>
|
<div
|
style="
|
margin-bottom: 18px;
|
margin-right: 10px;
|
display: flex;
|
align-items: center;
|
line-height: 32px;
|
"
|
>
|
<span
|
style="
|
width: 88px;
|
font-size: 14px;
|
font-weight: 700;
|
color: #606266;
|
"
|
>奖惩日期</span
|
>
|
<el-date-picker
|
v-model="search.searchTimeList"
|
:picker-options="pickerOptions"
|
align="right"
|
clearable
|
@change="getPersonnelTraining()"
|
end-placeholder="结束日期"
|
format="yyyy-MM-dd HH:mm:ss"
|
range-separator="至"
|
size="small"
|
start-placeholder="开始日期"
|
style="width: 100%"
|
type="daterange"
|
unlink-panels
|
:default-time="['00:00:00', '23:59:59']"
|
value-format="yyyy-MM-dd HH:mm:ss"
|
>
|
</el-date-picker>
|
</div>
|
<div style="line-height: 30px">
|
<el-button size="mini" type="primary" @click="getPersonnelTraining()"
|
>查询</el-button
|
>
|
<el-button size="mini" @click="refreshTable()">重置</el-button>
|
<el-button size="small" type="primary" @click="addRow"
|
>新增</el-button
|
>
|
<el-button
|
:loading="outLoading"
|
size="small"
|
type="success"
|
@click="handleDown"
|
>导出</el-button
|
>
|
</div>
|
</div>
|
</div>
|
<div class="table">
|
<el-table
|
:data="tableData"
|
v-loading="tableLoading"
|
:header-cell-style="{
|
background: '#f8f8f9',
|
color: '#515a6e',
|
textAlign: 'center',
|
}"
|
:cell-style="{ textAlign: 'center' }"
|
border
|
:height="'calc( 100vh - 240px)'"
|
style="width: 100%"
|
>
|
<el-table-column label="序号" type="index" width="80"></el-table-column>
|
<el-table-column
|
label="员工编号"
|
min-width="120"
|
width="120"
|
prop="account"
|
></el-table-column>
|
<el-table-column
|
label="员工姓名"
|
min-width="180"
|
width="120"
|
prop="userName"
|
></el-table-column>
|
<el-table-column
|
label="奖惩名称"
|
min-width="140"
|
width="140"
|
prop="rewardPunishName"
|
></el-table-column>
|
<el-table-column
|
label="奖惩时间"
|
min-width="160"
|
width="160"
|
prop="rewardPunishTime"
|
></el-table-column>
|
<el-table-column
|
label="奖惩计分"
|
min-width="120"
|
width="120"
|
prop="rewardPunishScore"
|
></el-table-column>
|
<el-table-column
|
label="奖惩金额"
|
min-width="120"
|
width="120"
|
prop="rewardPunishSum"
|
></el-table-column>
|
<el-table-column
|
label="奖惩内容"
|
min-width="160"
|
prop="rewardPunishContent"
|
show-overflow-tooltip
|
></el-table-column>
|
<el-table-column
|
label="创建人"
|
min-width="120"
|
width="120"
|
prop="createUserName"
|
></el-table-column>
|
<el-table-column
|
label="创建时间"
|
min-width="160"
|
width="160"
|
prop="createTime"
|
></el-table-column>
|
<el-table-column
|
label="更新人"
|
min-width="120"
|
width="120"
|
prop="updateUserName"
|
></el-table-column>
|
<el-table-column
|
label="更新时间"
|
min-width="160"
|
width="160"
|
prop="updateTime"
|
></el-table-column>
|
<el-table-column fixed="right" label="操作" width="100" align="center">
|
<template v-slot="scope">
|
<el-button size="small" type="text" @click="editForm(scope.row)"
|
>编辑</el-button
|
>
|
<el-button
|
size="small"
|
type="text"
|
style="color: #f56c6c"
|
@click="deleteRow(scope.row)"
|
>删除</el-button
|
>
|
</template>
|
</el-table-column>
|
</el-table>
|
<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"
|
background
|
style="margin-top: 10px"
|
@size-change="handleSizeChange"
|
@current-change="handleCurrentChange"
|
>
|
</el-pagination>
|
</div>
|
<el-dialog
|
:visible.sync="dialogVisible"
|
title="奖惩记录"
|
width="50%"
|
@open="
|
() => {
|
this.getUserList();
|
this.getRewardPunishNameList();
|
}
|
"
|
>
|
<div style="height: 40vh">
|
<el-form ref="form" :model="form" :rules="rules" label-width="120px">
|
<el-row>
|
<el-col :span="12">
|
<el-form-item label="员工编号">
|
<el-input
|
v-model="form.account"
|
disabled
|
size="small"
|
></el-input>
|
</el-form-item>
|
</el-col>
|
<el-col :span="12">
|
<el-form-item label="员工姓名" prop="userId">
|
<el-select
|
:disabled="form.id && form.id+''!==''"
|
v-model="form.userId"
|
placeholder="请选择员工姓名"
|
size="small"
|
style="width: 100%"
|
@change="selectUserChange"
|
>
|
<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-row>
|
<el-row>
|
<el-col :span="12">
|
<el-form-item label="奖惩名称" prop="rewardPunishName">
|
<el-select
|
size="small"
|
placeholder="请输入奖惩名称"
|
v-model="form.rewardPunishName"
|
style="width: 100%"
|
>
|
<el-option
|
:key="index"
|
v-for="(item, index) in rewardPunishNameList"
|
:label="item.dictLabel"
|
:value="item.dictValue"
|
/>
|
</el-select>
|
</el-form-item>
|
</el-col>
|
<el-col :span="12">
|
<el-form-item label="奖惩时间" prop="rewardPunishTime">
|
<el-date-picker
|
v-model="form.rewardPunishTime"
|
format="yyyy-MM-dd HH:mm:ss"
|
placeholder="选择日期"
|
size="small"
|
style="width: 100%"
|
type="datetime"
|
value-format="yyyy-MM-dd HH:mm:ss"
|
>
|
</el-date-picker>
|
</el-form-item>
|
</el-col>
|
</el-row>
|
<el-row>
|
<el-col :span="12">
|
<el-form-item label="奖惩计分" prop="rewardPunishScore">
|
<el-input-number
|
controls-position="right"
|
:precision="1"
|
style="width: 100%"
|
v-model="form.rewardPunishScore"
|
size="small"
|
placeholder="请输入奖惩计分"
|
></el-input-number>
|
</el-form-item>
|
</el-col>
|
<el-col :span="12">
|
<el-form-item label="奖惩金额" prop="rewardPunishSum">
|
<el-input-number
|
controls-position="right"
|
:precision="2"
|
style="width: 100%"
|
v-model="form.rewardPunishSum"
|
size="small"
|
placeholder="请输入奖惩金额"
|
></el-input-number>
|
</el-form-item>
|
</el-col>
|
</el-row>
|
<el-row>
|
<el-col :span="24">
|
<el-form-item label="奖惩内容">
|
<el-input
|
v-model="form.rewardPunishContent"
|
:rows="2"
|
size="small"
|
type="textarea"
|
placeholder="请输入奖惩内容"
|
></el-input>
|
</el-form-item>
|
</el-col>
|
</el-row>
|
</el-form>
|
</div>
|
<span slot="footer" class="dialog-footer">
|
<el-button @click="dialogVisible = false">取 消</el-button>
|
<el-button type="primary" @click="saveOrUpdate">确 定</el-button>
|
</span>
|
</el-dialog>
|
</div>
|
</template>
|
|
<script>
|
import {
|
addOrUpdateRewardPunishment,
|
deleteRewardPunishment,
|
rewardPunishmentExport,
|
rewardPunishmentPage,
|
} from "@/api/cnas/personal/personRewardPunishmentRecord";
|
import { selectUserListByPerformance } from "@/api/system/user";
|
import { transformExcel } from "@/utils/file";
|
import { getDicts } from "@/api/system/dict/data";
|
|
export default {
|
data() {
|
return {
|
tableData: [],
|
tableLoading: false,
|
search: {
|
size: 20,
|
current: 1,
|
total: 0,
|
userName: "",
|
searchTimeList: [],
|
},
|
form: {
|
account: "",
|
userId: null,
|
rewardPunishScore: null,
|
rewardPunishName: "",
|
rewardPunishTime: null,
|
rewardPunishSum: null,
|
rewardPunishContent: "",
|
},
|
dialogVisible: false,
|
outLoading: false,
|
pickerOptions: {
|
shortcuts: [
|
{
|
text: "最近一周",
|
onClick(picker) {
|
const end = new Date();
|
const start = new Date();
|
start.setTime(start.getTime() - 3600 * 1000 * 24 * 7);
|
picker.$emit("pick", [start, end]);
|
},
|
},
|
{
|
text: "最近一个月",
|
onClick(picker) {
|
const end = new Date();
|
const start = new Date();
|
start.setTime(start.getTime() - 3600 * 1000 * 24 * 30);
|
picker.$emit("pick", [start, end]);
|
},
|
},
|
{
|
text: "最近三个月",
|
onClick(picker) {
|
const end = new Date();
|
const start = new Date();
|
start.setTime(start.getTime() - 3600 * 1000 * 24 * 90);
|
picker.$emit("pick", [start, end]);
|
},
|
},
|
],
|
},
|
rules: {
|
userId: [
|
{
|
required: true,
|
message: "请选择员工",
|
trigger: "change",
|
},
|
],
|
rewardPunishScore: [
|
{
|
required: true,
|
message: "请输入奖惩计分",
|
trigger: "blur",
|
},
|
],
|
rewardPunishName: [
|
{
|
required: true,
|
message: "请输入奖惩名称",
|
trigger: "change",
|
},
|
],
|
rewardPunishTime: [
|
{
|
required: true,
|
message: "请输入奖惩时间",
|
trigger: "blur",
|
},
|
],
|
rewardPunishSum: [
|
{
|
required: true,
|
message: "请输入奖惩金额",
|
trigger: "blur",
|
},
|
],
|
},
|
responsibleOptions: [],
|
rewardPunishNameList: [],
|
};
|
},
|
mounted() {
|
this.getPersonnelTraining();
|
this.getUserList();
|
this.getRewardPunishNameList();
|
},
|
methods: {
|
getRewardPunishNameList() {
|
this.rewardPunishNameList = [];
|
getDicts("sys_rewardandpunishment_type").then((res) => {
|
this.rewardPunishNameList = res.data;
|
});
|
},
|
refreshTable() {
|
this.search.userName = "";
|
this.search.searchTimeList = [];
|
this.$nextTick(() => {
|
this.getPersonnelTraining();
|
});
|
},
|
handleSizeChange(val) {
|
this.search.size = val;
|
this.getPersonnelTraining();
|
},
|
handleCurrentChange(val) {
|
this.search.current = val;
|
this.getPersonnelTraining();
|
},
|
async getPersonnelTraining() {
|
const params = {
|
userId: "",
|
departmentId: "",
|
current: this.search.curent,
|
size: this.search.size,
|
userName: this.search.userName,
|
startTime: this.search.searchTimeList && this.search.searchTimeList[0],
|
endTime: this.search.searchTimeList && this.search.searchTimeList[1],
|
};
|
this.tableLoading = true;
|
rewardPunishmentPage(params)
|
.then((res) => {
|
this.tableLoading = false;
|
this.tableData = res.data.records;
|
this.search.total = res.data.total;
|
})
|
.catch((err) => {
|
this.tableLoading = false;
|
});
|
},
|
addRow() {
|
this.dialogVisible = true;
|
},
|
handleDown() {
|
this.outLoading = true;
|
let params = {
|
userName: this.search.userName,
|
};
|
if (this.search.searchTimeList && this.search.searchTimeList.length > 0) {
|
params.startTime = this.search.searchTimeList[0];
|
params.endTime = this.search.searchTimeList[1];
|
}
|
rewardPunishmentExport(params).then((res) => {
|
transformExcel(res, "中天耐丝质量部奖惩记录.xlsx");
|
this.$message.success("导出成功");
|
this.$nextTick(() => {
|
this.outLoading = false;
|
});
|
});
|
},
|
// 获取负责人信息接口
|
getUserList() {
|
this.responsibleOptions = [];
|
selectUserListByPerformance({ isTestUser: true }).then((res) => {
|
if (res.code == 200) {
|
this.responsibleOptions = res.data;
|
}
|
});
|
},
|
selectUserChange(val) {
|
const index = this.responsibleOptions.findIndex(
|
(item) => item.id === val
|
);
|
if (index > -1) {
|
this.form.userName = this.responsibleOptions[index].name;
|
this.form.account = this.responsibleOptions[index].account;
|
}
|
},
|
// 打开表单弹框
|
editForm(row) {
|
this.dialogVisible = true;
|
this.form = { ...row };
|
},
|
// 提交表单数据
|
saveOrUpdate() {
|
this.$refs.form.validate(async (valid) => {
|
if (valid) {
|
addOrUpdateRewardPunishment(this.form).then((res) => {
|
this.dialogVisible = false;
|
this.$message.success("操作成功");
|
this.getPersonnelTraining();
|
});
|
}
|
});
|
},
|
deleteRow(row) {
|
this.$confirm("是否删除当前数据?", "警告", {
|
confirmButtonText: "确定",
|
cancelButtonText: "取消",
|
type: "warning",
|
})
|
.then(() => {
|
deleteRewardPunishment({ id: row.id })
|
.then((res) => {
|
if (res.code === 500) {
|
return;
|
}
|
this.$message.success("删除成功");
|
this.getPersonnelTraining();
|
})
|
.catch((e) => {
|
this.$message.error("删除失败");
|
});
|
})
|
.catch(() => {});
|
},
|
},
|
watch: {
|
dialogVisible(newVal) {
|
if (newVal === false) {
|
this.form = {};
|
this.$refs.form.resetFields();
|
}
|
},
|
},
|
};
|
</script>
|
<style scoped>
|
.dateTime >>> .el-form-item__content {
|
width: 260px;
|
}
|
</style>
|