浏览代码

文档管理

zhangjie 1 年之前
父节点
当前提交
03d7f95b52

+ 6 - 0
src/components/UploadButton.vue

@@ -20,6 +20,7 @@
       :icon="btnIcon"
       :loading="loading"
       :disabled="disabled"
+      :class="btnClass"
       >{{ btnContent }}</el-button
     >
   </el-upload>
@@ -39,6 +40,10 @@ export default {
       type: String,
       default: "default",
     },
+    btnClass: {
+      type: String,
+      default: undefined,
+    },
     btnContent: {
       type: String,
     },
@@ -116,6 +121,7 @@ export default {
         formData.append(k, v);
       });
       formData.append("file", options.file);
+      formData.append("md5", this.headers["md5"]);
       this.$emit("uploading");
 
       return $post(options.action, formData, { headers: options.headers });

+ 2 - 2
src/modules/base/views/ApproveRecordManage.vue

@@ -172,7 +172,7 @@ import { approveRecordListPage, deleteApproveRecord } from "../api";
 import { examTaskGetOne } from "../../exam/api";
 import { AUDITING_STATUS } from "@/constants/enumerate";
 import pickerOptions from "@/constants/datePickerOptions";
-import ModifyTaskApply from "../../exam/components/ModifyTaskApply";
+import ModifyTaskApply from "../../exam/components/ModifyTaskApply.vue";
 
 export default {
   name: "approve-record-manage",
@@ -223,7 +223,7 @@ export default {
       this.current = page;
       this.getList();
     },
-    async toPreview(row) {
+    toPreview(row) {
       const types = {
         exam_task: this.previewExmaTask,
       };

+ 1 - 1
src/modules/course/api.js

@@ -106,7 +106,7 @@ export const documentListPage = (datas) => {
 // 文档管理-文档下载
 export const documentDownload = (id) => {
   return $postParam(
-    "/api/admin/mark/archive/document/export",
+    "/api/admin/mark/archive/document/download",
     { id },
     {
       responseType: "blob",

+ 89 - 36
src/modules/course/components/CourseDocumentDetail.vue

@@ -7,7 +7,7 @@
       :close-on-press-escape="false"
       top="20px"
       append-to-body
-      width="900px"
+      width="750px"
       @opened="getList"
     >
       <div slot="title">
@@ -29,17 +29,31 @@
           ></el-table-column>
           <el-table-column prop="name" label="材料名称"></el-table-column>
           <el-table-column
-            prop="number"
+            prop="fileCount"
             label="数量"
-            width="100"
+            width="80"
           ></el-table-column>
           <el-table-column
             class-name="action-column"
             label="操作"
             width="120px"
+            align="right"
             fixed="right"
           >
             <template slot-scope="scope">
+              <upload-button
+                v-if="checkUpload(scope.row)"
+                btn-content="上传"
+                btn-type="text"
+                btn-class="btn-primary"
+                :upload-url="uploadUrl"
+                :upload-data="{ id: scope.row.id }"
+                :format="format"
+                style="margin: 0"
+                @valid-error="validError"
+                @upload-success="uploadSuccess"
+              >
+              </upload-button>
               <el-button
                 v-if="checkView(scope.row)"
                 class="btn-primary"
@@ -55,24 +69,20 @@
                 >删除</el-button
               >
               <el-button
+                v-if="checkDownload(scope.row)"
                 class="btn-primary"
                 type="text"
                 :disabled="downloading"
                 @click="toDownload(scope.row)"
                 >下载</el-button
               >
-              <upload-button
-                v-if="checkUpload(scope.row)"
-                btn-content="上传"
-                btn-type="success"
-                :upload-url="uploadUrl"
-                :upload-data="{ id: scope.row.id }"
-                :format="['xls', 'xlsx']"
-                accept=".xls,.xlsx"
-                @valid-error="validError"
-                @upload-success="uploadSuccess"
+              <el-button
+                v-if="checkDownloadUrl(scope.row)"
+                class="btn-primary"
+                type="text"
+                @click="toDownloadUrl(scope.row)"
+                >下载</el-button
               >
-              </upload-button>
             </template>
           </el-table-column>
         </el-table>
@@ -87,6 +97,16 @@
       :course="course"
       @modified="getList"
     ></add-document-dialog>
+    <!-- ScoreReportPreview -->
+    <score-report-preview
+      ref="ScoreReportPreview"
+      :instance="reportParams"
+    ></score-report-preview>
+    <!-- PaperApproveTable -->
+    <paper-approve-table
+      :instance="course"
+      ref="PaperApproveTable"
+    ></paper-approve-table>
   </div>
 </template>
 
@@ -94,6 +114,9 @@
 import { downloadByApi } from "@/plugins/download";
 import { documentListPage, documentDownload, documentDelete } from "../api";
 import AddDocumentDialog from "./AddDocumentDialog.vue";
+import UploadButton from "@/components/UploadButton.vue";
+import ScoreReportPreview from "@/modules/mark/components/ScoreReportPreview.vue";
+import PaperApproveTable from "@/modules/exam/components/PaperApproveTable.vue";
 
 /*
 SYLLABUS("课程教学大纲", 1),
@@ -113,7 +136,12 @@ CUSTOM("自定义", 13),
 
 export default {
   name: "course-document-detail",
-  components: { AddDocumentDialog },
+  components: {
+    AddDocumentDialog,
+    UploadButton,
+    ScoreReportPreview,
+    PaperApproveTable,
+  },
   props: {
     course: {
       type: Object,
@@ -128,7 +156,10 @@ export default {
       dataList: [],
       curRow: {},
       downloading: false,
-      uploadUrl: "/api/admin/mark/archive/document/save",
+      uploadUrl: "/api/admin/mark/archive/document/import",
+      reportParams: {},
+      curExamTask: {},
+      format: ["docx", "doc", "xlsx", "xls", "pdf", "jpg", "png", "zip"],
     };
   },
   methods: {
@@ -139,21 +170,29 @@ export default {
       this.modalIsShow = true;
     },
     checkView(row) {
-      return [
-        "PAPER",
-        "ANSWER",
-        "PAPER_REPORT",
-        "APPROVE_RECORD",
-        "SCORE_REPORT",
-        "SIGN",
-        "CHECK_IN",
-      ].includes(row.code);
+      return ["PAPER", "ANSWER", "APPROVE_RECORD", "SCORE_REPORT"].includes(
+        row.type
+      );
     },
     checkDelete(row) {
-      return ["CUSTOM"].includes(row.code);
+      return ["CUSTOM"].includes(row.type);
     },
     checkUpload(row) {
-      return ["SYLLABUS", "PROCESS_SCORE"].includes(row.code);
+      return ["SYLLABUS", "PROCESS_SCORE", "PAPER_REPORT", "CHECK_IN"].includes(
+        row.type
+      );
+    },
+    checkDownload(row) {
+      return ["SCORE", "SHEET", "TRACK", "SIGN"].includes(row.type);
+    },
+    checkDownloadUrl(row) {
+      return [
+        "SYLLABUS",
+        "PROCESS_SCORE",
+        "PAPER_REPORT",
+        "CHECK_IN",
+        "CUSTOM",
+      ].includes(row.type);
     },
     async getList() {
       const datas = {
@@ -164,12 +203,30 @@ export default {
       this.dataList = res || [];
     },
     toView(row) {
-      if (!row.url) {
-        this.$message.error("当前无文档可预览");
+      // 试卷审批记录
+      if (row.type === "APPROVE_RECORD") {
+        this.$refs.PaperApproveTable.open();
+        return;
+      }
+      // 学生期末考试成绩分析
+      if (row.type === "SCORE_REPORT") {
+        this.reportParams = {
+          ...this.course,
+          filter: {},
+        };
+        this.$refs.ScoreReportPreview.open();
         return;
       }
 
-      window.open(row.url);
+      this.toDownloadUrl(row);
+    },
+    toDownloadUrl(row) {
+      if (!row.filePath) {
+        this.$message.error("当前无文档可下载");
+        return;
+      }
+
+      window.open(row.filePath);
     },
     async toDownload(row) {
       if (this.downloading) return;
@@ -200,16 +257,12 @@ export default {
         .catch(() => {});
     },
     // upload
-    toUpload(row) {
-      this.uploadData = { id: row.id };
-    },
     validError(errorData) {
       this.$message.error(errorData.message);
     },
     uploadSuccess(data) {
-      this.$message.success(data.data || "课程导入成功!");
-      this.$emit("modified");
-      this.cancel();
+      this.$message.success(data.data || "文档上传成功!");
+      this.getList();
     },
   },
 };

+ 3 - 4
src/modules/exam/api.js

@@ -88,10 +88,9 @@ export const taskApplyExamObject = ({ paperNumber, examId }) => {
     examId,
   });
 };
-export const examTaskApproveForm = (examTaskId) => {
-  return $postParam("/api/admin/exam/task/find_approve_form_json", {
-    examTaskId,
-  });
+export const examTaskApproveForm = (datas) => {
+  // examTaskId or examId and paperNumber
+  return $postParam("/api/admin/exam/task/find_approve_form_json", datas);
 };
 export const downloadExamTaskApproveForm = ({ examTaskId, htmlContent }) => {
   return $post(

+ 7 - 1
src/modules/exam/components/PaperApproveTable.vue

@@ -206,7 +206,13 @@ export default {
       this.basicInfo = {};
       this.examRoomInfoList = [];
       this.approvalInfoList = [];
-      const paper = await examTaskApproveForm(this.instance.id);
+      const datas = this.instance.id
+        ? { examTaskId: this.instance.id }
+        : {
+            examId: this.instance.examId,
+            paperNumber: this.instance.paperNumber,
+          };
+      const paper = await examTaskApproveForm(datas);
 
       this.basicInfo = paper.basicInfo;
       this.examRoomInfoList = paper.examRoomInfoList.map((item) => {

+ 1 - 1
src/modules/exam/views/TaskApplyManage.vue

@@ -216,7 +216,7 @@
 <script>
 import ModifyTaskApply from "../components/ModifyTaskApply";
 import CreateExamAndPrintTask from "../components/createExamAndPrintTask/CreateExamAndPrintTask";
-import PaperApproveTable from "../components/PaperApproveTable";
+import PaperApproveTable from "../components/PaperApproveTable.vue";
 import { AUDITING_STATUS } from "@/constants/enumerate";
 import pickerOptions from "@/constants/datePickerOptions";
 import {