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/training-record.vue |  303 ++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 303 insertions(+), 0 deletions(-)

diff --git a/src/views/CNAS/personnel/personnelInfo/tabs/training-record.vue b/src/views/CNAS/personnel/personnelInfo/tabs/training-record.vue
new file mode 100644
index 0000000..a2642b7
--- /dev/null
+++ b/src/views/CNAS/personnel/personnelInfo/tabs/training-record.vue
@@ -0,0 +1,303 @@
+<!-- 鍩硅璁板綍 -->
+<template>
+  <div>
+    <div class="flex_table">
+      <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>
+</template>
+
+<script>
+
+import limsTable from "@/components/Table/lims-table.vue";
+import {
+  exportTrainingRecord,
+  queryPersonnelDetails,
+  trainingSelectTrainingRecord
+} from "@/api/cnas/personal/personTrainingRecord";
+
+export default {
+  components: {limsTable},
+  props: {
+    departId: {
+      type: Number,
+      default: () => {
+        return null;
+      }
+    },
+    isDepartment: {
+      type: Boolean,
+      default: false
+    }
+  },
+  data() {
+    return {
+      outLoading: false,
+      trainingForm: {},
+      trainingColumn: [
+        {
+          label: '鍛樺伐缂栧彿',
+          prop: 'account',
+          width: '100'
+        }, {
+          label: '濮撳悕',
+          prop: 'name'
+        }, {
+          label: '鎵�鍦ㄩ儴闂�',
+          prop: 'departLimsName',
+          width: '150'
+        }, {
+          label: '鑱岀О',
+          prop: 'professionalTitle'
+        }, {
+          label: '鏈�楂樺鍘�',
+          prop: 'officialAcademicRedentials',
+          width: '100'
+        }, {
+          label: '鍏ュ崟浣嶆椂闂�',
+          prop: 'unitTime',
+          width: '150'
+        },
+        // {
+        //   fixed: 'right',
+        //   dataType: 'action',
+        //   width: 80,
+        //   label: '鎿嶄綔',
+        //   operation: [
+        //     {
+        //       name: '瀵煎嚭',
+        //       type: 'text',
+        //       clickFun: (row) => {
+        //         this.openDownloadDia(row)
+        //       }
+        //     }
+        //   ]
+        // }
+      ],
+      trainingTableData: [],
+      trainingLoading: false,
+      trainingPagination: {
+        size: 20,
+        total: 0,
+        current: 1,
+        userName: null
+      },
+      searchForm: {
+        trainingDate: ''
+      },
+      trainingPersonColumn: [
+        {
+          label: '鍩硅鏃ユ湡',
+          prop: 'trainingDate'
+        }, {
+          label: '鍩硅鍐呭',
+          prop: 'trainingContent'
+        }, {
+          label: '鍩硅璇炬椂',
+          prop: 'educationBackground'
+        }, {
+          label: '璇炬椂',
+          prop: 'classHour'
+        }, {
+          label: '鍩硅缁撴灉',
+          prop: 'examinationResults',
+        }, {
+          label: '澶囨敞',
+          prop: 'remarks'
+        }
+      ],
+      trainingPersonTableData: [],
+      trainingPersonLoading: false,
+      trainingPersonPagination: {
+        size: 20,
+        current: 1,
+        total: 0
+      },
+      currentChangeRow: '',
+    };
+  },
+  mounted() {
+    this.getPersonnelTraining(this.departId);
+  },
+  methods: {
+    // exportExcel() {
+    //   this.outLoading = true;
+    //   const name = this.isDepartment ? 'departmentId' : 'userId';
+    //   this.$axios.get(this.$api.personal.personTrackRecordExport + `&${name}=` + this.departId, { responseType: 'blob' }).then(res => {
+    //     this.outLoading = false;
+    //     this.$message.success('瀵煎嚭鎴愬姛');
+    //     const blob = new Blob([res], { type: 'application/octet-stream' });
+    //     const url = URL.createObjectURL(blob);
+    //     const link = document.createElement('a');
+    //     link.href = url;
+    //     link.download = '鍩硅璁板綍.xlsx';
+    //     link.click();
+    //   }).catch(err => {
+    //     this.outLoading = false;
+    //   })
+    // },
+    // 鏌ヨ
+    refreshTable() {
+      this.getPersonnelTraining(this.departId);
+    },
+    // 鍩硅璁板綍瀵煎嚭
+    openDownloadDia (row) {
+      let date = this.searchForm.trainingDate
+      if (!date) {
+        date = this.$moment().format('YYYY')
+      }
+      exportTrainingRecord({userId: row.userId, trainingDate: date}).then(res => {
+        this.outLoading = false
+        const blob = new Blob([res],{ type: 'application/msword' });
+        this.$download.saveAs(blob, '鍩硅璁板綍瀵煎嚭.docx');
+      })
+    },
+    // 鑾峰彇瀹為獙瀹�-鍩硅璁″垝鍒楄〃淇℃伅
+    getPersonnelTraining(departId) {
+      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.$refs.trainingTableData.setCurrentRow(this.trainingTableData[0])
+        }
+      }).catch(err => {
+        this.trainingLoading = false
+      })
+    },
+    // 鑾峰彇涓汉-鍩硅璁″垝鍒楄〃淇℃伅
+    currentChange(row) {
+      this.currentChangeRow = row
+      if (row === null) {
+        row = this.trainingTableData[0]
+      }
+      this.queryPersonnelDetailsPage(row.userId)
+    },
+    queryPersonnelDetailsPage(userId) {
+      if (this.searchForm.trainingDate === null) {
+        this.searchForm.trainingDate = ''
+      }
+      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
+      })
+    },
+    // 鍒嗛〉
+    pagination(page) {
+      this.trainingPagination.size = page.limit;
+      this.getPersonnelTraining(this.departId);
+    },
+    // 鍒嗛〉
+    pagination1(page) {
+      this.trainingPersonPagination.size = page.limit;
+      this.queryPersonnelDetailsPage(this.currentChangeRow.userId);
+    },
+  },
+  watch: {
+    departId: {
+      handler(newId, oldId) {
+        if (this.isDepartment) {
+          this.getPersonnelTraining(newId);
+        } else {
+          this.queryPersonnelDetailsPage(newId)
+        }
+      }
+    }
+  }
+};
+</script>
+<style scoped>
+.flex_table {
+  display: flex;
+  flex-direction: row;
+  justify-content: space-between;
+}
+
+.search {
+  width: 150px;
+}
+.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