Ver Fonte

修改问题,增加富文本公用样式

dusenyao há 1 ano atrás
pai
commit
42d8b33b76

+ 5 - 19
src/components/common/RichText.vue

@@ -104,30 +104,16 @@ export default {
         setup(editor) {
           editor.on('init', () => {
             editor.getBody().style.fontSize = '16pt'; // 设置默认字体大小
+            editor.execCommand('fontName', false, 'Arial'); // 设置默认字体
           });
         },
         font_formats:
-          'Andale Mono=andale mono,monospace;' +
-          'Arial=arial,helvetica,sans-serif;' +
-          'Arial Black=arial black,sans-serif;' +
-          'Book Antiqua=book antiqua,palatino,serif;' +
-          'Comic Sans MS=comic sans ms,sans-serif;' +
-          'Courier New=courier new,courier,monospace;' +
-          'Georgia=georgia,palatino,serif;' +
-          'Helvetica=helvetica,arial,sans-serif;' +
-          'Impact=impact,sans-serif;' +
-          'League=League;' +
-          'Symbol=symbol;' +
-          'Tahoma=tahoma,arial,helvetica,sans-serif;' +
-          'Terminal=terminal,monaco,monospace;' +
-          'Times New Roman=times new roman,times,serif;' +
-          'Trebuchet MS=trebuchet ms,geneva,sans-serif;' +
-          'Verdana=verdana,geneva,sans-serif;' +
-          'Webdings=webdings;' +
-          'Wingdings=wingdings,zapf dingbats;' +
           '楷体=楷体,微软雅黑;' +
           '黑体=黑体,微软雅黑;' +
-          '宋体=宋体,微软雅黑;',
+          '宋体=宋体,微软雅黑;' +
+          'Arial=arial,helvetica,sans-serif;' +
+          'Times New Roman=times new roman,times,serif;' +
+          '拼音=League;',
         // 字数限制
         fontsize_formats: '8pt 10pt 11pt 12pt 14pt 16pt 18pt 20pt 22pt 24pt 26pt 28pt 30pt 32pt 34pt 36pt',
         ax_wordlimit_num: this.wordlimitNum,

+ 8 - 1
src/styles/mixin.scss

@@ -11,14 +11,21 @@
   background-color: #fff;
   border-radius: 8px;
 
+  // 富文本格式
+  %rich-text,
+  .rich-text {
+    font-size: 16pt;
+  }
+
   // 题干
   .stem {
     display: flex;
     align-items: flex-start;
-    font-size: 18px;
     font-weight: bold;
     color: #34343a;
 
+    @extend %rich-text;
+
     .question-number {
       margin-right: 4px;
     }

+ 1 - 1
src/views/exercise_questions/create/components/common/AudioPlay.vue

@@ -4,7 +4,7 @@
       :class="[url ? 'audio-play' : 'audio-play not-url']"
       :style="{
         padding: showSlider ? '4px 16px' : '',
-        width: showSlider ? 'auto' : '',
+        width: showSlider ? '230px' : '',
       }"
       @click="playAudio"
     >

+ 0 - 21
src/views/exercise_questions/create/components/exercises/FillQuestion.vue

@@ -13,13 +13,6 @@
 
         <RichText v-if="data.property.stem_type === stemTypeList[1].value" v-model="data.stem" placeholder="输入题干" />
 
-        <UploadAudio
-          v-show="isEnable(data.property.is_enable_listening)"
-          :file-id="data.file_id_list?.[0]"
-          @upload="upload"
-          @deleteFile="deleteFile"
-        />
-
         <el-input
           v-show="isEnable(data.property.is_enable_description)"
           v-model="data.description"
@@ -98,16 +91,6 @@
             {{ label }}
           </el-radio>
         </el-form-item>
-        <el-form-item label="听力">
-          <el-radio
-            v-for="{ value, label } in switchOption"
-            :key="value"
-            v-model="data.property.is_enable_listening"
-            :label="value"
-          >
-            {{ label }}
-          </el-radio>
-        </el-form-item>
         <el-form-item label="分值">
           <el-radio
             v-for="{ value, label } in scoreTypeList"
@@ -131,7 +114,6 @@
 </template>
 
 <script>
-import UploadAudio from '../common/UploadAudio.vue';
 import QuestionMixin from '../common/QuestionMixin.js';
 
 import { getRandomNumber } from '@/utils';
@@ -140,9 +122,6 @@ import { fillData, handleToneValue } from '@/views/exercise_questions/data/fill'
 
 export default {
   name: 'FillQuestion',
-  components: {
-    UploadAudio,
-  },
   mixins: [QuestionMixin],
   data() {
     return {

+ 0 - 21
src/views/exercise_questions/create/components/exercises/JudgeQuestion.vue

@@ -12,13 +12,6 @@
         />
 
         <RichText v-if="data.property.stem_type === stemTypeList[1].value" v-model="data.stem" placeholder="输入题干" />
-
-        <UploadAudio
-          v-show="isEnable(data.property.is_enable_listening)"
-          :file-id="data.file_id_list?.[0]"
-          @upload="upload"
-          @deleteFile="deleteFile"
-        />
       </div>
 
       <div class="content">
@@ -91,16 +84,6 @@
             {{ label }}
           </el-radio>
         </el-form-item>
-        <el-form-item label="听力">
-          <el-radio
-            v-for="{ value, label } in switchOption"
-            :key="value"
-            v-model="data.property.is_enable_listening"
-            :label="value"
-          >
-            {{ label }}
-          </el-radio>
-        </el-form-item>
         <el-form-item label="选项">
           <el-checkbox-group v-model="optionTypeList">
             <el-checkbox v-for="{ label, value } in option_type_list" :key="value" :label="label" />
@@ -129,7 +112,6 @@
 </template>
 
 <script>
-import UploadAudio from '../common/UploadAudio.vue';
 import QuestionMixin from '../common/QuestionMixin.js';
 
 import { changeOptionType } from '@/views/exercise_questions/data/common';
@@ -142,9 +124,6 @@ import {
 
 export default {
   name: 'JudgeQuestion',
-  components: {
-    UploadAudio,
-  },
   mixins: [QuestionMixin],
   data() {
     return {

+ 8 - 9
src/views/exercise_questions/create/components/exercises/ReadAloudQuestion.vue

@@ -13,21 +13,18 @@
 
         <RichText v-if="data.property.stem_type === stemTypeList[1].value" v-model="data.stem" placeholder="输入题干" />
 
-        <el-input
-          v-show="isEnable(data.property.is_enable_description)"
-          v-model="data.description"
-          rows="3"
-          resize="none"
-          type="textarea"
-          placeholder="输入文段"
-        />
-
         <UploadAudio
           v-show="isEnable(data.property.is_enable_listening)"
           :file-id="data.file_id_list?.[0]"
           @upload="upload"
           @deleteFile="deleteFile"
         />
+
+        <RichText
+          v-show="isEnable(data.property.is_enable_description)"
+          v-model="data.description"
+          placeholder="输入文段"
+        />
       </div>
     </template>
 
@@ -102,6 +99,7 @@
 </template>
 
 <script>
+import RichText from '@/components/common/RichText.vue';
 import QuestionMixin from '../common/QuestionMixin.js';
 import UploadAudio from '../common/UploadAudio.vue';
 
@@ -111,6 +109,7 @@ export default {
   name: 'ReadAloudQuestion',
   components: {
     UploadAudio,
+    RichText,
   },
   mixins: [QuestionMixin],
   data() {

+ 0 - 21
src/views/exercise_questions/create/components/exercises/SelectQuestion.vue

@@ -22,13 +22,6 @@
           type="textarea"
           placeholder="输入描述"
         />
-
-        <UploadAudio
-          v-show="isEnable(data.property.is_enable_listening)"
-          :file-id="data.file_id_list?.[0]"
-          @upload="upload"
-          @deleteFile="deleteFile"
-        />
       </div>
 
       <div class="content">
@@ -120,16 +113,6 @@
             :disabled="!isEnable(data.property.is_option_subdivision)"
           />
         </el-form-item> -->
-        <el-form-item label="听力">
-          <el-radio
-            v-for="{ value, label } in switchOption"
-            :key="value"
-            v-model="data.property.is_enable_listening"
-            :label="value"
-          >
-            {{ label }}
-          </el-radio>
-        </el-form-item>
         <el-form-item label="分值">
           <el-radio
             v-for="{ value, label } in scoreTypeList"
@@ -154,7 +137,6 @@
 </template>
 
 <script>
-import UploadAudio from '../common/UploadAudio.vue';
 import QuestionMixin from '../common/QuestionMixin.js';
 
 import { selectTypeList, scoreTypeList, changeOptionType } from '@/views/exercise_questions/data/common';
@@ -162,9 +144,6 @@ import { getSelectData, getOption } from '@/views/exercise_questions/data/select
 
 export default {
   name: 'SelectQuestion',
-  components: {
-    UploadAudio,
-  },
   mixins: [QuestionMixin],
   data() {
     return {

+ 1 - 2
src/views/exercise_questions/create/index.vue

@@ -39,7 +39,7 @@
       @deleteQuestion="deleteQuestion"
     />
 
-    <div class="preview" :style="{ minHeight: preview ? '300px' : 'auto' }">
+    <div class="preview" :style="{ height: preview ? '300px' : 'auto' }">
       <div class="preview-header">
         <span class="quick-preview">快捷预览:</span>
         <div class="preview-right">
@@ -354,7 +354,6 @@ export default {
 
   .preview {
     position: relative;
-    max-height: 450px;
     padding: 16px 24px;
     overflow: auto;
     background-color: #eff1f5;

+ 0 - 1
src/views/exercise_questions/data/fill.js

@@ -33,7 +33,6 @@ export const fillData = {
   property: {
     stem_type: stemTypeList[0].value, // 题干类型
     question_number: '1', // 题号
-    is_enable_listening: switchOption[0].value, // 是否听力
     is_enable_description: switchOption[1].value, // 描述
     score: 1, // 分值
     score_type: scoreTypeList[0].value, // 分值类型

+ 0 - 1
src/views/exercise_questions/data/judge.js

@@ -31,7 +31,6 @@ export function getJudgeData() {
       stem_type: stemTypeList[0].value, // 题干类型
       question_number: '1', // 题号
       option_type_list: [option_type_list[0].value, option_type_list[1].value], // 选项类型列表
-      is_enable_listening: switchOption[0].value, // 是否听力
       score: 1, // 分值
       score_type: scoreTypeList[0].value, // 分值类型
     },

+ 0 - 1
src/views/exercise_questions/data/select.js

@@ -34,7 +34,6 @@ export function getSelectData() {
       question_number: '1', // 题号
       is_enable_description: switchOption[1].value, // 描述
       select_type: selectTypeList[0].value, // 选择类型
-      is_enable_listening: switchOption[0].value, // 是否听力
       score: 1, // 分值
       score_type: scoreTypeList[0].value, // 分值类型
     },

+ 0 - 5
src/views/exercise_questions/preview/FillPreview.vue

@@ -11,11 +11,6 @@
       </span>
     </div>
 
-    <AudioPlay
-      v-if="isEnable(data.property.is_enable_listening) && data.file_id_list.length > 0"
-      :file-id="data.file_id_list[0]"
-    />
-
     <div class="fill-wrapper">
       <p v-for="(item, i) in modelEssay" :key="i">
         <template v-for="(li, j) in item">

+ 0 - 4
src/views/exercise_questions/preview/JudgePreview.vue

@@ -5,10 +5,6 @@
       <span class="question-number">{{ data.property.question_number }}.</span>
       <span v-html="sanitizeHTML(data.stem)"></span>
     </div>
-    <AudioPlay
-      v-if="isEnable(data.property.is_enable_listening) && data.file_id_list.length > 0"
-      :file-id="data.file_id_list[0]"
-    />
 
     <ul class="option-list">
       <li

+ 7 - 2
src/views/exercise_questions/preview/ReadAloudPreview.vue

@@ -6,13 +6,18 @@
       <span v-html="sanitizeHTML(data.stem)"></span>
     </div>
 
-    <div v-if="isEnable(data.property.is_enable_description)" class="description">{{ data.description }}</div>
-
     <AudioPlay
       v-if="isEnable(data.property.is_enable_listening) && data.file_id_list.length > 0"
       :file-id="data.file_id_list[0]"
+      :show-slider="true"
     />
 
+    <div
+      v-if="isEnable(data.property.is_enable_description)"
+      class="description rich-text"
+      v-html="sanitizeHTML(data.description)"
+    ></div>
+
     <SoundRecordPreview :wav-blob.sync="answer.answer_list[0].voice_file_id" position="center" />
   </div>
 </template>

+ 1 - 4
src/views/exercise_questions/preview/SelectPreview.vue

@@ -6,10 +6,7 @@
       <span v-html="sanitizeHTML(data.stem)"></span>
     </div>
     <div v-if="isEnable(data.property.is_enable_description)" class="description">{{ data.description }}</div>
-    <AudioPlay
-      v-if="isEnable(data.property.is_enable_listening) && data.file_id_list.length > 0"
-      :file-id="data.file_id_list[0]"
-    />
+
     <ul class="option-list">
       <li
         v-for="({ content, mark }, i) in data.option_list"