zhangjie il y a 8 mois
Parent
commit
26a5fb042c

+ 4 - 0
src/api.js

@@ -493,6 +493,10 @@ export const changeLevelPaperList = (datas) => {
   // 科组长默认查询审核通过的
   return $get("/api/changelevel/list", datas);
 };
+export const batchNoList = (datas) => {
+  // workId=&subject=&stage=
+  return $post("/api/papers/listBatchNo", datas);
+};
 
 // mark -------------------------->
 // mark-progress

+ 849 - 828
src/assets/styles/main.less

@@ -1,828 +1,849 @@
-// work-overview
-.overview {
-  padding-top: 40px !important;
-  &-head {
-    height: 138px;
-    background: rgba(78, 87, 170, 1);
-    border-radius: 20px;
-    color: @white;
-    position: relative;
-    padding: 31px 320px 0 220px;
-    margin-bottom: 32px;
-
-    &::before {
-      content: "";
-      position: absolute;
-      width: 95px;
-      height: 138px;
-      left: 0;
-      top: 0;
-      background-image: url(../images/bg-left-leaf.png);
-      background-size: 100% 100%;
-      background-repeat: no-repeat;
-      z-index: 7;
-    }
-    &::after {
-      content: "";
-      position: absolute;
-      width: 97px;
-      height: 138px;
-      right: 0;
-      top: 0;
-      background-image: url(../images/bg-right-leaf.png);
-      background-size: 100% 100%;
-      background-repeat: no-repeat;
-      z-index: 7;
-    }
-  }
-  &-bg-person {
-    position: absolute;
-    width: 135px;
-    height: 165px;
-    left: 40px;
-    bottom: 0;
-    background-image: url(../images/bg-penson.png);
-    background-size: 100% 100%;
-    background-repeat: no-repeat;
-    z-index: 8;
-  }
-  &-title {
-    font-size: 32px;
-    line-height: 44px;
-    overflow: hidden;
-    text-overflow: ellipsis;
-    white-space: nowrap;
-  }
-  &-actions {
-    position: absolute;
-    z-index: 9;
-    right: 20px;
-    top: 51px;
-  }
-  &-body {
-    margin: 0 -16px;
-    font-size: 0;
-  }
-
-  &-infos {
-    font-size: 0;
-    margin-top: 11px;
-    color: rgba(255, 255, 255, 0.5);
-    > li {
-      display: inline-block;
-      vertical-align: middle;
-      font-size: @font-size-base;
-      &:not(:last-child) {
-        margin-right: 30px;
-      }
-      span:first-child {
-        margin-right: 5px;
-      }
-    }
-  }
-  &-subject {
-    font-size: @font-size-base;
-    display: inline-block;
-    vertical-align: top;
-    width: 33.33%;
-    padding: 0 16px;
-  }
-
-  .subject {
-    &-content {
-      text-align: center;
-      background-color: @white;
-      border-radius: @box-border-radius;
-      padding: 20px;
-    }
-    &-name {
-      color: @title-color;
-      font-size: 40px;
-      line-height: 56px;
-      margin-top: 12px;
-    }
-    &-infos {
-      margin: 20px 0 32px;
-      color: @dark-color-light;
-      li {
-        position: relative;
-        display: inline-block;
-        vertical-align: top;
-        width: 105px;
-
-        &:not(:last-child)::before {
-          content: "";
-          position: absolute;
-          width: 13px;
-          height: 22px;
-          top: 50%;
-          right: -6px;
-          margin-top: -11px;
-          background-image: url(../images/icon-split.png);
-          background-size: 100% 100%;
-          background-repeat: no-repeat;
-        }
-      }
-      p {
-        line-height: 20px;
-        margin-bottom: 5px;
-        &:last-child {
-          font-size: 18px;
-          font-weight: 600;
-        }
-      }
-    }
-    &-actions {
-      height: 116px;
-      padding: 32px 20px;
-      margin-bottom: 32px;
-      background: rgba(231, 234, 241, 1);
-      position: relative;
-      border-radius: @box-border-radius;
-      text-align: left;
-
-      &::after {
-        content: "";
-        position: absolute;
-        width: 78px;
-        height: 100%;
-        top: 0;
-        right: 0;
-        background-image: url(../images/bg-leaf-gray.png);
-        background-size: 100% 100%;
-        background-repeat: no-repeat;
-        z-index: 8;
-      }
-
-      > p:first-child {
-        color: @dark-color-light;
-        margin-bottom: 4px;
-      }
-      > p:nth-of-type(2) {
-        color: @dark-color;
-        font-weight: 600;
-        font-size: 20px;
-        line-height: 28px;
-      }
-
-      &-detail {
-        position: absolute;
-        right: 20px;
-        top: 50%;
-        transform: translateY(-50%);
-        z-index: 9;
-      }
-    }
-  }
-}
-
-// paper-manage
-.paper-manage {
-  .part-box-filter,
-  .part-page {
-    flex-grow: 0;
-    flex-shrink: 0;
-  }
-  .image-action-list {
-    flex-grow: 2;
-  }
-}
-.point-tag {
-  width: 16px;
-  height: 16px;
-  border-radius: 50%;
-  background-color: @color-text;
-
-  &.is-active {
-    background-color: @success-color;
-  }
-}
-// client-monitor
-.client-monitor {
-  .image-view-list {
-    flex-grow: 2;
-  }
-  .page-action {
-    display: flex;
-    justify-content: space-between;
-    align-items: center;
-    flex-grow: 0;
-    flex-shrink: 0;
-  }
-}
-
-// image-action-list
-// image-view
-.image-view {
-  display: inline-block;
-  vertical-align: top;
-  font-size: @font-size-base;
-  padding: 10px;
-  width: 310px;
-  text-align: center;
-  &-act {
-    img {
-      box-shadow: 0 0 20px rgba(34, 192, 255, 0.6);
-      // box-shadow: 0px 10px 20px 0px rgba(34, 192, 255, 0.5);
-      // box-shadow: -20px 0px 40px 0px rgba(224, 225, 235, 1);
-    }
-  }
-
-  &-container {
-    border-radius: @box-border-radius;
-    background-color: @white;
-    position: relative;
-    height: 100%;
-  }
-
-  &-title {
-    position: absolute;
-    width: 100%;
-    top: 0;
-    padding: 10px;
-    font-size: 18px;
-    line-height: 1;
-  }
-  &-contain {
-    position: absolute;
-    top: 38px;
-    bottom: 52px;
-    width: 100%;
-    overflow: hidden;
-
-    > img {
-      position: absolute;
-      max-width: 100%;
-      max-height: 100%;
-      width: auto;
-      height: auto;
-      top: 0;
-      left: 0;
-      right: 0;
-      bottom: 0;
-      margin: auto;
-      cursor: pointer;
-    }
-    > .image-info {
-      display: block;
-      position: absolute;
-      bottom: 5px;
-      left: 50%;
-      transform: translateX(-50%);
-      z-index: 9;
-      padding: 5px 8px;
-      line-height: 1;
-      border-radius: @box-border-radius-small;
-      background-color: rgba(255, 255, 255, 0.8);
-      font-size: 16px;
-      color: rgba(255, 112, 129, 1);
-      font-weight: 600;
-    }
-  }
-  &-none {
-    background-image: url(../images/bg-image.png);
-    background-repeat: no-repeat;
-    background-position: center center;
-  }
-  &-image {
-    position: absolute;
-    top: 0;
-    left: 0;
-    width: 100%;
-    z-index: 8;
-
-    > img {
-      display: block;
-      width: 100%;
-      cursor: pointer;
-    }
-  }
-  &-actions {
-    position: absolute;
-    width: 100%;
-    bottom: 0;
-    height: 52px;
-    padding: 10px;
-    display: flex;
-    justify-content: space-between;
-    align-items: center;
-
-    .view-action-mark {
-      .ivu-icon {
-        color: @dark-color-lighter;
-      }
-    }
-    .mark-act {
-      .ivu-icon {
-        color: @warning-color;
-      }
-    }
-  }
-  &-multibar {
-    width: 30%;
-    border-radius: @box-border-radius-small;
-    background-color: @background-color;
-    height: 20px;
-    margin: 0 auto;
-    cursor: pointer;
-
-    &:hover {
-      background-color: shade(@background-color, 5%);
-    }
-    &.image-view-selected {
-      background-color: @sub-color;
-    }
-    &.image-view-disabled {
-      cursor: not-allowed;
-      background-color: @background-color;
-    }
-  }
-}
-.image-view-list {
-  font-size: 0;
-  margin: -10px;
-  .image-view {
-    width: 20%;
-    height: 50%;
-  }
-
-  &-6 {
-    .image-view {
-      width: 16.66%;
-    }
-  }
-  &-5 {
-    .image-view {
-      width: 20%;
-    }
-  }
-  &-4 {
-    .image-view {
-      width: 25%;
-    }
-  }
-  &-3 {
-    .image-view {
-      width: 33.33%;
-    }
-  }
-  &-2 {
-    .image-view {
-      width: 50%;
-    }
-  }
-}
-
-/* client-set */
-// set-navs
-.set-navs {
-  margin-bottom: 20px;
-  &-item {
-    position: relative;
-    display: inline-block;
-    vertical-align: top;
-    padding: 8px 20px;
-    color: @dark-color-light;
-    background-color: @white;
-    border-radius: @box-border-radius;
-    margin-right: 10px;
-    cursor: pointer;
-
-    &:hover {
-      color: @info-color;
-    }
-
-    &-act {
-      background-color: @info-color;
-      color: @white!important;
-      box-shadow: 0px 10px 10px 0px rgba(34, 192, 255, 0.3);
-
-      &::before {
-        content: "";
-        position: absolute;
-        bottom: -4px;
-        left: 50%;
-        margin-left: -10px;
-        width: 20px;
-        height: 4px;
-        background-image: url(../images/bg-switch-arrow.png);
-        background-size: 100% 100%;
-      }
-    }
-  }
-}
-// client-account-set
-.client-account-set {
-  position: relative;
-  .account-add-btn {
-    position: absolute;
-    top: -56px;
-    right: 0;
-    z-index: 9;
-  }
-}
-// client-param-set
-.client-param {
-  &-set {
-    .part-box {
-      height: 100%;
-    }
-  }
-  &-title {
-    font-size: 24px;
-    text-align: center;
-    margin-bottom: 40px;
-  }
-}
-
-// grading-level-set
-.grading-level-set {
-  position: relative;
-  .level-add-btn {
-    position: absolute;
-    top: -56px;
-    right: 0;
-    z-index: 9;
-  }
-  .grading-table {
-    .ivu-input-wrapper,
-    .ivu-input-number {
-      min-width: 100px;
-    }
-    th,
-    td {
-      padding: 8px 18px;
-    }
-  }
-}
-
-// export-paper
-.export-paper {
-  .part-box {
-    height: 100%;
-    padding: 32px 32px 100px;
-    position: relative;
-  }
-  .export-paper-btn {
-    position: absolute;
-    left: 32px;
-    bottom: 32px;
-    width: 80px;
-  }
-  .ivu-form-inline {
-    .ivu-form-item {
-      margin-bottom: 26px;
-    }
-  }
-  .ivu-radio-wrapper {
-    margin-right: 50px;
-  }
-}
-
-// student-score
-.student-score-content {
-  min-height: 200px;
-  border-radius: @box-border-radius;
-  background-color: @white;
-  .score-content {
-    &-head {
-      padding: 16px 20px;
-      height: 60px;
-      line-height: 28px;
-      border-bottom: 1px solid #f3f3f3;
-      color: @dark-color-light;
-      font-size: 16px;
-      font-weight: 600;
-    }
-    &-title {
-      float: left;
-      color: @dark-color;
-      font-size: 20px;
-      font-weight: 600;
-    }
-    &-info {
-      float: left;
-      margin-left: 20px;
-    }
-    &-tscore {
-      float: right;
-      > span {
-        display: inline-block;
-        vertical-align: middle;
-      }
-      > span:last-child {
-        color: @error-color;
-        font-size: 24px;
-      }
-    }
-    &-score {
-      color: @error-color;
-    }
-    &-body {
-      padding: 20px;
-      text-align: center;
-      .table {
-        text-align: center;
-        font-size: 18px;
-        font-weight: 600;
-
-        &-column-2 {
-          td {
-            width: 50%;
-          }
-        }
-        &-column-3 {
-          td {
-            width: 33.33%;
-          }
-        }
-      }
-      .image-action-list {
-        height: 400px;
-        .image-view {
-          height: 100%;
-        }
-      }
-    }
-    &-task {
-      display: flex;
-      justify-content: space-around;
-      align-items: center;
-      .task-list {
-        text-align: left;
-      }
-
-      .task-item {
-        line-height: 20px;
-        font-size: 14px;
-      }
-      .task-item-label {
-        display: inline-block;
-        vertical-align: top;
-      }
-      .task-item-content {
-        display: inline-block;
-        vertical-align: top;
-      }
-    }
-  }
-}
-
-// inspection-grading
-.inspection-grading {
-  .part-box-filter {
-    flex-grow: 0;
-    flex-shrink: 0;
-  }
-}
-.check-grade {
-  flex-grow: 2;
-  min-height: 400px;
-  display: flex;
-  justify-content: space-between;
-
-  &-body {
-    position: relative;
-    padding: 20px 20px 70px;
-    flex-grow: 2;
-    margin: 0;
-
-    .part-page {
-      position: absolute;
-      bottom: 20px;
-      left: 0;
-      right: 0;
-      z-index: auto;
-      margin: 0;
-    }
-  }
-  &-list {
-    height: 100%;
-  }
-  &-action {
-    width: 280px;
-    padding: 20px;
-    background-color: @white;
-    border-radius: @box-border-radius;
-    margin-left: 20px;
-    overflow-x: hidden;
-    overflow-y: auto;
-    flex-grow: 0;
-
-    &-fullscreen {
-      position: fixed;
-      width: 280px;
-      top: 0;
-      right: 0;
-      bottom: 0;
-      border-radius: 0;
-      min-height: auto;
-      z-index: 98;
-    }
-  }
-  .action-paper-info {
-    font-size: 14px;
-    margin-bottom: 20px;
-    color: @dark-color-light;
-    line-height: 24px;
-    text-align: left;
-
-    p {
-      margin-bottom: 4px;
-    }
-
-    span:last-child {
-      color: @dark-color;
-      font-size: 18px;
-    }
-  }
-
-  .action-grade-info {
-    margin-bottom: 20px;
-    background-color: #e7eaf1;
-    color: @dark-color-light;
-    padding: 20px;
-    font-size: 20px;
-    border-radius: @box-border-radius-small;
-    line-height: 28px;
-
-    > p:first-child {
-      margin-bottom: 10px;
-    }
-  }
-  .action-grade-result {
-    text-align: center;
-    padding: 16px;
-    line-height: 28px;
-    font-size: 20px;
-    font-weight: 600;
-    background: rgba(247, 247, 250, 1);
-    border-radius: 20px;
-    color: rgba(194, 199, 213, 1);
-    border-radius: @box-border-radius-small;
-
-    &-error {
-      background: rgba(255, 112, 129, 0.1);
-      color: @error-color;
-    }
-  }
-
-  &-none {
-    width: 100%;
-    padding-top: 200px;
-    text-align: center;
-    font-size: 24px;
-    color: @dark-color-lighter;
-  }
-
-  &-image-preview {
-    .ivu-modal-mask,
-    .ivu-modal-wrap {
-      left: 0;
-      bottom: 0;
-      top: 0;
-      right: 280px;
-    }
-  }
-}
-
-// quality
-.quality {
-  .part-box-filter,
-  .part-page {
-    flex-grow: 0;
-    flex-shrink: 0;
-  }
-  .image-action-list {
-    flex-grow: 2;
-  }
-}
-
-// exam-paper-view
-.exam-paper-view {
-  .exam-paper-item {
-    padding: 20px;
-    overflow: hidden;
-    background-color: @white;
-    border-radius: @box-border-radius;
-    margin: 5px 0;
-  }
-  .exam-paper-area {
-    float: left;
-    font-size: 20px;
-    font-weight: 600;
-    line-height: 36px;
-  }
-  .exam-paper-subjects {
-    float: right;
-    button {
-      min-width: 80px;
-    }
-  }
-}
-
-// analysis-export -------------------------->
-.analysis-export-modal {
-  position: fixed;
-  z-index: 99;
-  top: 0;
-  left: -10000px;
-  width: 1400px;
-  height: 1000px;
-  background-color: #fff;
-  overflow: auto;
-
-  // width: 100%;
-  // height: 100%;
-  // left: 0;
-}
-// print page for export
-.print-box {
-  // width: 1160px;
-  // height: 1639px;
-  width: 210mm;
-  height: 297mm;
-  margin: 0 auto;
-  position: relative;
-  padding: 50px 30px;
-  h1 {
-    font-size: 24px;
-    text-align: center;
-    font-weight: 600;
-    margin-bottom: 30px;
-  }
-  .quality-info {
-    font-size: 16px;
-    font-weight: 600;
-    line-height: 30px;
-    margin-bottom: 20px;
-  }
-  .print-chart {
-    margin-bottom: 20px;
-
-    &-title {
-      font-size: 16px;
-      font-weight: 600;
-    }
-  }
-  .export-table {
-    width: 100%;
-    border-spacing: 0;
-    border-collapse: collapse;
-    text-align: center;
-    border-bottom: 1px solid #000;
-    border-right: 1px solid #000;
-    th,
-    td {
-      color: #000;
-      padding: 3px 5px;
-      border-top: 1px solid #000;
-      border-left: 1px solid #000;
-      border-radius: 0 !important;
-    }
-  }
-}
-
-// check-data
-.check-data {
-  .check-list {
-    min-height: 300px;
-  }
-}
-.check-data-result {
-  .ivu-modal-content {
-    background-color: @background-color;
-  }
-  .ivu-modal-body{
-    padding-bottom: 20px;
-  }
-}
-
-// grading-rule-set
-.grading-rule-set {
-  display: flex;
-  align-items: stretch;
-  justify-content: space-between;
-  .rule-part {
-    position: relative;
-    padding: 0 15px 36px;
-    flex-grow: 1;
-
-    &:nth-of-type(2) {
-      border-left: 1px dashed #d0d0d0;
-    }
-
-    &-title {
-      font-size: 18px;
-      font-weight: 600;
-      margin-bottom: 30px;
-      text-align: center;
-    }
-    &-footer {
-      position: absolute;
-      bottom: 0;
-      left: 245px;
-      z-index: 8;
-    }
-  }
-}
+// work-overview
+.overview {
+  padding-top: 40px !important;
+  &-head {
+    height: 138px;
+    background: rgba(78, 87, 170, 1);
+    border-radius: 20px;
+    color: @white;
+    position: relative;
+    padding: 31px 320px 0 220px;
+    margin-bottom: 32px;
+
+    &::before {
+      content: "";
+      position: absolute;
+      width: 95px;
+      height: 138px;
+      left: 0;
+      top: 0;
+      background-image: url(../images/bg-left-leaf.png);
+      background-size: 100% 100%;
+      background-repeat: no-repeat;
+      z-index: 7;
+    }
+    &::after {
+      content: "";
+      position: absolute;
+      width: 97px;
+      height: 138px;
+      right: 0;
+      top: 0;
+      background-image: url(../images/bg-right-leaf.png);
+      background-size: 100% 100%;
+      background-repeat: no-repeat;
+      z-index: 7;
+    }
+  }
+  &-bg-person {
+    position: absolute;
+    width: 135px;
+    height: 165px;
+    left: 40px;
+    bottom: 0;
+    background-image: url(../images/bg-penson.png);
+    background-size: 100% 100%;
+    background-repeat: no-repeat;
+    z-index: 8;
+  }
+  &-title {
+    font-size: 32px;
+    line-height: 44px;
+    overflow: hidden;
+    text-overflow: ellipsis;
+    white-space: nowrap;
+  }
+  &-actions {
+    position: absolute;
+    z-index: 9;
+    right: 20px;
+    top: 51px;
+  }
+  &-body {
+    margin: 0 -16px;
+    font-size: 0;
+  }
+
+  &-infos {
+    font-size: 0;
+    margin-top: 11px;
+    color: rgba(255, 255, 255, 0.5);
+    > li {
+      display: inline-block;
+      vertical-align: middle;
+      font-size: @font-size-base;
+      &:not(:last-child) {
+        margin-right: 30px;
+      }
+      span:first-child {
+        margin-right: 5px;
+      }
+    }
+  }
+  &-subject {
+    font-size: @font-size-base;
+    display: inline-block;
+    vertical-align: top;
+    width: 33.33%;
+    padding: 0 16px;
+  }
+
+  .subject {
+    &-content {
+      text-align: center;
+      background-color: @white;
+      border-radius: @box-border-radius;
+      padding: 20px;
+    }
+    &-name {
+      color: @title-color;
+      font-size: 40px;
+      line-height: 56px;
+      margin-top: 12px;
+    }
+    &-infos {
+      margin: 20px 0 32px;
+      color: @dark-color-light;
+      li {
+        position: relative;
+        display: inline-block;
+        vertical-align: top;
+        width: 105px;
+
+        &:not(:last-child)::before {
+          content: "";
+          position: absolute;
+          width: 13px;
+          height: 22px;
+          top: 50%;
+          right: -6px;
+          margin-top: -11px;
+          background-image: url(../images/icon-split.png);
+          background-size: 100% 100%;
+          background-repeat: no-repeat;
+        }
+      }
+      p {
+        line-height: 20px;
+        margin-bottom: 5px;
+        &:last-child {
+          font-size: 18px;
+          font-weight: 600;
+        }
+      }
+    }
+    &-actions {
+      height: 116px;
+      padding: 32px 20px;
+      margin-bottom: 32px;
+      background: rgba(231, 234, 241, 1);
+      position: relative;
+      border-radius: @box-border-radius;
+      text-align: left;
+
+      &::after {
+        content: "";
+        position: absolute;
+        width: 78px;
+        height: 100%;
+        top: 0;
+        right: 0;
+        background-image: url(../images/bg-leaf-gray.png);
+        background-size: 100% 100%;
+        background-repeat: no-repeat;
+        z-index: 8;
+      }
+
+      > p:first-child {
+        color: @dark-color-light;
+        margin-bottom: 4px;
+      }
+      > p:nth-of-type(2) {
+        color: @dark-color;
+        font-weight: 600;
+        font-size: 20px;
+        line-height: 28px;
+      }
+
+      &-detail {
+        position: absolute;
+        right: 20px;
+        top: 50%;
+        transform: translateY(-50%);
+        z-index: 9;
+      }
+    }
+  }
+}
+
+// paper-manage
+.paper-manage {
+  .part-box-filter,
+  .part-page {
+    flex-grow: 0;
+    flex-shrink: 0;
+  }
+  .image-action-list {
+    flex-grow: 2;
+  }
+}
+.point-tag {
+  width: 16px;
+  height: 16px;
+  border-radius: 50%;
+  background-color: @color-text;
+
+  &.is-active {
+    background-color: @success-color;
+  }
+}
+// client-monitor
+.client-monitor {
+  .image-view-list {
+    flex-grow: 2;
+  }
+  .page-action {
+    display: flex;
+    justify-content: space-between;
+    align-items: center;
+    flex-grow: 0;
+    flex-shrink: 0;
+  }
+}
+
+// image-action-list
+// image-view
+.image-view {
+  display: inline-block;
+  vertical-align: top;
+  font-size: @font-size-base;
+  padding: 10px;
+  width: 310px;
+  text-align: center;
+  &-act {
+    img {
+      box-shadow: 0 0 20px rgba(34, 192, 255, 0.6);
+      // box-shadow: 0px 10px 20px 0px rgba(34, 192, 255, 0.5);
+      // box-shadow: -20px 0px 40px 0px rgba(224, 225, 235, 1);
+    }
+  }
+
+  &-container {
+    border-radius: @box-border-radius;
+    background-color: @white;
+    position: relative;
+    height: 100%;
+  }
+
+  &-title {
+    position: absolute;
+    width: 100%;
+    top: 0;
+    padding: 10px;
+    font-size: 18px;
+    line-height: 1;
+  }
+  &-contain {
+    position: absolute;
+    top: 38px;
+    bottom: 52px;
+    width: 100%;
+    overflow: hidden;
+
+    > img {
+      position: absolute;
+      max-width: 100%;
+      max-height: 100%;
+      width: auto;
+      height: auto;
+      top: 0;
+      left: 0;
+      right: 0;
+      bottom: 0;
+      margin: auto;
+      cursor: pointer;
+    }
+    > .image-info {
+      display: block;
+      position: absolute;
+      bottom: 5px;
+      left: 50%;
+      transform: translateX(-50%);
+      z-index: 9;
+      padding: 5px 8px;
+      line-height: 1;
+      border-radius: @box-border-radius-small;
+      background-color: rgba(255, 255, 255, 0.8);
+      font-size: 16px;
+      color: rgba(255, 112, 129, 1);
+      font-weight: 600;
+    }
+  }
+  &-none {
+    background-image: url(../images/bg-image.png);
+    background-repeat: no-repeat;
+    background-position: center center;
+  }
+  &-image {
+    position: absolute;
+    top: 0;
+    left: 0;
+    width: 100%;
+    z-index: 8;
+
+    > img {
+      display: block;
+      width: 100%;
+      cursor: pointer;
+    }
+  }
+  &-actions {
+    position: absolute;
+    width: 100%;
+    bottom: 0;
+    height: 52px;
+    padding: 10px;
+    display: flex;
+    justify-content: space-between;
+    align-items: center;
+
+    .view-action-mark {
+      .ivu-icon {
+        color: @dark-color-lighter;
+      }
+    }
+    .mark-act {
+      .ivu-icon {
+        color: @warning-color;
+      }
+    }
+  }
+  &-multibar {
+    width: 30%;
+    border-radius: @box-border-radius-small;
+    background-color: @background-color;
+    height: 20px;
+    margin: 0 auto;
+    cursor: pointer;
+
+    &:hover {
+      background-color: shade(@background-color, 5%);
+    }
+    &.image-view-selected {
+      background-color: @sub-color;
+    }
+    &.image-view-disabled {
+      cursor: not-allowed;
+      background-color: @background-color;
+    }
+  }
+}
+.image-view-list {
+  font-size: 0;
+  margin: -10px;
+  .image-view {
+    width: 20%;
+    height: 50%;
+  }
+
+  &-6 {
+    .image-view {
+      width: 16.66%;
+    }
+  }
+  &-5 {
+    .image-view {
+      width: 20%;
+    }
+  }
+  &-4 {
+    .image-view {
+      width: 25%;
+    }
+  }
+  &-3 {
+    .image-view {
+      width: 33.33%;
+    }
+  }
+  &-2 {
+    .image-view {
+      width: 50%;
+    }
+  }
+}
+
+/* client-set */
+// set-navs
+.set-navs {
+  margin-bottom: 20px;
+  &-item {
+    position: relative;
+    display: inline-block;
+    vertical-align: top;
+    padding: 8px 20px;
+    color: @dark-color-light;
+    background-color: @white;
+    border-radius: @box-border-radius;
+    margin-right: 10px;
+    cursor: pointer;
+
+    &:hover {
+      color: @info-color;
+    }
+
+    &-act {
+      background-color: @info-color;
+      color: @white!important;
+      box-shadow: 0px 10px 10px 0px rgba(34, 192, 255, 0.3);
+
+      &::before {
+        content: "";
+        position: absolute;
+        bottom: -4px;
+        left: 50%;
+        margin-left: -10px;
+        width: 20px;
+        height: 4px;
+        background-image: url(../images/bg-switch-arrow.png);
+        background-size: 100% 100%;
+      }
+    }
+  }
+}
+// client-account-set
+.client-account-set {
+  position: relative;
+  .account-add-btn {
+    position: absolute;
+    top: -56px;
+    right: 0;
+    z-index: 9;
+  }
+}
+// client-param-set
+.client-param {
+  &-set {
+    .part-box {
+      height: 100%;
+    }
+  }
+  &-title {
+    font-size: 24px;
+    text-align: center;
+    margin-bottom: 40px;
+  }
+}
+
+// grading-level-set
+.grading-level-set {
+  position: relative;
+  .level-add-btn {
+    position: absolute;
+    top: -56px;
+    right: 0;
+    z-index: 9;
+  }
+  .grading-table {
+    .ivu-input-wrapper,
+    .ivu-input-number {
+      min-width: 100px;
+    }
+    th,
+    td {
+      padding: 8px 18px;
+    }
+  }
+}
+
+// export-paper
+.export-paper {
+  .part-box {
+    height: 100%;
+    padding: 32px 32px 100px;
+    position: relative;
+  }
+  .export-paper-btn {
+    position: absolute;
+    left: 32px;
+    bottom: 32px;
+    width: 80px;
+  }
+  .ivu-form-inline {
+    .ivu-form-item {
+      margin-bottom: 26px;
+    }
+  }
+  .ivu-radio-wrapper {
+    margin-right: 50px;
+  }
+}
+
+// student-score
+.student-score-content {
+  min-height: 200px;
+  border-radius: @box-border-radius;
+  background-color: @white;
+  .score-content {
+    &-head {
+      padding: 16px 20px;
+      height: 60px;
+      line-height: 28px;
+      border-bottom: 1px solid #f3f3f3;
+      color: @dark-color-light;
+      font-size: 16px;
+      font-weight: 600;
+    }
+    &-title {
+      float: left;
+      color: @dark-color;
+      font-size: 20px;
+      font-weight: 600;
+    }
+    &-info {
+      float: left;
+      margin-left: 20px;
+    }
+    &-tscore {
+      float: right;
+      > span {
+        display: inline-block;
+        vertical-align: middle;
+      }
+      > span:last-child {
+        color: @error-color;
+        font-size: 24px;
+      }
+    }
+    &-score {
+      color: @error-color;
+    }
+    &-body {
+      padding: 20px;
+      text-align: center;
+      .table {
+        text-align: center;
+        font-size: 18px;
+        font-weight: 600;
+
+        &-column-2 {
+          td {
+            width: 50%;
+          }
+        }
+        &-column-3 {
+          td {
+            width: 33.33%;
+          }
+        }
+      }
+      .image-action-list {
+        height: 400px;
+        .image-view {
+          height: 100%;
+        }
+      }
+    }
+    &-task {
+      display: flex;
+      justify-content: space-around;
+      align-items: center;
+      .task-list {
+        text-align: left;
+      }
+
+      .task-item {
+        line-height: 20px;
+        font-size: 14px;
+      }
+      .task-item-label {
+        display: inline-block;
+        vertical-align: top;
+      }
+      .task-item-content {
+        display: inline-block;
+        vertical-align: top;
+      }
+    }
+  }
+}
+
+// inspection-grading
+.inspection-grading {
+  .part-box-filter {
+    flex-grow: 0;
+    flex-shrink: 0;
+  }
+}
+.check-grade {
+  flex-grow: 2;
+  min-height: 400px;
+  display: flex;
+  justify-content: space-between;
+
+  &-body {
+    position: relative;
+    padding: 20px 20px 70px;
+    flex-grow: 2;
+    margin: 0;
+
+    .part-page {
+      position: absolute;
+      bottom: 20px;
+      left: 0;
+      right: 0;
+      z-index: auto;
+      margin: 0;
+    }
+  }
+  &-list {
+    height: 100%;
+  }
+  &-action {
+    width: 280px;
+    padding: 20px;
+    background-color: @white;
+    border-radius: @box-border-radius;
+    margin-left: 20px;
+    overflow-x: hidden;
+    overflow-y: auto;
+    flex-grow: 0;
+
+    &-fullscreen {
+      position: fixed;
+      width: 280px;
+      top: 0;
+      right: 0;
+      bottom: 0;
+      border-radius: 0;
+      min-height: auto;
+      z-index: 98;
+    }
+  }
+  .action-paper-info {
+    font-size: 14px;
+    margin-bottom: 20px;
+    color: @dark-color-light;
+    line-height: 24px;
+    text-align: left;
+
+    p {
+      margin-bottom: 4px;
+    }
+
+    span:last-child {
+      color: @dark-color;
+      font-size: 18px;
+    }
+  }
+
+  .action-grade-info {
+    margin-bottom: 20px;
+    background-color: #e7eaf1;
+    color: @dark-color-light;
+    padding: 20px;
+    font-size: 20px;
+    border-radius: @box-border-radius-small;
+    line-height: 28px;
+
+    > p:first-child {
+      margin-bottom: 10px;
+    }
+  }
+  .action-grade-result {
+    text-align: center;
+    padding: 16px;
+    line-height: 28px;
+    font-size: 20px;
+    font-weight: 600;
+    background: rgba(247, 247, 250, 1);
+    border-radius: 20px;
+    color: rgba(194, 199, 213, 1);
+    border-radius: @box-border-radius-small;
+
+    &-error {
+      background: rgba(255, 112, 129, 0.1);
+      color: @error-color;
+    }
+  }
+
+  &-none {
+    width: 100%;
+    padding-top: 200px;
+    text-align: center;
+    font-size: 24px;
+    color: @dark-color-lighter;
+  }
+
+  &-image-preview {
+    .ivu-modal-mask,
+    .ivu-modal-wrap {
+      left: 0;
+      bottom: 0;
+      top: 0;
+      right: 280px;
+    }
+  }
+}
+
+// quality
+.quality {
+  .part-box-filter,
+  .part-page {
+    flex-grow: 0;
+    flex-shrink: 0;
+  }
+  .image-action-list {
+    flex-grow: 2;
+  }
+}
+
+// exam-paper-view
+.exam-paper-view {
+  .exam-paper-item {
+    padding: 20px;
+    overflow: hidden;
+    background-color: @white;
+    border-radius: @box-border-radius;
+    margin: 5px 0;
+  }
+  .exam-paper-area {
+    float: left;
+    font-size: 20px;
+    font-weight: 600;
+    line-height: 36px;
+  }
+  .exam-paper-subjects {
+    float: right;
+    button {
+      min-width: 80px;
+    }
+  }
+}
+
+// analysis-export -------------------------->
+.analysis-export-modal {
+  position: fixed;
+  z-index: 99;
+  top: 0;
+  left: -10000px;
+  width: 1400px;
+  height: 1000px;
+  background-color: #fff;
+  overflow: auto;
+
+  // width: 100%;
+  // height: 100%;
+  // left: 0;
+}
+// print page for export
+.print-box {
+  // width: 1160px;
+  // height: 1639px;
+  width: 210mm;
+  height: 297mm;
+  margin: 0 auto;
+  position: relative;
+  padding: 50px 30px;
+  h1 {
+    font-size: 24px;
+    text-align: center;
+    font-weight: 600;
+    margin-bottom: 30px;
+  }
+  .quality-info {
+    font-size: 16px;
+    font-weight: 600;
+    line-height: 30px;
+    margin-bottom: 20px;
+  }
+  .print-chart {
+    margin-bottom: 20px;
+
+    &-title {
+      font-size: 16px;
+      font-weight: 600;
+    }
+
+    &-body {
+      img {
+        display: block;
+        height: 260px;
+        margin: 0 auto;
+      }
+    }
+    .chart-box {
+      height: 260px;
+    }
+
+    &-desc {
+      margin-top: 10px;
+      font-size: 16px;
+      line-height: 1.8;
+      text-indent: 32px;
+      span {
+        font-weight: 600;
+      }
+    }
+  }
+  .export-table {
+    width: 100%;
+    border-spacing: 0;
+    border-collapse: collapse;
+    text-align: center;
+    border-bottom: 1px solid #000;
+    border-right: 1px solid #000;
+    th,
+    td {
+      color: #000;
+      padding: 3px 5px;
+      border-top: 1px solid #000;
+      border-left: 1px solid #000;
+      border-radius: 0 !important;
+    }
+  }
+}
+
+// check-data
+.check-data {
+  .check-list {
+    min-height: 300px;
+  }
+}
+.check-data-result {
+  .ivu-modal-content {
+    background-color: @background-color;
+  }
+  .ivu-modal-body {
+    padding-bottom: 20px;
+  }
+}
+
+// grading-rule-set
+.grading-rule-set {
+  display: flex;
+  align-items: stretch;
+  justify-content: space-between;
+  .rule-part {
+    position: relative;
+    padding: 0 15px 36px;
+    flex-grow: 1;
+
+    &:nth-of-type(2) {
+      border-left: 1px dashed #d0d0d0;
+    }
+
+    &-title {
+      font-size: 18px;
+      font-weight: 600;
+      margin-bottom: 30px;
+      text-align: center;
+    }
+    &-footer {
+      position: absolute;
+      bottom: 0;
+      left: 245px;
+      z-index: 8;
+    }
+  }
+}

+ 1 - 0
src/constants/enumerate.js

@@ -140,6 +140,7 @@ export const PAPER_UPLOAD_TYPE = {
 export const SCORE_HANDLE_TYPE = {
   0: "非零进一",
   1: "四舍五入",
+  2: "去高低,再平均",
 };
 // score-calc-type
 export const SCORE_CALC_TYPE = {

+ 1 - 1
src/modules/grading/leader/LeaderGrading.vue

@@ -354,7 +354,7 @@ export default {
       const data = await markTaskPaperList(datas);
       data.data.forEach((item) => {
         item.markDisabled = markDisabled;
-        item.mark = true;
+        item.mark = item.markByLeader;
       });
       return data;
     },

+ 27 - 1
src/modules/grading/marker/MarkerHeader.vue

@@ -148,6 +148,18 @@
                     :label="item.name"
                   ></Option>
                 </Select>
+                <Select
+                  class="filter-input"
+                  v-model="markFilter.batchNo"
+                  placeholder="批次号"
+                >
+                  <Option
+                    v-for="item in batchNos"
+                    :key="item.batchNo"
+                    :value="item.batchNo"
+                    :label="item.batchNoDisplay"
+                  ></Option>
+                </Select>
                 <Button
                   type="primary"
                   size="small"
@@ -307,7 +319,7 @@
 
 <script>
 import { mapState, mapMutations } from "vuex";
-import { areaList, leaderMarkUserList, logout } from "@/api";
+import { areaList, leaderMarkUserList, batchNoList, logout } from "@/api";
 import ResetPwd from "@/modules/login/ResetPwd";
 import { CODE_TYPE, SUBJECT_STAGE } from "@/constants/enumerate";
 
@@ -344,9 +356,11 @@ export default {
         codeType: "examNumber",
         code: "",
       },
+      batchNos: [],
       markers: [],
       markFilter: {
         markerId: "",
+        batchNo: "",
       },
     };
   },
@@ -391,6 +405,7 @@ export default {
     this.filter.workId = subjectId[0];
     this.filter.subject = subjectId[1];
     this.getAreaList();
+    this.getBatchNoList();
     if (this.IS_MARK_LEADER) this.getLeaderMarkerList();
 
     this.codeTypes = Object.entries(CODE_TYPE)
@@ -404,6 +419,13 @@ export default {
   },
   methods: {
     ...mapMutations("marker", ["setPage", "setAreas", "setRibbonSet"]),
+    async getBatchNoList() {
+      const res = await batchNoList({
+        ...this.filter,
+        stage: this.curSubject.stage,
+      });
+      this.batchNos = res || [];
+    },
     async getAreaList() {
       const data = await areaList(this.filter);
       const areas = data.map((item) => {
@@ -541,6 +563,10 @@ export default {
         this.$Message.error("请选择评卷员!");
         return;
       }
+      if (!this.markFilter.batchNo) {
+        this.$Message.error("请选择批次号!");
+        return;
+      }
       this.$emit("on-mark-search", {
         type: "mark",
         params: this.markFilter,

+ 1 - 1
src/modules/main/QualityAnalysis.vue

@@ -145,11 +145,11 @@
     </Row>
 
     <quality-analysis-export
+      v-if="renderExportPage"
       ref="QualityAnalysisExport"
       :chart-data="renderChartData"
       :page-info="renderPageInfo"
       @on-exported="exportOver"
-      v-if="renderExportPage"
     ></quality-analysis-export>
   </div>
 </template>

+ 40 - 5
src/modules/main/components/QualityAnalysisExport.vue

@@ -9,7 +9,10 @@
         <p>结束时间:{{ pageInfo.endTime }}</p>
       </div>
       <div class="print-chart" v-if="chartData.levelsPropReportData">
-        <div class="print-chart-body" v-if="!showImg">
+        <div
+          class="print-chart-body"
+          v-if="!showImg || !chartData.levelsPropReportData.names.length"
+        >
           <echart-render
             chart-title="档位分布图"
             :animation-is-open="false"
@@ -25,9 +28,16 @@
           <div class="print-chart-title">档位分布图:</div>
           <img src="" ref="levelsPropImg" />
         </div>
+        <div class="print-chart-desc">
+          <span>说明:</span>
+          1.波峰对应档位值越偏左表示其打出的档位值越高,其阅卷尺度相对比较宽松,反之分档尺度比较严;2.若出现“双峰”或“多峰”,可能存在分档标准控制不一致;3.若曲线波峰“瘦高”表明其档位分布比较集中,反之档位分布比较分散。
+        </div>
       </div>
       <div class="print-chart" v-if="chartData.deviationReportData">
-        <div class="print-chart-body" v-if="!showImg">
+        <div
+          class="print-chart-body"
+          v-if="!showImg || !chartData.deviationReportData.names.length"
+        >
           <echart-render
             chart-title="累计偏差"
             :animation-is-open="false"
@@ -44,11 +54,18 @@
           <div class="print-chart-title">累计偏差:</div>
           <img src="" ref="deviationImg" />
         </div>
+        <div class="print-chart-desc">
+          <span>说明:</span>
+          累计偏差为正数表示其累计的分档相对于最终档位偏低,其整体分档尺度比较严,打的较多都是低分档位,其值越大表示分档尺度越严,反之为负数且其值越小表示其分档尺度较宽松,打的较多都为高分档位。绝对值越接近0其分档结果与最终结果越接近。
+        </div>
       </div>
     </div>
     <div class="print-box">
       <div class="print-chart" v-if="chartData.distanceReportData">
-        <div class="print-chart-body" v-if="!showImg">
+        <div
+          class="print-chart-body"
+          v-if="!showImg || !chartData.distanceReportData.names.length"
+        >
           <echart-render
             chart-title="累计误差"
             :animation-is-open="false"
@@ -65,9 +82,16 @@
           <div class="print-chart-title">累计误差:</div>
           <img src="" ref="distanceImg" />
         </div>
+        <div class="print-chart-desc">
+          <span>说明:</span>
+          累计偏差将每张试卷评委档位减去最终档位后求绝对值,计算值越小表明其分档结果越接近于最终结果,评分尺度把握较好。
+        </div>
       </div>
       <div class="print-chart" v-if="chartData.callbackReportData">
-        <div class="print-chart-body" v-if="!showImg">
+        <div
+          class="print-chart-body"
+          v-if="!showImg || !chartData.callbackReportData.names.length"
+        >
           <echart-render
             chart-title="打回次数"
             :animation-is-open="false"
@@ -84,11 +108,18 @@
           <div class="print-chart-title">打回次数:</div>
           <img src="" ref="callbackImg" />
         </div>
+        <div class="print-chart-desc">
+          <span>说明:</span>
+          打回次数将系统自动打回次数与上科组长打回次数求和,其放映评委阅卷中分档与其他评委差异较大的试卷数量,其值越大表明分档差异较大的试卷越多,分档尺度相对其它评委差异越大。
+        </div>
       </div>
     </div>
     <div class="print-box">
       <div class="print-chart" v-if="chartData.selfCheckData">
-        <div class="print-chart-body" v-if="!showImg">
+        <div
+          class="print-chart-body"
+          v-if="!showImg || !chartData.selfCheckData.names.length"
+        >
           <echart-render
             chart-title="自查一致性分析"
             :animation-is-open="false"
@@ -105,6 +136,10 @@
           <div class="print-chart-title">自查一致性分析:</div>
           <img src="" ref="selfCheckImg" />
         </div>
+        <div class="print-chart-desc">
+          <span>说明:</span>
+          系统随机抽取规定数量的评委已分档过的试卷供评委再次分档,记录两次分档的差值,求其平均数,其值越小说明评委分档的尺度越稳定,反之其分档尺度不稳定。
+        </div>
       </div>
     </div>
   </div>

+ 1 - 0
src/modules/mark/leader/LeaderMarking.vue

@@ -226,6 +226,7 @@ export default {
       this.papers = data.data.map((paper) => {
         paper.key = this.$randomCode();
         paper.title = this.IS_ADMIN ? paper.examNumber : `NO.${paper.sn}`;
+        paper.mark = paper.markByLeader;
         return paper;
       });