Sfoglia il codice sorgente

check homework completed

hare8999@163.com 2 anni fa
parent
commit
2a0c6be497

+ 12 - 0
src/api/webApi/homework.js

@@ -36,6 +36,18 @@ export function getTeacherHomeworks(params) {
   })
 }
 
+//
+// GET
+// /prod-api/front/homework/getHomeworkStudents
+// 01 查询作业的学生列表
+export function getHomeworkStudents(params) {
+  return request({
+    url: '/front/homework/getHomeworkStudents',
+    method: 'get',
+    params
+  })
+}
+
 //
 // POST
 // /prod-api/front/homework/publicStudentHomework

+ 1 - 1
src/views/questioncenter/components/generate-tabs/paper-by-intelligent.vue

@@ -20,7 +20,7 @@
               <span>清空</span>
             </div>
           </div>
-          <el-divider></el-divider>
+          <el-divider class="generating_divider"></el-divider>
           <!--  tags -->
           <div class="tags">
             <el-tag v-for="tag in tags" :key="tag.id" closable style="margin-right: 24px; margin-bottom: 24px"

+ 59 - 2
src/views/questioncenter/components/generate-tabs/paper-work-history-detail.vue

@@ -1,10 +1,67 @@
 <template>
-
+  <div>
+    <dynamic-table :rows="rows" :columns="columns">
+      <template #type="{display}">
+        {{ translateType(display) }}
+      </template>
+      <template #doneTime="{row, display}">
+        <span>{{ row.isDo ? row.doneTime : '' }}</span>
+      </template>
+      <template #status="{row}">
+        {{ row.isDo ? '已完成' : '未完成' }}
+      </template>
+      <template #rate="{row, display}">
+        {{ row.isDo ? display + '%' : '' }}
+      </template>
+      <template #action="{row}">
+        <el-button v-if="isPaperDone(row)" type="text" icon="el-icon-view"
+                   @click="$emit('paperView',row)">查看
+        </el-button>
+      </template>
+    </dynamic-table>
+  </div>
 </template>
 
 <script>
+import { getHomeworkStudents } from '@/api/webApi/homework'
+import DynamicTable from '@/components/dynamic-table/index'
+import consts from '@/common/mx-const'
+import HomeworkPaper from '@/views/questioncenter/components/homework-paper'
+
 export default {
-  name: 'paper-work-history-detail'
+  name: 'paper-work-history-detail',
+  components: { HomeworkPaper, DynamicTable },
+  props: ['workId'],
+  data() {
+    return {
+      columns: [
+        { prop: 'id', label: 'ID', width: '80px', sortable: true },
+        { prop: 'type', label: '类型', width: '120px', slotBody: 'type' },
+        { prop: 'title', label: '学生' },
+        { prop: 'doneTime', label: '完成时间', width: '180px', slotBody: 'doneTime' },
+        { prop: 'isDo', label: '状态', width: '120px', slotBody: 'status', sortable: true },
+        { prop: 'scoreRate', label: '正确率', width: '90px', slotBody: 'rate', sortable: true },
+        { prop: 'action', label: '操作', width: '80px', slotBody: 'action' }
+      ],
+      rows: []
+    }
+  },
+  mounted() {
+    getHomeworkStudents({
+      workId: this.workId
+    }).then(res => {
+      this.rows = res.data
+    })
+  },
+  methods: {
+    translateType(type) {
+      const enumType = consts.enum.homeworkTypes.find(t => t.value == type)
+      return enumType?.label || type
+    },
+    isPaperDone(row) {
+      return row.isDo && consts.enum.homeworkTypes.find(t => t.value == row.type)?.usePaper
+    }
+  }
 }
 </script>
 

+ 43 - 4
src/views/questioncenter/components/generate-tabs/paper-work-history.vue

@@ -23,6 +23,17 @@
     </dynamic-table>
     <pagination v-if="total>0" :total="total" :page.sync="queryParams.pageNum" :limit.sync="queryParams.pageSize"
                 @pagination="getList"></pagination>
+    <el-dialog v-if="detailOption.visible" :visible.sync="detailOption.visible" :title="detailOption.title"
+               width="900px">
+      <paper-work-history-detail :work-id="detailOption.workId"
+                                 @paperView="handlePaperView"></paper-work-history-detail>
+    </el-dialog>
+    <!--elDrawer不要内嵌在elDialog中,否则遮罩可能重迭-->
+    <el-drawer v-if="paperOption.visible" :visible.sync="paperOption.visible" :title="paperOption.title" size="100%">
+      <div class="pl30 pr30 pb30">
+        <homework-paper :params="paperOption.params"></homework-paper>
+      </div>
+    </el-drawer>
   </el-card>
 </template>
 
@@ -30,10 +41,12 @@
 import { getTeacherHomeworks } from '@/api/webApi/homework'
 import consts from '@/common/mx-const'
 import DynamicTable from '@/components/dynamic-table/index'
+import PaperWorkHistoryDetail from '@/views/questioncenter/components/generate-tabs/paper-work-history-detail'
+import HomeworkPaper from '@/views/questioncenter/components/homework-paper'
 
 export default {
   name: 'paper-work-history',
-  components: { DynamicTable },
+  components: { HomeworkPaper, PaperWorkHistoryDetail, DynamicTable },
   data() {
     return {
       extraData: { type: consts.enum.generateScene.paperWork.value },
@@ -48,14 +61,32 @@ export default {
         { prop: 'title', label: '标题' },
         { prop: 'createTime', label: '创建时间', width: '180px' },
         { prop: 'status', label: '状态', width: '160px', slotBody: 'status' },
-        { prop: 'action', label: '操作', width: '120px', slotBody: 'action' }],
+        { prop: 'action', label: '操作', width: '120px', slotBody: 'action' }
+      ],
       rows: [],
-      total: 0
+      total: 0,
+      detailOption: {
+        visible: false,
+        title: '',
+        workId: ''
+      },
+      paperOption: {
+        visible: false,
+        title: '',
+        params: {
+          type: '',
+          examineeId: ''
+        }
+      }
     }
   },
   mounted() {
     this.getList()
   },
+  deactivated() {
+    this.detailOption.visible = false
+    this.paperOption.visible = false
+  },
   methods: {
     handleQuery() {
       this.queryParams.pageNum = 1
@@ -71,7 +102,15 @@ export default {
       return enumType?.label || type
     },
     handleViewDetail(row) {
-      this.msgInfo('Not implement')
+      this.detailOption.workId = row.id
+      this.detailOption.title = row.title
+      this.detailOption.visible = true
+    },
+    handlePaperView(row) {
+      this.paperOption.title = this.translateType(row.type)
+      this.paperOption.params.type = row.type
+      this.paperOption.params.examineeId = row.id
+      this.paperOption.visible = true
     }
   }
 }

+ 1 - 1
src/views/questioncenter/generating.vue

@@ -353,7 +353,7 @@ export default {
     margin-right: 16px;
   }
 
-  .el-divider {
+  .el-divider.generating_divider {
     margin: 0;
     background: #47c6a2;
   }

+ 12 - 7
src/views/questioncenter/homework.vue

@@ -22,13 +22,14 @@
       </dynamic-table>
       <pagination v-if="total>0" :total="total" :page.sync="queryParams.pageNum" :limit.sync="queryParams.pageSize"
                   @pagination="getList"></pagination>
-      <el-dialog v-if="videoOption.dialogVisible" :visible.sync="videoOption.dialogVisible" :title="videoOption.title"
+      <el-dialog v-if="videoOption.visible" :visible.sync="videoOption.visible" :title="videoOption.title"
                  :close-on-click-modal="false" width="800px" @close="handleVideoClosed">
         <mx-video :src="videoOption.src" :ali-id-type="videoOption.aliIdType"></mx-video>
       </el-dialog>
-      <el-drawer v-if="paperOption.dialogVisible" :visible.sync="paperOption.dialogVisible" :title="paperOption.title"
+      <!--elDrawer不要内嵌在elDialog中,否则遮罩可能重迭-->
+      <el-drawer v-if="paperOption.visible" :visible.sync="paperOption.visible" :title="paperOption.title"
                  :close-on-click-modal="false" size="100%" @close="handlePaperClose">
-        <div class="pl30 pr30">
+        <div class="pl30 pr30 pb30">
           <homework-paper :params="paperOption.params"></homework-paper>
         </div>
       </el-drawer>
@@ -64,13 +65,13 @@ export default {
       total: 0,
       // dialog video
       videoOption: {
-        dialogVisible: false,
+        visible: false,
         title: '',
         src: null,
         aliIdType: consts.enum.aliIdType.AliIdResourcePerson
       },
       paperOption: {
-        dialogVisible: false,
+        visible: false,
         params: {
           id: '',
           type: ''
@@ -82,6 +83,10 @@ export default {
   mounted() {
     this.getList()
   },
+  deactivated() {
+    this.videoOption.visible = false
+    this.paperOption.visible = false
+  },
   methods: {
     async getList() {
       const res = await getStudentHomeworks(this.queryParams)
@@ -101,7 +106,7 @@ export default {
     handleVideo(row) {
       this.videoOption.src = row.content
       this.videoOption.title = row.title
-      this.videoOption.dialogVisible = true
+      this.videoOption.visible = true
     },
     handleVideoClosed() {
       // 稍等,先让视频观看记录自动提交,再触发刷新,以获取到新的作业完成状态
@@ -111,7 +116,7 @@ export default {
       this.paperOption.params.id = row.id
       this.paperOption.params.type = row.type
       this.paperOption.title = this.translateType(row.type)
-      this.paperOption.dialogVisible = true
+      this.paperOption.visible = true
     },
     handlePaperClose() {
       setTimeout(() => this.getList(), 200)