zhangjie %!s(int64=2) %!d(string=hai) anos
pai
achega
82d6f416cd

+ 7 - 0
src/assets/styles/pages.scss

@@ -447,6 +447,9 @@
       &:nth-of-type(3) {
         width: 100px;
       }
+      &:nth-of-type(4) {
+        width: 150px;
+      }
     }
   }
   .el-tree-node__content {
@@ -455,6 +458,10 @@
     border-bottom: 1px solid $--color-border;
   }
   .org-edit {
+    .org-code {
+      width: 150px;
+      display: inline-block;
+    }
     .org-type {
       width: 100px;
       display: inline-block;

+ 7 - 4
src/modules/base/api.js

@@ -341,12 +341,15 @@ export const printPlanMergePush = datas => {
 export const printPlanSyncExamList = () => {
   return $post("/api/admin/exam/print_sync/list_relate_ids", {});
 };
+export const printPlanCheckSyncMode = datas => {
+  return $post("/api/admin/exam/print_sync/check_sync_mode", datas);
+};
 // new
-export const printPlanSyncRelateExamList = () => {
-  return $post("/api/admin/basic/stmms_exam/sync", {});
+export const printPlanSyncRelateExamList = (datas = {}) => {
+  return $post("/api/admin/basic/stmms_exam/sync", datas);
 };
-export const printPlanRelateExamList = () => {
-  return $postParam("/api/admin/basic/stmms_exam/list", {});
+export const printPlanRelateExamList = (datas = {}) => {
+  return $postParam("/api/admin/basic/stmms_exam/list", datas);
 };
 export const printPlanCourseRelateList = datas => {
   return $postParam("/api/admin/exam/print_sync/list_sync_exam_task", datas);

+ 16 - 0
src/modules/base/components/ModifyOrganization.vue

@@ -26,6 +26,13 @@
           clearable
         ></el-input>
       </el-form-item>
+      <el-form-item prop="code" label="机构编码:">
+        <el-input
+          v-model.trim="modalForm.code"
+          placeholder="请输入机构编码"
+          clearable
+        ></el-input>
+      </el-form-item>
       <el-form-item v-if="orgTypes.length" prop="type" label="机构类型:">
         <el-select
           v-model="modalForm.type"
@@ -66,6 +73,7 @@ const initModalForm = {
   id: null,
   name: "",
   type: "",
+  code: "",
   parentId: null,
   parentName: "",
   enable: true
@@ -109,6 +117,14 @@ export default {
               "机构名称只能输入汉字、数字、字母和圆括号,长度不能超过100",
             trigger: "change"
           }
+        ],
+        code: [
+          {
+            required: false,
+            pattern: /^[0-9a-zA-Z]{1,100}$/,
+            message: "机构名称只能输入数字、字母,长度不能超过100",
+            trigger: "change"
+          }
         ]
       }
     };

+ 8 - 6
src/modules/base/components/PrintPlanBatchPushDialog.vue

@@ -94,6 +94,10 @@ export default {
       default() {
         return [];
       }
+    },
+    orgCode: {
+      type: [String, Number],
+      default: ""
     }
   },
   data() {
@@ -147,15 +151,15 @@ export default {
       });
     },
     visibleChange() {
-      this.initData(this.instance);
+      this.initData();
       this.getExams();
     },
     async getExams() {
-      const data = await printPlanRelateExamList();
+      const data = await printPlanRelateExamList({ orgCode: this.orgCode });
       this.thirdRelateExams = data || [];
     },
     async refresh() {
-      const data = await printPlanSyncRelateExamList();
+      const data = await printPlanSyncRelateExamList({ orgCode: this.orgCode });
       this.thirdRelateExams = data || [];
     },
     cancel() {
@@ -165,9 +169,7 @@ export default {
       this.modalIsShow = true;
     },
     examTypeChange() {
-      this.$nextTick(() => {
-        this.$refs.modalFormComp.clearValidate();
-      });
+      this.initData();
     },
     async confirm() {
       const valid = await this.$refs.modalFormComp.validate().catch(() => {});

+ 60 - 4
src/modules/base/views/CardManage.vue

@@ -112,12 +112,23 @@
               >查看</el-button
             >
             <el-button
-              v-if="checkPrivilege('link', 'ConvertImage')"
+              v-if="
+                checkPrivilege('link', 'ConvertImage') && !scope.row.imageUrls
+              "
               class="btn-primary"
               type="text"
               @click="toConvertImage(scope.row)"
               >生成图片</el-button
             >
+            <el-button
+              v-if="
+                checkPrivilege('link', 'ConvertImage') && scope.row.imageUrls
+              "
+              class="btn-primary"
+              type="text"
+              @click="toPreviewImage(scope.row)"
+              >预览图片</el-button
+            >
             <el-button
               v-if="checkPrivilege('link', 'delete')"
               class="btn-danger"
@@ -136,7 +147,9 @@
               >编辑题卡</el-button
             >
             <el-button
-              v-if="checkPrivilege('link', 'edit')"
+              v-if="
+                checkPrivilege('link', 'edit') && scope.row.type !== 'CUSTOM'
+              "
               class="btn-primary"
               type="text"
               @click="toEditInfo(scope.row)"
@@ -169,6 +182,13 @@
     ></modify-card-info>
     <!-- ModifyCard -->
     <modify-card ref="ModifyCard" @modified="getList"></modify-card>
+    <!-- image-preview -->
+    <simple-image-preview
+      :cur-image="curImage"
+      @on-prev="toPrevImage"
+      @on-next="toNextImage"
+      ref="SimpleImagePreview"
+    ></simple-image-preview>
   </div>
 </template>
 
@@ -178,10 +198,11 @@ import { cardListPage, deleteCard, convertCardImage } from "../api";
 import ModifyCardInfo from "../components/ModifyCardInfo";
 import pickerOptions from "@/constants/datePickerOptions";
 import ModifyCard from "../../card/components/ModifyCard";
+import SimpleImagePreview from "@/components/SimpleImagePreview";
 
 export default {
   name: "card-manage",
-  components: { ModifyCardInfo, ModifyCard },
+  components: { ModifyCardInfo, ModifyCard, SimpleImagePreview },
   data() {
     return {
       filter: {
@@ -198,7 +219,11 @@ export default {
       curCard: {},
       // date-picker
       createTime: [],
-      pickerOptions
+      pickerOptions,
+      // image-preview
+      imageList: [],
+      curImage: {},
+      curImageIndex: 0
     };
   },
   mounted() {
@@ -275,6 +300,37 @@ export default {
     async toConvertImage(row) {
       await convertCardImage(row.id);
       this.$message.success("操作成功!");
+    },
+    // image-preview
+    toPreviewImage(row) {
+      this.imageList = row.imageUrls;
+      this.curImageIndex = 0;
+      this.selectImage(0);
+      this.$refs.SimpleImagePreview.open();
+    },
+    selectImage(index) {
+      this.curImage = {
+        url: this.imageList[index],
+        filename: Math.floor(index / 2) + 1 + "-" + ((index % 2) + 1)
+      };
+    },
+    toPrevImage() {
+      if (this.curImageIndex === 0) {
+        this.curImageIndex = this.imageList.length - 1;
+      } else {
+        this.curImageIndex--;
+      }
+
+      this.selectImage(this.curImageIndex);
+    },
+    toNextImage() {
+      if (this.curImageIndex === this.imageList.length - 1) {
+        this.curImageIndex = 0;
+      } else {
+        this.curImageIndex++;
+      }
+
+      this.selectImage(this.curImageIndex);
     }
   }
 };

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

@@ -25,6 +25,7 @@
         <div>机构名称</div>
         <div>操作</div>
         <div>机构类型</div>
+        <div>机构编码</div>
       </div>
       <el-tree
         :data="orgs"
@@ -36,6 +37,7 @@
         <span class="custom-tree-node" slot-scope="{ node, data }">
           <span>{{ node.label }}</span>
           <div class="org-edit">
+            <div class="org-code">{{ data.code }}</div>
             <div class="org-type">
               {{ data.type | orgTypeFilter }}
             </div>

+ 19 - 5
src/modules/base/views/PrintPlanPushManage.vue

@@ -99,7 +99,7 @@
           width="55"
           align="center"
         ></el-table-column>
-        <el-table-column prop="name" label="课程名称(代码)" min-width="140">
+        <el-table-column prop="name" label="课程名称(代码)" min-width="180">
           <span slot-scope="scope"
             >{{ scope.row.courseName }}({{ scope.row.courseCode }})</span
           >
@@ -114,6 +114,11 @@
           label="试卷编号"
           min-width="100"
         ></el-table-column>
+        <el-table-column prop="name" label="学院(代码)" min-width="180">
+          <span slot-scope="scope"
+            >{{ scope.row.collegeName }}({{ scope.row.collegeCode }})</span
+          >
+        </el-table-column>
         <el-table-column
           prop="paperType"
           label="卷型"
@@ -197,6 +202,7 @@
       "
       ref="PrintPlanBatchPushDialog"
       :courses="curSelectedCourses"
+      :org-code="orgCode"
       @modified="mergePushed"
     ></print-plan-batch-push-dialog>
     <!-- DataSyncDialog -->
@@ -212,7 +218,7 @@
 
 <script>
 import { PUSH_TYPE } from "@/constants/enumerate";
-import { printPlanPushListQuery } from "../api";
+import { printPlanPushListQuery, printPlanCheckSyncMode } from "../api";
 import PrintPlanBatchPushDialog from "../components/PrintPlanBatchPushDialog.vue";
 import DataSyncDialog from "../../stmms/components/DataSyncDialog.vue";
 
@@ -240,7 +246,8 @@ export default {
       curPrintPlan: {},
       multipleSelection: [],
       curSelectedCourses: [],
-      createTime: []
+      createTime: [],
+      orgCode: ""
     };
   },
   mounted() {},
@@ -276,16 +283,23 @@ export default {
     handleSelectionChange(val) {
       this.multipleSelection = val;
     },
-    toBatchPush() {
+    async toBatchPush() {
       if (!this.multipleSelection.length) {
         this.$message.error("请选择要批量推送的数据");
         return;
       }
       this.curSelectedCourses = this.multipleSelection;
+      this.orgCode = await printPlanCheckSyncMode({
+        list: this.curSelectedCourses
+      });
       this.$refs.PrintPlanBatchPushDialog.open();
     },
-    toPush(row) {
+    async toPush(row) {
       this.curSelectedCourses = [row];
+      this.orgCode = await printPlanCheckSyncMode({
+        list: this.curSelectedCourses
+      });
+
       this.$refs.PrintPlanBatchPushDialog.open();
     },
     mergePushed() {

+ 5 - 1
src/modules/exam/components/createExamAndPrintTask/CreateExamAndPrintTask.vue

@@ -318,7 +318,11 @@ export default {
         examTask: this.infoExamTask,
         examTaskDetail: this.infoExamTaskDetail
       };
-      if (!this.IS_MODEL3) examTaskContent.examDetail = this.infoPrintTask;
+      if (!this.IS_MODEL3) {
+        examTaskContent.examDetail = this.infoPrintTask;
+        examTaskContent.examTask.examStartTime = this.infoPrintTask.examStartTime;
+        examTaskContent.examTask.examEndTime = this.infoPrintTask.examEndTime;
+      }
       let datas = {
         examTaskContent: JSON.stringify(examTaskContent),
         ...this.flowInfo