fuliqi
2024-07-11 8269775d78f974a266c848ea15e73a85dafec2a5
监控展示还没开始做题的学生
7个文件已修改
168 ■■■■■ 已修改文件
src/router.js 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/answer/info.vue 72 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/exam/exam/ExamManage.vue 30 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/exam/exam/MarkPaper.vue 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/exam/exam/MarkPaperDetail.vue 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/exam/exam/monitor.vue 57 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/meet/index.vue 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/router.js
@@ -291,7 +291,7 @@
        component: () => import('@/views/education/cheat/list'),
        name: 'EducationCheatPage',
        meta: { title: '作弊记录', noCache: true }
      },
      }
    ]
  },
  {
@@ -345,7 +345,7 @@
          affix: true
        },
        component: () => import('@/views/sys/SysSetting')
      },
      }
    ]
  },
src/views/answer/info.vue
@@ -4,7 +4,7 @@
    <div class="bg">
      <div class="main">
        <!-- 待返回的标题 -->
        <TitleIndex title="答卷管理" />
        <TitleIndex title="答卷管理"/>
        <div class="content">
          <!-- 搜索 -->
          <div>
@@ -23,9 +23,9 @@
          </div>
          <!-- 表格 -->
          <el-table v-loading="listLoading" :data="tableData" border fit highlight-current-row>
            <el-table-column prop="examName" label="考试名称" align="center" />
            <el-table-column prop="paperName" label="试卷名称" align="center" />
            <el-table-column prop="userName" width="150" label="参考人" align="center" />
            <el-table-column prop="examName" label="考试名称" align="center"/>
            <el-table-column prop="paperName" label="试卷名称" align="center"/>
            <el-table-column prop="userName" width="150" label="参考人" align="center"/>
            <el-table-column label="得分" width="150px" align="center">
              <template slot-scope="{row}">
                {{ row.score }} / {{ row.totalScore }}
@@ -36,7 +36,11 @@
                {{ row.questionCorrect }} / {{ row.questionCount }}
              </template>
            </el-table-column>
            <el-table-column prop="doTime" label="耗时" width="80px" align="center" />
            <el-table-column prop="doTime" label="耗时" width="100px" align="center">
              <template slot-scope="{row}">
                {{ formattedDoTime(row) }}
              </template>
            </el-table-column>
            <el-table-column prop="submitTime" label="提交时间" width="240px" align="center">
              <template slot-scope="{row}">
                <span :style="row.status === 0 ? '' : 'color: red'">
@@ -51,7 +55,7 @@
            </el-table-column>
          </el-table>
          <pagination v-show="total > 0" :total="total" :page.sync="queryParam.pageIndex"
            :limit.sync="queryParam.pageSize" @pagination="search" />
                      :limit.sync="queryParam.pageSize" @pagination="search"/>
        </div>
      </div>
    </div>
@@ -67,7 +71,7 @@
  components: {
    Pagination
  },
  data() {
  data () {
    return {
      listLoading: true,
      queryParam: {
@@ -82,16 +86,22 @@
      tableData: [],
      visible: false,
      subjects: []
    };
    }
  },
  created() {
    this.queryParam.examId = this.$route.query.id;
    this.queryParam.userId = this.$route.query.userId;
    this.search();
  created () {
    this.queryParam.examId = this.$route.query.id
    this.queryParam.userId = this.$route.query.userId
    this.search()
  },
  methods: {
    formattedDoTime (row) {
      const totalSeconds = row.doTime
      const minutes = Math.floor(totalSeconds / 60)
      const seconds = totalSeconds % 60
      return `${minutes}分${seconds < 10 ? '0' + seconds : seconds}秒`
    },
    // 获取列表
    search() {
    search () {
      this.listLoading = true
      examPaperAnswerApi.page(this.queryParam).then(re => {
        this.tableData = re.data.list
@@ -101,29 +111,29 @@
        this.listLoading = false
      })
    },
    view(row) {
      this.$router.push({ path: '/answer/answer-detail', query: { id: row.id } });
    view (row) {
      this.$router.push({ path: '/answer/answer-detail', query: { id: row.id } })
    },
    handleExport() {
    handleExport () {
      let that = this
      let url = '/api/admin/examPaperAnswer/exportExcel?userName=' + this.queryParam.userName;
      if (this.queryParam.userId) url += '&userId=' + this.queryParam.userId;
      if (this.queryParam.examId) url += '&examId=' + this.queryParam.examId;
      var x = new XMLHttpRequest();
      x.open("POST", url, true);
      x.responseType = "blob";
      let url = '/api/admin/examPaperAnswer/exportExcel?userName=' + this.queryParam.userName
      if (this.queryParam.userId) url += '&userId=' + this.queryParam.userId
      if (this.queryParam.examId) url += '&examId=' + this.queryParam.examId
      var x = new XMLHttpRequest()
      x.open('POST', url, true)
      x.responseType = 'blob'
      x.onload = function () {
        var url = window.URL.createObjectURL(x.response);
        var a = document.createElement("a");
        a.href = url;
        if (that.queryParam.examId) a.download = that.tableData[0].examName + '.xlsx';
        if (that.queryParam.userId) a.download = that.tableData[0].userName + '.xlsx';
        a.click();
      };
      x.send();
        var url = window.URL.createObjectURL(x.response)
        var a = document.createElement('a')
        a.href = url
        if (that.queryParam.examId) a.download = that.tableData[0].examName + '.xlsx'
        if (that.queryParam.userId) a.download = that.tableData[0].userName + '.xlsx'
        a.click()
      }
      x.send()
    }
  }
};
}
</script>
<style scoped lang="scss">
.flex {
src/views/exam/exam/ExamManage.vue
@@ -35,10 +35,10 @@
        label="参考班级"
        prop="className"
      ></el-table-column>
<!--      <el-table-column-->
<!--        label="班级人数"-->
<!--        prop="studentNum"-->
<!--      ></el-table-column>-->
      <!--      <el-table-column-->
      <!--        label="班级人数"-->
      <!--        prop="studentNum"-->
      <!--      ></el-table-column>-->
      <el-table-column
        label="考试地点"
        prop="examPlace"
@@ -81,8 +81,10 @@
            <el-button slot="reference" type="danger" size="small">删除</el-button>
          </el-popconfirm>
          <el-button v-if="scope.row.status === 'finished'" type="success" size="small" @click="markPaper(scope.row)">阅卷</el-button>
          <el-button type="danger" size="small" @click="deleteExam(scope.row.id)">删除</el-button>
          <el-button v-if="scope.row.status === 'finished'" type="success" size="small" @click="markPaper(scope.row)">
            阅卷
          </el-button>
          <el-button type="danger" size="small" @click="deleteExam(scope.row)">删除</el-button>
          <el-button type="warning" size="small" @click="monitor(scope.row)">监控</el-button>
        </template>
      </el-table-column>
@@ -245,16 +247,22 @@
        this.classesList = res.data.data
      })
    },
    deleteExam (id) {
      deleteExamById(id).then(res => {
        this.$message.success('删除成功')
        this.page()
    deleteExam (row) {
      this.$confirm('确认是否删除' + row.examName + '?', '提示', {
        confirmButtonText: '确定',
        cancelButtonText: '取消',
        type: 'warning'
      }).then(() => {
        deleteExamById(row.id).then(res => {
          this.$message.success('删除成功')
          this.page()
        })
      })
    },
    handlerEdit (row) {
      this.examForm = {
        ...row,
      time: [row.startTime, row.endTime]
        time: [row.startTime, row.endTime]
      }
      this.title = '修改考试'
      this.open = true
src/views/exam/exam/MarkPaper.vue
@@ -91,7 +91,6 @@
  mounted () {
    this.examInfo.examName = this.$route.query.examName
    this.examInfo.examId = this.$route.query.examId
    console.log('------->' + this.examInfo.examName + '------->' + this.examInfo.examId)
    if (this.examInfo.examId) {
      this.getExamInfo()
    }
src/views/exam/exam/MarkPaperDetail.vue
@@ -56,6 +56,7 @@
        </el-row>
      </el-form>
    </div>
    <el-empty v-if="empty" style="width:1200px;height:500px;"></el-empty>
  </div>
</template>
@@ -71,11 +72,13 @@
    getStudentExam(this.$route.query.examId, this.$route.query.userId).then(re => {
      this.formLoading = true
      this.form = re.data.data
      if (!this.form.titleItems) this.empty = true;
      this.formLoading = false
    })
  },
  data () {
    return {
      empty: false,
      paperQuestionList: [],
      form: {},
      formLoading: false,
src/views/exam/exam/monitor.vue
@@ -10,11 +10,11 @@
    </el-form>
    <el-table v-loading="listLoading" :data="tableData" border fit highlight-current-row style="width: 100%">
      <el-table-column align="center" prop="examName" label="考试" />
      <el-table-column align="center" prop="userName" label="姓名" show-overflow-tooltip />
      <el-table-column align="center" prop="createTime" label="开始时间" />
      <el-table-column align="center" prop="doTime" label="耗时(秒)" />
      <el-table-column align="center" prop="status" label="状态" :formatter="statusFormatter" />
      <el-table-column align="center" prop="examName" label="考试"/>
      <el-table-column align="center" prop="userName" label="姓名" show-overflow-tooltip/>
      <el-table-column align="center" prop="createTime" label="开始时间"/>
      <el-table-column align="center" prop="doTime" label="耗时(秒)"/>
      <el-table-column align="center" prop="status" label="状态" :formatter="statusFormatter"/>
      <el-table-column label="操作" align="center">
        <template slot-scope="{row}">
          <el-popover
@@ -23,7 +23,7 @@
            trigger="click">
            <el-form :model="addTimeForm" ref="addTimeForm" :rules="addTimeRule">
              <el-form-item label="学员">
                <div>{{row.userName}}</div>
                <div>{{ row.userName }}</div>
              </el-form-item>
              <el-form-item label="加多少分钟">
                <el-input v-model="addTimeForm.addTimeM" type="number" size="small"/>
@@ -45,15 +45,15 @@
      </el-table-column>
    </el-table>
    <pagination v-show="total > 0" :total="total" :page.sync="queryParam.pageIndex" :limit.sync="queryParam.pageSize"
      @pagination="search" />
                @pagination="search"/>
    <el-dialog :visible.sync="visible" width="400px">
      <el-form :model="form" ref="form" label-width="100px" v-loading="formLoading" :rules="rules">
        <el-form-item label="名称:" prop="name" required>
          <el-input v-model="form.name" maxlength="10" show-word-limit />
          <el-input v-model="form.name" maxlength="10" show-word-limit/>
        </el-form-item>
        <el-form-item label="排序:" prop="itemOrder" required>
          <el-input-number v-model="form.itemOrder" type="number" :min="1" :max="100" />
          <el-input-number v-model="form.itemOrder" type="number" :min="1" :max="100"/>
        </el-form-item>
        <el-form-item>
          <el-button type="primary" @click="submitForm">提交</el-button>
@@ -74,7 +74,7 @@
export default {
  components: { Pagination },
  data() {
  data () {
    return {
      listLoading: true,
      queryParam: {
@@ -117,18 +117,19 @@
          { required: true, message: '请输入加时时间', trigger: 'blur' }
        ]
      },
    };
    }
  },
  created() {
    this.queryParam.examId = this.$route.query.examId;
  created () {
    this.queryParam.examId = this.$route.query.examId
    this.search()
  },
  methods: {
    // 处理加时
    handlerAddTime() {
    handlerAddTime (row) {
      this.$refs['addTimeForm'].validate((valid) => {
        if (valid) {
          this.addTimeForm.examId = this.queryParam.examId
          this.addTimeForm.userId = row.userId
          addTime(this.addTimeForm).then(res => {
            this.$message.success('加时成功')
          })
@@ -136,28 +137,30 @@
      })
    },
    // 强制交卷
    handlerForceSubmit(userId) {
    handlerForceSubmit (userId) {
      this.forceSubmitForm.examId = this.queryParam.examId
      this.forceSubmitForm.userId = userId
      forceSubmit(this.forceSubmitForm).then(res => {
        this.$message.success('强制交卷成功')
      })
    },
    handleNullify(row) {
      let cheatObj = { examId: row.examId, cheatUser: row.userId };
    handleNullify (row) {
      let cheatObj = { examId: row.examId, cheatUser: row.userId }
      cheatApi.edit(cheatObj).then(res => {
        this.$message.success(res.message);
        this.$message.success(res.message)
      })
    },
    statusFormatter(row) {
    statusFormatter (row) {
      if (row.status === 'temp') {
        return '进行中'
      } else if (row.status === 'finish') {
        return '已结束'
      } else if (!row.status) {
        return '未开始'
      }
    },
    // 获取列表
    search() {
    search () {
      this.listLoading = true
      monitorList(this.queryParam).then(re => {
        re = re.data
@@ -168,17 +171,17 @@
        this.listLoading = false
      })
    },
    edit(row) {
    edit (row) {
      cheatApi.select(row.id).then(re => {
        if (re.code === 1) {
          this.form = re.data;
          this.visible = true;
          this.form = re.data
          this.visible = true
        } else {
          this.$message.error(re.message)
        }
      })
    },
    status(row) {
    status (row) {
      let question = {
        id: row.id,
        status: row.status === '禁用' ? '启用' : '禁用'
@@ -192,7 +195,7 @@
        }
      })
    },
    deletecheat(row) {
    deletecheat (row) {
      let _this = this
      cheatApi.deletecheat(row.id).then(re => {
        if (re.code === 1) {
@@ -203,7 +206,7 @@
        }
      })
    },
    submitForm() {
    submitForm () {
      let _this = this
      this.$refs.form.validate((valid) => {
        if (valid) {
@@ -223,7 +226,7 @@
        }
      })
    },
    resetForm() {
    resetForm () {
      let lastId = this.form.id
      this.$refs['form'].resetFields()
      this.form.id = lastId
src/views/meet/index.vue
@@ -34,6 +34,7 @@
    jitsiApi.addListener('readyToClose', () => {
      window.close()
    })
  }
}