Browse Source

page framework

zhangjie 5 years ago
parent
commit
82f259f0a2
41 changed files with 1459 additions and 1518 deletions
  1. BIN
      src/assets/images/icon-circle-share.png
  2. 0 0
      src/assets/images/icon-confirm.png
  3. BIN
      src/assets/images/icon-copy.png
  4. 9 0
      src/assets/styles/adaptive.scss
  5. 0 1
      src/assets/styles/base.scss
  6. 86 5
      src/assets/styles/element-ui-costom.scss
  7. 8 4
      src/assets/styles/home.scss
  8. 48 5
      src/assets/styles/icons.scss
  9. 1 0
      src/assets/styles/index.scss
  10. 15 22
      src/constants/enumerate.js
  11. 35 5
      src/constants/navs.js
  12. 1 2
      src/main.js
  13. 26 10
      src/modules/base/api.js
  14. 2 2
      src/modules/base/components/ModifyData.vue
  15. 4 4
      src/modules/base/router.js
  16. 0 183
      src/modules/base/views/CardSettingManage.vue
  17. 3 171
      src/modules/base/views/PswdManage.vue
  18. 15 0
      src/modules/base/views/RuleManage.vue
  19. 81 90
      src/modules/base/views/UserManage.vue
  20. 54 16
      src/modules/exam-center/api.js
  21. 2 2
      src/modules/exam-center/components/ModifyData.vue
  22. 59 6
      src/modules/exam-center/router.js
  23. 182 0
      src/modules/exam-center/views/CardAudit.vue
  24. 0 183
      src/modules/exam-center/views/CardCheck.vue
  25. 98 100
      src/modules/exam-center/views/CardManage.vue
  26. 56 105
      src/modules/exam-center/views/DoneTask.vue
  27. 15 0
      src/modules/exam-center/views/DoneTaskDetail.vue
  28. 103 99
      src/modules/exam-center/views/ExamManage.vue
  29. 15 0
      src/modules/exam-center/views/ExamModify.vue
  30. 165 0
      src/modules/exam-center/views/ExamRomeDetail.vue
  31. 190 0
      src/modules/exam-center/views/ExamRomeStudentDetail.vue
  32. 71 103
      src/modules/exam-center/views/PrintManage.vue
  33. 56 105
      src/modules/exam-center/views/WaitTask.vue
  34. 15 0
      src/modules/exam-center/views/WaitTaskDetail.vue
  35. 3 6
      src/modules/login/api.js
  36. 0 10
      src/modules/login/router.js
  37. 0 136
      src/modules/login/views/ForgetPwd.vue
  38. 3 0
      src/plugins/mixins.js
  39. 1 0
      src/router.js
  40. 31 16
      src/views/Home.vue
  41. 6 127
      yarn.lock

BIN
src/assets/images/icon-circle-share.png


+ 0 - 0
src/assets/images/icon-great.png → src/assets/images/icon-confirm.png


BIN
src/assets/images/icon-copy.png


+ 9 - 0
src/assets/styles/adaptive.scss

@@ -0,0 +1,9 @@
+@media screen and (max-width: 1400px) {
+  .home-header {
+    .menu-list {
+      li {
+        width: 138px;
+      }
+    }
+  }
+}

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

@@ -116,7 +116,6 @@ body {
   -moz-osx-font-smoothing: grayscale;
   font-size: $--font-size-base;
   color: $--color-text-primary;
-  min-width: 1366px;
 }
 
 // color

+ 86 - 5
src/assets/styles/element-ui-costom.scss

@@ -62,11 +62,18 @@
   }
 }
 // form
-.el-form-item {
-  .el-form-item__error {
-    font-size: 12px;
-    font-weight: bold;
-    color: rgba(254, 108, 105, 1);
+.el-form {
+  &-item {
+    &__error {
+      font-size: 12px;
+      font-weight: bold;
+      color: rgba(254, 108, 105, 1);
+    }
+  }
+  &--inline {
+    .el-form-item {
+      margin-right: 20px;
+    }
   }
 }
 // input
@@ -93,6 +100,13 @@
 // button
 .el-button {
   border-radius: $--border-radius;
+  > .icon {
+    margin-right: 5px;
+  }
+  > span {
+    display: inline-block;
+    vertical-align: middle;
+  }
 }
 .el-button--primary {
   border-color: $--color-primary;
@@ -149,6 +163,73 @@
 .el-button + .el-button {
   margin-left: 18px;
 }
+.el-button--text + .el-button--text {
+  margin-left: 5px;
+}
 .el-button--text {
   color: $--color-text-regular;
+
+  &.btn-table-icon {
+    padding: 0;
+
+    &:hover {
+      transform: scale(1.2);
+    }
+  }
+}
+// table
+.el-table {
+  color: $--color-text-regular;
+  font-weight: bold;
+
+  &__header thead {
+    font-size: 16px;
+    color: $--color-text-primary;
+    font-weight: bold;
+  }
+  tr.el-table__row {
+    background-color: $--color-background;
+    &.el-table__row--striped {
+      td {
+        background-color: $--color-white;
+      }
+    }
+  }
+}
+
+// el-pagination
+.el-pagination-li {
+  width: 32px;
+  height: 32px;
+  border-radius: 50%;
+  overflow: hidden;
+  background-color: $--color-white;
+  border: 1px solid $--color-border;
+}
+.el-pagination {
+  &.is-background {
+    .btn-prev,
+    .btn-next {
+      color: $--color-text-regular;
+      margin: 0 13px;
+      @extend .el-pagination-li;
+    }
+    .btn-prev:disabled,
+    .btn-next:disabled {
+      background-color: $--color-background;
+    }
+
+    .el-pager li {
+      color: $--color-text-regular;
+      font-weight: bold;
+      margin: 0 5px;
+      line-height: 32px;
+
+      @extend .el-pagination-li;
+      &:not(.disabled).active {
+        color: #fff;
+        @extend .el-button--primary;
+      }
+    }
+  }
 }

+ 8 - 4
src/assets/styles/home.scss

@@ -21,7 +21,6 @@
   padding: 0 0 60px 240px;
   min-height: 100%;
   transition: padding-left 0.2s ease;
-  min-width: 1366px;
 }
 
 /* navs */
@@ -230,13 +229,18 @@
 
 /* part */
 .part-box {
-  border: 1px solid $--color-border;
   margin-bottom: 20px;
   background-color: #fff;
   border-radius: $--border-radius;
 
-  &.part-pad {
-    padding: 20px;
+  > .el-table {
+    border-radius: $--border-radius;
+    border: 1px solid $--color-border;
+  }
+
+  &-filter {
+    padding: 20px 20px 0;
+    border: 1px solid $--color-border;
   }
 }
 .part-title {

+ 48 - 5
src/assets/styles/icons.scss

@@ -78,14 +78,57 @@
     width: 10px;
     height: 10px;
   }
-  &-icon-circle-right {
+  &-circle-right {
     background-image: url(../images/icon-circle-right.png);
-    width: 20px;
-    height: 20px;
   }
   &-search {
     background-image: url(../images/icon-search.png);
-    width: 16px;
-    height: 16px;
+    width: 14px;
+    height: 14px;
+  }
+  &-download {
+    background-image: url(../images/icon-download.png);
+    width: 14px;
+    height: 14px;
+  }
+  &-share {
+    background-image: url(../images/icon-share.png);
+    width: 14px;
+    height: 14px;
+  }
+  &-plus {
+    background-image: url(../images/icon-plus.png);
+    width: 14px;
+    height: 14px;
+  }
+  &-edit {
+    background-image: url(../images/icon-edit.png);
+  }
+  &-delete {
+    background-image: url(../images/icon-delete.png);
+  }
+  &-confirm {
+    background-image: url(../images/icon-confirm.png);
+  }
+  &-checked {
+    background-image: url(../images/icon-checked.png);
+  }
+  &-copy {
+    background-image: url(../images/icon-copy.png);
+  }
+  &-modify {
+    background-image: url(../images/icon-modify.png);
+  }
+  &-circle-share {
+    background-image: url(../images/icon-circle-share.png);
+  }
+  &-circle-caret-right {
+    background-image: url(../images/icon-circle-caret-right.png);
+  }
+  &-circle-stop {
+    background-image: url(../images/icon-circle-stop.png);
+  }
+  &-circle-lock {
+    background-image: url(../images/icon-circle-lock.png);
   }
 }

+ 1 - 0
src/assets/styles/index.scss

@@ -8,3 +8,4 @@
 
 @import "./element-ui-costom.scss";
 // @import "./common-comp.scss";
+@import "./adaptive.scss";

+ 15 - 22
src/constants/enumerate.js

@@ -1,25 +1,3 @@
-// 性别
-export const SEX = {
-  M: "男",
-  W: "女"
-};
-
-// 年级
-export const GRADE = {
-  1: "一年级",
-  2: "二年级",
-  3: "三年级",
-  4: "四年级",
-  5: "五年级",
-  6: "六年级",
-  7: "初一",
-  8: "初二",
-  9: "初三",
-  10: "高一",
-  11: "高二",
-  12: "高三"
-};
-
 // 启用/禁用
 export const ABLE_TYPE = {
   DISABLE: "禁用",
@@ -31,3 +9,18 @@ export const GENDER_TYPE = {
   MALE: "男",
   FEMALE: "女"
 };
+// 打印状态
+export const PRINT_STATUS = {
+  0: "未打印",
+  1: "已打印"
+};
+// 撤回状态
+export const REVOKE_STATUS = {
+  0: "未撤回",
+  1: "已撤回"
+};
+// 审核状态
+export const AUDITING_STATUS = {
+  0: "未审核",
+  1: "已审核"
+};

+ 35 - 5
src/constants/navs.js

@@ -5,15 +5,45 @@ const navs = [
     children: [
       {
         title: "待办任务",
-        router: "WaitTask"
+        router: "WaitTask",
+        children: [
+          {
+            title: "任务详情",
+            router: "WaitTaskDetail"
+          }
+        ]
       },
       {
         title: "已办任务",
-        router: "DoneTask"
+        router: "DoneTask",
+        children: [
+          {
+            title: "任务详情",
+            router: "DoneTaskDetail"
+          }
+        ]
       },
       {
         title: "考试管理",
-        router: "ExamManage"
+        router: "ExamManage",
+        children: [
+          {
+            title: "考场详情",
+            router: "ExamRomeDetail"
+          },
+          {
+            title: "考生详情",
+            router: "ExamRomeStudentDetail"
+          },
+          {
+            title: "新增考试",
+            router: "ExamAdd"
+          },
+          {
+            title: "编辑考试",
+            router: "ExamEdit"
+          }
+        ]
       },
       {
         title: "题卡管理",
@@ -25,7 +55,7 @@ const navs = [
       },
       {
         title: "题卡审核",
-        router: "CardCheck"
+        router: "CardAudit"
       }
     ]
   },
@@ -63,7 +93,7 @@ const navs = [
       },
       {
         title: "规则管理",
-        router: "CardSettingManage"
+        router: "RuleManage"
       }
     ]
   }

+ 1 - 2
src/main.js

@@ -4,8 +4,8 @@ import axios from "axios";
 import App from "./App.vue";
 import router from "./router";
 import store from "./store";
-import GLOBAL from "./config";
 import globalVuePlugins from "./plugins/globalVuePlugins";
+import GLOBAL from "./config";
 
 // https://github.com/RobinCK/vue-ls
 import VueLocalStorage from "vue-ls";
@@ -18,7 +18,6 @@ Vue.use(VueLocalStorage, { storage: "session" });
 Vue.use(globalVuePlugins);
 
 Vue.prototype.GLOBAL = GLOBAL;
-
 Vue.config.productionTip = false;
 
 // route interceptor

+ 26 - 10
src/modules/base/api.js

@@ -1,19 +1,35 @@
 import { $get, $post } from "@/plugins/axios";
 
-// course-manage
-export const courseList = datas => {
-  return $get("/backend/course/listCoursePage", datas);
+// user-manage
+export const userListPage = datas => {
+  return $get("/api/print/basic/user/listPage", datas);
 };
-export const updateCourse = datas => {
+export const updateUser = datas => {
   if (datas.id) {
-    return $post("/backend/course/updateCourse", datas);
+    return $post("/api/print/basic/user/add", datas);
   } else {
-    return $post("/backend/course/addCourse", datas);
+    return $post("/api/print/basic/user/update", datas);
   }
 };
-export const deleteCourse = id => {
-  return $post("/backend/course/deleteCourse", { id });
+export const ableUser = datas => {
+  return $post("/api/print/basic/user/enable", datas);
 };
-export const updateCourseStatus = ({ id, status }) => {
-  return $post("/backend/course/updateCourseStatus", { id, status });
+export const updatePwd = datas => {
+  return $post("/api/print/basic/user/updatePwd", datas);
+};
+
+// rule-manage
+export const saveCardRule = datas => {
+  return $post("/api/print/basic/cardRule/add", datas);
+};
+export const saveWarningRule = datas => {
+  return $post("/api/print/basic/warnRule/add", datas);
+};
+export const importExtendColums = datas => {
+  return $post("/api/print/basic/cardRule/impExtendColums", datas);
+};
+
+// common
+export const uploadFile = datas => {
+  return $post("/api/print/basic/sys/saveAttachment", datas);
 };

+ 2 - 2
src/modules/base/components/ModifyData.vue

@@ -34,7 +34,7 @@
 </template>
 
 <script>
-import { updateCourse } from "../api";
+import { updateUser } from "../api";
 
 const initModalForm = {
   id: "",
@@ -98,7 +98,7 @@ export default {
 
       if (this.isSubmit) return;
       this.isSubmit = true;
-      const data = await updateCourse(this.modalForm).catch(() => {
+      const data = await updateUser(this.modalForm).catch(() => {
         this.isSubmit = false;
       });
 

+ 4 - 4
src/modules/base/router.js

@@ -1,4 +1,4 @@
-import CardSettingManage from "./views/CardSettingManage.vue";
+import RuleManage from "./views/RuleManage.vue";
 import UserManage from "./views/UserManage.vue";
 import PswdManage from "./views/PswdManage.vue";
 
@@ -14,8 +14,8 @@ export default [
     component: PswdManage
   },
   {
-    path: "/base/card-setting-manage",
-    name: "CardSettingManage",
-    component: CardSettingManage
+    path: "/base/rule-manage",
+    name: "RuleManage",
+    component: RuleManage
   }
 ];

+ 0 - 183
src/modules/base/views/CardSettingManage.vue

@@ -1,183 +0,0 @@
-<template>
-  <div class="data-manage">
-    <div class="part-box">
-      <el-form ref="FilterForm" label-position="left" label-width="80px" inline>
-        <el-form-item label="年级名称">
-          <el-input
-            v-model.trim="filter.name"
-            placeholder="年级名称模糊查询"
-            clearable
-          ></el-input>
-        </el-form-item>
-        <el-form-item label="年级状态">
-          <el-select v-model="filter.status" style="width: 150px;" clearable>
-            <el-option
-              v-for="(val, key) in ABLE_TYPE"
-              :key="key"
-              :value="key"
-              :label="val"
-            ></el-option>
-          </el-select>
-        </el-form-item>
-        <el-form-item label-width="0px">
-          <el-button type="primary" icon="ios-search" @click="toPage(1)"
-            >查询</el-button
-          >
-        </el-form-item>
-      </el-form>
-    </div>
-
-    <div class="part-box">
-      <div class="part-title">
-        <div class="part-title-infos">
-          <el-button type="primary" icon="md-add" @click="toAdd"
-            >新增</el-button
-          >
-        </div>
-      </div>
-      <el-table ref="TableList" :data="grades" border>
-        <el-table-column
-          type="index"
-          label="序号"
-          width="70"
-          align="center"
-          :index="indexMethod"
-        >
-        </el-table-column>
-        <el-table-column prop="name" label="年级名称" min-width="200">
-        </el-table-column>
-        <el-table-column prop="status" label="状态" min-width="200">
-          <template slot-scope="scope">
-            <span>{{ ABLE_TYPE[scope.row.status] }}</span>
-          </template>
-        </el-table-column>
-        <el-table-column min-width="200" align="center">
-          <template slot-scope="scope">
-            <el-button
-              size="mini"
-              type="primary"
-              icon="el-icon-edit"
-              @click="toEdit(scope.row)"
-              >编辑</el-button
-            >
-            <el-button
-              size="mini"
-              type="danger"
-              icon="el-icon-delete"
-              @click="toDelete(scope.row)"
-              >删除</el-button
-            >
-          </template>
-        </el-table-column>
-      </el-table>
-      <div class="part-page">
-        <el-pagination
-          background
-          layout="prev, pager, next"
-          :current-page="current"
-          :total="total"
-          :page-size="size"
-          @current-change="toPage"
-        >
-        </el-pagination>
-      </div>
-    </div>
-
-    <!-- modify-data -->
-    <modify-data
-      :instance="curCourse"
-      @modified="getList"
-      ref="ModifyData"
-    ></modify-data>
-  </div>
-</template>
-
-<script>
-import { ABLE_TYPE } from "@/constants/enumerate";
-import { courseList, deleteCourse } from "../api";
-import ModifyData from "../components/ModifyData";
-
-export default {
-  name: "data-manage",
-  components: { ModifyData },
-  data() {
-    return {
-      filter: {
-        name: "",
-        status: ""
-      },
-      current: 1,
-      size: this.GLOBAL.pageSize,
-      total: 0,
-      visible: false,
-      grades: [
-        {
-          id: "11",
-          name: "名称1",
-          status: "ENABLE"
-        },
-        {
-          id: "22",
-          name: "名称2",
-          status: "ENABLE"
-        },
-        {
-          id: "33",
-          name: "名称3",
-          status: "ENABLE"
-        }
-      ],
-      curCourse: {},
-      ABLE_TYPE
-    };
-  },
-  created() {
-    // this.getList();
-  },
-  methods: {
-    indexMethod(index) {
-      return (this.current - 1) * this.size + index + 1;
-    },
-    async getList() {
-      const datas = {
-        ...this.filter,
-        current: this.current,
-        size: this.size
-      };
-      const data = await courseList(datas);
-      this.grades = data.list.map(item => {
-        return {
-          id: item.id,
-          name: item.name,
-          status: item.status,
-          createTime: item.createTime
-        };
-      });
-      this.total = data.totalCount;
-    },
-    toPage(page) {
-      this.current = page;
-      this.getList();
-    },
-    toAdd() {
-      this.curCourse = {};
-      this.$refs.ModifyData.open();
-    },
-    toEdit(row) {
-      this.curCourse = row;
-      this.$refs.ModifyData.open();
-    },
-    toDelete(row) {
-      this.$confirm("确定要删除当前学校吗?", "删除警告", {
-        callback: async action => {
-          if (action !== "confirm") return;
-          await deleteCourse(row.id);
-          this.$message.success("删除成功!");
-          // 解决最后一项删除后的问题
-          this.deletePageLastItem();
-        }
-      });
-    }
-  }
-};
-</script>

+ 3 - 171
src/modules/base/views/PswdManage.vue

@@ -1,183 +1,15 @@
 <template>
   <div class="pswd-manage">
-    <div class="part-box">
-      <el-form ref="FilterForm" label-position="left" label-width="80px" inline>
-        <el-form-item label="年级名称">
-          <el-input
-            v-model.trim="filter.name"
-            placeholder="年级名称模糊查询"
-            clearable
-          ></el-input>
-        </el-form-item>
-        <el-form-item label="年级状态">
-          <el-select v-model="filter.status" style="width: 150px;" clearable>
-            <el-option
-              v-for="(val, key) in ABLE_TYPE"
-              :key="key"
-              :value="key"
-              :label="val"
-            ></el-option>
-          </el-select>
-        </el-form-item>
-        <el-form-item label-width="0px">
-          <el-button type="primary" icon="ios-search" @click="toPage(1)"
-            >查询</el-button
-          >
-        </el-form-item>
-      </el-form>
-    </div>
-
-    <div class="part-box">
-      <div class="part-title">
-        <div class="part-title-infos">
-          <el-button type="primary" icon="md-add" @click="toAdd"
-            >新增</el-button
-          >
-        </div>
-      </div>
-      <el-table ref="TableList" :data="grades" border>
-        <el-table-column
-          type="index"
-          label="序号"
-          width="70"
-          align="center"
-          :index="indexMethod"
-        >
-        </el-table-column>
-        <el-table-column prop="name" label="年级名称" min-width="200">
-        </el-table-column>
-        <el-table-column prop="status" label="状态" min-width="200">
-          <template slot-scope="scope">
-            <span>{{ ABLE_TYPE[scope.row.status] }}</span>
-          </template>
-        </el-table-column>
-        <el-table-column min-width="200" align="center">
-          <template slot-scope="scope">
-            <el-button
-              size="mini"
-              type="primary"
-              icon="el-icon-edit"
-              @click="toEdit(scope.row)"
-              >编辑</el-button
-            >
-            <el-button
-              size="mini"
-              type="danger"
-              icon="el-icon-delete"
-              @click="toDelete(scope.row)"
-              >删除</el-button
-            >
-          </template>
-        </el-table-column>
-      </el-table>
-      <div class="part-page">
-        <el-pagination
-          background
-          layout="prev, pager, next"
-          :current-page="current"
-          :total="total"
-          :page-size="size"
-          @current-change="toPage"
-        >
-        </el-pagination>
-      </div>
-    </div>
-
-    <!-- modify-data -->
-    <modify-data
-      :instance="curCourse"
-      @modified="getList"
-      ref="ModifyData"
-    ></modify-data>
+    pswd-manage
   </div>
 </template>
 
 <script>
-import { ABLE_TYPE } from "@/constants/enumerate";
-import { courseList, deleteCourse } from "../api";
-import ModifyData from "../components/ModifyData";
-
 export default {
   name: "pswd-manage",
-  components: { ModifyData },
   data() {
-    return {
-      filter: {
-        name: "",
-        status: ""
-      },
-      current: 1,
-      size: this.GLOBAL.pageSize,
-      total: 0,
-      visible: false,
-      grades: [
-        {
-          id: "11",
-          name: "名称1",
-          status: "ENABLE"
-        },
-        {
-          id: "22",
-          name: "名称2",
-          status: "ENABLE"
-        },
-        {
-          id: "33",
-          name: "名称3",
-          status: "ENABLE"
-        }
-      ],
-      curCourse: {},
-      ABLE_TYPE
-    };
-  },
-  created() {
-    // this.getList();
+    return {};
   },
-  methods: {
-    indexMethod(index) {
-      return (this.current - 1) * this.size + index + 1;
-    },
-    async getList() {
-      const datas = {
-        ...this.filter,
-        current: this.current,
-        size: this.size
-      };
-      const data = await courseList(datas);
-      this.grades = data.list.map(item => {
-        return {
-          id: item.id,
-          name: item.name,
-          status: item.status,
-          createTime: item.createTime
-        };
-      });
-      this.total = data.totalCount;
-    },
-    toPage(page) {
-      this.current = page;
-      this.getList();
-    },
-    toAdd() {
-      this.curCourse = {};
-      this.$refs.ModifyData.open();
-    },
-    toEdit(row) {
-      this.curCourse = row;
-      this.$refs.ModifyData.open();
-    },
-    toDelete(row) {
-      this.$confirm("确定要删除当前学校吗?", "删除警告", {
-        callback: async action => {
-          if (action !== "confirm") return;
-          await deleteCourse(row.id);
-          this.$message.success("删除成功!");
-          // 解决最后一项删除后的问题
-          this.deletePageLastItem();
-        }
-      });
-    }
-  }
+  methods: {}
 };
 </script>

+ 15 - 0
src/modules/base/views/RuleManage.vue

@@ -0,0 +1,15 @@
+<template>
+  <div class="rule-manage">
+    rule-manage
+  </div>
+</template>
+
+<script>
+export default {
+  name: "rule-manage",
+  data() {
+    return {};
+  },
+  methods: {}
+};
+</script>

+ 81 - 90
src/modules/base/views/UserManage.vue

@@ -1,16 +1,37 @@
 <template>
-  <div class="data-manage">
-    <div class="part-box">
-      <el-form ref="FilterForm" label-position="left" label-width="80px" inline>
-        <el-form-item label="年级名称">
+  <div class="user-manage">
+    <div class="part-box part-box-filter">
+      <el-form ref="FilterForm" label-position="left" label-width="85px" inline>
+        <el-form-item label="用户名:" label-width="75px">
           <el-input
-            v-model.trim="filter.name"
-            placeholder="年级名称模糊查询"
+            style="width: 142px;"
+            v-model.trim="filter.loginName"
+            placeholder="请输入内容"
             clearable
           ></el-input>
         </el-form-item>
-        <el-form-item label="年级状态">
-          <el-select v-model="filter.status" style="width: 150px;" clearable>
+        <el-form-item label="角色:" label-width="55px">
+          <el-select
+            v-model="filter.roleCode"
+            style="width: 142px;"
+            placeholder="请选择"
+            clearable
+          >
+            <el-option
+              v-for="item in roles"
+              :key="item.id"
+              :value="item.id"
+              :label="item.name"
+            ></el-option>
+          </el-select>
+        </el-form-item>
+        <el-form-item label="状态:" label-width="55px">
+          <el-select
+            v-model="filter.enable"
+            style="width: 142px;"
+            placeholder="请选择"
+            clearable
+          >
             <el-option
               v-for="(val, key) in ABLE_TYPE"
               :key="key"
@@ -19,54 +40,59 @@
             ></el-option>
           </el-select>
         </el-form-item>
+
         <el-form-item label-width="0px">
-          <el-button type="primary" icon="ios-search" @click="toPage(1)"
+          <el-button type="primary" icon="icon icon-search" @click="toPage(1)"
             >查询</el-button
           >
+          <el-button type="warning" icon="icon icon-share" @click="toPage(1)"
+            >导入</el-button
+          >
         </el-form-item>
       </el-form>
     </div>
 
     <div class="part-box">
-      <div class="part-title">
-        <div class="part-title-infos">
-          <el-button type="primary" icon="md-add" @click="toAdd"
-            >新增</el-button
-          >
-        </div>
-      </div>
-      <el-table ref="TableList" :data="grades" border>
+      <el-table ref="TableList" :data="users" border stripe>
         <el-table-column
           type="index"
           label="序号"
           width="70"
           align="center"
           :index="indexMethod"
-        >
-        </el-table-column>
-        <el-table-column prop="name" label="年级名称" min-width="200">
-        </el-table-column>
-        <el-table-column prop="status" label="状态" min-width="200">
-          <template slot-scope="scope">
-            <span>{{ ABLE_TYPE[scope.row.status] }}</span>
-          </template>
-        </el-table-column>
-        <el-table-column min-width="200" align="center">
+        ></el-table-column>
+        <el-table-column prop="login_name" label="用户名"></el-table-column>
+        <el-table-column prop="name" label="姓名"></el-table-column>
+        <el-table-column prop="roleName" label="角色"></el-table-column>
+        <el-table-column prop="courseName" label="科目"></el-table-column>
+        <el-table-column prop="enable" label="状态"></el-table-column>
+        <el-table-column label="操作" align="center">
           <template slot-scope="scope">
             <el-button
-              size="mini"
-              type="primary"
-              icon="el-icon-edit"
+              class="btn-table-icon"
+              type="text"
+              :icon="
+                scope.row.enable
+                  ? 'icon icon-circle-stop'
+                  : 'icon icon-circle-caret-right'
+              "
               @click="toEdit(scope.row)"
-              >编辑</el-button
-            >
+              :title="scope.row.enable ? '禁用' : '启用'"
+            ></el-button>
             <el-button
-              size="mini"
-              type="danger"
-              icon="el-icon-delete"
-              @click="toDelete(scope.row)"
-              >删除</el-button
-            >
+              class="btn-table-icon"
+              type="text"
+              icon="icon icon-edit"
+              @click="toEdit(scope.row)"
+              title="确认"
+            ></el-button>
+            <el-button
+              class="btn-table-icon"
+              type="text"
+              icon="icon icon-circle-lock"
+              @click="toEdit(scope.row)"
+              title="确认"
+            ></el-button>
           </template>
         </el-table-column>
       </el-table>
@@ -85,7 +111,7 @@
 
     <!-- modify-data -->
     <modify-data
-      :instance="curCourse"
+      :instance="curUser"
       @modified="getList"
       ref="ModifyData"
     ></modify-data>
@@ -94,41 +120,27 @@
 
 <script>
 import { ABLE_TYPE } from "@/constants/enumerate";
-import { courseList, deleteCourse } from "../api";
+import { userListPage } from "../api";
 import ModifyData from "../components/ModifyData";
 
 export default {
-  name: "data-manage",
+  name: "user-manage",
   components: { ModifyData },
   data() {
     return {
       filter: {
-        name: "",
-        status: ""
+        loginName: "",
+        roleCode: "",
+        enable: null
       },
       current: 1,
       size: this.GLOBAL.pageSize,
       total: 0,
       visible: false,
-      grades: [
-        {
-          id: "11",
-          name: "名称1",
-          status: "ENABLE"
-        },
-        {
-          id: "22",
-          name: "名称2",
-          status: "ENABLE"
-        },
-        {
-          id: "33",
-          name: "名称3",
-          status: "ENABLE"
-        }
-      ],
-      curCourse: {},
-      ABLE_TYPE
+      ABLE_TYPE,
+      roles: [],
+      users: [{ id: "" }],
+      curUser: {}
     };
   },
   created() {
@@ -141,42 +153,21 @@ export default {
     async getList() {
       const datas = {
         ...this.filter,
-        current: this.current,
-        size: this.size
+        pageNumber: this.current,
+        pageSize: this.size
       };
-      const data = await courseList(datas);
-      this.grades = data.list.map(item => {
-        return {
-          id: item.id,
-          name: item.name,
-          status: item.status,
-          createTime: item.createTime
-        };
-      });
-      this.total = data.totalCount;
+      data.enable *= 1;
+      const data = await userListPage(datas);
+      this.users = data.records;
+      this.total = data.total;
     },
     toPage(page) {
       this.current = page;
       this.getList();
     },
-    toAdd() {
-      this.curCourse = {};
-      this.$refs.ModifyData.open();
-    },
     toEdit(row) {
-      this.curCourse = row;
+      this.curUser = row;
       this.$refs.ModifyData.open();
-    },
-    toDelete(row) {
-      this.$confirm("确定要删除当前学校吗?", "删除警告", {
-        callback: async action => {
-          if (action !== "confirm") return;
-          await deleteCourse(row.id);
-          this.$message.success("删除成功!");
-          // 解决最后一项删除后的问题
-          this.deletePageLastItem();
-        }
-      });
     }
   }
 };

+ 54 - 16
src/modules/exam-center/api.js

@@ -1,19 +1,57 @@
 import { $get, $post } from "@/plugins/axios";
 
-// course-manage
-export const courseList = datas => {
-  return $get("/backend/course/listCoursePage", datas);
-};
-export const updateCourse = datas => {
-  if (datas.id) {
-    return $post("/backend/course/updateCourse", datas);
-  } else {
-    return $post("/backend/course/addCourse", datas);
-  }
-};
-export const deleteCourse = id => {
-  return $post("/backend/course/deleteCourse", { id });
-};
-export const updateCourseStatus = ({ id, status }) => {
-  return $post("/backend/course/updateCourseStatus", { id, status });
+// wait-manage
+export const waitTaskListPage = datas => {
+  return $get("/api/print/exam/notDone/listPage", datas);
+};
+export const waitTaskDetail = datas => {
+  return $get("/api/print/exam/notDone/detail", datas);
+};
+export const updateWaitTask = datas => {
+  return $post("/api/print/exam/notDone/draft", datas);
+};
+export const submitWaitTask = datas => {
+  return $post("/api/print/exam/notDone/submit", datas);
+};
+
+// done-task
+export const doneTaskListPage = datas => {
+  return $get("/api/print/exam/done/listPage", datas);
+};
+export const doneTaskDetail = datas => {
+  return $get("/api/print/exam/done/detail", datas);
+};
+// 撤回
+export const revokeDoneTask = id => {
+  return $get("/api/print/exam/done/revoke", { id });
+};
+
+// exam-manage
+export const examListPage = datas => {
+  return $get("/api/print/exam/listPage", datas);
+};
+export const examList = () => {
+  return $get("/api/print/exam/list", {});
+};
+export const createExam = datas => {
+  return $post("/api/print/exam/add", datas);
+};
+export const examRoomDetail = datas => {
+  return $get("/api/print/exam/detailRoomList", datas);
+};
+export const studentDetail = datas => {
+  return $get("/api/print/exam/detailStuentList", datas);
+};
+export const deleteExam = id => {
+  return $post("/api/print/exam/delete", { id });
+};
+
+// card-manage
+export const allCardList = datas => {
+  return $get("/api/print/exam/notDone/listCards", datas);
+};
+
+// print-manage
+export const printTaskListPage = datas => {
+  return $get("/api/print/manager/listPage", datas);
 };

+ 2 - 2
src/modules/exam-center/components/ModifyData.vue

@@ -34,7 +34,7 @@
 </template>
 
 <script>
-import { updateCourse } from "../api";
+import { updateWaitTask } from "../api";
 
 const initModalForm = {
   id: "",
@@ -98,7 +98,7 @@ export default {
 
       if (this.isSubmit) return;
       this.isSubmit = true;
-      const data = await updateCourse(this.modalForm).catch(() => {
+      const data = await updateWaitTask(this.modalForm).catch(() => {
         this.isSubmit = false;
       });
 

+ 59 - 6
src/modules/exam-center/router.js

@@ -1,8 +1,13 @@
 import WaitTask from "./views/WaitTask.vue";
-import CardCheck from "./views/CardCheck.vue";
+import WaitTaskDetail from "./views/WaitTaskDetail.vue";
+import CardAudit from "./views/CardAudit.vue";
 import PrintManage from "./views/PrintManage.vue";
 import DoneTask from "./views/DoneTask.vue";
+import DoneTaskDetail from "./views/DoneTaskDetail.vue";
 import ExamManage from "./views/ExamManage.vue";
+import ExamModify from "./views/ExamModify.vue";
+import ExamRomeDetail from "./views/ExamRomeDetail.vue";
+import ExamRomeStudentDetail from "./views/ExamRomeStudentDetail.vue";
 import CardManage from "./views/CardManage.vue";
 
 export default [
@@ -12,7 +17,15 @@ export default [
     component: DoneTask
   },
   {
-    path: "/exam-center/print-task",
+    path: "/exam-center/done-task-detail/:taskId",
+    name: "DoneTaskDetail",
+    component: DoneTaskDetail,
+    meta: {
+      relate: "DoneTask/DoneTaskDetail"
+    }
+  },
+  {
+    path: "/exam-center/print-manage",
     name: "PrintManage",
     component: PrintManage
   },
@@ -21,19 +34,59 @@ export default [
     name: "ExamManage",
     component: ExamManage
   },
+  {
+    path: "/exam-center/exam-add",
+    name: "ExamAdd",
+    component: ExamModify,
+    meta: {
+      relate: "ExamManage/ExamAdd"
+    }
+  },
+  {
+    path: "/exam-center/exam-edit/:examId",
+    name: "ExamEdit",
+    component: ExamModify,
+    meta: {
+      relate: "ExamManage/ExamEdit"
+    }
+  },
+  {
+    path: "/exam-center/exam-room-detail/:examId",
+    name: "ExamRomeDetail",
+    component: ExamRomeDetail,
+    meta: {
+      relate: "ExamManage/ExamRomeDetail"
+    }
+  },
+  {
+    path: "/exam-center/exam-room-student-detail/:examRoomId",
+    name: "ExamRomeStudentDetail",
+    component: ExamRomeStudentDetail,
+    meta: {
+      relate: "ExamManage/ExamRomeDetail/ExamRomeStudentDetail"
+    }
+  },
   {
     path: "/exam-center/card-manage",
     name: "CardManage",
     component: CardManage
   },
   {
-    path: "/exam-center/card-check",
-    name: "CardCheck",
-    component: CardCheck
+    path: "/exam-center/card-audit",
+    name: "CardAudit",
+    component: CardAudit
   },
   {
-    path: "/exam-center/wait-manage",
+    path: "/exam-center/wait-task",
     name: "WaitTask",
     component: WaitTask
+  },
+  {
+    path: "/exam-center/wait-task-detail/:taskId",
+    name: "WaitTaskDetail",
+    component: WaitTaskDetail,
+    meta: {
+      relate: "WaitTask/WaitTaskDetail"
+    }
   }
 ];

+ 182 - 0
src/modules/exam-center/views/CardAudit.vue

@@ -0,0 +1,182 @@
+<template>
+  <div class="card-check">
+    <div style="margin-bottom: 20px;">
+      <el-button
+        v-for="(val, key) in AUDITING_STATUS"
+        :key="key"
+        :type="key == filter.auditingStatus ? 'primary' : 'default'"
+        @click="selectAuditStatus(key)"
+        >{{ val }}</el-button
+      >
+    </div>
+    <div class="part-box part-box-filter">
+      <el-form ref="FilterForm" label-position="left" label-width="85px" inline>
+        <el-form-item label="学校名称:">
+          <el-select
+            v-model="filter.schoolId"
+            style="width: 142px;"
+            placeholder="请选择"
+            clearable
+          >
+            <el-option
+              v-for="item in schools"
+              :key="item.id"
+              :value="item.id"
+              :label="item.name"
+            ></el-option>
+          </el-select>
+        </el-form-item>
+        <el-form-item label="学院:" v-if="filter.auditingStatus == 0">
+          <el-select
+            v-model="filter.collegeId"
+            style="width: 142px;"
+            placeholder="请选择"
+            clearable
+          >
+            <el-option
+              v-for="item in colleges"
+              :key="item.id"
+              :value="item.id"
+              :label="item.name"
+            ></el-option>
+          </el-select>
+        </el-form-item>
+        <el-form-item label="标题:" label-width="55px">
+          <el-input
+            style="width: 210px;"
+            v-model.trim="filter.title"
+            placeholder="请输入内容"
+            clearable
+          ></el-input>
+        </el-form-item>
+
+        <el-form-item label-width="0px">
+          <el-button type="primary" icon="icon icon-search" @click="toPage(1)"
+            >查询</el-button
+          >
+          <el-button
+            type="warning"
+            icon="icon icon-download"
+            @click="toPage(1)"
+            v-if="filter.auditingStatus == 0"
+            >批量下载试卷文件</el-button
+          >
+        </el-form-item>
+      </el-form>
+    </div>
+
+    <div class="part-box">
+      <el-table ref="TableList" :data="examPages" border stripe>
+        <el-table-column prop="schoolName" label="学校名称"></el-table-column>
+        <el-table-column prop="title" label="学院"></el-table-column>
+        <el-table-column prop="printTime" label="题卡ID"></el-table-column>
+        <el-table-column prop="printTime" label="申请时间"></el-table-column>
+        <el-table-column prop="cardStatus" label="申请人"></el-table-column>
+        <el-table-column prop="overtime" label="标题"></el-table-column>
+        <el-table-column label="操作" align="center">
+          <template slot-scope="scope">
+            <el-button
+              class="btn-table-icon"
+              type="text"
+              icon="icon icon-modify"
+              @click="toEdit(scope.row)"
+              title="确认"
+              v-if="filter.auditingStatus == 0"
+            ></el-button>
+            <el-button
+              class="btn-table-icon"
+              type="text"
+              icon="icon icon-circle-right"
+              @click="toEdit(scope.row)"
+              title="确认"
+              v-else
+            ></el-button>
+          </template>
+        </el-table-column>
+      </el-table>
+      <div class="part-page">
+        <el-pagination
+          background
+          layout="prev, pager, next"
+          :current-page="current"
+          :total="total"
+          :page-size="size"
+          @current-change="toPage"
+        >
+        </el-pagination>
+      </div>
+    </div>
+
+    <!-- modify-data -->
+    <modify-data
+      :instance="curExam"
+      @modified="getList"
+      ref="ModifyData"
+    ></modify-data>
+  </div>
+</template>
+
+<script>
+import { AUDITING_STATUS } from "@/constants/enumerate";
+import { printTaskListPage, examList } from "../api";
+import ModifyData from "../components/ModifyData";
+
+export default {
+  name: "card-check",
+  components: { ModifyData },
+  data() {
+    return {
+      filter: {
+        auditingStatus: 0,
+        cardId: "",
+        schoolId: "",
+        collegeId: ""
+      },
+      current: 1,
+      size: this.GLOBAL.pageSize,
+      total: 0,
+      visible: false,
+      AUDITING_STATUS,
+      schools: [],
+      colleges: [],
+      examPages: [{ id: "" }],
+      curExam: {}
+    };
+  },
+  created() {
+    // this.getList();
+  },
+  methods: {
+    async getList() {
+      const datas = {
+        ...this.filter,
+        pageNumber: this.current,
+        pageSize: this.size
+      };
+      const data = await printTaskListPage(datas);
+      this.examPages = data.records;
+      this.total = data.total;
+    },
+    toPage(page) {
+      this.current = page;
+      this.getList();
+    },
+    async getExamList() {
+      const data = await examList();
+      this.exams = data.records.map(item => {
+        return {
+          id: item.examCode,
+          name: item.examName
+        };
+      });
+    },
+    selectAuditStatus(val) {
+      this.filter.auditingStatus = val * 1;
+    },
+    toEdit(row) {
+      this.curExam = row;
+      this.$refs.ModifyData.open();
+    }
+  }
+};
+</script>

+ 0 - 183
src/modules/exam-center/views/CardCheck.vue

@@ -1,183 +0,0 @@
-<template>
-  <div class="data-manage">
-    <div class="part-box">
-      <el-form ref="FilterForm" label-position="left" label-width="80px" inline>
-        <el-form-item label="年级名称">
-          <el-input
-            v-model.trim="filter.name"
-            placeholder="年级名称模糊查询"
-            clearable
-          ></el-input>
-        </el-form-item>
-        <el-form-item label="年级状态">
-          <el-select v-model="filter.status" style="width: 150px;" clearable>
-            <el-option
-              v-for="(val, key) in ABLE_TYPE"
-              :key="key"
-              :value="key"
-              :label="val"
-            ></el-option>
-          </el-select>
-        </el-form-item>
-        <el-form-item label-width="0px">
-          <el-button type="primary" icon="ios-search" @click="toPage(1)"
-            >查询</el-button
-          >
-        </el-form-item>
-      </el-form>
-    </div>
-
-    <div class="part-box">
-      <div class="part-title">
-        <div class="part-title-infos">
-          <el-button type="primary" icon="md-add" @click="toAdd"
-            >新增</el-button
-          >
-        </div>
-      </div>
-      <el-table ref="TableList" :data="grades" border>
-        <el-table-column
-          type="index"
-          label="序号"
-          width="70"
-          align="center"
-          :index="indexMethod"
-        >
-        </el-table-column>
-        <el-table-column prop="name" label="年级名称" min-width="200">
-        </el-table-column>
-        <el-table-column prop="status" label="状态" min-width="200">
-          <template slot-scope="scope">
-            <span>{{ ABLE_TYPE[scope.row.status] }}</span>
-          </template>
-        </el-table-column>
-        <el-table-column min-width="200" align="center">
-          <template slot-scope="scope">
-            <el-button
-              size="mini"
-              type="primary"
-              icon="el-icon-edit"
-              @click="toEdit(scope.row)"
-              >编辑</el-button
-            >
-            <el-button
-              size="mini"
-              type="danger"
-              icon="el-icon-delete"
-              @click="toDelete(scope.row)"
-              >删除</el-button
-            >
-          </template>
-        </el-table-column>
-      </el-table>
-      <div class="part-page">
-        <el-pagination
-          background
-          layout="prev, pager, next"
-          :current-page="current"
-          :total="total"
-          :page-size="size"
-          @current-change="toPage"
-        >
-        </el-pagination>
-      </div>
-    </div>
-
-    <!-- modify-data -->
-    <modify-data
-      :instance="curCourse"
-      @modified="getList"
-      ref="ModifyData"
-    ></modify-data>
-  </div>
-</template>
-
-<script>
-import { ABLE_TYPE } from "@/constants/enumerate";
-import { courseList, deleteCourse } from "../api";
-import ModifyData from "../components/ModifyData";
-
-export default {
-  name: "data-manage",
-  components: { ModifyData },
-  data() {
-    return {
-      filter: {
-        name: "",
-        status: ""
-      },
-      current: 1,
-      size: this.GLOBAL.pageSize,
-      total: 0,
-      visible: false,
-      grades: [
-        {
-          id: "11",
-          name: "名称1",
-          status: "ENABLE"
-        },
-        {
-          id: "22",
-          name: "名称2",
-          status: "ENABLE"
-        },
-        {
-          id: "33",
-          name: "名称3",
-          status: "ENABLE"
-        }
-      ],
-      curCourse: {},
-      ABLE_TYPE
-    };
-  },
-  created() {
-    // this.getList();
-  },
-  methods: {
-    indexMethod(index) {
-      return (this.current - 1) * this.size + index + 1;
-    },
-    async getList() {
-      const datas = {
-        ...this.filter,
-        current: this.current,
-        size: this.size
-      };
-      const data = await courseList(datas);
-      this.grades = data.list.map(item => {
-        return {
-          id: item.id,
-          name: item.name,
-          status: item.status,
-          createTime: item.createTime
-        };
-      });
-      this.total = data.totalCount;
-    },
-    toPage(page) {
-      this.current = page;
-      this.getList();
-    },
-    toAdd() {
-      this.curCourse = {};
-      this.$refs.ModifyData.open();
-    },
-    toEdit(row) {
-      this.curCourse = row;
-      this.$refs.ModifyData.open();
-    },
-    toDelete(row) {
-      this.$confirm("确定要删除当前学校吗?", "删除警告", {
-        callback: async action => {
-          if (action !== "confirm") return;
-          await deleteCourse(row.id);
-          this.$message.success("删除成功!");
-          // 解决最后一项删除后的问题
-          this.deletePageLastItem();
-        }
-      });
-    }
-  }
-};
-</script>

+ 98 - 100
src/modules/exam-center/views/CardManage.vue

@@ -1,72 +1,100 @@
 <template>
-  <div class="data-manage">
-    <div class="part-box">
-      <el-form ref="FilterForm" label-position="left" label-width="80px" inline>
-        <el-form-item label="年级名称">
-          <el-input
-            v-model.trim="filter.name"
-            placeholder="年级名称模糊查询"
+  <div class="card-check">
+    <div class="part-box part-box-filter">
+      <el-form ref="FilterForm" label-position="left" label-width="85px" inline>
+        <el-form-item label="审核状态:">
+          <el-select
+            v-model="filter.auditingStatus"
+            style="width: 142px;"
+            placeholder="请选择"
             clearable
-          ></el-input>
-        </el-form-item>
-        <el-form-item label="年级状态">
-          <el-select v-model="filter.status" style="width: 150px;" clearable>
+          >
             <el-option
-              v-for="(val, key) in ABLE_TYPE"
+              v-for="(val, key) in AUDITING_STATUS"
               :key="key"
               :value="key"
               :label="val"
             ></el-option>
           </el-select>
         </el-form-item>
+        <el-form-item label="印刷时间:">
+          <el-date-picker
+            v-model="filter.printTime"
+            type="date"
+            placeholder="请选择日期"
+          >
+          </el-date-picker>
+        </el-form-item>
+        <el-form-item label="标题:" label-width="55px">
+          <el-input
+            style="width: 210px;"
+            v-model.trim="filter.title"
+            placeholder="请输入内容"
+            clearable
+          ></el-input>
+        </el-form-item>
+
         <el-form-item label-width="0px">
-          <el-button type="primary" icon="ios-search" @click="toPage(1)"
+          <el-button type="primary" icon="icon icon-search" @click="toPage(1)"
             >查询</el-button
           >
+          <el-button type="warning" icon="icon icon-plus" @click="toPage(1)"
+            >创建题卡</el-button
+          >
         </el-form-item>
       </el-form>
     </div>
 
     <div class="part-box">
-      <div class="part-title">
-        <div class="part-title-infos">
-          <el-button type="primary" icon="md-add" @click="toAdd"
-            >新增</el-button
-          >
-        </div>
-      </div>
-      <el-table ref="TableList" :data="grades" border>
-        <el-table-column
-          type="index"
-          label="序号"
-          width="70"
-          align="center"
-          :index="indexMethod"
-        >
-        </el-table-column>
-        <el-table-column prop="name" label="年级名称" min-width="200">
-        </el-table-column>
-        <el-table-column prop="status" label="状态" min-width="200">
+      <el-table ref="TableList" :data="examPages" border stripe>
+        <el-table-column prop="id" label="题目ID"></el-table-column>
+        <el-table-column label="科目(代码)">
           <template slot-scope="scope">
-            <span>{{ ABLE_TYPE[scope.row.status] }}</span>
+            <span>{{ scope.row.courseName }}({{ scope.row.courseCode }})</span>
           </template>
         </el-table-column>
-        <el-table-column min-width="200" align="center">
+        <el-table-column prop="title" label="标题"></el-table-column>
+        <el-table-column prop="printTime" label="打印时间"></el-table-column>
+        <el-table-column prop="cardStatus" label="处理节点"></el-table-column>
+        <el-table-column prop="overtime" label="剩余时间"></el-table-column>
+        <el-table-column
+          prop="auditingTime"
+          label="提交审核时间"
+        ></el-table-column>
+        <el-table-column
+          prop="auditingStatus"
+          label="审核状态"
+        ></el-table-column>
+        <el-table-column label="操作" align="center">
           <template slot-scope="scope">
             <el-button
-              size="mini"
-              type="primary"
-              icon="el-icon-edit"
+              class="btn-table-icon"
+              type="text"
+              icon="icon icon-edit"
+              @click="toEdit(scope.row)"
+              title="确认"
+            ></el-button>
+            <el-button
+              class="btn-table-icon"
+              type="text"
+              icon="icon icon-delete"
               @click="toEdit(scope.row)"
-              >编辑</el-button
-            >
+              title="确认"
+            ></el-button>
             <el-button
-              size="mini"
-              type="danger"
-              icon="el-icon-delete"
-              @click="toDelete(scope.row)"
-              >删除</el-button
-            >
+              class="btn-table-icon"
+              type="text"
+              icon="icon icon-circle-share"
+              @click="toEdit(scope.row)"
+              title="确认"
+            ></el-button>
+            <el-button
+              class="btn-table-icon"
+              type="text"
+              icon="icon icon-copy"
+              @click="toEdit(scope.row)"
+              title="复制"
+            ></el-button>
           </template>
         </el-table-column>
       </el-table>
@@ -85,7 +113,7 @@
 
     <!-- modify-data -->
     <modify-data
-      :instance="curCourse"
+      :instance="curExam"
       @modified="getList"
       ref="ModifyData"
     ></modify-data>
@@ -93,90 +121,60 @@
 </template>
 
 <script>
-import { ABLE_TYPE } from "@/constants/enumerate";
-import { courseList, deleteCourse } from "../api";
+import { AUDITING_STATUS } from "@/constants/enumerate";
+import { printTaskListPage, examList } from "../api";
 import ModifyData from "../components/ModifyData";
 
 export default {
-  name: "data-manage",
+  name: "card-check",
   components: { ModifyData },
   data() {
     return {
       filter: {
-        name: "",
-        status: ""
+        title: "",
+        auditingStatus: "",
+        printTime: ""
       },
       current: 1,
       size: this.GLOBAL.pageSize,
       total: 0,
       visible: false,
-      grades: [
-        {
-          id: "11",
-          name: "名称1",
-          status: "ENABLE"
-        },
-        {
-          id: "22",
-          name: "名称2",
-          status: "ENABLE"
-        },
-        {
-          id: "33",
-          name: "名称3",
-          status: "ENABLE"
-        }
-      ],
-      curCourse: {},
-      ABLE_TYPE
+      AUDITING_STATUS,
+      exams: [],
+      examPages: [{ id: "" }],
+      curExam: {}
     };
   },
   created() {
     // this.getList();
   },
   methods: {
-    indexMethod(index) {
-      return (this.current - 1) * this.size + index + 1;
-    },
     async getList() {
       const datas = {
         ...this.filter,
-        current: this.current,
-        size: this.size
+        pageNumber: this.current,
+        pageSize: this.size
       };
-      const data = await courseList(datas);
-      this.grades = data.list.map(item => {
-        return {
-          id: item.id,
-          name: item.name,
-          status: item.status,
-          createTime: item.createTime
-        };
-      });
-      this.total = data.totalCount;
+      const data = await printTaskListPage(datas);
+      this.examPages = data.records;
+      this.total = data.total;
     },
     toPage(page) {
       this.current = page;
       this.getList();
     },
-    toAdd() {
-      this.curCourse = {};
-      this.$refs.ModifyData.open();
+    async getExamList() {
+      const data = await examList();
+      this.exams = data.records.map(item => {
+        return {
+          id: item.examCode,
+          name: item.examName
+        };
+      });
     },
     toEdit(row) {
-      this.curCourse = row;
+      this.curExam = row;
       this.$refs.ModifyData.open();
-    },
-    toDelete(row) {
-      this.$confirm("确定要删除当前学校吗?", "删除警告", {
-        callback: async action => {
-          if (action !== "confirm") return;
-          await deleteCourse(row.id);
-          this.$message.success("删除成功!");
-          // 解决最后一项删除后的问题
-          this.deletePageLastItem();
-        }
-      });
     }
   }
 };

+ 56 - 105
src/modules/exam-center/views/DoneTask.vue

@@ -1,26 +1,24 @@
 <template>
-  <div class="data-manage">
-    <div class="part-box">
-      <el-form ref="FilterForm" label-position="left" label-width="80px" inline>
-        <el-form-item label="年级名称">
-          <el-input
-            v-model.trim="filter.name"
-            placeholder="年级名称模糊查询"
+  <div class="done-task">
+    <div class="part-box part-box-filter">
+      <el-form ref="FilterForm" label-position="left" label-width="85px" inline>
+        <el-form-item label="考试名称:">
+          <el-select
+            v-model="filter.examId"
+            style="width: 315px;"
+            placeholder="请选择"
             clearable
-          ></el-input>
-        </el-form-item>
-        <el-form-item label="年级状态">
-          <el-select v-model="filter.status" style="width: 150px;" clearable>
+          >
             <el-option
-              v-for="(val, key) in ABLE_TYPE"
-              :key="key"
-              :value="key"
-              :label="val"
+              v-for="item in exams"
+              :key="item.id"
+              :value="item.id"
+              :label="item.name"
             ></el-option>
           </el-select>
         </el-form-item>
         <el-form-item label-width="0px">
-          <el-button type="primary" icon="ios-search" @click="toPage(1)"
+          <el-button type="primary" icon="icon icon-search" @click="toPage(1)"
             >查询</el-button
           >
         </el-form-item>
@@ -28,45 +26,28 @@
     </div>
 
     <div class="part-box">
-      <div class="part-title">
-        <div class="part-title-infos">
-          <el-button type="primary" icon="md-add" @click="toAdd"
-            >新增</el-button
-          >
-        </div>
-      </div>
-      <el-table ref="TableList" :data="grades" border>
-        <el-table-column
-          type="index"
-          label="序号"
-          width="70"
-          align="center"
-          :index="indexMethod"
-        >
-        </el-table-column>
-        <el-table-column prop="name" label="年级名称" min-width="200">
-        </el-table-column>
-        <el-table-column prop="status" label="状态" min-width="200">
+      <el-table ref="TableList" :data="tasks" border stripe>
+        <el-table-column prop="id" label="考试ID"></el-table-column>
+        <el-table-column prop="examName" label="考试名称"></el-table-column>
+        <el-table-column label="科目名称(ID)">
           <template slot-scope="scope">
-            <span>{{ ABLE_TYPE[scope.row.status] }}</span>
+            <span>{{ scope.row.courseName }}({{ scope.row.courseCode }})</span>
           </template>
         </el-table-column>
-        <el-table-column min-width="200" align="center">
+        <el-table-column prop="paperStatus" label="试卷"></el-table-column>
+        <el-table-column prop="cardStatus" label="答题卡"></el-table-column>
+        <el-table-column prop="createTime" label="创建时间"></el-table-column>
+        <el-table-column prop="printStatus" label="印刷状态"></el-table-column>
+        <el-table-column prop="revokeStatus" label="撤回状态"></el-table-column>
+        <el-table-column label="操作" align="center">
           <template slot-scope="scope">
             <el-button
-              size="mini"
-              type="primary"
-              icon="el-icon-edit"
-              @click="toEdit(scope.row)"
-              >编辑</el-button
-            >
-            <el-button
-              size="mini"
-              type="danger"
-              icon="el-icon-delete"
-              @click="toDelete(scope.row)"
-              >删除</el-button
-            >
+              class="btn-table-icon"
+              type="text"
+              icon="icon icon-circle-right"
+              @click="toDetail(scope.row)"
+              title="详情"
+            ></el-button>
           </template>
         </el-table-column>
       </el-table>
@@ -85,7 +66,7 @@
 
     <!-- modify-data -->
     <modify-data
-      :instance="curCourse"
+      :instance="curTask"
       @modified="getList"
       ref="ModifyData"
     ></modify-data>
@@ -93,88 +74,58 @@
 </template>
 
 <script>
-import { ABLE_TYPE } from "@/constants/enumerate";
-import { courseList, deleteCourse } from "../api";
+import { doneTaskListPage, examList } from "../api";
 import ModifyData from "../components/ModifyData";
 
 export default {
-  name: "data-manage",
+  name: "done-task",
   components: { ModifyData },
   data() {
     return {
       filter: {
-        name: "",
-        status: ""
+        examId: ""
       },
       current: 1,
       size: this.GLOBAL.pageSize,
       total: 0,
       visible: false,
-      grades: [
-        {
-          id: "11",
-          name: "名称1",
-          status: "ENABLE"
-        },
-        {
-          id: "22",
-          name: "名称2",
-          status: "ENABLE"
-        },
-        {
-          id: "33",
-          name: "名称3",
-          status: "ENABLE"
-        }
-      ],
-      curCourse: {},
-      ABLE_TYPE
+      exams: [],
+      tasks: [{ id: "2" }],
+      curTask: {}
     };
   },
   created() {
     // this.getList();
   },
   methods: {
-    indexMethod(index) {
-      return (this.current - 1) * this.size + index + 1;
-    },
     async getList() {
       const datas = {
         ...this.filter,
-        current: this.current,
-        size: this.size
+        pageNumber: this.current,
+        pageSize: this.size
       };
-      const data = await courseList(datas);
-      this.grades = data.list.map(item => {
-        return {
-          id: item.id,
-          name: item.name,
-          status: item.status,
-          createTime: item.createTime
-        };
-      });
-      this.total = data.totalCount;
+      const data = await doneTaskListPage(datas);
+      this.tasks = data.records;
+      this.total = data.total;
     },
     toPage(page) {
       this.current = page;
       this.getList();
     },
-    toAdd() {
-      this.curCourse = {};
-      this.$refs.ModifyData.open();
-    },
-    toEdit(row) {
-      this.curCourse = row;
-      this.$refs.ModifyData.open();
+    async getExamList() {
+      const data = await examList();
+      this.exams = data.records.map(item => {
+        return {
+          id: item.examCode,
+          name: item.examName
+        };
+      });
     },
-    toDelete(row) {
-      this.$confirm("确定要删除当前学校吗?", "删除警告", {
-        callback: async action => {
-          if (action !== "confirm") return;
-          await deleteCourse(row.id);
-          this.$message.success("删除成功!");
-          // 解决最后一项删除后的问题
-          this.deletePageLastItem();
+    toDetail(row) {
+      this.$router.push({
+        name: "DoneTaskDetail",
+        params: {
+          taskId: row.id
         }
       });
     }

+ 15 - 0
src/modules/exam-center/views/DoneTaskDetail.vue

@@ -0,0 +1,15 @@
+<template>
+  <div class="done-task-detail">
+    done-task-detail
+  </div>
+</template>
+
+<script>
+export default {
+  name: "done-task-detail",
+  data() {
+    return {};
+  },
+  methods: {}
+};
+</script>

+ 103 - 99
src/modules/exam-center/views/ExamManage.vue

@@ -1,72 +1,89 @@
 <template>
-  <div class="data-manage">
-    <div class="part-box">
-      <el-form ref="FilterForm" label-position="left" label-width="80px" inline>
-        <el-form-item label="年级名称">
-          <el-input
-            v-model.trim="filter.name"
-            placeholder="年级名称模糊查询"
+  <div class="exam-manage">
+    <div class="part-box part-box-filter">
+      <el-form ref="FilterForm" label-position="left" label-width="85px" inline>
+        <el-form-item label="考试名称:">
+          <el-select
+            v-model="filter.examId"
+            style="width: 193px;"
+            placeholder="请选择"
             clearable
-          ></el-input>
+          >
+            <el-option
+              v-for="item in exams"
+              :key="item.id"
+              :value="item.id"
+              :label="item.name"
+            ></el-option>
+          </el-select>
         </el-form-item>
-        <el-form-item label="年级状态">
-          <el-select v-model="filter.status" style="width: 150px;" clearable>
+        <el-form-item label="打印状态:">
+          <el-select
+            v-model="filter.printStatus"
+            style="width: 140px;"
+            placeholder="请选择"
+            clearable
+          >
             <el-option
-              v-for="(val, key) in ABLE_TYPE"
+              v-for="(val, key) in PRINT_STATUS"
               :key="key"
               :value="key"
               :label="val"
             ></el-option>
           </el-select>
         </el-form-item>
+        <el-form-item label="打印时间:">
+          <el-date-picker
+            v-model="filter.printTime"
+            type="date"
+            placeholder="请选择日期"
+          >
+          </el-date-picker>
+        </el-form-item>
         <el-form-item label-width="0px">
-          <el-button type="primary" icon="ios-search" @click="toPage(1)"
+          <el-button type="primary" icon="icon icon-search" @click="toPage(1)"
             >查询</el-button
           >
+          <el-button type="warning" icon="icon icon-plus" @click="toAdd"
+            >新建考试</el-button
+          >
         </el-form-item>
       </el-form>
     </div>
 
     <div class="part-box">
-      <div class="part-title">
-        <div class="part-title-infos">
-          <el-button type="primary" icon="md-add" @click="toAdd"
-            >新增</el-button
-          >
-        </div>
-      </div>
-      <el-table ref="TableList" :data="grades" border>
-        <el-table-column
-          type="index"
-          label="序号"
-          width="70"
-          align="center"
-          :index="indexMethod"
-        >
-        </el-table-column>
-        <el-table-column prop="name" label="年级名称" min-width="200">
-        </el-table-column>
-        <el-table-column prop="status" label="状态" min-width="200">
-          <template slot-scope="scope">
-            <span>{{ ABLE_TYPE[scope.row.status] }}</span>
-          </template>
-        </el-table-column>
-        <el-table-column min-width="200" align="center">
+      <el-table ref="TableList" :data="examPages" border stripe>
+        <el-table-column prop="id" label="考试ID"></el-table-column>
+        <el-table-column prop="examName" label="考试名称"></el-table-column>
+        <el-table-column prop="paperStatus" label="开始时间"></el-table-column>
+        <el-table-column prop="cardStatus" label="打印时间"></el-table-column>
+        <el-table-column prop="createTime" label="创建人"></el-table-column>
+        <el-table-column prop="createTime" label="创建时间"></el-table-column>
+        <el-table-column prop="printStatus" label="印刷状态"></el-table-column>
+        <el-table-column prop="revokeStatus" label="完成时间"></el-table-column>
+        <el-table-column label="操作" align="center">
           <template slot-scope="scope">
             <el-button
-              size="mini"
-              type="primary"
-              icon="el-icon-edit"
+              class="btn-table-icon"
+              type="text"
+              icon="icon icon-edit"
+              @click="toEdit(scope.row)"
+              title="编辑"
+            ></el-button>
+            <el-button
+              class="btn-table-icon"
+              type="text"
+              icon="icon icon-delete"
               @click="toEdit(scope.row)"
-              >编辑</el-button
-            >
+              title="删除"
+            ></el-button>
             <el-button
-              size="mini"
-              type="danger"
-              icon="el-icon-delete"
-              @click="toDelete(scope.row)"
-              >删除</el-button
-            >
+              class="btn-table-icon"
+              type="text"
+              icon="icon icon-circle-right"
+              @click="toDetail(scope.row)"
+              title="详情"
+            ></el-button>
           </template>
         </el-table-column>
       </el-table>
@@ -85,7 +102,7 @@
 
     <!-- modify-data -->
     <modify-data
-      :instance="curCourse"
+      :instance="curExam"
       @modified="getList"
       ref="ModifyData"
     ></modify-data>
@@ -93,88 +110,75 @@
 </template>
 
 <script>
-import { ABLE_TYPE } from "@/constants/enumerate";
-import { courseList, deleteCourse } from "../api";
+import { PRINT_STATUS } from "@/constants/enumerate";
+import { examListPage, examList } from "../api";
 import ModifyData from "../components/ModifyData";
 
 export default {
-  name: "data-manage",
+  name: "exam-manage",
   components: { ModifyData },
   data() {
     return {
       filter: {
-        name: "",
-        status: ""
+        examId: "",
+        printStatus: "",
+        printTime: ""
       },
       current: 1,
       size: this.GLOBAL.pageSize,
       total: 0,
       visible: false,
-      grades: [
-        {
-          id: "11",
-          name: "名称1",
-          status: "ENABLE"
-        },
-        {
-          id: "22",
-          name: "名称2",
-          status: "ENABLE"
-        },
-        {
-          id: "33",
-          name: "名称3",
-          status: "ENABLE"
-        }
-      ],
-      curCourse: {},
-      ABLE_TYPE
+      PRINT_STATUS,
+      exams: [],
+      examPages: [{ id: "1" }],
+      curExam: {}
     };
   },
   created() {
     // this.getList();
   },
   methods: {
-    indexMethod(index) {
-      return (this.current - 1) * this.size + index + 1;
-    },
     async getList() {
       const datas = {
         ...this.filter,
-        current: this.current,
-        size: this.size
+        pageNumber: this.current,
+        pageSize: this.size
       };
-      const data = await courseList(datas);
-      this.grades = data.list.map(item => {
-        return {
-          id: item.id,
-          name: item.name,
-          status: item.status,
-          createTime: item.createTime
-        };
-      });
-      this.total = data.totalCount;
+      const data = await examListPage(datas);
+      this.examPages = data.records;
+      this.total = data.total;
     },
     toPage(page) {
       this.current = page;
       this.getList();
     },
+    async getExamList() {
+      const data = await examList();
+      this.exams = data.records.map(item => {
+        return {
+          id: item.examCode,
+          name: item.examName
+        };
+      });
+    },
     toAdd() {
-      this.curCourse = {};
-      this.$refs.ModifyData.open();
+      this.$router.push({
+        name: "ExamAdd"
+      });
     },
     toEdit(row) {
-      this.curCourse = row;
-      this.$refs.ModifyData.open();
+      this.$router.push({
+        name: "ExamEdit",
+        params: {
+          examId: row.id
+        }
+      });
     },
-    toDelete(row) {
-      this.$confirm("确定要删除当前学校吗?", "删除警告", {
-        callback: async action => {
-          if (action !== "confirm") return;
-          await deleteCourse(row.id);
-          this.$message.success("删除成功!");
-          // 解决最后一项删除后的问题
-          this.deletePageLastItem();
+    toDetail(row) {
+      this.$router.push({
+        name: "ExamRomeDetail",
+        params: {
+          examId: "1"
         }
       });
     }

+ 15 - 0
src/modules/exam-center/views/ExamModify.vue

@@ -0,0 +1,15 @@
+<template>
+  <div class="exam-modify">
+    exam-modify
+  </div>
+</template>
+
+<script>
+export default {
+  name: "exam-modify",
+  data() {
+    return {};
+  },
+  methods: {}
+};
+</script>

+ 165 - 0
src/modules/exam-center/views/ExamRomeDetail.vue

@@ -0,0 +1,165 @@
+<template>
+  <div class="exam-room-detail">
+    <div class="part-box part-box-filter">
+      <el-form ref="FilterForm" label-position="left" label-width="85px" inline>
+        <el-form-item label="考试名称:">
+          <el-select
+            v-model="filter.examId"
+            style="width: 193px;"
+            placeholder="请选择"
+            clearable
+          >
+            <el-option
+              v-for="item in exams"
+              :key="item.id"
+              :value="item.id"
+              :label="item.name"
+            ></el-option>
+          </el-select>
+        </el-form-item>
+        <el-form-item label="场次ID:" label-width="75px">
+          <el-select
+            v-model="filter.examId"
+            style="width: 193px;"
+            placeholder="请选择"
+            clearable
+          >
+            <el-option
+              v-for="item in exams"
+              :key="item.id"
+              :value="item.id"
+              :label="item.name"
+            ></el-option>
+          </el-select>
+        </el-form-item>
+        <el-form-item label="考点:" label-width="55px">
+          <el-select
+            v-model="filter.examId"
+            style="width: 193px;"
+            placeholder="请选择"
+            clearable
+          >
+            <el-option
+              v-for="item in exams"
+              :key="item.id"
+              :value="item.id"
+              :label="item.name"
+            ></el-option>
+          </el-select>
+        </el-form-item>
+        <el-form-item label-width="0px">
+          <el-button type="primary" icon="icon icon-search" @click="toPage(1)"
+            >查询</el-button
+          >
+          <el-button @click="goback">返回</el-button>
+        </el-form-item>
+      </el-form>
+    </div>
+
+    <div class="part-box">
+      <el-table ref="TableList" :data="examPages" border stripe>
+        <el-table-column prop="id" label="场次ID"></el-table-column>
+        <el-table-column prop="examName" label="考试名称"></el-table-column>
+        <el-table-column prop="paperStatus" label="考场名称"></el-table-column>
+        <el-table-column
+          prop="cardStatus"
+          label="科目名称(ID)"
+        ></el-table-column>
+        <el-table-column prop="createTime" label="应考科次"></el-table-column>
+        <el-table-column label="操作" align="center">
+          <template slot-scope="scope">
+            <el-button
+              class="btn-table-icon"
+              type="text"
+              icon="icon icon-circle-right"
+              @click="toDetail(scope.row)"
+              title="详情"
+            ></el-button>
+          </template>
+        </el-table-column>
+      </el-table>
+      <div class="part-page">
+        <el-pagination
+          background
+          layout="prev, pager, next"
+          :current-page="current"
+          :total="total"
+          :page-size="size"
+          @current-change="toPage"
+        >
+        </el-pagination>
+      </div>
+    </div>
+
+    <!-- modify-data -->
+    <modify-data
+      :instance="curExam"
+      @modified="getList"
+      ref="ModifyData"
+    ></modify-data>
+  </div>
+</template>
+
+<script>
+import { PRINT_STATUS } from "@/constants/enumerate";
+import { examListPage, examList } from "../api";
+import ModifyData from "../components/ModifyData";
+
+export default {
+  name: "exam-room-detail",
+  components: { ModifyData },
+  data() {
+    return {
+      filter: {
+        examId: "",
+        printStatus: "",
+        printTime: ""
+      },
+      current: 1,
+      size: this.GLOBAL.pageSize,
+      total: 0,
+      visible: false,
+      PRINT_STATUS,
+      exams: [],
+      examPages: [{ id: "" }],
+      curExam: {}
+    };
+  },
+  created() {
+    // this.getList();
+  },
+  methods: {
+    async getList() {
+      const datas = {
+        ...this.filter,
+        pageNumber: this.current,
+        pageSize: this.size
+      };
+      const data = await examListPage(datas);
+      this.examPages = data.records;
+      this.total = data.total;
+    },
+    toPage(page) {
+      this.current = page;
+      this.getList();
+    },
+    async getExamList() {
+      const data = await examList();
+      this.exams = data.records.map(item => {
+        return {
+          id: item.examCode,
+          name: item.examName
+        };
+      });
+    },
+    toDetail(row) {
+      this.$router.push({
+        name: "ExamRomeStudentDetail",
+        params: {
+          examRoomId: "1"
+        }
+      });
+    }
+  }
+};
+</script>

+ 190 - 0
src/modules/exam-center/views/ExamRomeStudentDetail.vue

@@ -0,0 +1,190 @@
+<template>
+  <div class="exam-room-detail">
+    <div class="part-box part-box-filter">
+      <el-form ref="FilterForm" label-position="left" label-width="85px" inline>
+        <el-form-item label="考试名称:">
+          <el-select
+            v-model="filter.examId"
+            style="width: 193px;"
+            placeholder="请选择"
+            clearable
+          >
+            <el-option
+              v-for="item in exams"
+              :key="item.id"
+              :value="item.id"
+              :label="item.name"
+            ></el-option>
+          </el-select>
+        </el-form-item>
+        <el-form-item label="场次ID:" label-width="75px">
+          <el-select
+            v-model="filter.examId"
+            style="width: 193px;"
+            placeholder="请选择"
+            clearable
+          >
+            <el-option
+              v-for="item in exams"
+              :key="item.id"
+              :value="item.id"
+              :label="item.name"
+            ></el-option>
+          </el-select>
+        </el-form-item>
+        <el-form-item label="考点:" label-width="55px">
+          <el-select
+            v-model="filter.examId"
+            style="width: 193px;"
+            placeholder="请选择"
+            clearable
+          >
+            <el-option
+              v-for="item in exams"
+              :key="item.id"
+              :value="item.id"
+              :label="item.name"
+            ></el-option>
+          </el-select>
+        </el-form-item>
+        <el-form-item label="考场:" label-width="55px">
+          <el-select
+            v-model="filter.examId"
+            style="width: 193px;"
+            placeholder="请选择"
+            clearable
+          >
+            <el-option
+              v-for="item in exams"
+              :key="item.id"
+              :value="item.id"
+              :label="item.name"
+            ></el-option>
+          </el-select>
+        </el-form-item>
+        <el-form-item label="学号:" label-width="55px">
+          <el-select
+            v-model="filter.examId"
+            style="width: 193px;"
+            placeholder="请选择"
+            clearable
+          >
+            <el-option
+              v-for="item in exams"
+              :key="item.id"
+              :value="item.id"
+              :label="item.name"
+            ></el-option>
+          </el-select>
+        </el-form-item>
+        <el-form-item label-width="0px">
+          <el-button type="primary" icon="icon icon-search" @click="toPage(1)"
+            >查询</el-button
+          >
+          <el-button @click="goback">返回</el-button>
+        </el-form-item>
+      </el-form>
+    </div>
+
+    <div class="part-box">
+      <el-table ref="TableList" :data="examPages" border stripe>
+        <el-table-column prop="id" label="场次ID"></el-table-column>
+        <el-table-column prop="examName" label="考点名称"></el-table-column>
+        <el-table-column prop="examName" label="考试名称"></el-table-column>
+        <el-table-column prop="paperStatus" label="考场名称"></el-table-column>
+        <el-table-column
+          prop="cardStatus"
+          label="科目名称(ID)"
+        ></el-table-column>
+        <el-table-column prop="createTime" label="考号"></el-table-column>
+        <el-table-column prop="createTime" label="姓名"></el-table-column>
+        <el-table-column prop="createTime" label="学号"></el-table-column>
+        <el-table-column prop="createTime" label="性别"></el-table-column>
+        <el-table-column prop="createTime" label="教学班号"></el-table-column>
+        <el-table-column prop="createTime" label="座位号"></el-table-column>
+      </el-table>
+      <div class="part-page">
+        <el-pagination
+          background
+          layout="prev, pager, next"
+          :current-page="current"
+          :total="total"
+          :page-size="size"
+          @current-change="toPage"
+        >
+        </el-pagination>
+      </div>
+    </div>
+
+    <!-- modify-data -->
+    <modify-data
+      :instance="curExam"
+      @modified="getList"
+      ref="ModifyData"
+    ></modify-data>
+  </div>
+</template>
+
+<script>
+import { PRINT_STATUS } from "@/constants/enumerate";
+import { examListPage, examList } from "../api";
+import ModifyData from "../components/ModifyData";
+
+export default {
+  name: "exam-room-detail",
+  components: { ModifyData },
+  data() {
+    return {
+      filter: {
+        examId: "",
+        printStatus: "",
+        printTime: ""
+      },
+      current: 1,
+      size: this.GLOBAL.pageSize,
+      total: 0,
+      visible: false,
+      PRINT_STATUS,
+      exams: [],
+      examPages: [{ id: "" }],
+      curExam: {}
+    };
+  },
+  created() {
+    // this.getList();
+  },
+  methods: {
+    async getList() {
+      const datas = {
+        ...this.filter,
+        pageNumber: this.current,
+        pageSize: this.size
+      };
+      const data = await examListPage(datas);
+      this.examPages = data.records;
+      this.total = data.total;
+    },
+    toPage(page) {
+      this.current = page;
+      this.getList();
+    },
+    async getExamList() {
+      const data = await examList();
+      this.exams = data.records.map(item => {
+        return {
+          id: item.examCode,
+          name: item.examName
+        };
+      });
+    },
+    toDetail(row) {
+      this.$router.push({
+        name: "ExamRomeStudentDetail",
+        params: {
+          examId: "1"
+        }
+      });
+    }
+  }
+};
+</script>

+ 71 - 103
src/modules/exam-center/views/PrintManage.vue

@@ -1,18 +1,39 @@
 <template>
-  <div class="data-manage">
-    <div class="part-box">
-      <el-form ref="FilterForm" label-position="left" label-width="80px" inline>
-        <el-form-item label="年级名称">
-          <el-input
-            v-model.trim="filter.name"
-            placeholder="年级名称模糊查询"
+  <div class="exam-manage">
+    <div class="part-box part-box-filter">
+      <el-form ref="FilterForm" label-position="left" label-width="85px" inline>
+        <el-form-item label="考试名称:">
+          <el-select
+            v-model="filter.examId"
+            style="width: 193px;"
+            placeholder="请选择"
             clearable
-          ></el-input>
+          >
+            <el-option
+              v-for="item in exams"
+              :key="item.id"
+              :value="item.id"
+              :label="item.name"
+            ></el-option>
+          </el-select>
+        </el-form-item>
+        <el-form-item label="打印时间:">
+          <el-date-picker
+            v-model="filter.printTime"
+            type="date"
+            placeholder="请选择日期"
+          >
+          </el-date-picker>
         </el-form-item>
-        <el-form-item label="年级状态">
-          <el-select v-model="filter.status" style="width: 150px;" clearable>
+        <el-form-item label="撤回申请:">
+          <el-select
+            v-model="filter.revokeStatus"
+            style="width: 142px;"
+            placeholder="请选择"
+            clearable
+          >
             <el-option
-              v-for="(val, key) in ABLE_TYPE"
+              v-for="(val, key) in REVOKE_STATUS"
               :key="key"
               :value="key"
               :label="val"
@@ -20,7 +41,7 @@
           </el-select>
         </el-form-item>
         <el-form-item label-width="0px">
-          <el-button type="primary" icon="ios-search" @click="toPage(1)"
+          <el-button type="primary" icon="icon icon-search" @click="toPage(1)"
             >查询</el-button
           >
         </el-form-item>
@@ -28,45 +49,22 @@
     </div>
 
     <div class="part-box">
-      <div class="part-title">
-        <div class="part-title-infos">
-          <el-button type="primary" icon="md-add" @click="toAdd"
-            >新增</el-button
-          >
-        </div>
-      </div>
-      <el-table ref="TableList" :data="grades" border>
-        <el-table-column
-          type="index"
-          label="序号"
-          width="70"
-          align="center"
-          :index="indexMethod"
-        >
-        </el-table-column>
-        <el-table-column prop="name" label="年级名称" min-width="200">
-        </el-table-column>
-        <el-table-column prop="status" label="状态" min-width="200">
-          <template slot-scope="scope">
-            <span>{{ ABLE_TYPE[scope.row.status] }}</span>
-          </template>
-        </el-table-column>
-        <el-table-column min-width="200" align="center">
+      <el-table ref="TableList" :data="examPages" border stripe>
+        <el-table-column prop="id" label="考试ID"></el-table-column>
+        <el-table-column prop="examName" label="考试名称"></el-table-column>
+        <el-table-column prop="paperStatus" label="总科次"></el-table-column>
+        <el-table-column prop="cardStatus" label="打印时间"></el-table-column>
+        <el-table-column prop="createTime" label="打印进度"></el-table-column>
+        <el-table-column prop="createTime" label="撤回申请"></el-table-column>
+        <el-table-column label="操作" align="center">
           <template slot-scope="scope">
             <el-button
-              size="mini"
-              type="primary"
-              icon="el-icon-edit"
+              class="btn-table-icon"
+              type="text"
+              icon="icon icon-confirm"
               @click="toEdit(scope.row)"
-              >编辑</el-button
-            >
-            <el-button
-              size="mini"
-              type="danger"
-              icon="el-icon-delete"
-              @click="toDelete(scope.row)"
-              >删除</el-button
-            >
+              title="确认"
+            ></el-button>
           </template>
         </el-table-column>
       </el-table>
@@ -85,7 +83,7 @@
 
     <!-- modify-data -->
     <modify-data
-      :instance="curCourse"
+      :instance="curExam"
       @modified="getList"
       ref="ModifyData"
     ></modify-data>
@@ -93,90 +91,60 @@
 </template>
 
 <script>
-import { ABLE_TYPE } from "@/constants/enumerate";
-import { courseList, deleteCourse } from "../api";
+import { REVOKE_STATUS } from "@/constants/enumerate";
+import { printTaskListPage, examList } from "../api";
 import ModifyData from "../components/ModifyData";
 
 export default {
-  name: "data-manage",
+  name: "exam-manage",
   components: { ModifyData },
   data() {
     return {
       filter: {
-        name: "",
-        status: ""
+        examId: "",
+        revokeStatus: "",
+        printTime: ""
       },
       current: 1,
       size: this.GLOBAL.pageSize,
       total: 0,
       visible: false,
-      grades: [
-        {
-          id: "11",
-          name: "名称1",
-          status: "ENABLE"
-        },
-        {
-          id: "22",
-          name: "名称2",
-          status: "ENABLE"
-        },
-        {
-          id: "33",
-          name: "名称3",
-          status: "ENABLE"
-        }
-      ],
-      curCourse: {},
-      ABLE_TYPE
+      REVOKE_STATUS,
+      exams: [],
+      examPages: [{ id: "" }],
+      curExam: {}
     };
   },
   created() {
     // this.getList();
   },
   methods: {
-    indexMethod(index) {
-      return (this.current - 1) * this.size + index + 1;
-    },
     async getList() {
       const datas = {
         ...this.filter,
-        current: this.current,
-        size: this.size
+        pageNumber: this.current,
+        pageSize: this.size
       };
-      const data = await courseList(datas);
-      this.grades = data.list.map(item => {
-        return {
-          id: item.id,
-          name: item.name,
-          status: item.status,
-          createTime: item.createTime
-        };
-      });
-      this.total = data.totalCount;
+      const data = await printTaskListPage(datas);
+      this.examPages = data.records;
+      this.total = data.total;
     },
     toPage(page) {
       this.current = page;
       this.getList();
     },
-    toAdd() {
-      this.curCourse = {};
-      this.$refs.ModifyData.open();
+    async getExamList() {
+      const data = await examList();
+      this.exams = data.records.map(item => {
+        return {
+          id: item.examCode,
+          name: item.examName
+        };
+      });
     },
     toEdit(row) {
-      this.curCourse = row;
+      this.curExam = row;
       this.$refs.ModifyData.open();
-    },
-    toDelete(row) {
-      this.$confirm("确定要删除当前学校吗?", "删除警告", {
-        callback: async action => {
-          if (action !== "confirm") return;
-          await deleteCourse(row.id);
-          this.$message.success("删除成功!");
-          // 解决最后一项删除后的问题
-          this.deletePageLastItem();
-        }
-      });
     }
   }
 };

+ 56 - 105
src/modules/exam-center/views/WaitTask.vue

@@ -1,26 +1,24 @@
 <template>
-  <div class="data-manage">
-    <div class="part-box">
-      <el-form ref="FilterForm" label-position="left" label-width="80px" inline>
-        <el-form-item label="年级名称">
-          <el-input
-            v-model.trim="filter.name"
-            placeholder="年级名称模糊查询"
+  <div class="wait-task">
+    <div class="part-box part-box-filter">
+      <el-form ref="FilterForm" label-position="left" label-width="85px" inline>
+        <el-form-item label="考试名称:">
+          <el-select
+            v-model="filter.examId"
+            style="width: 315px;"
+            placeholder="请选择"
             clearable
-          ></el-input>
-        </el-form-item>
-        <el-form-item label="年级状态">
-          <el-select v-model="filter.status" style="width: 150px;" clearable>
+          >
             <el-option
-              v-for="(val, key) in ABLE_TYPE"
-              :key="key"
-              :value="key"
-              :label="val"
+              v-for="item in exams"
+              :key="item.id"
+              :value="item.id"
+              :label="item.name"
             ></el-option>
           </el-select>
         </el-form-item>
         <el-form-item label-width="0px">
-          <el-button type="primary" icon="ios-search" @click="toPage(1)"
+          <el-button type="primary" icon="icon icon-search" @click="toPage(1)"
             >查询</el-button
           >
         </el-form-item>
@@ -28,45 +26,28 @@
     </div>
 
     <div class="part-box">
-      <div class="part-title">
-        <div class="part-title-infos">
-          <el-button type="primary" icon="md-add" @click="toAdd"
-            >新增</el-button
-          >
-        </div>
-      </div>
-      <el-table ref="TableList" :data="grades" border>
-        <el-table-column
-          type="index"
-          label="序号"
-          width="70"
-          align="center"
-          :index="indexMethod"
-        >
-        </el-table-column>
-        <el-table-column prop="name" label="年级名称" min-width="200">
-        </el-table-column>
-        <el-table-column prop="status" label="状态" min-width="200">
+      <el-table ref="TableList" :data="tasks" border stripe>
+        <el-table-column prop="id" label="考试ID"></el-table-column>
+        <el-table-column prop="examName" label="考试名称"></el-table-column>
+        <el-table-column label="科目名称(ID)">
           <template slot-scope="scope">
-            <span>{{ ABLE_TYPE[scope.row.status] }}</span>
+            <span>{{ scope.row.courseName }}({{ scope.row.courseCode }})</span>
           </template>
         </el-table-column>
-        <el-table-column min-width="200" align="center">
+        <el-table-column prop="paperStatus" label="试卷"></el-table-column>
+        <el-table-column prop="cardStatus" label="答题卡"></el-table-column>
+        <el-table-column prop="endTime" label="任务截止日期"></el-table-column>
+        <el-table-column prop="overTime" label="剩余时间"></el-table-column>
+        <el-table-column prop="receiveTime" label="接收时间"></el-table-column>
+        <el-table-column label="操作" align="center">
           <template slot-scope="scope">
             <el-button
-              size="mini"
-              type="primary"
-              icon="el-icon-edit"
-              @click="toEdit(scope.row)"
-              >编辑</el-button
-            >
-            <el-button
-              size="mini"
-              type="danger"
-              icon="el-icon-delete"
-              @click="toDelete(scope.row)"
-              >删除</el-button
-            >
+              class="btn-table-icon"
+              type="text"
+              icon="icon icon-circle-right"
+              @click="toDetail(scope.row)"
+              title="详情"
+            ></el-button>
           </template>
         </el-table-column>
       </el-table>
@@ -85,7 +66,7 @@
 
     <!-- modify-data -->
     <modify-data
-      :instance="curCourse"
+      :instance="curTask"
       @modified="getList"
       ref="ModifyData"
     ></modify-data>
@@ -93,88 +74,58 @@
 </template>
 
 <script>
-import { ABLE_TYPE } from "@/constants/enumerate";
-import { courseList, deleteCourse } from "../api";
+import { waitTaskListPage, examList } from "../api";
 import ModifyData from "../components/ModifyData";
 
 export default {
-  name: "data-manage",
+  name: "wait-task",
   components: { ModifyData },
   data() {
     return {
       filter: {
-        name: "",
-        status: ""
+        examId: ""
       },
       current: 1,
       size: this.GLOBAL.pageSize,
       total: 0,
       visible: false,
-      grades: [
-        {
-          id: "11",
-          name: "名称1",
-          status: "ENABLE"
-        },
-        {
-          id: "22",
-          name: "名称2",
-          status: "ENABLE"
-        },
-        {
-          id: "33",
-          name: "名称3",
-          status: "ENABLE"
-        }
-      ],
-      curCourse: {},
-      ABLE_TYPE
+      exams: [],
+      tasks: [{ id: "1" }],
+      curTask: {}
     };
   },
   created() {
     // this.getList();
   },
   methods: {
-    indexMethod(index) {
-      return (this.current - 1) * this.size + index + 1;
-    },
     async getList() {
       const datas = {
         ...this.filter,
-        current: this.current,
-        size: this.size
+        pageNumber: this.current,
+        pageSize: this.size
       };
-      const data = await courseList(datas);
-      this.grades = data.list.map(item => {
-        return {
-          id: item.id,
-          name: item.name,
-          status: item.status,
-          createTime: item.createTime
-        };
-      });
-      this.total = data.totalCount;
+      const data = await waitTaskListPage(datas);
+      this.tasks = data.records;
+      this.total = data.total;
     },
     toPage(page) {
       this.current = page;
       this.getList();
     },
-    toAdd() {
-      this.curCourse = {};
-      this.$refs.ModifyData.open();
-    },
-    toEdit(row) {
-      this.curCourse = row;
-      this.$refs.ModifyData.open();
+    async getExamList() {
+      const data = await examList();
+      this.exams = data.records.map(item => {
+        return {
+          id: item.examCode,
+          name: item.examName
+        };
+      });
     },
-    toDelete(row) {
-      this.$confirm("确定要删除当前学校吗?", "删除警告", {
-        callback: async action => {
-          if (action !== "confirm") return;
-          await deleteCourse(row.id);
-          this.$message.success("删除成功!");
-          // 解决最后一项删除后的问题
-          this.deletePageLastItem();
+    toDetail(row) {
+      this.$router.push({
+        name: "WaitTaskDetail",
+        params: {
+          taskId: row.id
         }
       });
     }

+ 15 - 0
src/modules/exam-center/views/WaitTaskDetail.vue

@@ -0,0 +1,15 @@
+<template>
+  <div class="wait-task-detail">
+    wait-task-detail
+  </div>
+</template>
+
+<script>
+export default {
+  name: "wait-task-detail",
+  data() {
+    return {};
+  },
+  methods: {}
+};
+</script>

+ 3 - 6
src/modules/login/api.js

@@ -1,11 +1,8 @@
 import { $post } from "@/plugins/axios";
 
 export const login = datas => {
-  return $post("/backend/login", datas);
+  return $post("/api/print/basic/user/login", datas);
 };
-export const modifyPwd = datas => {
-  return $post("/backend/sysuser/resetPwd", datas);
-};
-export const getSmsCode = phone => {
-  return $post("/backend/sysuser/getValidateCode", { phone });
+export const sysMenu = datas => {
+  return $post("/api/print/basic/sys/getMenu", datas);
 };

+ 0 - 10
src/modules/login/router.js

@@ -1,6 +1,5 @@
 import LoginHome from "./views/LoginHome";
 import Login from "./views/Login";
-import ForgetPwd from "./views/ForgetPwd";
 
 export default {
   path: "/login-home",
@@ -14,15 +13,6 @@ export default {
         title: "登录",
         noRequire: true
       }
-    },
-    {
-      path: "/forgetPwd",
-      name: "ForgetPwd",
-      component: ForgetPwd,
-      meta: {
-        title: "忘记密码",
-        noRequire: true
-      }
     }
   ]
 };

+ 0 - 136
src/modules/login/views/ForgetPwd.vue

@@ -1,136 +0,0 @@
-<template>
-  <div class="forget-pswd login-box">
-    <div class="login-title">
-      <h1>忘记密码</h1>
-    </div>
-    <div class="login-form">
-      <el-form ref="modalFormComp" :model="modalForm" :rules="forgetPswdRules">
-        <el-form-item prop="phone">
-          <el-input
-            v-model.trim="modalForm.phone"
-            prefix-icon="el-icon-phone-outline"
-            placeholder="请输入手机号"
-            clearable
-          ></el-input>
-        </el-form-item>
-        <el-form-item prop="code">
-          <div class="vlcode">
-            <div class="vlcode-right">
-              <el-button
-                long
-                :type="isFetchingCode ? 'default' : 'primary'"
-                @click="fetchSmsCode"
-                :disabled="isFetchingCode"
-                >{{ codeContent }}</el-button
-              >
-            </div>
-            <div class="vlcode-left">
-              <el-input
-                v-model.trim="modalForm.code"
-                prefix-icon="el-icon-message"
-                placeholder="请输入短信验证码"
-                clearable
-              ></el-input>
-            </div>
-          </div>
-        </el-form-item>
-        <el-form-item prop="password">
-          <el-input
-            type="password"
-            v-model.trim="modalForm.password"
-            prefix-icon="el-icon-lock"
-            placeholder="请输入新密码"
-            clearable
-          ></el-input>
-        </el-form-item>
-        <el-form-item prop="repassword">
-          <el-input
-            type="password"
-            v-model.trim="modalForm.repassword"
-            prefix-icon="el-icon-lock"
-            placeholder="请确认密码"
-            clearable
-          ></el-input>
-        </el-form-item>
-        <el-form-item>
-          <el-button
-            style="width:100%;"
-            type="primary"
-            :disabled="isSubmit"
-            @click="submit('modalFormComp')"
-            >确认</el-button
-          >
-          <div class="login-link">
-            <router-link :to="{ name: 'Login' }">返回登陆</router-link>
-          </div>
-        </el-form-item>
-      </el-form>
-    </div>
-  </div>
-</template>
-
-<script>
-import { phone, password, smscode } from "@/plugins/formRules";
-import { modifyPwd } from "../api";
-import fetchSmsMixins from "../fetchSmsMixins";
-
-const nameWaitTime = "forgetPwd";
-
-export default {
-  name: "forget-pswd",
-  mixins: [fetchSmsMixins],
-  data() {
-    const equalToPswd = (rule, value, callback) => {
-      if (value !== this.modalForm.password) {
-        callback(new Error("两次输入的密码不一致"));
-      } else {
-        callback();
-      }
-    };
-    return {
-      nameWaitTime,
-      modalForm: {
-        phone: "",
-        code: "",
-        password: "",
-        repassword: ""
-      },
-      forgetPswdRules: {
-        phone,
-        code: smscode,
-        password,
-        repassword: [
-          ...password,
-          {
-            validator: equalToPswd,
-            trigger: "blur"
-          }
-        ]
-      },
-      isSubmit: false
-    };
-  },
-  mounted() {
-    this.setWaitingTime();
-  },
-  methods: {
-    async submit(name) {
-      const valid = await this.$refs[name].validate();
-      if (!valid) return;
-
-      if (this.isSubmit) return;
-      this.isSubmit = true;
-      const data = await modifyPwd(this.modalForm).catch(() => {
-        this.isSubmit = false;
-      });
-
-      if (!data) return;
-      this.isSubmit = false;
-      this.$message.success("重置密码成功!");
-      this.$router.push({
-        name: "Login"
-      });
-    }
-  }
-};
-</script>

+ 3 - 0
src/plugins/mixins.js

@@ -6,6 +6,9 @@ export default {
         page = page > 1 ? page - 1 : 1;
       }
       this.toPage && this.toPage(page);
+    },
+    goback() {
+      window.history.go(-1);
     }
   }
 };

+ 1 - 0
src/router.js

@@ -23,6 +23,7 @@ export default new Router({
       path: "/home",
       name: "Home",
       component: Home,
+      redirect: { name: "WaitTask" },
       children: [...account, ...base, ...examCenter, ...scorePaper, ...analyze]
     },
     { ...login }

+ 31 - 16
src/views/Home.vue

@@ -128,26 +128,41 @@ export default {
       this.$router.push({ name: curSubItem.router });
     },
     actCurNav() {
-      let router = this.$route.name;
+      const relate = this.$route.meta && this.$route.meta.relate;
+      const routerName = relate ? relate.split("/")[0] : this.$route.name;
+
       this.navs.forEach((item, index) => {
-        if (item.children && item.children.length) {
-          item.children.forEach((elem, pindex) => {
-            if (elem.router === router) {
-              this.curSubIndex = pindex;
-              this.curMainIndex = index;
-              this.breadcrumbs = [
-                { title: item.title, router: item.router },
-                { title: elem.title, router: elem.router }
-              ];
-            }
-          });
-        } else {
-          if (item.router === router) {
+        item.children.forEach((elem, pindex) => {
+          if (elem.router === routerName) {
+            this.curSubIndex = pindex;
             this.curMainIndex = index;
-            this.breadcrumbs = [{ title: item.title, router: item.router }];
+            this.breadcrumbs = [
+              { title: item.title, router: item.router },
+              { title: elem.title, router: elem.router }
+            ];
           }
-        }
+        });
       });
+
+      if (relate) this.getMoreBreadcrumbs(relate);
+    },
+    getMoreBreadcrumbs(relate) {
+      const curSubNav = this.navs[this.curMainIndex].children[this.curSubIndex];
+      if (!curSubNav.children || !curSubNav.children.length) return;
+
+      relate
+        .split("/")
+        .slice(1)
+        .map(routerName => {
+          const matchRouter = curSubNav.children.find(
+            elem => elem.router === routerName
+          );
+          if (matchRouter)
+            this.breadcrumbs.push({
+              title: matchRouter.title,
+              router: matchRouter.router
+            });
+        });
     },
     toPage(mainIndex, subIndex) {
       const elem = this.navs[mainIndex].children[subIndex];

+ 6 - 127
yarn.lock

@@ -2765,7 +2765,7 @@ debug@=3.1.0:
   dependencies:
     ms "2.0.0"
 
-debug@^3.0.0, debug@^3.1.0, debug@^3.1.1, debug@^3.2.5, debug@^3.2.6:
+debug@^3.0.0, debug@^3.1.0, debug@^3.1.1, debug@^3.2.5:
   version "3.2.6"
   resolved "https://registry.npm.taobao.org/debug/download/debug-3.2.6.tgz#e83d17de16d8a7efb7717edbe5fb10135eee629b"
   integrity sha1-6D0X3hbYp++3cX7b5fsQE17uYps=
@@ -2806,11 +2806,6 @@ deep-equal@^1.0.1:
     object-keys "^1.1.1"
     regexp.prototype.flags "^1.2.0"
 
-deep-extend@^0.6.0:
-  version "0.6.0"
-  resolved "https://registry.npm.taobao.org/deep-extend/download/deep-extend-0.6.0.tgz#c4fa7c95404a17a9c3e8ca7e1537312b736330ac"
-  integrity sha1-xPp8lUBKF6nD6Mp+FTcxK3NjMKw=
-
 deep-is@~0.1.3:
   version "0.1.3"
   resolved "https://registry.npm.taobao.org/deep-is/download/deep-is-0.1.3.tgz#b369d6fb5dbc13eecf524f91b070feedc357cf34"
@@ -2930,11 +2925,6 @@ destroy@~1.0.4:
   resolved "https://registry.npm.taobao.org/destroy/download/destroy-1.0.4.tgz#978857442c44749e4206613e37946205826abd80"
   integrity sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=
 
-detect-libc@^1.0.2:
-  version "1.0.3"
-  resolved "https://registry.npm.taobao.org/detect-libc/download/detect-libc-1.0.3.tgz#fa137c4bd698edf55cd5cd02ac559f91a4c4ba9b"
-  integrity sha1-+hN8S9aY7fVc1c0CrFWfkaTEups=
-
 detect-node@^2.0.4:
   version "2.0.4"
   resolved "https://registry.npm.taobao.org/detect-node/download/detect-node-2.0.4.tgz#014ee8f8f669c5c58023da64b8179c083a28c46c"
@@ -3943,13 +3933,6 @@ fs-extra@^7.0.1:
     jsonfile "^4.0.0"
     universalify "^0.1.0"
 
-fs-minipass@^1.2.5:
-  version "1.2.7"
-  resolved "https://registry.npm.taobao.org/fs-minipass/download/fs-minipass-1.2.7.tgz#ccff8570841e7fe4265693da88936c55aed7f7c7"
-  integrity sha1-zP+FcIQef+QmVpPaiJNsVa7X98c=
-  dependencies:
-    minipass "^2.6.0"
-
 fs-write-stream-atomic@^1.0.8:
   version "1.0.10"
   resolved "https://registry.npm.taobao.org/fs-write-stream-atomic/download/fs-write-stream-atomic-1.0.10.tgz#b47df53493ef911df75731e70a9ded0189db40c9"
@@ -4464,7 +4447,7 @@ human-signals@^1.1.1:
   resolved "https://registry.npm.taobao.org/human-signals/download/human-signals-1.1.1.tgz#c5b1cd14f50aeae09ab6c59fe63ba3395fe4dfa3"
   integrity sha1-xbHNFPUK6uCatsWf5jujOV/k36M=
 
-iconv-lite@0.4.24, iconv-lite@^0.4.17, iconv-lite@^0.4.24, iconv-lite@^0.4.4:
+iconv-lite@0.4.24, iconv-lite@^0.4.17, iconv-lite@^0.4.24:
   version "0.4.24"
   resolved "https://registry.npm.taobao.org/iconv-lite/download/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b"
   integrity sha1-ICK0sl+93CHS9SSXSkdKr+czkIs=
@@ -4493,13 +4476,6 @@ iferr@^0.1.5:
   resolved "https://registry.npm.taobao.org/iferr/download/iferr-0.1.5.tgz#c60eed69e6d8fdb6b3104a1fcbca1c192dc5b501"
   integrity sha1-xg7taebY/bazEEofy8ocGS3FtQE=
 
-ignore-walk@^3.0.1:
-  version "3.0.3"
-  resolved "https://registry.npm.taobao.org/ignore-walk/download/ignore-walk-3.0.3.tgz#017e2447184bfeade7c238e4aefdd1e8f95b1e37"
-  integrity sha1-AX4kRxhL/q3nwjjkrv3R6PlbHjc=
-  dependencies:
-    minimatch "^3.0.4"
-
 ignore@^3.3.3, ignore@^3.3.5:
   version "3.3.10"
   resolved "https://registry.npm.taobao.org/ignore/download/ignore-3.3.10.tgz#0a97fb876986e8081c631160f8f9f389157f0043"
@@ -4603,11 +4579,6 @@ inherits@2.0.3:
   resolved "https://registry.npm.taobao.org/inherits/download/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de"
   integrity sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=
 
-ini@~1.3.0:
-  version "1.3.5"
-  resolved "https://registry.npm.taobao.org/ini/download/ini-1.3.5.tgz#eee25f56db1c9ec6085e0c22778083f596abf927"
-  integrity sha1-7uJfVtscnsYIXgwid4CD9Zar+Sc=
-
 inquirer@^3.0.6:
   version "3.3.0"
   resolved "https://registry.npm.taobao.org/inquirer/download/inquirer-3.3.0.tgz?cache=0&sync_timestamp=1583821033098&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Finquirer%2Fdownload%2Finquirer-3.3.0.tgz#9dd2f2ad765dcab1ff0443b491442a20ba227dc9"
@@ -5703,21 +5674,6 @@ minimist@^1.1.3, minimist@^1.2.0, minimist@^1.2.5:
   resolved "https://registry.npm.taobao.org/minimist/download/minimist-1.2.5.tgz#67d66014b66a6a8aaa0c083c5fd58df4e4e97602"
   integrity sha1-Z9ZgFLZqaoqqDAg8X9WN9OTpdgI=
 
-minipass@^2.6.0, minipass@^2.8.6, minipass@^2.9.0:
-  version "2.9.0"
-  resolved "https://registry.npm.taobao.org/minipass/download/minipass-2.9.0.tgz?cache=0&sync_timestamp=1571953917221&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fminipass%2Fdownload%2Fminipass-2.9.0.tgz#e713762e7d3e32fed803115cf93e04bca9fcc9a6"
-  integrity sha1-5xN2Ln0+Mv7YAxFc+T4EvKn8yaY=
-  dependencies:
-    safe-buffer "^5.1.2"
-    yallist "^3.0.0"
-
-minizlib@^1.2.1:
-  version "1.3.3"
-  resolved "https://registry.npm.taobao.org/minizlib/download/minizlib-1.3.3.tgz#2290de96818a34c29551c8a8d301216bd65a861d"
-  integrity sha1-IpDeloGKNMKVUcio0wEha9Zahh0=
-  dependencies:
-    minipass "^2.9.0"
-
 mississippi@^2.0.0:
   version "2.0.0"
   resolved "https://registry.npm.taobao.org/mississippi/download/mississippi-2.0.0.tgz#3442a508fafc28500486feea99409676e4ee5a6f"
@@ -5846,15 +5802,6 @@ natural-compare@^1.4.0:
   resolved "https://registry.npm.taobao.org/natural-compare/download/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7"
   integrity sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=
 
-needle@^2.2.1:
-  version "2.4.1"
-  resolved "https://registry.npm.taobao.org/needle/download/needle-2.4.1.tgz?cache=0&sync_timestamp=1585919797356&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fneedle%2Fdownload%2Fneedle-2.4.1.tgz#14af48732463d7475696f937626b1b993247a56a"
-  integrity sha1-FK9IcyRj10dWlvk3YmsbmTJHpWo=
-  dependencies:
-    debug "^3.2.6"
-    iconv-lite "^0.4.4"
-    sax "^1.2.4"
-
 negotiator@0.6.2:
   version "0.6.2"
   resolved "https://registry.npm.taobao.org/negotiator/download/negotiator-0.6.2.tgz#feacf7ccf525a77ae9634436a64883ffeca346fb"
@@ -5938,22 +5885,6 @@ node-libs-browser@^2.2.1:
     util "^0.11.0"
     vm-browserify "^1.0.1"
 
-node-pre-gyp@*:
-  version "0.14.0"
-  resolved "https://registry.npm.taobao.org/node-pre-gyp/download/node-pre-gyp-0.14.0.tgz#9a0596533b877289bcad4e143982ca3d904ddc83"
-  integrity sha1-mgWWUzuHcom8rU4UOYLKPZBN3IM=
-  dependencies:
-    detect-libc "^1.0.2"
-    mkdirp "^0.5.1"
-    needle "^2.2.1"
-    nopt "^4.0.1"
-    npm-packlist "^1.1.6"
-    npmlog "^4.0.2"
-    rc "^1.2.7"
-    rimraf "^2.6.1"
-    semver "^5.3.0"
-    tar "^4.4.2"
-
 node-releases@^1.1.53:
   version "1.1.53"
   resolved "https://registry.npm.taobao.org/node-releases/download/node-releases-1.1.53.tgz#2d821bfa499ed7c5dffc5e2f28c88e78a08ee3f4"
@@ -5989,14 +5920,6 @@ node-sass@^4.9.0:
   dependencies:
     abbrev "1"
 
-nopt@^4.0.1:
-  version "4.0.3"
-  resolved "https://registry.npm.taobao.org/nopt/download/nopt-4.0.3.tgz#a375cad9d02fd921278d954c2254d5aa57e15e48"
-  integrity sha1-o3XK2dAv2SEnjZVMIlTVqlfhXkg=
-  dependencies:
-    abbrev "1"
-    osenv "^0.1.4"
-
 normalize-package-data@^2.3.2, normalize-package-data@^2.3.4, normalize-package-data@^2.5.0:
   version "2.5.0"
   resolved "https://registry.npm.taobao.org/normalize-package-data/download/normalize-package-data-2.5.0.tgz#e66db1838b200c1dfc233225d12cb36520e234a8"
@@ -6049,27 +5972,6 @@ normalize-wheel@^1.0.1:
   resolved "https://registry.npm.taobao.org/normalize-wheel/download/normalize-wheel-1.0.1.tgz#aec886affdb045070d856447df62ecf86146ec45"
   integrity sha1-rsiGr/2wRQcNhWRH32Ls+GFG7EU=
 
-npm-bundled@^1.0.1:
-  version "1.1.1"
-  resolved "https://registry.npm.taobao.org/npm-bundled/download/npm-bundled-1.1.1.tgz#1edd570865a94cdb1bc8220775e29466c9fb234b"
-  integrity sha1-Ht1XCGWpTNsbyCIHdeKUZsn7I0s=
-  dependencies:
-    npm-normalize-package-bin "^1.0.1"
-
-npm-normalize-package-bin@^1.0.1:
-  version "1.0.1"
-  resolved "https://registry.npm.taobao.org/npm-normalize-package-bin/download/npm-normalize-package-bin-1.0.1.tgz#6e79a41f23fd235c0623218228da7d9c23b8f6e2"
-  integrity sha1-bnmkHyP9I1wGIyGCKNp9nCO49uI=
-
-npm-packlist@^1.1.6:
-  version "1.4.8"
-  resolved "https://registry.npm.taobao.org/npm-packlist/download/npm-packlist-1.4.8.tgz?cache=0&sync_timestamp=1584032699395&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fnpm-packlist%2Fdownload%2Fnpm-packlist-1.4.8.tgz#56ee6cc135b9f98ad3d51c1c95da22bbb9b2ef3e"
-  integrity sha1-Vu5swTW5+YrT1Rwcldoiu7my7z4=
-  dependencies:
-    ignore-walk "^3.0.1"
-    npm-bundled "^1.0.1"
-    npm-normalize-package-bin "^1.0.1"
-
 npm-path@^2.0.2:
   version "2.0.4"
   resolved "https://registry.npm.taobao.org/npm-path/download/npm-path-2.0.4.tgz#c641347a5ff9d6a09e4d9bce5580c4f505278e64"
@@ -6100,7 +6002,7 @@ npm-which@^3.0.1:
     npm-path "^2.0.2"
     which "^1.2.10"
 
-"npmlog@0 || 1 || 2 || 3 || 4", npmlog@^4.0.0, npmlog@^4.0.2:
+"npmlog@0 || 1 || 2 || 3 || 4", npmlog@^4.0.0:
   version "4.1.2"
   resolved "https://registry.npm.taobao.org/npmlog/download/npmlog-4.1.2.tgz#08a7f2a8bf734604779a9efa4ad5cc717abb954b"
   integrity sha1-CKfyqL9zRgR3mp76StXMcXq7lUs=
@@ -6330,7 +6232,7 @@ os-tmpdir@^1.0.0, os-tmpdir@~1.0.2:
   resolved "https://registry.npm.taobao.org/os-tmpdir/download/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274"
   integrity sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=
 
-osenv@0, osenv@^0.1.4:
+osenv@0:
   version "0.1.5"
   resolved "https://registry.npm.taobao.org/osenv/download/osenv-0.1.5.tgz#85cdfafaeb28e8677f416e287592b5f3f49ea410"
   integrity sha1-hc36+uso6Gd/QW4odZK18/SepBA=
@@ -7222,16 +7124,6 @@ raw-body@2.4.0:
     iconv-lite "0.4.24"
     unpipe "1.0.0"
 
-rc@^1.2.7:
-  version "1.2.8"
-  resolved "https://registry.npm.taobao.org/rc/download/rc-1.2.8.tgz#cd924bf5200a075b83c188cd6b9e211b7fc0d3ed"
-  integrity sha1-zZJL9SAKB1uDwYjNa54hG3/A0+0=
-  dependencies:
-    deep-extend "^0.6.0"
-    ini "~1.3.0"
-    minimist "^1.2.0"
-    strip-json-comments "~2.0.1"
-
 read-pkg-up@^1.0.1:
   version "1.0.1"
   resolved "https://registry.npm.taobao.org/read-pkg-up/download/read-pkg-up-1.0.1.tgz?cache=0&sync_timestamp=1575620436254&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fread-pkg-up%2Fdownload%2Fread-pkg-up-1.0.1.tgz#9d63c13276c065918d57f002a57f40a1b643fb02"
@@ -7656,7 +7548,7 @@ sass-loader@^7.1.0:
     pify "^4.0.1"
     semver "^6.3.0"
 
-sax@^1.2.4, sax@~1.2.4:
+sax@~1.2.4:
   version "1.2.4"
   resolved "https://registry.npm.taobao.org/sax/download/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9"
   integrity sha1-KBYjTiN4vdxOU1T6tcqold9xANk=
@@ -8444,19 +8336,6 @@ tar@^2.0.0:
     fstream "^1.0.12"
     inherits "2"
 
-tar@^4.4.2:
-  version "4.4.13"
-  resolved "https://registry.npm.taobao.org/tar/download/tar-4.4.13.tgz#43b364bc52888d555298637b10d60790254ab525"
-  integrity sha1-Q7NkvFKIjVVSmGN7ENYHkCVKtSU=
-  dependencies:
-    chownr "^1.1.1"
-    fs-minipass "^1.2.5"
-    minipass "^2.8.6"
-    minizlib "^1.2.1"
-    mkdirp "^0.5.0"
-    safe-buffer "^5.1.2"
-    yallist "^3.0.3"
-
 terser-webpack-plugin@^1.2.3, terser-webpack-plugin@^1.4.3:
   version "1.4.3"
   resolved "https://registry.npm.taobao.org/terser-webpack-plugin/download/terser-webpack-plugin-1.4.3.tgz#5ecaf2dbdc5fb99745fd06791f46fc9ddb1c9a7c"
@@ -9267,7 +9146,7 @@ yallist@^2.1.2:
   resolved "https://registry.npm.taobao.org/yallist/download/yallist-2.1.2.tgz#1c11f9218f076089a47dd512f93c6699a6a81d52"
   integrity sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=
 
-yallist@^3.0.0, yallist@^3.0.2, yallist@^3.0.3:
+yallist@^3.0.2:
   version "3.1.1"
   resolved "https://registry.npm.taobao.org/yallist/download/yallist-3.1.1.tgz#dbb7daf9bfd8bac9ab45ebf602b8cbad0d5d08fd"
   integrity sha1-27fa+b/YusmrRev2ArjLrQ1dCP0=