zhangjie преди 4 години
родител
ревизия
58479e8bd2
променени са 37 файла, в които са добавени 274 реда и са изтрити 120 реда
  1. 1 1
      card/components/PaperParams.vue
  2. 1 1
      src/assets/styles/base.scss
  3. 0 1
      src/assets/styles/element-ui-costom.scss
  4. 1 1
      src/assets/styles/pages.scss
  5. 1 7
      src/components/UploadButton.vue
  6. 1 0
      src/components/UploadFileView.vue
  7. 2 2
      src/constants/enumerate.js
  8. 7 2
      src/modules/admin/views/AdminUserManage.vue
  9. 2 2
      src/modules/base/api.js
  10. 6 6
      src/modules/base/components/RuleExam.vue
  11. 11 8
      src/modules/base/views/CardRuleManage.vue
  12. 3 3
      src/modules/base/views/CommonRule.vue
  13. 5 2
      src/modules/base/views/CourseManage.vue
  14. 5 2
      src/modules/base/views/RoleManage.vue
  15. 5 2
      src/modules/base/views/TemplateManage.vue
  16. 7 2
      src/modules/base/views/UserManage.vue
  17. 1 1
      src/modules/customer/views/CustomerCard.vue
  18. 14 4
      src/modules/exam/components/ApplyContent.vue
  19. 1 1
      src/modules/exam/components/BatchAddExamTask.vue
  20. 6 1
      src/modules/exam/components/CardOptionDialog.vue
  21. 3 4
      src/modules/exam/components/ModifyExamTask.vue
  22. 11 5
      src/modules/exam/components/ModifyTaskApply.vue
  23. 10 1
      src/modules/exam/components/UploadPaperDialog.vue
  24. 1 1
      src/modules/exam/views/DataTaskManage.vue
  25. 11 3
      src/modules/exam/views/ExamTaskManage.vue
  26. 1 1
      src/modules/exam/views/TaskApplyManage.vue
  27. 1 1
      src/modules/exam/views/TaskPaperManage.vue
  28. 1 1
      src/modules/exam/views/TaskReviewManage.vue
  29. 17 18
      src/modules/print/components/ModifyPlanPaper.vue
  30. 1 1
      src/modules/print/components/ModifyPrintPlan.vue
  31. 109 0
      src/modules/print/components/UploadBusinessDataDialog.vue
  32. 1 1
      src/modules/print/views/BusinessDataDetail.vue
  33. 16 30
      src/modules/print/views/BusinessDataExport.vue
  34. 1 1
      src/modules/print/views/PlanLinkPaper.vue
  35. 6 2
      src/modules/print/views/PrintPlanManage.vue
  36. 1 1
      src/modules/print/views/PrintTaskManage.vue
  37. 3 0
      src/plugins/filters.js

+ 1 - 1
card/components/PaperParams.vue

@@ -31,7 +31,7 @@
       <div class="params-body">
         <div style="text-align:right;">
           <upload-button
-            btn-icon="icon icon-share"
+            btn-icon="el-icon-upload"
             btn-content="选择上传主观题标答文件(doc/docx)"
             btn-type="warning"
             :upload-url="uploadUrl"

+ 1 - 1
src/assets/styles/base.scss

@@ -154,7 +154,7 @@ body {
     align-items: flex-end;
   }
   &-tips {
-    font-size: 14px;
+    font-size: 16px;
     line-height: 25px;
     color: $--color-text-regular;
     margin-bottom: 15px;

+ 0 - 1
src/assets/styles/element-ui-costom.scss

@@ -154,7 +154,6 @@
   }
   > span {
     display: inline-block;
-    vertical-align: middle;
   }
   &.is-disabled {
     color: $--color-text-secondary !important;

+ 1 - 1
src/assets/styles/pages.scss

@@ -230,7 +230,7 @@
   }
 }
 
-// rule-business
+// rule-exam
 
 // select-orgs
 .select-orgs {

+ 1 - 7
src/components/UploadButton.vue

@@ -70,7 +70,6 @@ export default {
   data() {
     return {
       headers: {
-        Authorization: this.$ls.get("token"),
         md5: ""
       },
       res: {},
@@ -78,12 +77,6 @@ export default {
       uploadDataDict: {}
     };
   },
-  created() {
-    this.headers = {
-      ...this.headers,
-      ...this.getHeadIds()
-    };
-  },
   methods: {
     checkFileFormat(fileType) {
       const _file_format = fileType
@@ -122,6 +115,7 @@ export default {
         formData.append(k, v);
       });
       formData.append("file", options.file);
+      this.$emit("uploading");
 
       return $post(options.action, formData, { headers: options.headers });
     },

+ 1 - 0
src/components/UploadFileView.vue

@@ -141,6 +141,7 @@ export default {
         formData.append(k, v);
       });
       formData.append("file", options.file);
+      this.$emit("uploading");
 
       return $post(options.action, formData, { headers: options.headers });
     },

+ 2 - 2
src/constants/enumerate.js

@@ -139,8 +139,8 @@ export const DRAW_RULE_TYPE = {
   CIRCLE: "可反复抽取"
 };
 export const PRINT_BACKUP_TYPE = {
-  ROOM: "每考场",
-  STUDENT: "每考生"
+  ROOM: "每考场"
+  // STUDENT: "每考生"
 };
 export const PAPER_BACKUP_TYPE = {
   ROOM: "每考场",

+ 7 - 2
src/modules/admin/views/AdminUserManage.vue

@@ -27,13 +27,18 @@
         </el-form-item>
 
         <el-form-item label-width="0px">
-          <el-button type="primary" icon="icon icon-search" @click="toPage(1)"
+          <el-button type="primary" icon="el-icon-search" @click="toPage(1)"
             >查询</el-button
           >
         </el-form-item>
       </el-form>
       <div class="part-box-action">
-        <el-button type="primary" @click="toAdd">新增用户</el-button>
+        <el-button
+          type="primary"
+          icon="el-icon-circle-plus-outline"
+          @click="toAdd"
+          >新增用户</el-button
+        >
       </div>
     </div>
 

+ 2 - 2
src/modules/base/api.js

@@ -65,10 +65,10 @@ export const deleteOrganization = id => {
 
 // --------------------------------->
 // common-rule
-export const commonRuleDetail = schoolId => {
+export const examRuleDetail = schoolId => {
   return $postParam("/api/admin/basic/exam_rule/list", { schoolId });
 };
-export const saveCommonBusinessRule = datas => {
+export const saveExamRule = datas => {
   return $post("/api/admin/basic/exam_rule/save", datas);
 };
 // card-rule

+ 6 - 6
src/modules/base/components/RuleBusiness.vue → src/modules/base/components/RuleExam.vue

@@ -1,5 +1,5 @@
 <template>
-  <div class="rule-business part-box part-box-pad part-box-border">
+  <div class="rule-exam part-box part-box-pad part-box-border">
     <h4 class="part-box-tips">变量印刷考务字段配置:</h4>
     <el-form ref="modalFormComp" :model="modalForm" label-width="170px">
       <el-form-item label="必选字段:" required>
@@ -87,7 +87,7 @@
 <script>
 import ModifyField from "../components/ModifyField";
 import { CONFIRM_PRINT_TYPE } from "@/constants/enumerate";
-import { commonRuleDetail, saveCommonBusinessRule } from "../api";
+import { examRuleDetail, saveExamRule } from "../api";
 import { getEnums } from "../../login/api";
 
 const initModalForm = {
@@ -101,7 +101,7 @@ const initModalForm = {
 };
 
 export default {
-  name: "rule-business",
+  name: "rule-exam",
   components: { ModifyField },
   data() {
     return {
@@ -116,8 +116,8 @@ export default {
   methods: {
     async init() {
       const requiredFields = await getEnums("REQUIRED_FIELDS");
-      const commonRule = await commonRuleDetail();
-      this.modalForm = Object.assign(initModalForm, commonRule || {});
+      const examRule = await examRuleDetail();
+      this.modalForm = Object.assign(initModalForm, examRule || {});
       this.modalForm.requiredFields = requiredFields.map(item => {
         return {
           code: item.code,
@@ -158,7 +158,7 @@ export default {
       };
       datas.requiredFields = JSON.stringify(datas.requiredFields);
       datas.extendFields = JSON.stringify(datas.extendFields);
-      const data = await saveCommonBusinessRule(datas).catch(() => {});
+      const data = await saveExamRule(datas).catch(() => {});
       this.isSubmit = false;
       if (!data) return;
 

+ 11 - 8
src/modules/base/views/CardRuleManage.vue

@@ -35,13 +35,16 @@
           </el-select>
         </el-form-item>
         <el-form-item>
-          <el-button type="primary" icon="icon icon-search" @click="toPage(1)"
+          <el-button type="primary" icon="el-icon-search" @click="toPage(1)"
             >查询</el-button
           >
         </el-form-item>
       </el-form>
       <div class="part-box-action">
-        <el-button type="warning" icon="icon icon-plus" @click="toAdd"
+        <el-button
+          type="primary"
+          icon="el-icon-circle-plus-outline"
+          @click="toAdd"
           >添加</el-button
         >
       </div>
@@ -131,7 +134,7 @@
 
 <script>
 import { ABLE_TYPE } from "@/constants/enumerate";
-import { commonRuleDetail, cardRuleListPage, ableCardRule } from "../api";
+import { examRuleDetail, cardRuleListPage, ableCardRule } from "../api";
 import { getEnums } from "../../login/api";
 
 import ModifyCardRule from "../components/ModifyCardRule";
@@ -161,10 +164,10 @@ export default {
   },
   created() {
     this.getList();
-    this.getCommonRuleDetail();
+    this.getExamRule();
   },
   methods: {
-    async getCommonRuleDetail() {
+    async getExamRule() {
       const examRequiredFields = await getEnums("REQUIRED_FIELDS");
       this.cardRequiredFields = await getEnums("CARD_REQUIRED_FIELDS");
       const cardRequiredFieldCodes = this.cardRequiredFields.map(
@@ -178,8 +181,8 @@ export default {
             name: item.desc
           };
         });
-      let commonRule = await commonRuleDetail();
-      if (!commonRule) {
+      let examRule = await examRuleDetail();
+      if (!examRule) {
         this.$notify.error({
           title: "错误",
           message: "请先设置通用考务规则配置"
@@ -189,7 +192,7 @@ export default {
 
       this.cardExtendFields = [
         ...extendFields,
-        ...JSON.parse(commonRule.extendFields).filter(item => item.enable)
+        ...JSON.parse(examRule.extendFields).filter(item => item.enable)
       ];
     },
     async getList() {

+ 3 - 3
src/modules/base/views/CommonRule.vue

@@ -14,16 +14,16 @@
 </template>
 
 <script>
-import RuleBusiness from "../components/RuleBusiness";
+import RuleExam from "../components/RuleExam";
 
 export default {
   name: "common-rule",
   components: {
-    RuleBusiness
+    RuleExam
   },
   data() {
     return {
-      menus: [{ id: "1", name: "考务规则配置", component: "rule-business" }],
+      menus: [{ id: "1", name: "考务规则配置", component: "rule-exam" }],
       curMenu: {}
     };
   },

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

@@ -19,13 +19,16 @@
           ></el-input>
         </el-form-item>
         <el-form-item>
-          <el-button type="primary" icon="icon icon-search" @click="toPage(1)"
+          <el-button type="primary" icon="el-icon-search" @click="toPage(1)"
             >查询</el-button
           >
         </el-form-item>
       </el-form>
       <div class="part-box-action">
-        <el-button type="warning" icon="icon icon-plus" @click="toAdd"
+        <el-button
+          type="primary"
+          icon="el-icon-circle-plus-outline"
+          @click="toAdd"
           >新增课程</el-button
         >
       </div>

+ 5 - 2
src/modules/base/views/RoleManage.vue

@@ -26,13 +26,16 @@
           </el-select>
         </el-form-item>
         <el-form-item>
-          <el-button type="primary" icon="icon icon-search" @click="toPage(1)"
+          <el-button type="primary" icon="el-icon-search" @click="toPage(1)"
             >查询</el-button
           >
         </el-form-item>
       </el-form>
       <div class="part-box-action">
-        <el-button type="warning" icon="icon icon-plus" @click="toAdd"
+        <el-button
+          type="primary"
+          icon="el-icon-circle-plus-outline"
+          @click="toAdd"
           >添加角色</el-button
         >
       </div>

+ 5 - 2
src/modules/base/views/TemplateManage.vue

@@ -40,13 +40,16 @@
           </el-select>
         </el-form-item>
         <el-form-item>
-          <el-button type="primary" icon="icon icon-search" @click="toPage(1)"
+          <el-button type="primary" icon="el-icon-search" @click="toPage(1)"
             >查询</el-button
           >
         </el-form-item>
       </el-form>
       <div class="part-box-action">
-        <el-button type="warning" icon="icon icon-plus" @click="toAdd"
+        <el-button
+          type="primary"
+          icon="el-icon-circle-plus-outline"
+          @click="toAdd"
           >添加模板</el-button
         >
       </div>

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

@@ -43,13 +43,18 @@
         </el-form-item>
 
         <el-form-item label-width="0px">
-          <el-button type="primary" icon="icon icon-search" @click="toPage(1)"
+          <el-button type="primary" icon="el-icon-search" @click="toPage(1)"
             >查询</el-button
           >
         </el-form-item>
       </el-form>
       <div class="part-box-action">
-        <el-button type="primary" @click="toAdd">新增用户</el-button>
+        <el-button
+          type="primary"
+          icon="el-icon-circle-plus-outline"
+          @click="toAdd"
+          >新增用户</el-button
+        >
       </div>
     </div>
 

+ 1 - 1
src/modules/customer/views/CustomerCard.vue

@@ -60,7 +60,7 @@
         </el-form-item>
 
         <el-form-item label-width="0px">
-          <el-button type="primary" icon="icon icon-search" @click="toPage(1)"
+          <el-button type="primary" icon="el-icon-search" @click="toPage(1)"
             >查询</el-button
           >
         </el-form-item>

+ 14 - 4
src/modules/exam/components/ApplyContent.vue

@@ -5,7 +5,10 @@
     </p>
     <div class="task-body">
       <div v-if="IS_APPLY" class="mb-2 text-right">
-        <el-button @click="addAtachment" icon="icon icon-plus-act"
+        <el-button
+          type="primary"
+          icon="el-icon-circle-plus-outline"
+          @click="addAtachment"
           >增加卷型</el-button
         >
       </div>
@@ -166,8 +169,9 @@
     ></upload-paper-dialog>
     <!-- card-option-dialog -->
     <card-option-dialog
-      :data="task"
       ref="CardOptionDialog"
+      :data="task"
+      :exam-rule="examRule"
       @upload-sample-over="initData"
       @draft-task="silentSave"
       @confirm="cardConfirm"
@@ -192,7 +196,12 @@ const initTaskApply = {
   remark: "",
   courseCode: "",
   courseName: "",
-  status: "" // 题卡状态
+  // 题卡状态
+  status: "",
+  // 考务规则
+  review: false,
+  includePaper: false,
+  customCard: false
 };
 
 export default {
@@ -393,7 +402,8 @@ export default {
       const attachmentValid = !this.paperAttachments.some(
         item => !item.attachmentId
       );
-      if (!attachmentValid) {
+      // 设置了入库强制包含试卷时,校验试卷是否上传。
+      if (this.curTaskApply.includePaper && !attachmentValid) {
         this.$message.error("请完成试卷文件上传!");
         return;
       }

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

@@ -27,7 +27,7 @@
           ></upload-file-view>
           <el-button
             type="warning"
-            icon="icon icon-download"
+            icon="el-icon-download"
             style="margin-left:10px;"
           >
             <a :href="downloadUrl" download="命题任务导入模板.xlsx">模板下载</a>

+ 6 - 1
src/modules/exam/components/CardOptionDialog.vue

@@ -113,7 +113,9 @@ const initModalForm = {
   courseName: "",
   cardRuleId: "",
   cardId: "",
-  makeMethod: ""
+  makeMethod: "",
+  // 考务规则
+  customCard: false
 };
 
 export default {
@@ -196,6 +198,9 @@ export default {
         if (this.data.cardRuleId === COMMON_CARD_RULE_ID && key !== "SELECT")
           return;
 
+        // 考务规则中未开启客服制卡时,不显示客服制卡选项
+        if (!this.data.customCard && key === "CUST") return;
+
         cardSourceTypes.push({
           type: key,
           name: CARD_SOURCE_TYPE[key]

+ 3 - 4
src/modules/exam/components/ModifyExamTask.vue

@@ -43,7 +43,7 @@
             show-word-limit
             placeholder="建议不超过100个字"
           ></el-input>
-          <span v-else>{{ modalForm.specialty }}</span>
+          <span v-else>{{ modalForm.specialty | defaultFieldFilter }}</span>
         </el-form-item>
         <el-form-item prop="paperNumber" label="试卷编号:">
           <el-input
@@ -51,7 +51,7 @@
             v-model="modalForm.paperNumber"
             clearable
           ></el-input>
-          <span v-else>{{ modalForm.paperNumber }}</span>
+          <span v-else>{{ modalForm.paperNumber | defaultFieldFilter }}</span>
         </el-form-item>
         <el-form-item prop="startTime" label="命题时间:">
           <el-date-picker
@@ -93,7 +93,7 @@
             :course-code="modalForm.courseCode"
             placeholder="请选择"
           ></question-teacher-user-select>
-          <span v-else>{{ modalForm.userName || "--" }}</span>
+          <span v-else>{{ modalForm.userName | defaultFieldFilter }}</span>
         </el-form-item>
       </el-form>
     </div>
@@ -203,7 +203,6 @@ export default {
   methods: {
     initData(val) {
       this.modalForm = this.$objAssign(initModalForm, val);
-      console.log(this.modalForm);
       this.createTime = [];
     },
     visibleChange() {

+ 11 - 5
src/modules/exam/components/ModifyTaskApply.vue

@@ -96,6 +96,7 @@
         ref="ApplyContent"
         :exam-task="modalForm"
         :edit-type="editType"
+        :exam-rule="examRule"
         @cancel="cancel"
         @modified="modified"
       ></apply-content>
@@ -114,7 +115,7 @@
 <script>
 import ApplyContent from "./ApplyContent";
 import ApplyAuditHistory from "./ApplyAuditHistory";
-import { commonRuleDetail } from "../../base/api";
+import { examRuleDetail } from "../../base/api";
 
 const initModalForm = {
   id: null,
@@ -217,6 +218,7 @@ export default {
       modalIsShow: false,
       modalForm: {},
       needReview: false,
+      examRule: {},
       steps: [],
       actStep: "",
       menus: [
@@ -227,15 +229,19 @@ export default {
     };
   },
   created() {
-    this.checkNeedReview();
+    this.getExamRule();
   },
   methods: {
-    async checkNeedReview() {
-      const commonRule = await commonRuleDetail();
-      this.needReview = commonRule && commonRule.review;
+    async getExamRule() {
+      const examRule = await examRuleDetail();
+      this.examRule = examRule || {};
+      this.needReview = examRule && examRule.review;
     },
     initData(val) {
       this.modalForm = this.$objAssign(initModalForm, val);
+      this.modalForm.includePaper = this.examRule.includePaper;
+      this.modalForm.review = this.examRule.review;
+      this.modalForm.customCard = this.examRule.customCard;
       this.buildSteps();
     },
     buildSteps() {

+ 10 - 1
src/modules/exam/components/UploadPaperDialog.vue

@@ -19,13 +19,16 @@
         :format="curConfig.format"
         :upload-url="uploadUrl"
         :upload-data="curConfig.uploadData"
+        @uploading="uplaoding"
         @upload-error="uplaodError"
         @upload-success="uploadSuccess"
         ref="UploadFileView"
       ></upload-file-view>
     </div>
     <div slot="footer">
-      <el-button type="primary" @click="confirm">确认</el-button>
+      <el-button type="primary" @click="confirm" :disabled="loading"
+        >确认</el-button
+      >
       <el-button type="danger" @click="cancel" plain>关闭</el-button>
     </div>
   </el-dialog>
@@ -55,6 +58,7 @@ export default {
   data() {
     return {
       modalIsShow: false,
+      loading: false,
       attachment: {},
       config: {
         paper: {
@@ -83,12 +87,14 @@ export default {
     },
     // upload-handler
     uplaodError(errorData) {
+      this.loading = false;
       this.$notify.error({
         title: "错误提示",
         message: errorData.message
       });
     },
     uploadSuccess(data) {
+      this.loading = false;
       this.$message.success("上传成功!");
       let infos = {
         attachmentId: data.id,
@@ -98,6 +104,9 @@ export default {
       };
       this.attachment = Object.assign(this.attachment, infos);
     },
+    uplaoding() {
+      this.loading = true;
+    },
     cancel() {
       this.modalIsShow = false;
     },

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

@@ -33,7 +33,7 @@
           </el-select>
         </el-form-item>
         <el-form-item>
-          <el-button type="primary" icon="icon icon-search" @click="toPage(1)"
+          <el-button type="primary" icon="el-icon-search" @click="toPage(1)"
             >查询</el-button
           >
         </el-form-item>

+ 11 - 3
src/modules/exam/views/ExamTaskManage.vue

@@ -72,16 +72,24 @@
         </el-form-item>
 
         <el-form-item label-width="0px">
-          <el-button type="primary" icon="icon icon-search" @click="toPage(1)"
+          <el-button type="primary" icon="el-icon-search" @click="toPage(1)"
             >查询</el-button
           >
         </el-form-item>
       </el-form>
       <div class="part-box-action">
-        <el-button icon="icon icon-plus" type="warning" @click="toBatchAdd">
+        <el-button
+          icon="el-icon-circle-plus-outline"
+          type="warning"
+          @click="toBatchAdd"
+        >
           批量新建命题任务
         </el-button>
-        <el-button icon="icon icon-plus" type="primary" @click="toAdd">
+        <el-button
+          icon="el-icon-circle-plus-outline"
+          type="primary"
+          @click="toAdd"
+        >
           新建命题任务
         </el-button>
       </div>

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

@@ -71,7 +71,7 @@
           </el-date-picker>
         </el-form-item>
         <el-form-item label-width="0px">
-          <el-button type="primary" icon="icon icon-search" @click="toPage(1)"
+          <el-button type="primary" icon="el-icon-search" @click="toPage(1)"
             >查询</el-button
           >
         </el-form-item>

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

@@ -33,7 +33,7 @@
           </el-date-picker>
         </el-form-item>
         <el-form-item label-width="0px">
-          <el-button type="primary" icon="icon icon-search" @click="toPage(1)"
+          <el-button type="primary" icon="el-icon-search" @click="toPage(1)"
             >查询</el-button
           >
         </el-form-item>

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

@@ -74,7 +74,7 @@
         </el-form-item>
 
         <el-form-item label-width="0px">
-          <el-button type="primary" icon="icon icon-search" @click="toPage(1)"
+          <el-button type="primary" icon="el-icon-search" @click="toPage(1)"
             >查询</el-button
           >
         </el-form-item>

+ 17 - 18
src/modules/print/components/ModifyPlanPaper.vue

@@ -28,7 +28,7 @@
           </el-col>
           <el-col :span="12">
             <el-form-item label="适用专业(方向):">
-              <span>{{ instance.specialty }}</span>
+              <span>{{ instance.specialty | defaultFieldFilter }}</span>
             </el-form-item>
           </el-col>
         </el-row>
@@ -46,8 +46,8 @@
         </el-row>
         <el-row>
           <el-col :span="12">
-            <el-form-item prop="paperNumber" label="试卷编号:">
-              <el-select
+            <el-form-item label="试卷编号:">
+              <!-- <el-select
                 v-model="modalForm.paperNumber"
                 placeholder="请选择"
                 @change="paperChange"
@@ -58,7 +58,8 @@
                   :value="item.paperNumber"
                   :label="item.paperNumber"
                 ></el-option>
-              </el-select>
+              </el-select> -->
+              <span>{{ instance.paperNumber }}</span>
             </el-form-item>
           </el-col>
           <el-col :span="12">
@@ -80,12 +81,14 @@
         <el-row>
           <el-col :span="12">
             <el-form-item label="已曝光类型:">
-              <span>{{ instance.exposedPaperType }}</span>
+              <span>{{ instance.exposedPaperType | defaultFieldFilter }}</span>
             </el-form-item>
           </el-col>
           <el-col :span="12">
             <el-form-item label="未曝光类型:">
-              <span>{{ instance.unexposedPaperType }}</span>
+              <span>{{
+                instance.unexposedPaperType | defaultFieldFilter
+              }}</span>
             </el-form-item>
           </el-col>
         </el-row>
@@ -140,6 +143,7 @@ import { attachmentPreview } from "../../login/api";
 
 const initModalForm = {
   id: null,
+  examDetailId: null,
   paperNumber: "",
   relatePaperType: ""
 };
@@ -189,19 +193,17 @@ export default {
         : [];
       this.cardId = data.cardId;
     },
-    async getPapers() {
-      this.papers = await linkPaperNumberList({
-        courseCode: this.instance.courseCode
+    async getPaperTypes() {
+      const papers = await linkPaperNumberList({
+        examTaskId: this.instance.id,
+        printPlanId: this.instance.printPlanId
       });
 
-      const paper = this.papers.find(
-        item => item.paperNumber === this.modalForm.paperNumber
-      );
-      if (paper) this.paperTypes = paper.paperTypes;
+      if (papers && papers[0]) this.paperTypes = papers[0].paperTypes;
     },
     visibleChange() {
       this.modalForm = this.$objAssign(initModalForm, this.instance);
-      this.getPapers();
+      this.getPaperTypes();
       this.getAttachments();
 
       this.$nextTick(() => {
@@ -243,10 +245,7 @@ export default {
 
       if (this.isSubmit) return;
       this.isSubmit = true;
-      let datas = {
-        ...this.modalForm
-      };
-      const data = await updatePlanLinkPaper(datas).catch(() => {});
+      const data = await updatePlanLinkPaper(this.modalForm).catch(() => {});
       this.isSubmit = false;
       if (!data) return;
 

+ 1 - 1
src/modules/print/components/ModifyPrintPlan.vue

@@ -275,7 +275,7 @@ const initModalForm = {
       type: "PACKAGE",
       templateId: [],
       oldTemplateId: [],
-      backupMethod: "STUDENT",
+      backupMethod: "ROOM",
       backupCount: 1
     }
   ],

+ 109 - 0
src/modules/print/components/UploadBusinessDataDialog.vue

@@ -0,0 +1,109 @@
+<template>
+  <el-dialog
+    class="upload-paper-dialog"
+    :visible.sync="modalIsShow"
+    title="导入教务数据"
+    top="10vh"
+    width="610px"
+    :close-on-click-modal="false"
+    :close-on-press-escape="false"
+    append-to-body
+    @opened="visibleChange"
+  >
+    <div class="file-upload-body">
+      <el-form ref="modalFormComp" :model="modalForm" label-width="90px">
+        <el-form-item prop="printPlanId" label="印刷计划:">
+          <el-select
+            v-model="modalForm.printPlanId"
+            placeholder="请选择"
+            filterable
+            :disabled="loading"
+          >
+            <el-option
+              v-for="item in plans"
+              :key="item.id"
+              :value="item.id"
+              :label="item.name"
+            >
+            </el-option>
+          </el-select>
+        </el-form-item>
+        <el-form-item label="上传文件:">
+          <upload-file-view
+            input-width="350px"
+            :format="['xls', 'xlsx']"
+            :upload-url="uploadUrl"
+            :upload-data="modalForm"
+            @uploading="uploading"
+            @upload-error="uplaodError"
+            @upload-success="uploadSuccess"
+            ref="UploadFileView"
+            :disabled="loading || !modalForm.printPlanId"
+          ></upload-file-view>
+        </el-form-item>
+      </el-form>
+    </div>
+    <div slot="footer">
+      <el-button type="danger" @click="cancel" plain>关闭</el-button>
+    </div>
+  </el-dialog>
+</template>
+
+<script>
+import UploadFileView from "@/components/UploadFileView";
+import { printPlanQuery } from "../api";
+
+export default {
+  name: "upload-paper-dialog",
+  components: { UploadFileView },
+  data() {
+    return {
+      modalIsShow: false,
+      loading: false,
+      plans: [],
+      // import
+      uploadUrl: "/api/admin/exam/print/data_import",
+      modalForm: {
+        type: "FILE",
+        printPlanId: ""
+      }
+    };
+  },
+  created() {
+    this.getPlans();
+  },
+  methods: {
+    async getPlans() {
+      const res = await printPlanQuery();
+      this.plans = res.filter(item => ["NEW", "READY"].includes(item.status));
+    },
+    visibleChange() {
+      this.modalForm.printPlanId = "";
+      this.loading = false;
+      if (this.plans.length === 1) {
+        this.modalForm.printPlanId = this.plans[0].id;
+      }
+    },
+    // upload-handler
+    uplaodError(errorData) {
+      this.loading = false;
+      this.$notify.error({ title: "错误提示", message: errorData.message });
+    },
+    uploadSuccess(res) {
+      this.loading = false;
+      this.$message.success("导入成功!");
+      this.$emit("modified");
+      this.cancel();
+    },
+    uploading() {
+      this.loading = true;
+    },
+    cancel() {
+      this.modalIsShow = false;
+    },
+    open() {
+      this.modalIsShow = true;
+    }
+  }
+};
+</script>

+ 1 - 1
src/modules/print/views/BusinessDataDetail.vue

@@ -46,7 +46,7 @@
           ></el-input>
         </el-form-item>
         <el-form-item label-width="0px">
-          <el-button type="primary" icon="icon icon-search" @click="search"
+          <el-button type="primary" icon="el-icon-search" @click="search"
             >查询</el-button
           >
         </el-form-item>

+ 16 - 30
src/modules/print/views/BusinessDataExport.vue

@@ -7,7 +7,6 @@
             v-model.trim="filter.printPlanId"
             placeholder="请选择"
             clearable
-            @change="planChange"
           ></print-plan-select>
         </el-form-item>
         <el-form-item label="课程(代码):" label-width="110px">
@@ -47,39 +46,30 @@
           ></el-input>
         </el-form-item>
         <el-form-item label-width="0px">
-          <el-button type="primary" icon="icon icon-search" @click="search"
+          <el-button type="primary" icon="el-icon-search" @click="search"
             >查询</el-button
           >
         </el-form-item>
       </el-form>
       <div class="part-box-action">
         <el-button
-          icon="icon icon-download-act"
+          icon="el-icon-download"
           :loading="loading"
           @click="toDownloadTemplate"
         >
           考务数据模板下载
         </el-button>
         <el-button
-          icon="icon icon-download"
+          icon="el-icon-download"
           type="primary"
           :loading="loading"
           @click="toExport"
         >
           导出查询结果
         </el-button>
-        <upload-button
-          btn-icon="icon icon-share"
-          btn-type="warning"
-          btn-content="导入"
-          :upload-url="uploadUrl"
-          :upload-data="uploadData"
-          :format="['xls', 'xlsx']"
-          @upload-error="uplaodError"
-          @upload-success="uploadSuccess"
-          :disabled="!canImport"
-        >
-        </upload-button>
+        <el-button icon="el-icon-upload2" type="warning" @click="toUpload">
+          导入
+        </el-button>
       </div>
     </div>
 
@@ -100,8 +90,7 @@
         <el-table-column prop="examTime" label="考试时间"> </el-table-column>
         <el-table-column prop="examPlace" label="考点"> </el-table-column>
         <el-table-column prop="examRoom" label="考场"> </el-table-column>
-        <el-table-column prop="packageCode" label="卷袋号" width="80">
-        </el-table-column>
+        <el-table-column prop="packageCode" label="卷袋号"> </el-table-column>
         <el-table-column prop="courseNameCode" label="课程(代码)">
         </el-table-column>
         <el-table-column prop="paperNumber" label="试卷编码"></el-table-column>
@@ -154,6 +143,11 @@
       ref="PreviewBusinessDetail"
       :instance="curRow"
     ></preview-business-detail>
+    <!-- UploadBusinessDataDialog -->
+    <upload-business-data-dialog
+      ref="UploadBusinessDataDialog"
+      @modified="getList"
+    ></upload-business-data-dialog>
   </div>
 </template>
 
@@ -164,13 +158,13 @@ import {
   businessTemplateDownload,
   businessDataExport
 } from "../api";
-import UploadButton from "@/components/UploadButton";
 import PreviewBusinessDetail from "../components/PreviewBusinessDetail";
+import UploadBusinessDataDialog from "../components/UploadBusinessDataDialog";
 import { downloadBlob, parseTimeRangeDateAndTime } from "@/plugins/utils";
 
 export default {
   name: "business-data-export",
-  components: { UploadButton, PreviewBusinessDetail },
+  components: { PreviewBusinessDetail, UploadBusinessDataDialog },
   data() {
     return {
       filter: {
@@ -237,16 +231,8 @@ export default {
       this.toPage(1);
       this.getTotalData();
     },
-    planChange(plan) {
-      this.curPrintPlan = plan;
-      this.uploadData.printPlanId = plan.id;
-    },
-    uplaodError(errorData) {
-      this.$notify.error({ title: "错误提示", message: errorData.message });
-    },
-    uploadSuccess(res) {
-      this.$message.success("上传成功!");
-      this.getList();
+    toUpload() {
+      this.$refs.UploadBusinessDataDialog.open();
     },
     async toExport() {
       // 异步导出

+ 1 - 1
src/modules/print/views/PlanLinkPaper.vue

@@ -39,7 +39,7 @@
           ></paper-number-select>
         </el-form-item>
         <el-form-item label-width="0px">
-          <el-button type="primary" icon="icon icon-search" @click="search"
+          <el-button type="primary" icon="el-icon-search" @click="search"
             >查询</el-button
           >
         </el-form-item>

+ 6 - 2
src/modules/print/views/PrintPlanManage.vue

@@ -39,13 +39,17 @@
           </el-date-picker>
         </el-form-item>
         <el-form-item label-width="0px">
-          <el-button type="primary" icon="icon icon-search" @click="search"
+          <el-button type="primary" icon="el-icon-search" @click="search"
             >查询</el-button
           >
         </el-form-item>
       </el-form>
       <div class="part-box-action">
-        <el-button icon="icon icon-plus" type="primary" @click="toAdd">
+        <el-button
+          icon="el-icon-circle-plus-outline"
+          type="primary"
+          @click="toAdd"
+        >
           新建印刷计划
         </el-button>
       </div>

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

@@ -68,7 +68,7 @@
           </el-date-picker>
         </el-form-item>
         <el-form-item label-width="0px">
-          <el-button type="primary" icon="icon icon-search" @click="search"
+          <el-button type="primary" icon="el-icon-search" @click="search"
             >查询</el-button
           >
         </el-form-item>

+ 3 - 0
src/plugins/filters.js

@@ -14,6 +14,9 @@ import { formatDate } from "../plugins/utils";
 
 const DEFAULT_FIELD = "--";
 
+Vue.filter("defaultFieldFilter", function(val) {
+  return val || DEFAULT_FIELD;
+});
 Vue.filter("enableFilter", function(val) {
   return val ? "启用" : "禁用";
 });