From 1c20912d0335724b648679e6b2b7bda93f332ecc Mon Sep 17 00:00:00 2001
From: Administrator <admin>
Date: Sat, 22 Jan 2022 09:37:37 +0800
Subject: [PATCH] 考试情况统计新增导出

---
 src/views/trainExam/examStatistics.vue |  360 ++++++++++++++++++++++++++++++++++++++++++++++-------------
 1 files changed, 280 insertions(+), 80 deletions(-)

diff --git a/src/views/trainExam/examStatistics.vue b/src/views/trainExam/examStatistics.vue
index 699e511..a1f322c 100644
--- a/src/views/trainExam/examStatistics.vue
+++ b/src/views/trainExam/examStatistics.vue
@@ -77,8 +77,13 @@
       :modal-append-to-body="true"
       :append-to-body="true"
       direction="rtl"
-      size="60%">
-      <avue-crud
+      size="60%"
+    >
+      <div style="position: absolute;top: 3.5rem;left: 1rem;">
+          <el-button type="warning" icon="el-icon-download" plain size="mini" @click="exportExamInfo">导出</el-button>
+      </div>
+      <div style="height: 40%">
+        <!-- <avue-crud
             v-model="formDetail"
             :option="option"
             v-if="dialog"
@@ -107,15 +112,143 @@
                 >详情
               </el-button>
             </template>
-          </avue-crud>
+        </avue-crud> -->
+        <el-table
+          :data="data"
+          stripe="true"
+          border
+          show-summary
+          :summary-method="getSummaries"
+          style="width: 98%; margin: 0 auto; margin-top: 1rem"
+          size="small"
+          header-align="center"
+          height="22rem"
+        >
+          <el-table-column label="理论考试成绩统计" align="center">
+            <el-table-column
+              type="index"
+              width="50"
+              label="序号"
+              align="center"
+            ></el-table-column>
+            <el-table-column
+              prop="deptName"
+              label="企业名称"
+              minWidth="160"
+              show-overflow-tooltip="true"
+              align="center"
+            >
+            </el-table-column>
+            <el-table-column prop="znum" label="报名人数" align="center">
+            </el-table-column>
+            <el-table-column prop="ycnum" label="审查异常人数" align="center">
+            </el-table-column>
+            <el-table-column
+              prop="qknum"
+              label="缺考人数"
+              align="center"
+            >
+            </el-table-column>
+            <el-table-column
+              prop="absentProportion"
+              label="缺考人数占比(%)"
+              align="center"
+            >
+            </el-table-column>
+            <el-table-column prop="yknum" label="及格人数" align="center">
+            </el-table-column>
+            <el-table-column
+              prop="qualifiedProportion"
+              label="及格人数占比(%)"
+              align="center"
+            >
+            </el-table-column>
+          </el-table-column>
+        </el-table>
+      </div>
+
+      <div style="height: 60%">
+        <el-table
+          :data="dataDetail"
+          stripe="true"
+          border
+          height="25rem"
+          style="width: 98%; margin: 0 auto"
+          size="small"
+          header-align="center"
+        >
+          <el-table-column label="考试成绩明细" align="center">
+            <el-table-column
+              type="index"
+              width="50"
+              label="序号"
+              align="center"
+            ></el-table-column>
+            <el-table-column prop="securityName" label="姓名" align="center">
+            </el-table-column>
+            <el-table-column
+              prop="companyName"
+              label="企业名称"
+              minWidth="160"
+              show-overflow-tooltip="true"
+              align="center"
+            >
+            </el-table-column>
+            <el-table-column prop="theoryGrade" label="理论成绩" align="center">
+              <template slot-scope="scope">
+                {{ scope.row.theoryGrade == -1 ? "" : scope.row.theoryGrade }}
+              </template>
+            </el-table-column>
+            <el-table-column prop="learnGrade" label="实操成绩" align="center">
+              <template slot-scope="scope">
+                {{ scope.row.learnGrade == -1 ? "" : scope.row.learnGrade }}
+              </template>
+            </el-table-column>
+            <el-table-column prop="allGrade" label="平均分" align="center">
+            </el-table-column>
+            <el-table-column prop="isExam" label="考试成绩状态" align="center">
+              <template slot-scope="scope">
+                {{
+                  scope.row.isExam == 2
+                    ? "发布成绩"
+                    : scope.row.isExam == 3
+                    ? "考试中"
+                    : scope.row.isExam == 4
+                    ? "缺考"
+                    : scope.row.isExam == 5
+                    ? "纸质考试"
+                    : ""
+                }}
+              </template>
+            </el-table-column>
+          </el-table-column>
+        </el-table>
+        <el-pagination
+          style="margin-top: 1rem; margin-left: 25rem"
+          background
+          @size-change="handleSizeChange"
+          @current-change="handleCurrentChange"
+          :current-page="page.currentPage"
+          :page-sizes="[10, 20, 30, 50, 100]"
+          :page-size="10"
+          layout="total, sizes, prev, pager, next, jumper"
+          :total="page.total"
+        >
+        </el-pagination>
+      </div>
     </el-drawer>
   </el-row>
-  
 </template>
 
 <script>
-import {getExamStatistics,getExamInfoByExamId} from "@/api/examapi/examination";
+import {
+  getExamStatistics,
+  getExamInfoByExamId,
+} from "@/api/examapi/examination";
 import { mapGetters } from "vuex";
+import Qs from "qs";
+import { getToken } from "@/util/auth";
+import { getList } from "@/api/examapi/performance";
 import Legend from "@/components/liu-legend/Legend";
 export default {
   components: {
@@ -123,9 +256,10 @@
   },
   data() {
     return {
-      startTime:"",
-      title:"",
-      trainUnitId:null,
+      startTime: "",
+      title: "",
+      companyName: "",
+      trainUnitId: null,
       dialog: false,
       form: {},
       formDetail: {},
@@ -157,9 +291,9 @@
             label: "培训学校名称",
             prop: "schoolName",
             slot: true,
-            search:true,
-            searchSpan:5,
-            searchLabelWidth:110,
+            search: true,
+            searchSpan: 5,
+            searchLabelWidth: 110,
             overHidden: true,
             // width:180,
           },
@@ -169,8 +303,8 @@
             type: "date",
             format: "yyyy-MM-dd",
             valueFormat: "yyyy-MM-dd",
-            search:true,
-            searchSpan:4,
+            search: true,
+            searchSpan: 4,
             hide: true,
             rules: [
               {
@@ -237,7 +371,7 @@
             slot: true,
             // search:true,
             // searchSpan:5,
-            searchLabelWidth:110,
+            searchLabelWidth: 110,
             overHidden: true,
           },
           {
@@ -266,39 +400,39 @@
           },
         ],
         sumColumnList: [
-            {
-              label:'合计:',
-              name: 'deptName',
-            },
-            {
-              name: 'znum',
-              type: 'sum'
-            },
-            {
-              name: 'ycnum',
-              type: 'sum'
-            },
-            {
-              name: 'qknum',
-              type: 'sum'
-            },
-            {
-              name: 'absentProportion',
-              type: 'avg'
-            },
-            {
-              name: 'yknum',
-              type: 'sum'
-            },
-            {
-              name: 'qualifiedProportion',
-              type: 'avg'
-            },
-            {
-              name: 'znum',
-              type: 'sum'
-            },
-          ],
+          {
+            label: "合计:",
+            name: "deptName",
+          },
+          {
+            name: "znum",
+            type: "sum",
+          },
+          {
+            name: "ycnum",
+            type: "sum",
+          },
+          {
+            name: "qknum",
+            type: "sum",
+          },
+          {
+            name: "absentProportion",
+            type: "avg",
+          },
+          {
+            name: "yknum",
+            type: "sum",
+          },
+          {
+            name: "qualifiedProportion",
+            type: "avg",
+          },
+          {
+            name: "znum",
+            type: "sum",
+          },
+        ],
       },
       questionBankSearch: {},
       search: {},
@@ -306,6 +440,7 @@
       loading: true,
       questionBankData: [],
       data: [],
+      dataDetail: [],
       questionBankPage: {
         pageSize: 10,
         currentPage: 1,
@@ -315,8 +450,7 @@
       page: {
         pageSize: 10,
         currentPage: 1,
-        total: 16,
-        ...this.$store.state.control.changePageSize,
+        total: 0,
       },
       questionBankQuery: {},
       query: {},
@@ -345,19 +479,66 @@
   },
   watch: {},
   methods: {
+    //导出考试统计数据
+    exportExamInfo(){
+      this.$confirm("是否导出考试统计情况数据?", "提示", {
+        confirmButtonText: "确定",
+        cancelButtonText: "取消",
+        type: "warning",
+      }).then(() => {
+        //获取查询条件
+        var data = {
+          companyName: this.companyName,
+          examDate: this.startTime,
+          trainUnitId: this.trainUnitId,
+          examType: 2,
+        };
+        console.log(data,11225111);
+        //序列号url形式,用&拼接
+        data = Qs.stringify(data);
+        window.open(
+          `/api/exampaper/export-examStatistics?${
+            this.website.tokenHeader
+          }=${getToken()}&` + data
+        );
+      });
+    },
     //合计
-    summaryMethod({ columns, data }){
+    getSummaries(param) {
+      const { columns, data } = param;
       const sums = [];
-      if (columns.length > 0) {
-        columns.forEach((column, index) => {
-          if ([0,1,6].includes(index) ) {
-            sums[index] = '-'
-          } else {
-            let values = this.selectList.map(item => Number(item[column.property]));
-            sums[index] = values;
-          }
-        });
-      }
+      columns.forEach((column, index) => {
+        if (index === 0) {
+          sums[index] = sums[index];
+          return;
+        }
+        if (index === 1) {
+          sums[index] = "合计";
+          return;
+        }
+        if (index === 5) {
+          sums[index] = (sums[4]/sums[2]*100).toFixed(2);
+          return;
+        }
+        if (index === 7) {
+          sums[index] = (sums[6]/sums[2]*100).toFixed(2);
+          return;
+        }
+        const values = data.map((item) => Number(item[column.property]));
+        if (!values.every((value) => isNaN(value))) {
+          sums[index] = values.reduce((prev, curr) => {
+            const value = Number(curr);
+            if (!isNaN(value)) {
+              return prev + curr;
+            } else {
+              return prev;
+            }
+          }, 0);
+          sums[index];
+        } else {
+          sums[index] = "N/A";
+        }
+      });
       return sums;
     },
     questionBankOnLoad(page, params = {}) {
@@ -379,24 +560,39 @@
       });
     },
     onLoad(page, params = {}) {
-      this.loading = false;
-      //如果是培训公司管理员,则只能看到当前培训公司申请的考试
-      if (this.userInfo.role_name == "培训公司管理员") {
-        params["deptId"] = this.userInfo.dept_id;
-      }
-      params['startTime'] = this.startTime;
-      params['trainUnitId'] = this.trainUnitId;
-      getExamInfoByExamId(
-        page.currentPage,
-        page.pageSize,
-        Object.assign(params, this.query)
-      ).then((res) => {
-        const data = res.data.data;
-        this.page.total = data.total;
-        this.data = data.records;
-        this.loading = false;
-        this.selectionClear();
-      });
+      params["startTime"] = this.startTime;
+      params["trainUnitId"] = this.trainUnitId;
+      getExamInfoByExamId(1, 20, Object.assign(params, this.query)).then(
+        (res) => {
+          const data = res.data.data;
+          this.data = data.records;
+        }
+      );
+    },
+    //明细table
+    onLoadDetail(page, params = {}) {
+      //判断角色,如果是保安公司管理员或保安,只能查看当前公司的考试成绩
+      var that = this;
+      params["examDate"] = this.startTime;
+      params["trainUnitId"] = this.trainUnitId;
+      params["examType"] = 2;
+      getList(page.currentPage, page.pageSize, Object.assign(params)).then(
+        (res) => {
+          const data = res.data.data;
+          that.page.total = data.total;
+          that.dataDetail = data.records;
+        }
+      );
+    },
+    //每页数值改变
+    handleSizeChange(val) {
+      this.page.pageSize = val;
+      this.onLoadDetail(this.page);
+    },
+    //页数切换
+    handleCurrentChange(val) {
+      this.page.currentPage = val;
+      this.onLoadDetail(this.page);
     },
     questionBankSelectionClear() {
       this.questionBankSelectionList = [];
@@ -430,16 +626,20 @@
       this.dialog = true;
       this.trainUnitId = row.trainUnitId;
       this.startTime = row.startTime;
-      this.title = row.schoolName+row.startTime+"考试明细";
+      this.companyName = row.schoolName;
+      this.title = row.schoolName + row.startTime + "考试情况";
       this.onLoad(this.page);
+      this.onLoadDetail(this.page);
     },
     //行单击详情弹窗
     handleRowClick(row) {
       this.dialog = true;
       this.trainUnitId = row.trainUnitId;
       this.startTime = row.startTime;
-      this.title = row.schoolName+row.startTime+"考试明细";
+      this.companyName = row.schoolName;
+      this.title = row.schoolName + row.startTime + "考试情况";
       this.onLoad(this.page);
+      this.onLoadDetail(this.page);
     },
   },
 };

--
Gitblit v1.9.3