zhangjie пре 10 месеци
родитељ
комит
0ba3dcbfc6

+ 4 - 2
src/modules/admin/api.js

@@ -151,8 +151,10 @@ export const uploadPackage = (datas, config = {}) => {
 
 // tool-manage
 export const toolInfo = () => {
-  return $postParam("/api/admin/sys/client/tool/external", {});
+  return $postParam("/api/admin/sys/tools/external", {
+    type: "PICTURE_DOWNLOAD",
+  });
 };
 export const uploadTool = (datas, config = {}) => {
-  return $post("/api/admin/sys/client/tool/upload", datas, config);
+  return $post("/api/admin/sys/tools/upload", datas, config);
 };

+ 3 - 12
src/modules/admin/views/ToolManage.vue

@@ -46,14 +46,10 @@
       </el-col>
       <el-col :span="12">
         <el-card class="card-box package-card" header="包信息">
-          <h3>
-            安装包(更新时间:{{ info.installUploadTime | timestampFilter }})
-          </h3>
+          <h3>安装包(更新时间:{{ info.createTime | timestampFilter }})</h3>
           <p>
             <span>下载地址:</span>
-            <a v-if="installUrl" :href="installUrl" download>
-              {{ info.fileName }}</a
-            >
+            <a v-if="info.url" :href="info.url" download> 图片下载工具</a>
             <span v-else>--</span>
           </p>
         </el-card>
@@ -70,7 +66,7 @@ export default {
   name: "tool-manage",
   data() {
     return {
-      info: {},
+      info: { url: "", createTime: 0 },
       result: {
         message: "",
         success: true,
@@ -83,11 +79,6 @@ export default {
       uploadController: null,
     };
   },
-  computed: {
-    installUrl() {
-      return this.info.prefix ? `${this.info.prefix}/${this.info.url}` : "";
-    },
-  },
   mounted() {
     // this.getInfo();
   },

+ 6 - 0
src/modules/course/api.js

@@ -18,6 +18,12 @@ export const documentDownload = (id) => {
     }
   );
 };
+// 文档管理-文档批量下载
+export const documentBatchDownload = (datas) => {
+  return $postParam("/api/admin/mark/archive/document/download", datas, {
+    responseType: "blob",
+  });
+};
 // 文档管理-文档新建
 export const documentSave = (datas) => {
   return $post("/api/admin/mark/archive/document/save", datas);

+ 58 - 4
src/modules/course/components/CourseDocumentDetail.vue

@@ -16,9 +16,24 @@
           >{{ course.courseName }}({{ course.courseCode }})</span
         >
       </div>
-      <div v-if="checkPrivilege('button', 'add')" class="box-justify mb-2">
-        <div></div>
-        <el-button type="primary" @click="toAdd">新建文档</el-button>
+      <div class="box-justify mb-2">
+        <div>
+          <el-button
+            v-if="checkPrivilege('button', 'batchDownload')"
+            type="primary"
+            :loading="bloading"
+            @click="toBatchDownload"
+            >批量下载</el-button
+          >
+        </div>
+        <div>
+          <el-button
+            v-if="checkPrivilege('button', 'add')"
+            type="primary"
+            @click="toAdd"
+            >新建文档</el-button
+          >
+        </div>
       </div>
       <div class="part-box part-box-pad">
         <el-table :data="dataList">
@@ -88,6 +103,15 @@
         </el-table>
       </div>
 
+      <div class="tips-markedness">
+        <p v-if="toolUrl">
+          学生答卷原图和轨迹图请先下载工具后登录账号再进行下载
+          <a class="btn-primary btn-link ml-2" :href="toolUrl" download
+            >点击下载工具</a
+          >
+        </p>
+      </div>
+
       <div slot="footer"></div>
     </el-dialog>
 
@@ -112,7 +136,13 @@
 
 <script>
 import { downloadByApi } from "@/plugins/download";
-import { documentListPage, documentDownload, documentDelete } from "../api";
+import { toolInfo } from "@/modules/admin/api";
+import {
+  documentListPage,
+  documentDownload,
+  documentDelete,
+  documentBatchDownload,
+} from "../api";
 import AddDocumentDialog from "./AddDocumentDialog.vue";
 import UploadButton from "@/components/UploadButton.vue";
 import ScoreReportPreview from "@/modules/mark/components/ScoreReportPreview.vue";
@@ -160,9 +190,16 @@ export default {
       reportParams: {},
       curExamTask: {},
       format: ["docx", "doc", "xlsx", "xls", "pdf", "jpg", "png", "zip"],
+      toolUrl: "",
+      bloading: false,
     };
   },
   methods: {
+    async getToolInfo() {
+      const res = await toolInfo();
+      const info = res || {};
+      this.toolUrl = info.url || "";
+    },
     cancel() {
       this.modalIsShow = false;
     },
@@ -256,6 +293,23 @@ export default {
         })
         .catch(() => {});
     },
+    async toBatchDownload() {
+      if (this.bloading) return;
+      this.bloading = true;
+
+      const res = await downloadByApi(() => {
+        return documentBatchDownload({
+          examId: this.course.examId,
+          paperNumber: this.course.paperNumber,
+        });
+      }).catch((e) => {
+        this.$message.error(e || "下载失败,请重新尝试!");
+      });
+      this.bloading = false;
+
+      if (!res) return;
+      this.$message.success("下载成功!");
+    },
     // upload
     validError(errorData) {
       this.$message.error(errorData.message);

+ 1 - 0
src/modules/course/views/CourseDocumentManage.vue

@@ -93,6 +93,7 @@ export default {
         semesterId: "",
         examId: "",
         courseId: "",
+        openCollegeId: "",
       },
       current: 1,
       size: this.GLOBAL.pageSize,

+ 10 - 0
src/modules/mark/api.js

@@ -192,6 +192,16 @@ export const scoreDetailListExport = (datas) => {
 export const scoreListPage = (datas) => {
   return $postParam("/api/admin/mark/archive/score/list", datas);
 };
+export const scoreTotalAnalysisDownload = (datas) => {
+  return $postParam("/api/admin/mark/archive/score/download", datas, {
+    responseType: "blob",
+  });
+};
+export const scoreAllAnalysisReportDownload = (datas) => {
+  return $postParam("/api/admin/mark/archive/score/download", datas, {
+    responseType: "blob",
+  });
+};
 export const scoreClassDetailListPage = (datas) => {
   return $postParam("/api/admin/mark/archive/student/list", datas);
 };

+ 60 - 27
src/modules/mark/views/ScoreManage.vue

@@ -3,32 +3,11 @@
     <div class="part-box part-box-filter">
       <el-form ref="FilterForm" label-position="left" inline>
         <template v-if="checkPrivilege('condition', 'condition')">
-          <el-form-item label="学期:">
-            <semester-select
-              v-model="filter.semesterId"
-              default-select
-              :clearable="false"
-            ></semester-select>
-          </el-form-item>
-          <el-form-item label="考试:">
-            <exam-select
-              v-model="filter.examId"
-              :semester-id="filter.semesterId"
-              default-select
-              :clearable="false"
-              @default-selected="toPage(1)"
-            ></exam-select>
-          </el-form-item>
-          <el-form-item label="课程:">
-            <course-select
-              v-model="filter.courseId"
-              placeholder="课程"
-              filterable
-              clearable
-              :semester-id="filter.semesterId"
-              :exam-id="filter.examId"
-            ></course-select>
-          </el-form-item>
+          <secp-select
+            v-model="filter"
+            defaultSelectExam
+            @exam-default="search"
+          ></secp-select>
         </template>
         <el-form-item label-width="0px">
           <el-button
@@ -39,6 +18,23 @@
           >
         </el-form-item>
       </el-form>
+
+      <div class="part-box-action">
+        <el-button
+          v-if="checkPrivilege('button', 'ObjectiveCalculate')"
+          type="primary"
+          :loading="loading"
+          @click="exportTotalAnalysis"
+          >总量分析</el-button
+        >
+        <el-button
+          v-if="checkPrivilege('button', 'ObjectiveCalculate')"
+          type="primary"
+          :loading="loading"
+          @click="batchAnalysisReport"
+          >批量下载分析报告</el-button
+        >
+      </div>
     </div>
 
     <div class="part-box part-box-pad">
@@ -164,8 +160,13 @@
 </template>
 
 <script>
-import { scoreListPage } from "../api";
+import {
+  scoreListPage,
+  scoreTotalAnalysisDownload,
+  scoreAllAnalysisReportDownload,
+} from "../api";
 import ScoreClassDetail from "../components/ScoreClassDetail.vue";
+import { downloadByApi } from "@/plugins/download";
 
 export default {
   name: "score-manage",
@@ -176,6 +177,7 @@ export default {
         semesterId: "",
         examId: "",
         courseId: "",
+        openCollegeId: "",
       },
       current: 1,
       size: this.GLOBAL.pageSize,
@@ -200,6 +202,9 @@ export default {
       this.current = page;
       this.getList();
     },
+    search() {
+      this.toPage(1);
+    },
     toClass(row) {
       this.curRow = row;
       this.$refs.ScoreClassDetail.open();
@@ -207,6 +212,34 @@ export default {
     toMarkManage() {
       this.$router.push({ name: "MarkManage" });
     },
+    async exportTotalAnalysis() {
+      if (this.downloading) return;
+      this.downloading = true;
+
+      const res = await downloadByApi(() => {
+        return scoreTotalAnalysisDownload(this.filter);
+      }).catch((e) => {
+        this.$message.error(e || "下载失败,请重新尝试!");
+      });
+      this.downloading = false;
+
+      if (!res) return;
+      this.$message.success("下载成功!");
+    },
+    async batchAnalysisReport() {
+      if (this.downloading) return;
+      this.downloading = true;
+
+      const res = await downloadByApi(() => {
+        return scoreAllAnalysisReportDownload(this.filter);
+      }).catch((e) => {
+        this.$message.error(e || "下载失败,请重新尝试!");
+      });
+      this.downloading = false;
+
+      if (!res) return;
+      this.$message.success("下载成功!");
+    },
   },
 };
 </script>