Explorar o código

富文本转拼音

dsy hai 2 semanas
pai
achega
56633c1c4f

+ 0 - 1
src/api/book.js

@@ -161,7 +161,6 @@ export function MangerAddResource(data) {
   return http.post(`${process.env.VUE_APP_EepServer}?MethodName=project_resource_manager-AddResource`, data);
 }
 
-
 /**
  * @description 得到课件路径
  * @param {object} data

+ 14 - 15
src/components/PinyinText.vue

@@ -121,11 +121,11 @@ export default {
   props: {
     paragraphList: {
       type: Array,
-      required: false,
+      default: () => [],
     },
     richTextList: {
       type: Array,
-      required: false,
+      default: () => [],
     },
     pinyinPosition: {
       type: String,
@@ -141,6 +141,7 @@ export default {
     },
     pinyinSize: {
       type: String,
+      default: '12pt',
     },
     pinyinOverallPosition: {
       type: String,
@@ -199,7 +200,7 @@ export default {
       let paragraphIndex = 0;
       const tagStack = [];
       for (const item of this.richTextList) {
-        oldIndex++;
+        oldIndex += 1;
 
         if (item.is_style === 'true' || item.is_style === true) {
           const tagText = item.text || '';
@@ -242,25 +243,23 @@ export default {
 
               tagStack.push({
                 tag: tagName,
-                style: style,
+                style,
               });
             }
           }
-        }
-        // 处理换行符
-        else if (item.text === '\n') {
+        } else if (item.text === '\n') {
+          // 处理换行符
           blocks.push({
             type: 'newline',
           });
-          paragraphIndex++;
-        }
-        // 处理文字内容:将当前标签栈中的样式应用到文字块
-        else if (item.word_list && item.word_list.length > 0) {
+          paragraphIndex += 1;
+        } else if (item.word_list && item.word_list.length > 0) {
+          // 处理文字内容:将当前标签栈中的样式应用到文字块
           // 合并当前所有打开标签的样式
           let combinedStyle = '';
           tagStack.forEach((tagItem) => {
             if (tagItem.style) {
-              combinedStyle += tagItem.style + ';';
+              combinedStyle += `${tagItem.style};`;
             }
           });
 
@@ -284,9 +283,9 @@ export default {
             type: 'text',
             word_list: item.word_list,
             index: textBlockIndex++,
-            oldIndex: oldIndex,
-            paragraphIndex: paragraphIndex,
-            styleObj: styleObj, // 应用累积的样式对象
+            oldIndex,
+            paragraphIndex,
+            styleObj, // 应用累积的样式对象
           });
         }
       }

+ 7 - 2
src/views/book/courseware/create/components/common/ModuleMixin.js

@@ -294,14 +294,15 @@ const mixin = {
         return;
       }
 
-      data.paragraph_list_parameter.text = text.replace(/ /g, ' ');
+      data.paragraph_list_parameter.text = text;
 
       PinyinBuild_OldFormat({
         ...data.paragraph_list_parameter,
         is_first_sentence_first_hz_pinyin_first_char_upper_case:
           this.data.property.is_first_sentence_first_hz_pinyin_first_char_upper_case,
         is_fill_space: 'true',
-      }).then(({ parsed_text }) => {
+        is_rich_text: 'true',
+      }).then(({ parsed_text, rich_text }) => {
         if (parsed_text) {
           // 合并 activeTextStyle
           const mergedData = parsed_text.paragraph_list.map((outerArr, i) =>
@@ -320,6 +321,10 @@ const mixin = {
           );
           data.paragraph_list = mergedData;
         }
+
+        if (rich_text) {
+          data.rich_text_list = rich_text.text_list;
+        }
       });
     },
     /**

+ 3 - 1
src/views/book/courseware/create/components/question/fill/Fill.vue

@@ -71,6 +71,7 @@
               :key="`${i}-${j}`"
               ref="PinyinText"
               :paragraph-list="li.paragraph_list"
+              :rich-text-list="li.rich_text_list"
               :pinyin-position="data.property.pinyin_position"
               @fillCorrectPinyin="fillCorrectPinyin($event, i, j, 'model_essay')"
             />
@@ -321,7 +322,8 @@ export default {
 
       this.data.model_essay.forEach((item, i) => {
         item.forEach((option, j) => {
-          const text = option.content.replace(/<[^>]+>/g, '');
+          const text = option.content;
+
           if (!text) return;
           option.paragraph_list_parameter.text = text;
           this.createParsedTextInfoPinyin(text, i, j, 'model_essay');

+ 2 - 1
src/views/book/courseware/create/components/question/judge/Judge.vue

@@ -47,6 +47,7 @@
         :key="i"
         ref="PinyinText"
         :paragraph-list="item.paragraph_list"
+        :rich-text-list="item.rich_text_list"
         :pinyin-position="data.property.pinyin_position"
         @fillCorrectPinyin="fillCorrectPinyin($event, i)"
       />
@@ -109,7 +110,7 @@ export default {
         }
         if (this.data.option_list.length > 0 && this.data.option_list[0].paragraph_list.length > 0) return;
         this.data.option_list.forEach((item, i) => {
-          const text = item.content.replace(/<[^>]+>/g, '');
+          const text = item.content;
           if (!text) return;
           item.paragraph_list_parameter.text = text;
           this.createParsedTextInfoPinyin(text, i);

+ 2 - 1
src/views/book/courseware/create/components/question/matching/Matching.vue

@@ -52,6 +52,7 @@
             :key="`${i}-${j}`"
             ref="PinyinText"
             :paragraph-list="li.paragraph_list"
+            :rich-text-list="li.rich_text_list"
             :pinyin-position="data.property.pinyin_position"
             @fillCorrectPinyin="fillCorrectPinyin($event, i, j)"
           />
@@ -193,7 +194,7 @@ export default {
 
         this.data.option_list.forEach((item, i) => {
           item.forEach((option, j) => {
-            const text = option.content.replace(/<[^>]+>/g, '').replace(/&nbsp;/g, ' ');
+            const text = option.content;
             if (!text) return;
             option.paragraph_list_parameter.text = text;
             this.createParsedTextInfoPinyin(text, i, j);

+ 2 - 1
src/views/book/courseware/create/components/question/select/Select.vue

@@ -41,6 +41,7 @@
         :key="i"
         ref="PinyinText"
         :paragraph-list="item.paragraph_list"
+        :rich-text-list="item.rich_text_list"
         :pinyin-position="data.property.pinyin_position"
         @fillCorrectPinyin="fillCorrectPinyin($event, i)"
       />
@@ -106,7 +107,7 @@ export default {
         }
         if (this.data.option_list.length > 0 && this.data.option_list[0].paragraph_list.length > 0) return;
         this.data.option_list.forEach((item, i) => {
-          const text = item.content.replace(/<[^>]+>/g, '');
+          const text = item.content;
           if (!text) return;
           item.paragraph_list_parameter.text = text;
           this.createParsedTextInfoPinyin(text, i);

+ 2 - 1
src/views/book/courseware/create/components/question/sort/Sort.vue

@@ -49,6 +49,7 @@
         :key="i"
         ref="PinyinText"
         :paragraph-list="item.paragraph_list"
+        :rich-text-list="item.rich_text_list"
         :pinyin-position="data.property.pinyin_position"
         @fillCorrectPinyin="fillCorrectPinyin($event, i)"
       />
@@ -132,7 +133,7 @@ export default {
         }
         if (this.data.option_list.length > 0 && this.data.option_list[0].paragraph_list.length > 0) return;
         this.data.option_list.forEach((item, i) => {
-          const text = item.content.replace(/<[^>]+>/g, '');
+          const text = item.content;
           if (!text) return;
           item.paragraph_list_parameter.text = text;
           this.createParsedTextInfoPinyin(text, i);

+ 2 - 0
src/views/book/courseware/preview/components/fill/FillPreview.vue

@@ -18,6 +18,7 @@
                 :key="`${i}-${j}`"
                 class="content"
                 :paragraph-list="li.paragraph_list"
+                :rich-text-list="li.rich_text_list"
                 :pinyin-position="data.property.pinyin_position"
                 :is-preview="true"
               />
@@ -119,6 +120,7 @@
                 :key="`${i}-${j}`"
                 class="content"
                 :paragraph-list="li.paragraph_list"
+                :rich-text-list="li.rich_text_list"
                 :pinyin-position="data.property.pinyin_position"
                 :is-preview="true"
               />

+ 4 - 2
src/views/book/courseware/preview/components/judge/JudgePreview.vue

@@ -5,7 +5,7 @@
     <div class="main">
       <ul class="option-list">
         <li
-          v-for="({ content, mark, paragraph_list }, i) in data.option_list"
+          v-for="({ content, mark, paragraph_list, rich_text_list }, i) in data.option_list"
           :key="mark"
           :style="{ cursor: disabled ? 'not-allowed' : 'pointer' }"
           :class="['option-item', { active: isAnswer(mark) }]"
@@ -19,6 +19,7 @@
               v-if="isEnable(data.property.view_pinyin)"
               class="content"
               :paragraph-list="paragraph_list"
+              :rich-text-list="rich_text_list"
               :pinyin-position="data.property.pinyin_position"
               :is-preview="true"
             />
@@ -70,7 +71,7 @@
     >
       <ul slot="right-answer" class="option-list">
         <li
-          v-for="({ content, mark, paragraph_list }, i) in data.option_list"
+          v-for="({ content, mark, paragraph_list, rich_text_list }, i) in data.option_list"
           :key="mark"
           :style="{ cursor: disabled ? 'not-allowed' : 'pointer' }"
           :class="['option-item', { active: isAnswer(mark) }]"
@@ -84,6 +85,7 @@
               v-if="isEnable(data.property.view_pinyin)"
               class="content"
               :paragraph-list="paragraph_list"
+              :rich-text-list="rich_text_list"
               :pinyin-position="data.property.pinyin_position"
               :is-preview="true"
             />

+ 2 - 1
src/views/book/courseware/preview/components/matching/MatchingPreview.vue

@@ -6,7 +6,7 @@
     <div class="main">
       <ul ref="list" class="option-list">
         <li v-for="(item, i) in data.option_list" :key="i" class="list-item">
-          <template v-for="({ content, mark, multilingual, paragraph_list }, j) in item">
+          <template v-for="({ content, mark, multilingual, paragraph_list, rich_text_list }, j) in item">
             <div
               v-if="content"
               :key="mark"
@@ -25,6 +25,7 @@
                 v-if="isEnable(data.property.view_pinyin)"
                 class="content"
                 :paragraph-list="paragraph_list"
+                :rich-text-list="rich_text_list"
                 :pinyin-position="data.property.pinyin_position"
                 :is-preview="true"
               />

+ 4 - 2
src/views/book/courseware/preview/components/select/SelectPreview.vue

@@ -9,7 +9,7 @@
         :style="{ flexDirection: data.property.arrange_type === arrangeTypeList[0].value ? 'row' : 'column' }"
       >
         <li
-          v-for="({ content, mark, multilingual, paragraph_list }, i) in data.option_list"
+          v-for="({ content, mark, multilingual, paragraph_list, rich_text_list }, i) in data.option_list"
           :key="mark"
           :style="{ cursor: disabled ? 'not-allowed' : 'pointer', borderColor: data.unified_attrib?.topic_color }"
           :class="['option-item', { active: isAnswer(mark) }, ...computedAnswerClass(mark)]"
@@ -23,6 +23,7 @@
             v-if="isEnable(data.property.view_pinyin)"
             class="content"
             :paragraph-list="paragraph_list"
+            :rich-text-list="rich_text_list"
             :pinyin-position="data.property.pinyin_position"
             :is-preview="true"
           />
@@ -58,7 +59,7 @@
         :style="{ flexDirection: data.property.arrange_type === arrangeTypeList[0].value ? 'row' : 'column' }"
       >
         <li
-          v-for="({ content, mark, multilingual, paragraph_list }, i) in data.option_list"
+          v-for="({ content, mark, multilingual, paragraph_list, rich_text_list }, i) in data.option_list"
           :key="mark"
           :style="{ cursor: disabled ? 'not-allowed' : 'pointer', borderColor: data.unified_attrib?.topic_color }"
           :class="['option-item', ...computedAnswerClass(mark, 'answer-analysis')]"
@@ -72,6 +73,7 @@
             v-if="isEnable(data.property.view_pinyin)"
             class="content"
             :paragraph-list="paragraph_list"
+            :rich-text-list="rich_text_list"
             :pinyin-position="data.property.pinyin_position"
             :is-preview="true"
           />

+ 1 - 0
src/views/book/courseware/preview/components/sort/SortPreview.vue

@@ -28,6 +28,7 @@
                 v-if="isEnable(data.property.view_pinyin)"
                 class="content"
                 :paragraph-list="item.paragraph_list"
+                :rich-text-list="item.rich_text_list"
                 :pinyin-position="data.property.pinyin_position"
                 :is-preview="true"
               />