Browse Source

inspection add

zhangjie 5 years ago
parent
commit
00f9b7b21c

+ 19 - 0
src/api.js

@@ -230,3 +230,22 @@ export const createMarkTask = (subjectId, datas) => {
   // TODO:
   return $post(`/api/marksubjects/${subjectId}/markergroups`, datas);
 };
+
+// inspection -------------------------->
+// inspection-log
+export const inspectionActionLogPageList = datas => {
+  // TODO:
+  return $get(`/api/marklog/selectMarkLog`, datas);
+};
+export const inspectionCollectLogPageList = datas => {
+  // TODO:
+  return $get(`/api/marklog/selectCollectMarkLog`, datas);
+};
+export const inspectionCheckGradePageList = datas => {
+  // TODO:
+  return $get(`/api/marklog/selectCollectMarkLog`, datas);
+};
+export const inspectionConfirmCheckGrade = datas => {
+  // TODO:
+  return $post(`/api/marklog/selectCollectMarkLog`, datas);
+};

+ 1 - 1
src/assets/styles/base.less

@@ -155,7 +155,7 @@ body {
 }
 .part-page {
   margin-top: 15px;
-  text-align: right;
+  text-align: center;
 }
 .part-filter {
   border-bottom: 1px dashed #e0e0e0;

+ 4 - 3
src/assets/styles/common-component.less

@@ -28,6 +28,7 @@
     text-align: center;
     font-size: 40px;
     color: #fff;
+    text-shadow: 0 0 2px #333;
     cursor: pointer;
 
     &:hover {
@@ -68,12 +69,12 @@
     text-align: center;
     color: #d0d0d0;
     z-index: 9;
-    cursor: pointer;
     font-size: 60px;
+    text-shadow: 0 0 2px #333;
+    cursor: pointer;
 
     &:hover {
-      color: #fff;
-      border-color: #b0b0b0;
+      color: #eee;
     }
     > i {
       margin-top: -5px;

+ 43 - 0
src/assets/styles/main.less

@@ -161,3 +161,46 @@
     margin-bottom: 40px;
   }
 }
+
+// student-score
+.student-score {
+  &-content {
+    min-height: 200px;
+  }
+}
+
+// inspection-grading
+.check-grade {
+  margin-right: 300px;
+  &-action {
+    position: fixed;
+    width: 300px;
+    top: 50px;
+    right: 0;
+    bottom: 0;
+    background-color: #fff;
+    padding: 50px 15px;
+    text-align: center;
+    .paper-info {
+      margin-bottom: 100px;
+    }
+
+    p {
+      font-size: 16px;
+      margin-bottom: 10px;
+
+      &:nth-of-type(3),
+      &:nth-of-type(4) {
+        font-size: 24px;
+      }
+    }
+  }
+
+  &-image-preview {
+    .ivu-modal-mask,
+    .ivu-modal-wrap {
+      top: 50px;
+      right: 300px;
+    }
+  }
+}

+ 28 - 2
src/constants/enumerate.js

@@ -68,8 +68,34 @@ export const MARKER_RIGHT_TYPE = {
   ALLOW_SCORING: "只允许打分",
   ALLOW_ALL: "允许分档打分"
 };
-
-export const SORT_TYPE = {
+// sort
+export const SORT_ORDER_TYPE = {
   0: "乱序",
   1: "定序"
 };
+export const SORT_RULE_TYPE = {
+  time: "按时间",
+  examNumber: "按考号"
+};
+// cafa-exception
+export const CAFA_EXCEPTION_TYPE = {
+  0: "缺考",
+  1: "手工绑定"
+};
+
+// action-type
+export const ACTION_TYPE = {
+  1: "分档",
+  2: "打分",
+  3: "回评档位",
+  4: "回评分数",
+  5: "档位打回",
+  6: "档位打回回评",
+  7: "一键定档",
+  8: "标准卷设置",
+  9: "采集",
+  10: "系统自动打回",
+  11: "重评",
+  12: "手动打回",
+  13: "档位落差"
+};

+ 226 - 0
src/constants/papers.json

@@ -0,0 +1,226 @@
+[
+  {
+    "id": 869,
+    "sn": "111280874",
+    "examNumber": "1901130044",
+    "level": "B",
+    "score": null,
+    "redoLevel": null,
+    "updatedOn": 1574665102000,
+    "url": "http://127.0.0.1:9000/api/file/image/download/31/1/734/1?random=676176fc-24cd-407a-a7bc-fabc49bd2dbc",
+    "thumbUrl": "http://127.0.0.1:9000/api/file/image/download/31/1/734/2?random=d8d100c5-ac64-4b5a-a2fe-bce2dd8aed0f",
+    "markByLeader": false,
+    "markedLogic": false,
+    "areaCode": "1",
+    "inspectScore": null,
+    "inspectLevel": null,
+    "inspector": null,
+    "sheetSrc": null,
+    "stage": "LEVEL",
+    "test": 0,
+    "paperTest": 0,
+    "markResults": [],
+    "arbitrated": false,
+    "rejected": false,
+    "manual": false,
+    "sample": false,
+    "tagged": true,
+    "missing": false
+  },
+  {
+    "id": 870,
+    "sn": "111501421",
+    "examNumber": "1901130045",
+    "level": "B",
+    "score": null,
+    "redoLevel": null,
+    "updatedOn": 1574665113000,
+    "url": "http://127.0.0.1:9000/api/file/image/download/31/1/733/1?random=e2966291-ffba-4b19-985d-0cad9ae1b75b",
+    "thumbUrl": "http://127.0.0.1:9000/api/file/image/download/31/1/733/2?random=5d16ebc7-0e52-493c-93fa-4850db5e2632",
+    "markByLeader": false,
+    "markedLogic": false,
+    "areaCode": "1",
+    "inspectScore": null,
+    "inspectLevel": null,
+    "inspector": null,
+    "sheetSrc": null,
+    "stage": "LEVEL",
+    "test": 0,
+    "paperTest": 0,
+    "markResults": [],
+    "arbitrated": false,
+    "rejected": false,
+    "manual": false,
+    "sample": false,
+    "tagged": true,
+    "missing": false
+  },
+  {
+    "id": 871,
+    "sn": "111563006",
+    "examNumber": "1901130046",
+    "level": "B",
+    "score": null,
+    "redoLevel": null,
+    "updatedOn": 1574753749000,
+    "url": "http://127.0.0.1:9000/api/file/image/download/31/1/731/1?random=b305c27c-76d0-4477-a1ef-c9b8554a4671",
+    "thumbUrl": "http://127.0.0.1:9000/api/file/image/download/31/1/731/2?random=dd1a4e72-9314-4429-a5e8-dacfa5275397",
+    "markByLeader": false,
+    "markedLogic": false,
+    "areaCode": "1",
+    "inspectScore": null,
+    "inspectLevel": null,
+    "inspector": null,
+    "sheetSrc": null,
+    "stage": "LEVEL",
+    "test": 0,
+    "paperTest": 0,
+    "markResults": [],
+    "arbitrated": false,
+    "rejected": false,
+    "manual": false,
+    "sample": false,
+    "tagged": true,
+    "missing": false
+  },
+  {
+    "id": 867,
+    "sn": "111572727",
+    "examNumber": "1901040084",
+    "level": "B",
+    "score": null,
+    "redoLevel": null,
+    "updatedOn": 1574665550000,
+    "url": "http://127.0.0.1:9000/api/file/image/download/31/1/736/1?random=d90a96e7-1d1a-426b-8428-b5c980589fe1",
+    "thumbUrl": "http://127.0.0.1:9000/api/file/image/download/31/1/736/2?random=dc754e3b-7a92-4a59-a34c-e67a09253e7b",
+    "markByLeader": false,
+    "markedLogic": false,
+    "areaCode": "1",
+    "inspectScore": null,
+    "inspectLevel": null,
+    "inspector": null,
+    "sheetSrc": null,
+    "stage": "LEVEL",
+    "test": 0,
+    "paperTest": 0,
+    "markResults": [],
+    "arbitrated": false,
+    "rejected": false,
+    "manual": false,
+    "sample": false,
+    "tagged": false,
+    "missing": false
+  },
+  {
+    "id": 868,
+    "sn": "111086411",
+    "examNumber": "1901130043",
+    "level": "A",
+    "score": null,
+    "redoLevel": null,
+    "updatedOn": 1577325078000,
+    "url": "http://127.0.0.1:9000/api/file/image/download/31/1/735/1?random=e6ea4c48-e2d0-470e-a0db-5e7642cad923",
+    "thumbUrl": "http://127.0.0.1:9000/api/file/image/download/31/1/735/2?random=4ddc167d-8bb3-443d-8d5d-6a725fab9950",
+    "markByLeader": false,
+    "markedLogic": false,
+    "areaCode": "1",
+    "inspectScore": null,
+    "inspectLevel": null,
+    "inspector": null,
+    "sheetSrc": null,
+    "stage": "LEVEL",
+    "test": 0,
+    "paperTest": 0,
+    "markResults": [],
+    "arbitrated": false,
+    "rejected": false,
+    "manual": false,
+    "sample": false,
+    "tagged": true,
+    "missing": false
+  },
+  {
+    "id": 874,
+    "sn": "111191877",
+    "examNumber": "1901130054",
+    "level": "A",
+    "score": null,
+    "redoLevel": null,
+    "updatedOn": 1574836896000,
+    "url": "http://127.0.0.1:9000/api/file/image/download/31/1/737/1?random=68a6e70f-8983-4445-82dd-f71499ad7441",
+    "thumbUrl": "http://127.0.0.1:9000/api/file/image/download/31/1/737/2?random=33db53ee-04b2-4d46-89bc-7bf276d839e2",
+    "markByLeader": false,
+    "markedLogic": false,
+    "areaCode": "1",
+    "inspectScore": null,
+    "inspectLevel": null,
+    "inspector": null,
+    "sheetSrc": null,
+    "stage": "LEVEL",
+    "test": 0,
+    "paperTest": 0,
+    "markResults": [],
+    "arbitrated": false,
+    "rejected": false,
+    "manual": false,
+    "sample": false,
+    "tagged": false,
+    "missing": false
+  },
+  {
+    "id": 873,
+    "sn": "111965173",
+    "examNumber": "1901130053",
+    "level": "A",
+    "score": null,
+    "redoLevel": null,
+    "updatedOn": 1577325083000,
+    "url": "http://127.0.0.1:9000/api/file/image/download/31/1/738/1?random=9f788228-2213-4a46-9461-b222e310950b",
+    "thumbUrl": "http://127.0.0.1:9000/api/file/image/download/31/1/738/2?random=7adb5c94-b42a-4a50-8920-aaa88134b3f3",
+    "markByLeader": false,
+    "markedLogic": false,
+    "areaCode": "1",
+    "inspectScore": null,
+    "inspectLevel": null,
+    "inspector": null,
+    "sheetSrc": null,
+    "stage": "LEVEL",
+    "test": 0,
+    "paperTest": 0,
+    "markResults": [],
+    "arbitrated": false,
+    "rejected": false,
+    "manual": false,
+    "sample": false,
+    "tagged": false,
+    "missing": false
+  },
+  {
+    "id": 872,
+    "sn": "111039763",
+    "examNumber": "1901130047",
+    "level": "B",
+    "score": null,
+    "redoLevel": null,
+    "updatedOn": 1573718404000,
+    "url": "http://127.0.0.1:9000/api/file/image/download/31/1/732/1?random=b1cdc3f5-8cae-4e8e-ba92-e1df640ba001",
+    "thumbUrl": "http://127.0.0.1:9000/api/file/image/download/31/1/732/2?random=32b1cb60-a0d5-4253-9fb6-03863a88e2b2",
+    "markByLeader": true,
+    "markedLogic": false,
+    "areaCode": "1",
+    "inspectScore": null,
+    "inspectLevel": null,
+    "inspector": null,
+    "sheetSrc": null,
+    "stage": "LEVEL",
+    "test": 0,
+    "paperTest": 0,
+    "markResults": [],
+    "arbitrated": false,
+    "rejected": false,
+    "manual": false,
+    "sample": true,
+    "tagged": false,
+    "missing": false
+  }
+]

+ 2 - 2
src/modules-part/example/views/DataManage.vue

@@ -54,7 +54,7 @@
       </div>
       <Table
         ref="TableList"
-        :columns="columes"
+        :columns="columns"
         :data="grades"
         disabled-hover
         border
@@ -105,7 +105,7 @@ export default {
       grades: [],
       curCourse: {},
       ABLE_TYPE,
-      columes: [
+      columns: [
         {
           title: "序号",
           type: "index",

+ 2 - 2
src/modules/client-set/ClientAccountSet.vue

@@ -6,7 +6,7 @@
     <div class="part-box">
       <Table
         ref="TableList"
-        :columns="columes"
+        :columns="columns"
         :data="users"
         disabled-hover
         border
@@ -48,7 +48,7 @@ export default {
       total: 0,
       users: [],
       curUser: {},
-      columes: [
+      columns: [
         {
           type: "index",
           title: "序号",

+ 10 - 6
src/modules/grading/GradingDetail.vue

@@ -84,6 +84,9 @@ import GradeAction from "./components/GradeAction";
 import GradeAnalysis from "./components/GradeAnalysis";
 // 三种情况:
 // 管理员(ADMIN),科组长(MARK_LEADER),评卷员(MARKER)
+// 管理员:查询,试卷信息,定档信息,评卷记录
+// 科组长:查询,试卷信息,定档信息,选择档位,评卷记录
+// 评卷员:试卷信息,选择档位
 
 export default {
   name: "grading-detail",
@@ -202,12 +205,13 @@ export default {
     gradeCurPaper(grade) {
       // TODO:to grade
 
-      if (this.curPaperIndex === this.size - 1) {
-        this.nextPage();
-        return;
-      } else {
-        this.paperNext(this.curPaperIndex + 1);
-      }
+      this.$refs.ImagePreview.showNext();
+      // if (this.curPaperIndex === this.size - 1) {
+      //   this.nextPage();
+      //   return;
+      // } else {
+      //   this.paperNext(this.curPaperIndex + 1);
+      // }
     }
   }
 };

+ 2 - 2
src/modules/grading/GradingUserManage.vue

@@ -9,7 +9,7 @@
     <div class="part-box">
       <Table
         ref="TableList"
-        :columns="columes"
+        :columns="columns"
         :data="users"
         disabled-hover
         border
@@ -39,7 +39,7 @@ export default {
       workId: this.$route.params.workId,
       users: [],
       curUser: {},
-      columes: [
+      columns: [
         {
           type: "index",
           title: "序号",

+ 0 - 2
src/modules/inspection/Inspection.vue

@@ -20,8 +20,6 @@
     <div class="home-body">
       <div class="home-main">
         <router-view />
-
-        <view-footer></view-footer>
       </div>
     </div>
   </div>

+ 201 - 0
src/modules/inspection/InspectionActionLogs.vue

@@ -0,0 +1,201 @@
+<template>
+  <div class="inspection-action-logs">
+    <div class="part-box-head">
+      <div class="part-box-head-right">
+        <Button type="primary" icon="md-download" @click="exportLogs"
+          >导出操作日志</Button
+        >
+      </div>
+    </div>
+    <div class="part-box">
+      <Form ref="FilterForm" label-position="left" inline>
+        <FormItem label="工作文件夹:">
+          <Select
+            v-model="filter.workId"
+            placeholder="请选择工作文件夹"
+            style="width: 150px"
+          >
+            <Option
+              v-for="(work, windex) in works"
+              :key="windex"
+              :value="work.id"
+              :label="work.name"
+            ></Option>
+          </Select>
+        </FormItem>
+        <FormItem label="科目:">
+          <Select v-model="filter.subject" placeholder="请选择科目">
+            <Option value=""></Option>
+          </Select>
+        </FormItem>
+        <FormItem label="考号:">
+          <Input
+            v-model.trim="filter.examNumber"
+            placeholder="请输入考号"
+            clearable
+          ></Input>
+        </FormItem>
+        <FormItem label="姓名:">
+          <Input
+            v-model.trim="filter.name"
+            placeholder="请输入姓名"
+            clearable
+          ></Input>
+        </FormItem>
+        <FormItem label="操作:">
+          <Select
+            v-model="filter.operType"
+            placeholder="请选择操作"
+            clearable
+            style="width: 130px"
+          >
+            <Option
+              v-for="(val, key) in ACTION_TYPE"
+              :key="key"
+              :value="key"
+              :label="val"
+            ></Option>
+          </Select>
+        </FormItem>
+        <FormItem label="查询时间:">
+          <DatePicker
+            v-model="searchTime"
+            type="datetimerange"
+            placeholder="请选择查询时间段"
+            style="width: 400px"
+            transfer
+          ></DatePicker>
+        </FormItem>
+        <FormItem>
+          <Button type="primary" icon="ios-search" @click="toPage(1)"
+            >查询</Button
+          >
+        </FormItem>
+      </Form>
+
+      <Table
+        ref="TableList"
+        :columns="columns"
+        :data="dataList"
+        disabled-hover
+        border
+      ></Table>
+
+      <div class="part-page">
+        <Page
+          :current="current"
+          :total="total"
+          :page-size="size"
+          show-total
+          show-elevator
+          @on-change="toPage"
+        ></Page>
+      </div>
+    </div>
+  </div>
+</template>
+
+<script>
+import { inspectionActionLogPageList, workList } from "@/api";
+import { ACTION_TYPE } from "@/constants/enumerate";
+
+export default {
+  name: "inspection-action-logs",
+  data() {
+    return {
+      filter: {
+        workId: 33,
+        subject: "SC",
+        examNumber: "",
+        name: "",
+        operType: null,
+        startTime: null,
+        endTime: null
+      },
+      ACTION_TYPE,
+      current: 1,
+      size: this.GLOBAL.pageSize,
+      total: 0,
+      works: [],
+      searchTime: [],
+      dataList: [],
+      columns: [
+        {
+          title: "工作",
+          key: "workName"
+        },
+        {
+          title: "操作人",
+          key: "createUserName"
+        },
+        {
+          title: "角色",
+          key: "createRole"
+        },
+        {
+          title: "科目",
+          key: "subject"
+        },
+        {
+          title: "准考证号",
+          key: "examNumber",
+          width: 130
+        },
+        {
+          title: "学生姓名",
+          key: "studentName"
+        },
+        {
+          title: "操作类型",
+          key: "operType"
+        },
+        {
+          title: "操作前数据",
+          key: "operDataBefore"
+        },
+        {
+          title: "操作后数据",
+          key: "operDataAfter"
+        },
+        {
+          title: "操作时间",
+          key: "createTime"
+        }
+      ]
+    };
+  },
+  mounted() {
+    this.getWorkList();
+    this.getList();
+  },
+  methods: {
+    async getWorkList() {
+      const data = await workList();
+      this.works = data.map(item => {
+        return {
+          id: item.id,
+          name: item.name
+        };
+      });
+    },
+    async getList() {
+      // const [startTime, endTime] = this.searchTime;
+      const datas = {
+        // ...this.filter,
+        // startTime,
+        // endTime,
+        curPage: this.current - 1,
+        pageSize: this.size
+      };
+      const data = await inspectionActionLogPageList(datas);
+      this.dataList = data.data;
+      this.total = data.totalCount;
+    },
+    toPage(page) {
+      this.current = page;
+      this.getList();
+    },
+    exportLogs() {}
+  }
+};
+</script>

+ 206 - 0
src/modules/inspection/InspectionCollectLogs.vue

@@ -0,0 +1,206 @@
+<template>
+  <div class="inspection-collect-logs">
+    <div class="part-box-head">
+      <div class="part-box-head-right">
+        <Button type="primary" icon="md-download" @click="exportLogs"
+          >导出操作日志</Button
+        >
+      </div>
+    </div>
+    <div class="part-box">
+      <Form ref="FilterForm" label-position="left" inline>
+        <FormItem label="工作文件夹:">
+          <Select
+            v-model="filter.workId"
+            placeholder="请选择工作文件夹"
+            style="width: 150px"
+            @on-change="workChange"
+          >
+            <Option
+              v-for="(work, windex) in works"
+              :key="windex"
+              :value="work.id"
+              :label="work.name"
+            ></Option>
+          </Select>
+        </FormItem>
+        <FormItem label="科目:">
+          <Select v-model="filter.subject" placeholder="请选择科目">
+            <Option value=""></Option>
+          </Select>
+        </FormItem>
+        <FormItem label="考号:">
+          <Input
+            v-model.trim="filter.examNumber"
+            placeholder="请输入考号"
+            clearable
+          ></Input>
+        </FormItem>
+        <FormItem label="姓名:">
+          <Input
+            v-model.trim="filter.name"
+            placeholder="请输入姓名"
+            clearable
+          ></Input>
+        </FormItem>
+        <FormItem label="采集账号:">
+          <Select
+            v-model="filter.createUserId"
+            placeholder="请选择操作"
+            clearable
+            style="width: 130px"
+          >
+            <Option
+              v-for="(user, uindex) in collectionUsers"
+              :key="uindex"
+              :value="user.id"
+              :label="user.name"
+            ></Option>
+          </Select>
+        </FormItem>
+        <FormItem label="查询时间:">
+          <DatePicker
+            v-model="searchTime"
+            type="datetimerange"
+            placeholder="请选择查询时间段"
+            style="width: 400px"
+            transfer
+          ></DatePicker>
+        </FormItem>
+        <FormItem>
+          <Button type="primary" icon="ios-search" @click="toPage(1)"
+            >查询</Button
+          >
+        </FormItem>
+      </Form>
+
+      <Table
+        ref="TableList"
+        :columns="columns"
+        :data="dataList"
+        disabled-hover
+        border
+      ></Table>
+
+      <div class="part-page">
+        <Page
+          :current="current"
+          :total="total"
+          :page-size="size"
+          show-total
+          show-elevator
+          @on-change="toPage"
+        ></Page>
+      </div>
+    </div>
+  </div>
+</template>
+
+<script>
+import {
+  inspectionCollectLogPageList,
+  workList,
+  clientUserPageList
+} from "@/api";
+import { ACTION_TYPE } from "@/constants/enumerate";
+
+export default {
+  name: "inspection-collect-logs",
+  data() {
+    return {
+      filter: {
+        workId: 33,
+        subject: "SC",
+        examNumber: "",
+        name: "",
+        createUserId: null,
+        startTime: null,
+        endTime: null
+      },
+      ACTION_TYPE,
+      current: 1,
+      size: this.GLOBAL.pageSize,
+      total: 0,
+      works: [],
+      collectionUsers: [],
+      searchTime: [],
+      dataList: [],
+      columns: [
+        {
+          title: "工作",
+          key: "workName"
+        },
+        {
+          title: "科目",
+          key: "subject"
+        },
+        {
+          title: "学生姓名",
+          key: "studentName"
+        },
+        {
+          title: "准考证号",
+          key: "examNumber",
+          width: 130
+        },
+        {
+          title: "采集账号",
+          key: "createUserName"
+        },
+        {
+          title: "上传时间",
+          key: "createTime"
+        },
+
+        {
+          title: "识别方式",
+          key: "remark"
+        },
+        {
+          title: "登录时间",
+          key: "loginTime"
+        }
+      ]
+    };
+  },
+  mounted() {
+    this.getWorkList();
+    this.getList();
+  },
+  methods: {
+    async getCollectionUsers(workId) {
+      this.collectionUsers = await clientUserPageList({ workId });
+    },
+    async getWorkList() {
+      const data = await workList();
+      this.works = data.map(item => {
+        return {
+          id: item.id,
+          name: item.name
+        };
+      });
+    },
+    workChange() {
+      this.getCollectionUsers(this.filter.workId);
+    },
+    async getList() {
+      // const [startTime, endTime] = this.searchTime;
+      const datas = {
+        // ...this.filter,
+        // startTime,
+        // endTime,
+        curPage: this.current - 1,
+        pageSize: this.size
+      };
+      const data = await inspectionCollectLogPageList(datas);
+      this.dataList = data.data;
+      this.total = data.totalCount;
+    },
+    toPage(page) {
+      this.current = page;
+      this.getList();
+    },
+    exportLogs() {}
+  }
+};
+</script>

+ 199 - 3
src/modules/inspection/InspectionGrading.vue

@@ -1,15 +1,211 @@
 <template>
   <div class="inspection-grading">
-    inspection-grading
+    <Form ref="FilterForm" label-position="left" inline>
+      <FormItem>
+        <Select
+          v-model="filter.workId"
+          placeholder="请选择工作文件夹"
+          style="width: 150px"
+        >
+          <Option
+            v-for="(work, windex) in works"
+            :key="windex"
+            :value="work.id"
+            :label="work.name"
+          ></Option>
+        </Select>
+      </FormItem>
+      <FormItem>
+        <Select v-model="filter.areaCode" placeholder="请选择考区">
+          <Option value=""></Option>
+        </Select>
+      </FormItem>
+      <FormItem>
+        <Select v-model="filter.subject" placeholder="请选择科目">
+          <Option value=""></Option>
+        </Select>
+      </FormItem>
+      <FormItem>
+        <Select
+          v-model="filter.status"
+          placeholder="请选择类型"
+          clearable
+          style="width: 120px"
+        >
+          <Option
+            v-for="(val, key) in STATUS_TYPE"
+            :key="key"
+            :value="key"
+            :label="val"
+          ></Option>
+        </Select>
+      </FormItem>
+      <FormItem>
+        <Button type="primary" icon="ios-search" @click="toPage(1)"
+          >查询</Button
+        >
+      </FormItem>
+    </Form>
+
+    <div class="check-grade">
+      <div class="check-grade-list image-view-list image-view-list-4">
+        <div class="image-view" v-for="(image, index) in papers" :key="index">
+          <h5 class="image-view-title">{{ image.title }}</h5>
+          <div class="image-view-contain" @click="toReview(index)">
+            <img :src="image.thumbUrl" :alt="image.title" />
+          </div>
+        </div>
+      </div>
+      <div class="part-page">
+        <Page
+          :current="current"
+          :total="total"
+          :page-size="size"
+          show-total
+          show-elevator
+          @on-change="toPage"
+        ></Page>
+      </div>
+      <div class="check-grade-action">
+        <div class="paper-info" v-if="curPaper.id">
+          <p>{{ curPaper.examNumber }}</p>
+          <p>NO.{{ curPaper.sn }}</p>
+          <p>原档位:{{ curPaper.orgGrade }}</p>
+          <p>申请档位:{{ curPaper.applyGrade }}</p>
+        </div>
+        <Button
+          type="primary"
+          @click="confirm"
+          :disabled="curPaper.status"
+          v-if="curPaper.id"
+          >{{ curPaper.status ? "已同意" : "同意改档" }}</Button
+        >
+      </div>
+    </div>
+
+    <!-- image-preview -->
+    <image-preview
+      class="check-grade-image-preview"
+      :image-list="papers"
+      :init-index="curPaperIndex"
+      @on-prev="paperPrev"
+      @on-next="paperNext"
+      @page-prev="prevPage"
+      @page-next="nextPage"
+      header-hide
+      ref="ImagePreview"
+      v-if="papers.length"
+    ></image-preview>
   </div>
 </template>
 
 <script>
+import paperList from "@/constants/papers.json";
+import {
+  inspectionCheckGradePageList,
+  inspectionConfirmCheckGrade,
+  workList
+} from "@/api";
+import ImagePreview from "@/components/common/ImagePreview";
+
 export default {
   name: "inspection-grading",
+  components: { ImagePreview },
   data() {
-    return {};
+    return {
+      filter: {
+        workId: "",
+        areaCode: "",
+        subject: "",
+        status: ""
+      },
+      STATUS_TYPE: {
+        0: "未处理",
+        1: "已处理"
+      },
+      works: [],
+      current: 1,
+      size: 8,
+      total: 0,
+      totalPage: 1,
+      papers: [],
+      curPaper: {},
+      curPaperIndex: 0
+    };
+  },
+  mounted() {
+    this.initData();
   },
-  methods: {}
+  methods: {
+    initData() {
+      this.papers = paperList.map((item, index) => {
+        return {
+          ...item,
+          orgGrade: "A",
+          applyGrade: "B",
+          status: Math.random() < 0.3
+        };
+      });
+      this.curPaper = { ...this.papers[0] };
+      this.curPaperIndex = 0;
+    },
+    async getWorkList() {
+      const data = await workList();
+      this.works = data.map(item => {
+        return {
+          id: item.id,
+          name: item.name
+        };
+      });
+    },
+    async getList() {
+      const datas = {
+        ...this.filter,
+        current: this.current,
+        size: this.size
+      };
+      const data = await inspectionCheckGradePageList(datas);
+      this.papers = data.data;
+      this.total = data.totalCount;
+    },
+    toPage(page) {
+      this.current = page;
+      this.getList();
+    },
+    async confirm() {
+      // TODO:
+      await inspectionConfirmCheckGrade(this.curPaper.id);
+      this.$refs.ImagePreview.showNext();
+    },
+    toReview(index) {
+      this.curPaper = { ...this.papers[index] };
+      this.curPaperIndex = index;
+      this.$refs.ImagePreview.open();
+    },
+    paperPrev(index) {
+      this.curPaper = { ...this.papers[index] };
+      this.curPaperIndex = index;
+    },
+    paperNext(index) {
+      this.curPaper = { ...this.papers[index] };
+      this.curPaperIndex = index;
+    },
+    prevPage() {
+      if (this.current === 1) {
+        this.$Message.warning("当前已经是第一条数据了");
+        return;
+      }
+      this.current--;
+      this.getList();
+    },
+    nextPage() {
+      if (this.current === this.totalPage) {
+        this.$Message.warning("当前已经是最后一条数据了");
+        return;
+      }
+      this.current++;
+      this.getList();
+    }
+  }
 };
 </script>

+ 3 - 3
src/modules/inspection/InspectionLogs.vue → src/modules/inspection/InspectionScore.vue

@@ -1,12 +1,12 @@
 <template>
-  <div class="inspection-logs">
-    inspection-logs
+  <div class="inspection-score">
+    直接使用-main-StudentScore
   </div>
 </template>
 
 <script>
 export default {
-  name: "inspection-logs",
+  name: "inspection-score",
   data() {
     return {};
   },

+ 0 - 2
src/modules/main/Main.vue

@@ -23,8 +23,6 @@
     <div class="home-body">
       <div class="home-main">
         <router-view />
-
-        <view-footer></view-footer>
       </div>
     </div>
   </div>

+ 17 - 5
src/modules/main/PaperManage.vue

@@ -27,8 +27,13 @@
           ></InputNumber>
         </FormItem>
         <FormItem label="类型:">
-          <Select v-model="filter.isAbsent" placeholder="请选择类型">
-            <Option value=""></Option>
+          <Select v-model="filter.isAbsent">
+            <Option
+              v-for="(val, key) in CAFA_EXCEPTION_TYPE"
+              :key="key"
+              :value="key"
+              :label="val"
+            ></Option>
           </Select>
         </FormItem>
         <FormItem label="姓名:">
@@ -39,8 +44,13 @@
           ></Input>
         </FormItem>
         <FormItem label="排列方式:">
-          <Select v-model="filter.upload" placeholder="请选择排列方式">
-            <Option value=""></Option>
+          <Select v-model="filter.sort">
+            <Option
+              v-for="(val, key) in SORT_RULE_TYPE"
+              :key="key"
+              :value="key"
+              :label="val"
+            ></Option>
           </Select>
         </FormItem>
         <FormItem>
@@ -72,6 +82,7 @@
 
 <script>
 import { paperPageList } from "@/api";
+import { SORT_RULE_TYPE, CAFA_EXCEPTION_TYPE } from "@/constants/enumerate";
 import ImageActionList from "./components/ImageActionList";
 
 export default {
@@ -88,10 +99,11 @@ export default {
         endNumber: null,
         subject: "SC",
         areaCode: "1",
-        upload: "",
         sort: "examNumber",
         isAbsent: ""
       },
+      SORT_RULE_TYPE,
+      CAFA_EXCEPTION_TYPE,
       current: 1,
       size: this.GLOBAL.pageSize,
       total: 0,

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

@@ -76,7 +76,7 @@
 
       <Table
         ref="TableList"
-        :columns="columes"
+        :columns="columns"
         :data="students"
         disabled-hover
         border
@@ -157,7 +157,7 @@ export default {
       students: [],
       curStudent: {},
       isBuildColumn: false,
-      columes: [
+      columns: [
         {
           type: "index",
           title: "序号",
@@ -263,7 +263,7 @@ export default {
             title: subjectCode,
             key: subjectCode
           };
-          this.columes.splice(this.columes.length - 1, 0, column);
+          this.columns.splice(this.columns.length - 1, 0, column);
         });
       }
       this.total = data.totalCount;

+ 150 - 37
src/modules/main/StudentScore.vue

@@ -2,6 +2,26 @@
   <div class="student-score">
     <div class="part-box">
       <Form ref="FilterForm" label-position="left" inline>
+        <FormItem label="工作文件夹:" v-if="IS_INSPECTION">
+          <Select
+            v-model="filter.workId"
+            placeholder="请选择工作文件夹"
+            style="width: 150px"
+          >
+            <Option
+              v-for="(work, windex) in works"
+              :key="windex"
+              :value="work.id"
+              :label="work.name"
+            ></Option>
+          </Select>
+        </FormItem>
+        <FormItem label="考区:" v-if="IS_INSPECTION">
+          <Select v-model="filter.areaDode" placeholder="请选择考区">
+            <Option value=""></Option>
+          </Select>
+        </FormItem>
+
         <FormItem label="科目:">
           <Select v-model="filter.subjectId" placeholder="请选择科目">
             <Option value=""></Option>
@@ -11,8 +31,8 @@
         <FormItem label="号码:">
           <Select
             v-model="filter.codeType"
-            placeholder="请选择号码类型"
-            style="width: 150px"
+            placeholder="号码类型"
+            style="width: 100px"
           >
             <Option
               v-for="(val, key) in CODE_TYPE"
@@ -43,48 +63,65 @@
         </FormItem>
       </Form>
       <!--  -->
-      <div
-        class="student-score-content"
-        v-for="(student, index) in students"
-        :key="index"
-      >
-        <image-action-list
-          :data="student.scores"
-          ref="ImageActionList"
-          style="text-align:center;"
-        ></image-action-list>
+      <div class="student-score-content">
+        <table class="table" v-if="curStudent.id">
+          <tr>
+            <td></td>
+            <td :colspan="curStudent.scores.length">
+              <image-action-list
+                :data="curStudent.scores"
+                :column-number="3"
+                ref="ImageActionList"
+              ></image-action-list>
+            </td>
+          </tr>
+          <tr>
+            <td>姓名</td>
+            <td :colspan="curStudent.scores.length">{{ curStudent.name }}</td>
+          </tr>
+          <tr>
+            <td>考号</td>
+            <td :colspan="curStudent.scores.length">
+              {{ curStudent.examNumber }}
+            </td>
+          </tr>
+          <tr>
+            <td>总分</td>
+            <td :colspan="curStudent.scores.length">
+              {{ curStudent.sumScore }}
+            </td>
+          </tr>
+          <tr>
+            <td>档位</td>
+            <td v-for="(score, sindex) in curStudent.scores" :key="sindex">
+              {{ score.grade }}
+            </td>
+          </tr>
+          <tr>
+            <td>分数</td>
+            <td v-for="(score, sindex) in curStudent.scores" :key="sindex">
+              {{ score.score }}
+            </td>
+          </tr>
+        </table>
+      </div>
 
-        <div class="student-info">
-          <table class="table">
-            <tr>
-              <td>姓名</td>
-              <td :colspan="student.scores.length">{{ student.name }}</td>
-            </tr>
-            <tr>
-              <td>考号</td>
-              <td :colspan="student.scores.length">{{ student.examNumber }}</td>
-            </tr>
-            <tr>
-              <td>档位</td>
-              <td v-for="(score, sindex) in student.scores" :key="sindex">
-                {{ score.grade }}
-              </td>
-            </tr>
-            <tr>
-              <td>分数</td>
-              <td v-for="(score, sindex) in student.scores" :key="sindex">
-                {{ score.score }}
-              </td>
-            </tr>
-          </table>
-        </div>
+      <div class="part-page" v-if="total > 1">
+        <Page
+          :current="current"
+          :total="total"
+          :page-size="size"
+          show-total
+          show-elevator
+          @on-change="toPage"
+        ></Page>
       </div>
     </div>
   </div>
 </template>
 
 <script>
-import { studentScoreList } from "@/api";
+import { studentScoreList, workList } from "@/api";
 import { CODE_TYPE } from "@/constants/enumerate";
 import ImageActionList from "./components/ImageActionList";
 
@@ -94,17 +131,68 @@ export default {
   data() {
     return {
       filter: {
+        workId: this.$route.params && this.$route.params.workId,
+        areaDode: "",
         subjectId: "",
         codeType: "",
         code: "",
         name: ""
       },
       CODE_TYPE,
+      IS_INSPECTION: false,
+      works: [],
+      current: 1,
+      total: 2,
+      size: 1,
+      curUserRoleType: "",
+      curStudent: {},
       students: [
         {
           id: "12",
           name: "李刚",
           examNumber: "2020105133",
+          sumScore: 240,
+          scores: [
+            {
+              id: "1",
+              subjectName: "素描",
+              title: "2020105133",
+              score: "95",
+              grade: "A",
+              url:
+                "http://127.0.0.1:9000/api/file/image/download/33/1/833/1?random=fa8244bb-8ec4-46c1-a16e-1bd6f3b8848e",
+              thumbUrl:
+                "http://127.0.0.1:9000/api/file/image/download/33/1/833/2?random=497cc903-c01a-458a-9b4e-82b391cef176"
+            },
+            {
+              id: "1",
+              subjectName: "速写",
+              title: "2020105133",
+              score: "85",
+              grade: "B",
+              url:
+                "http://127.0.0.1:9000/api/file/image/download/33/1/833/1?random=fa8244bb-8ec4-46c1-a16e-1bd6f3b8848e",
+              thumbUrl:
+                "http://127.0.0.1:9000/api/file/image/download/33/1/833/2?random=497cc903-c01a-458a-9b4e-82b391cef176"
+            },
+            {
+              id: "1",
+              subjectName: "色彩",
+              title: "2020105133",
+              score: "90",
+              grade: "A",
+              url:
+                "http://127.0.0.1:9000/api/file/image/download/33/1/833/1?random=fa8244bb-8ec4-46c1-a16e-1bd6f3b8848e",
+              thumbUrl:
+                "http://127.0.0.1:9000/api/file/image/download/33/1/833/2?random=497cc903-c01a-458a-9b4e-82b391cef176"
+            }
+          ]
+        },
+        {
+          id: "122",
+          name: "李刚1",
+          examNumber: "2020105132",
+          sumScore: 242,
           scores: [
             {
               id: "1",
@@ -144,10 +232,35 @@ export default {
       ]
     };
   },
+  mounted() {
+    this.IS_INSPECTION =
+      this.$ls.get("user", { role: "" }).role === "INSPECTION";
+    this.total = this.students.length;
+    this.toPage(1);
+    if (this.IS_INSPECTION) this.getWorkList();
+  },
   methods: {
+    async getWorkList() {
+      const data = await workList();
+      this.works = data.map(item => {
+        return {
+          id: item.id,
+          name: item.name
+        };
+      });
+    },
     async toSearch() {
+      if (!this.filter.code || !this.filter.name) {
+        this.$Message.error("号码和姓名必须填写一个");
+        return;
+      }
       const data = await studentScoreList(this.filter);
       console.log(data);
+      this.total = data.length;
+    },
+    toPage(page) {
+      this.current = page;
+      this.curStudent = this.students[page - 1];
     }
   }
 };

+ 2 - 2
src/modules/main/WorkManage.vue

@@ -22,7 +22,7 @@
 
           <Table
             ref="TableList"
-            :columns="columes"
+            :columns="columns"
             :data="works"
             :row-class-name="rowClassName"
             disabled-hover
@@ -46,7 +46,7 @@ export default {
         name: ""
       },
       works: [],
-      columes: [
+      columns: [
         {
           title: "#",
           key: "id",

+ 3 - 3
src/modules/mark/MarkTaskManage.vue

@@ -29,7 +29,7 @@
           <td>
             <Select v-model="task.sortRule">
               <Option
-                v-for="(val, key) in SORT_TYPE"
+                v-for="(val, key) in SORT_ORDER_TYPE"
                 :key="key"
                 :value="key"
                 :label="val"
@@ -70,14 +70,14 @@
 <script>
 import { markTaskInfo, createMarkTask } from "@/api";
 import { calcSum } from "@/plugins/utils";
-import { SORT_TYPE, BOOLEAN_TYPE } from "@/constants/enumerate";
+import { SORT_ORDER_TYPE, BOOLEAN_TYPE } from "@/constants/enumerate";
 
 export default {
   name: "mark-task-manage",
   data() {
     return {
       subjectId: this.$route.params.subjectId,
-      SORT_TYPE,
+      SORT_ORDER_TYPE,
       BOOLEAN_TYPE,
       areaCode: "",
       isSubmit: false,

+ 163 - 4
src/modules/quality/Quality.vue

@@ -1,15 +1,174 @@
 <template>
-  <div class="quality">
-    quality
+  <div class="quality home">
+    <div class="home-header">
+      <view-header> </view-header>
+    </div>
+
+    <div class="home-body">
+      <div class="home-main">
+        <Form ref="FilterForm" label-position="left" inline>
+          <FormItem label="工作文件夹:">
+            <Select
+              v-model="filter.workId"
+              placeholder="请选择工作文件夹"
+              style="width: 150px"
+            >
+              <Option
+                v-for="(work, windex) in works"
+                :key="windex"
+                :value="work.id"
+                :label="work.name"
+              ></Option>
+            </Select>
+          </FormItem>
+          <FormItem label="科目:">
+            <Select v-model="filter.subject" placeholder="请选择科目">
+              <Option value=""></Option>
+            </Select>
+          </FormItem>
+          <FormItem label="考区:">
+            <Select v-model="filter.areaCode" placeholder="请选择考区">
+              <Option value=""></Option>
+            </Select>
+          </FormItem>
+          <FormItem label="起始编号:">
+            <InputNumber
+              v-model="filter.startNumber"
+              placeholder="请输入数字"
+              clearable
+            ></InputNumber>
+          </FormItem>
+          <FormItem label="终止编号:">
+            <InputNumber
+              v-model="filter.endNumber"
+              placeholder="请输入数字"
+              clearable
+            ></InputNumber>
+          </FormItem>
+          <FormItem label="类型:">
+            <Select v-model="filter.type">
+              <Option
+                v-for="(val, key) in CAFA_EXCEPTION_TYPE"
+                :key="key"
+                :value="key"
+                :label="val"
+              ></Option>
+            </Select>
+          </FormItem>
+          <FormItem label="姓名:">
+            <Input
+              v-model.trim="filter.name"
+              placeholder="请输入姓名"
+              clearable
+            ></Input>
+          </FormItem>
+          <FormItem label="排序:">
+            <Select v-model="filter.sort">
+              <Option
+                v-for="(val, key) in SORT_RULE_TYPE"
+                :key="key"
+                :value="key"
+                :label="val"
+              ></Option>
+            </Select>
+          </FormItem>
+          <FormItem>
+            <Button type="primary" icon="ios-search" @click="toPage(1)"
+              >查询</Button
+            >
+          </FormItem>
+        </Form>
+        <image-action-list
+          :data="papers"
+          :column-number="6"
+          :actions="['rotate', 'absent']"
+          ref="ImageActionList"
+        ></image-action-list>
+
+        <div class="part-page">
+          <Page
+            :current="current"
+            :total="total"
+            :page-size="size"
+            show-total
+            show-elevator
+            @on-change="toPage"
+          ></Page>
+        </div>
+      </div>
+    </div>
   </div>
 </template>
 
 <script>
+import { workList, paperPageList } from "@/api";
+import { SORT_RULE_TYPE, CAFA_EXCEPTION_TYPE } from "@/constants/enumerate";
+import ImageActionList from "../main/components/ImageActionList";
+
 export default {
   name: "quality",
+  components: { ImageActionList },
   data() {
-    return {};
+    return {
+      filter: {
+        workId: 33,
+        subject: "SC",
+        areaCode: "1",
+        startNumber: null,
+        endNumber: null,
+        isAbsent: "",
+        name: "",
+        sort: "examNumber"
+      },
+      SORT_RULE_TYPE,
+      CAFA_EXCEPTION_TYPE,
+      current: 1,
+      size: 12,
+      total: 0,
+      papers: [],
+      curPaper: {},
+      works: []
+    };
+  },
+  mounted() {
+    this.getWorkList();
+    this.getList();
   },
-  methods: {}
+  methods: {
+    async getWorkList() {
+      const data = await workList();
+      this.works = data.map(item => {
+        return {
+          id: item.id,
+          name: item.name
+        };
+      });
+    },
+    async getList() {
+      const datas = {
+        ...this.filter,
+        page: this.current - 1,
+        size: this.size
+      };
+      const data = await paperPageList(datas);
+      this.papers = data.data.map(paper => {
+        return {
+          id: paper.id,
+          title: paper.examNumber,
+          url: paper.imgSrc,
+          thumbUrl: paper.thumbSrc,
+          missing: paper.missing,
+          stage: paper.stage,
+          style: {},
+          deg: 0
+        };
+      });
+      this.total = data.totalCount;
+    },
+    toPage(page) {
+      this.current = page;
+      this.getList();
+    }
+  }
 };
 </script>

+ 24 - 5
src/routers/inspection.js

@@ -1,18 +1,29 @@
 import { getNavs } from "@/plugins/utils";
 
 import Inspection from "../modules/inspection/Inspection";
-import InspectionLogs from "../modules/inspection/InspectionLogs";
+import InspectionActionLogs from "../modules/inspection/InspectionActionLogs";
+import InspectionCollectLogs from "../modules/inspection/InspectionCollectLogs";
 import InspectionGrading from "../modules/inspection/InspectionGrading";
+// 纪检成绩查询页面,直接使用管理员中的成绩查询页面,页面做了权限控制
+import StudentScore from "../modules/main/StudentScore";
 
 const inspectionRoutes = [
   {
-    path: "inspection-logs",
-    name: "InspectionLogs",
-    component: InspectionLogs,
+    path: "inspection-action-logs",
+    name: "InspectionActionLogs",
+    component: InspectionActionLogs,
     meta: {
       title: "操作日志"
     }
   },
+  {
+    path: "inspection-collect-logs",
+    name: "InspectionCollectLogs",
+    component: InspectionCollectLogs,
+    meta: {
+      title: "采集日志"
+    }
+  },
   {
     path: "inspection-grading",
     name: "InspectionGrading",
@@ -20,6 +31,14 @@ const inspectionRoutes = [
     meta: {
       title: "改档处理"
     }
+  },
+  {
+    path: "inspection-score",
+    name: "InspectionScore",
+    component: StudentScore,
+    meta: {
+      title: "成绩查询"
+    }
   }
 ];
 
@@ -30,7 +49,7 @@ export default [
     path: "/inspection",
     name: "Inspection",
     component: Inspection,
-    redirect: { name: "InspectionLogs" },
+    redirect: { name: "InspectionActionLogs" },
     children: inspectionRoutes
   }
 ];