Эх сурвалжийг харах

前端模板全部转入后台

zhangjie 2 жил өмнө
parent
commit
35c18ecdd6
31 өөрчлөгдсөн 184 нэмэгдсэн , 26 устгасан
  1. BIN
      public/img/card-001.jpeg
  2. BIN
      public/img/card-002.jpeg
  3. BIN
      public/temps/classTemplate.xlsx
  4. BIN
      public/temps/clazzSimpleStudentTemplate.xlsx
  5. BIN
      public/temps/courseSimpleTemplate.xlsx
  6. BIN
      public/temps/courseTemplate.xlsx
  7. BIN
      public/temps/examStatisticsTemplate.xlsx
  8. BIN
      public/temps/examStudentTemplate.xlsx
  9. BIN
      public/temps/examTaskTemplate.xlsx
  10. BIN
      public/temps/objectiveQuestionTemplate.xlsx
  11. BIN
      public/temps/orgTemplate.xlsx
  12. BIN
      public/temps/studentTemplate.xlsx
  13. BIN
      public/temps/subjectiveQuestionTemplate.xlsx
  14. BIN
      public/temps/teacherSimpleTemplate.xlsx
  15. BIN
      public/temps/userTemplate.xlsx
  16. 23 1
      src/constants/enumerate.js
  17. 36 0
      src/mixins/templateDownload.js
  18. 7 3
      src/modules/base/components/course-simple/ModifyCourseSimple.vue
  19. 3 2
      src/modules/base/components/course-simple/ModifyStudentSimple.vue
  20. 7 3
      src/modules/base/components/course-simple/ModifyTeacherSimple.vue
  21. 58 0
      src/modules/base/views/ApproveRecordManage.vue
  22. 3 2
      src/modules/base/views/CourseManage.vue
  23. 3 2
      src/modules/base/views/OrganizationManage.vue
  24. 3 2
      src/modules/base/views/StudentManage.vue
  25. 3 2
      src/modules/base/views/UserManage.vue
  26. 4 1
      src/modules/exam/components/BatchAddExamTask.vue
  27. 4 4
      src/modules/exam/components/createExamAndPrintTask/InfoPrintTask.vue
  28. 3 2
      src/modules/exam/views/StatisticsManage.vue
  29. 1 1
      src/modules/exam/views/TaskApplyManage.vue
  30. 3 0
      src/modules/print/api.js
  31. 23 1
      src/modules/print/views/PrintTaskManage.vue

BIN
public/img/card-001.jpeg


BIN
public/img/card-002.jpeg


BIN
public/temps/classTemplate.xlsx


BIN
public/temps/clazzSimpleStudentTemplate.xlsx


BIN
public/temps/courseSimpleTemplate.xlsx


BIN
public/temps/courseTemplate.xlsx


BIN
public/temps/examStatisticsTemplate.xlsx


BIN
public/temps/examStudentTemplate.xlsx


BIN
public/temps/examTaskTemplate.xlsx


BIN
public/temps/objectiveQuestionTemplate.xlsx


BIN
public/temps/orgTemplate.xlsx


BIN
public/temps/studentTemplate.xlsx


BIN
public/temps/subjectiveQuestionTemplate.xlsx


BIN
public/temps/teacherSimpleTemplate.xlsx


BIN
public/temps/userTemplate.xlsx


+ 23 - 1
src/constants/enumerate.js

@@ -214,7 +214,29 @@ export const DATA_TASK_RESULT = {
   SUCCESS: "成功",
   ERROR: "失败",
 };
-
+// 导入模板类型
+export const IMPORT_TEMPLATE_TYPE = {
+  // 组织架构导入模板
+  org: "TEMPLATE_ORG",
+  // 用户导入模板/
+  user: "TEMPLATE_USER",
+  // 学生导入模板
+  student: "TEMPLATE_STUDENT",
+  // 课程导入模板
+  course: "TEMPLATE_COURSE",
+  // 教学班学生导入模板
+  teachClassStudent: "TEMPLATE_TEACH_CLASS",
+  // 教学课程导入模板
+  teachCourse: "TEMPLATE_TEACH_COURSE",
+  // 教师团队导入模板
+  teachTeacher: "TEMPLATE_TEACH_TEACHER",
+  // 命题任务导入模板
+  examTask: "TEMPLATE_EXAM_TASK",
+  // 命题任务学生导入模板
+  examTaskStudent: "TEMPLATE_EXAM_TASK_STUDENT",
+  // 命题计划导入模板
+  examStatistics: "TEMPLATE_EXAM_STATISTICS",
+};
 // 印刷 -------------->
 // 印刷计划状态
 export const PRINT_PLAN_STATUS = {

+ 36 - 0
src/mixins/templateDownload.js

@@ -0,0 +1,36 @@
+import { downloadByApi } from "@/plugins/download";
+import { $post } from "@/plugins/axios";
+import { IMPORT_TEMPLATE_TYPE } from "@/constants/enumerate";
+
+export default {
+  data() {
+    return {
+      tempDownloading: false,
+    };
+  },
+  methods: {
+    async downloadTemplate(type) {
+      if (this.tempDownloading) return;
+      this.tempDownloading = true;
+
+      const res = await downloadByApi(() => {
+        return $post(
+          "/api/admin/common/download_import_template",
+          {},
+          {
+            responseType: "blob",
+            params: {
+              type: IMPORT_TEMPLATE_TYPE[type],
+            },
+          }
+        );
+      }).catch((e) => {
+        this.$message.error(e || "下载失败,请重新尝试!");
+      });
+      this.tempDownloading = false;
+
+      if (!res) return;
+      this.$message.success("下载成功!");
+    },
+  },
+};

+ 7 - 3
src/modules/base/components/course-simple/ModifyCourseSimple.vue

@@ -54,8 +54,11 @@
     </div>
     <!-- import -->
     <div v-if="curTab === 'import'" class="tab-body">
-      <el-button type="success" icon="el-icon-download"
-        ><a :href="downloadUrl" :download="dfilename">模板下载</a></el-button
+      <el-button
+        type="success"
+        icon="el-icon-download"
+        @click="downloadTemplate('teachCourse')"
+        >模板下载</el-button
       >
       <upload-button
         btn-icon="el-icon-circle-plus-outline"
@@ -82,6 +85,7 @@
 import { updateCourseSimple, batchAddCourseSimple } from "../../api";
 import UploadButton from "@/components/UploadButton";
 import SelectSimpleCourse from "./SelectSimpleCourse.vue";
+import templateDownload from "@/mixins/templateDownload";
 
 const initModalForm = {
   id: null,
@@ -92,6 +96,7 @@ const initModalForm = {
 export default {
   name: "modify-course-simple",
   components: { UploadButton, SelectSimpleCourse },
+  mixins: [templateDownload],
   computed: {
     IS_IMPORT() {
       return this.curTab === "import";
@@ -141,7 +146,6 @@ export default {
       selectedCourseIds: [],
       // import
       uploadUrl: "/api/admin/teach/course/import",
-      downloadUrl: "/temps/courseSimpleTemplate.xlsx",
       dfilename: "教学课程导入模板.xlsx",
     };
   },

+ 3 - 2
src/modules/base/components/course-simple/ModifyStudentSimple.vue

@@ -62,7 +62,7 @@
         btn-icon="el-icon-circle-plus-outline"
         btn-content="批量导入"
         btn-type="success"
-        :upload-url="uploadUrl"
+        :download-handle="() => downloadTemplate('teachClassStudent')"
         :upload-data="uploadData"
         :format="['xls', 'xlsx']"
         accept=".xls,.xlsx"
@@ -86,6 +86,7 @@
 import { updateStudentSimple, batchAddStudentSimple } from "../../api";
 import UploadButton from "@/components/UploadButton";
 import SelectSimpleStudent from "./SelectSimpleStudent.vue";
+import templateDownload from "@/mixins/templateDownload";
 
 const initModalForm = {
   id: null,
@@ -97,6 +98,7 @@ const initModalForm = {
 export default {
   name: "modify-student-simple",
   components: { UploadButton, SelectSimpleStudent },
+  mixins: [templateDownload],
   props: {
     instance: {
       type: Object,
@@ -160,7 +162,6 @@ export default {
       // import
       uploadData: {},
       uploadUrl: "/api/admin/teach/student/import",
-      downloadUrl: "/temps/clazzSimpleStudentTemplate.xlsx",
       dfilename: "教学班级学生导入模板.xlsx",
     };
   },

+ 7 - 3
src/modules/base/components/course-simple/ModifyTeacherSimple.vue

@@ -54,8 +54,11 @@
     </div>
     <!-- import -->
     <div v-if="curTab === 'import'" class="tab-body">
-      <el-button type="success" icon="el-icon-download"
-        ><a :href="downloadUrl" :download="dfilename">模板下载</a></el-button
+      <el-button
+        type="success"
+        icon="el-icon-download"
+        @click="downloadTemplate('teachTeacher')"
+        >模板下载</el-button
       >
       <upload-button
         btn-icon="el-icon-circle-plus-outline"
@@ -83,6 +86,7 @@
 import { updateTeacherSimple, batchAddTeacherSimple } from "../../api";
 import UploadButton from "@/components/UploadButton";
 import SelectSimpleTeacher from "./SelectSimpleTeacher.vue";
+import templateDownload from "@/mixins/templateDownload";
 
 const initModalForm = {
   basicCourseId: null,
@@ -93,6 +97,7 @@ const initModalForm = {
 export default {
   name: "modify-teacher-simple",
   components: { UploadButton, SelectSimpleTeacher },
+  mixins: [templateDownload],
   props: {
     course: {
       type: Object,
@@ -151,7 +156,6 @@ export default {
       // import
       uploadData: {},
       uploadUrl: "/api/admin/teach/course/import_teacher",
-      downloadUrl: "/temps/teacherSimpleTemplate.xlsx",
       dfilename: "教师团队导入模板.xlsx",
     };
   },

+ 58 - 0
src/modules/base/views/ApproveRecordManage.vue

@@ -3,6 +3,40 @@
     <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')">
+          <el-form-item label="学期:">
+            <semester-select
+              v-model.trim="filter.semesterId"
+              placeholder="学期"
+              default-select
+              @default-selected="toPage(1)"
+            ></semester-select>
+          </el-form-item>
+          <el-form-item label="考试:">
+            <exam-select
+              v-model="filter.examId"
+              :semester-id="filter.semesterId"
+            ></exam-select>
+          </el-form-item>
+          <el-form-item label="课程(代码):" label-width="110px">
+            <course-select
+              v-model.trim="filter.courseCode"
+              :semester-id="filter.semesterId"
+              :exam-id="filter.examId"
+              placeholder="课程(代码)"
+              clearable
+            ></course-select>
+          </el-form-item>
+          <el-form-item label="试卷编号:">
+            <paper-number-select
+              ref="PaperNumberSelect"
+              v-model="filter.paperNumber"
+              :semester-id="filter.semesterId"
+              :exam-id="filter.examId"
+              :course-code="filter.courseCode"
+              placeholder="试卷编号"
+              clearable
+            ></paper-number-select>
+          </el-form-item>
           <el-form-item label="状态:">
             <el-select
               v-model="filter.status"
@@ -75,6 +109,26 @@
           width="70"
           :index="indexMethod"
         ></el-table-column>
+        <el-table-column
+          prop="semesterName"
+          label="学期"
+          min-width="200"
+        ></el-table-column>
+        <el-table-column
+          prop="examName"
+          label="考试"
+          min-width="160"
+        ></el-table-column>
+        <el-table-column
+          prop="paperNumber"
+          label="试卷编号"
+          min-width="160"
+        ></el-table-column>
+        <el-table-column prop="courseName" label="课程(代码)" min-width="200">
+          <template slot-scope="scope">
+            {{ scope.row.courseName }}({{ scope.row.courseCode }})
+          </template>
+        </el-table-column>
         <el-table-column
           prop="teacherUserName"
           label="提交人"
@@ -155,6 +209,10 @@ export default {
   data() {
     return {
       filter: {
+        semesterId: "",
+        examId: "",
+        courseCode: "",
+        paperNumber: "",
         status: "",
         teachingRoomId: "",
         teacherUserName: "",

+ 3 - 2
src/modules/base/views/CourseManage.vue

@@ -171,7 +171,7 @@
       title="导入课程"
       :upload-url="uploadUrl"
       :format="['xls', 'xlsx']"
-      :download-url="downloadUrl"
+      :download-handle="() => downloadTemplate('course')"
       :download-filename="dfilename"
       :auto-upload="false"
       @upload-success="uploadSuccess"
@@ -191,10 +191,12 @@ import ModifyCourse from "../components/ModifyCourse";
 import ImportFile from "../../../components/ImportFile.vue";
 import { ABLE_TYPE } from "@/constants/enumerate";
 import { downloadByApi } from "@/plugins/download";
+import templateDownload from "@/mixins/templateDownload";
 
 export default {
   name: "course-manage",
   components: { ModifyCourse, ImportFile },
+  mixins: [templateDownload],
   data() {
     return {
       filter: {
@@ -214,7 +216,6 @@ export default {
       loading: false,
       // import
       uploadUrl: "/api/admin/basic/course/data_import",
-      downloadUrl: "/temps/courseTemplate.xlsx",
       dfilename: "课程导入模板.xlsx",
       // date-picker
       createTime: [],

+ 3 - 2
src/modules/base/views/OrganizationManage.vue

@@ -95,7 +95,7 @@
       title="导入组织架构"
       :upload-url="uploadUrl"
       :format="['xls', 'xlsx']"
-      :download-url="downloadUrl"
+      :download-handle="() => downloadTemplate('org')"
       :download-filename="dfilename"
       :auto-upload="false"
       @upload-success="uploadSuccess"
@@ -112,10 +112,12 @@ import {
 import ModifyOrganization from "../components/ModifyOrganization";
 import ImportFile from "../../../components/ImportFile.vue";
 import { downloadByApi } from "@/plugins/download";
+import templateDownload from "@/mixins/templateDownload";
 
 export default {
   name: "organization-manage",
   components: { ModifyOrganization, ImportFile },
+  mixins: [templateDownload],
   data() {
     return {
       orgs: [],
@@ -127,7 +129,6 @@ export default {
       loading: false,
       // import
       uploadUrl: "/api/admin/sys/org/import",
-      downloadUrl: "/temps/orgTemplate.xlsx",
       dfilename: "组织架构导入模板.xlsx",
     };
   },

+ 3 - 2
src/modules/base/views/StudentManage.vue

@@ -159,7 +159,7 @@
       title="导入学生"
       :upload-url="uploadUrl"
       :format="['xls', 'xlsx']"
-      :download-url="downloadUrl"
+      :download-handle="() => downloadTemplate('student')"
       :download-filename="dfilename"
       :auto-upload="false"
       @upload-success="uploadSuccess"
@@ -183,10 +183,12 @@ import {
 import ModifyStudent from "../components/ModifyStudent";
 import ImportFile from "../../../components/ImportFile.vue";
 import { downloadByApi } from "@/plugins/download";
+import templateDownload from "@/mixins/templateDownload";
 
 export default {
   name: "student-manage",
   components: { ModifyStudent, ImportFile },
+  mixins: [templateDownload],
   data() {
     return {
       filter: {
@@ -204,7 +206,6 @@ export default {
       loading: false,
       // import
       uploadUrl: "/api/admin/basic/student/data_import",
-      downloadUrl: "/temps/studentTemplate.xlsx",
       dfilename: "学生导入模板.xlsx",
     };
   },

+ 3 - 2
src/modules/base/views/UserManage.vue

@@ -202,7 +202,7 @@
       title="导入用户"
       :upload-url="uploadUrl"
       :format="['xls', 'xlsx']"
-      :download-url="downloadUrl"
+      :download-handle="() => downloadTemplate('user')"
       :download-filename="dfilename"
       :auto-upload="false"
       @upload-success="uploadSuccess"
@@ -230,12 +230,14 @@ import {
   exportUser,
 } from "../api";
 import { downloadByApi } from "@/plugins/download";
+import templateDownload from "@/mixins/templateDownload";
 
 // import { logout } from "@/modules/login/api";
 
 export default {
   name: "user-manage",
   components: { ModifyUser, ImportFile },
+  mixins: [templateDownload],
   data() {
     return {
       filter: {
@@ -255,7 +257,6 @@ export default {
       loading: false,
       // import
       uploadUrl: "/api/admin/sys/user/import",
-      downloadUrl: "/temps/userTemplate.xlsx",
       dfilename: "用户导入模板.xlsx",
     };
   },

+ 4 - 1
src/modules/exam/components/BatchAddExamTask.vue

@@ -40,8 +40,9 @@
           type="success"
           icon="el-icon-download"
           style="margin-left: 10px"
+          @click="downloadTemplate('examTask')"
         >
-          <a :href="downloadUrl" download="命题任务导入模板.xlsx">模板下载</a>
+          模板下载
         </el-button>
       </el-form-item>
       <el-form-item prop="startTime" label="命题时间:">
@@ -105,6 +106,7 @@
 <script>
 import { batchAddExamTask } from "../api";
 import UploadFileView from "@/components/UploadFileView";
+import templateDownload from "@/mixins/templateDownload";
 
 const initModalForm = {
   semesterId: "",
@@ -119,6 +121,7 @@ const initModalForm = {
 export default {
   name: "batch-add-exam-task",
   components: { UploadFileView },
+  mixins: [templateDownload],
   data() {
     return {
       modalIsShow: false,

+ 4 - 4
src/modules/exam/components/createExamAndPrintTask/InfoPrintTask.vue

@@ -121,9 +121,8 @@
             v-if="checkPrivilege('button', 'ExamTaskStudentObjectImport')"
             type="success"
             icon="el-icon-download"
-            ><a :href="downloadUrl" :download="dfilename"
-              >模板下载</a
-            ></el-button
+            @click="downloadTemplate('examTaskStudent')"
+            >模板下载</el-button
           >
           <upload-button
             v-if="checkPrivilege('button', 'ExamTaskStudentObjectImport')"
@@ -267,10 +266,12 @@ import ModifyExamStudent from "./ModifyExamStudent";
 import PreviewTaskStudent from "./PreviewTaskStudent";
 import { mapState, mapMutations } from "vuex";
 import UploadButton from "@/components/UploadButton";
+import templateDownload from "@/mixins/templateDownload";
 
 export default {
   name: "info-print-task",
   components: { ModifyExamStudent, PreviewTaskStudent, UploadButton },
+  mixins: [templateDownload],
   data() {
     return {
       modalForm: {
@@ -308,7 +309,6 @@ export default {
       createTime: [],
       // import
       uploadUrl: "/api/admin/exam/task/exam_task_exam_student_import",
-      downloadUrl: "/temps/examStudentTemplate.xlsx",
       dfilename: "学生导入模板.xlsx",
       studentUploaded: false,
     };

+ 3 - 2
src/modules/exam/views/StatisticsManage.vue

@@ -217,7 +217,7 @@
       :upload-url="uploadUrl"
       :upload-data="uploadData"
       :format="['xls', 'xlsx']"
-      :download-url="downloadUrl"
+      :download-handle="() => downloadTemplate('examStatistics')"
       :download-filename="dfilename"
       :auto-upload="false"
       @upload-success="uploadSuccess"
@@ -236,10 +236,12 @@ import { statisticsList, statisticsDelete, statisticsFreshen } from "../api";
 import { organizationFindByTypeList } from "../../base/api";
 import ImportFile from "../../../components/ImportFile.vue";
 import StatisticsDetailDialog from "../components/StatisticsDetailDialog.vue";
+import templateDownload from "@/mixins/templateDownload";
 
 export default {
   name: "exam-statistics",
   components: { ImportFile, StatisticsDetailDialog },
+  mixins: [templateDownload],
   data() {
     return {
       filter: {
@@ -264,7 +266,6 @@ export default {
       // import
       uploadData: {},
       uploadUrl: "/api/admin/statistics/import",
-      downloadUrl: "/temps/examStatisticsTemplate.xlsx",
       dfilename: "命题计划导入模板.xlsx",
     };
   },

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

@@ -114,7 +114,7 @@
         <el-table-column
           prop="semesterName"
           label="学期"
-          min-width="160"
+          min-width="200"
         ></el-table-column>
         <el-table-column
           prop="examName"

+ 3 - 0
src/modules/print/api.js

@@ -113,6 +113,9 @@ export const getPrintTaskPdf = (examDetailId) => {
 export const downloadPrintTaskPdf = (ids) => {
   return $post("/api/admin/exam/print/task_download_pdf", { ids });
 };
+export const rebuildPrintTaskPdf = (examDetailId) => {
+  return $post("/api/admin/exam/print/task_build_pdf", { examDetailId });
+};
 export const printTaskTemplateView = (printPlanId) => {
   return $post("/api/admin/exam/print/template_view", { printPlanId });
 };

+ 23 - 1
src/modules/print/views/PrintTaskManage.vue

@@ -222,7 +222,7 @@
         <el-table-column
           prop="semesterName"
           label="学期"
-          min-width="160"
+          min-width="200"
         ></el-table-column>
         <el-table-column
           prop="examName"
@@ -332,6 +332,13 @@
               @click="toViewPdf(scope.row)"
               >查看pdf</el-button
             >
+            <el-button
+              v-if="checkPrivilege('link', 'download')"
+              class="btn-primary"
+              type="text"
+              @click="toRebuildPdf(scope.row)"
+              >重新生成pdf</el-button
+            >
             <el-button
               v-if="
                 scope.row.status === 'READY' && checkPrivilege('link', 'submit')
@@ -435,6 +442,7 @@ import {
   printTaskTotalInfo,
   getPrintTaskPdf,
   downloadPrintTaskPdf,
+  rebuildPrintTaskPdf,
   printTaskNormal,
 } from "../api";
 import { PRINT_TASK_STATUS } from "@/constants/enumerate";
@@ -628,6 +636,20 @@ export default {
         this.padViewDialogVisible = true;
       }
     },
+    async toRebuildPdf(row) {
+      const action = await this.$confirm(
+        `确定要重新生成该印刷任务PDF吗?`,
+        "提示",
+        {
+          type: "warning",
+        }
+      ).catch(() => {});
+      if (action !== "confirm") return;
+
+      const res = await rebuildPrintTaskPdf(row.examDetailId);
+      if (!res) return;
+      this.$message.success("操作成功!");
+    },
     viewPdf(item) {
       window.open(item.url);
       // this.padViewDialogVisible = false;