Browse Source

获取无文本内容的数据结构

natasha 2 days ago
parent
commit
8b904f8962

+ 99 - 0
src/views/book/courseware/preview/components/article/index.vue

@@ -718,6 +718,105 @@ export default {
       });
       });
       this.newWordList = JSON.parse(JSON.stringify(NewWordList));
       this.newWordList = JSON.parse(JSON.stringify(NewWordList));
     },
     },
+    /**
+     * 获取无文本内容的数据结构,用于保存为个人模板时的样式模板
+     */
+    getNoTextContentData() {
+      let noTextContentData = JSON.parse(JSON.stringify(this.data));
+      const resetFieldMap = {
+        content: '', // 课文内容
+        mp3_list: [], // 音频列表
+        file_id_list: [], // 文件 id
+        detail: [], // 分段分句分词详情
+        wordTime: [], // 字幕时间
+        new_word_list: {
+          title_con: '',
+          property: {
+            audio_generation_method: 'upload',
+            pinyin_position: 'front',
+            auto_wrap: 'true', // 自动换行
+            is_has_infor: 'true',
+            voice_type: '', // 音色
+            emotion: '', // 风格,情感
+            speed_ratio: '', // 语速
+            is_show: 'false',
+          },
+          new_word_list: [],
+          lrc_arr: [], // lrc 文件解析后的数据
+          // lrc 文件数据
+          lrc_data: {
+            name: '',
+            url: '',
+            id: '',
+            file_id: '',
+          },
+          // 音频文件数据
+          audio_data: {
+            name: '',
+            media_duration: 0,
+            temporary_url: '',
+            url: '',
+            file_id: '',
+          },
+          wordTime: [], // 字幕时间节点
+          taskId: '',
+          file_id_list: [], // 文件 id
+          multilingual: [], // 多语言
+        }, // 生词列表
+        other_word_list: {
+          title_con: '',
+          property: {
+            audio_generation_method: 'upload',
+            pinyin_position: 'front',
+            auto_wrap: 'true', // 自动换行
+            is_has_infor: 'true',
+            voice_type: '', // 音色
+            emotion: '', // 风格,情感
+            speed_ratio: '', // 语速
+            is_show: 'false',
+          },
+          new_word_list: [],
+          lrc_arr: [], // lrc 文件解析后的数据
+          // lrc 文件数据
+          lrc_data: {
+            name: '',
+            url: '',
+            id: '',
+            file_id: '',
+          },
+          // 音频文件数据
+          audio_data: {
+            name: '',
+            media_duration: 0,
+            temporary_url: '',
+            url: '',
+            file_id: '',
+          },
+          wordTime: [], // 字幕时间节点
+          taskId: '',
+          file_id_list: [], // 文件 id
+          multilingual: [], // 多语言
+        },
+        notes_list: {
+          title_con: '',
+          option: [],
+          multilingual: [], // 多语言
+          file_id_list: [], // 文件 id
+          property: {
+            view_pinyin: 'false', // 显示拼音
+            pinyin_position: 'back', // top bottom
+            is_first_sentence_first_hz_pinyin_first_char_upper_case: 'true', // 句首大写
+            is_show: 'false',
+          },
+        },
+        sentence_list_mp: [], // 句子+分词数组
+        pinyin_type: 'pinyin',
+      };
+
+      Object.assign(noTextContentData, resetFieldMap);
+
+      return noTextContentData;
+    },
   },
   },
 };
 };
 </script>
 </script>

+ 35 - 0
src/views/book/courseware/preview/components/character/CharacterPreview.vue

@@ -450,6 +450,7 @@ import Strockplayredlines from '../character_base/components/Strockplayredline.v
 import Strockred from '../character_base/components/Strockred.vue';
 import Strockred from '../character_base/components/Strockred.vue';
 import FreewriteLettle from '../character_base/components/FreewriteLettle.vue';
 import FreewriteLettle from '../character_base/components/FreewriteLettle.vue';
 import SoundRecord from '../../common/SoundRecord.vue';
 import SoundRecord from '../../common/SoundRecord.vue';
+import { getRandomNumber } from '@/utils';
 
 
 export default {
 export default {
   name: 'CharacterPreview',
   name: 'CharacterPreview',
@@ -639,6 +640,40 @@ export default {
       this.handleWav([]);
       this.handleWav([]);
       this.$refs.record.handleReset();
       this.$refs.record.handleReset();
     },
     },
+    /**
+     * 获取无文本内容的数据结构,用于保存为个人模板时的样式模板
+     */
+    getNoTextContentData() {
+      let noTextContentData = JSON.parse(JSON.stringify(this.data));
+      const resetFieldMap = {
+        analysis_list: [],
+        answer_list: [],
+      };
+
+      Object.assign(noTextContentData, resetFieldMap);
+
+      noTextContentData.option_list.forEach((item) => {
+        item.content = '';
+        item.pinyin = '';
+        item.shiyi = '';
+        item.mark = getRandomNumber();
+        item.hz_info = [];
+        item.file_list = [];
+        item.file_id_list = [];
+        item.content_list = [];
+        item.is_common_pinyin = true;
+        item.audio_file_id = '';
+        item.is_margin = false;
+        item.is_show_ben = true;
+      });
+
+      if (noTextContentData.answer) {
+        noTextContentData.answer.answer_list = [];
+        noTextContentData.answer.reference_answer = '';
+      }
+
+      return noTextContentData;
+    },
   },
   },
 };
 };
 </script>
 </script>

+ 35 - 0
src/views/book/courseware/preview/components/character_structure/CharacterStructurePreview.vue

@@ -272,6 +272,7 @@ import { getCharacterStructureData } from '@/views/book/courseware/data/characte
 import PreviewMixin from '../common/PreviewMixin';
 import PreviewMixin from '../common/PreviewMixin';
 import draggable from 'vuedraggable';
 import draggable from 'vuedraggable';
 import Strockplay from '../new_word/components/Strockplay.vue';
 import Strockplay from '../new_word/components/Strockplay.vue';
+import { getRandomNumber } from '@/utils';
 
 
 export default {
 export default {
   name: 'CharacterStructurePreview',
   name: 'CharacterStructurePreview',
@@ -400,6 +401,40 @@ export default {
     retry() {
     retry() {
       this.handleData([]);
       this.handleData([]);
     },
     },
+    /**
+     * 获取无文本内容的数据结构,用于保存为个人模板时的样式模板
+     */
+    getNoTextContentData() {
+      let noTextContentData = JSON.parse(JSON.stringify(this.data));
+      const resetFieldMap = {
+        analysis_list: [],
+        answer_list: [],
+        structure_select_id: [], // 存放已选选项id
+        structure_select_list: [],
+        image_list: [],
+        image_id_list: [],
+        file_list: [],
+        file_id_list: [],
+      };
+
+      Object.assign(noTextContentData, resetFieldMap);
+
+      noTextContentData.option_list.forEach((item) => {
+        item.content = '';
+        item.pinyin = '';
+        item.mark = getRandomNumber();
+        item.hz_info = [];
+        item.is_example = false;
+        item.answer = '';
+      });
+
+      if (noTextContentData.answer) {
+        noTextContentData.answer.answer_list = [];
+        noTextContentData.answer.reference_answer = '';
+      }
+
+      return noTextContentData;
+    },
   },
   },
 };
 };
 </script>
 </script>

+ 98 - 0
src/views/book/courseware/preview/components/dialogue_article/index.vue

@@ -716,6 +716,104 @@ export default {
       });
       });
       this.newWordList = JSON.parse(JSON.stringify(NewWordList));
       this.newWordList = JSON.parse(JSON.stringify(NewWordList));
     },
     },
+    /**
+     * 获取无文本内容的数据结构,用于保存为个人模板时的样式模板
+     */
+    getNoTextContentData() {
+      let noTextContentData = JSON.parse(JSON.stringify(this.data));
+      const resetFieldMap = {
+        content: '', // 课文内容
+        mp3_list: [], // 音频列表
+        detail: [], // 分段分句分词详情
+        wordTime: [], // 字幕时间
+        new_word_list: {
+          title_con: '',
+          property: {
+            audio_generation_method: 'upload',
+            pinyin_position: 'front',
+            auto_wrap: 'true', // 自动换行
+            is_has_infor: 'true',
+            voice_type: '', // 音色
+            emotion: '', // 风格,情感
+            speed_ratio: '', // 语速
+            is_show: 'false',
+          },
+          new_word_list: [],
+          lrc_arr: [], // lrc 文件解析后的数据
+          // lrc 文件数据
+          lrc_data: {
+            name: '',
+            url: '',
+            id: '',
+            file_id: '',
+          },
+          // 音频文件数据
+          audio_data: {
+            name: '',
+            media_duration: 0,
+            temporary_url: '',
+            url: '',
+            file_id: '',
+          },
+          wordTime: [], // 字幕时间节点
+          taskId: '',
+          file_id_list: [], // 文件 id
+          multilingual: [], // 多语言
+        }, // 生词列表
+        other_word_list: {
+          title_con: '',
+          property: {
+            audio_generation_method: 'upload',
+            pinyin_position: 'front',
+            auto_wrap: 'true', // 自动换行
+            is_has_infor: 'true',
+            voice_type: '', // 音色
+            emotion: '', // 风格,情感
+            speed_ratio: '', // 语速
+            is_show: 'false',
+          },
+          new_word_list: [],
+          lrc_arr: [], // lrc 文件解析后的数据
+          // lrc 文件数据
+          lrc_data: {
+            name: '',
+            url: '',
+            id: '',
+            file_id: '',
+          },
+          // 音频文件数据
+          audio_data: {
+            name: '',
+            media_duration: 0,
+            temporary_url: '',
+            url: '',
+            file_id: '',
+          },
+          wordTime: [], // 字幕时间节点
+          taskId: '',
+          file_id_list: [], // 文件 id
+          multilingual: [], // 多语言
+        },
+        notes_list: {
+          title_con: '',
+          option: [],
+          multilingual: [], // 多语言
+          file_id_list: [], // 文件 id
+          property: {
+            view_pinyin: 'false', // 显示拼音
+            pinyin_position: 'back', // top bottom
+            is_first_sentence_first_hz_pinyin_first_char_upper_case: 'true', // 句首大写
+            is_show: 'false',
+          },
+        },
+        sentence_list_mp: [], // 句子+分词数组
+        pinyin_type: 'pinyin',
+      };
+
+      Object.assign(noTextContentData, resetFieldMap);
+
+      return noTextContentData;
+    },
   },
   },
 };
 };
 </script>
 </script>

+ 20 - 0
src/views/book/courseware/preview/components/h5_games/H5GamesPreview.vue

@@ -103,6 +103,26 @@ export default {
         }
         }
       }
       }
     },
     },
+    /**
+     * 获取无文本内容的数据结构,用于保存为个人模板时的样式模板
+     */
+    getNoTextContentData() {
+      let noTextContentData = JSON.parse(JSON.stringify(this.data));
+      const resetFieldMap = {
+        file_list: [],
+        file_id_list: [],
+        file_info: {}, // 存放文件序号
+      };
+
+      Object.assign(noTextContentData, resetFieldMap);
+
+      if (noTextContentData.answer) {
+        noTextContentData.answer.answer_list = [];
+        noTextContentData.answer.reference_answer = '';
+      }
+
+      return noTextContentData;
+    },
   },
   },
 };
 };
 </script>
 </script>

+ 30 - 0
src/views/book/courseware/preview/components/image_text/ImageTextPreview.vue

@@ -285,6 +285,36 @@ export default {
     retry() {
     retry() {
       this.initData();
       this.initData();
     },
     },
+    /**
+     * 获取无文本内容的数据结构,用于保存为个人模板时的样式模板
+     */
+    getNoTextContentData() {
+      let noTextContentData = JSON.parse(JSON.stringify(this.data));
+      const resetFieldMap = {
+        mp3_list: [], // 音频列表
+        detail: [],
+        image_list: [], // 图片列表
+        image_info_list: [],
+        image_id_list: [], // 文件 id
+        image_width: 500, // 图片宽度px
+        image_height: 500, // 图片高度px
+        text_list: [], // 文字框列表
+        input_list: [], // 输入框列表
+        file_id_list: [], // 文件 id
+        word_time: [], // 时间字幕
+        answer_list: [], // 答案列表
+        analysis_list: [], // 解析列表
+      };
+
+      Object.assign(noTextContentData, resetFieldMap);
+
+      if (noTextContentData.answer) {
+        noTextContentData.answer.answer_list = [];
+        noTextContentData.answer.reference_answer = '';
+      }
+
+      return noTextContentData;
+    },
   },
   },
 };
 };
 </script>
 </script>

+ 37 - 0
src/views/book/courseware/preview/components/newWord_template/NewWordTemplatePreview.vue

@@ -462,6 +462,7 @@ import { getNewWordTemplateData } from '@/views/book/courseware/data/newWordTemp
 import PreviewMixin from '../common/PreviewMixin';
 import PreviewMixin from '../common/PreviewMixin';
 import Strockplayredline from './components/Strockplayredline.vue';
 import Strockplayredline from './components/Strockplayredline.vue';
 import EditDiv from './components/EditDiv.vue';
 import EditDiv from './components/EditDiv.vue';
+import { getRandomNumber } from '@/utils';
 export default {
 export default {
   name: 'NewWordPreview',
   name: 'NewWordPreview',
 
 
@@ -565,6 +566,42 @@ export default {
         }
         }
       }
       }
     },
     },
+    /**
+     * 获取无文本内容的数据结构,用于保存为个人模板时的样式模板
+     */
+    getNoTextContentData() {
+      let noTextContentData = JSON.parse(JSON.stringify(this.data));
+      const resetFieldMap = {
+        answer_type: [],
+        answer_list: [], // 答案列表
+        analysis_list: [], // 解析列表
+      };
+
+      Object.assign(noTextContentData, resetFieldMap);
+
+      noTextContentData.option_list.forEach((item) => {
+        item.content = '';
+        item.pinyin = '';
+        item.mark = getRandomNumber();
+        item.hz_info = [];
+        item.is_example = false;
+        item.answer = '';
+        item.shiyi = '';
+        item.answer_pinyin = '';
+        item.answer_en = '';
+        item.file_list = [];
+        item.file_id_list = [];
+        item.content_list = [];
+        item.is_common_pinyin = false;
+      });
+
+      if (noTextContentData.answer) {
+        noTextContentData.answer.answer_list = [];
+        noTextContentData.answer.reference_answer = '';
+      }
+
+      return noTextContentData;
+    },
   },
   },
 };
 };
 </script>
 </script>

+ 56 - 0
src/views/book/courseware/preview/components/new_word/NewWordPreview.vue

@@ -1993,6 +1993,62 @@ export default {
       }
       }
       this.$refs.writeTableZoom.changeRota();
       this.$refs.writeTableZoom.changeRota();
     },
     },
+    /**
+     * 获取无文本内容的数据结构,用于保存为个人模板时的样式模板
+     */
+    getNoTextContentData() {
+      let noTextContentData = JSON.parse(JSON.stringify(this.data));
+      const resetFieldMap = {
+        source_courseware_id_list: [],
+        source_courseware_id: '', // 生词关联课件id,即跨页高亮生词
+        title_con: '',
+        lrc_arr: [], // lrc 文件解析后的数据
+        // lrc 文件数据
+        lrc_data: {
+          name: '',
+          url: '',
+          id: '',
+          file_id: '',
+        },
+        // 音频文件数据
+        audio_data: {
+          name: '',
+          media_duration: 0,
+          temporary_url: '',
+          url: '',
+          file_id: '',
+        },
+        wordTime: [], // 字幕时间节点
+        taskId: '',
+        file_id_list: [], // 文件 id
+      };
+
+      Object.assign(noTextContentData, resetFieldMap);
+
+      noTextContentData.new_word_list.forEach((item) => {
+        item.number = '';
+        item.new_word = '';
+        item.cixing = '';
+        item.definition_list = '';
+        item.pinyin = '';
+        item.mp3_list = '';
+        item.collocation = '';
+        item.liju_list = '';
+        item.file_list = [''];
+        item.header_con = '';
+        item.label = '';
+        item.hz_info = [];
+        item.bg = 0;
+        item.ed = 0;
+      });
+
+      if (noTextContentData.answer) {
+        noTextContentData.answer.answer_list = [];
+        noTextContentData.answer.reference_answer = '';
+      }
+
+      return noTextContentData;
+    },
   },
   },
 };
 };
 </script>
 </script>

+ 26 - 0
src/views/book/courseware/preview/components/notes/NotesPreview.vue

@@ -236,6 +236,32 @@ export default {
       //   }
       //   }
       // });
       // });
     },
     },
+    /**
+     * 获取无文本内容的数据结构,用于保存为个人模板时的样式模板
+     */
+    getNoTextContentData() {
+      let noTextContentData = JSON.parse(JSON.stringify(this.data));
+      const resetFieldMap = {
+        title_con: '',
+        file_id_list: [], // 文件 id
+
+        paragraph_list: [],
+      };
+
+      Object.assign(noTextContentData, resetFieldMap);
+
+      noTextContentData.option.forEach((item) => {
+        item.number = '';
+        item.con = '';
+        item.pinyin = '';
+        item.interpret = '';
+        item.note = '';
+        item.file_list = [''];
+        // item.notesColor = '#8206BF';
+      });
+
+      return noTextContentData;
+    },
   },
   },
 };
 };
 </script>
 </script>

+ 28 - 0
src/views/book/courseware/preview/components/pinyin_base/PinyinBasePreview.vue

@@ -771,6 +771,34 @@ export default {
         this.$refs.record.handleReset();
         this.$refs.record.handleReset();
       }
       }
     },
     },
+    /**
+     * 获取无文本内容的数据结构,用于保存为个人模板时的样式模板
+     */
+    getNoTextContentData() {
+      let noTextContentData = JSON.parse(JSON.stringify(this.data));
+      const resetFieldMap = {
+        character: '',
+        content: '',
+        content_view: [],
+        content_hz: '',
+        matically_pinyin_str: {},
+        audio_file_id: '',
+        audio_file_url: '',
+        file_id_list: [], // 文件 id
+        record_list: [],
+        answer_list: [], // 答案列表
+        analysis_list: [], // 解析列表
+      };
+
+      Object.assign(noTextContentData, resetFieldMap);
+
+      if (noTextContentData.answer) {
+        noTextContentData.answer.answer_list = [];
+        noTextContentData.answer.reference_answer = '';
+      }
+
+      return noTextContentData;
+    },
   },
   },
 };
 };
 </script>
 </script>

+ 19 - 0
src/views/book/courseware/preview/components/record_input/RecordInputPreview.vue

@@ -104,6 +104,25 @@ export default {
       this.data.answer.answer_list.answer_record_list = [];
       this.data.answer.answer_list.answer_record_list = [];
       this.$refs.record.handleReset();
       this.$refs.record.handleReset();
     },
     },
+    /**
+     * 获取无文本内容的数据结构,用于保存为个人模板时的样式模板
+     */
+    getNoTextContentData() {
+      let noTextContentData = JSON.parse(JSON.stringify(this.data));
+      const resetFieldMap = {
+        answer_list: [], // 答案列表
+        analysis_list: [], // 解析列表
+      };
+
+      Object.assign(noTextContentData, resetFieldMap);
+
+      if (noTextContentData.answer) {
+        noTextContentData.answer.answer_list = [];
+        noTextContentData.answer.reference_answer = '';
+      }
+
+      return noTextContentData;
+    },
   },
   },
 };
 };
 </script>
 </script>

+ 41 - 4
src/views/book/courseware/preview/components/table/TablePreview.vue

@@ -16,7 +16,7 @@
           }"
           }"
         >
         >
           <colgroup>
           <colgroup>
-            <col v-for="(item, i) in data.col_width" :key="`col-${i}`" :style="{ width: `${item.value}px` }" />
+            <col v-for="(item, i) in data.col_width" :key="`col-${i}`" :style="{ width: `${item.value}%` }" />
           </colgroup>
           </colgroup>
           <tr v-for="(row, i) in data.option_list" :key="`tr-${i}`" :style="{ height: data.property.height + 'px' }">
           <tr v-for="(row, i) in data.option_list" :key="`tr-${i}`" :style="{ height: data.property.height + 'px' }">
             <template v-for="(col, j) in row">
             <template v-for="(col, j) in row">
@@ -243,14 +243,12 @@
           <table
           <table
             :style="{
             :style="{
               width: '100%',
               width: '100%',
-
-              height: data.property.height + 'px',
             }"
             }"
           >
           >
             <colgroup>
             <colgroup>
               <col v-for="(item, i) in data.col_width" :key="`col-${i}`" :style="{ width: `${item.value}%` }" />
               <col v-for="(item, i) in data.col_width" :key="`col-${i}`" :style="{ width: `${item.value}%` }" />
             </colgroup>
             </colgroup>
-            <tr v-for="(row, i) in data.option_list" :key="`tr-${i}`">
+            <tr v-for="(row, i) in data.option_list" :key="`tr-${i}`" :style="{ height: data.property.height + 'px' }">
               <template v-for="(col, j) in row">
               <template v-for="(col, j) in row">
                 <td
                 <td
                   :key="col.mark"
                   :key="col.mark"
@@ -285,6 +283,7 @@
                           : data.styles.bgColor
                           : data.styles.bgColor
                             ? data.styles.bgColor
                             ? data.styles.bgColor
                             : '',
                             : '',
+                    height: data.property.height + 'px',
                   }"
                   }"
                 >
                 >
                   <div :style="[tdStyle, computedRichStyle(col.content)]" class="cell-wrap">
                   <div :style="[tdStyle, computedRichStyle(col.content)]" class="cell-wrap">
@@ -694,6 +693,44 @@ export default {
         }
         }
       }
       }
     },
     },
+    /**
+     * 获取无文本内容的数据结构,用于保存为个人模板时的样式模板
+     */
+    getNoTextContentData() {
+      let noTextContentData = JSON.parse(JSON.stringify(this.data));
+      const resetFieldMap = {
+        record_list: [],
+        vocabulary: '', // 用于选词的词汇
+        word_list: [], // 选词列表
+        has_identify: 'false', // 是否已识别
+        paragraph_list: [],
+        paragraph_list_parameter: {
+          text: '',
+          is_first_sentence_first_hz_pinyin_first_char_upper_case: 'true',
+          pinyin_proofread_word_list: [],
+        },
+        analysis_list: [],
+        answer_list: [],
+      };
+
+      Object.assign(noTextContentData, resetFieldMap);
+
+      noTextContentData.answer_lists.forEach((item) => {
+        item.answer = '';
+        item.answer_list = [];
+      });
+      noTextContentData.option_list.forEach((item) => {
+        item.content = '';
+        item.model_essay = [];
+      });
+
+      if (noTextContentData.answer) {
+        noTextContentData.answer.answer_list = [];
+        noTextContentData.answer.reference_answer = '';
+      }
+
+      return noTextContentData;
+    },
   },
   },
 };
 };
 </script>
 </script>

+ 26 - 0
src/views/book/courseware/preview/components/video_interaction/VideoInteractionPreview.vue

@@ -273,6 +273,32 @@ export default {
       };
       };
       this.reportFlag = true;
       this.reportFlag = true;
     },
     },
+    /**
+     * 获取无文本内容的数据结构,用于保存为个人模板时的样式模板
+     */
+    getNoTextContentData() {
+      let noTextContentData = JSON.parse(JSON.stringify(this.data));
+      const resetFieldMap = {
+        video_list: [], // 视频列表
+        video_info_list: [],
+        video_id_list: [], // 视频文件 id
+        file_list: [], // 文件列表
+        file_info_list: [],
+        file_id_list: [], // 总文件 id
+        files_id_list: [], // 上传文件 id
+        analysis_list: [],
+        answer_list: [],
+      };
+
+      Object.assign(noTextContentData, resetFieldMap);
+
+      if (noTextContentData.answer) {
+        noTextContentData.answer.answer_list = [];
+        noTextContentData.answer.reference_answer = '';
+      }
+
+      return noTextContentData;
+    },
   },
   },
 };
 };
 </script>
 </script>

+ 21 - 0
src/views/book/courseware/preview/components/write_base/WriteBasePreview.vue

@@ -81,6 +81,27 @@ export default {
           // alert('生成图片失败:' + err.message);
           // alert('生成图片失败:' + err.message);
         });
         });
     },
     },
+
+    /**
+     * 获取无文本内容的数据结构,用于保存为个人模板时的样式模板
+     */
+    getNoTextContentData() {
+      let noTextContentData = JSON.parse(JSON.stringify(this.data));
+      const resetFieldMap = {
+        write_base64: [''],
+        answer_list: [], // 答案列表
+        analysis_list: [], // 解析列表
+      };
+
+      Object.assign(noTextContentData, resetFieldMap);
+
+      if (noTextContentData.answer) {
+        noTextContentData.answer.answer_list = [];
+        noTextContentData.answer.reference_answer = '';
+      }
+
+      return noTextContentData;
+    },
   },
   },
 };
 };
 </script>
 </script>