Ver código fonte

分析批次管理接口调试完毕

zhangjie 3 anos atrás
pai
commit
25c60db2b6

+ 653 - 644
src/assets/styles/element-ui-costom.scss

@@ -1,644 +1,653 @@
-/*
-* element-ui不管是自行构建的主题还是动态设置的主题,
-* 产生的css文件中存在近乎1/3的冗余样式,过于累赘,不如直接覆盖样式简洁。
-*/
-// dialog
-.el-dialog {
-  border-radius: 8px;
-  overflow: hidden;
-  border: 1px solid #c8c8ca;
-  box-shadow: 5px 5px 4px 0px rgba(0, 0, 0, 0.1);
-
-  &.is-fullscreen {
-    border-radius: 0;
-
-    .el-dialog__header {
-      width: 100%;
-      position: fixed;
-      z-index: 9;
-      background-color: #fff;
-      border-bottom: 1px solid $--color-border;
-    }
-    .el-dialog__body {
-      padding-top: 90px;
-    }
-  }
-}
-.el-dialog__header {
-  padding: 15px 20px;
-  .el-dialog__title {
-    color: $--color-text-dark;
-    font-size: 16px;
-    line-height: 19px;
-  }
-  .el-dialog__headerbtn {
-    top: 15px;
-    width: 16px;
-    height: 16px;
-    background-image: url(../images/icon-close.png);
-    background-repeat: no-repeat;
-    background-size: 100% 100%;
-
-    &:hover {
-      background-image: url(../images/icon-close-act.png);
-    }
-
-    .el-dialog__close {
-      display: none;
-    }
-  }
-}
-.el-dialog__body {
-  padding: 30px 40px;
-  position: relative;
-  border-top: 1px solid $--color-border;
-  color: $--color-text-dark-1;
-
-  .el-form-item__label {
-    padding-right: 2px;
-  }
-  .el-input-tips {
-    color: rgba(187, 187, 187, 1);
-    margin-left: 13px;
-  }
-}
-.el-dialog__footer {
-  overflow: hidden;
-  .el-button {
-    width: 100px;
-    border-radius: 8px;
-    float: right;
-    margin-left: 10px;
-  }
-}
-//
-.page-dialog {
-  .el-dialog.is-fullscreen {
-    background: $--color-background;
-    .el-dialog__body {
-      padding: 70px 20px 20px;
-    }
-  }
-}
-
-// .opacity-dialog
-.opacity-dialog {
-  .el-dialog {
-    background-color: transparent;
-  }
-  .el-dialog__header,
-  .el-dialog__footer {
-    display: none;
-  }
-  .el-dialog__body {
-    position: absolute;
-    width: 100%;
-    height: 100%;
-    top: 0;
-    left: 0;
-    padding: 0;
-    background-color: transparent;
-  }
-}
-
-// form
-.el-form {
-  &-item {
-    &__error {
-      font-size: 12px;
-      color: rgba(254, 108, 105, 1);
-    }
-    &__content {
-      .el-table {
-        line-height: 1;
-      }
-    }
-  }
-  // form-info
-  &.form-info {
-    .el-form-item {
-      margin-bottom: 0;
-
-      .el-form-item__label {
-        color: $--color-text-gray-2;
-      }
-    }
-  }
-  &--label-top {
-    .el-form-item__label {
-      line-height: 20px;
-      padding-bottom: 5px;
-      font-size: 12px;
-    }
-  }
-}
-// input
-.el-input {
-  &.is-focus {
-    .el-input__inner {
-      border-color: $--color-primary !important;
-    }
-  }
-  &.is-disabled {
-    .el-input__inner {
-      color: $--color-text-gray-2;
-    }
-  }
-  .el-input__inner {
-    border-radius: 8px;
-    border-color: #ddd;
-    background-color: #fff;
-  }
-  // .el-input__suffix {
-  //   right: 0;
-  //   border-left: 1px solid #ddd;
-  // }
-}
-// textarea
-.el-textarea {
-  &.is-disabled {
-    .el-textarea__inner {
-      color: $--color-text-gray-2;
-    }
-  }
-}
-.el-select {
-  .el-input__suffix {
-    right: 0;
-    border-left: 1px solid #ddd;
-  }
-  .el-input {
-    .el-select__caret {
-      width: 30px;
-    }
-    .el-icon-arrow-up:before {
-      font-size: 12px;
-      content: "\e78f";
-    }
-  }
-}
-.el-select-dropdown {
-  &.popper-filter {
-    .el-scrollbar {
-      display: block !important;
-      padding-top: 52px;
-    }
-    .el-select-filter {
-      padding: 0 10px;
-      position: absolute;
-      width: 100%;
-      top: 10px;
-      left: 0;
-      z-index: 9;
-    }
-  }
-}
-// upload
-.el-upload,
-.el-upload-dragger {
-  width: 100%;
-}
-// radio
-.el-radio-button {
-  &:not(.is-disabled):hover {
-    .el-radio-button__inner {
-      color: $--color-primary;
-    }
-  }
-
-  &.is-active {
-    .el-radio-button__inner {
-      color: $--color-white !important;
-      border-color: $--color-primary !important;
-      background: $--color-primary !important;
-    }
-  }
-}
-// button
-.el-button {
-  border-radius: $--border-radius;
-
-  > .icon {
-    margin-right: 5px;
-  }
-  > span {
-    display: inline-block;
-  }
-  &.is-disabled:not(.el-button--text) {
-    color: $--color-text-gray-3 !important;
-    background: $--color-background !important;
-    border: 1px solid $--color-border !important;
-  }
-}
-
-.el-button + .popover-button,
-.popover-button + .el-button {
-  margin-left: 10px;
-}
-.el-button + .el-button {
-  margin-left: 10px;
-}
-.el-button--text + .el-button--text {
-  margin-left: 5px;
-}
-.el-button--small {
-  padding-top: 8px;
-  padding-bottom: 8px;
-  font-size: 12px;
-}
-.el-button--text {
-  color: $--color-text-gray-2;
-
-  & + .el-button--text {
-    margin-left: 10px;
-  }
-}
-.el-button--info {
-  background-color: $--color-cyan;
-  border-color: $--color-cyan;
-
-  &:hover,
-  &:focus {
-    background-color: $--color-cyan-light;
-    border-color: $--color-cyan-light;
-  }
-}
-.el-button--primary {
-  background-color: $--color-primary;
-  border-color: $--color-primary;
-
-  &:hover,
-  &:focus {
-    background-color: $--color-primary-light;
-    border-color: $--color-primary-light;
-  }
-}
-.el-button--success {
-  background-color: $--color-success;
-  border-color: $--color-success;
-
-  &:hover,
-  &:focus {
-    background-color: $--color-success-light;
-    border-color: $--color-success-light;
-  }
-}
-
-// table
-.el-table {
-  color: $--color-text-dark-1;
-
-  thead th {
-    color: $--color-text-gray-2;
-  }
-
-  thead.is-group th {
-    background-color: $--color-white;
-  }
-
-  tr.el-table__row {
-    color: $--color-text-dark;
-  }
-  td,
-  th {
-    border-color: $--color-border !important;
-    padding: 14px 0;
-    font-weight: 500;
-  }
-  .el-table__row.row-danger {
-    color: $--color-danger;
-  }
-  &.el-table--noback {
-    tr.el-table__row {
-      background-color: $--color-white;
-    }
-  }
-
-  .cell-head {
-    display: inline-block;
-    vertical-align: middle;
-    line-height: 1.3;
-  }
-  // caret-wrapper
-  .caret-wrapper {
-    width: 20px;
-    height: 20px;
-    top: -1px;
-    .sort-caret {
-      &.ascending {
-        top: -1px;
-      }
-      &.descending {
-        bottom: -1px;
-      }
-    }
-  }
-  // action-column
-  td.action-column {
-    padding-left: 10px;
-    padding-right: 10px;
-    .cell {
-      padding: 0;
-      margin: 0 -5px;
-    }
-    .el-button--text {
-      padding: 0;
-      margin: 0 5px;
-      border: none !important;
-      outline: none !important;
-      &:not(.is-disabled):hover {
-        transform: scale(1.1);
-      }
-    }
-  }
-}
-.el-table--border {
-  border-radius: 10px;
-  th {
-    padding: 12px 0;
-    background-color: #fcfcfd;
-    border-right: none;
-  }
-  td {
-    border-right: none;
-  }
-}
-// el-checkbox
-.el-checkbox {
-  .el-checkbox__label {
-    color: $--color-text-gray-2 !important;
-  }
-  .el-checkbox__inner::after {
-    border-width: 2px;
-  }
-}
-.el-checkbox__input.is-checked .el-checkbox__inner {
-  background-color: $--color-white;
-  border-color: $--color-primary;
-
-  &::after {
-    border-color: $--color-primary;
-  }
-}
-.el-checkbox__input.is-indeterminate .el-checkbox__inner {
-  background-color: $--color-white;
-  border-color: $--color-primary;
-  &::before {
-    background-color: $--color-primary;
-  }
-}
-
-.el-radio {
-  .el-radio__label {
-    color: $--color-text-gray-2 !important;
-  }
-}
-.el-radio__input.is-checked .el-radio__inner {
-  background-color: $--color-white;
-  border-color: $--color-primary;
-  &::after {
-    width: 6px;
-    height: 6px;
-    background-color: $--color-primary;
-  }
-}
-
-// el-switch
-.el-switch {
-  &.is-checked {
-    .el-switch__core {
-      background-color: $--color-primary;
-      border-color: $--color-primary;
-    }
-  }
-}
-
-// el-pagination
-.el-pagination-li {
-  min-width: 32px;
-  height: 32px;
-  border-radius: 8px;
-  overflow: hidden;
-  background-color: $--color-white;
-  border: 1px solid #e1e3eb;
-}
-.el-pagination {
-  padding: 0;
-  .el-pagination__total {
-    float: left;
-  }
-  span:not([class*="suffix"]) {
-    line-height: 32px;
-    height: 32px;
-  }
-  &.is-background {
-    .btn-prev,
-    .btn-next {
-      color: $--color-text-gray-2;
-      margin: 0 5px;
-      @extend .el-pagination-li;
-    }
-    .btn-prev:disabled,
-    .btn-next:disabled {
-      opacity: 0.7;
-    }
-
-    .el-pager li {
-      color: $--color-text-gray-2;
-      margin: 0 5px;
-      padding: 0 8px;
-      line-height: 32px;
-
-      @extend .el-pagination-li;
-      &:not(.disabled).active {
-        color: #fff;
-        background-color: $--color-primary;
-      }
-    }
-  }
-}
-// el-message-box
-.el-message-box {
-  width: 320px;
-  background-color: #f6f6f6;
-  border-radius: 10px;
-  &__title {
-    display: none;
-  }
-  &__headerbtn {
-    display: none;
-  }
-  &__content {
-    text-align: center;
-
-    .el-message-box__status {
-      position: relative;
-      top: 0;
-      height: 48px;
-      width: 48px;
-      transform: none;
-      margin-bottom: 10px;
-
-      &.el-icon-warning {
-        border-radius: 50%;
-        &::before {
-          content: "";
-          position: absolute;
-          top: 0;
-          left: 0;
-          width: 100%;
-          height: 100%;
-          background-image: url(../images/icon-doubt.png);
-          background-repeat: no-repeat;
-          background-size: 100% 100%;
-        }
-      }
-    }
-    .el-message-box__message {
-      padding: 0;
-    }
-  }
-  &__btns {
-    height: 75px;
-    padding: 30px 20px 10px;
-    text-align: center;
-
-    > .el-button {
-      width: 100px;
-    }
-  }
-}
-
-.alert-message {
-  .el-message-box__btns {
-    text-align: center;
-    > .el-button {
-      position: relative;
-      left: auto;
-      top: 0;
-      margin: 0;
-    }
-  }
-}
-// .el-message
-.el-message {
-  .el-message__content {
-    word-wrap: break-word;
-    max-width: 600px;
-    line-height: 1.4;
-  }
-}
-.el-message-loading {
-  border-color: mix($--color-white, $--color-success, 80%);
-  background-color: mix($--color-white, $--color-success, 90%);
-}
-// el-date-editor
-.el-date-editor {
-  border-radius: 8px;
-  .el-range-separator {
-    width: auto;
-  }
-  .el-range-input {
-    background-color: transparent;
-  }
-}
-
-// el-step
-.el-step {
-  &__title.is-success,
-  &__description.is-success,
-  &__title.is-process,
-  &__description.is-process {
-    color: $--color-success;
-  }
-  &__title.is-process {
-    font-weight: normal;
-  }
-  &__head.is-success {
-    .el-step__line {
-      background-color: $--color-success;
-    }
-    .el-step__icon.is-text {
-      color: $--color-white;
-      border-color: $--color-success;
-      background-color: $--color-success;
-    }
-  }
-  &__head.is-process {
-    .el-step__icon.is-text {
-      color: $--color-success;
-      border-color: $--color-success;
-    }
-  }
-
-  &__title.is-wait,
-  &__description.is-wait {
-    color: $--color-text-gray-2;
-  }
-  &__head.is-wait {
-    .el-step__icon.is-text {
-      color: $--color-text-gray-2;
-      border-color: #e1e3eb;
-      background-color: #e1e3eb;
-    }
-  }
-}
-// el-popover
-.el-popper-dark {
-  background-color: $--color-text-dark-1;
-  color: #fff;
-  font-size: 12px;
-  line-height: 18px;
-  padding: 16px;
-  border: none;
-}
-.el-popper-dark {
-  box-shadow: 0px 10px 10px 0px rgba(54, 61, 89, 0.2);
-}
-.el-popper-dark[x-placement^="right"] .popper__arrow {
-  border-right-color: $--color-text-dark-1;
-
-  &::after {
-    border-right-color: $--color-text-dark-1;
-  }
-}
-.el-popper-dark[x-placement^="top"] .popper__arrow {
-  border-top-color: $--color-text-dark-1;
-
-  &::after {
-    border-top-color: $--color-text-dark-1;
-  }
-}
-.el-popper-dark[x-placement^="bottom"] .popper__arrow {
-  border-bottom-color: $--color-text-dark-1;
-
-  &::after {
-    border-bottom-color: $--color-text-dark-1;
-  }
-}
-.el-popper-dark[x-placement^="left"] .popper__arrow {
-  border-left-color: $--color-text-dark-1;
-
-  &::after {
-    border-left-color: $--color-text-dark-1;
-  }
-}
-// popper-list
-.popper-list {
-  min-width: auto;
-
-  .el-button {
-    display: block;
-    width: 100%;
-    margin: 0;
-    &:not(:last-child) {
-      margin-bottom: 5px;
-    }
-  }
-}
-// .el-tag
-.el-tag {
-  &.tag-spin {
-    margin: 3px;
-  }
-}
+/*
+* element-ui不管是自行构建的主题还是动态设置的主题,
+* 产生的css文件中存在近乎1/3的冗余样式,过于累赘,不如直接覆盖样式简洁。
+*/
+// dialog
+.el-dialog {
+  border-radius: 8px;
+  overflow: hidden;
+  border: 1px solid #c8c8ca;
+  box-shadow: 5px 5px 4px 0px rgba(0, 0, 0, 0.1);
+
+  &.is-fullscreen {
+    border-radius: 0;
+
+    .el-dialog__header {
+      width: 100%;
+      position: fixed;
+      z-index: 9;
+      background-color: #fff;
+      border-bottom: 1px solid $--color-border;
+    }
+    .el-dialog__body {
+      padding-top: 90px;
+    }
+  }
+}
+.el-dialog__header {
+  padding: 15px 20px;
+  .el-dialog__title {
+    color: $--color-text-dark;
+    font-size: 16px;
+    line-height: 19px;
+  }
+  .el-dialog__headerbtn {
+    top: 15px;
+    width: 16px;
+    height: 16px;
+    background-image: url(../images/icon-close.png);
+    background-repeat: no-repeat;
+    background-size: 100% 100%;
+
+    &:hover {
+      background-image: url(../images/icon-close-act.png);
+    }
+
+    .el-dialog__close {
+      display: none;
+    }
+  }
+}
+.el-dialog__body {
+  padding: 30px 40px;
+  position: relative;
+  border-top: 1px solid $--color-border;
+  color: $--color-text-dark-1;
+
+  .el-form-item__label {
+    padding-right: 2px;
+  }
+  .el-input-tips {
+    color: rgba(187, 187, 187, 1);
+    margin-left: 13px;
+  }
+}
+.el-dialog__footer {
+  overflow: hidden;
+  .el-button {
+    width: 100px;
+    border-radius: 8px;
+    float: right;
+    margin-left: 10px;
+  }
+}
+//
+.page-dialog {
+  .el-dialog.is-fullscreen {
+    background: $--color-background;
+    .el-dialog__body {
+      padding: 70px 20px 20px;
+    }
+  }
+  .el-dialog {
+    background: $--color-background;
+    .el-dialog__body {
+      padding: 20px;
+    }
+    .el-dialog__header {
+      background-color: #fff;
+    }
+  }
+}
+
+// .opacity-dialog
+.opacity-dialog {
+  .el-dialog {
+    background-color: transparent;
+  }
+  .el-dialog__header,
+  .el-dialog__footer {
+    display: none;
+  }
+  .el-dialog__body {
+    position: absolute;
+    width: 100%;
+    height: 100%;
+    top: 0;
+    left: 0;
+    padding: 0;
+    background-color: transparent;
+  }
+}
+
+// form
+.el-form {
+  &-item {
+    &__error {
+      font-size: 12px;
+      color: rgba(254, 108, 105, 1);
+    }
+    &__content {
+      .el-table {
+        line-height: 1;
+      }
+    }
+  }
+  // form-info
+  &.form-info {
+    .el-form-item {
+      margin-bottom: 0;
+
+      .el-form-item__label {
+        color: $--color-text-gray-2;
+      }
+    }
+  }
+  &--label-top {
+    .el-form-item__label {
+      line-height: 20px;
+      padding-bottom: 5px;
+      font-size: 12px;
+    }
+  }
+}
+// input
+.el-input {
+  &.is-focus {
+    .el-input__inner {
+      border-color: $--color-primary !important;
+    }
+  }
+  &.is-disabled {
+    .el-input__inner {
+      color: $--color-text-gray-2;
+    }
+  }
+  .el-input__inner {
+    border-radius: 8px;
+    border-color: #ddd;
+    background-color: #fff;
+  }
+  // .el-input__suffix {
+  //   right: 0;
+  //   border-left: 1px solid #ddd;
+  // }
+}
+// textarea
+.el-textarea {
+  &.is-disabled {
+    .el-textarea__inner {
+      color: $--color-text-gray-2;
+    }
+  }
+}
+.el-select {
+  .el-input__suffix {
+    right: 0;
+    border-left: 1px solid #ddd;
+  }
+  .el-input {
+    .el-select__caret {
+      width: 30px;
+    }
+    .el-icon-arrow-up:before {
+      font-size: 12px;
+      content: "\e78f";
+    }
+  }
+}
+.el-select-dropdown {
+  &.popper-filter {
+    .el-scrollbar {
+      display: block !important;
+      padding-top: 52px;
+    }
+    .el-select-filter {
+      padding: 0 10px;
+      position: absolute;
+      width: 100%;
+      top: 10px;
+      left: 0;
+      z-index: 9;
+    }
+  }
+}
+// upload
+.el-upload,
+.el-upload-dragger {
+  width: 100%;
+}
+// radio
+.el-radio-button {
+  &:not(.is-disabled):hover {
+    .el-radio-button__inner {
+      color: $--color-primary;
+    }
+  }
+
+  &.is-active {
+    .el-radio-button__inner {
+      color: $--color-white !important;
+      border-color: $--color-primary !important;
+      background: $--color-primary !important;
+    }
+  }
+}
+// button
+.el-button {
+  border-radius: $--border-radius;
+
+  > .icon {
+    margin-right: 5px;
+  }
+  > span {
+    display: inline-block;
+  }
+  &.is-disabled:not(.el-button--text) {
+    color: $--color-text-gray-3 !important;
+    background: $--color-background !important;
+    border: 1px solid $--color-border !important;
+  }
+}
+
+.el-button + .popover-button,
+.popover-button + .el-button {
+  margin-left: 10px;
+}
+.el-button + .el-button {
+  margin-left: 10px;
+}
+.el-button--text + .el-button--text {
+  margin-left: 5px;
+}
+.el-button--small {
+  padding-top: 8px;
+  padding-bottom: 8px;
+  font-size: 12px;
+}
+.el-button--text {
+  color: $--color-text-gray-2;
+
+  & + .el-button--text {
+    margin-left: 10px;
+  }
+}
+.el-button--info {
+  background-color: $--color-cyan;
+  border-color: $--color-cyan;
+
+  &:hover,
+  &:focus {
+    background-color: $--color-cyan-light;
+    border-color: $--color-cyan-light;
+  }
+}
+.el-button--primary {
+  background-color: $--color-primary;
+  border-color: $--color-primary;
+
+  &:hover,
+  &:focus {
+    background-color: $--color-primary-light;
+    border-color: $--color-primary-light;
+  }
+}
+.el-button--success {
+  background-color: $--color-success;
+  border-color: $--color-success;
+
+  &:hover,
+  &:focus {
+    background-color: $--color-success-light;
+    border-color: $--color-success-light;
+  }
+}
+
+// table
+.el-table {
+  color: $--color-text-dark-1;
+
+  thead th {
+    color: $--color-text-gray-2;
+  }
+
+  thead.is-group th {
+    background-color: $--color-white;
+  }
+
+  tr.el-table__row {
+    color: $--color-text-dark;
+  }
+  td,
+  th {
+    border-color: $--color-border !important;
+    padding: 14px 0;
+    font-weight: 500;
+  }
+  .el-table__row.row-danger {
+    color: $--color-danger;
+  }
+  &.el-table--noback {
+    tr.el-table__row {
+      background-color: $--color-white;
+    }
+  }
+
+  .cell-head {
+    display: inline-block;
+    vertical-align: middle;
+    line-height: 1.3;
+  }
+  // caret-wrapper
+  .caret-wrapper {
+    width: 20px;
+    height: 20px;
+    top: -1px;
+    .sort-caret {
+      &.ascending {
+        top: -1px;
+      }
+      &.descending {
+        bottom: -1px;
+      }
+    }
+  }
+  // action-column
+  td.action-column {
+    padding-left: 10px;
+    padding-right: 10px;
+    .cell {
+      padding: 0;
+      margin: 0 -5px;
+    }
+    .el-button--text {
+      padding: 0;
+      margin: 0 5px;
+      border: none !important;
+      outline: none !important;
+      &:not(.is-disabled):hover {
+        transform: scale(1.1);
+      }
+    }
+  }
+}
+.el-table--border {
+  border-radius: 10px;
+  th {
+    padding: 12px 0;
+    background-color: #fcfcfd;
+    border-right: none;
+  }
+  td {
+    border-right: none;
+  }
+}
+// el-checkbox
+.el-checkbox {
+  .el-checkbox__label {
+    color: $--color-text-gray-2 !important;
+  }
+  .el-checkbox__inner::after {
+    border-width: 2px;
+  }
+}
+.el-checkbox__input.is-checked .el-checkbox__inner {
+  background-color: $--color-white;
+  border-color: $--color-primary;
+
+  &::after {
+    border-color: $--color-primary;
+  }
+}
+.el-checkbox__input.is-indeterminate .el-checkbox__inner {
+  background-color: $--color-white;
+  border-color: $--color-primary;
+  &::before {
+    background-color: $--color-primary;
+  }
+}
+
+.el-radio {
+  .el-radio__label {
+    color: $--color-text-gray-2 !important;
+  }
+}
+.el-radio__input.is-checked .el-radio__inner {
+  background-color: $--color-white;
+  border-color: $--color-primary;
+  &::after {
+    width: 6px;
+    height: 6px;
+    background-color: $--color-primary;
+  }
+}
+
+// el-switch
+.el-switch {
+  &.is-checked {
+    .el-switch__core {
+      background-color: $--color-primary;
+      border-color: $--color-primary;
+    }
+  }
+}
+
+// el-pagination
+.el-pagination-li {
+  min-width: 32px;
+  height: 32px;
+  border-radius: 8px;
+  overflow: hidden;
+  background-color: $--color-white;
+  border: 1px solid #e1e3eb;
+}
+.el-pagination {
+  padding: 0;
+  .el-pagination__total {
+    float: left;
+  }
+  span:not([class*="suffix"]) {
+    line-height: 32px;
+    height: 32px;
+  }
+  &.is-background {
+    .btn-prev,
+    .btn-next {
+      color: $--color-text-gray-2;
+      margin: 0 5px;
+      @extend .el-pagination-li;
+    }
+    .btn-prev:disabled,
+    .btn-next:disabled {
+      opacity: 0.7;
+    }
+
+    .el-pager li {
+      color: $--color-text-gray-2;
+      margin: 0 5px;
+      padding: 0 8px;
+      line-height: 32px;
+
+      @extend .el-pagination-li;
+      &:not(.disabled).active {
+        color: #fff;
+        background-color: $--color-primary;
+      }
+    }
+  }
+}
+// el-message-box
+.el-message-box {
+  width: 320px;
+  background-color: #f6f6f6;
+  border-radius: 10px;
+  &__title {
+    display: none;
+  }
+  &__headerbtn {
+    display: none;
+  }
+  &__content {
+    text-align: center;
+
+    .el-message-box__status {
+      position: relative;
+      top: 0;
+      height: 48px;
+      width: 48px;
+      transform: none;
+      margin-bottom: 10px;
+
+      &.el-icon-warning {
+        border-radius: 50%;
+        &::before {
+          content: "";
+          position: absolute;
+          top: 0;
+          left: 0;
+          width: 100%;
+          height: 100%;
+          background-image: url(../images/icon-doubt.png);
+          background-repeat: no-repeat;
+          background-size: 100% 100%;
+        }
+      }
+    }
+    .el-message-box__message {
+      padding: 0;
+    }
+  }
+  &__btns {
+    height: 75px;
+    padding: 30px 20px 10px;
+    text-align: center;
+
+    > .el-button {
+      width: 100px;
+    }
+  }
+}
+
+.alert-message {
+  .el-message-box__btns {
+    text-align: center;
+    > .el-button {
+      position: relative;
+      left: auto;
+      top: 0;
+      margin: 0;
+    }
+  }
+}
+// .el-message
+.el-message {
+  .el-message__content {
+    word-wrap: break-word;
+    max-width: 600px;
+    line-height: 1.4;
+  }
+}
+.el-message-loading {
+  border-color: mix($--color-white, $--color-success, 80%);
+  background-color: mix($--color-white, $--color-success, 90%);
+}
+// el-date-editor
+.el-date-editor {
+  border-radius: 8px;
+  .el-range-separator {
+    width: auto;
+  }
+  .el-range-input {
+    background-color: transparent;
+  }
+}
+
+// el-step
+.el-step {
+  &__title.is-success,
+  &__description.is-success,
+  &__title.is-process,
+  &__description.is-process {
+    color: $--color-success;
+  }
+  &__title.is-process {
+    font-weight: normal;
+  }
+  &__head.is-success {
+    .el-step__line {
+      background-color: $--color-success;
+    }
+    .el-step__icon.is-text {
+      color: $--color-white;
+      border-color: $--color-success;
+      background-color: $--color-success;
+    }
+  }
+  &__head.is-process {
+    .el-step__icon.is-text {
+      color: $--color-success;
+      border-color: $--color-success;
+    }
+  }
+
+  &__title.is-wait,
+  &__description.is-wait {
+    color: $--color-text-gray-2;
+  }
+  &__head.is-wait {
+    .el-step__icon.is-text {
+      color: $--color-text-gray-2;
+      border-color: #e1e3eb;
+      background-color: #e1e3eb;
+    }
+  }
+}
+// el-popover
+.el-popper-dark {
+  background-color: $--color-text-dark-1;
+  color: #fff;
+  font-size: 12px;
+  line-height: 18px;
+  padding: 16px;
+  border: none;
+}
+.el-popper-dark {
+  box-shadow: 0px 10px 10px 0px rgba(54, 61, 89, 0.2);
+}
+.el-popper-dark[x-placement^="right"] .popper__arrow {
+  border-right-color: $--color-text-dark-1;
+
+  &::after {
+    border-right-color: $--color-text-dark-1;
+  }
+}
+.el-popper-dark[x-placement^="top"] .popper__arrow {
+  border-top-color: $--color-text-dark-1;
+
+  &::after {
+    border-top-color: $--color-text-dark-1;
+  }
+}
+.el-popper-dark[x-placement^="bottom"] .popper__arrow {
+  border-bottom-color: $--color-text-dark-1;
+
+  &::after {
+    border-bottom-color: $--color-text-dark-1;
+  }
+}
+.el-popper-dark[x-placement^="left"] .popper__arrow {
+  border-left-color: $--color-text-dark-1;
+
+  &::after {
+    border-left-color: $--color-text-dark-1;
+  }
+}
+// popper-list
+.popper-list {
+  min-width: auto;
+
+  .el-button {
+    display: block;
+    width: 100%;
+    margin: 0;
+    &:not(:last-child) {
+      margin-bottom: 5px;
+    }
+  }
+}
+// .el-tag
+.el-tag {
+  &.tag-spin {
+    margin: 3px;
+  }
+}

+ 211 - 190
src/components/common/ImportFile/ImportFile.vue → src/components/ImportFile.vue

@@ -1,190 +1,211 @@
-<template>
-  <div :class="prefixCls">
-    <el-dialog
-      class="modify-data"
-      :visible.sync="modalIsShow"
-      :title="title"
-      top="10vh"
-      :close-on-click-modal="false"
-      :close-on-press-escape="false"
-      append-to-body
-      @open="visibleChange"
-    >
-      <div style="footer"></div>
-      <div :class="[`${prefixCls}-body`]">
-        <el-upload
-          drag
-          :action="uploadUrl"
-          :headers="headers"
-          :max-size="maxSize"
-          :format="format"
-          :accept="accept"
-          :data="uploadData"
-          :before-upload="handleBeforeUpload"
-          :on-error="handleError"
-          :on-success="handleSuccess"
-          :on-remove="handleRemove"
-          ref="UploadComp"
-        >
-          <i class="el-icon-upload"></i><br />
-          <em class="el-upload__text">将文件拖到此处,或<em>点击上传</em></em>
-          <p
-            slot="tip"
-            :class="[
-              `${prefixCls}-tips`,
-              {
-                'cc-tips-success': res.success,
-                'cc-tips-error': !res.success
-              }
-            ]"
-            v-if="res.msg"
-          >
-            {{ res.msg }}
-          </p>
-        </el-upload>
-      </div>
-      <div :class="[`${prefixCls}-footer`]" v-if="downloadUrl">
-        文件下载:
-        <a :href="downloadUrl" :download="dfilename">{{ dfilename }}</a>
-      </div>
-    </el-dialog>
-  </div>
-</template>
-
-<script>
-const prefixCls = "cc-import-file";
-
-export default {
-  name: "import-file",
-  props: {
-    title: {
-      type: String,
-      default: "文件上传"
-    },
-    downloadUrl: {
-      type: String,
-      default: ""
-    },
-    downloadFilename: String,
-    format: {
-      type: Array,
-      default() {
-        return ["jpg", "jpeg", "png"];
-      }
-    },
-    uploadUrl: {
-      type: String,
-      required: true
-    },
-    uploadData: {
-      type: Object,
-      default() {
-        return {};
-      }
-    },
-    headers: {
-      type: Object,
-      default() {
-        return {};
-      }
-    },
-    maxSize: {
-      type: Number,
-      default: 20 * 1024 * 1024
-    },
-    addFilenameParam: {
-      type: String,
-      default: "fileName"
-    }
-  },
-  data() {
-    return {
-      prefixCls,
-      modalIsShow: false,
-      res: {
-        success: true,
-        msg: ""
-      }
-    };
-  },
-  computed: {
-    dfilename() {
-      return this.downloadFilename || this.downloadUrl.split("/").pop();
-    },
-    accept() {
-      return this.format.map(el => `.${el}`).join();
-    }
-  },
-  methods: {
-    visibleChange() {
-      this.res = {
-        success: true,
-        msg: ""
-      };
-    },
-    checkFileFormat(fileType) {
-      const _file_format = fileType
-        .split("/")
-        .pop()
-        .toLocaleLowerCase();
-      return this.format.some(
-        item => item.toLocaleLowerCase() === _file_format
-      );
-    },
-    handleBeforeUpload(file) {
-      if (this.addFilenameParam)
-        this.uploadData[this.addFilenameParam] = file.name;
-
-      if (file.size > this.maxSize) {
-        this.handleExceededSize();
-        return Promise.reject();
-      }
-
-      if (!this.checkFileFormat(file.type)) {
-        this.handleFormatError();
-        return Promise.reject();
-      }
-
-      return true;
-    },
-    handleError(error) {
-      this.res = {
-        success: false,
-        msg: error.message
-      };
-      this.$emit("upload-error", error);
-    },
-    handleSuccess(response) {
-      this.res = {
-        success: true,
-        msg: "导入成功!"
-      };
-      this.$emit("upload-success", response);
-    },
-    handleFormatError() {
-      this.res = {
-        success: false,
-        msg: "只支持文件格式为" + this.format.join("/")
-      };
-      this.$refs.UploadComp.clearFiles();
-    },
-    handleExceededSize() {
-      this.res = {
-        success: false,
-        msg: "文件大小不能超过" + Math.floor(this.maxSize / 1024) + "M"
-      };
-      this.$refs.UploadComp.clearFiles();
-    },
-    handleRemove() {
-      this.$refs.UploadComp.abort();
-      this.$refs.UploadComp.clearFiles();
-    },
-    cancel() {
-      this.modalIsShow = false;
-    },
-    open() {
-      this.modalIsShow = true;
-    }
-  }
-};
-</script>
+<template>
+  <div :class="prefixCls">
+    <el-dialog
+      class="modify-data"
+      :visible.sync="modalIsShow"
+      :title="title"
+      top="10vh"
+      width="500px"
+      :close-on-click-modal="false"
+      :close-on-press-escape="false"
+      append-to-body
+      @open="visibleChange"
+    >
+      <div style="footer"></div>
+      <div :class="[`${prefixCls}-body`]">
+        <el-upload
+          drag
+          :action="uploadUrl"
+          :headers="headers"
+          :max-size="maxSize"
+          :format="format"
+          :accept="accept"
+          :data="uploadDataDict"
+          :before-upload="handleBeforeUpload"
+          :on-error="handleError"
+          :on-success="handleSuccess"
+          :http-request="upload"
+          :disabled="disabled || loading"
+          :show-file-list="false"
+          ref="UploadComp"
+        >
+          <i class="el-icon-upload"></i><br />
+          <em class="el-upload__text">将文件拖到此处,或<em>点击上传</em></em>
+          <p
+            slot="tip"
+            :class="[
+              `${prefixCls}-tips`,
+              {
+                'cc-tips-success': res.success,
+                'cc-tips-error': !res.success
+              }
+            ]"
+            v-if="res.msg"
+          >
+            {{ res.msg }}
+          </p>
+        </el-upload>
+      </div>
+      <div :class="[`${prefixCls}-footer`]" v-if="downloadUrl">
+        文件下载:
+        <a :href="downloadUrl" :download="dfilename">{{ dfilename }}</a>
+      </div>
+    </el-dialog>
+  </div>
+</template>
+
+<script>
+const prefixCls = "cc-import-file";
+
+export default {
+  name: "import-file",
+  props: {
+    title: {
+      type: String,
+      default: "文件上传"
+    },
+    downloadUrl: {
+      type: String,
+      default: ""
+    },
+    downloadFilename: String,
+    format: {
+      type: Array,
+      default() {
+        return ["jpg", "jpeg", "png"];
+      }
+    },
+    uploadUrl: {
+      type: String,
+      required: true
+    },
+    uploadData: {
+      type: Object,
+      default() {
+        return {};
+      }
+    },
+    maxSize: {
+      type: Number,
+      default: 20 * 1024 * 1024
+    },
+    addFilenameParam: {
+      type: String,
+      default: "filename"
+    },
+    disabled: { type: Boolean, default: false }
+  },
+  data() {
+    return {
+      prefixCls,
+      modalIsShow: false,
+      headers: {
+        md5: ""
+      },
+      loading: false,
+      uploadDataDict: {},
+      res: {
+        success: true,
+        msg: ""
+      }
+    };
+  },
+  computed: {
+    dfilename() {
+      return this.downloadFilename || this.downloadUrl.split("/").pop();
+    },
+    accept() {
+      return this.format.map(el => `.${el}`).join();
+    }
+  },
+  methods: {
+    visibleChange() {
+      this.res = {
+        success: true,
+        msg: ""
+      };
+      this.headers = { md5: "" };
+      this.loading = false;
+      this.uploadDataDict = {};
+    },
+    checkFileFormat(fileType) {
+      const _file_format = fileType
+        .split(".")
+        .pop()
+        .toLocaleLowerCase();
+      return this.format.length
+        ? this.format.some(item => item.toLocaleLowerCase() === _file_format)
+        : true;
+    },
+    async handleBeforeUpload(file) {
+      this.uploadDataDict = {
+        ...this.uploadData
+      };
+      this.uploadDataDict[this.addFilenameParam] = file.name;
+
+      if (file.size > this.maxSize) {
+        this.handleExceededSize();
+        return Promise.reject();
+      }
+
+      if (!this.checkFileFormat(file.name)) {
+        this.handleFormatError();
+        return Promise.reject();
+      }
+
+      const md5 = await fileMD5(file);
+      this.headers["md5"] = md5;
+      this.loading = true;
+
+      return true;
+    },
+    upload(options) {
+      let formData = new FormData();
+      Object.entries(options.data).forEach(([k, v]) => {
+        formData.append(k, v);
+      });
+      formData.append("file", options.file);
+      this.$emit("uploading");
+
+      return $post(options.action, formData, { headers: options.headers });
+    },
+    handleError(error) {
+      this.loading = false;
+      this.res = {
+        success: false,
+        msg: error.message
+      };
+      this.$emit("upload-error", error);
+    },
+    handleSuccess() {
+      this.loading = false;
+      this.res = {
+        success: true,
+        msg: "导入成功!"
+      };
+      this.$emit("upload-success", response);
+      this.cancel();
+    },
+    handleFormatError() {
+      this.res = {
+        success: false,
+        msg: "只支持文件格式为" + this.format.join("/")
+      };
+      this.$refs.UploadComp.clearFiles();
+    },
+    handleExceededSize() {
+      this.res = {
+        success: false,
+        msg: "文件大小不能超过" + Math.floor(this.maxSize / (1024 * 1024)) + "M"
+      };
+      this.$refs.UploadComp.clearFiles();
+    },
+    cancel() {
+      this.modalIsShow = false;
+    },
+    open() {
+      this.modalIsShow = true;
+    }
+  }
+};
+</script>

+ 75 - 75
src/components/base/ExamSelect.vue

@@ -1,75 +1,75 @@
-<template>
-  <el-select
-    v-model="selected"
-    class="exam-select"
-    :placeholder="placeholder"
-    filterable
-    :clearable="clearable"
-    :disabled="disabled"
-    @change="select"
-  >
-    <el-option
-      v-for="item in optionList"
-      :key="item.id"
-      :value="item.id"
-      :label="item.name"
-    >
-    </el-option>
-  </el-select>
-</template>
-
-<script>
-import { examQuery } from "../../modules/base/api";
-
-export default {
-  name: "exam-select",
-  props: {
-    disabled: { type: Boolean, default: false },
-    placeholder: { type: String, default: "请选择考试" },
-    value: { type: [Number, String], default: "" },
-    clearable: { type: Boolean, default: true },
-    semesterId: { type: String, default: "" }
-  },
-  data() {
-    return {
-      optionList: [],
-      selected: ""
-    };
-  },
-  watch: {
-    value: {
-      immediate: true,
-      handler(val) {
-        this.selected = val;
-      }
-    },
-    semesterId(val, oldval) {
-      if (val !== oldval) {
-        this.search();
-        this.$emit("input", "");
-        this.$emit("change", {});
-      }
-    }
-  },
-  created() {
-    this.search();
-  },
-  methods: {
-    async search() {
-      this.optionList = [];
-
-      const res = await examQuery({
-        semesterId: this.semesterId
-      });
-      this.optionList = res;
-    },
-    select() {
-      this.$emit("input", this.selected);
-      this.$emit(
-        "change",
-        this.optionList.find(item => item.id === this.selected)
-      );
-    }
-  }
-};
-</script>
+<template>
+  <el-select
+    v-model="selected"
+    class="exam-select"
+    :placeholder="placeholder"
+    filterable
+    :clearable="clearable"
+    :disabled="disabled"
+    @change="select"
+  >
+    <el-option
+      v-for="item in optionList"
+      :key="item.id"
+      :value="item.id"
+      :label="item.name"
+    >
+    </el-option>
+  </el-select>
+</template>
+
+<script>
+import { examQuery } from "../../modules/base/api";
+
+export default {
+  name: "exam-select",
+  props: {
+    disabled: { type: Boolean, default: false },
+    placeholder: { type: String, default: "考试" },
+    value: { type: [Number, String], default: "" },
+    clearable: { type: Boolean, default: true },
+    semesterId: { type: String, default: "" }
+  },
+  data() {
+    return {
+      optionList: [],
+      selected: ""
+    };
+  },
+  watch: {
+    value: {
+      immediate: true,
+      handler(val) {
+        this.selected = val;
+      }
+    },
+    semesterId(val, oldval) {
+      if (val !== oldval) {
+        this.search();
+        this.$emit("input", "");
+        this.$emit("change", {});
+      }
+    }
+  },
+  created() {
+    this.search();
+  },
+  methods: {
+    async search() {
+      this.optionList = [];
+
+      const res = await examQuery({
+        semesterId: this.semesterId
+      });
+      this.optionList = res;
+    },
+    select() {
+      this.$emit("input", this.selected);
+      this.$emit(
+        "change",
+        this.optionList.find(item => item.id === this.selected)
+      );
+    }
+  }
+};
+</script>

+ 0 - 2
src/components/common/ImportFile/index.js

@@ -1,2 +0,0 @@
-import ImportFile from "./ImportFile.vue";
-export default ImportFile;

+ 0 - 74
src/components/common/ImportFile/intro.md

@@ -1,74 +0,0 @@
-# ImportFile api
-
-## 实例
-
-```html
-<template>
-  <div class="demo">
-    <button type="primary" @click="open">to upload</button>
-
-    <import-file
-      :title="title"
-      :upload-url="uploadUrl"
-      :download-url="downloadUrl"
-      :download-filename="downloadFilename"
-      :headers="headers"
-      :format="['xls', 'xlsx']"
-      @confirm="fileUploaded"
-      ref="ImportFile"
-    >
-    </import-file>
-  </div>
-</template>
-
-<script>
-  import ImportFile from "@/components/common/ImportFile";
-
-  export default {
-    name: "demo",
-    components: {
-      ImportFile
-    },
-    data() {
-      return {
-        title: "导入文件",
-        uploadUrl: this.GLOBAL.domain + "yourUploadPath",
-        uploadData: {},
-        downloadFilename: "要下载的文件.xls",
-        downloadUrl: "/path/要下载的文件.xls",
-        headers: {
-          Authorization: "token"
-        }
-      };
-    },
-    methods: {
-      open() {
-        this.$refs.ImportFile.modalIsShow = true;
-      },
-      fileUploaded(file) {
-        // file:上传文件的url地址
-        console.log(file);
-      }
-    }
-  };
-</script>
-```
-
-## ImportFile props
-
-| 属性             | 说明                                               | 类型   | 默认值         |
-| ---------------- | -------------------------------------------------- | ------ | -------------- |
-| title            | 标题文字                                           | String | 文件上传       |
-| downloadUrl      | 要下载的文件地址                                   | String | -              |
-| downloadFilename | 要下载的文件名称,默认是 downloadUrl 所指向的文件名 | String | -              |
-| format           | 支持上传的文件格式                                 | Array  | ["jpg", "png"] |
-| uploadUrl        | 上传地址,必须                                     | String | -              |
-| uploadData       | 上传时额外的数据                                   | Object | {}             |
-| headers          | 上传时添加的 headers 信息                          | Object | {}             |
-| maxSize          | 限制的文件大小,单位 kb                            | Number | 10 \* 1024     |
-
-## ImportFile events
-
-| 事件名  | 说明                   | 返回值                       |
-| ------- | ---------------------- | ---------------------------- |
-| confirm | 确认文件上传时触发事件 | fileUrl:上传文件的 url 地址 |

+ 9 - 82
src/modules/analysis/api.js

@@ -1,68 +1,5 @@
 import { $postParam, $post } from "@/plugins/axios";
 
-export const questionTeatherUserQuery = ({ courseCode, param }) => {
-  return $postParam("/api/admin/sys/user/user_list", { courseCode, param });
-};
-// user-manage
-export const userListPage = datas => {
-  return $postParam("/api/admin/sys/user/list", datas);
-};
-export const updateUser = datas => {
-  return $post("/api/admin/sys/user/save", datas);
-};
-export const ableUser = ({ id, enable }) => {
-  return $post("/api/admin/sys/user/enable", { id, enable });
-};
-export const resetPwd = id => {
-  return $post("/api/admin/sys/user/reset_password", { id });
-};
-export const updatePwd = datas => {
-  return $post("/api/admin/sys/user/update_password", datas);
-};
-export const userBindRoles = ({ id, roleIds }) => {
-  return $post("/api/admin/sys/user/bind_roles", { id, roleIds });
-};
-export const userRoleListPage = () => {
-  return $postParam("/api/admin/sys/role/list_to_user", {});
-};
-
-// role-manage
-export const roleListPage = datas => {
-  return $postParam("/api/admin/sys/role/list", datas);
-};
-export const ableRole = ({ id, enable }) => {
-  return $post("/api/admin/sys/role/enable", { id, enable });
-};
-export const updateRole = datas => {
-  return $post("/api/admin/sys/role/save", datas);
-};
-export const deleteRole = id => {
-  return $post("/api/admin/sys/role/remove", { id });
-};
-export const userBoundRoles = userId => {
-  return $postParam("/api/admin/sys/role/get_user_roles", { userId });
-};
-// menu-manage
-export const menuAuthList = datas => {
-  return $postParam("/api/admin/sys/privilege/list_auth", datas);
-};
-export const roleBoundPrivileges = roleId => {
-  return $postParam("/api/admin/sys/privilege/get_role_privileges", { roleId });
-};
-// organization-manage
-export const organizationList = datas => {
-  return $postParam("/api/admin/sys/org/list", datas);
-};
-export const updateOrganization = datas => {
-  return $post("/api/admin/sys/org/save", datas);
-};
-export const ableOrganization = ({ id, enable }) => {
-  return $post("/api/admin/sys/org/enable", { id, enable });
-};
-export const deleteOrganization = id => {
-  return $post("/api/admin/sys/org/remove", { id });
-};
-
 // data-init-manage
 export const dataInitList = datas => {
   return $postParam("/api/admin/sys/org/list", datas);
@@ -73,33 +10,23 @@ export const updateKnowledgeDimension = datas => {
 
 // analysis-course-manage
 export const analysisBatchList = datas => {
-  return $postParam("/api/admin/sys/org/list", datas);
-};
-export const analysisBatchQuery = datas => {
-  return $postParam("/api/admin/sys/org/list", datas);
+  return $postParam("/api/admin/grade/batch/page", datas);
 };
 export const updateAnalysisBatch = datas => {
-  return $post("/api/admin/sys/org/save", datas);
+  return $post("/api/admin/grade/batch/save", datas);
 };
-export const deleteAnalysisBatch = ids => {
-  return $post("/api/admin/sys/org/list", { ids });
+export const deleteAnalysisBatch = idList => {
+  return $postParam("/api/admin/grade/batch/delete", { idList });
 };
 export const analysisBatchPaperList = datas => {
-  return $postParam("/api/admin/sys/org/list", datas);
+  return $postParam("/api/admin/grade/batch/paper/page", datas);
 };
 export const addAnalysisBatchPaper = datas => {
-  return $postParam("/api/admin/sys/org/list", datas);
+  return $post("/api/admin/grade/batch/paper/save", datas);
 };
-export const deleteAnalysisBatchPaper = ids => {
-  return $postParam("/api/admin/sys/org/list", { ids });
+export const deleteAnalysisBatchPaper = idList => {
+  return $postParam("/api/admin/grade/batch/paper/delete", { idList });
 };
 export const analysisPaperList = datas => {
-  return $postParam("/api/admin/sys/org/list", datas);
+  return $postParam("/api/admin/grade/batch/paper/able", datas);
 };
-
-// common
-export const uploadFile = datas => {
-  return $post("/api/admin/common/file/upload", datas);
-};
-
-// system

+ 32 - 19
src/modules/analysis/components/ModifyAnalysisBatch.vue

@@ -10,23 +10,28 @@
     append-to-body
     @opened="visibleChange"
   >
-    <div class="part-box part-box-pad part-box-border">
-      <el-form
-        ref="modalFormComp"
-        :model="modalForm"
-        :rules="rules"
-        label-width="100px"
-      >
-        <el-form-item prop="name" label="批次名称:">
-          <el-input
-            style="width:100%;"
-            v-model.trim="modalForm.name"
-            placeholder="请输入批次名称"
-            clearable
-          ></el-input>
-        </el-form-item>
-      </el-form>
-    </div>
+    <el-form
+      ref="modalFormComp"
+      :model="modalForm"
+      :rules="rules"
+      label-width="100px"
+    >
+      <el-form-item prop="batchName" label="批次名称:">
+        <el-input
+          class="width-full"
+          v-model.trim="modalForm.batchName"
+          placeholder="请输入批次名称"
+          clearable
+        ></el-input>
+      </el-form-item>
+      <el-form-item prop="semesterId" label="学期:">
+        <semester-select
+          class="width-full"
+          v-model="modalForm.semesterId"
+          placeholder="学期"
+        ></semester-select>
+      </el-form-item>
+    </el-form>
     <div slot="footer">
       <el-button type="primary" :disabled="isSubmit" @click="submit"
         >确认</el-button
@@ -41,7 +46,8 @@ import { updateAnalysisBatch } from "../api";
 
 const initModalForm = {
   id: null,
-  name: ""
+  semesterId: null,
+  batchName: ""
 };
 
 export default {
@@ -68,7 +74,7 @@ export default {
       isSubmit: false,
       modalForm: {},
       rules: {
-        name: [
+        batchName: [
           {
             required: true,
             message: "请输入批次名称",
@@ -79,6 +85,13 @@ export default {
             message: "批次名称不能超过100",
             trigger: "change"
           }
+        ],
+        semesterId: [
+          {
+            required: true,
+            message: "请选择学期",
+            trigger: "change"
+          }
         ]
       }
     };

+ 43 - 27
src/modules/analysis/components/ModifyAnalysisBatchPaper.vue

@@ -1,13 +1,13 @@
 <template>
   <div class="modify-analysis-batch">
     <el-dialog
+      class="page-dialog"
       :visible.sync="modalIsShow"
       :title="title"
-      top="0px"
-      width="80%"
       :close-on-click-modal="false"
       :close-on-press-escape="false"
       append-to-body
+      fullscreen
       @opened="visibleChange"
     >
       <div class="part-box part-box-filter part-box-flex">
@@ -17,21 +17,13 @@
           label-width="55px"
           inline
         >
-          <el-form-item label="学期:">
-            <semester-select v-model="filter.semester"></semester-select>
-          </el-form-item>
-          <el-form-item label="考试:">
-            <exam-select
-              v-model="filter.examId"
-              :semester="filter.semester"
-            ></exam-select>
-          </el-form-item>
           <el-form-item label="课程:">
-            <course-select
-              v-model="filter.courseCode"
-              :exam-id="filter.examId"
-              inspect
-            ></course-select>
+            <el-input
+              style="width:100%;"
+              v-model.trim="filter.courseName"
+              placeholder="课程名称"
+              clearable
+            ></el-input>
           </el-form-item>
           <el-form-item>
             <el-button type="primary" @click="toPage(1)">查询</el-button>
@@ -50,7 +42,12 @@
           :data="dataList"
           @selection-change="handleSelectionChange"
         >
-          <el-table-column prop="semester" label="学期"></el-table-column>
+          <el-table-column
+            type="selection"
+            width="55"
+            align="center"
+          ></el-table-column>
+          <el-table-column prop="semesterName" label="学期"></el-table-column>
           <el-table-column prop="examName" label="考试"> </el-table-column>
           <el-table-column prop="courseCode" label="课程(代码)" min-width="120">
             <span slot-scope="scope">
@@ -59,12 +56,14 @@
           </el-table-column>
           <el-table-column prop="paperNumber" label="试卷编号">
           </el-table-column>
-          <el-table-column prop="paperType" label="试卷类型"> </el-table-column>
-          <el-table-column prop="teachName" label="命题老师"> </el-table-column>
+          <el-table-column prop="paperType" label="试卷类型" width="100">
+          </el-table-column>
+          <el-table-column prop="teacherName" label="命题老师">
+          </el-table-column>
           <el-table-column
             class-name="action-column"
             label="操作"
-            width="160px"
+            width="80"
             align="center"
           >
             <template slot-scope="scope">
@@ -96,7 +95,7 @@
     <!-- SelectAnalysisPaper -->
     <select-analysis-paper
       ref="SelectAnalysisPaper"
-      :batch-id="instance.id"
+      :batch="instance"
       @modified="getList"
     ></select-analysis-paper>
   </div>
@@ -121,9 +120,9 @@ export default {
     return {
       modalIsShow: false,
       filter: {
-        semester: "",
-        examId: "",
-        courseCode: ""
+        batchId: "",
+        semesterId: "",
+        courseName: ""
       },
       current: 1,
       size: this.GLOBAL.pageSize,
@@ -136,14 +135,29 @@ export default {
   },
   computed: {
     title() {
-      return `分析课程管理-${this.instance.name}`;
+      return `分析试卷管理-${this.instance.batchName}`;
     }
   },
   methods: {
+    visibleChange() {
+      this.filter = {
+        batchId: this.instance.id,
+        semesterId: this.instance.semesterId,
+        courseName: ""
+      };
+      this.curRow = {};
+      this.toPage(1);
+    },
+    cancel() {
+      this.modalIsShow = false;
+    },
+    open() {
+      this.modalIsShow = true;
+    },
     async getList() {
+      this.multipleSelection = [];
       const datas = {
         ...this.filter,
-        batchId: this.instance.id,
         pageNumber: this.current,
         pageSize: this.size
       };
@@ -155,7 +169,9 @@ export default {
       this.current = page;
       this.getList();
     },
-    toAdd() {},
+    toAdd() {
+      this.$refs.SelectAnalysisPaper.open();
+    },
     handleSelectionChange(val) {
       this.multipleSelection = val.map(item => item.id);
     },

+ 96 - 50
src/modules/analysis/components/SelectAnalysisPaper.vue

@@ -1,9 +1,9 @@
 <template>
   <el-dialog
-    class="select-analysis-paper"
+    class="select-analysis-paper page-dialog"
     :visible.sync="modalIsShow"
     title="选择分析试卷"
-    top="0px"
+    top="10px"
     width="80%"
     :close-on-click-modal="false"
     :close-on-press-escape="false"
@@ -12,38 +12,37 @@
   >
     <div class="part-box part-box-filter part-box-flex">
       <el-form ref="FilterForm" label-position="left" label-width="55px" inline>
-        <el-form-item label="学期:">
-          <semester-select v-model="filter.semester"></semester-select>
-        </el-form-item>
         <el-form-item label="考试:">
           <exam-select
             v-model="filter.examId"
-            :semester="filter.semester"
+            :semester-id="filter.semesterId"
+            placeholder="考试"
           ></exam-select>
         </el-form-item>
+        <el-form-item label="学院:">
+          <college-select
+            v-model="filter.collegeId"
+            placeholder="学院"
+          ></college-select>
+        </el-form-item>
         <el-form-item label="课程:">
           <course-select
             v-model="filter.courseCode"
-            :exam-id="filter.examId"
-            inspect
+            placeholder="课程"
           ></course-select>
         </el-form-item>
         <el-form-item>
           <el-input
-            v-model="filter.name"
+            v-model="filter.teacherName"
             placeholder="请输入命题老师姓名"
           ></el-input>
         </el-form-item>
         <el-form-item>
-          <el-button type="primary" @click="toPage(1)">查询</el-button>
+          <el-button type="primary" :disabled="!filter.examId" @click="search"
+            >查询</el-button
+          >
         </el-form-item>
       </el-form>
-      <div class="part-box-action">
-        <el-button type="danger" :loading="loading" @click="toBatchDelete"
-          >批量删除</el-button
-        >
-        <el-button type="primary" @click="toAdd">添加分析试卷</el-button>
-      </div>
     </div>
 
     <div class="mb-4 tab-btns">
@@ -54,7 +53,7 @@
         :type="curTab == tab.val ? 'primary' : 'default'"
         @click="selectMenu(tab.val)"
         >{{ tab.name }}
-        <span v-if="curTab === 'selected'">({{ selectedPapers.length }})</span>
+        <span v-if="tab.val === 'selected'">({{ selectedPapers.length }})</span>
       </el-button>
     </div>
 
@@ -62,17 +61,25 @@
       <el-table
         ref="TableList"
         :data="dataList"
-        @selection-change="handleSelectionChange"
+        key="query"
+        @select="handleSelectionChange"
+        @select-all="handleSelectionChange"
       >
-        <el-table-column prop="semester" label="学期"></el-table-column>
+        <el-table-column
+          type="selection"
+          width="55"
+          align="center"
+        ></el-table-column>
+        <el-table-column prop="semesterName" label="学期"></el-table-column>
         <el-table-column prop="examName" label="考试"> </el-table-column>
         <el-table-column prop="courseCode" label="课程(代码)" min-width="120">
           <span slot-scope="scope">
             {{ scope.row.courseName }}({{ scope.row.courseCode }})
           </span>
         </el-table-column>
-        <el-table-column prop="collegeName" label="开课学院"> </el-table-column>
-        <el-table-column prop="teachName" label="命题老师"> </el-table-column>
+        <el-table-column prop="teachCollegeName" label="开课学院">
+        </el-table-column>
+        <el-table-column prop="teacherName" label="命题老师"> </el-table-column>
         <el-table-column prop="paperNumber" label="试卷编号"> </el-table-column>
         <el-table-column prop="paperType" label="试卷类型"> </el-table-column>
       </el-table>
@@ -89,18 +96,20 @@
       </div>
     </div>
     <div v-else class="part-box part-box-pad">
-      <el-table ref="SelectedTableList" :data="selectedPapers">
-        <el-table-column prop="semester" label="学期"></el-table-column>
+      <el-table ref="SelectedTableList" key="select" :data="selectedPapers">
+        <el-table-column prop="semesterName" label="学期"></el-table-column>
         <el-table-column prop="examName" label="考试"> </el-table-column>
         <el-table-column prop="courseCode" label="课程(代码)" min-width="120">
           <span slot-scope="scope">
             {{ scope.row.courseName }}({{ scope.row.courseCode }})
           </span>
         </el-table-column>
-        <el-table-column prop="collegeName" label="开课学院"> </el-table-column>
-        <el-table-column prop="teachName" label="命题老师"> </el-table-column>
+        <el-table-column prop="teachCollegeName" label="开课学院">
+        </el-table-column>
+        <el-table-column prop="teacherName" label="命题老师"> </el-table-column>
         <el-table-column prop="paperNumber" label="试卷编号"> </el-table-column>
-        <el-table-column prop="paperType" label="试卷类型"> </el-table-column>
+        <el-table-column prop="paperType" label="试卷类型" width="80">
+        </el-table-column>
         <el-table-column
           class-name="action-column"
           label="操作"
@@ -130,22 +139,30 @@
 
 <script>
 import { analysisPaperList, addAnalysisBatchPaper } from "../api";
+const initFilter = {
+  batchId: "",
+  semesterId: "",
+  examId: "",
+  collegeId: "",
+  courseCode: "",
+  teacherName: ""
+};
 
 export default {
   name: "select-analysis-paper",
   props: {
-    batchId: {
-      type: String
+    batch: {
+      type: Object,
+      default() {
+        return {};
+      }
     }
   },
   data() {
     return {
       modalIsShow: false,
       filter: {
-        semester: "",
-        examId: "",
-        courseCode: "",
-        name: ""
+        ...initFilter
       },
       current: 1,
       size: this.GLOBAL.pageSize,
@@ -161,6 +178,7 @@ export default {
           val: "selected"
         }
       ],
+      searchList: [],
       dataList: [],
       selectedPapers: [],
       selectedPaperIds: [],
@@ -172,6 +190,11 @@ export default {
       this.curTab = "query";
       this.selectedPapers = [];
       this.selectedPaperIds = [];
+      this.filter = Object.assign({}, initFilter, {
+        batchId: this.batch.id,
+        semesterId: this.batch.semesterId
+      });
+      this.$nextTick(() => this.changeCurListSelect());
     },
     cancel() {
       this.modalIsShow = false;
@@ -179,24 +202,36 @@ export default {
     open() {
       this.modalIsShow = true;
     },
-    async getList() {
+    async search() {
       const datas = {
-        ...this.filter,
-        pageNumber: this.current,
-        pageSize: this.size
+        ...this.filter
       };
       const data = await analysisPaperList(datas);
-      this.dataList = data.records;
-      this.total = data.total;
-
-      this.$nextTick(() => this.changeCurListSelect());
+      this.searchList = data.map(item => {
+        item.id = `${item.paperNumber}-${item.paperType}`;
+        return item;
+      });
+      this.total = data.length;
+      this.toPage(1);
     },
     changeCurListSelect() {
-      const curPageSelectedList = this.dataList.filter(item =>
-        this.selectedPaperIds.includes(item.id)
-      );
-      this.$refs.TableList.clearSelection();
-      this.$refs.TableList.toggleRowSelection(curPageSelectedList, true);
+      this.dataList.forEach(row => {
+        if (this.selectedPaperIds.includes(row.id)) {
+          this.$refs.TableList.toggleRowSelection(row, true);
+        } else {
+          this.$refs.TableList.toggleRowSelection(row, false);
+        }
+      });
+    },
+    getList() {
+      this.dataList = this.searchList
+        .slice((this.current - 1) * this.size, this.current * this.size)
+        .map(item => {
+          return { ...item };
+        });
+      if (this.curTab === "query") {
+        this.$nextTick(() => this.changeCurListSelect());
+      }
     },
     toPage(page) {
       this.current = page;
@@ -204,7 +239,7 @@ export default {
     },
     selectMenu(tab) {
       this.curTab = tab;
-      if (tab === "query") {
+      if (this.curTab === "query") {
         this.$nextTick(() => this.changeCurListSelect());
       }
     },
@@ -217,8 +252,9 @@ export default {
     updateSelectedIds() {
       this.selectedPaperIds = this.selectedPapers.map(item => item.id);
     },
-    handleSelectionChange(val) {
-      const seletedIds = val.map(item => item.id);
+    handleSelectionChange(selection) {
+      // console.log(selection);
+      const seletedIds = selection.map(item => item.id);
       this.dataList.forEach(item => {
         const isSelected = seletedIds.includes(item.id);
         if (isSelected) {
@@ -241,9 +277,19 @@ export default {
       if (this.isSubmit) return;
       this.isSubmit = true;
 
+      const ableAnalyzePaperList = this.selectedPapers.map(item => {
+        return {
+          teachCollegeName: item.teachCollegeName,
+          paperName: item.paperName,
+          teachCollegeId: item.teachCollegeId,
+          paperType: item.paperType,
+          paperNumber: item.paperNumber
+        };
+      });
+
       const res = await addAnalysisBatchPaper({
-        batchId: this.batchId,
-        paperIds: this.selectedPaperIds
+        batchId: this.batch.id,
+        ableAnalyzePaperList
       }).catch(() => {});
       this.isSubmit = false;
       if (!res) return;

+ 9 - 23
src/modules/analysis/views/AnalysisBatchManage.vue

@@ -3,18 +3,12 @@
     <div class="part-box part-box-filter part-box-flex">
       <el-form ref="FilterForm" label-position="left" label-width="85px" inline>
         <el-form-item label="分析批次:">
-          <el-select
-            v-model="filter.batchId"
-            placeholder="请选择分析批次"
+          <el-input
+            style="width:100%;"
+            v-model.trim="filter.gradeBatchName"
+            placeholder="请输入批次名称"
             clearable
-          >
-            <el-option
-              v-for="item in batchs"
-              :key="item.id"
-              :label="item.name"
-              :value="item.id"
-            ></el-option>
-          </el-select>
+          ></el-input>
         </el-form-item>
         <el-form-item>
           <el-button type="primary" @click="toPage(1)">查询</el-button>
@@ -39,6 +33,7 @@
           align="center"
         ></el-table-column>
         <el-table-column prop="batchName" label="分析批次"></el-table-column>
+        <el-table-column prop="semesterName" label="学期"></el-table-column>
         <el-table-column prop="status" label="状态"> </el-table-column>
         <el-table-column
           class-name="action-column"
@@ -99,11 +94,7 @@
 </template>
 
 <script>
-import {
-  analysisBatchList,
-  analysisBatchQuery,
-  deleteAnalysisBatch
-} from "../api";
+import { analysisBatchList, deleteAnalysisBatch } from "../api";
 
 import ModifyAnalysisBatch from "../components/ModifyAnalysisBatch.vue";
 import ModifyAnalysisBatchPaper from "../components/ModifyAnalysisBatchPaper.vue";
@@ -114,7 +105,7 @@ export default {
   data() {
     return {
       filter: {
-        batchId: ""
+        gradeBatchName: ""
       },
       current: 1,
       size: this.GLOBAL.pageSize,
@@ -127,14 +118,9 @@ export default {
     };
   },
   mounted() {
-    this.getBatchs();
     this.toPage(1);
   },
   methods: {
-    async getBatchs() {
-      const res = await analysisBatchQuery();
-      this.batchs = res || [];
-    },
     async getList() {
       const datas = {
         ...this.filter,
@@ -181,7 +167,7 @@ export default {
     },
     async toDelete(row) {
       const confirm = await this.$confirm(
-        `确定要删除批次【${row.name}】吗?`,
+        `确定要删除批次【${row.batchName}】吗?`,
         "提示",
         {
           type: "warning"

+ 7 - 2
src/modules/analysis/views/DataInitManage.vue

@@ -3,12 +3,16 @@
     <div class="part-box part-box-filter part-box-flex">
       <el-form ref="FilterForm" label-position="left" label-width="55px" inline>
         <el-form-item label="学期:">
-          <semester-select v-model="filter.semester"></semester-select>
+          <semester-select
+            v-model="filter.semester"
+            placeholder="学期"
+          ></semester-select>
         </el-form-item>
         <el-form-item label="考试:">
           <exam-select
             v-model="filter.examId"
-            :semester="filter.semester"
+            :semester-id="filter.semester"
+            placeholder="考试"
           ></exam-select>
         </el-form-item>
         <el-form-item label="课程:">
@@ -16,6 +20,7 @@
             v-model="filter.courseCode"
             :exam-id="filter.examId"
             inspect
+            placeholder="课程"
           ></course-select>
         </el-form-item>
         <el-form-item>

+ 110 - 110
src/plugins/filters.js

@@ -1,110 +1,110 @@
-import Vue from "vue";
-import {
-  TEMPLATE_CLASSIFY,
-  EXAM_TASK_STATUS,
-  AUDITING_STATUS,
-  AUDITING_RESULT,
-  PRINT_PLAN_STATUS,
-  PRINT_TASK_STATUS,
-  DATA_TASK_STATUS,
-  DATA_TASK_TYPE,
-  DATA_TASK_RESULT,
-  ORG_TYPE,
-  CARD_SOURCE_TYPE,
-  MARK_TASK_SYNC_STATUS,
-  STMMS_SYNC_TYPE,
-  SYNC_PRINT_STATUS,
-  PRINT_PDF_TYPE,
-  EXAM_TYPE,
-  CARD_TYPE,
-  CARD_CREATE_METHOD_TYPE,
-  FLOW_APPROVE_OPERATION_TYPE,
-  FLOW_TYPE
-} from "../constants/enumerate";
-import { formatDate } from "../plugins/utils";
-
-const DEFAULT_FIELD = "--";
-
-Vue.filter("defaultFieldFilter", function(val) {
-  return val || DEFAULT_FIELD;
-});
-Vue.filter("enableFilter", function(val) {
-  return val ? "启用" : "禁用";
-});
-Vue.filter("templateClassifyFilter", function(val) {
-  return TEMPLATE_CLASSIFY[val] || DEFAULT_FIELD;
-});
-Vue.filter("orgsFilter", function(val) {
-  return val.map(item => item.name).join(",");
-});
-Vue.filter("rolesFilter", function(val) {
-  return val.map(item => item.name).join(",");
-});
-Vue.filter("coursesFilter", function(val) {
-  return val.map(item => `${item.name}(${item.code})`).join(",");
-});
-Vue.filter("examTaskStatusFilter", function(val) {
-  return EXAM_TASK_STATUS[val] || DEFAULT_FIELD;
-});
-Vue.filter("auditStatusFilter", function(val) {
-  return AUDITING_STATUS[val] || DEFAULT_FIELD;
-});
-Vue.filter("reviewStatusFilter", function(val) {
-  return AUDITING_RESULT[val] || DEFAULT_FIELD;
-});
-Vue.filter("printPlanStatusFilter", function(val) {
-  return PRINT_PLAN_STATUS[val] || DEFAULT_FIELD;
-});
-Vue.filter("printTaskStatusFilter", function(val) {
-  return PRINT_TASK_STATUS[val] || DEFAULT_FIELD;
-});
-Vue.filter("dataTaskTypeFilter", function(val) {
-  return DATA_TASK_TYPE[val] || DEFAULT_FIELD;
-});
-Vue.filter("dataTaskStatusFilter", function(val) {
-  return DATA_TASK_STATUS[val] || DEFAULT_FIELD;
-});
-Vue.filter("dataTaskResultFilter", function(val) {
-  return DATA_TASK_RESULT[val] || DEFAULT_FIELD;
-});
-Vue.filter("orgTypeFilter", function(val) {
-  return ORG_TYPE[val] || DEFAULT_FIELD;
-});
-Vue.filter("cardSourceTypeFilter", function(val) {
-  return CARD_SOURCE_TYPE[val] || DEFAULT_FIELD;
-});
-Vue.filter("timestampFilter", function(val) {
-  return val
-    ? formatDate("YYYY-MM-DD HH:mm:ss", new Date(val * 1))
-    : DEFAULT_FIELD;
-});
-Vue.filter("flowTaskNameFilter", function(val) {
-  return val ? val.replace(/\(.+?\)/g, "") : DEFAULT_FIELD;
-});
-Vue.filter("markTaskSyncStatusFilter", function(val) {
-  return MARK_TASK_SYNC_STATUS[val] || "失败";
-});
-Vue.filter("stmmsSyncTypeFilter", function(val) {
-  return STMMS_SYNC_TYPE[val] || DEFAULT_FIELD;
-});
-Vue.filter("syncPrintStatusFilter", function(val) {
-  return SYNC_PRINT_STATUS[val] || DEFAULT_FIELD;
-});
-Vue.filter("printPdfTypeFilter", function(val) {
-  return PRINT_PDF_TYPE[val] || DEFAULT_FIELD;
-});
-Vue.filter("examTypeFilter", function(val) {
-  return EXAM_TYPE[val] || DEFAULT_FIELD;
-});
-Vue.filter("cardTypeFilter", function(val) {
-  return CARD_TYPE[val] || DEFAULT_FIELD;
-});
-Vue.filter("cardCreateMethodTypeFilter", function(val) {
-  return CARD_CREATE_METHOD_TYPE[val] || DEFAULT_FIELD;
-});
-Vue.filter("flowApproveOperationTypeFilter", function(val) {
-  return FLOW_APPROVE_OPERATION_TYPE[val] || "";
-});
-Vue.filter("flowTypeFilter", function(val) {
-  return FLOW_TYPE[val] || "";
-});
+import Vue from "vue";
+import {
+  TEMPLATE_CLASSIFY,
+  EXAM_TASK_STATUS,
+  AUDITING_STATUS,
+  AUDITING_RESULT,
+  PRINT_PLAN_STATUS,
+  PRINT_TASK_STATUS,
+  DATA_TASK_STATUS,
+  DATA_TASK_TYPE,
+  DATA_TASK_RESULT,
+  ORG_TYPE,
+  CARD_SOURCE_TYPE,
+  MARK_TASK_SYNC_STATUS,
+  STMMS_SYNC_TYPE,
+  SYNC_PRINT_STATUS,
+  PRINT_PDF_TYPE,
+  EXAM_TYPE,
+  CARD_TYPE,
+  CARD_CREATE_METHOD_TYPE,
+  FLOW_APPROVE_OPERATION_TYPE,
+  FLOW_TYPE
+} from "../constants/enumerate";
+import { formatDate } from "../plugins/utils";
+
+const DEFAULT_FIELD = "--";
+
+Vue.filter("defaultFieldFilter", function(val) {
+  return val || DEFAULT_FIELD;
+});
+Vue.filter("enableFilter", function(val) {
+  return val ? "启用" : "禁用";
+});
+Vue.filter("templateClassifyFilter", function(val) {
+  return TEMPLATE_CLASSIFY[val] || DEFAULT_FIELD;
+});
+Vue.filter("orgsFilter", function(val) {
+  return val.map(item => item.name).join(",");
+});
+Vue.filter("rolesFilter", function(val) {
+  return val.map(item => item.name).join(",");
+});
+Vue.filter("coursesFilter", function(val) {
+  return val.map(item => `${item.name}(${item.code})`).join(",");
+});
+Vue.filter("examTaskStatusFilter", function(val) {
+  return EXAM_TASK_STATUS[val] || DEFAULT_FIELD;
+});
+Vue.filter("auditStatusFilter", function(val) {
+  return AUDITING_STATUS[val] || DEFAULT_FIELD;
+});
+Vue.filter("reviewStatusFilter", function(val) {
+  return AUDITING_RESULT[val] || DEFAULT_FIELD;
+});
+Vue.filter("printPlanStatusFilter", function(val) {
+  return PRINT_PLAN_STATUS[val] || DEFAULT_FIELD;
+});
+Vue.filter("printTaskStatusFilter", function(val) {
+  return PRINT_TASK_STATUS[val] || DEFAULT_FIELD;
+});
+Vue.filter("dataTaskTypeFilter", function(val) {
+  return DATA_TASK_TYPE[val] || DEFAULT_FIELD;
+});
+Vue.filter("dataTaskStatusFilter", function(val) {
+  return DATA_TASK_STATUS[val] || DEFAULT_FIELD;
+});
+Vue.filter("dataTaskResultFilter", function(val) {
+  return DATA_TASK_RESULT[val] || DEFAULT_FIELD;
+});
+Vue.filter("orgTypeFilter", function(val) {
+  return ORG_TYPE[val] || DEFAULT_FIELD;
+});
+Vue.filter("cardSourceTypeFilter", function(val) {
+  return CARD_SOURCE_TYPE[val] || DEFAULT_FIELD;
+});
+Vue.filter("timestampFilter", function(val) {
+  return val
+    ? formatDate("YYYY-MM-DD HH:mm:ss", new Date(val * 1))
+    : DEFAULT_FIELD;
+});
+Vue.filter("flowTaskNameFilter", function(val) {
+  return val ? val.replace(/\(.+?\)/g, "") : DEFAULT_FIELD;
+});
+Vue.filter("markTaskSyncStatusFilter", function(val) {
+  return MARK_TASK_SYNC_STATUS[val] || "失败";
+});
+Vue.filter("stmmsSyncTypeFilter", function(val) {
+  return STMMS_SYNC_TYPE[val] || DEFAULT_FIELD;
+});
+Vue.filter("syncPrintStatusFilter", function(val) {
+  return SYNC_PRINT_STATUS[val] || DEFAULT_FIELD;
+});
+Vue.filter("printPdfTypeFilter", function(val) {
+  return PRINT_PDF_TYPE[val] || DEFAULT_FIELD;
+});
+Vue.filter("examTypeFilter", function(val) {
+  return EXAM_TYPE[val] || DEFAULT_FIELD;
+});
+Vue.filter("cardTypeFilter", function(val) {
+  return CARD_TYPE[val] || DEFAULT_FIELD;
+});
+Vue.filter("cardCreateMethodTypeFilter", function(val) {
+  return CARD_CREATE_METHOD_TYPE[val] || DEFAULT_FIELD;
+});
+Vue.filter("flowApproveOperationTypeFilter", function(val) {
+  return FLOW_APPROVE_OPERATION_TYPE[val] || "";
+});
+Vue.filter("flowTypeFilter", function(val) {
+  return FLOW_TYPE[val] || "";
+});