瀏覽代碼

1、生成课件预览。2、填空组件的重做

dsy 1 月之前
父節點
當前提交
f4038f2706

+ 9 - 0
src/api/app.js

@@ -118,6 +118,15 @@ export function CreateBookPreviewURL(data) {
 }
 
 /**
+ * 生成课件预览链接
+ * @param {object} data 请求数据
+ * @param {string} data.courseware_id 课件 ID
+ */
+export function CreateCoursewarePreviewURL(data) {
+  return http.post(`${process.env.VUE_APP_EepServer}?MethodName=book_preview_manager-CreateCoursewarePreviewURL`, data);
+}
+
+/**
  * 文本转音频文件-有音色配置
  * @param {object} data 请求数据
  */

+ 24 - 2
src/components/CommonPreview.vue

@@ -8,6 +8,8 @@
         <span class="name-path">{{ courseware_info.name_path }}</span>
         <span class="flow-nodename">{{ courseware_info.cur_audit_flow_node_name }}</span>
         <slot name="middle" :courseware="courseware_info"></slot>
+        <i class="el-icon-setting" style="cursor: pointer" @click="openSimulateAnswerPermissionControl()"></i>
+        <span class="link" @click="createCoursewarePreviewURL()">生成课件预览链接</span>
         <div class="group">
           <el-checkbox v-model="isShowGroup">显示分组</el-checkbox>
           <el-checkbox v-model="groupShowAll">分组显示全部</el-checkbox>
@@ -346,6 +348,8 @@
       @confirm="saveNote"
       @cancel="delNote"
     />
+    <SimAnswerPermissionControl :visible.sync="visiblePermissionControl" :permission-control.sync="permissionControl" />
+    <PreviewURL :url="preview_url" :visible.sync="visiblePreviewURL" />
   </div>
 </template>
 
@@ -358,6 +362,8 @@ import VideoPlay from '@/views/book/courseware/preview/components/common/VideoPl
 import AudioPlay from '@/views/book/courseware/preview/components/common/AudioPlay.vue';
 import AuditRemark from '@/components/AuditRemark.vue';
 import ExplanatoryNoteDialog from '@/components/ExplanatoryNoteDialog.vue';
+import SimAnswerPermissionControl from '@/components/SimAnswerPermissionControl.vue';
+import PreviewURL from '@/views/project_manage/common/PreviewURL.vue';
 
 import {
   GetBookCoursewareInfo,
@@ -388,6 +394,7 @@ import {
 import { toggleFullScreen } from '@/utils/common';
 import * as OpenCC from 'opencc-js';
 import { isTrue } from '@/utils/validate';
+import { CreateCoursewarePreviewURL } from '@/api/app';
 
 export default {
   name: 'CommonPreview',
@@ -400,6 +407,8 @@ export default {
     AuditRemark,
     ExplanatoryNoteDialog,
     VisNetwork,
+    SimAnswerPermissionControl,
+    PreviewURL,
   },
   provide() {
     return {
@@ -548,14 +557,16 @@ export default {
       multimediaLoadingStates: true,
       isFullScreen: false, // 是否全屏状态
       title_list: [],
-      // 模拟答题权限控制
+      visiblePermissionControl: false, // 模拟答题权限控制弹窗显示状态
       permissionControl: {
         can_answer: false, // 可作答
-        can_judge_correct: false, // 可判断对错
+        can_judge_correct: false, // 可判断对错(客观题)
         can_show_answer: false, // 可查看答案
         can_correct: false, // 可批改
         can_check_correct: false, // 可查看批改
       },
+      preview_url: '', // 课件预览链接
+      visiblePreviewURL: false, // 预览链接弹窗显示状态
     };
   },
   computed: {
@@ -1365,6 +1376,17 @@ export default {
     fullScreen() {
       toggleFullScreen(this.$refs.previewMain);
     },
+    // 打开模拟答题权限控制弹窗
+    openSimulateAnswerPermissionControl() {
+      this.visiblePermissionControl = true;
+    },
+    // 创建课件预览链接
+    createCoursewarePreviewURL() {
+      CreateCoursewarePreviewURL({ courseware_id: this.select_node, valid_day_count: 20 }).then(({ url }) => {
+        this.preview_url = url;
+        this.visiblePreviewURL = true;
+      });
+    },
   },
 };
 </script>

+ 69 - 0
src/components/SimAnswerPermissionControl.vue

@@ -0,0 +1,69 @@
+<template>
+  <el-dialog
+    :visible="visible"
+    :before-close="handleClose"
+    :close-on-click-modal="false"
+    title="模拟答题权限控制"
+    width="650px"
+  >
+    <div class="permission-control">
+      <el-checkbox v-model="permission.can_answer">可作答</el-checkbox>
+      <el-checkbox v-model="permission.can_judge_correct">可判断对错(客观题)</el-checkbox>
+      <el-checkbox v-model="permission.can_show_answer">可查看答案</el-checkbox>
+      <el-checkbox v-model="permission.can_correct">可批改</el-checkbox>
+      <el-checkbox v-model="permission.can_check_correct">可查看批改</el-checkbox>
+    </div>
+
+    <div slot="footer">
+      <el-button @click="handleClose()">关闭</el-button>
+      <el-button type="primary" @click="confirm()">保存</el-button>
+    </div>
+  </el-dialog>
+</template>
+
+<script>
+export default {
+  name: 'SimAnswerPermissionControl',
+  props: {
+    visible: {
+      type: Boolean,
+      required: true,
+    },
+    permissionControl: {
+      type: Object,
+      required: true,
+    },
+  },
+  data() {
+    return {
+      permission: {
+        can_answer: false, // 可作答
+        can_judge_correct: false, // 可判断对错
+        can_show_answer: false, // 可查看答案
+        can_correct: false, // 可批改
+        can_check_correct: false, // 可查看批改
+      },
+    };
+  },
+  watch: {
+    permissionControl: {
+      handler(newVal) {
+        this.permission = { ...newVal };
+      },
+      immediate: true,
+      deep: true,
+    },
+  },
+  methods: {
+    handleClose() {
+      this.$emit('update:visible', false);
+    },
+    confirm() {
+      this.$emit('update:permissionControl', { ...this.permission });
+      this.handleClose();
+    },
+  },
+};
+</script>
+
+<style lang="scss" scoped></style>

+ 10 - 2
src/views/book/courseware/preview/common/PreviewOperation.vue

@@ -1,8 +1,12 @@
 <template>
   <div class="operation">
-    <div v-show="permissionControl.can_answer" class="button retry"></div>
+    <div v-show="permissionControl.can_answer" class="button retry" @click="retry()"></div>
     <div v-show="permissionControl.can_correct || permissionControl.can_check_correct" class="button correct"></div>
-    <div v-show="permissionControl.can_show_answer" class="button answer" @click="showAnswerAnalysis()"></div>
+    <div
+      v-show="permissionControl.can_judge_correct || permissionControl.can_show_answer"
+      class="button answer"
+      @click="showAnswerAnalysis()"
+    ></div>
   </div>
 </template>
 
@@ -22,6 +26,10 @@ export default {
     showAnswerAnalysis() {
       this.$emit('showAnswerAnalysis');
     },
+    // 重做
+    retry() {
+      this.$emit('retry');
+    },
   },
 };
 </script>

+ 6 - 3
src/views/book/courseware/preview/components/common/PreviewMixin.js

@@ -23,7 +23,7 @@ const mixin = {
       answerAnalysisState: null, // 答案解析弹窗前的状态快照
     };
   },
-  inject: ['getLang', 'getChinese', 'convertText', 'getTitleList'],
+  inject: ['getLang', 'getChinese', 'convertText', 'getTitleList', 'getPermissionControl'],
   props: {
     id: {
       type: String,
@@ -50,6 +50,9 @@ const mixin = {
     showLang() {
       return this.getLang() !== 'ZH';
     },
+    permissionControl() {
+      return this.getPermissionControl();
+    },
   },
   watch: {
     content: {
@@ -201,8 +204,8 @@ const mixin = {
       }
       this.visibleAnswerAnalysis = true;
       this.disabled = true;
-      this.isJudgingRightWrong = true;
-      this.isShowRightAnswer = true;
+      this.isJudgingRightWrong = this.permissionControl.can_judge_correct;
+      this.isShowRightAnswer = this.permissionControl.can_show_answer;
     },
     closeAnswerAnalysis() {
       if (this.answerAnalysisState) {

+ 14 - 1
src/views/book/courseware/preview/components/fill/FillPreview.vue

@@ -102,7 +102,7 @@
     </div>
 
     <WriteDialog :visible.sync="writeVisible" @confirm="handleWriteConfirm" />
-    <PreviewOperation @showAnswerAnalysis="showAnswerAnalysis" />
+    <PreviewOperation @showAnswerAnalysis="showAnswerAnalysis" @retry="retry" />
     <AnswerAnalysis
       :visible.sync="visibleAnswerAnalysis"
       :answer-list="data.answer_list"
@@ -432,6 +432,19 @@ export default {
       if (isRight) return '';
       return `(${answerValue})`;
     },
+    // 重做
+    retry() {
+      this.modelEssay.forEach((item) => {
+        item.forEach((li) => {
+          if (li.type === 'input') {
+            li.content = '';
+            li.write_base64 = '';
+          }
+        });
+      });
+      this.selectedWordList = [];
+      this.handleWav([]);
+    },
   },
 };
 </script>