zhangjie %!s(int64=3) %!d(string=hai) anos
pai
achega
5827369e51

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

@@ -20,7 +20,7 @@
     }
   }
   .el-table,
-  .el-button--small {
+  .el-button--small.el-button--text {
     font-size: $--font-size-base;
   }
 }

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

@@ -251,14 +251,14 @@ body {
   text-align: left;
 
   th {
-    padding: 8px 5px 8px 10px;
+    padding: 14px;
     line-height: 1.2;
     letter-spacing: 1px;
-    color: $--color-text-gray;
+    color: $--color-text-gray-2;
     border: 1px solid $--color-border;
   }
   td {
-    padding: 8px 5px 8px 10px;
+    padding: 14px;
     line-height: 1.2;
     color: $--color-text-dark;
     border: 1px solid $--color-border;

+ 17 - 2
src/assets/styles/element-ui-costom.scss

@@ -190,6 +190,11 @@
 .el-button--text + .el-button--text {
   margin-left: 5px;
 }
+.el-button--small {
+  padding-top: 8px;
+  padding-bottom: 8px;
+  font-size: 12px;
+}
 .el-button--text {
   color: $--color-text-gray-2;
 
@@ -217,6 +222,16 @@
     border-color: $--color-primary-light;
   }
 }
+.el-button--success {
+  background-color: $--color-success;
+  border-color: $--color-success;
+
+  &:hover,
+  &:focus {
+    background-color: $--color-success-light;
+    border-color: $--color-success-light;
+  }
+}
 
 // table
 .el-table {
@@ -415,13 +430,13 @@
 .el-date-editor {
   .el-range-separator {
     width: auto;
-    line-height: 28px;
+    line-height: 24px;
   }
   .el-range-input {
     background-color: transparent;
   }
   .el-input__icon {
-    line-height: 28px;
+    line-height: 24px;
   }
 }
 

+ 11 - 10
src/assets/styles/home.scss

@@ -82,7 +82,7 @@
     }
     &-right-icon {
       position: absolute;
-      right: -10px;
+      right: 0;
       top: 50%;
       transform: translateY(-50%);
       color: #d3d5e0;
@@ -124,17 +124,17 @@
     &-info {
       display: block;
       position: absolute;
-      padding: 0 5px;
-      min-width: 20px;
-      height: 20px;
-      font-size: 14px;
-      line-height: 20px;
-      top: 10px;
-      right: 25px;
-      background-color: $--color-danger;
+      padding: 0 3px;
+      min-width: 16px;
+      height: 16px;
+      font-size: 12px;
+      line-height: 16px;
+      top: 12px;
+      right: 0;
+      background-color: $--color-warning;
       color: #fff;
       text-align: center;
-      border-radius: 10px;
+      border-radius: 3px;
     }
   }
 }
@@ -260,6 +260,7 @@
   margin-bottom: 18px;
   font-size: 12px;
   font-weight: 500;
+  color: $--color-text-gray-2;
 
   .breadcrumb-tips {
     display: inline-block;

+ 3 - 2
src/assets/styles/variables.scss

@@ -13,8 +13,9 @@ $--color-background: #eff0f5;
 // status
 $--color-primary: #3a5ae5 !default;
 $--color-primary-light: mix(#fff, $--color-primary, 20%) !default;
-$--color-success: #32cf8a !default;
-$--color-warning: #feca57 !default;
+$--color-success: #3fcb98 !default;
+$--color-success-light: #32cf8a !default;
+$--color-warning: #ff9427 !default;
 $--color-danger: #fe5d4e !default;
 $--color-cyan: #2abcff !default;
 $--color-cyan-light: #5fc9fa !default;

+ 1 - 1
src/modules/base/views/CourseManage.vue

@@ -57,7 +57,7 @@
           v-if="checkPrivilege('button', 'Import')"
           btn-icon="el-icon-upload"
           btn-content="批量导入"
-          btn-type="primary"
+          btn-type="success"
           :upload-url="uploadUrl"
           :format="['xls', 'xlsx']"
           @upload-error="uplaodError"

+ 1 - 1
src/modules/base/views/StudentManage.vue

@@ -34,7 +34,7 @@
           v-if="checkPrivilege('button', 'import')"
           btn-icon="el-icon-upload"
           btn-content="批量导入"
-          btn-type="primary"
+          btn-type="success"
           :upload-url="uploadUrl"
           :format="['xls', 'xlsx']"
           @upload-error="uplaodError"

+ 1 - 1
src/modules/base/views/TemplateManage.vue

@@ -94,7 +94,7 @@
             scope.row.createTime | timestampFilter
           }}</span>
         </el-table-column>
-        <el-table-column class-name="action-column" label="操作" width="120px">
+        <el-table-column class-name="action-column" label="操作" width="160">
           <template slot-scope="scope">
             <el-button
               v-if="checkPrivilege('link', 'preview')"

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

@@ -75,8 +75,8 @@
         <upload-button
           v-if="checkPrivilege('button', 'export')"
           btn-icon="el-icon-upload"
-          btn-content="批量导入"
-          btn-type="primary"
+          btn-content="导入用户"
+          btn-type="success"
           :upload-url="uploadUrl"
           :format="['xls', 'xlsx']"
           @upload-error="uplaodError"
@@ -100,7 +100,7 @@
           label="姓名"
           width="120"
         ></el-table-column>
-        <el-table-column prop="workNo" label="工号"></el-table-column>
+        <el-table-column prop="code" label="工号"></el-table-column>
         <el-table-column
           prop="mobileNumber"
           label="手机号"

+ 13 - 8
src/modules/exam/components/ApplyContent.vue

@@ -46,11 +46,12 @@
         </tr>
         <tr v-for="(attachment, index) in paperAttachments" :key="index">
           <td>{{ attachment.name }}卷</td>
-          <td class="td-link">
-            <span
+          <td>
+            <el-button
               v-if="IS_APPLY"
+              type="text"
+              class="btn-primary"
               @click="toUpload(attachment)"
-              title="点击上传试卷"
             >
               <i
                 :class="[
@@ -63,15 +64,19 @@
                   ? attachment.filename
                   : "点击上传试卷文件"
               }}
-            </span>
-            <span
+            </el-button>
+            <el-button
               v-else
+              type="text"
+              class="btn-primary"
               @click="downloadPaper(attachment)"
-              title="点击查看试卷"
             >
-              <i class="el-icon-download" v-if="attachment.attachmentId"></i>
+              <i
+                class="el-icon-download mr-1"
+                v-if="attachment.attachmentId"
+              ></i>
               <i>{{ attachment.filename }}</i>
-            </span>
+            </el-button>
           </td>
           <td :rowspan="paperAttachments.length" v-if="index === 0">
             {{ createCardTypeName }}

+ 95 - 97
src/modules/exam/components/CreatePrintTask.vue

@@ -4,109 +4,107 @@
     :visible.sync="modalIsShow"
     :title="title"
     top="10px"
-    width="700px"
+    width="600px"
     :close-on-click-modal="false"
     :close-on-press-escape="false"
     append-to-body
     @opened="visibleChange"
   >
-    <div class="part-box part-box-pad part-box-border">
-      <el-form
-        ref="modalFormComp"
-        label-width="100px"
-        :rules="rules"
-        :model="modalForm"
-      >
-        <el-form-item label="印刷计划:">
-          <span>{{ instance.printPlanName }}</span>
-        </el-form-item>
-        <el-form-item label="考试时间:"
-          >{{ instance.examStartTime | timestampFilter }} 至
-          {{ instance.examEndTime | timestampFilter }}
-        </el-form-item>
-        <el-form-item label="考场:">
-          <el-input
-            v-model="modalForm.examRoom"
-            placeholder="请填写考场名称"
-            clearable
-          ></el-input>
-        </el-form-item>
-        <el-form-item label="考点:">
-          <el-input
-            v-model="modalForm.examPlace"
-            placeholder="请填写考点名称"
-            clearable
-          ></el-input>
-        </el-form-item>
-        <el-form-item label="监考老师:">
-          <el-input
-            v-model="modalForm.invigilatorTeacher"
-            placeholder="请填写监考老师"
-            clearable
-          ></el-input>
-        </el-form-item>
-        <el-form-item prop="classId" label="考试对象:">
-          <el-select
-            v-model="classIds"
-            placeholder="请选择"
-            multiple
-            clearable
-            @change="classChange"
-          >
-            <el-option
-              v-for="clazz in classList"
-              :key="clazz.classId"
-              :value="clazz.classId"
-              :label="clazz.className"
-            ></el-option>
-          </el-select>
-        </el-form-item>
-        <el-form-item prop="studentCount" label="人数:">
-          <el-input-number
-            v-model="modalForm.studentCount"
-            :min="0"
-            :max="10000"
-            :step="1"
-            step-strictly
-            disabled
-            :controls="false"
-          ></el-input-number>
-        </el-form-item>
-        <el-form-item prop="printHouseId" label="印刷室:">
-          <el-select
-            v-model="modalForm.printHouseId"
-            placeholder="请选择"
-            @change="printHouseChange"
-          >
-            <el-option
-              v-for="room in printRooms"
-              :key="room.houseId"
-              :value="room.houseId"
-              :label="room.houseName"
-            ></el-option>
-          </el-select>
-        </el-form-item>
-      </el-form>
-      <el-form
-        ref="extendFieldFormComp"
-        label-width="100px"
-        :rules="extendFieldRules"
-        :model="extendFieldModal"
-      >
-        <el-form-item
-          v-for="item in extendFields"
-          :key="item.code"
-          :label="`${item.name}:`"
-          :prop="item.code"
+    <el-form
+      ref="modalFormComp"
+      label-width="100px"
+      :rules="rules"
+      :model="modalForm"
+    >
+      <el-form-item label="印刷计划:">
+        <span>{{ instance.printPlanName }}</span>
+      </el-form-item>
+      <el-form-item label="考试时间:"
+        >{{ instance.examStartTime | timestampFilter }} 至
+        {{ instance.examEndTime | timestampFilter }}
+      </el-form-item>
+      <el-form-item prop="examRoom" label="考场:">
+        <el-input
+          v-model="modalForm.examRoom"
+          placeholder="请填写考场名称"
+          clearable
+        ></el-input>
+      </el-form-item>
+      <el-form-item prop="examPlace" label="考点:">
+        <el-input
+          v-model="modalForm.examPlace"
+          placeholder="请填写考点名称"
+          clearable
+        ></el-input>
+      </el-form-item>
+      <el-form-item label="监考老师:">
+        <el-input
+          v-model="modalForm.invigilatorTeacher"
+          placeholder="请填写监考老师"
+          clearable
+        ></el-input>
+      </el-form-item>
+      <el-form-item prop="classId" label="考试对象:">
+        <el-select
+          v-model="classIds"
+          placeholder="请选择"
+          multiple
+          clearable
+          @change="classChange"
         >
-          <el-input
-            v-model="extendFieldModal[item.code]"
-            :placeholder="`请填写${item.name}`"
-            clearable
-          ></el-input>
-        </el-form-item>
-      </el-form>
-    </div>
+          <el-option
+            v-for="clazz in classList"
+            :key="clazz.classId"
+            :value="clazz.classId"
+            :label="clazz.className"
+          ></el-option>
+        </el-select>
+      </el-form-item>
+      <el-form-item prop="studentCount" label="人数:">
+        <el-input-number
+          v-model="modalForm.studentCount"
+          :min="0"
+          :max="10000"
+          :step="1"
+          step-strictly
+          disabled
+          :controls="false"
+        ></el-input-number>
+      </el-form-item>
+      <el-form-item prop="printHouseId" label="印刷室:">
+        <el-select
+          v-model="modalForm.printHouseId"
+          placeholder="请选择"
+          @change="printHouseChange"
+        >
+          <el-option
+            v-for="room in printRooms"
+            :key="room.houseId"
+            :value="room.houseId"
+            :label="room.houseName"
+          ></el-option>
+        </el-select>
+      </el-form-item>
+    </el-form>
+    <el-form
+      ref="extendFieldFormComp"
+      label-width="100px"
+      :rules="extendFieldRules"
+      :model="extendFieldModal"
+    >
+      <el-form-item
+        v-for="item in extendFields"
+        :key="item.code"
+        :label="`${item.name}:`"
+        :prop="item.code"
+      >
+        <el-input
+          v-model="extendFieldModal[item.code]"
+          :placeholder="`请填写${item.name}`"
+          clearable
+        ></el-input>
+      </el-form-item>
+    </el-form>
 
     <div slot="footer">
       <el-button type="primary" :disabled="isSubmit" @click="submit"

+ 14 - 9
src/modules/exam/components/CreateTaskApply.vue

@@ -130,8 +130,12 @@
           </tr>
           <tr v-for="(attachment, index) in paperAttachments" :key="index">
             <td>{{ attachment.name }}卷</td>
-            <td class="td-link">
-              <span @click="toUpload(attachment)" title="点击上传试卷">
+            <td>
+              <el-button
+                type="text"
+                class="btn-primary"
+                @click="toUpload(attachment)"
+              >
                 <i
                   :class="[
                     'icon',
@@ -143,17 +147,18 @@
                     ? attachment.filename
                     : "点击上传试卷文件"
                 }}
-              </span>
+              </el-button>
             </td>
             <td :rowspan="paperAttachments.length" v-if="index === 0">
               {{ createCardTypeName }}
             </td>
-            <td
-              class="td-link"
-              :rowspan="paperAttachments.length"
-              v-if="index === 0"
-            >
-              <span @click="toCreateOrViewCard">{{ cardTodoName }}</span>
+            <td :rowspan="paperAttachments.length" v-if="index === 0">
+              <el-button
+                type="text"
+                class="btn-primary"
+                @click="toCreateOrViewCard"
+                >{{ cardTodoName }}</el-button
+              >
               <el-button
                 v-if="examTaskDetail.makeMethod"
                 size="mini"

+ 22 - 24
src/modules/exam/components/PrintTaskStudents.vue

@@ -10,30 +10,28 @@
     append-to-body
     @open="visibleChange"
   >
-    <div class="part-box">
-      <el-table ref="TableList" :data="dataList">
-        <el-table-column
-          type="index"
-          label="序号"
-          width="70"
-          :index="indexMethod"
-        ></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="clazz" label="班级"></el-table-column>
-      </el-table>
-      <div class="part-page">
-        <el-pagination
-          v-if="dataList.length"
-          background
-          layout="total,prev, pager, next"
-          :current-page="current"
-          :total="total"
-          :page-size="size"
-          @current-change="toPage"
-        >
-        </el-pagination>
-      </div>
+    <el-table ref="TableList" :data="dataList">
+      <el-table-column
+        type="index"
+        label="序号"
+        width="70"
+        :index="indexMethod"
+      ></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="clazz" label="班级"></el-table-column>
+    </el-table>
+    <div class="part-page">
+      <el-pagination
+        v-if="dataList.length"
+        background
+        layout="total,prev, pager, next"
+        :current-page="current"
+        :total="total"
+        :page-size="size"
+        @current-change="toPage"
+      >
+      </el-pagination>
     </div>
 
     <div slot="footer"></div>

+ 101 - 84
src/modules/exam/components/PublishPrintTask.vue

@@ -3,104 +3,99 @@
     class="publish-print-task"
     :visible.sync="modalIsShow"
     title="发布印刷任务"
+    fullscreen
     :close-on-click-modal="false"
     :close-on-press-escape="false"
     append-to-body
-    fullscreen
     @opened="visibleChange"
   >
-    <div class="part-box part-box-pad part-box-border">
-      <el-form ref="FilterForm" label-position="left" label-width="85px" inline>
-        <el-form-item label="印刷计划:">
+    <div class="md-4">
+      <el-form ref="FilterForm" label-position="left" label-width="0" inline>
+        <el-form-item>
           <print-plan-select
             v-model.trim="filter.printPlanId"
-            placeholder="请选择"
+            placeholder="印刷计划"
             clearable
             @change="printPlanChange"
           ></print-plan-select>
         </el-form-item>
-        <el-form-item label="考试时间:">
+        <el-form-item>
           <el-date-picker
-            v-model="createTime"
-            type="datetimerange"
-            :picker-options="pickerOptions"
+            v-model="createDate"
+            type="date"
             :disabled="timeDisabled"
-            range-separator="至"
-            start-placeholder="开始时间"
-            end-placeholder="结束时间"
             value-format="timestamp"
-            align="right"
-            unlink-panels
+            placeholder="考试日期"
+            style="width: 150px"
             @change="timeChange"
           >
           </el-date-picker>
         </el-form-item>
+        <el-form-item>
+          <el-time-picker
+            is-range
+            v-model="createTime"
+            range-separator="至"
+            start-placeholder="考试开始时间"
+            end-placeholder="考试结束时间"
+            placeholder="选择时间范围"
+            value-format="timestamp"
+            :disabled="timeDisabled"
+            @change="timeChange"
+          >
+          </el-time-picker>
+        </el-form-item>
       </el-form>
     </div>
-    <div class="part-box part-box-pad part-box-border">
-      <el-button class="mb-2" type="primary" @click="toAdd"
-        >增加考试对象</el-button
+    <el-button class="mb-2" type="primary" @click="toAdd"
+      >增加考试对象</el-button
+    >
+    <el-table ref="TableList" :data="tableData">
+      <el-table-column type="index" width="80" label="卷袋序号">
+      </el-table-column>
+      <el-table-column prop="examRoom" label="考场"> </el-table-column>
+      <el-table-column prop="examPlace" label="考点"> </el-table-column>
+      <el-table-column prop="invigilatorTeacher" label="监考老师">
+      </el-table-column>
+      <el-table-column prop="className" label="考试对象"> </el-table-column>
+      <el-table-column prop="studentCount" label="人数"> </el-table-column>
+      <el-table-column prop="printHouseName" label="印刷室"> </el-table-column>
+      <el-table-column
+        v-for="item in extendFields"
+        :key="item.code"
+        :label="item.name"
       >
-      <el-table ref="TableList" :data="tableData">
-        <el-table-column
-          type="index"
-          width="70"
-          label="卷袋序号"
-        ></el-table-column>
-        <el-table-column prop="examRoom" label="考场"> </el-table-column>
-        <el-table-column prop="examPlace" label="考点"> </el-table-column>
-        <el-table-column prop="invigilatorTeacher" label="监考老师">
-        </el-table-column>
-        <el-table-column prop="className" label="考试对象"> </el-table-column>
-        <el-table-column prop="studentCount" label="人数"> </el-table-column>
-        <el-table-column prop="printHouseName" label="印刷室">
-        </el-table-column>
-        <el-table-column
-          v-for="item in extendFields"
-          :key="item.code"
-          :label="item.name"
-        >
-          <div slot-scope="scope">
-            {{ scope.row.extends[item.code] }}
-          </div>
-        </el-table-column>
-        <el-table-column label="操作">
-          <template slot-scope="scope">
-            <el-button
-              class="btn-primary"
-              type="text"
-              icon="icon icon-circle-right"
-              @click="toPreview(scope.row)"
-              title="考生明细"
-            ></el-button>
-            <el-button
-              class="btn-primary"
-              type="text"
-              icon="icon icon-edit"
-              @click="toEdit(scope.row)"
-              title="编辑"
-            ></el-button>
-            <el-button
-              class="btn-primary"
-              type="text"
-              icon="icon icon-delete"
-              @click="toDelete(scope.row)"
-              title="删除"
-            ></el-button>
-          </template>
-        </el-table-column>
-      </el-table>
-      <div class="part-page">
-        <el-pagination
-          background
-          layout="total,prev, pager, next"
-          :current-page="current"
-          :total="total"
-          :page-size="size"
-          @current-change="toPage"
-        >
-        </el-pagination>
-      </div>
+        <div slot-scope="scope">
+          {{ scope.row.extends[item.code] }}
+        </div>
+      </el-table-column>
+      <el-table-column label="操作" width="120px">
+        <template slot-scope="scope">
+          <el-button
+            class="btn-primary"
+            type="text"
+            @click="toPreview(scope.row)"
+            >考生明细</el-button
+          >
+          <el-button class="btn-primary" type="text" @click="toEdit(scope.row)"
+            >编辑</el-button
+          >
+          <el-button class="btn-danger" type="text" @click="toDelete(scope.row)"
+            >删除</el-button
+          >
+        </template>
+      </el-table-column>
+    </el-table>
+    <div class="part-page">
+      <el-pagination
+        background
+        layout="total,prev, pager, next"
+        :current-page="current"
+        :total="total"
+        :page-size="size"
+        @current-change="toPage"
+      >
+      </el-pagination>
     </div>
 
     <div slot="footer"></div>
@@ -124,9 +119,9 @@
 <script>
 import { listTaskPrint, removeTaskPrint } from "../api";
 import { examRuleDetail } from "../../base/api";
-import pickerOptions from "@/constants/datePickerOptions";
 import CreatePrintTask from "./CreatePrintTask";
 import PrintTaskStudents from "./PrintTaskStudents";
+import { getTimeDatestamp } from "@/plugins/utils";
 
 export default {
   name: "publish-print-task",
@@ -164,12 +159,18 @@ export default {
       curClassId: "",
       extendFields: [],
       // date-picker
-      createTime: [],
-      pickerOptions
+      curCreateTime: [],
+      createDate: "",
+      createTime: []
     };
   },
   created() {
     this.getExtendFields();
+
+    const curDate = getTimeDatestamp(Date.now());
+    const hour = 60 * 60 * 1000;
+    this.curCreateTime = [curDate + 8 * hour, curDate + 10 * hour];
+    this.createTime = [...this.curCreateTime];
   },
   methods: {
     visibleChange() {
@@ -207,11 +208,13 @@ export default {
       }
       if (data.examStartTime && data.examEndTime) {
         this.createTime = [data.examStartTime, data.examEndTime];
+        this.createDate = getTimeDatestamp(data.examStartTime);
         this.filter.examStartTime = this.createTime[0];
         this.filter.examEndTime = this.createTime[1];
         this.timeDisabled = true;
       } else {
-        this.createTime = [];
+        this.createTime = [...this.curCreateTime];
+        this.createDate = null;
         this.filter.examStartTime = "";
         this.filter.examEndTime = "";
         this.timeDisabled = false;
@@ -225,9 +228,18 @@ export default {
       this.filter.printPlanName = val.name;
       this.getList();
     },
-    timeChange(val) {
-      this.filter.examStartTime = val[0];
-      this.filter.examEndTime = val[1];
+    timeChange() {
+      if (!this.createDate || !this.createTime) {
+        this.filter.examStartTime = null;
+        this.filter.examEndTime = null;
+        return;
+      }
+
+      const curDate = getTimeDatestamp(this.createDate);
+      const timeDate = getTimeDatestamp(this.createTime[0]);
+
+      this.filter.examStartTime = curDate + this.createTime[0] - timeDate;
+      this.filter.examEndTime = curDate + this.createTime[1] - timeDate;
     },
     cancel() {
       this.modalIsShow = false;
@@ -245,6 +257,11 @@ export default {
         return;
       }
 
+      if (this.filter.examStartTime === this.filter.examEndTime) {
+        this.$message.error("考试开始时间不能等于考试结束时间!");
+        return;
+      }
+
       this.curRow = {
         examPlace: "",
         examRoom: "",

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

@@ -4,7 +4,7 @@
     :visible.sync="modalIsShow"
     :title="`上传${curConfig.title}`"
     top="10vh"
-    width="600px"
+    width="620px"
     :close-on-click-modal="false"
     :close-on-press-escape="false"
     append-to-body

+ 6 - 9
src/modules/exam/views/DataTaskManage.vue

@@ -86,33 +86,30 @@
               v-if="scope.row.hasReportFile && checkPrivilege('link', 'export')"
               class="btn-primary"
               type="text"
-              icon="icon icon-circle-share"
               :disabled="loading"
               @click="toDonwloadLog(scope.row)"
-              title="导出日志"
-            ></el-button>
+              >导出日志</el-button
+            >
             <el-button
               v-if="
                 scope.row.resetCreatePdf && checkPrivilege('link', 'createPdf')
               "
               class="btn-primary"
               type="text"
-              icon="icon icon-modify"
               :disabled="loading"
               @click="toResetCreatePdf(scope.row)"
-              title="重新生成PDF"
-            ></el-button>
+              >重新生成PDF</el-button
+            >
             <el-button
               v-if="
                 !scope.row.resetCreatePdf && checkPrivilege('link', 'download')
               "
               class="btn-primary"
               type="text"
-              icon="icon icon-download-act"
               :disabled="loading"
               @click="toDonwloadFile(scope.row)"
-              title="下载文件"
-            ></el-button>
+              >下载文件</el-button
+            >
           </template>
         </el-table-column>
       </el-table>

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

@@ -100,7 +100,7 @@
         <el-button
           v-if="checkPrivilege('button', 'BatchAdd')"
           icon="el-icon-circle-plus-outline"
-          type="warning"
+          type="info"
           @click="toBatchAdd"
         >
           批量新建命题任务

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

@@ -117,7 +117,7 @@
         <el-button
           v-if="checkPrivilege('button', 'notReviewExport')"
           icon="el-icon-download"
-          type="primary"
+          type="success"
           :disabled="loading"
           @click="toExport"
         >
@@ -125,7 +125,7 @@
         </el-button>
         <!-- <el-button
           v-if="checkPrivilege('button', 'notReviewBatchNotPass')"
-          icon="el-icon-coordinate"
+          icon="el-icon-circle-close"
           type="danger"
           @click="toBatchAudit(0)"
         >
@@ -133,7 +133,7 @@
         </el-button> -->
         <el-button
           v-if="checkPrivilege('button', 'notReviewBatchPass')"
-          icon="el-icon-coordinate"
+          icon="el-icon-circle-check"
           type="primary"
           @click="toBatchAudit(1)"
         >

+ 49 - 38
src/modules/print/components/ModifyPlanPaper.vue

@@ -44,7 +44,7 @@
             </el-form-item>
           </el-col>
         </el-row>
-        <el-row>
+        <el-row class="mb-2">
           <el-col :span="12">
             <el-form-item prop="paperNumber" label="试卷编号:">
               <el-select
@@ -67,6 +67,8 @@
               <el-select
                 v-model="modalForm.relatePaperType"
                 placeholder="请选择"
+                multiple
+                :multiple-limit="drawCount"
               >
                 <el-option
                   v-for="item in paperTypes"
@@ -95,40 +97,35 @@
       </el-form>
     </div>
 
-    <div class="part-box part-box-pad part-box-border">
-      <h4 class="part-box-tips">试卷内容:</h4>
-      <p class="tips-info tips-dark mb-2">
-        提示:多卷型试卷由于会绑定一个答题卡模板,因此试卷结构必须相同。多卷型试卷之间客观题要求试题内容相同,可允许大题内的小题题序不同。
-      </p>
-      <table class="table">
-        <tr>
-          <th>卷型</th>
-          <th>试卷</th>
-          <th>答题卡</th>
-        </tr>
-        <tr v-for="(attachment, index) in paperAttachments" :key="index">
-          <td>{{ attachment.name }}卷</td>
-          <td class="td-link">
-            <span @click="downloadPaper(attachment)" title="点击查看试卷">
-              <i
-                class="icon icon-download-act mr-1"
-                v-if="attachment.attachmentId"
-              ></i
-              >{{ attachment.filename }}
-            </span>
-          </td>
-          <td
-            class="td-link"
-            :rowspan="paperAttachments.length"
-            v-if="index === 0"
+    <h4 class="part-box-tips">试卷内容:</h4>
+    <p class="tips-info tips-dark mb-2">
+      提示:多卷型试卷由于会绑定一个答题卡模板,因此试卷结构必须相同。多卷型试卷之间客观题要求试题内容相同,可允许大题内的小题题序不同。
+    </p>
+    <table class="table">
+      <tr>
+        <th>卷型</th>
+        <th>试卷</th>
+        <th>答题卡</th>
+      </tr>
+      <tr v-for="(attachment, index) in paperAttachments" :key="index">
+        <td>{{ attachment.name }}卷</td>
+        <td class="td-link">
+          <span @click="downloadPaper(attachment)" title="点击查看试卷">
+            <i class="el-icon-download mr-1" v-if="attachment.attachmentId"></i
+            >{{ attachment.filename }}
+          </span>
+        </td>
+        <td
+          class="td-link"
+          :rowspan="paperAttachments.length"
+          v-if="index === 0"
+        >
+          <el-button type="text" class="btn-primary" @click="toViewCard"
+            >查看答题卡</el-button
           >
-            <span @click="toViewCard"
-              ><i class="icon icon-circle-right mr-1"></i>查看答题卡</span
-            >
-          </td>
-        </tr>
-      </table>
-    </div>
+        </td>
+      </tr>
+    </table>
 
     <div slot="footer">
       <el-button type="primary" :disabled="isSubmit" @click="submit"
@@ -147,7 +144,7 @@ import { attachmentPreview } from "../../login/api";
 const initModalForm = {
   id: null,
   paperNumber: "",
-  relatePaperType: ""
+  relatePaperType: []
 };
 
 export default {
@@ -168,6 +165,7 @@ export default {
       papers: [],
       paperTypes: [],
       paperAttachments: [],
+      drawCount: 0,
       cardId: "",
       rules: {
         paperNumber: [
@@ -180,7 +178,17 @@ export default {
         relatePaperType: [
           {
             required: true,
-            message: "请选择关联类型",
+            validator: (rule, value, callback) => {
+              if (
+                value.length < this.drawCount ||
+                value.length > this.drawCount
+              ) {
+                return callback(
+                  new Error(`需要选择${this.drawCount}套关联试卷`)
+                );
+              }
+              callback();
+            },
             trigger: "change"
           }
         ]
@@ -194,6 +202,7 @@ export default {
         ? JSON.parse(data.paperAttachmentIds)
         : [];
       this.cardId = data.cardId;
+      this.drawCount = data.drawCount;
     },
     // async getPaperTypes() {
     //   const papers = await linkPaperNumberList({
@@ -217,6 +226,8 @@ export default {
     },
     visibleChange() {
       this.modalForm = this.$objAssign(initModalForm, this.instance);
+      this.modalForm.relatePaperType = this.instance.relatePaperType.split(",");
+
       this.getPapers();
       // this.getPaperTypes();
       this.getAttachments();
@@ -232,7 +243,7 @@ export default {
       this.modalIsShow = true;
     },
     paperChange() {
-      this.modalForm.relatePaperType = "";
+      this.modalForm.relatePaperType = [];
       this.paperTypes = [];
       const paper = this.papers.find(
         item => item.paperNumber === this.modalForm.paperNumber
@@ -262,7 +273,7 @@ export default {
       this.isSubmit = true;
       const datas = {
         examTaskId: this.modalForm.id,
-        relatePaperType: this.modalForm.relatePaperType,
+        relatePaperType: this.modalForm.relatePaperType.join(),
         paperNumber: this.modalForm.paperNumber,
         printPlanId: this.instance.printPlanId,
         examDetailCourseIds: this.instance.examDetailCourseIds

+ 3 - 3
src/modules/print/components/UploadBusinessDataDialog.vue

@@ -4,14 +4,14 @@
     :visible.sync="modalIsShow"
     title="导入教务数据"
     top="10vh"
-    width="610px"
+    width="550px"
     :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 ref="modalFormComp" :model="modalForm" label-position="top">
         <el-form-item prop="printPlanId" label="印刷计划:">
           <el-select
             v-model="modalForm.printPlanId"
@@ -44,7 +44,7 @@
       </el-form>
     </div>
     <div slot="footer">
-      <el-button type="danger" @click="cancel" plain>关闭</el-button>
+      <el-button @click="cancel">关闭</el-button>
     </div>
   </el-dialog>
 </template>

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

@@ -103,7 +103,7 @@
         </el-table-column>
         <el-table-column prop="studentName" label="姓名" width="120">
         </el-table-column>
-        <el-table-column class-name="action-column" label="操作" width="70">
+        <el-table-column class-name="action-column" label="操作" width="100">
           <template slot-scope="scope">
             <el-button
               v-if="checkPrivilege('link', 'preview')"

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

@@ -127,7 +127,7 @@
         <el-table-column prop="paperNumber" label="试卷编号"></el-table-column>
         <el-table-column prop="totalSubjects" label="科次" width="80">
         </el-table-column>
-        <el-table-column class-name="action-column" label="操作" width="70">
+        <el-table-column class-name="action-column" label="操作" width="100">
           <template slot-scope="scope">
             <el-button
               v-if="checkPrivilege('link', 'preview')"

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

@@ -110,7 +110,7 @@
         </el-table-column>
         <el-table-column prop="totalSubjects" label="总科次" width="80">
         </el-table-column>
-        <el-table-column class-name="action-column" label="操作" width="80px">
+        <el-table-column class-name="action-column" label="操作" width="100">
           <template slot-scope="scope">
             <el-button
               v-if="checkPrivilege('link', 'edit')"

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

@@ -98,7 +98,7 @@
           }}</span>
         </el-table-column>
         <el-table-column prop="createName" label="创建人"></el-table-column>
-        <el-table-column class-name="action-column" label="操作" width="120px">
+        <el-table-column class-name="action-column" label="操作" width="120">
           <template slot-scope="scope">
             <el-button
               v-if="checkPrivilege('link', 'preview')"

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

@@ -219,8 +219,9 @@
         <el-table-column
           class-name="action-column"
           label="操作"
-          width="120px"
+          width="120"
           fixed="right"
+          align="center"
         >
           <template slot-scope="scope">
             <el-button

+ 9 - 0
src/plugins/utils.js

@@ -352,6 +352,15 @@ export function localNowDateTime() {
   return formatDate("YYYY年MM月DD日HH时mm分ss秒");
 }
 
+/**
+ *
+ * @param {Number} time 时间戳
+ */
+export function getTimeDatestamp(time) {
+  const date = formatDate("YYYY-MM-DD HH:mm", new Date(time)).split(" ")[0];
+  return new Date(`${date} 00:00:00`).getTime();
+}
+
 /**
  * 获取指定元素个数的数组
  * @param {Number} num