tanyanfei 1 year ago
parent
commit
98d6561ad0
5 changed files with 540 additions and 533 deletions
  1. 6 2
      src/api.js
  2. 7 1
      src/router.js
  3. 176 530
      src/views/tasks/Index.vue
  4. 8 0
      src/views/tasks/new_file.vue
  5. 343 0
      src/views/tasks/work_analysis.vue

+ 6 - 2
src/api.js

@@ -161,9 +161,9 @@ export default {
     updatePaperInfo: params => {
         return axios.put(`${baseURL}/api/admin/papers/update`, params)
     },
-    // 阅卷任务
+    // 阅卷任务  
     getMarkTaskList: params => {
-        return axios.get(`${baseURL}/api/admin/marktask/list`, { params: params })
+        return axios.get(`${baseURL}/api/admin/teacher/mark/task/list`, { params: params })
     },
     addMarkTask: params => {
         return axios.post(`${baseURL}/api/admin/marktask`, params)
@@ -177,6 +177,10 @@ export default {
     getMarkTaskStudents: params => {
         return axios.get(`${baseURL}/api/admin/papers/task/students`, { params: params })
     },
+	// 成绩分析/api/mark/teacher/mark/paper/statistic
+	getStatistic: params => {
+	    return axios.get(`${baseURL}/api/admin/teacher/mark/paper/statistic`, { params: params })
+	},
     // 学生阅卷任务
     delMarkTaskStudents: params => {
         return axios.delete(`${baseURL}/api/admin/marktask/students`, { params: params })

+ 7 - 1
src/router.js

@@ -118,7 +118,13 @@ export default new Router({
                     component: () =>
                         import ('./views/tasks/Index.vue'),
                     name: '阅卷任务'
-                }
+                },
+				{
+				    path: '/task/work_analysis',
+				    component: () =>
+				        import ('./views/tasks/work_analysis.vue'),
+				    name: '成绩分析'
+				}
             ]
         },
         {

+ 176 - 530
src/views/tasks/Index.vue

@@ -6,192 +6,109 @@
         <el-breadcrumb-item>阅卷任务</el-breadcrumb-item>
       </el-breadcrumb>
     </div>
-    <el-form :model="queryParams" label-width="80px" class="filter-form" :inine="true">
+    <el-form :model="params" label-width="80px" class="filter-form" :inine="true">
       <el-row>
         <el-col :span="4">
           <el-form-item label="学校">
-            <el-select size="mini" v-model="queryParams.school_id">
+            <el-select size="mini" v-model="params.school_id">
               <el-option label="人大附中" value="人大附中">人大附中</el-option>
             </el-select>
           </el-form-item>
         </el-col>
         <el-col :span="4">
-          <el-form-item label="年级" v-model="queryParams.grade_id">
-            <el-select v-model="queryParams.school_id" size="mini">
+          <el-form-item label="年级" v-model="params.grade_id">
+            <el-select v-model="params.school_id" size="mini">
               <el-option label="高三一班" value="高三一班">高三一班</el-option>
             </el-select>
           </el-form-item>
         </el-col>
         <el-col :span="8">
           <el-form-item label-width="10" style="margin-left: 10px">
-            <el-button type="primary" @click="getData" size="mini">筛选</el-button>
-            <el-button type="primary" plain icon="el-icon-plus" size="mini" @click="handleAdd">新增</el-button>
+            <el-button type="primary" @click="getList()" size="mini">筛选</el-button>
+            <!-- <el-button type="primary" plain icon="el-icon-plus" size="mini" @click="handleAdd">新增</el-button> -->
           </el-form-item>
         </el-col>
       </el-row>
     </el-form>
-    <el-table v-loading="loading" :data="list" style="width: 100%; margin-top: 10px" height="50vh">
-      <el-table-column align="center" prop="name" label="名称" />
-      <!-- <el-table-column align="center" prop="phone" label="参考人数" /> -->
-      <!-- <el-table-column align="center" prop="phone" label="已上传人数" /> -->
-      <el-table-column align="center" prop="ctime" label="创建时间" />
-      <el-table-column align="center" prop="date" label="操作" width="320">
-        <template slot-scope="scope">
-          <el-button @click="edit(scope.row.id)" size="mini" type="warning">编辑</el-button>
-          <el-button @click="openUploadPaper(scope.row.id)" size="mini" type="primary">上传试卷</el-button>
-          <el-button @click="del(scope.row.id)" size="mini" type="danger">删除</el-button>
-        </template>
-      </el-table-column>
-    </el-table>
-    <Page ref="pageButton" :current="form.page" :page_size="form.page_size" :total="total" @pageChange="gopage" />
-    <!-- 新增/编辑阅卷任务 -->
-    <el-dialog title="新增/编辑阅卷任务" :visible.sync="open" width="500px" append-to-body>
-      <el-form ref="form" :model="form" :rules="rules" label-width="80px">
-        <el-form-item label="名称" prop="name">
-          <el-input clearable v-model="form.name" placeholder="请输入名称"></el-input>
-        </el-form-item>
-        <el-form-item label="试卷模板" prop="role">
-          <el-select v-model="form.paper_id" placeholder="请选择试卷模板" filterable>
-            <el-option v-for="item in papersList" :key="item.id" :label="item.name" :value="item.id">
-            </el-option>
-          </el-select>
-        </el-form-item>
-      </el-form>
-      <div slot="footer" class="dialog-footer">
-        <el-button type="primary" @click="submitForm">确 定</el-button>
-        <el-button @click="open = false">取 消</el-button>
-      </div>
-    </el-dialog>
-    <!-- 预览识别结果 -->
-    <el-dialog title="预览识别结果" :visible.sync="showAnsVisible" width="500px" append-to-body>
-      <el-form ref="form" :model="form" :rules="rules" label-width="80px">
-        <el-image :src="curStudentRecImg">
-          <div slot="error" class="image-slot">
-            <i class="el-icon-picture-outline"></i>
-          </div>
-        </el-image>
-      </el-form>
-      <div slot="footer" class="dialog-footer">
-        <el-button @click="showAnsVisible = false">关 闭</el-button>
-      </div>
-    </el-dialog>
-    <!-- 上传试卷 -->
-    <el-dialog title="试卷上传" :visible.sync="uploadDialogVisible" width="90%" @close="closeUploadDialog">
-      <el-row :gutter="20">
-        <el-col :span="16">
-          <!-- <el-row>
-            <el-col :span="6">参考人数:{{studentsList.length}}</el-col>
-            <el-col :span="6">已上传:{{studentsList.length}}</el-col>
-            <el-col :span="6">识别异常:</el-col>
-          </el-row> -->
-          <el-form :inline="true">
-            <el-form-item label="姓名">
-              <el-input size="mini" placeholder="请输入姓名/考号" v-model="queryName" clearable></el-input>
-            </el-form-item>
-            <el-form-item label="识别异常">
-              <el-select v-model="queryMarkStatus" size="mini" clearable>
-                <el-option v-for="item in $const.recErrorList" :label="item.label" :value="item.value"></el-option>
-
-              </el-select>
-            </el-form-item>
-            <el-form-item>
-              <el-button type="primary" size="mini" @click=searchMarkData>搜索</el-button>
-              <el-button size="mini" @click="reSetMarkData">重置</el-button>
-              <el-button @click="downloadObjectiveResult(curTaskId)" type="warning" size="mini" icon="el-icon-download">
-                导出</el-button>
-              <el-button @click="reTryMark" size="mini" type="success" icon="el-icon-printer">重新识别</el-button>
-            </el-form-item>
-          </el-form>
-          <el-row>
-            <el-col :span="24">
-              <el-tabs v-model="activeName" @tab-click="handleTabClick">
-                <el-tab-pane :label="'正常('+recSucTotal+')'" name="1"></el-tab-pane>
-                <el-tab-pane :label="'异常('+recErrTotal+')'" name="100"></el-tab-pane>
-              </el-tabs>
-            </el-col>
-          </el-row>
-          <el-table v-loading="loading" 
-            :data="studentsList" 
-            style="width: 100%; margin-top: 10px"
-            @selection-change="handleSelectionChange" 
-            height="60vh">
-            <el-table-column type="selection" width="45" v-if="activeName==100"></el-table-column>
-            <el-table-column align="center" prop="student_no" label="姓名" width="80" />
-            <el-table-column align="center" prop="student_no" label="考号" width="150">
-              <template slot-scope="scope">
-                <el-button type="text" @click="showStudentImgs(scope.row)" size="mini">{{scope.row.student_no}}
-                </el-button>
-              </template>
-            </el-table-column>
-            <el-table-column align="center" prop="objective_score" label="得分" />
-            <!-- <el-table-column align="center" prop="mark_status" label="试卷状态">
-              <template slot-scope="scope">
-                <span v-if="scope.row.mark_status==0" style="color:#e6a23c;">待上传</span>
-                <span v-if="scope.row.mark_status==1" style="color:#85ce61;">已上传</span>
-              </template>
-            </el-table-column> -->
-            <el-table-column align="center" prop="mark_status_name" label="识别状态">
-              <template slot-scope="scope">
-                <span v-if="scope.row.mark_status<=0" style="color:#f78989;">{{scope.row.mark_status_name}}</span>
-                <span v-if="scope.row.mark_status==1" style="color:#85ce61;">正常</span>
-              </template>
-            </el-table-column>
-            <el-table-column align="center" prop="ctime" label="时间" width="140px">
-              <template slot-scope="scope">
-                <span style="font-size:12px;">{{scope.row.ctime}}</span>
-              </template>
-            </el-table-column>
-            <el-table-column align="center" prop="date" label="操作" fixed="right" width="120px">
-              <template slot-scope="scope">
-                <el-button @click="showCurRecImg(scope.row)" size="mini" type="text">查看</el-button>
-                <el-button @click="showCurRecKhImg(scope.row)" size="mini" type="text">考号</el-button>
-                <el-button @click="delStudents(scope.row.id,scope.$index)" size="mini" type="text">删除</el-button>
-              </template>
-            </el-table-column>
-          </el-table>
-          <Page ref="pageButton" :current="recPage" :page_size="recPageSize" :total="recTotal"
-            @pageChange="goRecPage" />
-        </el-col>
-        <el-col :span="8">
-          <div style="height:85vh;overflow-y:scroll;position: relative;">
-            <el-button style="position:absolute;top:0px;left:100px;" size="small" type="warning" icon="el-icon-printer">
-              试卷扫描</el-button>
-            <span style="position:absolute;top:0px;right:40px;color:green;">成功上传:{{fileList.length}}</span>
-            <el-upload class="upload-demo" action="http://test.scxjc.club/api/admin/papers/uploadpaper"
-              :on-success="handleUploadSuccess" :file-list="fileList" list-type="picture" :data="{taskid:taskid}"
-              multiple>
-              <el-button size="small" type="primary">点击上传</el-button>
-              <div slot="tip" class="el-upload__tip">只能上传jpg/png文件,且不超过500kb</div>
-            </el-upload>
-            <img v-if="fileList.length<1" src="../../assets/scanner.png" alt=""
-              style="position:absolute;left: 50%;transform: translate(-50%,120px)">
-          </div>
-        </el-col>
-      </el-row>
-      <div slot="footer" class="dialog-footer">
-        <el-button type="primary" @click="closeUploadDialog">关 闭</el-button>
-      </div>
-    </el-dialog>
-    <!-- 重新识别 -->
-    <el-dialog title="重新识别" :visible.sync="remarkDialogVisible" width="60%" @close="closeRemarkDialog">
-      <el-form :inline="true">
-        <el-form-item label="考号噪声参数">
-          <el-input-number v-model="form.khVoiceNum" :min="1" :max="5"></el-input-number>
-        </el-form-item>
-        <el-form-item label="考号填涂比例阈值">
-          <el-input-number v-model="form.khFillRate" :min="1" :max="5"></el-input-number>
-        </el-form-item>
-        <el-form-item label="题目噪声参数">
-          <el-input-number v-model="form.tmVoiceNum" :min="1" :max="5"></el-input-number>
-        </el-form-item>
-        <el-form-item label="题目填涂比例阈值">
-          <el-input-number v-model="form.tmFillRate" :min="1" :max="5"></el-input-number>
-        </el-form-item>
-      </el-form>
-      <div slot="footer" class="dialog-footer">
-        <el-button type="primary" @click="doReTryMark">确 定</el-button>
-      </div>
-    </el-dialog>
+	<el-table :data="tableData" stripe style="width: 100%" height="65vh">
+	  <el-table-column prop="name" label="作业名称"> </el-table-column>
+	  <el-table-column prop="full_score" label="满分">
+	    <template slot-scope="scope">
+	      <div class="bold">{{ scope.row.full_score }}</div>
+	    </template>
+	  </el-table-column>
+	  <el-table-column prop="max_score" label="最高分">
+	    <template slot-scope="scope">
+	      <div class="bold">{{ scope.row.max_score }}</div>
+	    </template>
+	  </el-table-column>
+	  <el-table-column prop="avg_score" label="平均分">
+	    <template slot-scope="scope">
+	      <div class="bold">{{ scope.row.avg_score }}</div>
+	    </template>
+	  </el-table-column>
+	  <el-table-column prop="pass_rate" label="及格率">
+	    <template slot-scope="scope">
+	      <div class="bold" style="color: #0a9dff">
+	        {{ scope.row.pass_rate }}
+	      </div>
+	    </template>
+	  </el-table-column>
+	  <el-table-column prop="phone" label="批阅进度" width="180">
+	    <template slot-scope="scope">
+	     <div class="d-f prosss_box">
+	        <el-progress
+	          :percentage="scope.row.ww"
+	          :stroke-width="8"
+	          :color="
+	            scope.row.total_students == scope.row.marked_students
+	              ? '#0A9DFF'
+	              : '#FA0A2F'
+	          "
+	        ></el-progress>
+	        <div class="contrasts">
+	          <span>{{ scope.row.marked_students }}/</span>
+	          <span>{{ scope.row.total_students }}</span>
+	        </div>
+	      </div>
+	    </template>
+	  </el-table-column>
+	  <el-table-column prop="ctime" label="上传时间">
+	  </el-table-column>
+	  <el-table-column prop="phone" label="操作">
+	    <template slot-scope="scope">
+	      <el-button
+	        @click="
+	          jump(
+	            '/tk_yp?title=' +
+	              scope.row.name +
+	              '&id=' +
+	              scope.row.id
+	          )
+	        "
+	        type="text"
+	        size="small"
+	        >批阅</el-button
+	      >
+	      <el-button
+	        type="text"
+	        size="small"
+	        @click="
+	          jump(
+	            '/Answer_analysis?title=' +
+	              scope.row.name +
+	              '&id=' +
+	              scope.row.id,2
+	          )
+	        "
+	        >查看</el-button
+	      >
+	    </template>
+	  </el-table-column>
+	</el-table>
+	
+    <Page ref="pageButton" :current="params.page" :page_size="params.page_size" :total="total" @pageChange="gopage" />
+ 
   </section>
 </template>
 <script>
@@ -202,377 +119,106 @@
     },
     data() {
       return {
-        loading: false,
-        queryParams: {
-          page: 1,
-        },
-        form: {
-          khVoiceNum:5,
-          khFillRate:3.0,
-          tmVoiceNum:3,
-          tmFillRate:1.8
-        },
-        form1: {},
-        form2: {},
-        list: [{}, {}],
-        total: 0,
-        title: "新增用户",
-        open: false,
-        doctorList: [],
-        rules: {},
-        uploadDialogVisible: false,
-        remarkDialogVisible:false,
-        fileList: [],
-        papersList: [],
-        taskid: null,
-        timer: null,
-        studentsList: [],
-        showAnsVisible: false,
-        curStudentRecImg: "",
-        activeName: "1",
-        curTaskId: null,
-        recPage: 1,
-        recPageSize: 20,
-        recTotal: 0,
-        recParams: {},
-        recSucTotal: 0,
-        recErrTotal: 0,
-        queryName: "",
-        queryMarkStatus: null,
-        selectException:[]
+		  params: {
+		    page: 1,
+		    page_size: 10,
+		    mtype: "work",
+		    // ctgid: "",
+		    year: "",
+		    // status: "",
+		    name: "",
+		  },
+		  yearL: [],
+		  tableData: [],
+		  classL: [],
+		  total: 0,
+		  navKey: 2,
       };
     },
     methods: {
-      submitUpload() {
-        this.$refs.upload.submit();
-      },
-      del(id) {
-        this.$confirm("确认删除?", "提示", {
-          type: "warning",
-        }).then(() => {
-          this.$api
-            .delMarkTask({
-              id: id,
-            })
-            .then((res) => {
-              if (!res.data.code) {
-                this.msgSuccess("删除成功");
-                this.getData();
-              } else {
-                this.$msgError(res.data.message);
-              }
-            });
-        });
-      },
-      gopage(size) {
-        if (size) {
-          this.queryParams.page_size = size;
-        }
-        this.queryParams.page = this.$refs.pageButton.page;
-        this.getData();
-      },
-      goRecPage(size) {
-        if (size) {
-          this.recPageSize = size;
-        }
-        this.recPage = this.$refs.pageButton.page;
-        this.recParams = {
-          task_id: this.curTaskId,
-          page: this.recPage,
-          page_size: this.recPageSize,
-          status: this.activeName,
-          name: this.queryName,
-          err_status: this.queryMarkStatus
-        }
-        window.clearInterval(this.timer);
-        this.openUploadPaper(this.curTaskId)
-      },
-      getData() {
-        this.loading = true;
-        this.$api
-          .getPapersSearch({})
-          .then((res) => {
-            this.papersList = res.data.data;
-            this.loading = false
-          });
-        this.$api.getMarkTaskList().then(res => {
-          this.total = res.data.data.total;
-          this.list = res.data.data.list;
-        })
-      },
-      handleAdd() {
-        this.open = true;
-        this.title = "新增医生";
-        this.form = {};
-      },
-      /** 提交按钮 */
-      submitForm() {
-        this.$refs["form"].validate((valid) => {
-          if (valid) {
-            if (this.form.id != null) {
-              this.$api.editMarkTask(this.form).then((res) => {
-                if (res.data.code == 0) {
-                  this.msgSuccess("成功!");
-                  this.open = false;
-                  this.getData();
-                } else {
-                  this.msgError(res.data.message);
-                }
-              });
-            } else {
-              this.$api.addMarkTask(this.form).then((res) => {
-                if (res.data.code == 0) {
-                  this.msgSuccess("成功!");
-                  this.open = false;
-                  this.getData();
-                } else {
-                  this.msgError(res.data.message);
-                }
-              });
-            }
-          }
-        });
-      },
-      remoteMethod(query) {
-        if (query !== "") {
-          // this.loading = true;
-          this.$api
-            .getDoctorsSearchList({
-              name: query,
-            })
-            .then((res) => {
-              this.doctorList = res.data.data;
-              this.$set(this.doctorList, res.data.data);
-              // this.loading = false;
-            });
-        } else {
-          this.doctorList = [];
-        }
-      },
-      searchMarkData() {
-        this.recParams.name = this.queryName;
-        this.recParams.errStatus = this.queryMarkStatus;
-        window.clearInterval(this.timer);
-        this.openUploadPaper(this.curTaskId);
-      },
-      reSetMarkData() {
-        this.queryName = null;
-        this.queryMarkStatus = null;
-        this.queryParams.name = null;
-        this.queryParams.err_status = null;
-        window.clearInterval(this.timer);
-        this.openUploadPaper(this.curTaskId);
-      },
-      openUploadPaper(id) {
-        this.curTaskId = id
-        this.uploadDialogVisible = true
-        this.taskid = id
-        let that = this;
-        this.loading = true;
-        this.recParams = {
-          task_id: id,
-          page: this.recPage,
-          page_size: this.recPageSize,
-          status: this.activeName,
-          name: this.queryName,
-          err_status: this.queryMarkStatus
-        }
-        this.$api.getMarkTaskStudents(this.recParams).then(res => {
-          this.studentsList = res.data.data.list;
-          this.studentsList.forEach(item => {
-            let mark_status = item.mark_status;
-            if (mark_status != 1) {
-              item.mark_status_name = this.$const.recErrorList.filter((ritem) => {
-                return ritem.value == mark_status;
-              })[0].label
-            } else {
-              item.mark_status_name = "正常"
-            }
-          })
-          this.recTotal = res.data.data.total;
-          this.recSucTotal = res.data.data.suc_total;
-          this.recErrTotal = res.data.data.err_total;
-          this.loading = false;
-        })
-        window.clearInterval(this.timer);
-        this.timer = setInterval(function () {
-          that.$api.getMarkTaskStudents(that.recParams).then(res => {
-            that.studentsList = res.data.data.list;
-            that.studentsList.forEach(item => {
-              let mark_status = item.mark_status;
-              if (mark_status != 1) {
-                item.mark_status_name = that.$const.recErrorList.filter((ritem) => {
-                  return ritem.value == mark_status;
-                })[0].label
-              } else {
-                item.mark_status_name = "正常"
-              }
-            })
-            that.recTotal = res.data.data.total;
-            that.recSucTotal = res.data.data.suc_total;
-            that.recErrTotal = res.data.data.err_total;
-          })
-        }, 4000)
-      },
-      closeUploadDialog() {
-        this.uploadDialogVisible = false;
-        this.fileList = [];
-        window.clearInterval(this.timer);
-      },
-      closeRemarkDialog(){
-        this.remarkDialogVisible = false;
-      },
-      handlePreview(file) {
-        console.log(file);
-      },
-      handleUploadSuccess(res, file, fileList) {
-        if (!res.code) {
-          if (fileList.every(item => item.status == "success")) {
-            fileList.map(item => {
-              item.response && this.fileList.push({
-                "url": res.data.url,
-                "name": res.data.name
-              })
-            })
-          }
-        }
-      },
-      delStudents(id, index) {
-        this.$api.delMarkTaskStudents({
-          id: id
-        }).then(res => {
-          this.msgSuccess("删除成功!");
-          this.studentsList.splice(index, 1)
-        })
-      },
-      handleRemove(e) {
-        console.log(e)
-      },
-      showStudentImgs(row) {
-        this.curStudentRecImg = row.imgs;
-        this.showAnsVisible = true;
-      },
-      showCurRecImg(row) {
-        this.curStudentRecImg = row.ans_imgs.replace(".png", "_draw_ans.png");
-        this.showAnsVisible = true;
-      },
-      showCurRecKhImg(row) {
-        let ext = row.ans_imgs.split("/").pop()
-        if (ext) {
-          ext = "." + ext.split(".")[1]
-        }
-        this.curStudentRecImg = row.ans_imgs.replace("_ans" + ext, "_sno" + ext);
-        this.showAnsVisible = true;
-      },
-
-      handleTabClick(tab, event) {
-        this.activeName = tab.name;
-        this.recParams = {
-          task_id: this.curTaskId,
-          page: this.recPage,
-          page_size: this.recPageSize,
-          status: this.activeName,
-          name: this.queryName,
-          err_status: this.queryMarkStatus
-        }
-        window.clearInterval(this.timer);
-        this.openUploadPaper(this.curTaskId)
-      },
-      downloadObjectiveResult(task_id) {
-        this.$api
-          .downloadObjectiveResult({
-            task_id: task_id
-          })
-          .then((res) => {
-            var elink = document.createElement("a");
-            let blob = new Blob([res.data], {
-              type: "application/vnd.ms-excel,charset=UTF-8",
-            });
-            let objUrl = URL.createObjectURL(blob);
-            let file_name = decodeURIComponent(
-              res.headers["content-disposition"].split("=")[1]
-            );
-            elink.download = file_name;
-            elink.style.display = "none";
-            elink.href = objUrl;
-            document.body.appendChild(elink);
-            elink.click();
-            document.body.removeChild(elink);
-            this.download_loading = false;
-          });
-      },
-      handleSelectionChange(val) {
-        this.selectException = [];
-        if(val.length > 0){
-          val.forEach(item=>{
-            let task_img = item.task_id+";;"+item.imgs+";;"+item.id;
-            this.selectException.push(task_img);
-          })
-          window.clearInterval(this.timer);
-        }
-      },
-      reTryMark(){
-        if(this.selectException.length < 1){
-          this.msgError("请选择需要重新识别的答卷!");
-        }else{
-          this.remarkDialogVisible = true;
-        }
-      },
-      doReTryMark(){
-        let urls = []
-        this.selectException.forEach(item=>{
-          item = item + ";;" + String(this.form.khVoiceNum) + ";;" + String(this.form.khFillRate);
-          item = item + ";;" + String(this.form.tmVoiceNum) + ";;" + String(this.form.tmFillRate);
-          urls.push(item);
-        })
-        let that = this;
-        this.$api.reTryMarkPaper({urls:urls}).then(res=>{
-          this.remarkDialogVisible = false;
-          this.getData();
-          window.clearInterval(this.timer);
-          this.timer = setInterval(function () {
-          that.$api.getMarkTaskStudents(that.recParams).then(res => {
-            that.studentsList = res.data.data.list;
-            that.studentsList.forEach(item => {
-              let mark_status = item.mark_status;
-              if (mark_status != 1) {
-                item.mark_status_name = that.$const.recErrorList.filter((ritem) => {
-                  return ritem.value == mark_status;
-                })[0].label
-              } else {
-                item.mark_status_name = "正常"
-              }
-            })
-            that.recTotal = res.data.data.total;
-            that.recSucTotal = res.data.data.suc_total;
-            that.recErrTotal = res.data.data.err_total;
-          })
-        }, 4000)
-        })
-      }
+		gopage(size) {
+		  if (size) {
+		    this.params.page_size = size;
+		  }
+		  this.params.page = this.$refs.pageButton.page;
+		  this.getList();
+		},
+		//重置
+		reset() {
+		  this.params.year = "";
+		  this.params.page = 1;
+		  this.params.name = "";
+		  this.params.cid = "";
+		  this.getList();
+		},
+		//搜索
+		search() {
+		  this.params.page = 1;
+		  this.getList();
+		},
+		//分页
+		handleCurrentChange(val) {
+		  this.params.page = val;
+		  this.getList();
+		},
+		//获取列表
+		getList() {
+		  var that = this;
+		  var obj = JSON.parse(JSON.stringify(this.params));
+		  for (let key in obj) {
+		    if (!obj[key] && key != "name") {
+		      obj[key] = "0";
+		    }
+		  }
+		  this.$api.getMarkTaskList(obj).then((res) => {
+			  console.log(res)
+		    if (res.data.code == 0) {
+		      res.data.data.list.forEach((item) => {
+		        if (item.marked_students) {
+		          item.ww = Math.round(
+		            (item.marked_students / item.total_students) * 100
+		          );
+		        } else {
+		          item.ww = 0;
+		        }
+		      });
+		      that.tableData = res.data.data.list;
+		      that.total = res.data.data.total;
+		    } else {
+		      that.tableData = [];
+		      that.total = 0;
+		      that.$message.warning(res.mess);
+		    }
+		  });
+		},
+		jump(url,id) {
+		  id==2?localStorage.setItem("sonNav",2):'';
+		  if (url) {
+		    this.$router.push(url);
+		  }
+		},
     },
     created() {
-      this.getData();
+     this.getList();
 
     },
   };
 </script>
-<style lang="scss">
-  .el-upload-list--picture .el-upload-list__item {
-    width: 150px;
-    float: left;
-    margin-right: 10px;
-    position: relative;
-  }
 
-  .el-upload-list--picture .el-upload-list__item.is-success .el-upload-list__item-name {
-    position: absolute;
-    z-index: 100;
-    height: 70px;
-    line-height: 130px;
-  }
 
-  .el-upload-list--picture .el-upload-list__item-thumbnail {
-    width: 125px;
-  }
+
+<style>
+.prosss_box .el-progress.el-progress--line {
+  width: 88px;
+  margin: auto 5px auto 0;
+}
+.prosss_box .el-progress-bar {
+  padding-right: 0;
+}
+.prosss_box .el-progress__text {
+  display: none;
+}
+.prosss_box{
+	display:flex;
+}
 </style>

+ 8 - 0
src/views/tasks/new_file.vue

@@ -0,0 +1,8 @@
+<template>
+</template>
+
+<script>
+</script>
+
+<style>
+</style>

+ 343 - 0
src/views/tasks/work_analysis.vue

@@ -0,0 +1,343 @@
+<template>
+  <section class="content">
+    <div class="breadcrumb">
+      <el-breadcrumb separator="/">
+        <el-breadcrumb-item><a href="/">阅卷管理</a></el-breadcrumb-item>
+        <el-breadcrumb-item>成绩分析</el-breadcrumb-item>
+      </el-breadcrumb>
+    </div>
+    <el-form :model="params" label-width="80px" class="filter-form" :inine="true">
+      <el-row>
+        <el-col :span="4">
+          <el-form-item label="学校">
+            <el-select size="mini" v-model="params.school_id">
+              <el-option label="人大附中" value="人大附中">人大附中</el-option>
+            </el-select>
+          </el-form-item>
+        </el-col>
+        <el-col :span="4">
+          <el-form-item label="年级" v-model="params.grade_id">
+            <el-select v-model="params.school_id" size="mini">
+              <el-option label="高三一班" value="高三一班">高三一班</el-option>
+            </el-select>
+          </el-form-item>
+        </el-col>
+        <el-col :span="8">
+          <el-form-item label-width="10" style="margin-left: 10px">
+            <el-button type="primary" @click="get_list()" size="mini">筛选</el-button>
+            <!-- <el-button type="primary" plain icon="el-icon-plus" size="mini" @click="handleAdd">新增</el-button> -->
+          </el-form-item>
+        </el-col>
+      </el-row>
+    </el-form>
+	<el-table :data="tableData" stripe style="width: 100%" height="65vh">
+	  <el-table-column prop="name" label="作业名称"> </el-table-column>
+	  <el-table-column prop="score" label="满分">
+	    <template slot-scope="scope">
+	      <div class="bold">{{ scope.row.full_score }}</div>
+	    </template>
+	  </el-table-column>
+	  <el-table-column prop="max_score" label="最高分">
+	    <template slot-scope="scope">
+	      <div class="bold">{{ scope.row.max_score }}</div>
+	    </template>
+	  </el-table-column>
+	  <el-table-column prop="avg_score" label="平均分">
+	    <template slot-scope="scope">
+	      <div class="bold">{{ scope.row.avg_score }}</div>
+	    </template>
+	  </el-table-column>
+	  <el-table-column prop="pass_rate" label="及格率">
+	    <template slot-scope="scope">
+	      <div class="bold">
+	        {{ scope.row.pass_rate }}
+	      </div>
+	    </template>
+	  </el-table-column>
+	  <el-table-column prop="phone" label="答题人数">
+	    <template slot-scope="scope">
+	       <div style="color: #0a9dff">
+	        <span>{{ scope.row.marked_students }}/</span>
+	        <span>{{ scope.row.total_students }}</span>
+	      </div>
+	    </template>
+	  </el-table-column>
+	  <el-table-column prop="ctime" label="上传时间" width="180">
+	  </el-table-column>
+	  <el-table-column prop="phone" label="操作" width="80">
+	    <template slot-scope="scope">
+	      <el-button
+	        type="text"
+	        size="small"
+	        @click="jump('/answer_analysis?title=' + scope.row.name + '&id=' + scope.row.id)"
+	        >查看</el-button
+	      >
+	    </template>
+	  </el-table-column>
+	</el-table>
+	
+    <Page ref="pageButton" :current="params.page" :page_size="params.page_size" :total="total" @pageChange="gopage" />
+ 
+  </section>
+</template>
+<script>
+  import Page from "../../components/Page";
+  export default {
+    components: {
+      Page,
+    },
+    data() {
+      return {
+		  params: {
+		    cid: '',
+		    year: "",
+		    page: 1,
+		    page_size: 10,
+		    mtype: "work",
+		  },
+		  value1: "",
+		  yearL: [],
+		  classL: [],
+		  tableData: [],
+		  total: 0,
+		  navKey: 2,
+      };
+    },
+    methods: {
+		gopage(size) {
+		  if (size) {
+		    this.params.page_size = size;
+		  }
+		  this.params.page = this.$refs.pageButton.page;
+		  this.get_list();
+		},
+		//筛选
+		nav_change() {
+		  // this.getList();
+		},
+		//折线图
+		getList() {
+		  var obj = {};
+		  var that = this;
+		  if (this.params.year) {
+		    obj.year = this.params.year;
+		  }
+		  obj.cid = this.params.cid?obj.cid=this.params.cid:0;
+		  this.$api.getStatistic(obj).then((res) => {
+		    if (res.errcode == 0) {
+		      if (that.navKey == 2) {
+		        this.drawLine(
+		          res.data.avg_score.x,
+		          res.data.score.y,
+		          res.data.high_score.y,
+		          res.data.avg_score.y,
+		          res.data.low_scores.y
+		        );
+		      }
+		    }else{
+		      that.$message.warning(res.mess)
+		    }
+		  });
+		  if (!this.params.year) {
+		    delete this.params.year;
+		  }
+		  this.get_list(this.params);
+		},
+		jump(url) {
+		  if (url) {
+		    this.$router.push(url);
+		  }
+		},
+		get_list(obj1) {
+		  // if (!obj1.cid) {
+		  //   delete obj1.cid;
+		  // }
+		  this.$api.getMarkTaskList(this.params).then((res) => {
+		    if (res.data.code == 0) {
+		      this.tableData = res.data.data.list;
+		      this.total = res.data.data.total;
+		    }
+		  });
+		},
+		//分页
+		handleCurrentChange(val) {
+		  this.params.page = val;
+		  this.getList();
+		},
+		drawLine(xdata, ydata1, ydata2, ydata3, ydata4) {
+		  let myChart = this.$echarts.init(document.getElementById("myChart"));
+		  // 绘制图表
+		  myChart.setOption({
+		    color: ["#80FFA5", "#00DDFF", "#37A2FF", "#FF0087", "#FFBF00"],
+		    tooltip: {
+		      trigger: "axis",
+		      axisPointer: {
+		        type: "line",
+		        label: {
+		          backgroundColor: "#6a7985",
+		        },
+		      },
+		    },
+		    title: {
+		      text: "作业分数分布",
+		      padding: [2, 0, 0, 21],
+		    },
+		    grid: {
+		      left: "0%",
+		      right: "4%",
+		      bottom: "3%",
+		      containLabel: true,
+		    },
+		    xAxis: [
+		      {
+		        type: "category",
+		        boundaryGap: false,
+		        data: xdata,
+		        axisLine: {
+		          lineStyle: {
+		            color: "#D9D9D9",
+		          },
+		        },
+		        axisLabel: {
+		          //x轴文字的配置
+		          show: true,
+		          textStyle: {
+		            color: "#999",
+		            fontSize: 13,
+		            align: "center",
+		          },
+		        },
+		        axisTick: {
+		          show: false,
+		        },
+		      },
+		    ],
+		    yAxis: [
+		      {
+		        type: "value",
+		        axisLabel: {
+		          formatter: "{value}",
+		          textStyle: {
+		            color: "#999",
+		          },
+		        },
+		        splitLine: {
+		          show: true,
+		          lineStyle: {
+		            type: "dashed",
+		            color: "#D9D9D9",
+		          },
+		        },
+		        axisTick: {
+		          //y轴刻度线
+		          show: false,
+		        },
+		        axisLine: {
+		          //y轴
+		          show: false,
+		        },
+		        axisLabel: {
+		          //x轴文字的配置
+		          show: true,
+		          margin: 40,
+		          textStyle: {
+		            color: "#999",
+		            fontSize: 13,
+		            align: "left",
+		          },
+		        },
+		      },
+		    ],
+		    legend: {
+		      // orient: 'vertical',
+		      left: "right",
+		      top: "top",
+		      padding: [5, 40, 0, 0],
+		      data: ["满分", "最高分", "平均分", "最低分"],
+		    },
+		    series: [
+		      {
+		        name: "满分",
+		        type: "line",
+		        lineStyle: {
+		          width: 0,
+		          color: "#eee",
+		        },
+		        showSymbol: false,
+		        itemStyle: {
+		          normal: {
+		            color: "#1839E0",
+		            lineStyle: {
+		              width: 2,
+		              color: "#1839E0",
+		              type: "dotted", //'dotted'虚线 'solid'实线
+		            },
+		          },
+		        },
+		        smooth: true,
+		        data: ydata1,
+		      },
+		      {
+		        name: "最高分",
+		        type: "line",
+		        showSymbol: false,
+		        itemStyle: {
+		          normal: {
+		            color: "#FA0A2F", //改变折线点的颜色
+		          },
+		        },
+		        smooth: true,
+		        data: ydata2,
+		      },
+		      {
+		        name: "平均分",
+		        type: "line",
+		        showSymbol: false,
+		        itemStyle: {
+		          normal: {
+		            color: "#FFB95F", //改变折线点的颜色
+		          },
+		        },
+		        smooth: true,
+		        data: ydata3,
+		      },
+		      {
+		        name: "最低分",
+		        type: "line",
+		        showSymbol: false,
+		        itemStyle: {
+		          normal: {
+		            color: "#26C999", //改变折线点的颜色
+		          },
+		        },
+		        smooth: true,
+		        data: ydata4,
+		      },
+		    ],
+		  });
+		},
+    },
+    created() {
+     this.get_list();
+
+    },
+  };
+</script>
+
+
+
+<style>
+.prosss_box .el-progress.el-progress--line {
+  width: 88px;
+  margin: auto 5px auto 0;
+}
+.prosss_box .el-progress-bar {
+  padding-right: 0;
+}
+.prosss_box .el-progress__text {
+  display: none;
+}
+.prosss_box{
+	display:flex;
+}
+</style>