From dc3af0cbb4a6d105bdff497b510cc0a87b3e8d0a Mon Sep 17 00:00:00 2001 From: spring <2396852758@qq.com> Date: 星期五, 28 二月 2025 17:53:44 +0800 Subject: [PATCH] Merge branch 'dev' of http://114.132.189.42:9002/r/lims-ruoyi-before into dev --- src/views/CNAS/personnel/personnelInfo/tabs/reward-punishment-record.vue | 344 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 files changed, 344 insertions(+), 0 deletions(-) diff --git a/src/views/CNAS/personnel/personnelInfo/tabs/reward-punishment-record.vue b/src/views/CNAS/personnel/personnelInfo/tabs/reward-punishment-record.vue new file mode 100644 index 0000000..40b2f82 --- /dev/null +++ b/src/views/CNAS/personnel/personnelInfo/tabs/reward-punishment-record.vue @@ -0,0 +1,344 @@ +<!-- 濂栨儵璁板綍 --> +<template> + <div> + <div class="view"> + <div style="display: flex;justify-content: space-between;"> + <el-form :model="search" ref="page" size="small" :inline="true"> + <el-form-item label="濮撳悕"> + <el-input v-model="search.userName" clearable placeholder="璇疯緭鍏ュ叧閿瓧" size="small" style="width: 20vh;"></el-input> + </el-form-item> + <el-form-item label="濂栨儵鏃ユ湡"> + <el-date-picker + v-model="search.searchTimeList" + :picker-options="pickerOptions" + align="right" + clearable + end-placeholder="缁撴潫鏃ユ湡" + format="yyyy-MM-dd" + range-separator="鑷�" + size="small" + start-placeholder="寮�濮嬫棩鏈�" + style="width: 100%" + type="daterange" + unlink-panels + value-format="yyyy-MM-dd 00:00:00"> + </el-date-picker> + </el-form-item> + <el-form-item> + <el-button size="small" type="primary" @click="getPersonnelTraining(departId)">鏌ヨ</el-button> + </el-form-item> + </el-form> + <div> + <el-button :loading="outLoading" size="small" type="primary" @click="handleDown">瀵煎嚭</el-button> + <el-button size="small" type="primary" @click="addRow">鏂板</el-button> + </div> + </div> + </div> + <div class="table"> + <el-table :data="tableData" v-loading="tableLoading" height="66.5vh" style="width: 100%"> + <el-table-column label="搴忓彿" type="index" width="120"> + <template v-slot="scope"> + <span>{{ (search.current - 1) * search.size + scope.$index + 1 }}</span> + </template> + </el-table-column> + <el-table-column label="鍛樺伐缂栧彿" min-width="180" prop="account"> + </el-table-column> + <el-table-column label="濮撳悕" min-width="180" prop="userName"> + </el-table-column> + <el-table-column label="濂栨儵绾у埆" min-width="180" prop="rewardPunishLevel"> + </el-table-column> + <el-table-column label="濂栨儵鏃堕棿" min-width="180" prop="rewardPunishTime"> + </el-table-column> + <el-table-column label="濂栨儵鍚嶇О" min-width="180" prop="rewardPunishName"> + </el-table-column> + <el-table-column label="濂栨儵鍏蜂綋鍐呭" min-width="120" prop="rewardPunishContent"> + </el-table-column> + <el-table-column label="濂栨儵鍗曚綅" min-width="180" prop="rewardPunishWorkUnit"> + </el-table-column> + <el-table-column label="鍒涘缓浜�" min-width="180" prop="createUserName"> + </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="getUserList"> + <div style="height: 40vh"> + <el-form ref="form" :model="form" :rules="rules" label-width="120px"> + <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 v-model="form.userId" placeholder="璇烽�夋嫨" size="small" style="width: 100%" value-key="id" + @change="selectUserChange" :disabled="!isDepartment"> + <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="濂栨儵绾у埆" prop="rewardPunishLevel"> + <el-input v-model="form.rewardPunishLevel" size="small"></el-input> + </el-form-item> + </el-col> + <el-col :span="12"> + <el-form-item label="濂栨儵鍚嶇О" prop="rewardPunishName"> + <el-input v-model="form.rewardPunishName" size="small"></el-input> + </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-col :span="12"> + <el-form-item label="濂栨儵鍗曚綅" prop="rewardPunishWorkUnit"> + <el-input v-model="form.rewardPunishWorkUnit" size="small"></el-input> + </el-form-item> + </el-col> + <el-col :span="24"> + <el-form-item label="濂栨儵鍐呭"> + <el-input v-model="form.rewardPunishContent" :rows="2" size="small" type="textarea"></el-input> + </el-form-item> + </el-col> + </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 {selectUserCondition} from "@/api/system/user"; +import {delCustomById} from "@/api/system/customer"; + +export default { + props: { + departId: { + type: Number, + default: () => { + return null; + } + }, + isDepartment: { + type: Boolean, + default: false + } + }, + data() { + return { + tableData: [], + tableLoading: false, + search: { + size: 20, + current: 1, + total: 0, + userName: '', + searchTimeList: [] + }, + form: {}, + 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' + }], + rewardPunishLevel: [{ + required: true, message: '璇疯緭鍏ュ鎯╃骇鍒�', trigger: 'blur' + }], + rewardPunishName: [{ + required: true, message: '璇疯緭鍏ュ鎯╁悕绉�', trigger: 'blur' + }], + rewardPunishTime: [{ + required: true, message: '璇疯緭鍏ュ鎯╂椂闂�', trigger: 'blur' + }], + rewardPunishWorkUnit: [{ + required: true, message: '璇疯緭鍏ュ鎯╁崟浣�', trigger: 'blur' + }] + }, + responsibleOptions: [] + }; + }, + mounted() { + this.getPersonnelTraining(this.departId); + }, + methods: { + handleSizeChange(val) { + this.search.size = val + this.getPersonnelTraining(this.departId); + }, + handleCurrentChange(val) { + this.search.current = val + this.getPersonnelTraining(this.departId); + }, + async getPersonnelTraining() { + const params = { + userId: this.isDepartment ? '' : this.departId, + departmentId: this.isDepartment ? this.departId : '', + 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 + if (!this.isDepartment) { + this.form.userId = this.departId + this.selectUserChange(this.form.userId) + } + }, + handleDown(){ + this.outLoading = true + rewardPunishmentExport({ + userId: this.isDepartment ? '' : this.departId, + departmentId: this.isDepartment ? this.departId : '', + userName: this.search.userName, + startTime: this.search.searchTimeList && this.search.searchTimeList[0], + endTime: this.search.searchTimeList && this.search.searchTimeList[1] + }).then(res => { + this.outLoading = false + const blob = new Blob([res], { + type: 'application/force-download' + }) + this.$download.saveAs(blob, '濂栨儵璁板綍.xlsx') + this.$message.success('瀵煎嚭鎴愬姛') + }) + }, + // 鑾峰彇璐熻矗浜轰俊鎭帴鍙� + getUserList() { + selectUserCondition().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(this.departId); + }) + } + }) + }, + 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(this.departId); + }).catch(e => { + this.$message.error('鍒犻櫎澶辫触') + }) + }).catch(() => {}) + + } + }, + watch: { + // 鐩戝惉鐐瑰嚮el-tree鐨勬暟鎹紝杩涜鏁版嵁鍒锋柊 + departId: { + handler(newId, oldId) { + this.getPersonnelTraining(newId); + } + }, + dialogVisible(newVal) { + if (newVal === false) { + this.form = {} + this.$refs['form'].resetFields() + } + } + } +}; +</script> -- Gitblit v1.9.3