123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141 |
- <!-- eslint-disable vue/no-v-html -->
- <template>
- <div class="imageText-preview" :style="getAreaStyle()">
- <SerialNumberPosition v-if="isEnable(data.property.sn_display_mode)" :property="data.property" />
- <div class="interaction-box" v-if="data.video_list.length > 0">
- <video
- id="interaction-preview-video"
- :src="data.video_list[0].file_url"
- width="100%"
- height="400"
- controls
- @timeupdate="handleTimeUpdate"
- controlsList="nodownload"
- ></video>
- </div>
- <el-button
- type="primary"
- v-if="Object.keys(this.userAnswer).length === data.file_info_list.length"
- @click="lookReport"
- >查看答题报告</el-button
- >
- <el-dialog
- v-if="visible"
- :visible.sync="visible"
- :show-close="false"
- :close-on-click-modal="true"
- :modal-append-to-body="true"
- :append-to-body="true"
- :lock-scroll="true"
- width="80%"
- @close="handleClose"
- >
- <ExercisePreview :exercise_id="exercise_id" @handleCancle="handleClose" @submitAdd="submitAdd"></ExercisePreview>
- <!-- <iframe v-if="visible" :src="newpath" width="100%" :height="iframeHeight" frameborder="0"></iframe> -->
- </el-dialog>
- </div>
- </template>
- <script>
- import ExercisePreview from './ExercisePreview.vue';
- import PreviewMixin from '../common/PreviewMixin';
- import { getVideoInteractionData } from '@/views/book/courseware/data/videoInteraction';
- import { GetFileURLMap } from '@/api/app';
- import { getConfig } from '@/utils/auth';
- export default {
- name: 'VideoInteractionPreview',
- components: { ExercisePreview },
- mixins: [PreviewMixin],
- data() {
- return {
- data: getVideoInteractionData(),
- video_info: null,
- file_preview_url: getConfig() ? getConfig().doc_preview_service_address : '',
- visible: false,
- newpath: '',
- iframeHeight: `${window.innerHeight - 100}px`,
- first: '',
- exercise_id: '',
- userAnswer: {}, // 用户答题答案
- exerciseList: {}, // 题目列表
- reportFlag: false,
- reportResult: {
- total: 0,
- right: 0,
- error: 0,
- rightRate: 0,
- },
- };
- },
- watch: {},
- created() {
- this.initData();
- },
- mounted() {},
- methods: {
- initData() {
- this.data.video_list.forEach((item) => {
- GetFileURLMap({ file_id_list: [item.file_id] }).then(({ url_map }) => {
- this.video_info = url_map[item.file_id];
- });
- });
- this.data.file_info_list = this.data.file_info_list.sort((a, b) => Number(a.currentTime) - Number(b.currentTime));
- },
- handleTimeUpdate(event) {
- let currentTime = event.target.currentTime;
- this.data.file_info_list.forEach((item) => {
- if (
- Number(item.currentTime) > Math.floor(currentTime) &&
- Number(item.currentTime) < Math.floor(currentTime) + 1 &&
- item.id !== this.first
- ) {
- this.first = item.id;
- document.getElementById('interaction-preview-video').pause();
- this.exercise_id = item.id;
- this.visible = true;
- // GetFileURLMap({ file_id_list: [item.file_id] }).then(({ url_map }) => {
- // this.newpath = `${this.file_preview_url}onlinePreview?url=${Base64.encode(url_map[item.file_id])}`;
- // this.visible = true;
- // });
- }
- });
- },
- handleClose() {
- this.visible = false;
- document.getElementById('interaction-preview-video').play();
- setTimeout(() => {
- this.first = '';
- }, 1000);
- },
- submitAdd(id, answer, content) {
- this.visible = false;
- document.getElementById('interaction-preview-video').play();
- setTimeout(() => {
- this.first = '';
- }, 1000);
- this.$set(this.userAnswer, id, answer);
- this.$set(this.exerciseList, id, content);
- },
- lookReport() {
- document.getElementById('interaction-preview-video').pause();
- },
- },
- };
- </script>
- <style lang="scss" scoped>
- @use '@/styles/mixin.scss' as *;
- video:full-screen {
- :fullscreen::-webkit-media-controls-fullscreen-button {
- display: none;
- }
- }
- video::-webkit-media-controls-fullscreen-button {
- display: none;
- }
- </style>
|