Ver Fonte

分组导入考生名单

zhangjie há 2 anos atrás
pai
commit
d76948aa35

+ 1085 - 1077
src/assets/styles/mark.less

@@ -1,1077 +1,1085 @@
-// grading-group-manage
+// grading-group-manage
-.grading-group-manage {
+.grading-group-manage {
-  .ivu-tag {
+  .ivu-tag {
-    cursor: move;
+    cursor: move;
-  }
+  }
-  .group-user {
+  .group-user {
-    min-height: 76px;
+    min-height: 76px;
-    padding: 20px 20px 10px;
+    padding: 20px 20px 10px;
-    position: relative;
+    position: relative;
-  }
+  }
-  .group-user-list {
+  .group-user-list {
-    margin-right: 130px;
+    margin-right: 130px;
-    .ivu-btn {
+    .ivu-btn {
-      margin-bottom: 10px;
+      margin-bottom: 10px;
-    }
+    }
-  }
+  }
-  .group-user-action {
+  .group-user-action {
-    position: absolute;
+    position: absolute;
-    top: 20px;
+    top: 20px;
-    right: 20px;
+    right: 20px;
-    z-index: auto;
+    z-index: auto;
-  }
+  }
-}
+}
-.group-list {
+.group-list {
-  font-size: 0;
+  font-size: 0;
-  margin: -10px;
+  margin: -10px;
-
+
-  .group-box {
+  .group-box {
-    display: inline-block;
+    display: inline-block;
-    vertical-align: top;
+    vertical-align: top;
-    font-size: 14px;
+    font-size: 14px;
-    width: 25%;
+    width: 25%;
-    padding: 10px;
+    padding: 10px;
-  }
+  }
-
+
-  &-1 {
+  &-1 {
-    .group-box {
+    .group-box {
-      width: 100%;
+      width: 100%;
-    }
+    }
-  }
+  }
-  &-2 {
+  &-2 {
-    .group-box {
+    .group-box {
-      width: 50%;
+      width: 50%;
-    }
+    }
-  }
+  }
-  &-3 {
+  &-3 {
-    .group-box {
+    .group-box {
-      width: 33.33%;
+      width: 33.33%;
-    }
+    }
-  }
+  }
-  .group-container {
+  .group-container {
-    border-radius: @box-border-radius;
+    position: relative;
-    background-color: @white;
+    border-radius: @box-border-radius;
-  }
+    background-color: @white;
-  .group-head {
+  }
-    height: 56px;
+  .group-head {
-    padding: 15px;
+    height: 56px;
-    border-bottom: 1px solid #f3f3f3;
+    padding: 15px;
-    font-size: 18px;
+    border-bottom: 1px solid #f3f3f3;
-    font-weight: 600;
+    font-size: 18px;
-    line-height: 25px;
+    font-weight: 600;
-    text-align: center;
+    line-height: 25px;
-    position: relative;
+    text-align: center;
-  }
+    position: relative;
-  .group-del {
+  }
-    position: absolute;
+  .group-del {
-    top: 15px;
+    position: absolute;
-    right: 10px;
+    top: 15px;
-    height: 24px;
+    right: 10px;
-    width: 24px;
+    height: 24px;
-    line-height: 24px;
+    width: 24px;
-    font-size: 18px;
+    line-height: 24px;
-    text-align: center;
+    font-size: 18px;
-    color: @dark-color-lighter;
+    text-align: center;
-    background-color: @background-color;
+    color: @dark-color-lighter;
-    border-radius: @box-border-radius;
+    background-color: @background-color;
-    cursor: pointer;
+    border-radius: @box-border-radius;
-
+    cursor: pointer;
-    &:hover {
+
-      background-color: @error-color;
+    &:hover {
-      color: @white;
+      background-color: @error-color;
-    }
+      color: @white;
-  }
+    }
-  .group-body {
+  }
-    padding: 15px;
+  .group-body {
-    height: 200px;
+    padding: 15px 15px 60px 15px;
-  }
+    height: 245px;
-  .group-drag {
+  }
-    height: 100%;
+  .group-drag {
-  }
+    height: 100%;
-}
+  }
-.group-action {
+
-  text-align: center;
+  .group-footer {
-  margin-top: 20px;
+    position: absolute;
-  .ivu-btn {
+    bottom: 15px;
-    width: 100px;
+    right: 15px;
-  }
+    z-index: 8;
-}
+  }
-
+}
-// grading
+.group-action {
-.grading-subnav {
+  text-align: center;
-  display: flex;
+  margin-top: 20px;
-  justify-content: space-between;
+  .ivu-btn {
-  .grading-title {
+    width: 100px;
-    padding: 0 10px;
+  }
-
+}
-    > h1 {
+
-      display: inline-block;
+// grading
-      vertical-align: middle;
+.grading-subnav {
-      font-size: 20px;
+  display: flex;
-      font-weight: 600;
+  justify-content: space-between;
-      margin-right: 20px;
+  .grading-title {
-    }
+    padding: 0 10px;
-    > span {
+
-      display: inline-block;
+    > h1 {
-      vertical-align: middle;
+      display: inline-block;
-      margin-right: 15px;
+      vertical-align: middle;
-      color: @dark-color-light;
+      font-size: 20px;
-    }
+      font-weight: 600;
-  }
+      margin-right: 20px;
-}
+    }
-
+    > span {
-// grading-progress
+      display: inline-block;
-.progress-table {
+      vertical-align: middle;
-  height: 100%;
+      margin-right: 15px;
-  .progress-line {
+      color: @dark-color-light;
-    width: 230px;
+    }
-  }
+  }
-  .kzz-table {
+}
-    margin-bottom: 10px;
+
-    padding-bottom: 10px;
+// grading-progress
-    border-bottom: 1px dashed #e1dfe0;
+.progress-table {
-  }
+  height: 100%;
-  td:first-child {
+  .progress-line {
-    font-weight: 600;
+    width: 230px;
-    color: @dark-color;
+  }
-    width: 100px;
+  .kzz-table {
-  }
+    margin-bottom: 10px;
-}
+    padding-bottom: 10px;
-// progress-line
+    border-bottom: 1px dashed #e1dfe0;
-.progress-line {
+  }
-  position: relative;
+  td:first-child {
-  display: inline-block;
+    font-weight: 600;
-  width: 100%;
+    color: @dark-color;
-  height: 12px;
+    width: 100px;
-  text-align: center;
+  }
-  border-radius: 6px;
+}
-  background-color: @background-color;
+// progress-line
-  font-size: 12px;
+.progress-line {
-  color: @dark-color;
+  position: relative;
-  line-height: 1;
+  display: inline-block;
-  .progress-part {
+  width: 100%;
-    position: absolute;
+  height: 12px;
-    height: 100%;
+  text-align: center;
-    > span {
+  border-radius: 6px;
-      display: inline-block;
+  background-color: @background-color;
-      vertical-align: middle;
+  font-size: 12px;
-      line-height: 1;
+  color: @dark-color;
-    }
+  line-height: 1;
-  }
+  .progress-part {
-  .progress-rate {
+    position: absolute;
-    position: absolute;
+    height: 100%;
-    height: 100%;
+    > span {
-    left: 0;
+      display: inline-block;
-    background-color: @info-color;
+      vertical-align: middle;
-    border-radius: 6px;
+      line-height: 1;
-    text-align: center;
+    }
-  }
+  }
-  .progress-current {
+  .progress-rate {
-    display: inline-block;
+    position: absolute;
-    vertical-align: middle;
+    height: 100%;
-  }
+    left: 0;
-
+    background-color: @info-color;
-  .progress-remain {
+    border-radius: 6px;
-    display: block;
+    text-align: center;
-    position: absolute;
+  }
-    height: 100%;
+  .progress-current {
-    right: 5px;
+    display: inline-block;
-    z-index: 9;
+    vertical-align: middle;
-  }
+  }
-}
+
-// modify-formal-grading-task
+  .progress-remain {
-.modify-formal-grading-task {
+    display: block;
-  .tips-info {
+    position: absolute;
-    margin-bottom: 15px;
+    height: 100%;
-    text-align: center;
+    right: 5px;
-  }
+    z-index: 9;
-}
+  }
-// modify-unformal-grading-task
+}
-.modify-unformal-grading-task {
+// modify-formal-grading-task
-  .task-body {
+.modify-formal-grading-task {
-    min-height: 90px;
+  .tips-info {
-    text-align: center;
+    margin-bottom: 15px;
-  }
+    text-align: center;
-  .task-tips {
+  }
-    font-size: 18px;
+}
-    color: @dark-color-light;
+// modify-unformal-grading-task
-  }
+.modify-unformal-grading-task {
-  .task-action {
+  .task-body {
-    overflow: hidden;
+    min-height: 90px;
-    > button {
+    text-align: center;
-      float: right;
+  }
-
+  .task-tips {
-      &:first-child {
+    font-size: 18px;
-        float: left;
+    color: @dark-color-light;
-      }
+  }
-    }
+  .task-action {
-  }
+    overflow: hidden;
-}
+    > button {
-
+      float: right;
-// grade-step
+
-.grade-step {
+      &:first-child {
-  font-size: 0;
+        float: left;
-  margin-bottom: 4px;
+      }
-  &-level {
+    }
-    white-space: nowrap;
+  }
-    overflow-x: scroll;
+}
-    overflow-y: visible;
+
-    padding: 0 0 10px;
+// grade-step
-  }
+.grade-step {
-  &-other {
+  font-size: 0;
-    float: right;
+  margin-bottom: 4px;
-    padding: 0 0 10px 20px;
+  &-level {
-  }
+    white-space: nowrap;
-  .step-item {
+    overflow-x: scroll;
-    display: inline-block;
+    overflow-y: visible;
-    vertical-align: top;
+    padding: 0 0 10px;
-    padding: 10px;
+  }
-    min-width: 90px;
+  &-other {
-    background-color: @white;
+    float: right;
-    border-radius: @box-border-radius-small;
+    padding: 0 0 10px 20px;
-    color: @dark-color-light;
+  }
-    text-align: center;
+  .step-item {
-    cursor: pointer;
+    display: inline-block;
-    &:not(:last-child) {
+    vertical-align: top;
-      margin-right: 10px;
+    padding: 10px;
-    }
+    min-width: 90px;
-    &:hover {
+    background-color: @white;
-      box-shadow: 0px 10px 15px 0px rgba(34, 192, 255, 0.4);
+    border-radius: @box-border-radius-small;
-    }
+    color: @dark-color-light;
-    p {
+    text-align: center;
-      font-size: 12px;
+    cursor: pointer;
-      height: 17px;
+    &:not(:last-child) {
-      line-height: 17px;
+      margin-right: 10px;
-    }
+    }
-    .step-name {
+    &:hover {
-      color: @dark-color;
+      box-shadow: 0px 10px 15px 0px rgba(34, 192, 255, 0.4);
-      font-size: 24px;
+    }
-      font-weight: 600;
+    p {
-      height: 32px;
+      font-size: 12px;
-      line-height: 32px;
+      height: 17px;
-    }
+      line-height: 17px;
-
+    }
-    &.step-analysis {
+    .step-name {
-      width: 72px;
+      color: @dark-color;
-      min-width: auto;
+      font-size: 24px;
-      margin-right: 20px;
+      font-weight: 600;
-      .step-name {
+      height: 32px;
-        font-size: 20px;
+      line-height: 32px;
-      }
+    }
-    }
+
-    &.step-other {
+    &.step-analysis {
-      min-width: 72px;
+      width: 72px;
-      .step-name {
+      min-width: auto;
-        font-size: 20px;
+      margin-right: 20px;
-      }
+      .step-name {
-    }
+        font-size: 20px;
-
+      }
-    &.step-act {
+    }
-      background-color: @info-color;
+    &.step-other {
-      color: @white;
+      min-width: 72px;
-      box-shadow: 0px 10px 15px 0px rgba(34, 192, 255, 0.4);
+      .step-name {
-      .step-name {
+        font-size: 20px;
-        color: @white;
+      }
-      }
+    }
-    }
+
-  }
+    &.step-act {
-}
+      background-color: @info-color;
-.mark-step {
+      color: @white;
-  .step-item {
+      box-shadow: 0px 10px 15px 0px rgba(34, 192, 255, 0.4);
-    min-width: 60px;
+      .step-name {
-  }
+        color: @white;
-}
+      }
-
+    }
-// grading-detail
+  }
-.grading-detail {
+}
-  .grade-filter {
+.mark-step {
-    position: fixed;
+  .step-item {
-    left: 0;
+    min-width: 60px;
-    top: 50%;
+  }
-    z-index: 199;
+}
-    width: 20px;
+
-    transform: translateY(-50%);
+// grading-detail
-    transition: width 0.2s ease-in;
+.grading-detail {
-    overflow: hidden;
+  .grade-filter {
-
+    position: fixed;
-    .ivu-form {
+    left: 0;
-      white-space: nowrap;
+    top: 50%;
-    }
+    z-index: 199;
-    .ivu-form-item {
+    width: 20px;
-      margin-right: 10px;
+    transform: translateY(-50%);
-    }
+    transition: width 0.2s ease-in;
-    .ivu-form-item:last-child {
+    overflow: hidden;
-      margin-right: 0;
+
-    }
+    .ivu-form {
-
+      white-space: nowrap;
-    &-form {
+    }
-      display: none;
+    .ivu-form-item {
-    }
+      margin-right: 10px;
-    .detail-area {
+    }
-      background-color: @success-color;
+    .ivu-form-item:last-child {
-      border-radius: 3px;
+      margin-right: 0;
-      color: @dark-color-light;
+    }
-      font-size: 12px;
+
-      line-height: 16px;
+    &-form {
-      width: 20px;
+      display: none;
-      padding: 5px 3px;
+    }
-      text-align: center;
+    .detail-area {
-      color: #fff;
+      background-color: @success-color;
-      cursor: pointer;
+      border-radius: 3px;
-
+      color: @dark-color-light;
-      &:hover {
+      font-size: 12px;
-        background-color: fade(@success-color, 80%);
+      line-height: 16px;
-      }
+      width: 20px;
-    }
+      padding: 5px 3px;
-
+      text-align: center;
-    &-select {
+      color: #fff;
-      width: 290px;
+      cursor: pointer;
-      background-color: #fff;
+
-      padding: 10px 10px 0;
+      &:hover {
-      border-top-right-radius: 5px;
+        background-color: fade(@success-color, 80%);
-      border-bottom-right-radius: 5px;
+      }
-      box-shadow: 0 0 15px #c0c0c0;
+    }
-      .grade-filter-form {
+
-        display: block;
+    &-select {
-      }
+      width: 290px;
-      .detail-area {
+      background-color: #fff;
-        display: none;
+      padding: 10px 10px 0;
-      }
+      border-top-right-radius: 5px;
-    }
+      border-bottom-right-radius: 5px;
-  }
+      box-shadow: 0 0 15px #c0c0c0;
-  .grade-step {
+      .grade-filter-form {
-    flex-grow: 0;
+        display: block;
-  }
+      }
-
+      .detail-area {
-  .detail-body {
+        display: none;
-    flex-grow: 2;
+      }
-    min-height: 400px;
+    }
-    display: flex;
+  }
-    justify-content: space-between;
+  .grade-step {
-
+    flex-grow: 0;
-    &-2 {
+  }
-      .detail-papers-list {
+
-        width: 100%;
+  .detail-body {
-      }
+    flex-grow: 2;
-    }
+    min-height: 400px;
-  }
+    display: flex;
-  .detail-action {
+    justify-content: space-between;
-    width: 280px;
+
-    padding: 20px;
+    &-2 {
-    margin-left: 20px;
+      .detail-papers-list {
-    background-color: @white;
+        width: 100%;
-    border-radius: @box-border-radius;
+      }
-    overflow-x: hidden;
+    }
-    overflow-y: auto;
+  }
-    flex-grow: 0;
+  .detail-action {
-  }
+    width: 280px;
-  .detail-action-fullscreen {
+    padding: 20px;
-    position: fixed;
+    margin-left: 20px;
-    width: 280px;
+    background-color: @white;
-    top: 0;
+    border-radius: @box-border-radius;
-    right: 0;
+    overflow-x: hidden;
-    bottom: 0;
+    overflow-y: auto;
-    z-index: 98;
+    flex-grow: 0;
-    border-radius: 0;
+  }
-    min-height: auto;
+  .detail-action-fullscreen {
-    margin: 0;
+    position: fixed;
-    overflow-y: auto;
+    width: 280px;
-    overflow-x: hidden;
+    top: 0;
-    z-index: 999;
+    right: 0;
-  }
+    bottom: 0;
-  .detail-papers {
+    z-index: 98;
-    padding: 0 20px;
+    border-radius: 0;
-    background-color: @white;
+    min-height: auto;
-    border-radius: @box-border-radius;
+    margin: 0;
-    font-size: 0;
+    overflow-y: auto;
-    flex-grow: 2;
+    overflow-x: hidden;
-    display: flex;
+    z-index: 999;
-    justify-content: space-between;
+  }
-    min-height: 400px;
+  .detail-papers {
-
+    padding: 0 20px;
-    &-carousel {
+    background-color: @white;
-      position: relative;
+    border-radius: @box-border-radius;
-      padding: 10px 0 70px;
+    font-size: 0;
-      font-size: 14px;
+    flex-grow: 2;
-      &-split {
+    display: flex;
-        height: 40px;
+    justify-content: space-between;
-      }
+    min-height: 400px;
-      &::after {
+
-        content: "";
+    &-carousel {
-        position: absolute;
+      position: relative;
-        height: 100%;
+      padding: 10px 0 70px;
-        border-left: 1px solid #eff0f5;
+      font-size: 14px;
-        right: 0;
+      &-split {
-        top: 0;
+        height: 40px;
-        z-index: auto;
+      }
-      }
+      &::after {
-    }
+        content: "";
-    &-list {
+        position: absolute;
-      width: 100%;
+        height: 100%;
-      font-size: 14px;
+        border-left: 1px solid #eff0f5;
-      position: relative;
+        right: 0;
-      padding: 10px 0 70px;
+        top: 0;
-      .image-view-list {
+        z-index: auto;
-        margin: 0;
+      }
-        height: 100%;
+    }
-      }
+    &-list {
-      .part-page {
+      width: 100%;
-        position: absolute;
+      font-size: 14px;
-        bottom: 20px;
+      position: relative;
-        width: 100%;
+      padding: 10px 0 70px;
-        z-index: auto;
+      .image-view-list {
-        margin: 0;
+        margin: 0;
-      }
+        height: 100%;
-    }
+      }
-    &-none {
+      .part-page {
-      padding-top: 200px;
+        position: absolute;
-      text-align: center;
+        bottom: 20px;
-      font-size: 24px;
+        width: 100%;
-      color: @dark-color-lighter;
+        z-index: auto;
-    }
+        margin: 0;
-
+      }
-    &-col-3 {
+    }
-      .detail-papers-carousel {
+    &-none {
-        width: 33.33%;
+      padding-top: 200px;
-      }
+      text-align: center;
-      .detail-papers-list {
+      font-size: 24px;
-        width: 66.66%;
+      color: @dark-color-lighter;
-      }
+    }
-    }
+
-    &-col-4 {
+    &-col-3 {
-      .detail-papers-carousel {
+      .detail-papers-carousel {
-        width: 25%;
+        width: 33.33%;
-      }
+      }
-      .detail-papers-list {
+      .detail-papers-list {
-        width: 75%;
+        width: 66.66%;
-      }
+      }
-    }
+    }
-    &-col-5 {
+    &-col-4 {
-      .detail-papers-carousel {
+      .detail-papers-carousel {
-        width: 20%;
+        width: 25%;
-      }
+      }
-      .detail-papers-list {
+      .detail-papers-list {
-        width: 80%;
+        width: 75%;
-      }
+      }
-    }
+    }
-    &-col-6 {
+    &-col-5 {
-      .detail-papers-carousel {
+      .detail-papers-carousel {
-        width: 16.66%;
+        width: 20%;
-      }
+      }
-      .detail-papers-list {
+      .detail-papers-list {
-        width: 83.33%;
+        width: 80%;
-      }
+      }
-    }
+    }
-
+    &-col-6 {
-    .ivu-page {
+      .detail-papers-carousel {
-      text-align: center;
+        width: 16.66%;
-    }
+      }
-  }
+      .detail-papers-list {
-  &-image-preview {
+        width: 83.33%;
-    .ivu-modal-mask,
+      }
-    .ivu-modal-wrap {
+    }
-      left: 0;
+
-      bottom: 0;
+    .ivu-page {
-      top: 0;
+      text-align: center;
-      right: 280px;
+    }
-    }
+  }
-  }
+  &-image-preview {
-}
+    .ivu-modal-mask,
-// mark-detail
+    .ivu-modal-wrap {
-
+      left: 0;
-// grading-operation
+      bottom: 0;
-.grading-operation {
+      top: 0;
-  .detail-action-fullscreen {
+      right: 280px;
-    top: 0;
+    }
-  }
+  }
-  &-image-preview {
+}
-    .ivu-modal-mask,
+// mark-detail
-    .ivu-modal-wrap {
+
-      left: 0;
+// grading-operation
-      bottom: 0;
+.grading-operation {
-      top: 0;
+  .detail-action-fullscreen {
-      right: 280px;
+    top: 0;
-    }
+  }
-  }
+  &-image-preview {
-}
+    .ivu-modal-mask,
-
+    .ivu-modal-wrap {
-/* paper-carousel */
+      left: 0;
-.paper-carousel {
+      bottom: 0;
-  position: absolute;
+      top: 0;
-  top: 48px;
+      right: 280px;
-  bottom: 62px;
+    }
-  left: 10px;
+  }
-  right: 10px;
+}
-
+
-  .carousel-body > img {
+/* paper-carousel */
-    position: absolute;
+.paper-carousel {
-    max-width: 100%;
+  position: absolute;
-    max-height: 100%;
+  top: 48px;
-    width: auto;
+  bottom: 62px;
-    height: auto;
+  left: 10px;
-    top: 0;
+  right: 10px;
-    left: 0;
+
-    right: 0;
+  .carousel-body > img {
-    bottom: 0;
+    position: absolute;
-    margin: auto;
+    max-width: 100%;
-    cursor: pointer;
+    max-height: 100%;
-  }
+    width: auto;
-  .carousel-none {
+    height: auto;
-    color: @dark-color-lighter;
+    top: 0;
-    font-size: @font-size-base;
+    left: 0;
-    text-align: center;
+    right: 0;
-    position: absolute;
+    bottom: 0;
-    width: 100%;
+    margin: auto;
-    top: 50%;
+    cursor: pointer;
-    left: 0;
+  }
-    transform: translateY(-50%);
+  .carousel-none {
-    z-index: 8;
+    color: @dark-color-lighter;
-    > i {
+    font-size: @font-size-base;
-      font-size: 30px;
+    text-align: center;
-    }
+    position: absolute;
-  }
+    width: 100%;
-  .carousel-btn {
+    top: 50%;
-    position: absolute;
+    left: 0;
-    width: 40px;
+    transform: translateY(-50%);
-    height: 40px;
+    z-index: 8;
-    top: 50%;
+    > i {
-    z-index: 9;
+      font-size: 30px;
-    margin-top: -20px;
+    }
-    text-align: center;
+  }
-    line-height: 40px;
+  .carousel-btn {
-    font-size: 36px;
+    position: absolute;
-    color: #ccc;
+    width: 40px;
-    cursor: pointer;
+    height: 40px;
-
+    top: 50%;
-    &:hover {
+    z-index: 9;
-      color: @main-color;
+    margin-top: -20px;
-    }
+    text-align: center;
-
+    line-height: 40px;
-    &-left {
+    font-size: 36px;
-      left: 0;
+    color: #ccc;
-    }
+    cursor: pointer;
-    &-right {
+
-      right: 0;
+    &:hover {
-    }
+      color: @main-color;
-  }
+    }
-}
+
-
+    &-left {
-// .grade-history-paper
+      left: 0;
-.grade-history-paper {
+    }
-  position: relative;
+    &-right {
-  padding: 10px;
+      right: 0;
-  width: 100%;
+    }
-  height: 50%;
+  }
-
+}
-  .carousel-title {
+
-    text-align: center;
+// .grade-history-paper
-    height: 32px;
+.grade-history-paper {
-    line-height: 32px;
+  position: relative;
-    margin-bottom: 6px;
+  padding: 10px;
-    > h3 {
+  width: 100%;
-      font-size: 16px;
+  height: 50%;
-    }
+
-  }
+  .carousel-title {
-}
+    text-align: center;
-// grade-standard-paper
+    height: 32px;
-.grade-standard-paper {
+    line-height: 32px;
-  position: relative;
+    margin-bottom: 6px;
-  padding: 10px;
+    > h3 {
-  height: 50%;
+      font-size: 16px;
-  // margin
+    }
-  .carousel-title {
+  }
-    text-align: center;
+}
-    height: 38px;
+// grade-standard-paper
-
+.grade-standard-paper {
-    > h3 {
+  position: relative;
-      display: inline-block;
+  padding: 10px;
-      vertical-align: middle;
+  height: 50%;
-      margin-right: 15px;
+  // margin
-      font-weight: 600;
+  .carousel-title {
-      font-size: 20px;
+    text-align: center;
-      line-height: 32px;
+    height: 38px;
-    }
+
-    .ivu-select {
+    > h3 {
-      width: 60px;
+      display: inline-block;
-      min-width: auto;
+      vertical-align: middle;
-    }
+      margin-right: 15px;
-  }
+      font-weight: 600;
-  .carousel-loading {
+      font-size: 20px;
-    position: absolute;
+      line-height: 32px;
-    top: 38px;
+    }
-    left: 10px;
+    .ivu-select {
-    right: 10px;
+      width: 60px;
-    bottom: 10px;
+      min-width: auto;
-    z-index: 99;
+    }
-    background-color: rgba(255, 255, 255, 0.3);
+  }
-    text-align: center;
+  .carousel-loading {
-
+    position: absolute;
-    > i {
+    top: 38px;
-      font-size: 24px;
+    left: 10px;
-      position: relative;
+    right: 10px;
-      top: 50%;
+    bottom: 10px;
-      margin-top: -15px;
+    z-index: 99;
-    }
+    background-color: rgba(255, 255, 255, 0.3);
-  }
+    text-align: center;
-}
+
-
+    > i {
-// .grade-action
+      font-size: 24px;
-.grade-action {
+      position: relative;
-  font-size: 14px;
+      top: 50%;
-  text-align: center;
+      margin-top: -15px;
-  .grade-info-deviation {
+    }
-    margin-left: 10px;
+  }
-    color: @dark-color-lighter;
+}
-
+
-    &-error {
+// .grade-action
-      color: @error-color;
+.grade-action {
-    }
+  font-size: 14px;
-  }
+  text-align: center;
-  .action-search {
+  .grade-info-deviation {
-    margin-top: 20px;
+    margin-left: 10px;
-    padding-top: 20px;
+    color: @dark-color-lighter;
-    border-top: 1px dashed #e0e0e0;
+
-    text-align: left;
+    &-error {
-
+      color: @error-color;
-    .search-select {
+    }
-      display: block;
+  }
-      width: 100px;
+  .action-search {
-      min-width: auto;
+    margin-top: 20px;
-      margin-bottom: 8px;
+    padding-top: 20px;
-    }
+    border-top: 1px dashed #e0e0e0;
-    .search-input {
+    text-align: left;
-      display: inline-block;
+
-      vertical-align: top;
+    .search-select {
-      margin-right: 10px;
+      display: block;
-      width: 150px;
+      width: 100px;
-    }
+      min-width: auto;
-    .search-btn {
+      margin-bottom: 8px;
-      display: inline-block;
+    }
-      vertical-align: top;
+    .search-input {
-      width: 60px;
+      display: inline-block;
-    }
+      vertical-align: top;
-  }
+      margin-right: 10px;
-  .action-paper-state {
+      width: 150px;
-    position: relative;
+    }
-    display: inline-block;
+    .search-btn {
-    color: @dark-color-light;
+      display: inline-block;
-    margin-bottom: 30px;
+      vertical-align: top;
-    .paper-state-cont {
+      width: 60px;
-      background: @background-color;
+    }
-      border-radius: @box-border-radius-small;
+  }
-      font-size: 20px;
+  .action-paper-state {
-      line-height: 26px;
+    position: relative;
-      padding: 6px 12px;
+    display: inline-block;
-    }
+    color: @dark-color-light;
-    .paper-state-intro {
+    margin-bottom: 30px;
-      position: absolute;
+    .paper-state-cont {
-      bottom: -22px;
+      background: @background-color;
-      width: 100%;
+      border-radius: @box-border-radius-small;
-      height: 20px;
+      font-size: 20px;
-      text-align: center;
+      line-height: 26px;
-    }
+      padding: 6px 12px;
-  }
+    }
-
+    .paper-state-intro {
-  .action-paper-info {
+      position: absolute;
-    font-size: 14px;
+      bottom: -22px;
-    margin-bottom: 20px;
+      width: 100%;
-    color: @dark-color-light;
+      height: 20px;
-    line-height: 24px;
+      text-align: center;
-    text-align: left;
+    }
-
+  }
-    p {
+
-      margin-bottom: 4px;
+  .action-paper-info {
-    }
+    font-size: 14px;
-
+    margin-bottom: 20px;
-    span:last-child {
+    color: @dark-color-light;
-      color: @dark-color;
+    line-height: 24px;
-      font-size: 18px;
+    text-align: left;
-    }
+
-  }
+    p {
-  .action-grade-change {
+      margin-bottom: 4px;
-    margin-bottom: 20px;
+    }
-    background-color: #e7eaf1;
+
-    color: @dark-color-light;
+    span:last-child {
-    padding: 20px;
+      color: @dark-color;
-    font-size: 20px;
+      font-size: 18px;
-    border-radius: @box-border-radius-small;
+    }
-    line-height: 28px;
+  }
-    text-align: left;
+  .action-grade-change {
-
+    margin-bottom: 20px;
-    > p:first-child {
+    background-color: #e7eaf1;
-      margin-bottom: 10px;
+    color: @dark-color-light;
-    }
+    padding: 20px;
-  }
+    font-size: 20px;
-  .action-grade-change-status {
+    border-radius: @box-border-radius-small;
-    text-align: center;
+    line-height: 28px;
-    padding: 8px;
+    text-align: left;
-    line-height: 28px;
+
-    font-size: 20px;
+    > p:first-child {
-    font-weight: 600;
+      margin-bottom: 10px;
-    background: rgba(247, 247, 250, 1);
+    }
-    color: rgba(194, 199, 213, 1);
+  }
-    border-radius: @box-border-radius-small;
+  .action-grade-change-status {
-
+    text-align: center;
-    &-error {
+    padding: 8px;
-      background: rgba(255, 112, 129, 0.1);
+    line-height: 28px;
-      color: @error-color;
+    font-size: 20px;
-    }
+    font-weight: 600;
-  }
+    background: rgba(247, 247, 250, 1);
-
+    color: rgba(194, 199, 213, 1);
-  .action-grade-info {
+    border-radius: @box-border-radius-small;
-    margin-bottom: 20px;
+
-    background-color: @success-color;
+    &-error {
-    color: @white;
+      background: rgba(255, 112, 129, 0.1);
-    padding: 8px;
+      color: @error-color;
-    border-radius: @box-border-radius-small;
+    }
-
+  }
-    + .action-mark-info {
+
-      margin-top: -10px;
+  .action-grade-info {
-    }
+    margin-bottom: 20px;
-    &-title {
+    background-color: @success-color;
-      color: @dark-color;
+    color: @white;
-      font-size: 18px;
+    padding: 8px;
-      font-weight: 600;
+    border-radius: @box-border-radius-small;
-      line-height: 1;
+
-      margin-bottom: 10px;
+    + .action-mark-info {
-      text-align: left;
+      margin-top: -10px;
-    }
+    }
-
+    &-title {
-    .grade-info-name {
+      color: @dark-color;
-      display: inline-block;
+      font-size: 18px;
-      vertical-align: top;
+      font-weight: 600;
-      height: 60px;
+      line-height: 1;
-      line-height: 60px;
+      margin-bottom: 10px;
-      font-size: 54px;
+      text-align: left;
-      text-align: center;
+    }
-      border-radius: 50%;
+
-      color: #fff;
+    .grade-info-name {
-    }
+      display: inline-block;
-    .grade-info-none {
+      vertical-align: top;
-      font-size: 34px;
+      height: 60px;
-    }
+      line-height: 60px;
-    .grade-info-range {
+      font-size: 54px;
-      display: inline-block;
+      text-align: center;
-      vertical-align: top;
+      border-radius: 50%;
-      margin-left: 20px;
+      color: #fff;
-      font-size: 12px;
+    }
-      text-align: left;
+    .grade-info-none {
-      padding: 5px 0;
+      font-size: 34px;
-      p {
+    }
-        margin: 0;
+    .grade-info-range {
-      }
+      display: inline-block;
-      p:first-child {
+      vertical-align: top;
-        line-height: 20px;
+      margin-left: 20px;
-      }
+      font-size: 12px;
-
+      text-align: left;
-      p:last-child {
+      padding: 5px 0;
-        font-size: 20px;
+      p {
-        line-height: 30px;
+        margin: 0;
-      }
+      }
-
+      p:first-child {
-      > span {
+        line-height: 20px;
-        margin: 0 2px;
+      }
-      }
+
-    }
+      p:last-child {
-  }
+        font-size: 20px;
-  .action-grade-list {
+        line-height: 30px;
-    font-size: 0;
+      }
-    margin: -5px -5px 20px;
+
-  }
+      > span {
-  .action-grade-item {
+        margin: 0 2px;
-    display: inline-block;
+      }
-    vertical-align: top;
+    }
-    width: 33.33%;
+  }
-    padding: 5px;
+  .action-grade-list {
-    font-size: 12px;
+    font-size: 0;
-    color: @dark-color-light;
+    margin: -5px -5px 20px;
-
+  }
-    &-content {
+  .action-grade-item {
-      padding: 8px;
+    display: inline-block;
-      background: @background-color;
+    vertical-align: top;
-      border-radius: @box-border-radius-small;
+    width: 33.33%;
-      cursor: pointer;
+    padding: 5px;
-
+    font-size: 12px;
-      &:hover {
+    color: @dark-color-light;
-        background-color: @info-color;
+
-        color: @white;
+    &-content {
-      }
+      padding: 8px;
-    }
+      background: @background-color;
-
+      border-radius: @box-border-radius-small;
-    p {
+      cursor: pointer;
-      line-height: 1;
+
-
+      &:hover {
-      &:first-child {
+        background-color: @info-color;
-        font-size: 24px;
+        color: @white;
-        line-height: 28px;
+      }
-      }
+    }
-    }
+
-  }
+    p {
-  .action-item-content-disabled {
+      line-height: 1;
-    background: #eee !important;
+
-    color: @btn-disable-color!important;
+      &:first-child {
-    cursor: not-allowed !important;
+        font-size: 24px;
-  }
+        line-height: 28px;
-  .action-grade-history {
+      }
-    text-align: left;
+    }
-    > h3 {
+  }
-      font-size: 18px;
+  .action-item-content-disabled {
-      font-weight: 600;
+    background: #eee !important;
-      line-height: 1;
+    color: @btn-disable-color!important;
-      margin-bottom: 10px;
+    cursor: not-allowed !important;
-    }
+  }
-    .grade-history-item {
+  .action-grade-history {
-      margin: 0 0 5px 0;
+    text-align: left;
-      padding: 4px 4px 4px 10px;
+    > h3 {
-      background-color: @background-color;
+      font-size: 18px;
-      color: @dark-color-light;
+      font-weight: 600;
-      border-radius: 5px;
+      line-height: 1;
-      height: 34px;
+      margin-bottom: 10px;
-      font-size: 14px;
+    }
-      line-height: 26px;
+    .grade-history-item {
-
+      margin: 0 0 5px 0;
-      p:first-child {
+      padding: 4px 4px 4px 10px;
-        white-space: nowrap;
+      background-color: @background-color;
-        word-break: keep-all;
+      color: @dark-color-light;
-        float: left;
+      border-radius: 5px;
-      }
+      height: 34px;
-      p:last-child {
+      font-size: 14px;
-        padding: 0 8px;
+      line-height: 26px;
-        border-radius: 8px;
+
-        background-color: @white;
+      p:first-child {
-        font-size: 14px;
+        white-space: nowrap;
-        float: right;
+        word-break: keep-all;
-      }
+        float: left;
-    }
+      }
-  }
+      p:last-child {
-  .action-grade-pass {
+        padding: 0 8px;
-    height: 60px;
+        border-radius: 8px;
-    background-color: #f7f7fa;
+        background-color: @white;
-    border-radius: @box-border-radius-small;
+        font-size: 14px;
-    padding: 14px;
+        float: right;
-    color: @dark-color-light;
+      }
-    font-weight: 600;
+    }
-    line-height: 32px;
+  }
-    font-size: 20px;
+  .action-grade-pass {
-    cursor: pointer;
+    height: 60px;
-
+    background-color: #f7f7fa;
-    &:hover {
+    border-radius: @box-border-radius-small;
-      background-color: shade(#f7f7fa, 5%);
+    padding: 14px;
-    }
+    color: @dark-color-light;
-  }
+    font-weight: 600;
-}
+    line-height: 32px;
-.mark-action {
+    font-size: 20px;
-  .mark-info {
+    cursor: pointer;
-    font-size: 30px;
+
-  }
+    &:hover {
-  .action-mark-list {
+      background-color: shade(#f7f7fa, 5%);
-    font-size: 0;
+    }
-    margin: -5px -5px 20px;
+  }
-  }
+}
-  .action-mark-item {
+.mark-action {
-    display: inline-block;
+  .mark-info {
-    vertical-align: top;
+    font-size: 30px;
-    padding: 5px;
+  }
-    width: 20%;
+  .action-mark-list {
-
+    font-size: 0;
-    &-content {
+    margin: -5px -5px 20px;
-      height: 40px;
+  }
-      padding: 5px 2px;
+  .action-mark-item {
-      font-size: 16px;
+    display: inline-block;
-      line-height: 30px;
+    vertical-align: top;
-      color: @dark-color-light;
+    padding: 5px;
-      background: @background-color;
+    width: 20%;
-      border-radius: @box-border-radius;
+
-      text-align: center;
+    &-content {
-      cursor: pointer;
+      height: 40px;
-
+      padding: 5px 2px;
-      &:hover {
+      font-size: 16px;
-        background-color: @info-color;
+      line-height: 30px;
-        color: @white;
+      color: @dark-color-light;
-      }
+      background: @background-color;
-    }
+      border-radius: @box-border-radius;
-  }
+      text-align: center;
-  .action-mark-input {
+      cursor: pointer;
-    margin-bottom: 20px;
+
-    text-align: left;
+      &:hover {
-    .tips-info {
+        background-color: @info-color;
-      line-height: 20px;
+        color: @white;
-      text-align: left;
+      }
-    }
+    }
-    .ivu-icon {
+  }
-      margin-right: 3px;
+  .action-mark-input {
-    }
+    margin-bottom: 20px;
-    .ivu-input-number {
+    text-align: left;
-      width: 90px;
+    .tips-info {
-      min-width: 0;
+      line-height: 20px;
-    }
+      text-align: left;
-    .ivu-form-item.mark-input-confirm {
+    }
-      margin-right: 0;
+    .ivu-icon {
-    }
+      margin-right: 3px;
-    .ivu-form-item-error + .mark-input-confirm + .tips-info {
+    }
-      color: @error-color;
+    .ivu-input-number {
-    }
+      width: 90px;
-  }
+      min-width: 0;
-}
+    }
-
+    .ivu-form-item.mark-input-confirm {
-// .grade-analysis
+      margin-right: 0;
-.grade-analysis {
+    }
-  .analysis-chart {
+    .ivu-form-item-error + .mark-input-confirm + .tips-info {
-    margin-top: 20px;
+      color: @error-color;
-    padding: 10px;
+    }
-  }
+  }
-}
+}
-
+
-// leader-grading
+// .grade-analysis
-.leader-grading {
+.grade-analysis {
-  text-align: center;
+  .analysis-chart {
-  padding-bottom: 40px;
+    margin-top: 20px;
-  color: @dark-color-light;
+    padding: 10px;
-  .leader-level {
+  }
-    h3 {
+}
-      padding: 10px;
+
-      width: 150px;
+// leader-grading
-      font-size: 28px;
+.leader-grading {
-      background-color: @background-color;
+  text-align: center;
-      color: @dark-color;
+  padding-bottom: 40px;
-      font-weight: 600;
+  color: @dark-color-light;
-      border-radius: @box-border-radius;
+  .leader-level {
-      margin: 5px auto 20px;
+    h3 {
-    }
+      padding: 10px;
-  }
+      width: 150px;
-  .leader-aciton {
+      font-size: 28px;
-    display: inline-block;
+      background-color: @background-color;
-    vertical-align: top;
+      color: @dark-color;
-    margin: 0 10px;
+      font-weight: 600;
-    color: @dark-color;
+      border-radius: @box-border-radius;
-  }
+      margin: 5px auto 20px;
-  .leader-markers {
+    }
-    margin-top: 20px;
+  }
-    background-color: @background-color;
+  .leader-aciton {
-    border-radius: @box-border-radius;
+    display: inline-block;
-    padding: 20px;
+    vertical-align: top;
-    .ivu-checkbox-wrapper {
+    margin: 0 10px;
-      margin-right: 20px;
+    color: @dark-color;
-    }
+  }
-  }
+  .leader-markers {
-}
+    margin-top: 20px;
-// .mark-task-manage
+    background-color: @background-color;
-.mark-task {
+    border-radius: @box-border-radius;
-  &-total {
+    padding: 20px;
-    display: inline-block;
+    .ivu-checkbox-wrapper {
-    vertical-align: middle;
+      margin-right: 20px;
-    font-weight: 600;
+    }
-    margin-right: 20px;
+  }
-    span {
+}
-      display: inline-block;
+// .mark-task-manage
-      vertical-align: middle;
+.mark-task {
-      line-height: 36px;
+  &-total {
-    }
+    display: inline-block;
-
+    vertical-align: middle;
-    span:last-child {
+    font-weight: 600;
-      font-size: 18px;
+    margin-right: 20px;
-    }
+    span {
-  }
+      display: inline-block;
-}
+      vertical-align: middle;
-.task-confirm-modal {
+      line-height: 36px;
-  .ivu-modal-header {
+    }
-    padding: 20px 32px;
+
-    border: 0;
+    span:last-child {
-  }
+      font-size: 18px;
-  .ivu-modal-body {
+    }
-    padding: 10px 32px;
+  }
-  }
+}
-  .ivu-modal-footer {
+.task-confirm-modal {
-    padding: 0 32px 32px;
+  .ivu-modal-header {
-  }
+    padding: 20px 32px;
-  .ivu-modal-header-inner {
+    border: 0;
-    text-align: left;
+  }
-  }
+  .ivu-modal-body {
-  .ivu-modal-content {
+    padding: 10px 32px;
-    background-color: @background-color;
+  }
-  }
+  .ivu-modal-footer {
-}
+    padding: 0 32px 32px;
-
+  }
-// grading-standard-paper-manage
+  .ivu-modal-header-inner {
-.grading-standard-paper-manage {
+    text-align: left;
-  .level-list {
+  }
-    font-size: 0;
+  .ivu-modal-content {
-    white-space: nowrap;
+    background-color: @background-color;
-  }
+  }
-  .level-item {
+}
-    display: inline-block;
+
-    vertical-align: top;
+// grading-standard-paper-manage
-    height: 32px;
+.grading-standard-paper-manage {
-    line-height: 32px;
+  .level-list {
-    padding: 0 12px;
+    font-size: 0;
-    border-radius: @box-border-radius-small;
+    white-space: nowrap;
-    background-color: @white;
+  }
-    color: @dark-color-light;
+  .level-item {
-    font-size: 16px;
+    display: inline-block;
-    cursor: pointer;
+    vertical-align: top;
-    &:not(:last-child) {
+    height: 32px;
-      margin-right: 10px;
+    line-height: 32px;
-    }
+    padding: 0 12px;
-    &:hover {
+    border-radius: @box-border-radius-small;
-      box-shadow: 0px 10px 10px 0px rgba(34, 192, 255, 0.4);
+    background-color: @white;
-    }
+    color: @dark-color-light;
-
+    font-size: 16px;
-    &-act {
+    cursor: pointer;
-      background-color: @info-color;
+    &:not(:last-child) {
-      color: @white;
+      margin-right: 10px;
-      box-shadow: 0px 10px 10px 0px rgba(34, 192, 255, 0.4);
+    }
-    }
+    &:hover {
-  }
+      box-shadow: 0px 10px 10px 0px rgba(34, 192, 255, 0.4);
-
+    }
-  .standard-papers-none {
+
-    padding-top: 200px;
+    &-act {
-    text-align: center;
+      background-color: @info-color;
-    font-size: 24px;
+      color: @white;
-    color: @dark-color-lighter;
+      box-shadow: 0px 10px 10px 0px rgba(34, 192, 255, 0.4);
-  }
+    }
-  .standard-papers-list {
+  }
-    min-height: 400px;
+
-
+  .standard-papers-none {
-    .image-view-list .image-view {
+    padding-top: 200px;
-      height: 400px;
+    text-align: center;
-    }
+    font-size: 24px;
-  }
+    color: @dark-color-lighter;
-}
+  }
-.change-standard-paper-dialog {
+  .standard-papers-list {
-  .level-list {
+    min-height: 400px;
-    font-size: 0;
+
-    padding-bottom: 50px;
+    .image-view-list .image-view {
-  }
+      height: 400px;
-  .level-item {
+    }
-    display: inline-block;
+  }
-    vertical-align: top;
+}
-    height: 32px;
+.change-standard-paper-dialog {
-    width: 40px;
+  .level-list {
-    line-height: 32px;
+    font-size: 0;
-    text-align: center;
+    padding-bottom: 50px;
-    border-radius: @box-border-radius-small;
+  }
-    color: @dark-color-lighter;
+  .level-item {
-    border: 1px solid @dark-color-lighter;
+    display: inline-block;
-    font-size: 16px;
+    vertical-align: top;
-    margin: 10px;
+    height: 32px;
-    cursor: pointer;
+    width: 40px;
-
+    line-height: 32px;
-    &:hover {
+    text-align: center;
-      color: @main-color;
+    border-radius: @box-border-radius-small;
-      border-color: @main-color;
+    color: @dark-color-lighter;
-    }
+    border: 1px solid @dark-color-lighter;
-
+    font-size: 16px;
-    &-act {
+    margin: 10px;
-      border-color: rgba(34, 192, 255, 0.4) !important;
+    cursor: pointer;
-      background-color: @info-color;
+
-      color: @white!important;
+    &:hover {
-      box-shadow: 0px 10px 10px 0px rgba(34, 192, 255, 0.4);
+      color: @main-color;
-    }
+      border-color: @main-color;
-
+    }
-    &-disabled {
+
-      border-color: @disabled-color !important;
+    &-act {
-      color: @disabled-color!important;
+      border-color: rgba(34, 192, 255, 0.4) !important;
-      cursor: not-allowed;
+      background-color: @info-color;
-    }
+      color: @white!important;
-  }
+      box-shadow: 0px 10px 10px 0px rgba(34, 192, 255, 0.4);
-}
+    }
+
+    &-disabled {
+      border-color: @disabled-color !important;
+      color: @disabled-color!important;
+      cursor: not-allowed;
+    }
+  }
+}

+ 5 - 0
src/constants/enumerate.js

@@ -140,6 +140,11 @@ export const SCORE_HANDLE_TYPE = {
   0: "非零进一",
   0: "非零进一",
   1: "四舍五入"
   1: "四舍五入"
 };
 };
+// score-calc-type
+export const SCORE_CALC_TYPE = {
+  0: "全部加权平均",
+  1: "去高去低加权平均"
+};
 
 
 // apply-change-level-status
 // apply-change-level-status
 export const CHANGE_LEVEL_STATUS = {
 export const CHANGE_LEVEL_STATUS = {

+ 245 - 173
src/modules/grading/GradingGroupManage.vue

@@ -1,173 +1,245 @@
-<template>
+<template>
-  <div class="grading-group-manage">
+  <div class="grading-group-manage">
-    <div class="group-user part-box" v-if="users.length">
+    <div class="group-user part-box" v-if="users.length">
-      <draggable class="group-user-list" group="user" :list="users">
+      <draggable class="group-user-list" group="user" :list="users">
-        <Button size="small" v-for="user in users" :key="user.id">
+        <Button size="small" v-for="user in users" :key="user.id">
-          {{ user.loginName }}
+          {{ user.loginName }}
-        </Button>
+        </Button>
-      </draggable>
+      </draggable>
-      <Button
+      <Button
-        class="group-user-action"
+        class="group-user-action"
-        shape="circle"
+        shape="circle"
-        type="success"
+        type="success"
-        icon="recode-white icon"
+        icon="recode-white icon"
-        @click="toAddGroup"
+        @click="toAddGroup"
-        >新增分组</Button
+        >新增分组</Button
-      >
+      >
-    </div>
+    </div>
-    <div :class="groupListClasses">
+    <div :class="groupListClasses">
-      <div class="group-box" v-for="(group, gindex) in groups" :key="gindex">
+      <div class="group-box" v-for="(group, gindex) in groups" :key="gindex">
-        <div class="group-container">
+        <div class="group-container">
-          <div class="group-head">
+          <div class="group-head">
-            <h2 class="group-name">{{ group.name }}</h2>
+            <h2 class="group-name">{{ group.name }}</h2>
-            <div class="group-del" @click="delGroup(gindex)">
+            <div class="group-del" @click="delGroup(gindex)">
-              <Icon type="md-close" />
+              <Icon type="md-close" />
-            </div>
+            </div>
-          </div>
+          </div>
-          <div class="group-body">
+          <div class="group-body">
-            <draggable class="group-drag" group="user" :list="group.markers">
+            <draggable class="group-drag" group="user" :list="group.markers">
-              <Tag
+              <Tag
-                size="large"
+                size="large"
-                v-for="(user, uindex) in group.markers"
+                v-for="(user, uindex) in group.markers"
-                :key="uindex"
+                :key="uindex"
-                @on-close="removeGroupUser(uindex, group)"
+                @on-close="removeGroupUser(uindex, group)"
-                closable
+                closable
-              >
+              >
-                {{ user.loginName }}
+                {{ user.loginName }}
-              </Tag>
+              </Tag>
-            </draggable>
+            </draggable>
-          </div>
+          </div>
-        </div>
+          <div v-if="group.id" class="group-footer">
-      </div>
+            <Button
-    </div>
+              shape="circle"
-    <div class="group-action">
+              type="primary"
-      <Button
+              ghost
-        shape="circle"
+              icon="upload icon"
-        type="primary"
+              @click="toImportGroupStudent(group)"
-        @click="submit"
+              >导入考生名单</Button
-        :disabled="!this.groups.length || isSubmit"
+            >
-        >确认</Button
+            <Button
-      >
+              shape="circle"
-    </div>
+              icon="md-trash"
-  </div>
+              type="error"
-</template>
+              ghost
-
+              :disabled="!group.hasStudent"
-<script>
+              @click="toDeleteGroupStudent(group)"
-import {
+              >删除导入考生</Button
-  gradingGroupList,
+            >
-  markUserList,
+          </div>
-  updateGradingGroup,
+        </div>
-  deleteGradingGroup
+      </div>
-} from "@/api";
+    </div>
-import draggable from "vuedraggable";
+    <div class="group-action">
-
+      <Button
-export default {
+        shape="circle"
-  name: "grading-group-manage",
+        type="primary"
-  components: { draggable },
+        @click="submit"
-  data() {
+        :disabled="!this.groups.length || isSubmit"
-    return {
+        >确认</Button
-      workId: this.$route.params.workId,
+      >
-      subjectId: this.$route.params.subjectId,
+    </div>
-      groups: [],
+
-      users: [],
+    <!-- import student  -->
-      isSubmit: false
+    <import-file
-    };
+      :title="uploadTitle"
-  },
+      :upload-url="uploadStudentUrl"
-  computed: {
+      :upload-data="uploadData"
-    groupListClasses() {
+      :download-url="downloadStudentTemplateUrl"
-      const num = this.groups.length;
+      :download-filename="downloadStudentTemplateFilename"
-      return ["group-list", `group-list-${num}`];
+      :headers="headers"
-    }
+      :format="['xls', 'xlsx']"
-  },
+      @upload-success="uploadSuccess"
-  mounted() {
+      ref="ExportStudent"
-    this.initData();
+    >
-  },
+    </import-file>
-  methods: {
+  </div>
-    initData() {
+</template>
-      this.getGroupList();
+
-      this.getMarkUserList();
+<script>
-    },
+import {
-    async getGroupList() {
+  gradingGroupList,
-      this.groups = await gradingGroupList(this.subjectId);
+  markUserList,
-    },
+  updateGradingGroup,
-    async getMarkUserList() {
+  deleteGradingGroup
-      const data = await markUserList({
+} from "@/api";
-        workId: this.workId,
+import draggable from "vuedraggable";
-        subjectId: this.subjectId.split("-")[1]
+import ImportFile from "@/components/common/ImportFile";
-      });
+
-      this.users = data.filter(user => !user.groupId);
+export default {
-    },
+  name: "grading-group-manage",
-    submit() {
+  components: { draggable, ImportFile },
-      if (this.isSubmit) return;
+  data() {
-      const hasNoneGroup = this.groups.some(group => !group.markers.length);
+    return {
-      if (hasNoneGroup) {
+      workId: this.$route.params.workId,
-        this.$Message.error("当前分组列表中存在空组!");
+      subjectId: this.$route.params.subjectId,
-        return;
+      groups: [],
-      }
+      users: [],
-      const hasNoneLeaderGroup = this.groups.some(
+      isSubmit: false,
-        group => !group.markers.some(marker => marker.role === "MARK_LEADER")
+      // upload
-      );
+      uploadTitle: "",
-      if (hasNoneLeaderGroup) {
+      headers: {
-        this.$Message.error("请确认每一个分组都有科组长!");
+        Authorization: this.$ls.get("user", { token: "" }).token,
-        return;
+        workId: this.$route.params.workId,
-      }
+        userId: this.$ls.get("user", { id: "" }).id
-      this.save();
+      },
-    },
+      uploadData: {
-    async save() {
+        workId: this.$route.params.workId,
-      this.isSubmit = true;
+        subjectId: this.$route.params.subjectId,
-      for (let i = 0; i < this.groups.length; i++) {
+        groupId: null
-        const group = this.groups[i];
+      },
-        let result = await updateGradingGroup(
+      uploadStudentUrl: this.GLOBAL.domain + "/api/import/group-students",
-          this.subjectId,
+      downloadStudentTemplateUrl: "/templates/考生名单表-模板.xlsx",
-          group
+      downloadStudentTemplateFilename: "考生名单表-模板.xlsx"
-        ).catch(() => {});
+    };
-        if (!result) {
+  },
-          this.isSubmit = false;
+  computed: {
-          this.$Message.error("保存失败,请重新尝试!");
+    groupListClasses() {
-          return;
+      const num = this.groups.length;
-        }
+      return ["group-list", `group-list-${num}`];
-      }
+    }
-      this.isSubmit = false;
+  },
-      this.$Message.success("保存成功!");
+  mounted() {
-      this.initData();
+    this.initData();
-    },
+  },
-    toAddGroup() {
+  methods: {
-      this.groups.push({
+    initData() {
-        id: "",
+      this.getGroupList();
-        name: "评卷组" + (this.groups.length + 1),
+      this.getMarkUserList();
-        markers: [],
+    },
-        subject: this.subjectId.split("-")[1],
+    async getGroupList() {
-        workId: this.workId
+      this.groups = await gradingGroupList(this.subjectId);
-      });
+    },
-    },
+    async getMarkUserList() {
-    removeGroupUser(uindex, group) {
+      const data = await markUserList({
-      this.users.push({ ...group.markers[uindex] });
+        workId: this.workId,
-      group.markers.splice(uindex, 1);
+        subjectId: this.subjectId.split("-")[1]
-    },
+      });
-    delGroup(gindex) {
+      this.users = data.filter(user => !user.groupId);
-      const group = this.groups[gindex];
+    },
-      if (!group.id) {
+    submit() {
-        this.removeGroup(gindex);
+      if (this.isSubmit) return;
-        return;
+      const hasNoneGroup = this.groups.some(group => !group.markers.length);
-      }
+      if (hasNoneGroup) {
-
+        this.$Message.error("当前分组列表中存在空组!");
-      this.$Modal.confirm({
+        return;
-        content: "确定要删除当前分组吗?",
+      }
-        onOk: async () => {
+      const hasNoneLeaderGroup = this.groups.some(
-          await deleteGradingGroup(this.subjectId, group.id);
+        group => !group.markers.some(marker => marker.role === "MARK_LEADER")
-          this.removeGroup(gindex);
+      );
-          this.$Message.success("删除成功!");
+      if (hasNoneLeaderGroup) {
-        }
+        this.$Message.error("请确认每一个分组都有科组长!");
-      });
+        return;
-    },
+      }
-    removeGroup(gindex) {
+      this.save();
-      const group = this.groups[gindex];
+    },
-      this.users = [...this.users, ...group.markers];
+    async save() {
-      this.groups.splice(gindex, 1);
+      this.isSubmit = true;
-      this.groups.map((group, index) => {
+      for (let i = 0; i < this.groups.length; i++) {
-        group.name = "评卷组" + (index + 1);
+        const group = this.groups[i];
-      });
+        let result = await updateGradingGroup(
-    }
+          this.subjectId,
-  }
+          group
-};
+        ).catch(() => {});
-</script>
+        if (!result) {
+          this.isSubmit = false;
+          this.$Message.error("保存失败,请重新尝试!");
+          return;
+        }
+      }
+      this.isSubmit = false;
+      this.$Message.success("保存成功!");
+      this.initData();
+    },
+    toAddGroup() {
+      this.groups.push({
+        id: "",
+        name: "评卷组" + (this.groups.length + 1),
+        markers: [],
+        subject: this.subjectId.split("-")[1],
+        workId: this.workId
+      });
+    },
+    removeGroupUser(uindex, group) {
+      this.users.push({ ...group.markers[uindex] });
+      group.markers.splice(uindex, 1);
+    },
+    delGroup(gindex) {
+      const group = this.groups[gindex];
+      if (!group.id) {
+        this.removeGroup(gindex);
+        return;
+      }
+
+      this.$Modal.confirm({
+        content: "确定要删除当前分组吗?",
+        onOk: async () => {
+          await deleteGradingGroup(this.subjectId, group.id);
+          this.removeGroup(gindex);
+          this.$Message.success("删除成功!");
+        }
+      });
+    },
+    removeGroup(gindex) {
+      const group = this.groups[gindex];
+      this.users = [...this.users, ...group.markers];
+      this.groups.splice(gindex, 1);
+      this.groups.map((group, index) => {
+        group.name = "评卷组" + (index + 1);
+      });
+    },
+    toImportGroupStudent(group) {
+      this.uploadTitle = `导入考生名单-${group.name}`;
+      this.uploadData.groupId = group.id;
+      this.$refs.ExportStudent.open();
+    },
+    uploadSuccess() {
+      this.getGroupList();
+      this.$Notice.success({
+        title: "导入提示",
+        desc: "考生名单导入成功!",
+        duration: 0
+      });
+    },
+    toDeleteGroupStudent(group) {
+      this.$Modal.confirm({
+        content: "确定要删除当前分组下的考生吗?",
+        onOk: async () => {
+          await deleteGradingGroup(this.subjectId, group.id);
+          this.getGroupList();
+          this.$Message.success("删除成功!");
+        }
+      });
+    }
+  }
+};
+</script>

+ 459 - 459
src/modules/main/StudentManage.vue

@@ -1,459 +1,459 @@
-<template>
+<template>
-  <div class="students ">
+  <div class="students ">
-    <div class="part-box-head">
+    <div class="part-box-head">
-      <div class="part-box-head-left">
+      <div class="part-box-head-left">
-        <Button
+        <Button
-          icon="upload icon"
+          icon="upload icon"
-          shape="circle"
+          shape="circle"
-          @click="$refs.ExportStudent.open()"
+          @click="$refs.ExportStudent.open()"
-          >导入考生信息</Button
+          >导入考生信息</Button
-        >
+        >
-        <!-- <Button
+        <!-- <Button
-          icon="upload icon"
+          icon="upload icon"
-          shape="circle"
+          shape="circle"
-          @click="$refs.ExportRelate.open()"
+          @click="$refs.ExportRelate.open()"
-          >导入关联信息</Button
+          >导入关联信息</Button
-        > -->
+        > -->
-      </div>
+      </div>
-      <div class="part-box-head-right">
+      <div class="part-box-head-right">
-        <Button
+        <Button
-          type="success"
+          type="success"
-          icon="recode-white icon"
+          icon="recode-white icon"
-          shape="circle"
+          shape="circle"
-          @click="toAdd"
+          @click="toAdd"
-          >添加考生</Button
+          >添加考生</Button
-        >
+        >
-        <Button
+        <Button
-          shape="circle"
+          shape="circle"
-          type="success"
+          type="success"
-          icon="upload-white icon"
+          icon="upload-white icon"
-          @click="toExport"
+          @click="toExport"
-          >导出表格</Button
+          >导出表格</Button
-        >
+        >
-      </div>
+      </div>
-    </div>
+    </div>
-    <div class="part-box part-box-filter">
+    <div class="part-box part-box-filter">
-      <Form ref="FilterForm" label-position="left" inline>
+      <Form ref="FilterForm" label-position="left" inline>
-        <FormItem>
+        <FormItem>
-          <Select
+          <Select
-            v-model="filter.areaCode"
+            v-model="filter.areaCode"
-            @on-change="areaChange"
+            @on-change="areaChange"
-            placeholder="考区"
+            placeholder="考区"
-            clearable
+            clearable
-          >
+          >
-            <Option
+            <Option
-              v-for="area in cascadeList"
+              v-for="area in cascadeList"
-              :key="area.areaCode"
+              :key="area.areaCode"
-              :value="area.areaCode"
+              :value="area.areaCode"
-              :label="area.areaName"
+              :label="area.areaName"
-            ></Option>
+            ></Option>
-          </Select>
+          </Select>
-        </FormItem>
+        </FormItem>
-        <FormItem>
+        <FormItem>
-          <Select
+          <Select
-            v-model="filter.school"
+            v-model="filter.school"
-            @on-change="schoolChange"
+            @on-change="schoolChange"
-            placeholder="学校"
+            placeholder="学校"
-            filterable
+            filterable
-            clearable
+            clearable
-          >
+          >
-            <Option
+            <Option
-              v-for="(item, index) in schools"
+              v-for="(item, index) in schools"
-              :key="index"
+              :key="index"
-              :value="item.school"
+              :value="item.school"
-              :label="item.school"
+              :label="item.school"
-            ></Option>
+            ></Option>
-          </Select>
+          </Select>
-        </FormItem>
+        </FormItem>
-        <FormItem>
+        <FormItem>
-          <Select v-model="filter.examRoom" placeholder="考场" clearable>
+          <Select v-model="filter.examRoom" placeholder="考场" clearable>
-            <Option
+            <Option
-              v-for="(room, index) in rooms"
+              v-for="(room, index) in rooms"
-              :key="index"
+              :key="index"
-              :value="room"
+              :value="room"
-              :label="room"
+              :label="room"
-            ></Option>
+            ></Option>
-          </Select>
+          </Select>
-        </FormItem>
+        </FormItem>
-        <FormItem>
+        <FormItem>
-          <Input
+          <Input
-            v-model="filter.startNumber"
+            v-model="filter.startNumber"
-            type="text"
+            type="text"
-            placeholder="输入开始编号"
+            placeholder="输入开始编号"
-            clearable
+            clearable
-          />
+          />
-        </FormItem>
+        </FormItem>
-        <FormItem>
+        <FormItem>
-          <Input
+          <Input
-            v-model="filter.endNumber"
+            v-model="filter.endNumber"
-            type="text"
+            type="text"
-            placeholder="输入结束编号"
+            placeholder="输入结束编号"
-            clearable
+            clearable
-          />
+          />
-        </FormItem>
+        </FormItem>
-        <FormItem>
+        <FormItem>
-          <Input
+          <Input
-            v-model.trim="filter.studentName"
+            v-model.trim="filter.studentName"
-            placeholder="输入姓名"
+            placeholder="输入姓名"
-            clearable
+            clearable
-          ></Input>
+          ></Input>
-        </FormItem>
+        </FormItem>
-        <FormItem>
+        <FormItem>
-          <Select v-model="filter.isAbsent" placeholder="是否缺考" clearable>
+          <Select v-model="filter.isAbsent" placeholder="是否缺考" clearable>
-            <Option
+            <Option
-              v-for="(val, key) in BOOLEAN_TYPE"
+              v-for="(val, key) in BOOLEAN_TYPE"
-              :key="key"
+              :key="key"
-              :value="key * 1"
+              :value="key * 1"
-              >{{ val }}</Option
+              >{{ val }}</Option
-            >
+            >
-          </Select>
+          </Select>
-        </FormItem>
+        </FormItem>
-        <FormItem>
+        <FormItem>
-          <Select v-model="filter.upload" placeholder="是否上传" clearable>
+          <Select v-model="filter.upload" placeholder="是否上传" clearable>
-            <Option
+            <Option
-              v-for="(val, key) in PAPER_UPLOAD_TYPE"
+              v-for="(val, key) in PAPER_UPLOAD_TYPE"
-              :key="key"
+              :key="key"
-              :value="key * 1"
+              :value="key * 1"
-              >{{ val }}</Option
+              >{{ val }}</Option
-            >
+            >
-          </Select>
+          </Select>
-        </FormItem>
+        </FormItem>
-        <FormItem>
+        <FormItem>
-          <Select v-model="filter.subject" placeholder="科目" clearable>
+          <Select v-model="filter.subject" placeholder="科目" clearable>
-            <Option
+            <Option
-              v-for="item in subjects"
+              v-for="item in subjects"
-              :key="item.subject"
+              :key="item.subject"
-              :value="item.subject"
+              :value="item.subject"
-              :label="item.name"
+              :label="item.name"
-            ></Option>
+            ></Option>
-          </Select>
+          </Select>
-        </FormItem>
+        </FormItem>
-        <FormItem>
+        <FormItem>
-          <Button
+          <Button
-            size="small"
+            size="small"
-            class="btn-form-search"
+            class="btn-form-search"
-            type="primary"
+            type="primary"
-            @click="toPage(1)"
+            @click="toPage(1)"
-            >查询</Button
+            >查询</Button
-          >
+          >
-        </FormItem>
+        </FormItem>
-      </Form>
+      </Form>
-    </div>
+    </div>
-    <Table
+    <Table
-      ref="TableList"
+      ref="TableList"
-      :columns="columns"
+      :columns="columns"
-      :data="students"
+      :data="students"
-      disabled-hover
+      disabled-hover
-      border
+      border
-    ></Table>
+    ></Table>
-
+
-    <div class="part-page" v-if="total > size">
+    <div class="part-page" v-if="total > size">
-      <Page
+      <Page
-        :current="current"
+        :current="current"
-        :total="total"
+        :total="total"
-        :page-size="size"
+        :page-size="size"
-        show-total
+        show-total
-        show-elevator
+        show-elevator
-        @on-change="toPage"
+        @on-change="toPage"
-      ></Page>
+      ></Page>
-    </div>
+    </div>
-
+
-    <!-- import student  -->
+    <!-- import student  -->
-    <import-file
+    <import-file
-      title="导入考生信息"
+      title="导入考生信息"
-      :upload-url="uploadStudentUrl"
+      :upload-url="uploadStudentUrl"
-      :upload-data="uploadData"
+      :upload-data="uploadData"
-      :download-url="downloadStudentTemplateUrl"
+      :download-url="downloadStudentTemplateUrl"
-      :download-filename="downloadStudentTemplateFilename"
+      :download-filename="downloadStudentTemplateFilename"
-      :headers="headers"
+      :headers="headers"
-      :format="['xls', 'xlsx']"
+      :format="['xls', 'xlsx']"
-      @upload-success="uploadSuccess"
+      @upload-success="uploadSuccess"
-      ref="ExportStudent"
+      ref="ExportStudent"
-    >
+    >
-    </import-file>
+    </import-file>
-    <!-- import-relate -->
+    <!-- import-relate -->
-    <import-file
+    <import-file
-      title="导入关联信息"
+      title="导入关联信息"
-      :upload-url="uploadRelateUrl"
+      :upload-url="uploadRelateUrl"
-      :upload-data="uploadData"
+      :upload-data="uploadData"
-      :download-url="downloadRelateTemplateUrl"
+      :download-url="downloadRelateTemplateUrl"
-      :download-filename="downloadRelateTemplateFilename"
+      :download-filename="downloadRelateTemplateFilename"
-      :headers="headers"
+      :headers="headers"
-      :format="['xls', 'xlsx']"
+      :format="['xls', 'xlsx']"
-      ref="ExportRelate"
+      ref="ExportRelate"
-    >
+    >
-    </import-file>
+    </import-file>
-    <!-- modify-student -->
+    <!-- modify-student -->
-    <modify-student
+    <modify-student
-      :cascade-list="cascadeList"
+      :cascade-list="cascadeList"
-      :instance="curStudent"
+      :instance="curStudent"
-      @modified="getList"
+      @modified="getList"
-      @on-close="getAreaList"
+      @on-close="getAreaList"
-      ref="ModifyStudent"
+      ref="ModifyStudent"
-    ></modify-student>
+    ></modify-student>
-  </div>
+  </div>
-</template>
+</template>
-
+
-<script>
+<script>
-import {
+import {
-  subjectList,
+  subjectList,
-  studentPageList,
+  studentPageList,
-  deleteStudent,
+  deleteStudent,
-  areaSchoolRoomCascadeList
+  areaSchoolRoomCascadeList
-} from "@/api";
+} from "@/api";
-import ImportFile from "@/components/common/ImportFile";
+import ImportFile from "@/components/common/ImportFile";
-import ModifyStudent from "./components/ModifyStudent";
+import ModifyStudent from "./components/ModifyStudent";
-import { BOOLEAN_TYPE, PAPER_UPLOAD_TYPE } from "@/constants/enumerate";
+import { BOOLEAN_TYPE, PAPER_UPLOAD_TYPE } from "@/constants/enumerate";
-import qs from "qs";
+import qs from "qs";
-
+
-export default {
+export default {
-  name: "students",
+  name: "students",
-  components: { ImportFile, ModifyStudent },
+  components: { ImportFile, ModifyStudent },
-  data() {
+  data() {
-    return {
+    return {
-      filter: {
+      filter: {
-        workId: this.$route.params.workId,
+        workId: this.$route.params.workId,
-        subject: null,
+        subject: null,
-        areaCode: null,
+        areaCode: null,
-        school: "",
+        school: "",
-        examRoom: "",
+        examRoom: "",
-        startNumber: null,
+        startNumber: null,
-        endNumber: null,
+        endNumber: null,
-        studentName: "",
+        studentName: "",
-        upload: null,
+        upload: null,
-        isAbsent: null
+        isAbsent: null
-      },
+      },
-      current: 1,
+      current: 1,
-      size: this.GLOBAL.pageSize,
+      size: this.GLOBAL.pageSize,
-      total: 0,
+      total: 0,
-      students: [],
+      students: [],
-      curStudent: {},
+      curStudent: {},
-      subjects: [],
+      subjects: [],
-      cascadeList: [],
+      cascadeList: [],
-      schools: [],
+      schools: [],
-      rooms: [],
+      rooms: [],
-      BOOLEAN_TYPE,
+      BOOLEAN_TYPE,
-      PAPER_UPLOAD_TYPE,
+      PAPER_UPLOAD_TYPE,
-      columns: [
+      columns: [
-        {
+        {
-          type: "index",
+          type: "index",
-          title: "序号",
+          title: "序号",
-          width: 80,
+          width: 80,
-          align: "center",
+          align: "center",
-          indexMethod: row => {
+          indexMethod: row => {
-            return (this.current - 1) * this.size + row._index + 1;
+            return (this.current - 1) * this.size + row._index + 1;
-          }
+          }
-        },
+        },
-        {
+        {
-          title: "姓名",
+          title: "姓名",
-          key: "name",
+          key: "name",
-          width: 100
+          width: 100
-        },
+        },
-        {
+        {
-          title: "考号",
+          title: "考号",
-          key: "examNumber",
+          key: "examNumber",
-          minWidth: 120
+          minWidth: 120
-        },
+        },
-        // {
+        // {
-        //   title: "关联考号",
+        //   title: "关联考号",
-        //   key: "relateExamNumber",
+        //   key: "relateExamNumber",
-        //   minWidth: 120
+        //   minWidth: 120
-        // },
+        // },
-        {
+        {
-          title: "考区",
+          title: "考区",
-          key: "areaName",
+          key: "areaName",
-          minWidth: 120
+          minWidth: 120
-        },
+        },
-        {
+        {
-          title: "学校",
+          title: "学校",
-          key: "school",
+          key: "school",
-          minWidth: 150
+          minWidth: 150
-        },
+        },
-        {
+        {
-          title: "考场",
+          title: "考场",
-          key: "examRoom",
+          key: "examRoom",
-          minWidth: 100
+          minWidth: 100
-        },
+        },
-        {
+        {
-          title: "操作",
+          title: "操作",
-          key: "action",
+          key: "action",
-          width: 100,
+          width: 100,
-          align: "center",
+          align: "center",
-          className: "table-action",
+          className: "table-action",
-          render: (h, param) => {
+          render: (h, param) => {
-            let actions = [];
+            let actions = [];
-
+
-            if (param.row.canEdit) {
+            if (param.row.canEdit) {
-              actions.push({
+              actions.push({
-                icon: "md-create",
+                icon: "md-create",
-                attrs: {
+                attrs: {
-                  title: "编辑"
+                  title: "编辑"
-                },
+                },
-                action: () => {
+                action: () => {
-                  this.toEdit(param.row);
+                  this.toEdit(param.row);
-                }
+                }
-              });
+              });
-            }
+            }
-            if (param.row.canDelete) {
+            if (param.row.canDelete) {
-              actions.push({
+              actions.push({
-                icon: "md-trash",
+                icon: "md-trash",
-                classes: ["icon-danger"],
+                classes: ["icon-danger"],
-                attrs: {
+                attrs: {
-                  title: "删除"
+                  title: "删除"
-                },
+                },
-                action: () => {
+                action: () => {
-                  this.toDelete(param.row);
+                  this.toDelete(param.row);
-                }
+                }
-              });
+              });
-            }
+            }
-
+
-            return h("div", this.$tableIconAction(h, actions));
+            return h("div", this.$tableIconAction(h, actions));
-          }
+          }
-        }
+        }
-      ],
+      ],
-      // upload
+      // upload
-      headers: {
+      headers: {
-        Authorization: this.$ls.get("user", { token: "" }).token,
+        Authorization: this.$ls.get("user", { token: "" }).token,
-        workId: this.$route.params.workId,
+        workId: this.$route.params.workId,
-        userId: this.$ls.get("user", { id: "" }).id
+        userId: this.$ls.get("user", { id: "" }).id
-      },
+      },
-      uploadData: {
+      uploadData: {
-        workId: this.$route.params.workId
+        workId: this.$route.params.workId
-      },
+      },
-      uploadStudentUrl: this.GLOBAL.domain + "/api/import/students",
+      uploadStudentUrl: this.GLOBAL.domain + "/api/import/students",
-      downloadStudentTemplateUrl: "/templates/考生信息表-模板.xlsx",
+      downloadStudentTemplateUrl: "/templates/考生信息表-模板.xlsx",
-      downloadStudentTemplateFilename: "考生信息表-模板.xlsx",
+      downloadStudentTemplateFilename: "考生信息表-模板.xlsx",
-      uploadRelateUrl: "/api/import/students/relateStudent",
+      uploadRelateUrl: "/api/import/students/relateStudent",
-      downloadRelateTemplateUrl: "/templates/关联考生信息表-模板.xlsx",
+      downloadRelateTemplateUrl: "/templates/关联考生信息表-模板.xlsx",
-      downloadRelateTemplateFilename: "关联考生信息表-模板.xlsx"
+      downloadRelateTemplateFilename: "关联考生信息表-模板.xlsx"
-    };
+    };
-  },
+  },
-  mounted() {
+  mounted() {
-    this.iniData();
+    this.iniData();
-  },
+  },
-  methods: {
+  methods: {
-    async iniData() {
+    async iniData() {
-      await this.getSubjects();
+      await this.getSubjects();
-      this.getAreaList();
+      this.getAreaList();
-      this.getList();
+      this.getList();
-    },
+    },
-    async getList() {
+    async getList() {
-      const datas = {
+      const datas = {
-        ...this.filter,
+        ...this.filter,
-        page: this.current - 1,
+        page: this.current - 1,
-        size: this.size
+        size: this.size
-      };
+      };
-      // if (
+      // if (
-      //   ((datas.upload || datas.upload === 0) && !datas.subject) ||
+      //   ((datas.upload || datas.upload === 0) && !datas.subject) ||
-      //   (!datas.upload && datas.upload !== 0 && datas.subject)
+      //   (!datas.upload && datas.upload !== 0 && datas.subject)
-      // ) {
+      // ) {
-      //   this.$Message.error("上传状态和科目必须同时选择!");
+      //   this.$Message.error("上传状态和科目必须同时选择!");
-      //   return;
+      //   return;
-      // }
+      // }
-      // if (datas.subject === "ONE") datas.subject = null;
+      // if (datas.subject === "ONE") datas.subject = null;
-      const data = await studentPageList(datas);
+      const data = await studentPageList(datas);
-      this.students = data.data.map(student => {
+      this.students = data.data.map(student => {
-        student.uploadStatus.split(",").map(status => {
+        student.uploadStatus.split(",").map(status => {
-          const [subjectCode, subjectUploadStatus] = status.split(":");
+          const [subjectCode, subjectUploadStatus] = status.split(":");
-          student[subjectCode] = subjectUploadStatus * 1;
+          student[subjectCode] = subjectUploadStatus * 1;
-        });
+        });
-        student.canEdit = student.uploadStatus.includes("0");
+        student.canEdit = student.uploadStatus.includes("0");
-        student.canDelete = !student.uploadStatus.includes("1");
+        student.canDelete = !student.uploadStatus.includes("1");
-        student.uploadStatus.split(",").map(status => {
+        student.uploadStatus.split(",").map(status => {
-          const [subject, hasScan] = status.split(":");
+          const [subject, hasScan] = status.split(":");
-          student[subject] = hasScan;
+          student[subject] = hasScan;
-        });
+        });
-        student.workId = this.filter.workId;
+        student.workId = this.filter.workId;
-        student.relateExamNumber =
+        student.relateExamNumber =
-          student.relateExamNumber === student.examNumber
+          student.relateExamNumber === student.examNumber
-            ? "--"
+            ? "--"
-            : student.relateExamNumber;
+            : student.relateExamNumber;
-        return student;
+        return student;
-      });
+      });
-      this.total = data.totalCount;
+      this.total = data.totalCount;
-    },
+    },
-    toPage(page) {
+    toPage(page) {
-      this.current = page;
+      this.current = page;
-      this.getList();
+      this.getList();
-    },
+    },
-    async getAreaList() {
+    async getAreaList() {
-      this.cascadeList = await areaSchoolRoomCascadeList(this.filter.workId);
+      this.cascadeList = await areaSchoolRoomCascadeList(this.filter.workId);
-    },
+    },
-    async getSubjects() {
+    async getSubjects() {
-      const data = await subjectList(this.filter.workId);
+      const data = await subjectList(this.filter.workId);
-      this.subjects = data.filter(item => item.enable);
+      this.subjects = data.filter(item => item.enable);
-      this.subjects.map(item => {
+      this.subjects.map(item => {
-        const column = {
+        const column = {
-          title: item.name,
+          title: item.name,
-          key: item.subject,
+          key: item.subject,
-          minWidth: 80
+          minWidth: 80
-        };
+        };
-        this.columns.splice(this.columns.length - 1, 0, column);
+        this.columns.splice(this.columns.length - 1, 0, column);
-      });
+      });
-      this.subjects.unshift({
+      this.subjects.unshift({
-        subject: "ONE",
+        subject: "ONE",
-        name: "查漏"
+        name: "查漏"
-      });
+      });
-    },
+    },
-    areaChange() {
+    areaChange() {
-      const curArea = this.cascadeList.find(
+      const curArea = this.cascadeList.find(
-        item => item.areaCode === this.filter.areaCode
+        item => item.areaCode === this.filter.areaCode
-      );
+      );
-      this.schools = curArea ? curArea.schools : [];
+      this.schools = curArea ? curArea.schools : [];
-      this.rooms = [];
+      this.rooms = [];
-      this.filter.school = null;
+      this.filter.school = null;
-      this.filter.examRoom = null;
+      this.filter.examRoom = null;
-      if (curArea.schools.length === 1) {
+      if (curArea.schools.length === 1) {
-        this.filter.school = curArea.schools[0].school;
+        this.filter.school = curArea.schools[0].school;
-        this.schoolChange();
+        this.schoolChange();
-      }
+      }
-    },
+    },
-    schoolChange() {
+    schoolChange() {
-      const curSchool = this.schools.find(
+      const curSchool = this.schools.find(
-        item => item.school === this.filter.school
+        item => item.school === this.filter.school
-      );
+      );
-      this.rooms = curSchool ? curSchool.rooms : [];
+      this.rooms = curSchool ? curSchool.rooms : [];
-      this.filter.examRoom = null;
+      this.filter.examRoom = null;
-    },
+    },
-    uploadSuccess() {
+    uploadSuccess() {
-      this.getList();
+      this.getList();
-      this.getAreaList();
+      this.getAreaList();
-      this.$Notice.success({
+      this.$Notice.success({
-        title: "导入提示",
+        title: "导入提示",
-        desc: "考生信息导入成功!",
+        desc: "考生信息导入成功!",
-        duration: 0
+        duration: 0
-      });
+      });
-    },
+    },
-    toAdd() {
+    toAdd() {
-      this.curStudent = { workId: this.filter.workId };
+      this.curStudent = { workId: this.filter.workId };
-      this.$refs.ModifyStudent.open();
+      this.$refs.ModifyStudent.open();
-    },
+    },
-    toEdit(row) {
+    toEdit(row) {
-      this.curStudent = row;
+      this.curStudent = row;
-      this.$refs.ModifyStudent.open();
+      this.$refs.ModifyStudent.open();
-    },
+    },
-    toDelete(row) {
+    toDelete(row) {
-      this.$Modal.confirm({
+      this.$Modal.confirm({
-        width: 340,
+        width: 340,
-        content: "确定要删除该考生吗?",
+        content: "确定要删除该考生吗?",
-        onOk: () => {
+        onOk: () => {
-          this.toDel(row.id);
+          this.toDel(row.id);
-        }
+        }
-      });
+      });
-    },
+    },
-    async toDel(id) {
+    async toDel(id) {
-      await deleteStudent(id);
+      await deleteStudent(id);
-      this.$Message.success("删除成功!");
+      this.$Message.success("删除成功!");
-      this.deletePageLastItem();
+      this.deletePageLastItem();
-    },
+    },
-    toExport() {
+    toExport() {
-      const sqDatas = qs.stringify(this.filter, {
+      const sqDatas = qs.stringify(this.filter, {
-        arrayFormat: "brackets"
+        arrayFormat: "brackets"
-      });
+      });
-      window.open(
+      window.open(
-        this.urlAddAuthor(`${this.GLOBAL.domain}/api/export/student?${sqDatas}`)
+        this.urlAddAuthor(`${this.GLOBAL.domain}/api/export/student?${sqDatas}`)
-      );
+      );
-    }
+    }
-  }
+  }
-};
+};
-</script>
+</script>

+ 137 - 117
src/modules/mark-set/MarkRuleSet.vue

@@ -1,117 +1,137 @@
-<template>
+<template>
-  <div class="mark-rule-set part-box">
+  <div class="mark-rule-set part-box">
-    <Form
+    <Form
-      ref="modalFormComp"
+      ref="modalFormComp"
-      :model="modalForm"
+      :model="modalForm"
-      :label-width="230"
+      :label-width="230"
-      style="width: 400px"
+      style="width: 400px"
-    >
+    >
-      <FormItem label="分数处理方式:">
+      <FormItem label="分数计算方式:">
-        <Select
+        <Select
-          v-model="modalForm.roundUp"
+          v-model="modalForm.calcType"
-          :disabled="!modalFormCanEdit"
+          :disabled="!modalFormCanEdit"
-          placeholder="选择"
+          placeholder="选择"
-        >
+        >
-          <Option
+          <Option
-            v-for="(val, key) in SCORE_HANDLE_TYPE"
+            v-for="(val, key) in SCORE_CALC_TYPE"
-            :key="key"
+            :key="key"
-            :value="key * 1"
+            :value="key * 1"
-            >{{ val }}</Option
+            >{{ val }}</Option
-          >
+          >
-        </Select>
+        </Select>
-      </FormItem>
+      </FormItem>
-      <FormItem label="阅卷员是否显示改档及改档打分:">
+      <FormItem label="分数处理方式:">
-        <Select
+        <Select
-          v-model="modalForm.changeStage"
+          v-model="modalForm.roundUp"
-          :disabled="!modalFormCanEdit"
+          :disabled="!modalFormCanEdit"
-          placeholder="选择"
+          placeholder="选择"
-        >
+        >
-          <Option
+          <Option
-            v-for="(val, key) in BOOLEAN_TYPE"
+            v-for="(val, key) in SCORE_HANDLE_TYPE"
-            :key="key"
+            :key="key"
-            :value="key * 1"
+            :value="key * 1"
-            :label="val"
+            >{{ val }}</Option
-          ></Option>
+          >
-        </Select>
+        </Select>
-      </FormItem>
+      </FormItem>
-      <FormItem label="阅卷员是否显示所有试卷:">
+      <FormItem label="阅卷员是否显示改档及改档打分:">
-        <Select
+        <Select
-          v-model="modalForm.scoreShowAllPaper"
+          v-model="modalForm.changeStage"
-          :disabled="!modalFormCanEdit"
+          :disabled="!modalFormCanEdit"
-          placeholder="选择"
+          placeholder="选择"
-        >
+        >
-          <Option
+          <Option
-            v-for="(val, key) in BOOLEAN_TYPE"
+            v-for="(val, key) in BOOLEAN_TYPE"
-            :key="key"
+            :key="key"
-            :value="key * 1"
+            :value="key * 1"
-            :label="val"
+            :label="val"
-          ></Option>
+          ></Option>
-        </Select>
+        </Select>
-      </FormItem>
+      </FormItem>
-      <FormItem>
+      <FormItem label="阅卷员是否显示所有试卷:">
-        <Button
+        <Select
-          shape="circle"
+          v-model="modalForm.scoreShowAllPaper"
-          style="width: 80px;"
+          :disabled="!modalFormCanEdit"
-          @click="modalFormCanEdit = true"
+          placeholder="选择"
-          >编辑</Button
+        >
-        >
+          <Option
-        <Button
+            v-for="(val, key) in BOOLEAN_TYPE"
-          type="primary"
+            :key="key"
-          shape="circle"
+            :value="key * 1"
-          style="width: 80px;"
+            :label="val"
-          :disabled="isSubmit"
+          ></Option>
-          @click="submit"
+        </Select>
-          >保存</Button
+      </FormItem>
-        >
+      <FormItem>
-      </FormItem>
+        <Button
-    </Form>
+          shape="circle"
-  </div>
+          style="width: 80px;"
-</template>
+          @click="modalFormCanEdit = true"
-
+          >编辑</Button
-<script>
+        >
-import { getParamsSet, updateScoreParams } from "@/api";
+        <Button
-import { BOOLEAN_TYPE, SCORE_HANDLE_TYPE } from "@/constants/enumerate";
+          type="primary"
-
+          shape="circle"
-export default {
+          style="width: 80px;"
-  name: "mark-rule-set",
+          :disabled="isSubmit"
-  data() {
+          @click="submit"
-    return {
+          >保存</Button
-      isSubmit: false,
+        >
-      workId: this.$route.params.workId,
+      </FormItem>
-      BOOLEAN_TYPE,
+    </Form>
-      SCORE_HANDLE_TYPE,
+  </div>
-      initModalForm: {
+</template>
-        workId: "",
+
-        roundUp: 0,
+<script>
-        changeStage: 0,
+import { getParamsSet, updateScoreParams } from "@/api";
-        scoreShowAllPaper: 0
+import {
-      },
+  BOOLEAN_TYPE,
-      modalFormCanEdit: false,
+  SCORE_HANDLE_TYPE,
-      modalForm: {}
+  SCORE_CALC_TYPE
-    };
+} from "@/constants/enumerate";
-  },
+
-  mounted() {
+export default {
-    this.modalForm = { ...this.initModalForm };
+  name: "mark-rule-set",
-    this.getParamsSetInfo();
+  data() {
-  },
+    return {
-  methods: {
+      isSubmit: false,
-    async getParamsSetInfo() {
+      workId: this.$route.params.workId,
-      const data = await getParamsSet(this.workId);
+      BOOLEAN_TYPE,
-      this.modalForm = this.$objAssign(this.modalForm, data);
+      SCORE_HANDLE_TYPE,
-    },
+      SCORE_CALC_TYPE,
-    async submit() {
+      initModalForm: {
-      if (this.isSubmit) return;
+        workId: "",
-      this.isSubmit = true;
+        calcType: 0,
-      let result = true;
+        roundUp: 0,
-      await updateScoreParams(this.modalForm).catch(() => {
+        changeStage: 0,
-        result = false;
+        scoreShowAllPaper: 0
-      });
+      },
-      this.isSubmit = false;
+      modalFormCanEdit: false,
-
+      modalForm: {}
-      if (!result) return;
+    };
-      this.modalFormCanEdit = false;
+  },
-      this.$Message.success("保存成功!");
+  mounted() {
-    }
+    this.modalForm = { ...this.initModalForm };
-  }
+    this.getParamsSetInfo();
-};
+  },
-</script>
+  methods: {
+    async getParamsSetInfo() {
+      const data = await getParamsSet(this.workId);
+      this.modalForm = this.$objAssign(this.modalForm, data);
+    },
+    async submit() {
+      if (this.isSubmit) return;
+      this.isSubmit = true;
+      let result = true;
+      await updateScoreParams(this.modalForm).catch(() => {
+        result = false;
+      });
+      this.isSubmit = false;
+
+      if (!result) return;
+      this.modalFormCanEdit = false;
+      this.$Message.success("保存成功!");
+    }
+  }
+};
+</script>