From fe67cd0c17d827b6a858ceff2eedf8b48e2f5f2a Mon Sep 17 00:00:00 2001
From: gaoluyang <2820782392@qq.com>
Date: 星期五, 28 二月 2025 13:51:52 +0800
Subject: [PATCH] 人员-奖惩记录搬迁

---
 src/views/CNAS/personnel/personnelInfo/index.vue                         |    8 +-
 src/views/CNAS/personnel/personnelInfo/tabs/reward-punishment-record.vue |  193 ++++++++++++++++++++++--------------------------
 src/api/cnas/personal/personRewardPunishmentRecord.js                    |   35 ++++++++
 3 files changed, 128 insertions(+), 108 deletions(-)

diff --git a/src/api/cnas/personal/personRewardPunishmentRecord.js b/src/api/cnas/personal/personRewardPunishmentRecord.js
new file mode 100644
index 0000000..c160073
--- /dev/null
+++ b/src/api/cnas/personal/personRewardPunishmentRecord.js
@@ -0,0 +1,35 @@
+import request from "@/utils/request";
+
+// 浜哄憳 - 濂栨儵璁板綍 鍒嗛〉鏌ヨ
+export function rewardPunishmentPage(query) {
+  return request({
+    url: "/personRewardPunishmentRecord/rewardPunishmentPage",
+    method: "get",
+    params: query
+  });
+}
+// 浜哄憳 - 濂栨儵璁板綍 瀵煎嚭
+export function rewardPunishmentExport(query) {
+  return request({
+    url: "/personRewardPunishmentRecord/rewardPunishmentExport",
+    method: "get",
+    params: query,
+    responseType: 'blob'
+  });
+}
+// 浜哄憳 - 濂栨儵璁板綍 鏂板/鏇存柊
+export function addOrUpdateRewardPunishment(query) {
+  return request({
+    url: "/personRewardPunishmentRecord/addOrUpdateRewardPunishment",
+    method: "post",
+    data: query,
+  });
+}
+// 浜哄憳 - 濂栨儵璁板綍 鏂板/鏇存柊
+export function deleteRewardPunishment(query) {
+  return request({
+    url: "/personRewardPunishmentRecord/deleteRewardPunishment",
+    method: "delete",
+    params: query,
+  });
+}
diff --git a/src/views/CNAS/personnel/personnelInfo/index.vue b/src/views/CNAS/personnel/personnelInfo/index.vue
index 216f325..f931306 100644
--- a/src/views/CNAS/personnel/personnelInfo/index.vue
+++ b/src/views/CNAS/personnel/personnelInfo/index.vue
@@ -66,10 +66,10 @@
                                 :departId="departId"
                                 :isDepartment="isDepartment"></job-responsibilities>
         </el-tab-pane>
-<!--        <el-tab-pane label="濂栨儵璁板綍" name="濂栨儵璁板綍">-->
-<!--          <rewardPunishmentRecord v-if="activeName === '濂栨儵璁板綍'"-->
-<!--                                  :departId="departId" :isDepartment="isDepartment"></rewardPunishmentRecord>-->
-<!--        </el-tab-pane>-->
+        <el-tab-pane label="濂栨儵璁板綍" name="濂栨儵璁板綍">
+          <rewardPunishmentRecord v-if="activeName === '濂栨儵璁板綍'"
+                                  :departId="departId" :isDepartment="isDepartment"></rewardPunishmentRecord>
+        </el-tab-pane>
 <!--        <el-tab-pane label="鍩硅璁板綍" name="鍩硅璁板綍">-->
 <!--          <training-record v-if="activeName === '鍩硅璁板綍'" ref="trainingRecord"-->
 <!--                           :departId="departId"-->
diff --git a/src/views/CNAS/personnel/personnelInfo/tabs/reward-punishment-record.vue b/src/views/CNAS/personnel/personnelInfo/tabs/reward-punishment-record.vue
index 344051f..bf5c9e4 100644
--- a/src/views/CNAS/personnel/personnelInfo/tabs/reward-punishment-record.vue
+++ b/src/views/CNAS/personnel/personnelInfo/tabs/reward-punishment-record.vue
@@ -1,33 +1,41 @@
 <!-- 濂栨儵璁板綍 -->
 <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="addRow">鏂板</el-button>
+    <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" height="70vh" style="width: 100%">
+      <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>
@@ -49,22 +57,24 @@
         </el-table-column>
         <el-table-column label="鍒涘缓浜�" min-width="180" prop="createUserName">
         </el-table-column>
-        <el-table-column fixed="right" label="鎿嶄綔" width="100">
+        <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" @click="deleteRow(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]"
+      <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
                      @size-change="handleSizeChange"
                      @current-change="handleCurrentChange">
       </el-pagination>
     </div>
     <el-dialog
       :visible.sync="dialogVisible"
-      title="鎻愮ず"
+      title="濂栨儵璁板綍"
       width="50%"
       @open="getUserList">
       <div style="height: 40vh">
@@ -119,14 +129,22 @@
         </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-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: {
@@ -143,6 +161,7 @@
   data() {
     return {
       tableData: [],
+      tableLoading: false,
       search: {
         size: 20,
         current: 1,
@@ -213,23 +232,23 @@
       this.getPersonnelTraining(this.departId);
     },
     async getPersonnelTraining() {
-      const {code, data} = await this.$axios({
-        method: 'get',
-        url: rewardPunishmentPageApi,
-        params: {
-          userId: this.isDepartment ? '' : this.departId,
+      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],
-        }
-      })
-      if (code == 200) {
-        this.tableData = data.records
-        this.search.total = data.total
       }
+      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
@@ -240,60 +259,28 @@
     },
     handleDown(){
       this.outLoading = true
-      this.$axios.post(this.$api.deviceCheck.rewardPunishmentExport,{
+      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 => {
+      }).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('瀵煎嚭鎴愬姛')
-          }
-        }
+        this.$download.saveAs(blob, '濂栨儵璁板綍.xlsx')
+        this.$message.success('瀵煎嚭鎴愬姛')
       })
     },
     // 鑾峰彇璐熻矗浜轰俊鎭帴鍙�
     getUserList() {
-      this.$axios.get(this.$api.deviceScope.selectUserList).then(res => {
+      selectUserCondition().then(res => {
         if (res.code == 200) {
           this.responsibleOptions = res.data
         }
-      })
+      });
     },
     selectUserChange(val) {
       const index = this.responsibleOptions.findIndex(item => item.id === val)
@@ -302,42 +289,40 @@
         this.form.account = this.responsibleOptions[index].account
       }
     },
+    // 鎵撳紑琛ㄥ崟寮规
     editForm(row) {
       this.dialogVisible = true
       this.form = {...row};
     },
+    // 鎻愪氦琛ㄥ崟鏁版嵁
     saveOrUpdate() {
       this.$refs.form.validate(async (valid) => {
         if (valid) {
-          this.dialogVisible = false
-          const {code, data} = await this.$axios({
-            method: 'post',
-            url: addOrUpdateRewardPunishmentApi,
-            data: this.form,
-            headers: {
-              'Content-Type': 'application/json'
-            },
-            noQs: true
-          })
-          if (code == 200) {
-            this.$message.success("鎿嶄綔鎴愬姛锛�")
+          addOrUpdateRewardPunishment(this.form).then(res => {
+            this.dialogVisible = false
+            this.$message.success("鎿嶄綔鎴愬姛")
             this.getPersonnelTraining(this.departId);
-          }
+          })
         }
       })
     },
-    async deleteRow(row) {
-      const {code, data} = await this.$axios({
-        method: 'delete',
-        url: deleteRewardPunishmentApi,
-        params: {
-          id: row.id
-        }
-      })
-      if (code == 200) {
-        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: {

--
Gitblit v1.9.3