瀏覽代碼

好多修改

zhangjie 3 年之前
父節點
當前提交
9a7082da5c

二進制
public/temps/studentTemplate.xlsx


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

@@ -202,12 +202,18 @@ export const clazzQuery = datas => {
 export const semesterListQuery = datas => {
   return $postParam("/api/admin/basic/semester/query", datas);
 };
+export const examSemesterList = datas => {
+  return $postParam("/api/admin/basic/semester/list", datas);
+};
 export const deleteSemester = id => {
   return $postParam("/api/admin/basic/semester/delete", { id });
 };
 export const updateSemester = datas => {
   return $post("/api/admin/basic/semester/save", datas);
 };
+export const semesterSetInUsed = id => {
+  return $postParam("/api/admin/basic/semester/set_in_used", { id });
+};
 // major-manage
 export const majorListQuery = datas => {
   return $postParam("/api/admin/basic/major/query", datas);

+ 31 - 1
src/modules/base/views/PrintPlanPushManage.vue

@@ -2,6 +2,20 @@
   <div class="print-plan-push-manage">
     <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-select
+            v-model.trim="filter.semesterId"
+            placeholder="请选择使用学期"
+            clearable
+          >
+            <el-option
+              v-for="item in semesters"
+              :key="item.id"
+              :value="item.id"
+              :label="item.name"
+            ></el-option>
+          </el-select>
+        </el-form-item>
         <el-form-item label="印刷计划:">
           <print-plan-select
             v-model.trim="filter.printPlanId"
@@ -134,6 +148,7 @@ import {
   printPlanBatchPush,
   printPlanPush
 } from "../api";
+import { examSemesterList } from "../../base/api";
 import MergePushDialog from "../components/MergePushDialog";
 import ModifyPrintPlan from "../../print/components/ModifyPrintPlan";
 
@@ -143,6 +158,7 @@ export default {
   data() {
     return {
       filter: {
+        semesterId: "",
         printPlanId: "",
         examId: ""
       },
@@ -150,15 +166,20 @@ export default {
       size: this.GLOBAL.pageSize,
       total: 0,
       loading: false,
+      semesters: [],
       dataList: [],
       curPrintPlan: {},
       multipleSelection: []
     };
   },
   mounted() {
-    this.toPage(1);
+    this.initData();
   },
   methods: {
+    async initData() {
+      await this.getSemesters();
+      await this.getList();
+    },
     async getList() {
       const datas = {
         ...this.filter,
@@ -177,6 +198,15 @@ export default {
     search() {
       this.toPage(1);
     },
+    async getSemesters() {
+      const res = await examSemesterList({});
+      this.semesters = res || [];
+      if (!this.semesters.length) return;
+
+      let curSemester = this.semesters.find(item => item.inUsed);
+      curSemester = curSemester || this.semesters[0];
+      this.filter.semesterId = curSemester.id;
+    },
     handleSelectionChange(val) {
       this.multipleSelection = val.map(item => item.id);
     },

+ 44 - 12
src/modules/base/views/SemesterManage.vue

@@ -38,8 +38,22 @@
             scope.row.endTime | timestampFilter
           }}</span>
         </el-table-column>
-        <el-table-column class-name="action-column" label="操作" width="120px">
+        <el-table-column prop="inUsed" label="当前学期">
+          <span
+            :class="{ 'color-success': scope.row.inUsed }"
+            slot-scope="scope"
+            >{{ scope.row.inUsed ? "是" : "否" }}</span
+          >
+        </el-table-column>
+        <el-table-column class-name="action-column" label="操作" width="200px">
           <template slot-scope="scope">
+            <el-button
+              v-if="checkPrivilege('link', 'edit')"
+              class="btn-primary"
+              type="text"
+              @click="setUsed(scope.row)"
+              >设置为当前学期</el-button
+            >
             <el-button
               v-if="checkPrivilege('link', 'edit')"
               class="btn-primary"
@@ -79,7 +93,7 @@
 </template>
 
 <script>
-import { semesterListQuery, deleteSemester } from "../api";
+import { semesterListQuery, deleteSemester, semesterSetInUsed } from "../api";
 import ModifySemester from "../components/ModifySemester";
 
 export default {
@@ -123,16 +137,34 @@ export default {
       this.curRow = row;
       this.$refs.ModifySemester.open();
     },
-    toDelete(row) {
-      this.$confirm(`确定要删除学期【${row.semesterName}】吗?`, "提示", {
-        type: "warning"
-      })
-        .then(async () => {
-          await deleteSemester(row.id);
-          this.$message.success("删除成功!");
-          this.getList();
-        })
-        .catch(() => {});
+    async toDelete(row) {
+      const result = await this.$confirm(
+        `确定要删除学期【${row.semesterName}】吗?`,
+        "提示",
+        {
+          type: "warning"
+        }
+      ).catch(() => {});
+      if (result !== "confirm") return;
+
+      await deleteSemester(row.id);
+      this.$message.success("删除成功!");
+      this.deletePageLastItem();
+    },
+    async setUsed(row) {
+      const result = await this.$confirm(
+        `确定要将学期【${row.semesterName}】设置成当前学期吗?`,
+        "提示",
+        {
+          type: "warning"
+        }
+      ).catch(() => {});
+      if (result !== "confirm") return;
+
+      await semesterSetInUsed(row.id);
+
+      this.getList();
+      this.$message.success("设置成功!");
     }
   }
 };

+ 6 - 0
src/modules/exam/components/createExamAndPrintTask/CreateExamAndPrintTask.vue

@@ -84,6 +84,7 @@ const STEPS_LIST = [
 ];
 
 const initExamTask = {
+  semesterId: "",
   courseCode: "",
   courseName: "",
   paperNumber: "",
@@ -114,6 +115,7 @@ const initPrintPlan = {
   name: "",
   examStartTime: "",
   examEndTime: "",
+  semesterId: "",
   printContent: [],
   backupMethod: "ROOM",
   backupCount: 1,
@@ -260,6 +262,10 @@ export default {
           this.infos[key] = [...val];
         } else {
           this.infos[key] = Object.assign(this.infos[key], val);
+
+          if (key === "examTask") {
+            this.infos.printPlan.semesterId = val.semesterId;
+          }
         }
       });
     },

+ 30 - 11
src/modules/exam/components/createExamAndPrintTask/InfoExamTask.vue

@@ -64,14 +64,19 @@
             </el-form-item>
           </el-col>
           <el-col :span="12">
-            <el-form-item prop="paperName" label="使用学期:">
-              <el-input
-                v-model.trim="examTask.paperName"
-                placeholder="请输入使用学期"
-                :maxlength="100"
-                clearable
-              ></el-input>
-              <p class="tips-info">样例:2021-2022学年第一学期</p>
+            <el-form-item prop="semesterId" label="使用学期:">
+              <el-select
+                v-model.trim="examTask.semesterId"
+                placeholder="请选择使用学期"
+                @change="semesterChange"
+              >
+                <el-option
+                  v-for="item in semesters"
+                  :key="item.id"
+                  :value="item.id"
+                  :label="item.name"
+                ></el-option>
+              </el-select>
             </el-form-item>
           </el-col>
         </el-row>
@@ -260,7 +265,7 @@ import {
   taskAllApproverPeople,
   taskApproverNextPeople
 } from "../../api";
-import { courseQuery } from "../../../base/api";
+import { courseQuery, examSemesterList } from "../../../base/api";
 
 export default {
   name: "info-exam-task",
@@ -298,10 +303,10 @@ export default {
             trigger: "change"
           }
         ],
-        paperName: [
+        semesterId: [
           {
             required: true,
-            message: "请输入使用学期",
+            message: "请选择使用学期",
             trigger: "change"
           }
         ]
@@ -309,6 +314,7 @@ export default {
       examTask: {},
       cards: [],
       courses: [],
+      semesters: [],
       cardRuleName: "全部通卡",
       // exam-task-detail
       examTaskDetail: { makeMethod: "" },
@@ -340,6 +346,7 @@ export default {
   },
   mounted() {
     this.initData();
+    this.getSemesters();
   },
   methods: {
     initData() {
@@ -389,6 +396,18 @@ export default {
       });
       this.courses = res || [];
     },
+    async getSemesters() {
+      const res = await examSemesterList({ inUsed: 1 });
+      this.semesters = res || [];
+      this.examTask.semesterId = this.semesters[0].id;
+      this.examTask.paperName = this.semesters[0].name;
+    },
+    semesterChange() {
+      const curSemester = this.semesters.find(
+        item => item.id === this.semesterId
+      );
+      this.examTask.paperName = curSemester.name;
+    },
     async checkData() {
       const valid = await this.$refs.examTaskComp.validate().catch(() => {});
       if (!valid) {

+ 8 - 27
src/modules/exam/views/DataTaskManage.vue

@@ -151,7 +151,7 @@ import {
 } from "@/constants/enumerate";
 import { dataTaskList, removeDataTask, taskResetPdf } from "../api";
 import { attachmentDownload } from "../../login/api";
-import { downloadFileURL } from "@/plugins/utils";
+import { downloadByUrl } from "@/plugins/download";
 
 export default {
   name: "data-task-manage",
@@ -231,32 +231,23 @@ export default {
       this.loading = true;
       const res = await attachmentDownload({
         id: row.id,
-        type: "REPORT"
+        type: "TASK_REPORT"
       }).catch(() => {});
+      this.loading = false;
 
       if (!res) {
-        this.loading = false;
         this.$message.error("文件下载失败,请重新尝试!");
         return;
       }
 
       const url = res.url;
       if (url.endsWith(".txt")) {
-        this.loading = false;
         window.open(url);
         return;
       }
-      let result = true;
-      await downloadFileURL(url).catch(() => {
-        result = false;
-      });
-      this.loading = false;
 
-      if (result) {
-        this.$message.success("文件下载成功!");
-      } else {
-        this.$message.error("文件下载失败,请重新尝试!");
-      }
+      downloadByUrl(url);
+      this.$message.success("文件下载成功!");
     },
     async toDonwloadFile(row) {
       if (this.loading) return;
@@ -267,25 +258,15 @@ export default {
         id: row.id,
         type
       }).catch(() => {});
+      this.loading = false;
 
       if (!res) {
-        this.loading = false;
         this.$message.error("文件下载失败,请重新尝试!");
         return;
       }
 
-      const url = res.url;
-      let result = true;
-      await downloadFileURL(url).catch(() => {
-        result = false;
-      });
-      this.loading = false;
-
-      if (result) {
-        this.$message.success("文件下载成功!");
-      } else {
-        this.$message.error("文件下载失败,请重新尝试!");
-      }
+      downloadByUrl(res.url);
+      this.$message.success("文件下载成功!");
     },
     async toResetCreatePdf(row) {
       if (this.loading) return;

+ 31 - 0
src/modules/print/components/ModifyPrintPlan.vue

@@ -42,6 +42,21 @@
           >
           </el-date-picker>
         </el-form-item>
+        <el-form-item prop="semesterId" label="使用学期:">
+          <el-select
+            v-model.trim="modalForm.semesterId"
+            placeholder="请选择使用学期"
+            style="width: 100%"
+            :disabled="!editable"
+          >
+            <el-option
+              v-for="item in semesters"
+              :key="item.id"
+              :value="item.id"
+              :label="item.name"
+            ></el-option>
+          </el-select>
+        </el-form-item>
       </div>
 
       <div class="part-box">
@@ -266,12 +281,14 @@ import {
 } from "@/constants/enumerate";
 import { deepCopy } from "@/plugins/utils";
 import { updatePrintPlan, printPlanTemplateList } from "../api";
+import { examSemesterList } from "../../base/api";
 
 const initModalForm = {
   id: null,
   name: "",
   examStartTime: "",
   examEndTime: "",
+  semesterId: "",
   printContent: [],
   backupMethod: "ROOM",
   backupCount: 1,
@@ -376,6 +393,7 @@ export default {
       isSubmit: false,
       modalForm: deepCopy(initModalForm),
       createTime: [],
+      semesters: [],
       PRINT_CONTENT_TYPE,
       DRAW_RULE_TYPE,
       PRINT_BACKUP_TYPE,
@@ -402,6 +420,13 @@ export default {
             trigger: "change"
           }
         ],
+        semesterId: [
+          {
+            required: true,
+            message: "请选择使用学期",
+            trigger: "change"
+          }
+        ],
         printContent: [
           {
             required: false,
@@ -435,6 +460,7 @@ export default {
   },
   mounted() {
     this.getTemplates();
+    this.getSemesters();
   },
   methods: {
     async getTemplates() {
@@ -446,6 +472,10 @@ export default {
       });
       this.templateSources = templateSources;
     },
+    async getSemesters() {
+      const res = await examSemesterList({ inUsed: 1 });
+      this.semesters = res || [];
+    },
     selectAll(selected) {
       if (selected) {
         this.modalForm.printContent = ["PAPER", "CARD"];
@@ -550,6 +580,7 @@ export default {
         modalForm.ordinaryContent = modalForm.ordinaryContent.filter(
           item => this.templateSources[item.type]
         );
+        modalForm.semesterId = this.semesters[0].id || "";
         this.modalForm = modalForm;
         this.createTime = [];
       }

+ 9 - 0
src/modules/print/views/PrintPlanManage.vue

@@ -3,6 +3,13 @@
     <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="学期"
+              clearable
+            ></semester-select>
+          </el-form-item>
           <el-form-item label="印刷计划:">
             <print-plan-select
               v-model.trim="filter.printPlanIdList"
@@ -70,6 +77,7 @@
           width="70"
           :index="indexMethod"
         ></el-table-column>
+        <el-table-column prop="semesterName" label="学期"></el-table-column>
         <el-table-column prop="name" label="印刷计划"></el-table-column>
         <el-table-column prop="examStartTime" label="考试开始时间">
           <span slot-scope="scope">{{
@@ -167,6 +175,7 @@ export default {
   data() {
     return {
       filter: {
+        semesterId: "",
         printPlanIdList: [],
         status: "",
         startTime: "",

+ 1 - 4
src/modules/stmms/api.js

@@ -44,8 +44,5 @@ export const yptAuth = roleType => {
 };
 // sync-result-manage
 export const syncResultListPage = datas => {
-  return $postParam("/api/admin/sys/user/user_list", datas);
-};
-export const downloadSyncLogs = datas => {
-  return $postParam("/api/admin/sys/user/user_list", datas);
+  return $postParam("/api/admin/data/sync/query", datas);
 };

+ 3 - 1
src/modules/stmms/views/ScoreArchive.vue

@@ -209,7 +209,9 @@ export default {
       this.syncLoading = true;
       const res = await scoreSync({
         semesterId: this.filter.semesterId,
-        orgId: this.filter.orgId
+        orgId: this.filter.orgId,
+        clazzId: this.filter.clazzId,
+        courseCode: this.filter.courseCode
       }).catch(() => {});
       this.syncLoading = false;
       if (!res) return;

+ 19 - 20
src/modules/stmms/views/SyncManage.vue

@@ -48,15 +48,21 @@
           width="70"
           :index="indexMethod"
         ></el-table-column>
-        <el-table-column prop="name" label="类别"></el-table-column>
+        <el-table-column prop="type" label="类别"></el-table-column>
         <el-table-column prop="status" label="状态"> </el-table-column>
         <el-table-column prop="result" label="结果" width="100">
         </el-table-column>
-        <el-table-column class-name="action-column" label="操作" width="120px">
+        <el-table-column prop="createTime" label="创建时间" width="180">
+          <span slot-scope="scope">{{
+            scope.row.createTime | timestampFilter
+          }}</span>
+        </el-table-column>
+        <el-table-column prop="createName" label="创建人"></el-table-column>
+        <el-table-column class-name="action-column" label="操作" width="100">
           <template slot-scope="scope">
             <el-button
-              v-if="checkPrivilege('link', 'export')"
-              type="primary"
+              v-if="scope.row.hasReportFile && checkPrivilege('link', 'export')"
+              type="text"
               class="btn-primary"
               :disabled="loading"
               @click="toDonwloadLog(scope.row)"
@@ -82,8 +88,9 @@
 
 <script>
 import { STMMS_SYNC_TYPE, DATA_TASK_RESULT } from "@/constants/enumerate";
-import { syncResultListPage, downloadSyncLogs } from "../api";
-import { downloadFileURL } from "@/plugins/utils";
+import { syncResultListPage } from "../api";
+import { attachmentDownload } from "../../login/api";
+import { downloadByUrl } from "@/plugins/download";
 
 export default {
   name: "sync-manage",
@@ -103,7 +110,7 @@ export default {
     };
   },
   created() {
-    // this.getList();
+    this.getList();
   },
   methods: {
     async getList() {
@@ -126,13 +133,13 @@ export default {
       if (this.loading) return;
 
       this.loading = true;
-      const res = await downloadSyncLogs({
+      const res = await attachmentDownload({
         id: row.id,
-        type: "REPORT"
+        type: "SYNC_REPORT"
       }).catch(() => {});
+      this.loading = false;
 
       if (!res) {
-        this.loading = false;
         this.$message.error("文件下载失败,请重新尝试!");
         return;
       }
@@ -143,17 +150,9 @@ export default {
         window.open(url);
         return;
       }
-      let result = true;
-      await downloadFileURL(url).catch(() => {
-        result = false;
-      });
-      this.loading = false;
 
-      if (result) {
-        this.$message.success("文件下载成功!");
-      } else {
-        this.$message.error("文件下载失败,请重新尝试!");
-      }
+      downloadByUrl(url);
+      this.$message.success("文件下载成功!");
     }
   }
 };

+ 6 - 1
src/modules/stmms/views/UploadStructure.vue

@@ -16,6 +16,11 @@
           prop="thirdRelateName"
           label="考试名称"
         ></el-table-column>
+        <el-table-column prop="courseName" label="课程(代码)">
+          <span slot-scope="scope">
+            {{ scope.row.courseName }}({{ scope.row.courseCode }})
+          </span>
+        </el-table-column>
         <el-table-column prop="paperNumber" label="试卷编号"></el-table-column>
         <el-table-column prop="paperType" label="试卷类型"></el-table-column>
         <el-table-column prop="status" label="状态" width="100">
@@ -133,7 +138,7 @@ export default {
       };
       const data = await examStructureListPage(datas);
       this.dataList = data.records.map(item => {
-        item.paperTypes = item.paperType.split(",");
+        item.paperTypes = item.paperType ? item.paperType.split(",") : [];
         item.paperAnswer = JSON.parse(item.paperAnswer);
         return item;
       });

+ 7 - 1
src/plugins/download.js

@@ -51,7 +51,13 @@ export function downloadByUrl(url, filename) {
   const tempLink = document.createElement("a");
   tempLink.style.display = "none";
   tempLink.href = url;
-  tempLink.setAttribute("download", filename);
+  const fileName =
+    filename ||
+    url
+      .split("/")
+      .pop()
+      .split("?")[0];
+  tempLink.setAttribute("download", fileName);
   if (tempLink.download === "undefined") {
     tempLink.setAttribute("target", "_blank");
   }

+ 0 - 40
src/plugins/utils.js

@@ -108,46 +108,6 @@ export function download(option) {
   });
 }
 
-// function toDataURL(url) {
-//   return fetch(url)
-//     .then(response => {
-//       return response.blob();
-//     })
-//     .then(blob => {
-//       return URL.createObjectURL(blob);
-//     });
-// }
-
-/**
- *
- * @param {String} url 下载链接
- * @param {String} name 文件名称
- */
-export async function downloadFileURL(url, name) {
-  const link = document.createElement("a");
-  link.style.display = "none";
-  const fileName =
-    name ||
-    url
-      .split("/")
-      .pop()
-      .split("?")[0];
-  link.setAttribute("download", fileName);
-
-  // txt文件会直接在浏览器里面打开。
-  // 方案一:修改服务器设置,加上 Content-Disposition: attachment
-  // 方案二:同源文件a标签添加download属性
-  // if ([".txt"].some(v => fileName.endsWith(v))) {
-  //   link.href = await toDataURL(url);
-  // } else {
-  //   link.href = url;
-  // }
-  link.href = url;
-  document.body.appendChild(link);
-  link.click();
-  document.body.removeChild(link);
-}
-
 /**
  * 构建图表btn
  * @param {Function} h createElement