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