|
@@ -1,23 +1,7 @@
|
|
|
<template>
|
|
|
- <div class="task-detail">
|
|
|
- <div class="task-detail-top">
|
|
|
- <div class="title">
|
|
|
- <span class="title-name">{{ course_name }}</span>
|
|
|
- <span class="title-time">{{ time_space_view_txt }}</span>
|
|
|
- </div>
|
|
|
- <div class="cs_item_name">{{ cs_item_name }}</div>
|
|
|
- <div class="learning-material">
|
|
|
- <div class="learning-material-title">学习资料</div>
|
|
|
- <el-tag
|
|
|
- v-for="item in cs_item_learning_material_list"
|
|
|
- :key="item.file_id"
|
|
|
- color="#fff"
|
|
|
- :title="item.file_name"
|
|
|
- >
|
|
|
- <a :href="item.file_url" target="_blank">{{ item.file_name }}</a>
|
|
|
- </el-tag>
|
|
|
- </div>
|
|
|
- </div>
|
|
|
+ <div v-loading="loading" class="task-detail">
|
|
|
+ <task-top :item-info="itemInfo" />
|
|
|
+
|
|
|
<div class="task-detail-main">
|
|
|
<div class="time-type">{{ timeType }}任务 {{ name }}</div>
|
|
|
<div class="time-interval">{{ time_space_view_txt }}</div>
|
|
@@ -29,9 +13,10 @@
|
|
|
:key="item.courseware_id"
|
|
|
color="#fff"
|
|
|
:title="item.courseware_name"
|
|
|
- @click="finishTask(item.courseware_id)"
|
|
|
+ @click="finishTask(item.courseware_id, item.is_finished)"
|
|
|
>
|
|
|
<svg-icon icon-class="courseware" /> <span>{{ item.courseware_name }}</span>
|
|
|
+ <svg-icon v-if="item.is_finished === 'true'" class="check-mark" icon-class="check-mark" />
|
|
|
</el-tag>
|
|
|
</div>
|
|
|
<div class="accessory-list">
|
|
@@ -45,34 +30,95 @@
|
|
|
<span>{{ item.file_name }}</span>
|
|
|
</el-tag>
|
|
|
</div>
|
|
|
- <div class="submit-homework">
|
|
|
- <span class="label">提交作业</span>
|
|
|
- <el-upload action="no" :http-request="upload" multiple :show-file-list="false" accept="*">
|
|
|
- <el-button><svg-icon icon-class="upload" /> 上传文件</el-button>
|
|
|
- </el-upload>
|
|
|
- </div>
|
|
|
- <div class="file-list">
|
|
|
- <el-tag
|
|
|
- v-for="(item, i) in file_list"
|
|
|
- :key="item.file_id"
|
|
|
- color="#fff"
|
|
|
- closable
|
|
|
- :title="item.file_name"
|
|
|
- @close="deleteFile(i)"
|
|
|
- >
|
|
|
- <span>{{ item.file_name }}</span>
|
|
|
- </el-tag>
|
|
|
- </div>
|
|
|
- <div class="leave-message">
|
|
|
- <span class="label">给教师留言</span>
|
|
|
- <el-input v-model="student_message" type="textarea" resize="none" :rows="6"></el-input>
|
|
|
- </div>
|
|
|
- <div class="submit-button">
|
|
|
- <el-button type="primary" @click="fillTaskExecuteInfo_Student">完成任务</el-button>
|
|
|
- </div>
|
|
|
+ <!-- 完成评价 -->
|
|
|
+ <template v-if="my_execute_info.is_finished === 'true'">
|
|
|
+ <div class="teacher-commenting">
|
|
|
+ <div v-if="teaching_type === 10">
|
|
|
+ <span class="label">学员课后评价</span>
|
|
|
+ <el-input v-model="student_remark" disabled type="textarea" resize="none" :rows="6" />
|
|
|
+ </div>
|
|
|
+ <div v-if="teaching_type === 10">
|
|
|
+ <span class="label">学员课后评分</span>
|
|
|
+ <el-rate v-model="student_score" disabled />
|
|
|
+ </div>
|
|
|
+ <div>
|
|
|
+ <span class="label">给教师留言</span>
|
|
|
+ <el-input
|
|
|
+ v-model="my_execute_info.student_message"
|
|
|
+ disabled
|
|
|
+ type="textarea"
|
|
|
+ resize="none"
|
|
|
+ :rows="6"
|
|
|
+ />
|
|
|
+ </div>
|
|
|
+ <div>
|
|
|
+ <span class="label">教师点评</span>
|
|
|
+ <el-rate v-model="my_execute_info.teacher_score" disabled />
|
|
|
+ <span class="teacher_remark">{{ my_execute_info.teacher_remark }}</span>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ </template>
|
|
|
+ <!-- 直播评价 -->
|
|
|
+ <template v-else-if="teaching_type === 10">
|
|
|
+ <div class="live-info">
|
|
|
+ <div>
|
|
|
+ <span class="enter-live" @click="enterLive">
|
|
|
+ <svg-icon icon-class="video-red" /> 点击进入直播间
|
|
|
+ </span>
|
|
|
+ </div>
|
|
|
+ <div>
|
|
|
+ <span class="label">学员课后评价</span>
|
|
|
+ <el-input v-model="student_remark" type="textarea" resize="none" :rows="6" />
|
|
|
+ </div>
|
|
|
+ <div>
|
|
|
+ <span class="label">学员课后评分</span>
|
|
|
+ <el-rate v-model="student_score" />
|
|
|
+ </div>
|
|
|
+ <div class="confirm">
|
|
|
+ <el-button type="primary" @click="fillTaskExecuteInfo_Student_live">提交</el-button>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ </template>
|
|
|
+ <template v-else>
|
|
|
+ <div class="submit-homework">
|
|
|
+ <span class="label">提交作业</span>
|
|
|
+ <el-upload action="no" :http-request="upload" multiple :show-file-list="false" accept="*">
|
|
|
+ <el-button><svg-icon icon-class="upload" /> 上传文件</el-button>
|
|
|
+ </el-upload>
|
|
|
+ </div>
|
|
|
+ <div class="file-list">
|
|
|
+ <el-tag
|
|
|
+ v-for="(item, i) in file_list"
|
|
|
+ :key="item.file_id"
|
|
|
+ color="#fff"
|
|
|
+ closable
|
|
|
+ :title="item.file_name"
|
|
|
+ @close="deleteFile(i)"
|
|
|
+ >
|
|
|
+ <span>{{ item.file_name }}</span>
|
|
|
+ </el-tag>
|
|
|
+ </div>
|
|
|
+ <div class="leave-message">
|
|
|
+ <span class="label">给教师留言</span>
|
|
|
+ <el-input v-model="student_message" type="textarea" resize="none" :rows="6" />
|
|
|
+ </div>
|
|
|
+ <div class="submit-button">
|
|
|
+ <el-button type="primary" @click="fillTaskExecuteInfo_Student">完成任务</el-button>
|
|
|
+ </div>
|
|
|
+ </template>
|
|
|
</div>
|
|
|
|
|
|
+ <completion-view
|
|
|
+ v-if="my_execute_info.is_finished === 'true'"
|
|
|
+ :task-id="id"
|
|
|
+ :cur-student-id="$store.state.user.user_code"
|
|
|
+ :cur-courseware-id="coursewareId"
|
|
|
+ :dialog-visible="dialogVisible_completion"
|
|
|
+ @dialogClose="dialogClose_completion"
|
|
|
+ />
|
|
|
+
|
|
|
<finish-courseware
|
|
|
+ v-else
|
|
|
:id="id"
|
|
|
:courseware-id="coursewareId"
|
|
|
:dialog-visible="dialogVisible"
|
|
@@ -82,33 +128,46 @@
|
|
|
</template>
|
|
|
|
|
|
<script>
|
|
|
+import TaskTop from '../TaskTop.vue';
|
|
|
import FinishCourseware from '@/components/course/FinishCourseware.vue';
|
|
|
+import CompletionView from '@/components/course/CompletionView.vue';
|
|
|
import { fileUpload, FileDownload } from '@/api/app';
|
|
|
+import { CreateEnterLiveRoomSession } from '@/api/live';
|
|
|
import { GetTaskInfo, FillMyTaskExecuteInfo_Student } from '@/api/course';
|
|
|
|
|
|
export default {
|
|
|
components: {
|
|
|
- FinishCourseware
|
|
|
+ FinishCourseware,
|
|
|
+ TaskTop,
|
|
|
+ CompletionView
|
|
|
},
|
|
|
data() {
|
|
|
return {
|
|
|
// 任务 ID
|
|
|
id: this.$route.params.id,
|
|
|
+ itemInfo: {
|
|
|
+ course_name: '',
|
|
|
+ cs_item_name: '',
|
|
|
+ cs_item_learning_material_list: [],
|
|
|
+ time_space_view_txt: ''
|
|
|
+ },
|
|
|
student_message: '',
|
|
|
name: '',
|
|
|
teaching_type: '',
|
|
|
time_type: '',
|
|
|
- course_name: '',
|
|
|
- cs_item_name: '',
|
|
|
content: '',
|
|
|
task_mode: '',
|
|
|
time_space_view_txt: '',
|
|
|
courseware_list: [],
|
|
|
accessory_list: [],
|
|
|
- cs_item_learning_material_list: [],
|
|
|
file_list: [],
|
|
|
dialogVisible: false,
|
|
|
- coursewareId: ''
|
|
|
+ coursewareId: '',
|
|
|
+ dialogVisible_completion: false,
|
|
|
+ my_execute_info: {},
|
|
|
+ student_remark: '',
|
|
|
+ student_score: 0,
|
|
|
+ loading: false
|
|
|
};
|
|
|
},
|
|
|
computed: {
|
|
@@ -126,36 +185,51 @@ export default {
|
|
|
}
|
|
|
},
|
|
|
created() {
|
|
|
+ this.loading = true;
|
|
|
GetTaskInfo({
|
|
|
id: this.id,
|
|
|
- is_contain_cs_item_learning_material: true
|
|
|
- }).then(
|
|
|
- ({
|
|
|
- name,
|
|
|
- teaching_type,
|
|
|
- time_type,
|
|
|
- course_name,
|
|
|
- cs_item_name,
|
|
|
- courseware_list,
|
|
|
- accessory_list,
|
|
|
- cs_item_learning_material_list,
|
|
|
- task_mode,
|
|
|
- content,
|
|
|
- time_space_view_txt
|
|
|
- }) => {
|
|
|
- this.name = name;
|
|
|
- this.course_name = course_name;
|
|
|
- this.cs_item_name = cs_item_name;
|
|
|
- this.content = content;
|
|
|
- this.teaching_type = teaching_type;
|
|
|
- this.time_type = time_type;
|
|
|
- this.courseware_list = courseware_list;
|
|
|
- this.accessory_list = accessory_list;
|
|
|
- this.task_mode = task_mode;
|
|
|
- this.cs_item_learning_material_list = cs_item_learning_material_list;
|
|
|
- this.time_space_view_txt = time_space_view_txt;
|
|
|
- }
|
|
|
- );
|
|
|
+ is_contain_cs_item_learning_material: true,
|
|
|
+ is_contain_my_execute_info: true
|
|
|
+ })
|
|
|
+ .then(
|
|
|
+ ({
|
|
|
+ name,
|
|
|
+ teaching_type,
|
|
|
+ time_type,
|
|
|
+ course_name,
|
|
|
+ cs_item_name,
|
|
|
+ courseware_list,
|
|
|
+ accessory_list,
|
|
|
+ cs_item_learning_material_list,
|
|
|
+ task_mode,
|
|
|
+ content,
|
|
|
+ time_space_view_txt,
|
|
|
+ my_execute_info,
|
|
|
+ student_remark,
|
|
|
+ student_score
|
|
|
+ }) => {
|
|
|
+ this.itemInfo = {
|
|
|
+ time_space_view_txt,
|
|
|
+ course_name,
|
|
|
+ cs_item_name,
|
|
|
+ cs_item_learning_material_list
|
|
|
+ };
|
|
|
+ this.student_remark = student_remark;
|
|
|
+ this.student_score = student_score;
|
|
|
+ this.name = name;
|
|
|
+ this.content = content;
|
|
|
+ this.teaching_type = teaching_type;
|
|
|
+ this.time_type = time_type;
|
|
|
+ this.courseware_list = courseware_list;
|
|
|
+ this.accessory_list = accessory_list;
|
|
|
+ this.task_mode = task_mode;
|
|
|
+ this.time_space_view_txt = time_space_view_txt;
|
|
|
+ this.my_execute_info = my_execute_info;
|
|
|
+ }
|
|
|
+ )
|
|
|
+ .finally(() => {
|
|
|
+ this.loading = false;
|
|
|
+ });
|
|
|
},
|
|
|
methods: {
|
|
|
upload(file) {
|
|
@@ -189,17 +263,54 @@ export default {
|
|
|
is_finished: true
|
|
|
}).then(() => {
|
|
|
this.$message.success('任务完成成功');
|
|
|
+ this.$router.go(0);
|
|
|
+ });
|
|
|
+ },
|
|
|
+
|
|
|
+ fillTaskExecuteInfo_Student_live() {
|
|
|
+ FillMyTaskExecuteInfo_Student({
|
|
|
+ task_id: this.id,
|
|
|
+ is_finished: true,
|
|
|
+ student_remark: this.student_remark,
|
|
|
+ student_score: this.student_score
|
|
|
+ }).then(() => {
|
|
|
+ this.$message.success('提交成功');
|
|
|
+ this.$router.go(0);
|
|
|
+ });
|
|
|
+ },
|
|
|
+
|
|
|
+ enterLive() {
|
|
|
+ CreateEnterLiveRoomSession({
|
|
|
+ task_id: this.id
|
|
|
+ }).then(({ live_room_sys_user_id, room_id, session_id, room_user_id }) => {
|
|
|
+ this.$router.push({
|
|
|
+ path: `/live/student}`,
|
|
|
+ query: { live_room_sys_user_id, room_id, session_id, task_id: this.id, room_user_id }
|
|
|
+ });
|
|
|
});
|
|
|
},
|
|
|
|
|
|
// 完成任务
|
|
|
- finishTask(id) {
|
|
|
+ finishTask(id, is_finished) {
|
|
|
+ if (this.my_execute_info.is_finished === 'true' && is_finished === 'false') {
|
|
|
+ return this.$message.warning('该课件没有被完成');
|
|
|
+ }
|
|
|
this.coursewareId = id;
|
|
|
- this.dialogVisible = true;
|
|
|
+ if (this.my_execute_info.is_finished === 'true') {
|
|
|
+ this.dialogVisible_completion = true;
|
|
|
+ } else {
|
|
|
+ this.dialogVisible = true;
|
|
|
+ }
|
|
|
},
|
|
|
+
|
|
|
dialogClose() {
|
|
|
this.dialogVisible = false;
|
|
|
this.coursewareId = '';
|
|
|
+ },
|
|
|
+
|
|
|
+ dialogClose_completion() {
|
|
|
+ this.dialogVisible_completion = false;
|
|
|
+ this.coursewareId = '';
|
|
|
}
|
|
|
}
|
|
|
};
|
|
@@ -212,6 +323,9 @@ $bor-color: #d9d9d9;
|
|
|
.task-detail {
|
|
|
@include container;
|
|
|
|
|
|
+ margin-top: 56px;
|
|
|
+ min-height: calc(100vh - 130px);
|
|
|
+
|
|
|
.el-tag {
|
|
|
@include el-tag;
|
|
|
|
|
@@ -220,42 +334,6 @@ $bor-color: #d9d9d9;
|
|
|
border-color: $bor-color;
|
|
|
}
|
|
|
|
|
|
- &-top {
|
|
|
- padding: 24px 32px;
|
|
|
- background-color: #fff;
|
|
|
- border-radius: 8px;
|
|
|
-
|
|
|
- .title {
|
|
|
- display: flex;
|
|
|
- justify-content: space-between;
|
|
|
- align-items: center;
|
|
|
-
|
|
|
- &-name {
|
|
|
- font-size: 24px;
|
|
|
- font-weight: 700;
|
|
|
- }
|
|
|
-
|
|
|
- &-time {
|
|
|
- color: #737373;
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- .cs_item_name {
|
|
|
- margin: 8px 0 24px;
|
|
|
- }
|
|
|
-
|
|
|
- .learning-material {
|
|
|
- border-top: 1px solid $bor-color;
|
|
|
- padding-top: 24px;
|
|
|
- margin-bottom: 16px;
|
|
|
-
|
|
|
- &-title {
|
|
|
- font-size: 18px;
|
|
|
- margin-bottom: 16px;
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
&-main {
|
|
|
background-color: #fff;
|
|
|
border-radius: 8px;
|
|
@@ -279,6 +357,41 @@ $bor-color: #d9d9d9;
|
|
|
align-items: center;
|
|
|
}
|
|
|
|
|
|
+ .teacher-commenting {
|
|
|
+ @extend .submit-homework;
|
|
|
+
|
|
|
+ flex-direction: column;
|
|
|
+
|
|
|
+ > div {
|
|
|
+ display: flex;
|
|
|
+ width: 100%;
|
|
|
+
|
|
|
+ & + div {
|
|
|
+ margin-top: 24px;
|
|
|
+ }
|
|
|
+
|
|
|
+ .teacher_remark {
|
|
|
+ margin-left: 24px;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ .live-info {
|
|
|
+ @extend .teacher-commenting;
|
|
|
+
|
|
|
+ .enter-live {
|
|
|
+ cursor: pointer;
|
|
|
+ padding: 8px 26px;
|
|
|
+ color: #ff6868;
|
|
|
+ border: 1px solid #ff6868;
|
|
|
+ border-radius: 20px;
|
|
|
+ }
|
|
|
+
|
|
|
+ .confirm {
|
|
|
+ padding-left: 105px;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
.file-list {
|
|
|
padding-left: 105px;
|
|
|
margin-bottom: 16px;
|
|
@@ -310,6 +423,13 @@ $bor-color: #d9d9d9;
|
|
|
font-size: 18px;
|
|
|
margin-right: 8px;
|
|
|
}
|
|
|
+
|
|
|
+ .check-mark {
|
|
|
+ margin-left: 12px;
|
|
|
+ top: 2px;
|
|
|
+ right: -20px;
|
|
|
+ position: relative;
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
.task-require,
|
|
@@ -321,7 +441,8 @@ $bor-color: #d9d9d9;
|
|
|
|
|
|
.label {
|
|
|
display: inline-block;
|
|
|
- width: 105px;
|
|
|
+ width: 120px;
|
|
|
+ min-width: 120px;
|
|
|
}
|
|
|
}
|
|
|
|