浏览代码

文档管理接口调整

zhangjie 1 年之前
父节点
当前提交
64787dbfe4

+ 9 - 4
src/modules/base/components/ModifyExamStudent.vue

@@ -40,9 +40,9 @@
           clearable
         ></course-select>
       </el-form-item>
-      <el-form-item prop="examStudentName" label="姓名:">
+      <el-form-item prop="studentName" label="姓名:">
         <el-input
-          v-model.trim="modalForm.examStudentName"
+          v-model.trim="modalForm.studentName"
           placeholder="请输入姓名"
           clearable
         ></el-input>
@@ -100,12 +100,17 @@ const initModalForm = {
   semesterId: "",
   examId: "",
   courseCode: "",
-  examStudentName: "",
+  studentName: "",
   studentCode: "",
   college: "",
   major: "",
   teachClazz: "",
+  teacherCode: "",
   teacherName: "",
+  examEndTime: "",
+  examStartTime: "",
+  examPlace: "",
+  examRoom: "",
 };
 
 export default {
@@ -153,7 +158,7 @@ export default {
             trigger: "change",
           },
         ],
-        examStudentName: [
+        studentName: [
           {
             required: true,
             message: "请输入姓名",

+ 9 - 3
src/modules/base/views/CourseSimpleManage.vue

@@ -3,6 +3,11 @@
     <div class="part-box part-box-filter part-box-flex">
       <el-form ref="FilterForm" label-position="left" label-width="85px" inline>
         <template v-if="checkPrivilege('condition', 'condition')">
+          <secp-select
+            v-model="filter"
+            defaultSelectExam
+            @exam-default="search"
+          ></secp-select>
           <el-form-item label="课程名称:">
             <el-input
               v-model.trim="filter.courseName"
@@ -106,9 +111,7 @@ export default {
   components: { ModifyCourseSimple, CourseSimpleDetail },
   data() {
     return {
-      filter: {
-        courseName: "",
-      },
+      filter: { semesterId: "", examId: "", courseName: "" },
       current: 1,
       size: this.GLOBAL.pageSize,
       total: 0,
@@ -137,6 +140,9 @@ export default {
       this.current = page;
       this.getList();
     },
+    search() {
+      this.toPage(1);
+    },
     toAdd() {
       this.curCourse = {};
       this.$refs.ModifyCourseSimple.open();

+ 11 - 27
src/modules/base/views/ExamStudentManage.vue

@@ -2,30 +2,11 @@
   <div class="student-manage">
     <div class="part-box part-box-filter">
       <el-form ref="FilterForm" label-position="left" label-width="90px" inline>
-        <el-form-item label="学期:">
-          <semester-select
-            v-model="filter.semesterId"
-            default-select
-            placeholder="学期"
-            @default-selected="getList"
-          ></semester-select>
-        </el-form-item>
-        <el-form-item label="考试:">
-          <exam-select
-            v-model="filter.examId"
-            :semester-id="filter.semesterId"
-            placeholder="考试"
-          ></exam-select>
-        </el-form-item>
-        <el-form-item label="课程:">
-          <course-select
-            v-model.trim="filter.courseCode"
-            :semester-id="filter.semesterId"
-            :exam-id="filter.examId"
-            placeholder="课程"
-            clearable
-          ></course-select>
-        </el-form-item>
+        <secp-select
+          v-model="filter"
+          defaultSelectExam
+          @exam-default="search"
+        ></secp-select>
         <el-form-item label="任课老师:">
           <el-input
             v-model.trim="filter.teacher"
@@ -49,7 +30,7 @@
         </el-form-item>
         <el-form-item label="班级:">
           <el-input
-            v-model.trim="filter.teachClazz"
+            v-model.trim="filter.teachClazzId"
             placeholder="班级"
             clearable
           ></el-input>
@@ -126,7 +107,7 @@
         ></el-table-column>
         <el-table-column prop="courseName" label="课程名称"></el-table-column>
         <el-table-column prop="courseCode" label="课程代码"></el-table-column>
-        <el-table-column prop="examstudentName" label="姓名"></el-table-column>
+        <el-table-column prop="studentName" label="姓名"></el-table-column>
         <el-table-column prop="studentCode" label="学号"></el-table-column>
         <el-table-column prop="college" label="学院"></el-table-column>
         <el-table-column prop="major" label="专业"></el-table-column>
@@ -239,7 +220,7 @@ export default {
         teacher: "",
         college: "",
         major: "",
-        teachClazz: "",
+        teachClazzId: "",
         examStudentInfo: "",
       },
       queriedFilter: {},
@@ -283,6 +264,9 @@ export default {
       this.current = page;
       this.getList();
     },
+    search() {
+      // this.toPage(1);
+    },
     handleSelectionChange(val) {
       this.multipleSelection = val.map((item) => item.id);
     },

+ 11 - 3
src/modules/course/api.js

@@ -96,19 +96,27 @@ export const exportTargetReport = (datas) => {
 
 // 文档管理 ------------------->
 export const courseDocumentListPage = (datas) => {
-  return $postParam("/api/admin/course/degree/report/list", datas);
+  return $postParam("/api/admin/mark/archive/document/list", datas);
 };
 // 文档管理-文档列表
 export const documentListPage = (datas) => {
-  return $postParam("/api/admin/course/degree/report/list", datas);
+  return $postParam("/api/admin/mark/archive/document/detail", datas);
 };
 // 文档管理-文档下载
 export const documentDownload = (id) => {
   return $postParam(
-    "/api/admin/course/degree/report/export",
+    "/api/admin/mark/archive/document/export",
     { id },
     {
       responseType: "blob",
     }
   );
 };
+// 文档管理-文档新建
+export const documentSave = (datas) => {
+  return $postParam("/api/admin/mark/archive/document/save", datas);
+};
+// 文档管理-文档删除
+export const documentDelete = (id) => {
+  return $postParam("/api/admin/mark/archive/document/delete", { id });
+};

+ 152 - 0
src/modules/course/components/AddDocumentDialog.vue

@@ -0,0 +1,152 @@
+<template>
+  <el-dialog
+    class="add-document-dialog"
+    :visible.sync="modalIsShow"
+    title="上传文档"
+    top="10vh"
+    width="600px"
+    :close-on-click-modal="false"
+    :close-on-press-escape="false"
+    append-to-body
+    destroy-on-close
+    @opened="visibleChange"
+  >
+    <el-form
+      ref="modalFormComp"
+      label-width="100px"
+      :model="modalForm"
+      :rules="rules"
+    >
+      <el-form-item prop="documentName" label="材料名称:">
+        <el-input
+          v-model.trim="modalForm.documentName"
+          placeholder="材料名称"
+          clearable
+        ></el-input>
+      </el-form-item>
+      <el-form-item prop="file" label="选择文件:">
+        <upload-fetch-file
+          ref="UploadFetchFile"
+          input-width="320px"
+          :format="format"
+          @valid-change="validChange"
+          @file-change="fileChange"
+        ></upload-fetch-file>
+        <div>
+          <p class="tips-info">说明:</p>
+          <p class="tips-info">1.支持word、Excel、PDF、png/jpg、zip包;</p>
+          <p class="tips-info">2.仅能上传一个文件;</p>
+          <p class="tips-info">3.文件大小不超过20M。</p>
+        </div>
+      </el-form-item>
+    </el-form>
+
+    <div slot="footer">
+      <el-button type="primary" :disabled="isSubmit" @click="submit"
+        >确认</el-button
+      >
+      <el-button @click="cancel">关闭</el-button>
+    </div>
+  </el-dialog>
+</template>
+
+<script>
+import { documentSave } from "../api";
+import UploadFetchFile from "@/components/UploadFetchFile.vue";
+
+const initModalForm = {
+  examId: "",
+  paperNumber: "",
+  documentName: "",
+  file: null,
+  md5: "",
+};
+
+export default {
+  name: "add-document-dialog",
+  components: { UploadFetchFile },
+  props: {
+    course: {
+      type: Object,
+      default() {
+        return {};
+      },
+    },
+  },
+  data() {
+    return {
+      modalIsShow: false,
+      isSubmit: false,
+      modalForm: {
+        ...initModalForm,
+      },
+      rules: {
+        documentName: [
+          {
+            required: true,
+            message: "请输入材料名称",
+            trigger: "change",
+          },
+          {
+            message: "材料名称不能超过50个字符",
+            max: 50,
+            trigger: "change",
+          },
+        ],
+        file: [
+          {
+            required: true,
+            message: "请选择文件",
+            trigger: "change",
+          },
+        ],
+      },
+      format: ["docx", "doc", "xlsx", "xls", "pdf", "jpg", "png", "zip"],
+    };
+  },
+  methods: {
+    visibleChange() {
+      this.modalForm = this.$objAssign(initModalForm, this.course);
+    },
+    validChange(result) {
+      if (!result.success) {
+        this.modalForm.file = null;
+        this.modalForm.md5 = "";
+        this.$notify.error({ title: "错误提示", message: result.message });
+        this.$refs.modalFormComp.validateField("file");
+      }
+    },
+    fileChange({ file, md5 }) {
+      this.modalForm.file = file;
+      this.modalForm.md5 = md5;
+      this.$refs.modalFormComp.validateField("file");
+    },
+    cancel() {
+      this.modalIsShow = false;
+    },
+    open() {
+      this.modalIsShow = true;
+    },
+    async submit() {
+      const valid = await this.$refs.modalFormComp.validate().catch(() => {});
+      if (!valid) return;
+
+      if (this.isSubmit) return;
+      this.isSubmit = true;
+
+      let formData = new FormData();
+      Object.entries(this.modalForm).forEach(([k, v]) => {
+        formData.append(k, v);
+      });
+
+      const data = await documentSave(formData).catch(() => {});
+      this.isSubmit = false;
+      if (!data) return;
+
+      this.$message.success("添加成功!");
+      this.cancel();
+      this.$emit("modified");
+    },
+  },
+};
+</script>

+ 79 - 7
src/modules/course/components/CourseDocumentDetail.vue

@@ -14,18 +14,19 @@
         >
       </div>
       <div class="part-box part-box-pad">
+        <div class="box-justify">
+          <div></div>
+          <el-button type="primary" @click="toAdd">新建文档</el-button>
+        </div>
         <el-table :data="dataList">
           <el-table-column
             type="index"
             label="序号"
             width="70"
           ></el-table-column>
+          <el-table-column prop="name" label="材料名称"></el-table-column>
           <el-table-column
-            prop="paperNumber"
-            label="材料名称"
-          ></el-table-column>
-          <el-table-column
-            prop="paperNumber"
+            prop="number"
             label="数量"
             width="100"
           ></el-table-column>
@@ -37,17 +38,38 @@
           >
             <template slot-scope="scope">
               <el-button
+                v-if="checkView(scope.row)"
                 class="btn-primary"
                 type="text"
                 @click="toView(scope.row)"
                 >查看</el-button
               >
+              <el-button
+                v-if="checkDelete(scope.row)"
+                class="btn-danger"
+                type="text"
+                @click="toDelete(scope.row)"
+                >删除</el-button
+              >
               <el-button
                 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"
+              >
+              </upload-button>
             </template>
           </el-table-column>
         </el-table>
@@ -55,15 +77,24 @@
 
       <div slot="footer"></div>
     </el-dialog>
+
+    <!-- AddDocumentDialog -->
+    <add-document-dialog
+      ref="AddDocumentDialog"
+      :course="course"
+      @modified="getList"
+    ></add-document-dialog>
   </div>
 </template>
 
 <script>
 import { downloadByApi } from "@/plugins/download";
-import { documentListPage, documentDownload } from "../api";
+import { documentListPage, documentDownload, documentDelete } from "../api";
+import AddDocumentDialog from "./AddDocumentDialog.vue";
 
 export default {
   name: "course-document-detail",
+  components: { AddDocumentDialog },
   props: {
     course: {
       type: Object,
@@ -78,6 +109,7 @@ export default {
       dataList: [],
       curRow: {},
       downloading: false,
+      uploadUrl: "/api/admin/mark/archive/document/save",
     };
   },
   methods: {
@@ -87,6 +119,15 @@ export default {
     open() {
       this.modalIsShow = true;
     },
+    checkView(row) {
+      return ["paper"].includes(row.code);
+    },
+    checkDelete(row) {
+      return ["custom"].includes(row.code);
+    },
+    checkUpload(row) {
+      return ["dag"].includes(row.code);
+    },
     async getList() {
       const datas = {
         courseCode: this.course.courseCode,
@@ -95,7 +136,12 @@ export default {
       this.dataList = res || [];
     },
     toView(row) {
-      this.curRow = row;
+      if (!row.url) {
+        this.$message.error("当前无文档可预览");
+        return;
+      }
+
+      window.open(row.url);
     },
     async toDownload(row) {
       if (this.downloading) return;
@@ -111,6 +157,32 @@ export default {
       if (!res) return;
       this.$message.success("下载成功!");
     },
+    toAdd() {
+      this.$refs.AddDocumentDialog.open();
+    },
+    toDelete(row) {
+      this.$confirm(`确定要删除文档【${row.name}】吗?`, "提示", {
+        type: "warning",
+      })
+        .then(async () => {
+          await documentDelete(row.id);
+          this.$message.success("删除成功!");
+          this.getList();
+        })
+        .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();
+    },
   },
 };
 </script>