From 14d29f928b24d203e76f1dcefc1a51182657cd45 Mon Sep 17 00:00:00 2001
From: spring <2396852758@qq.com>
Date: 星期一, 10 三月 2025 16:29:09 +0800
Subject: [PATCH] Merge branch 'dev' of http://114.132.189.42:9002/r/center-lims-before-ruoyi into dev
---
src/views/CNAS/personnel/personnelInfo/Department/components/rewardPunishmentRecord/index.vue | 316 ++++++++++++++++++++++++++++++++++++++++++++++++++++
1 files changed, 316 insertions(+), 0 deletions(-)
diff --git a/src/views/CNAS/personnel/personnelInfo/Department/components/rewardPunishmentRecord/index.vue b/src/views/CNAS/personnel/personnelInfo/Department/components/rewardPunishmentRecord/index.vue
new file mode 100644
index 0000000..a9e1122
--- /dev/null
+++ b/src/views/CNAS/personnel/personnelInfo/Department/components/rewardPunishmentRecord/index.vue
@@ -0,0 +1,316 @@
+<!-- 濂栨儵璁板綍 -->
+<template>
+ <div>
+ <div style="text-align: left; margin-bottom: 15px;">
+ <label>濮撳悕</label>
+ <el-input v-model="search.userName" clearable placeholder="璇疯緭鍏ュ叧閿瓧" size="small" style="width: 20vh;"></el-input>
+ <label style="margin-left: 1em">濂栨儵鏃ユ湡</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: 20%" type="daterange" unlink-panels value-format="yyyy-MM-dd 00:00:00">
+ </el-date-picker>
+ <el-button size="small" type="primary" @click="getPersonnelTraining(departId)">鏌ヨ</el-button>
+ <div style="float: right;">
+ <el-button :loading="outLoading" size="small" type="primary" @click="handleDown">瀵煎嚭</el-button>
+ <el-button size="small" type="primary" @click="dialogVisible = true">鏂板</el-button>
+ </div>
+ </div>
+ <div class="table">
+ <el-table :data="tableData" height="70vh" 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">
+ <template v-slot="scope">
+ <el-button size="small" type="text" @click="editForm(scope.row)">缂栬緫</el-button>
+ <el-button size="small" type="text" @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" @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="userName">
+ <el-select v-model="form.userName" placeholder="璇烽�夋嫨" size="small" style="width: 100%" value-key="id"
+ @change="selectUserChange">
+ <el-option v-for="item in responsibleOptions" :key="item.id" :label="item.name" :value="item">
+ </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 {
+ deleteRewardPunishment,
+ addOrUpdateRewardPunishment,
+ rewardPunishmentPage
+} from '@/api/cnas/personnel/personnelInfo.js'
+export default {
+ props: {
+ departId: {
+ type: Number,
+ default: () => {
+ return null;
+ }
+ },
+ isDepartment: {
+ type: Boolean,
+ default: false
+ }
+ },
+ data() {
+ return {
+ tableData: [],
+ 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: {
+ userName: [{
+ 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 { code, data } = await rewardPunishmentPage({
+ 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],
+ })
+ if (code == 200) {
+ this.tableData = data.records
+ this.search.total = data.total
+ }
+ },
+ handleDown() {
+ this.outLoading = true
+ this.$axios.post(this.$api.deviceCheck.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]
+ }, { responseType: 'blob' }).then(res => {
+ this.outLoading = false
+ const blob = new Blob([res], {
+ type: 'application/force-download'
+ })
+ //灏咮lob 瀵硅薄杞崲鎴愬瓧绗︿覆
+ 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 elink = document.createElement('a')
+ elink.download = decodeURI('濂栨儵璁板綍' + '.xlsx')
+ elink.style.display = 'none'
+ elink.href = URL.createObjectURL(blob)
+ document.body.appendChild(elink)
+ elink.click();
+ URL.revokeObjectURL(elink.href) // 閲婃斁URL 瀵硅薄
+ document.body.removeChild(elink)
+ this.$message.success('瀵煎嚭鎴愬姛')
+ }
+ } catch (err) {
+ console.log(err);
+ // 鍒涘缓涓�涓秴閾炬帴锛屽皢鏂囦欢娴佽祴杩涘幓锛岀劧鍚庡疄鐜拌繖涓秴閾炬帴鐨勫崟鍑讳簨浠�
+ const elink = document.createElement('a')
+ elink.download = decodeURI('濂栨儵璁板綍' + '.xlsx')
+ elink.style.display = 'none'
+ elink.href = URL.createObjectURL(blob)
+ document.body.appendChild(elink)
+ elink.click();
+ URL.revokeObjectURL(elink.href) // 閲婃斁URL 瀵硅薄
+ document.body.removeChild(elink)
+ this.$message.success('瀵煎嚭鎴愬姛')
+ }
+ }
+ })
+ },
+ // 鑾峰彇璐熻矗浜轰俊鎭帴鍙�
+ getUserList() {
+ this.$axios.get(this.$api.deviceScope.selectUserList).then(res => {
+ if (res.code == 200) {
+ this.responsibleOptions = res.data
+ }
+ })
+ },
+ selectUserChange(val) {
+ this.form.userName = val.name
+ this.form.account = val.account
+ this.form.userId = val.id
+ },
+ editForm(row) {
+ this.dialogVisible = true
+ this.form = { ...row };
+ },
+ saveOrUpdate() {
+ this.$refs.form.validate(async (valid) => {
+ if (valid) {
+ this.dialogVisible = false
+ const { code, data } = await addOrUpdateRewardPunishment(this.form)
+ if (code == 200) {
+ this.$message.success("鎿嶄綔鎴愬姛锛�")
+ this.getPersonnelTraining(this.departId);
+ }
+ }
+ })
+ },
+ async deleteRow(row) {
+ const { code, data } = await deleteRewardPunishment({
+ id: row.id
+ })
+ if (code == 200) {
+ this.$message.success("鎿嶄綔鎴愬姛锛�")
+ this.getPersonnelTraining(this.departId);
+ }
+ }
+ },
+ watch: {
+ // 鐩戝惉鐐瑰嚮el-tree鐨勬暟鎹紝杩涜鏁版嵁鍒锋柊
+ departId: {
+ handler(newId, oldId) {
+ this.getPersonnelTraining(newId);
+ }
+ },
+ dialogVisible(newVal) {
+ if (newVal === false) {
+ this.form = {}
+ this.$refs['form'].clearValidate()
+ }
+ }
+ }
+};
+</script>
--
Gitblit v1.9.3