From 42935de0c2ec1a626cef63bce7c79da0e0708d32 Mon Sep 17 00:00:00 2001
From: gaoluyang <2820782392@qq.com>
Date: 星期五, 28 二月 2025 14:43:30 +0800
Subject: [PATCH] 人员-培训记录搬迁

---
 src/assets/styles/ruoyi.scss                                             |    2 
 src/views/CNAS/personnel/personnelInfo/index.vue                         |   10 +-
 src/api/cnas/personal/personTrainingRecord.js                            |   27 +++++
 src/main.js                                                              |    4 
 src/views/CNAS/personnel/personnelInfo/tabs/personnel-list.vue           |    2 
 src/views/CNAS/personnel/personnelInfo/tabs/training-record.vue          |  245 +++++++++++++++++++++---------------------------
 src/views/CNAS/personnel/personnelInfo/tabs/job-responsibilities.vue     |    1 
 package.json                                                             |    1 
 src/views/CNAS/personnel/personnelInfo/tabs/reward-punishment-record.vue |    1 
 src/components/Pagination/index.vue                                      |    3 
 10 files changed, 149 insertions(+), 147 deletions(-)

diff --git a/package.json b/package.json
index 2b89237..4379600 100644
--- a/package.json
+++ b/package.json
@@ -54,6 +54,7 @@
     "jsencrypt": "3.0.0-rc.1",
     "jspdf": "^3.0.0",
     "mammoth": "^1.9.0",
+    "moment": "^2.30.1",
     "nprogress": "0.2.0",
     "pako": "^2.1.0",
     "print-js": "^1.6.0",
diff --git a/src/api/cnas/personal/personTrainingRecord.js b/src/api/cnas/personal/personTrainingRecord.js
new file mode 100644
index 0000000..6b75b4d
--- /dev/null
+++ b/src/api/cnas/personal/personTrainingRecord.js
@@ -0,0 +1,27 @@
+import request from "@/utils/request";
+
+// 瀵煎嚭鍩硅璁板綍
+export function exportTrainingRecord(query) {
+  return request({
+    url: "/personTrainingRecord/exportTrainingRecord",
+    method: "get",
+    params: query,
+    responseType: 'blob'
+  });
+}
+// 鏌ヨ浜哄憳 鍩硅璁板綍
+export function trainingSelectTrainingRecord(query) {
+  return request({
+    url: "/personTrainingRecord/trainingSelectTrainingRecord",
+    method: "get",
+    params: query,
+  });
+}
+// 鏌ヨ浜哄憳鏄庣粏 鍩硅璁板綍
+export function queryPersonnelDetails(query) {
+  return request({
+    url: "/personTrainingRecord/queryPersonnelDetails",
+    method: "get",
+    params: query,
+  });
+}
diff --git a/src/assets/styles/ruoyi.scss b/src/assets/styles/ruoyi.scss
index 7e44513..8dfe1d0 100644
--- a/src/assets/styles/ruoyi.scss
+++ b/src/assets/styles/ruoyi.scss
@@ -121,7 +121,7 @@
   height: 32px;
   margin-bottom: 10px;
   margin-top: 15px;
-  padding: 10px 20px !important;
+  padding: 0 20px !important;
 }
 
 /* tree border */
diff --git a/src/components/Pagination/index.vue b/src/components/Pagination/index.vue
index 56f5a6b..9be5ddb 100644
--- a/src/components/Pagination/index.vue
+++ b/src/components/Pagination/index.vue
@@ -106,7 +106,8 @@
 <style scoped>
 .pagination-container {
   background: #fff;
-  padding: 32px 16px;
+  padding: 28px 16px;
+  margin-top: 10px;
 }
 .pagination-container.hidden {
   display: none;
diff --git a/src/main.js b/src/main.js
index 5809760..beaf8ef 100644
--- a/src/main.js
+++ b/src/main.js
@@ -49,6 +49,8 @@
 import DictData from "@/components/DictData";
 import { checkPermi } from "@/utils/permission"; // 鏉冮檺鍒ゆ柇鍑芥暟
 import { getToken } from "@/utils/auth";
+// 鏃堕棿杞崲
+import Moment from 'moment'
 
 // 鍏ㄥ眬鏂规硶鎸傝浇
 Vue.prototype.getDicts = getDicts;
@@ -80,6 +82,8 @@
     });
   }
 })
+Vue.use(Moment)
+Vue.prototype.$moment = Moment
 
 // 鍏ㄥ眬缁勪欢鎸傝浇
 Vue.component("DictTag", DictTag);
diff --git a/src/views/CNAS/personnel/personnelInfo/index.vue b/src/views/CNAS/personnel/personnelInfo/index.vue
index f931306..5cbb11a 100644
--- a/src/views/CNAS/personnel/personnelInfo/index.vue
+++ b/src/views/CNAS/personnel/personnelInfo/index.vue
@@ -70,11 +70,11 @@
           <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"-->
-<!--                           :isDepartment="isDepartment"></training-record>-->
-<!--        </el-tab-pane>-->
+        <el-tab-pane label="鍩硅璁板綍" name="鍩硅璁板綍">
+          <training-record v-if="activeName === '鍩硅璁板綍'" ref="trainingRecord"
+                           :departId="departId"
+                           :isDepartment="isDepartment"></training-record>
+        </el-tab-pane>
 <!--        <el-tab-pane label="浠昏亴鎺堟潈璁板綍" name="浠昏亴鎺堟潈璁板綍">-->
 <!--          <Mandate v-if="activeName === '浠昏亴鎺堟潈璁板綍'" ref="manDateRef" :departId="departId" :isDepartment="isDepartment"></Mandate>-->
 <!--        </el-tab-pane>-->
diff --git a/src/views/CNAS/personnel/personnelInfo/tabs/job-responsibilities.vue b/src/views/CNAS/personnel/personnelInfo/tabs/job-responsibilities.vue
index 227b749..1ae74e8 100644
--- a/src/views/CNAS/personnel/personnelInfo/tabs/job-responsibilities.vue
+++ b/src/views/CNAS/personnel/personnelInfo/tabs/job-responsibilities.vue
@@ -43,6 +43,7 @@
       <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>
diff --git a/src/views/CNAS/personnel/personnelInfo/tabs/personnel-list.vue b/src/views/CNAS/personnel/personnelInfo/tabs/personnel-list.vue
index edf7b44..92e0233 100644
--- a/src/views/CNAS/personnel/personnelInfo/tabs/personnel-list.vue
+++ b/src/views/CNAS/personnel/personnelInfo/tabs/personnel-list.vue
@@ -48,7 +48,7 @@
         :total="page.total"
         background
         layout="->,total, sizes, prev, pager, next, jumper"
-        style="margin-top: 16px"
+        style="margin-top: 10px"
         @size-change="handleSizeChange"
         @current-change="handleCurrentChange"
       >
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 bf5c9e4..40b2f82 100644
--- a/src/views/CNAS/personnel/personnelInfo/tabs/reward-punishment-record.vue
+++ b/src/views/CNAS/personnel/personnelInfo/tabs/reward-punishment-record.vue
@@ -68,6 +68,7 @@
                      :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>
diff --git a/src/views/CNAS/personnel/personnelInfo/tabs/training-record.vue b/src/views/CNAS/personnel/personnelInfo/tabs/training-record.vue
index 6ac536f..a2642b7 100644
--- a/src/views/CNAS/personnel/personnelInfo/tabs/training-record.vue
+++ b/src/views/CNAS/personnel/personnelInfo/tabs/training-record.vue
@@ -2,82 +2,54 @@
 <template>
   <div>
     <div class="flex_table">
-      <div v-if="isDepartment" style="width: 50%">
-<!--        <TableCard :showTitle="false">-->
-<!--          <template v-slot:form>-->
-<!--            <div class="items_center">-->
-<!--              <span>濮撳悕</span>-->
-<!--              <el-input v-model="trainingPagination.userName" class="search" clearable placeholder="璇疯緭鍏�" size="small"></el-input>-->
-<!--              <el-button size="small" type="primary" @click="getPersonnelTraining(departId)">鏌ヨ</el-button>-->
-<!--            </div>-->
-<!--            <div>-->
-<!--&lt;!&ndash;              <el-button :loading="outLoading" size="small" type="primary" @click="exportExcel">瀵煎嚭</el-button>&ndash;&gt;-->
-<!--            </div>-->
-<!--          </template>-->
-<!--          <template v-slot:table>-->
-<!--            <ZTTable-->
-<!--              :column="trainingColumn"-->
-<!--              :currentChange="currentChange"-->
-<!--              :height="'calc(100vh - 18em)'"-->
-<!--              :highlightCurrentRow="true"-->
-<!--              :table-data="trainingTableData"-->
-<!--              :table-loading="trainingLoading"-->
-<!--              style="padding: 0 15px;">-->
-<!--            </ZTTable>-->
-<!--            <div class="pagination">-->
-<!--              <div></div>-->
-<!--              <el-pagination-->
-<!--                :page-size="trainingPagination.size"-->
-<!--                :page-sizes="[10, 20, 30, 40]"-->
-<!--                :total="trainingPagination.total"-->
-<!--                layout="total, sizes, prev, pager, next, jumper"-->
-<!--                @current-change="handleYearCurrentTraining"-->
-<!--                @size-change="handleYearSizeChangeTraining">-->
-<!--              </el-pagination>-->
-<!--            </div>-->
-<!--          </template>-->
-<!--        </TableCard>-->
-<!--      </div>-->
-<!--      <div :style="`width: ${isDepartment ? '50%' : '100%'};`">-->
-<!--        <TableCard :showTitle="false">-->
-<!--          <template v-slot:form>-->
-<!--            <div class="items_center">-->
-<!--              <span>骞翠唤</span>-->
-<!--              <el-date-picker-->
-<!--                v-model="searchForm.trainingDate"-->
-<!--                clearable-->
-<!--                format="yyyy"-->
-<!--                placeholder="閫夋嫨骞�"-->
-<!--                size="small"-->
-<!--                style="margin: 0 10px"-->
-<!--                type="year"-->
-<!--                value-format="yyyy">-->
-<!--              </el-date-picker>-->
-<!--              <el-button size="small" type="primary" @click="queryPersonnelDetailsPage(currentChangeRow.userId)">鏌ヨ</el-button>-->
-<!--              <el-button size="small" type="primary" @click="openDownloadDia(currentChangeRow)">瀵煎嚭</el-button>-->
-<!--            </div>-->
-<!--          </template>-->
-<!--          <template v-slot:table>-->
-<!--            <ZTTable-->
-<!--              :column="trainingPersonColumn"-->
-<!--              :height="'calc(100vh - 18em)'"-->
-<!--              :table-data="trainingPersonTableData"-->
-<!--              :table-loading="trainingPersonLoading"-->
-<!--              style="padding: 0 15px;">-->
-<!--            </ZTTable>-->
-<!--            <div class="pagination">-->
-<!--              <div></div>-->
-<!--              <el-pagination-->
-<!--                :page-size="trainingPersonPagination.size"-->
-<!--                :page-sizes="[10, 20, 30, 40]"-->
-<!--                :total="trainingPersonPagination.total"-->
-<!--                layout="total, sizes, prev, pager, next, jumper"-->
-<!--                @current-change="handleYearCurrentPagination"-->
-<!--                @size-change="handleYearSizeChangePagination">-->
-<!--              </el-pagination>-->
-<!--            </div>-->
-<!--          </template>-->
-<!--        </TableCard>-->
+      <div v-if="isDepartment" style="width: 49%">
+        <div class="title">
+          <span style="font-weight: bold">骞村害璁″垝</span>
+        </div>
+        <div style="display: flex;justify-content: space-between;">
+          <el-form :model="trainingPagination" ref="trainingPagination" size="small" :inline="true">
+            <el-form-item label="濮撳悕">
+              <el-input v-model="trainingPagination.userName" class="search" clearable placeholder="璇疯緭鍏�" size="small"></el-input>
+            </el-form-item>
+            <el-form-item>
+              <el-button size="small" type="primary" @click="getPersonnelTraining(departId)">鏌ヨ</el-button>
+            </el-form-item>
+          </el-form>
+        </div>
+        <lims-table :tableData="trainingTableData" :column="trainingColumn"
+                    ref="trainingTableData"
+                    :currentChange="currentChange" :highlightCurrentRow="true"
+                    @pagination="pagination" :height="'calc(100vh - 22em)'"
+                    :page="trainingPagination" :tableLoading="trainingLoading"></lims-table>
+      </div>
+      <div :style="`width: ${isDepartment ? '49%' : '100%'};`">
+        <div class="title">
+          <span style="font-weight: bold">骞村害璁″垝鏄庣粏</span>
+        </div>
+        <div style="display: flex;justify-content: space-between;">
+          <el-form :model="searchForm" ref="searchForm" size="small" :inline="true">
+            <el-form-item label="骞翠唤">
+              <el-date-picker
+                v-model="searchForm.trainingDate"
+                clearable
+                format="yyyy"
+                placeholder="閫夋嫨骞�"
+                size="small"
+                type="year"
+                value-format="yyyy">
+              </el-date-picker>
+            </el-form-item>
+            <el-form-item>
+              <el-button size="small" type="primary" @click="queryPersonnelDetailsPage(currentChangeRow.userId)">鏌ヨ</el-button>
+            </el-form-item>
+          </el-form>
+          <div>
+            <el-button size="small" type="primary" @click="openDownloadDia(currentChangeRow)">瀵煎嚭</el-button>
+          </div>
+        </div>
+        <lims-table :tableData="trainingPersonTableData" :column="trainingPersonColumn"
+                    :height="'calc(100vh - 22em)'" @pagination="pagination1"
+                    :page="trainingPersonPagination" :tableLoading="trainingPersonLoading"></lims-table>
       </div>
     </div>
   </div>
@@ -85,8 +57,15 @@
 
 <script>
 
+import limsTable from "@/components/Table/lims-table.vue";
+import {
+  exportTrainingRecord,
+  queryPersonnelDetails,
+  trainingSelectTrainingRecord
+} from "@/api/cnas/personal/personTrainingRecord";
+
 export default {
-  components: {},
+  components: {limsTable},
   props: {
     departId: {
       type: Number,
@@ -215,48 +194,31 @@
       if (!date) {
         date = this.$moment().format('YYYY')
       }
-      console.log('date----', date);
-      this.$axios.get( this.$api.personnel.exportTrainingRecord+ '?userId=' + row.userId + '&trainingDate=' + date,{responseType: "blob"}).then(res => {
+      exportTrainingRecord({userId: row.userId, trainingDate: date}).then(res => {
         this.outLoading = false
         const blob = new Blob([res],{ type: 'application/msword' });
-        //灏咮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 url = URL.createObjectURL(blob);
-              const link = document.createElement('a');
-              link.href = url;
-              link.download = '鍩硅璁板綍瀵煎嚭' + '.docx';
-              link.click();
-              this.$message.success('瀵煎嚭鎴愬姛')
-            }
-          } catch (err) {
-            console.log(err);
-            const url = URL.createObjectURL(blob);
-            const link = document.createElement('a');
-            link.href = url;
-            link.download = '鍩硅璁板綍瀵煎嚭' + '.docx';
-            link.click();
-            this.$message.success('瀵煎嚭鎴愬姛')
-          }
-        }
+        this.$download.saveAs(blob, '鍩硅璁板綍瀵煎嚭.docx');
       })
     },
     // 鑾峰彇瀹為獙瀹�-鍩硅璁″垝鍒楄〃淇℃伅
     getPersonnelTraining(departId) {
-      // const name = this.isDepartment ? 'departmentId' : 'userId';
-      this.$axios.get(`${this.$api.personnel.trainingSelectTrainingRecord}?departmentId=${departId}&size=${this.trainingPagination.size}&current=${this.trainingPagination.current}&userName=${this.trainingPagination.userName}`).then(res => {
+      const params = {
+        departmentId: departId,
+        size: this.trainingPagination.size,
+        current: this.trainingPagination.current,
+        userName: this.trainingPagination.userName,
+      }
+      this.trainingLoading = true
+      trainingSelectTrainingRecord(params).then(res => {
+        this.trainingLoading = false
         this.trainingTableData = res.data.records;
         this.trainingPagination.total = res.data.total;
         if (this.trainingTableData.length > 0) {
-          this.currentChange(this.trainingTableData[0]);
+          this.$refs.trainingTableData.setCurrentRow(this.trainingTableData[0])
         }
-      });
+      }).catch(err => {
+        this.trainingLoading = false
+      })
     },
     // 鑾峰彇涓汉-鍩硅璁″垝鍒楄〃淇℃伅
     currentChange(row) {
@@ -270,29 +232,31 @@
       if (this.searchForm.trainingDate === null) {
         this.searchForm.trainingDate = ''
       }
-      this.$axios.get(`${this.$api.personnel.queryPersonnelDetails}?userId=${userId}&size=${this.trainingPersonPagination.size}&current=${this.trainingPersonPagination.current}&trainingDate=${this.searchForm.trainingDate}`).then(res => {
+      const params = {
+        userId: userId,
+        size: this.trainingPersonPagination.size,
+        current: this.trainingPersonPagination.current,
+        trainingDate: this.searchForm.trainingDate,
+      }
+      this.trainingPersonLoading = true
+      queryPersonnelDetails(params).then(res => {
+        this.trainingPersonLoading = false
         this.trainingPersonTableData = res.data.records;
         this.trainingPersonPagination.total = res.data.total;
-      });
+      }).catch(err => {
+        this.trainingPersonLoading = false
+      })
     },
     // 鍒嗛〉
-    handleYearCurrentTraining(page) {
-      this.trainingPagination.curent = page;
-      this.getPersonnelTraining(this.departId);
-    },
-    handleYearSizeChangeTraining(size) {
-      this.trainingPagination.size = size;
+    pagination(page) {
+      this.trainingPagination.size = page.limit;
       this.getPersonnelTraining(this.departId);
     },
     // 鍒嗛〉
-    handleYearCurrentPagination(page) {
-      this.trainingPersonPagination.curent = page;
+    pagination1(page) {
+      this.trainingPersonPagination.size = page.limit;
       this.queryPersonnelDetailsPage(this.currentChangeRow.userId);
     },
-    handleYearSizeChangePagination(size) {
-      this.trainingPersonPagination.size = size;
-      this.queryPersonnelDetailsPage(this.currentChangeRow.userId);
-    }
   },
   watch: {
     departId: {
@@ -308,29 +272,32 @@
 };
 </script>
 <style scoped>
->>> .el-form-item {
-  margin-bottom: 13px;
-}
-
 .flex_table {
   display: flex;
   flex-direction: row;
   justify-content: space-between;
 }
 
-.pagination {
-  display: flex;
-  justify-content: space-between;
-  margin-top: 10px;
-}
-
-.items_center {
-  display: flex;
-  align-items: center;
-}
-
 .search {
   width: 150px;
-  padding: 0 6px;
+}
+.title {
+  position: relative;
+  font-size: 16px;
+  color: #333;
+  font-weight: 400;
+  padding-left: 10px;
+  margin-bottom: 10px;
+}
+
+.title::before {
+  position: absolute;
+  left: 0;
+  top: 4px;
+  content: '';
+  width: 4px;
+  height: 16px;
+  background-color: #3A7BFA;
+  border-radius: 2px;
 }
 </style>

--
Gitblit v1.9.3