zhangjie 1 год назад
Родитель
Сommit
62555e24d5

+ 214 - 189
src/modules/mark/components/ScoreClassDetail.vue

@@ -1,196 +1,209 @@
 <template>
-  <el-dialog
-    class="modify-mark-params"
-    :visible.sync="modalIsShow"
-    top="0"
-    :close-on-click-modal="false"
-    :close-on-press-escape="false"
-    :show-close="false"
-    append-to-body
-    fullscreen
-    @open="search"
-  >
-    <div slot="title">
-      <h2 class="el-dialog__title">班级详情</h2>
-      <button class="el-dialog__headerbtn" @click="cancel"></button>
-    </div>
-
-    <div class="part-box part-box-filter part-box-flex">
-      <el-form ref="FilterForm" label-position="left" label-width="85px" inline>
-        <el-form-item label="学院">
-          <el-input v-model.trim="filter.college" placeholder="学院" clearable>
-          </el-input>
-        </el-form-item>
-        <el-form-item label="专业">
-          <el-input
-            v-model.trim="filter.majorName"
-            placeholder="专业"
-            clearable
-          >
-          </el-input>
-        </el-form-item>
-        <el-form-item label="班级">
-          <el-input
-            v-model.trim="filter.className"
-            placeholder="班级"
-            clearable
-          >
-          </el-input>
-        </el-form-item>
-        <el-form-item label="姓名">
-          <el-input
-            v-model.trim="filter.studentName"
-            placeholder="姓名"
-            clearable
-          >
-          </el-input>
-        </el-form-item>
-        <el-form-item label="学号">
-          <el-input
-            v-model.trim="filter.studentCode"
-            placeholder="学号"
-            clearable
-          >
-          </el-input>
-        </el-form-item>
-        <el-form-item label="学号区间">
-          <el-input
-            v-model.trim="filter.startStudentCode"
-            placeholder="起始学号"
-            clearable
-            class="width-200"
-          >
-          </el-input>
-          <span class="mlr-1">-</span>
-          <el-input
-            v-model.trim="filter.endStudentCode"
-            placeholder="终止学号"
-            clearable
-            class="width-200"
-          >
-          </el-input>
-        </el-form-item>
-        <el-form-item label="成绩区间">
-          <el-input-number
-            v-model.trim="filter.startScore"
-            placeholder="成绩最低分"
-            :min="0"
-            :max="9999"
-            :step="0.01"
-            step-strictly
-            :controls="false"
-            clearable
-          >
-          </el-input-number>
-          <span class="mlr-1">-</span>
-          <el-input-number
-            v-model="filter.endScore"
-            placeholder="成绩最高分"
-            :min="0"
-            :max="9999"
-            :step="0.01"
-            step-strictly
-            :controls="false"
-            clearable
-          >
-          </el-input-number>
-        </el-form-item>
-        <el-form-item label-width="0px">
-          <el-button type="primary" @click="search">查询</el-button>
-        </el-form-item>
-      </el-form>
-      <div class="part-box-action">
-        <el-button
-          type="primary"
-          :disabled="downloading"
-          @click="toExportScore"
-        >
-          成绩导出
-        </el-button>
+  <div>
+    <el-dialog
+      class="modify-mark-params"
+      :visible.sync="modalIsShow"
+      top="0"
+      :close-on-click-modal="false"
+      :close-on-press-escape="false"
+      :show-close="false"
+      append-to-body
+      fullscreen
+      @open="search"
+    >
+      <div slot="title">
+        <h2 class="el-dialog__title">班级详情</h2>
+        <button class="el-dialog__headerbtn" @click="cancel"></button>
       </div>
-    </div>
 
-    <div class="part-box part-box-pad">
-      <el-table ref="TableList" :data="dataList" @sort-change="sortChange">
-        <el-table-column
-          type="index"
-          label="序号"
-          width="70"
-          :index="indexMethod"
-        ></el-table-column>
-        <el-table-column prop="studentName" label="姓名" min-width="100">
-        </el-table-column>
-        <el-table-column
-          prop="studentCode"
-          label="学号"
-          width="180"
-          sortable
-        ></el-table-column>
-        <el-table-column
-          prop="college"
-          label="院系"
-          width="180"
-        ></el-table-column>
-        <el-table-column
-          prop="majorName"
-          label="专业"
-          width="180"
-        ></el-table-column>
-        <el-table-column
-          prop="className"
-          label="班级"
-          min-width="100"
-        ></el-table-column>
-        <el-table-column prop="checkTime" label="考试时间" width="180">
-        </el-table-column>
-        <el-table-column
-          prop="courseName"
-          label="课程名称"
-          min-width="100"
-        ></el-table-column>
-        <el-table-column
-          prop="totalScore"
-          label="成绩"
-          width="80"
-          sortable
-        ></el-table-column>
-        <el-table-column
-          class-name="action-column"
-          label="操作"
-          width="120"
-          fixed="right"
+      <div class="part-box part-box-filter part-box-flex">
+        <el-form
+          ref="FilterForm"
+          label-position="left"
+          label-width="85px"
+          inline
         >
-          <template slot-scope="scope">
-            <el-button
-              class="btn-primary"
-              type="text"
-              @click="toViewSheetPaper(scope.row)"
-              >原图</el-button
+          <el-form-item label="学院">
+            <el-input
+              v-model.trim="filter.college"
+              placeholder="学院"
+              clearable
             >
-            <el-button
-              class="btn-primary"
-              type="text"
-              @click="toViewTrack(scope.row)"
-              >轨迹图</el-button
+            </el-input>
+          </el-form-item>
+          <el-form-item label="专业">
+            <el-input
+              v-model.trim="filter.majorName"
+              placeholder="专业"
+              clearable
             >
-          </template>
-        </el-table-column>
-      </el-table>
-      <div class="part-page">
-        <el-pagination
-          background
-          layout="total, sizes, prev, pager, next, jumper"
-          :pager-count="5"
-          :current-page="current"
-          :total="total"
-          :page-size="size"
-          @current-change="toPage"
-          @size-change="pageSizeChange"
-        >
-        </el-pagination>
+            </el-input>
+          </el-form-item>
+          <el-form-item label="班级">
+            <el-input
+              v-model.trim="filter.className"
+              placeholder="班级"
+              clearable
+            >
+            </el-input>
+          </el-form-item>
+          <el-form-item label="姓名">
+            <el-input
+              v-model.trim="filter.studentName"
+              placeholder="姓名"
+              clearable
+            >
+            </el-input>
+          </el-form-item>
+          <el-form-item label="学号">
+            <el-input
+              v-model.trim="filter.studentCode"
+              placeholder="学号"
+              clearable
+            >
+            </el-input>
+          </el-form-item>
+          <el-form-item label="学号区间">
+            <el-input
+              v-model.trim="filter.startStudentCode"
+              placeholder="起始学号"
+              clearable
+              class="width-200"
+            >
+            </el-input>
+            <span class="mlr-1">-</span>
+            <el-input
+              v-model.trim="filter.endStudentCode"
+              placeholder="终止学号"
+              clearable
+              class="width-200"
+            >
+            </el-input>
+          </el-form-item>
+          <el-form-item label="成绩区间">
+            <el-input-number
+              v-model.trim="filter.startScore"
+              placeholder="成绩最低分"
+              :min="0"
+              :max="9999"
+              :step="0.01"
+              step-strictly
+              :controls="false"
+              clearable
+            >
+            </el-input-number>
+            <span class="mlr-1">-</span>
+            <el-input-number
+              v-model="filter.endScore"
+              placeholder="成绩最高分"
+              :min="0"
+              :max="9999"
+              :step="0.01"
+              step-strictly
+              :controls="false"
+              clearable
+            >
+            </el-input-number>
+          </el-form-item>
+          <el-form-item label-width="0px">
+            <el-button type="primary" @click="search">查询</el-button>
+          </el-form-item>
+        </el-form>
+        <div class="part-box-action">
+          <el-button type="primary" @click="toReport">成绩报告</el-button>
+          <el-button
+            type="success"
+            :disabled="downloading"
+            @click="toExportScore"
+          >
+            成绩导出
+          </el-button>
+        </div>
       </div>
-    </div>
 
+      <div class="part-box part-box-pad">
+        <el-table ref="TableList" :data="dataList" @sort-change="sortChange">
+          <el-table-column
+            type="index"
+            label="序号"
+            width="70"
+            :index="indexMethod"
+          ></el-table-column>
+          <el-table-column prop="studentName" label="姓名" min-width="100">
+          </el-table-column>
+          <el-table-column
+            prop="studentCode"
+            label="学号"
+            width="180"
+            sortable
+          ></el-table-column>
+          <el-table-column
+            prop="college"
+            label="院系"
+            width="180"
+          ></el-table-column>
+          <el-table-column
+            prop="majorName"
+            label="专业"
+            width="180"
+          ></el-table-column>
+          <el-table-column
+            prop="className"
+            label="班级"
+            min-width="100"
+          ></el-table-column>
+          <el-table-column prop="checkTime" label="考试时间" width="180">
+          </el-table-column>
+          <el-table-column
+            prop="courseName"
+            label="课程名称"
+            min-width="100"
+          ></el-table-column>
+          <el-table-column
+            prop="totalScore"
+            label="成绩"
+            width="80"
+            sortable
+          ></el-table-column>
+          <el-table-column
+            class-name="action-column"
+            label="操作"
+            width="120"
+            fixed="right"
+          >
+            <template slot-scope="scope">
+              <el-button
+                class="btn-primary"
+                type="text"
+                @click="toViewSheetPaper(scope.row)"
+                >原图</el-button
+              >
+              <el-button
+                class="btn-primary"
+                type="text"
+                @click="toViewTrack(scope.row)"
+                >轨迹图</el-button
+              >
+            </template>
+          </el-table-column>
+        </el-table>
+        <div class="part-page">
+          <el-pagination
+            background
+            layout="total, sizes, prev, pager, next, jumper"
+            :pager-count="5"
+            :current-page="current"
+            :total="total"
+            :page-size="size"
+            @current-change="toPage"
+            @size-change="pageSizeChange"
+          >
+          </el-pagination>
+        </div>
+      </div>
+
+      <div slot="footer"></div>
+    </el-dialog>
     <!-- image-preview -->
     <simple-image-preview
       :cur-image="curImage"
@@ -198,21 +211,25 @@
       @on-next="toNextImage"
       ref="SimpleImagePreview"
     ></simple-image-preview>
-
-    <div slot="footer"></div>
-  </el-dialog>
+    <!-- ScoreReportPreview -->
+    <score-report-preview
+      ref="ScoreReportPreview"
+      :instance="reportParams"
+    ></score-report-preview>
+  </div>
 </template>
 
 <script>
 import { scoreClassDetailListPage, scoreClassDetailScoreExport } from "../api";
 import SimpleImagePreview from "@/components/SimpleImagePreview";
+import ScoreReportPreview from "./ScoreReportPreview.vue";
 import { downloadByApi } from "@/plugins/download";
 import markMinxin from "../markMinxin";
 import { parseTimeRangeDateAndTime } from "@/plugins/utils";
 
 export default {
   name: "score-class-detail",
-  components: { SimpleImagePreview },
+  components: { SimpleImagePreview, ScoreReportPreview },
   mixins: [markMinxin],
   props: {
     instance: {
@@ -243,6 +260,7 @@ export default {
       total: 0,
       dataList: [],
       downloading: false,
+      reportParams: {},
       // img view
       curImage: {},
       curImageIndex: 0,
@@ -306,6 +324,13 @@ export default {
       }
       this.getList();
     },
+    toReport() {
+      this.reportParams = {
+        ...this.instance,
+        className: this.filter.className,
+      };
+      this.$refs.ScoreReportPreview.open();
+    },
     async toExportScore() {
       if (this.downloading) return;
       this.downloading = true;

+ 12 - 2
src/modules/mark/components/ScoreReportPreview.vue

@@ -11,11 +11,13 @@
   >
     <div class="box-justify" slot="title">
       <h2 class="el-dialog__title">成绩报告</h2>
+      <span>{{ title }}</span>
+
       <div>
         <el-button type="primary" :loading="downloading" @click="toExportScore"
           >下载报告</el-button
         >
-        <el-button type="primary" @click="cancel">取消</el-button>
+        <el-button type="danger" @click="cancel">取消</el-button>
       </div>
     </div>
 
@@ -47,6 +49,14 @@ export default {
       downloading: false,
     };
   },
+  computed: {
+    title() {
+      const course = `${this.instance.courseName}(${this.instance.courseCode})`;
+      return this.instance.className
+        ? `${this.instance.className}-${course}`
+        : course;
+    },
+  },
   methods: {
     cancel() {
       this.modalIsShow = false;
@@ -58,7 +68,7 @@ export default {
       if (this.downloading) return;
       this.downloading = true;
 
-      const filename = `${this.instance.courseName}(${this.instance.courseCode}).pdf`;
+      const filename = `${this.title}.pdf`;
       const res = await downloadByApi(() => {
         return scoreReportExport({
           // examId: this.instance.examId,

+ 2 - 19
src/modules/mark/views/ScoreManage.vue

@@ -110,7 +110,7 @@
         <el-table-column
           class-name="action-column"
           label="操作"
-          width="160px"
+          width="100px"
           fixed="right"
         >
           <template slot-scope="scope">
@@ -121,13 +121,6 @@
               @click="toClass(scope.row)"
               >班级详情</el-button
             >
-            <el-button
-              v-if="checkPrivilege('link', 'ScoreReport')"
-              class="btn-primary"
-              type="text"
-              @click="toReport(scope.row)"
-              >成绩报告</el-button
-            >
           </template>
         </el-table-column>
       </el-table>
@@ -151,22 +144,16 @@
       ref="ScoreClassDetail"
       :instance="curRow"
     ></score-class-detail>
-    <!-- ScoreReportPreview -->
-    <score-report-preview
-      ref="ScoreReportPreview"
-      :instance="curRow"
-    ></score-report-preview>
   </div>
 </template>
 
 <script>
 import { scoreListPage } from "../api";
 import ScoreClassDetail from "../components/ScoreClassDetail.vue";
-import ScoreReportPreview from "../components/ScoreReportPreview.vue";
 
 export default {
   name: "score-manage",
-  components: { ScoreClassDetail, ScoreReportPreview },
+  components: { ScoreClassDetail },
   data() {
     return {
       filter: {
@@ -201,10 +188,6 @@ export default {
       this.curRow = row;
       this.$refs.ScoreClassDetail.open();
     },
-    toReport(row) {
-      this.curRow = row;
-      this.$refs.ScoreReportPreview.open();
-    },
   },
 };
 </script>