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

---
 src/views/CNAS/personnel/personnelInfo/tabs/training-record.vue |  245 +++++++++++++++++++++---------------------------
 1 files changed, 106 insertions(+), 139 deletions(-)

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