Просмотр исходного кода

Merge branch 'master' of http://gcls-git.helxsoft.cn/GCLS/eep_page

zq 4 месяцев назад
Родитель
Сommit
9cef9bfb00
55 измененных файлов с 529 добавлено и 203 удалено
  1. 1 1
      .env
  2. 1 1
      package.json
  3. 2 2
      src/components/CommonPreview.vue
  4. 2 2
      src/components/RichText.vue
  5. 6 0
      src/icons/svg/components/article.svg
  6. 6 3
      src/icons/svg/components/audio.svg
  7. 6 0
      src/icons/svg/components/dialogue_article.svg
  8. 6 0
      src/icons/svg/components/drawing.svg
  9. 6 0
      src/icons/svg/components/fill.svg
  10. 6 0
      src/icons/svg/components/games.svg
  11. 6 0
      src/icons/svg/components/image_text.svg
  12. 6 0
      src/icons/svg/components/input.svg
  13. 6 3
      src/icons/svg/components/label.svg
  14. 6 0
      src/icons/svg/components/matching.svg
  15. 6 3
      src/icons/svg/components/picture.svg
  16. 6 0
      src/icons/svg/components/record_input.svg
  17. 6 1
      src/icons/svg/components/richtext.svg
  18. 6 0
      src/icons/svg/components/select.svg
  19. 6 0
      src/icons/svg/components/sort.svg
  20. 6 3
      src/icons/svg/components/spacing.svg
  21. 6 0
      src/icons/svg/components/table.svg
  22. 6 0
      src/icons/svg/components/three-model.svg
  23. 6 5
      src/icons/svg/components/uploadPreview.svg
  24. 6 3
      src/icons/svg/components/video.svg
  25. 6 0
      src/icons/svg/components/video_interaction.svg
  26. 6 0
      src/icons/svg/components/voice_matrix.svg
  27. 6 0
      src/icons/svg/components/write_base.svg
  28. 6 0
      src/icons/svg/components/文件.svg
  29. 6 0
      src/icons/svg/components/问答题.svg
  30. 0 13
      src/icons/svg/games.svg
  31. 0 1
      src/icons/svg/three-model.svg
  32. 0 1
      src/icons/svg/write_base.svg
  33. 35 2
      src/views/book/courseware/create/components/question/article/Article.vue
  34. 41 1
      src/views/book/courseware/create/components/question/article/ArticleSetting.vue
  35. 8 0
      src/views/book/courseware/create/components/question/article/NewWord.vue
  36. 1 0
      src/views/book/courseware/create/components/question/character/Character.vue
  37. 7 0
      src/views/book/courseware/create/components/question/character/CharacterSetting.vue
  38. 40 4
      src/views/book/courseware/create/components/question/dialogue_article/Article.vue
  39. 39 0
      src/views/book/courseware/create/components/question/dialogue_article/ArticleSetting.vue
  40. 1 0
      src/views/book/courseware/create/components/question/fill/Fill.vue
  41. 7 0
      src/views/book/courseware/create/components/question/fill/FillSetting.vue
  42. 1 0
      src/views/book/courseware/create/components/question/new_word/NewWord.vue
  43. 7 0
      src/views/book/courseware/create/components/question/new_word/NewWordSetting.vue
  44. 1 0
      src/views/book/courseware/create/components/question/pinyin_base/PinyinBase.vue
  45. 7 0
      src/views/book/courseware/create/components/question/pinyin_base/PinyinBaseSetting.vue
  46. 3 0
      src/views/book/courseware/data/article.js
  47. 156 150
      src/views/book/courseware/data/bookType.js
  48. 1 0
      src/views/book/courseware/data/character.js
  49. 10 0
      src/views/book/courseware/data/common.js
  50. 3 1
      src/views/book/courseware/data/dialogueArticle.js
  51. 1 0
      src/views/book/courseware/data/fill.js
  52. 1 0
      src/views/book/courseware/data/newWord.js
  53. 1 0
      src/views/book/courseware/data/pinyinBase.js
  54. 1 2
      src/views/book/courseware/preview/components/matching/MatchingPreview.vue
  55. 1 1
      src/views/book/courseware/preview/components/new_word/NewWordPreview.vue

+ 1 - 1
.env

@@ -11,4 +11,4 @@ VUE_APP_BookWebSI = '/GCLSBookWebSI/ServiceInterface'
 VUE_APP_EepServer = '/EEPServer/SI'
 VUE_APP_EepServer = '/EEPServer/SI'
 
 
 #version
 #version
-VUE_APP_VERSION = '2026.01.12'
+VUE_APP_VERSION = '2026.01.16'

+ 1 - 1
package.json

@@ -1,6 +1,6 @@
 {
 {
   "name": "eep_page",
   "name": "eep_page",
-  "version": "2026.01.12",
+  "version": "2026.01.16",
   "private": true,
   "private": true,
   "main": "main.js",
   "main": "main.js",
   "description": "智慧梧桐数字教材编辑器",
   "description": "智慧梧桐数字教材编辑器",

+ 2 - 2
src/components/CommonPreview.vue

@@ -115,8 +115,8 @@
       <aside v-if="sidebarShow" ref="sidebarMenu" class="sidebar">
       <aside v-if="sidebarShow" ref="sidebarMenu" class="sidebar">
         <aside class="toolbar">
         <aside class="toolbar">
           <div class="toolbar-special">
           <div class="toolbar-special">
-            <!-- <img :src="require('@/assets/icon/sidebar-fullscreen.png')" alt="全屏" />
-            <img :src="require('@/assets/icon/sidebar-toolkit.png')" alt="工具箱" /> -->
+            <img :src="require('@/assets/icon/sidebar-fullscreen.png')" alt="全屏" @click="fullScreen" />
+            <img :src="require('@/assets/icon/sidebar-toolkit.png')" alt="工具箱" />
           </div>
           </div>
           <div v-if="sidebarShow" class="toolbar-list">
           <div v-if="sidebarShow" class="toolbar-list">
             <div
             <div

+ 2 - 2
src/components/RichText.vue

@@ -103,11 +103,11 @@ export default {
     },
     },
     fontSize: {
     fontSize: {
       type: String,
       type: String,
-      default: '14pt',
+      default: '12pt',
     },
     },
     fontFamily: {
     fontFamily: {
       type: String,
       type: String,
-      default: '宋体',
+      default: 'Arial',
     },
     },
     isHasSpace: {
     isHasSpace: {
       type: Boolean,
       type: Boolean,

+ 6 - 0
src/icons/svg/components/article.svg

@@ -0,0 +1,6 @@
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 32 32" width="24" height="24" style="" filter="none">
+    
+    <g>
+    <path d="M26.667 29.333h-21.333c-0.736 0-1.333-0.597-1.333-1.333v0-24c0-0.736 0.597-1.333 1.333-1.333v0h21.333c0.736 0 1.333 0.597 1.333 1.333v0 24c0 0.736-0.597 1.333-1.333 1.333v0zM25.333 26.667v-21.333h-18.667v21.333h18.667zM10.667 9.333h10.667v2.667h-10.667v-2.667zM10.667 14.667h10.667v2.667h-10.667v-2.667zM10.667 20h6.667v2.667h-6.667v-2.667z" fill="rgba(16,16,16,1)"></path>
+    </g>
+  </svg>

+ 6 - 3
src/icons/svg/components/audio.svg

@@ -1,3 +1,6 @@
-<svg width="14" height="12" viewBox="0 0 14 12" fill="none" xmlns="http://www.w3.org/2000/svg">
-<path d="M13.3337 0V9.33333C13.3337 10.8061 12.1397 12 10.667 12C9.19426 12 8.00033 10.8061 8.00033 9.33333C8.00033 7.8606 9.19426 6.66667 10.667 6.66667C11.1527 6.66667 11.6081 6.79653 12.0003 7.0234V1.33333H6.00033V9.33333C6.00033 10.8061 4.80642 12 3.33366 12C1.8609 12 0.666992 10.8061 0.666992 9.33333C0.666992 7.8606 1.8609 6.66667 3.33366 6.66667C3.81937 6.66667 4.27476 6.79653 4.66699 7.0234V0H13.3337ZM3.33366 10.6667C4.07004 10.6667 4.66699 10.0697 4.66699 9.33333C4.66699 8.59693 4.07004 8 3.33366 8C2.59728 8 2.00033 8.59693 2.00033 9.33333C2.00033 10.0697 2.59728 10.6667 3.33366 10.6667ZM10.667 10.6667C11.4034 10.6667 12.0003 10.0697 12.0003 9.33333C12.0003 8.59693 11.4034 8 10.667 8C9.93059 8 9.33366 8.59693 9.33366 9.33333C9.33366 10.0697 9.93059 10.6667 10.667 10.6667Z" fill="black"/>
-</svg>
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 32 32" width="24" height="24" style="" filter="none">
+    
+    <g>
+    <path d="M13.333 9.627l-4.529 3.707h-4.804v5.333h4.804l4.529 3.707v-12.747zM7.852 21.333h-5.185c-0.736 0-1.333-0.597-1.333-1.333v0-8c0-0.736 0.597-1.333 1.333-1.333v0h5.185l7.059-5.776c0.114-0.094 0.262-0.151 0.423-0.151 0.368 0 0.667 0.298 0.667 0.667 0 0 0 0 0 0v-0 21.187c0 0 0 0 0 0 0 0.368-0.298 0.667-0.667 0.667-0.161 0-0.309-0.057-0.424-0.152l0.001 0.001-7.057-5.776zM25.875 26.845l-1.888-1.888c2.467-2.203 4.013-5.392 4.013-8.943 0-0.005 0-0.010 0-0.015v0.001c0-0.003 0-0.007 0-0.011 0-3.733-1.708-7.066-4.384-9.263l-0.021-0.017 1.893-1.893c3.177 2.702 5.179 6.702 5.179 11.169 0 0.005 0 0.010 0 0.015v-0.001c0 4.297-1.848 8.163-4.792 10.845zM21.151 22.121l-1.896-1.896c1.269-0.983 2.079-2.507 2.079-4.221 0-0.002 0-0.003 0-0.005v0c0-1.907-1-3.58-2.507-4.523l1.919-1.919c1.983 1.471 3.255 3.804 3.255 6.435 0 0.002 0 0.005 0 0.007v-0c0 2.456-1.107 4.653-2.849 6.121z" fill="rgba(16,16,16,1)"></path>
+    </g>
+  </svg>

+ 6 - 0
src/icons/svg/components/dialogue_article.svg

@@ -0,0 +1,6 @@
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 48 48" width="24" height="24" style="" filter="none">
+    
+    <g>
+    <rect width="48" height="48" fill="rgba(16,16,16,1)" fill-opacity="0.01" stroke="none"></rect><path d="M33 38H22V30H36V22H44V38H39L36 41L33 38Z" stroke="rgba(16,16,16,1)" stroke-width="4" stroke-linecap="round" stroke-linejoin="round" fill="none"></path><path d="M4 6H36V30H17L13 34L9 30H4V6Z" fill="none" stroke="rgba(16,16,16,1)" stroke-width="4" stroke-linecap="round" stroke-linejoin="round"></path><path d="M12 22H18" stroke="rgba(16,16,16,1)" stroke-width="4" stroke-linecap="round" fill="none"></path><path d="M12 14H24" stroke="rgba(16,16,16,1)" stroke-width="4" stroke-linecap="round" fill="none"></path>
+    </g>
+  </svg>

+ 6 - 0
src/icons/svg/components/drawing.svg

@@ -0,0 +1,6 @@
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 32 32" width="24" height="24" style="" filter="none">
+    
+    <g>
+    <path d="M11.448 22.667h-7.448v-2.667h24v2.667h-7.448l4.324 4.324-1.885 1.885-5.657-5.657v3.448h-2.667v-3.448l-5.657 5.657-1.885-1.885 4.324-4.324zM6.667 4h18.667c0.736 0 1.333 0.597 1.333 1.333v0 13.333h-21.333v-13.333c0-0.736 0.597-1.333 1.333-1.333v0zM8 6.667v9.333h16v-9.333h-16z" fill="rgba(16,16,16,1)"></path>
+    </g>
+  </svg>

+ 6 - 0
src/icons/svg/components/fill.svg

@@ -0,0 +1,6 @@
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 32 32" width="24" height="24" style="" filter="none">
+    
+    <g>
+    <path d="M8.552 21.333l13.523-13.523-1.885-1.885-13.523 13.523v1.885h1.885zM9.657 24h-5.657v-5.657l15.247-15.247c0.241-0.241 0.575-0.39 0.943-0.39s0.701 0.149 0.943 0.39l3.772 3.772c0.241 0.241 0.39 0.575 0.39 0.943s-0.149 0.701-0.39 0.943l-15.247 15.247zM4 26.667h24v2.667h-24v-2.667z" fill="rgba(16,16,16,1)"></path>
+    </g>
+  </svg>

+ 6 - 0
src/icons/svg/components/games.svg

@@ -0,0 +1,6 @@
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 32 32" width="24" height="24" style="" filter="none">
+    
+    <g>
+    <path d="M22.667 5.333c4.418 0 8 3.582 8 8v0 5.333c0 4.418-3.582 8-8 8v0h-13.333c-4.418 0-8-3.582-8-8v0-5.333c0-4.418 3.582-8 8-8v0h13.333zM22.667 8h-13.333c-2.852 0-5.181 2.238-5.326 5.054l-0.001 0.013-0.007 0.267v5.333c0 2.852 2.238 5.181 5.054 5.326l0.013 0.001 0.267 0.007h13.333c2.852 0 5.181-2.238 5.326-5.054l0.001-0.013 0.007-0.267v-5.333c0-2.852-2.238-5.181-5.054-5.326l-0.013-0.001-0.267-0.007zM13.333 12v2.667h2.667v2.667h-2.668l0.001 2.667h-2.667l-0.001-2.667h-2.665v-2.667h2.667v-2.667h2.667zM24 17.333v2.667h-2.667v-2.667h2.667zM21.333 12v2.667h-2.667v-2.667h2.667z" fill="rgba(16,16,16,1)"></path>
+    </g>
+  </svg>

+ 6 - 0
src/icons/svg/components/image_text.svg

@@ -0,0 +1,6 @@
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 32 32" width="24" height="24" style="" filter="none">
+    
+    <g>
+    <path d="M2.667 5.324c0.005-0.729 0.594-1.318 1.322-1.324h24.022c0.731 0 1.323 0.593 1.323 1.324v21.352c-0.005 0.729-0.594 1.318-1.322 1.324h-24.022c-0.731-0.001-1.323-0.593-1.323-1.324v0-21.352zM5.333 6.667v18.667h21.333v-18.667h-21.333zM8 9.333h8v8h-8v-8zM10.667 12v2.667h2.667v-2.667h-2.667zM8 20h16v2.667h-16v-2.667zM18.667 9.333h5.333v2.667h-5.333v-2.667zM18.667 14.667h5.333v2.667h-5.333v-2.667z" fill="rgba(16,16,16,1)"></path>
+    </g>
+  </svg>

+ 6 - 0
src/icons/svg/components/input.svg

@@ -0,0 +1,6 @@
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 32 32" width="24" height="24" style="" filter="none">
+    
+    <g>
+    <path d="M26.445 11.403c0 0.588-0.477 1.065-1.065 1.065s-1.065-0.477-1.065-1.065c0-0.588 0.477-1.065 1.065-1.065s1.065 0.477 1.065 1.065zM21.653 11.403c0 0.588-0.477 1.065-1.065 1.065s-1.065-0.477-1.065-1.065c0-0.588 0.477-1.065 1.065-1.065s1.065 0.477 1.065 1.065zM17.040 11.403c0 0.588-0.477 1.065-1.065 1.065s-1.065-0.477-1.065-1.065c0-0.588 0.477-1.065 1.065-1.065s1.065 0.477 1.065 1.065zM12.426 11.403c0 0.588-0.477 1.065-1.065 1.065s-1.065-0.477-1.065-1.065c0-0.588 0.477-1.065 1.065-1.065s1.065 0.477 1.065 1.065zM7.812 11.403c0 0.588-0.477 1.065-1.065 1.065s-1.065-0.477-1.065-1.065c0-0.588 0.477-1.065 1.065-1.065s1.065 0.477 1.065 1.065zM23.961 16.017c0 0.588-0.477 1.065-1.065 1.065s-1.065-0.477-1.065-1.065c0-0.588 0.477-1.065 1.065-1.065s1.065 0.477 1.065 1.065zM19.346 16.017c0 0.588-0.477 1.065-1.065 1.065s-1.065-0.477-1.065-1.065c0-0.588 0.477-1.065 1.065-1.065s1.065 0.477 1.065 1.065zM14.733 16.017c0 0.588-0.477 1.065-1.065 1.065s-1.065-0.477-1.065-1.065c0-0.588 0.477-1.065 1.065-1.065s1.065 0.477 1.065 1.065zM10.118 16.017c0 0.588-0.477 1.065-1.065 1.065s-1.065-0.477-1.065-1.065c0-0.588 0.477-1.065 1.065-1.065s1.065 0.477 1.065 1.065zM10.297 19.744h11.003v1.774h-11.003zM1.513 5.013v21.296h29.28v-21.296h-29.28zM29.018 24.533h-25.732v-17.743h25.732v17.743z" fill="rgba(16,16,16,1)"></path>
+    </g>
+  </svg>

+ 6 - 3
src/icons/svg/components/label.svg

@@ -1,3 +1,6 @@
-<svg width="15" height="15" viewBox="0 0 15 15" fill="none" xmlns="http://www.w3.org/2000/svg">
-<path d="M7.26979 0.398438L13.8695 1.34124L14.8123 7.9409L8.68399 14.0692C8.42366 14.3295 8.00159 14.3295 7.74119 14.0692L1.14155 7.4695C0.881201 7.20917 0.881201 6.78704 1.14155 6.5267L7.26979 0.398438ZM7.74119 1.81265L2.55577 6.9981L8.21259 12.655L13.3981 7.4695L12.691 2.51976L7.74119 1.81265ZM9.15546 6.0553C8.63473 5.53459 8.63473 4.69037 9.15546 4.16967C9.67613 3.64897 10.5203 3.64897 11.0411 4.16967C11.5617 4.69037 11.5617 5.53459 11.0411 6.0553C10.5203 6.57597 9.67613 6.57597 9.15546 6.0553Z" fill="black"/>
-</svg>
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 32 32" width="24" height="24" style="" filter="none">
+    
+    <g>
+    <path d="M4 9.333l11.26-7.507c0.208-0.14 0.464-0.224 0.74-0.224s0.532 0.084 0.745 0.227l-0.005-0.003 11.26 7.507v18.667c0 0.736-0.597 1.333-1.333 1.333v0h-21.333c-0.736 0-1.333-0.597-1.333-1.333v0-18.667zM6.667 10.76v15.907h18.667v-15.907l-9.333-6.221-9.333 6.221zM10.667 21.333h10.667v2.667h-10.667v-2.667zM10.667 17.333h10.667v2.667h-10.667v-2.667zM16 14.667c-1.473 0-2.667-1.194-2.667-2.667s1.194-2.667 2.667-2.667v0c1.473 0 2.667 1.194 2.667 2.667s-1.194 2.667-2.667 2.667v0z" fill="rgba(16,16,16,1)"></path>
+    </g>
+  </svg>

+ 6 - 0
src/icons/svg/components/matching.svg

@@ -0,0 +1,6 @@
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 48 48" width="22" height="22" style="" filter="none">
+    
+    <g>
+    <rect width="48" height="48" fill="rgba(16,16,16,1)" fill-opacity="0.01" stroke="none"></rect><path d="M36 8L13 8C10 8 4 10 4 16C4 22 10 24 13 24H35C38 24 44 26 44 32C44 38 38 40 35 40H12" stroke="rgba(16,16,16,1)" stroke-width="4" stroke-linecap="round" stroke-linejoin="round" fill="none"></path><path d="M40 12C42.2091 12 44 10.2091 44 8C44 5.79086 42.2091 4 40 4C37.7909 4 36 5.79086 36 8C36 10.2091 37.7909 12 40 12Z" fill="none" stroke="rgba(16,16,16,1)" stroke-width="4" stroke-linejoin="round"></path><path d="M8 44C10.2091 44 12 42.2091 12 40C12 37.7909 10.2091 36 8 36C5.79086 36 4 37.7909 4 40C4 42.2091 5.79086 44 8 44Z" fill="none" stroke="rgba(16,16,16,1)" stroke-width="4" stroke-linejoin="round"></path>
+    </g>
+  </svg>

+ 6 - 3
src/icons/svg/components/picture.svg

@@ -1,3 +1,6 @@
-<svg width="12" height="12" viewBox="0 0 12 12" fill="none" xmlns="http://www.w3.org/2000/svg">
-<path d="M1.33333 5.40033L2.66667 4.067L6.33333 7.73367L8.66667 5.40033L10.6667 7.40033V1.33333H1.33333V5.40033ZM1.33333 7.28593V10.6667H3.40033L5.39053 8.67647L2.66667 5.9526L1.33333 7.28593ZM5.28593 10.6667H10.6667V9.28593L8.66667 7.28593L5.28593 10.6667ZM0.666667 0H11.3333C11.7015 0 12 0.29848 12 0.666667V11.3333C12 11.7015 11.7015 12 11.3333 12H0.666667C0.29848 12 0 11.7015 0 11.3333V0.666667C0 0.29848 0.29848 0 0.666667 0ZM8.33333 4.66667C7.78107 4.66667 7.33333 4.21895 7.33333 3.66667C7.33333 3.11438 7.78107 2.66667 8.33333 2.66667C8.8856 2.66667 9.33333 3.11438 9.33333 3.66667C9.33333 4.21895 8.8856 4.66667 8.33333 4.66667Z" fill="black"/>
-</svg>
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 32 32" width="24" height="24" style="" filter="none">
+    
+    <g>
+    <path d="M6.437 28l-0.027 0.027-0.028-0.027h-2.393c-0.731-0.001-1.323-0.593-1.323-1.324v0-21.352c0.005-0.729 0.594-1.318 1.322-1.324h24.022c0.731 0 1.323 0.593 1.323 1.324v21.352c-0.005 0.729-0.594 1.318-1.322 1.324h-21.574zM26.667 20v-13.333h-21.333v18.667l13.333-13.333 8 8zM26.667 23.771l-8-8-9.563 9.563h17.563v-1.563zM10.667 14.667c-1.473 0-2.667-1.194-2.667-2.667s1.194-2.667 2.667-2.667v0c1.473 0 2.667 1.194 2.667 2.667s-1.194 2.667-2.667 2.667v0z" fill="rgba(16,16,16,1)"></path>
+    </g>
+  </svg>

+ 6 - 0
src/icons/svg/components/record_input.svg

@@ -0,0 +1,6 @@
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 32 32" width="24" height="24" style="" filter="none">
+    
+    <g>
+    <path d="M16 22c3.4 0 6-2.6 6-6v-8c0-3.4-2.6-6-6-6s-6 2.6-6 6v8c0 3.4 2.6 6 6 6zM12 8c0-2.2 1.8-4 4-4s4 1.8 4 4v8c0 2.2-1.8 4-4 4s-4-1.8-4-4v-8z" fill="rgba(16,16,16,1)"></path><path d="M24 14v2c0 4.4-3.6 8-8 8s-8-3.6-8-8v-2h-2v2c0 5.2 4 9.4 9 9.8v2.2h-5v2h12v-2h-5v-2.2c5-0.4 9-4.6 9-9.8v-2h-2z" fill="rgba(16,16,16,1)"></path>
+    </g>
+  </svg>

+ 6 - 1
src/icons/svg/components/richtext.svg

@@ -1 +1,6 @@
-<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1753441956864" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="2349" xmlns:xlink="http://www.w3.org/1999/xlink" width="16" height="16"><path d="M712.145455 316.509091h-390.981819c-18.618182 0-37.236364 13.963636-37.236363 37.236364s18.618182 37.236364 37.236363 37.236363h158.254546v344.436364c0 18.618182 18.618182 37.236364 37.236363 37.236363s37.236364-18.618182 37.236364-37.236363v-344.436364h158.254546c18.618182 0 37.236364-18.618182 37.236363-37.236363s-18.618182-37.236364-37.236363-37.236364z" p-id="2350"></path><path d="M842.472727 51.2h-665.6c-69.818182 0-130.327273 60.509091-130.327272 130.327273v665.6c0 69.818182 60.509091 130.327273 130.327272 130.327272h665.6c74.472727 0 130.327273-55.854545 130.327273-130.327272V176.872727c0-69.818182-55.854545-125.672727-130.327273-125.672727z m60.509091 795.927273c0 32.581818-23.272727 55.854545-55.854545 55.854545h-665.6c-32.581818 0-55.854545-23.272727-55.854546-55.854545V176.872727c0-32.581818 23.272727-55.854545 55.854546-55.854545h665.6c32.581818 0 55.854545 23.272727 55.854545 55.854545v670.254546z" p-id="2351"></path></svg>
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 48 48" width="24" height="24" style="" filter="none">
+    
+    <g>
+    <rect width="48" height="48" fill="rgba(16,16,16,1)" fill-opacity="0.01" stroke="none"></rect><rect x="6" y="6" width="36" height="36" rx="3" fill="none" stroke="rgba(16,16,16,1)" stroke-width="4" stroke-linejoin="round"></rect><path d="M16 19V16H32V19" stroke="rgba(16,16,16,1)" stroke-width="4" stroke-linecap="round" stroke-linejoin="round" fill="none"></path><path d="M22 34H26" stroke="rgba(16,16,16,1)" stroke-width="4" stroke-linecap="round" stroke-linejoin="round" fill="none"></path><path d="M24 18L24 34" stroke="rgba(16,16,16,1)" stroke-width="4" stroke-linecap="round" stroke-linejoin="round" fill="none"></path>
+    </g>
+  </svg>

+ 6 - 0
src/icons/svg/components/select.svg

@@ -0,0 +1,6 @@
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 32 32" width="24" height="24" style="" filter="none">
+    
+    <g>
+    <path d="M16 29.333c-7.364 0-13.333-5.969-13.333-13.333s5.969-13.333 13.333-13.333 13.333 5.969 13.333 13.333-5.969 13.333-13.333 13.333zM16 26.667c5.891 0 10.667-4.776 10.667-10.667s-4.776-10.667-10.667-10.667v0c-5.891 0-10.667 4.776-10.667 10.667s4.776 10.667 10.667 10.667v0zM14.671 21.333l-5.657-5.657 1.885-1.885 3.772 3.772 7.541-7.543 1.887 1.885-9.428 9.428z" fill="rgba(16,16,16,1)"></path>
+    </g>
+  </svg>

+ 6 - 0
src/icons/svg/components/sort.svg

@@ -0,0 +1,6 @@
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 48 48" width="24" height="24" style="" filter="none">
+    
+    <g>
+    <path d="M25 14L16 5L7 14" stroke="rgba(16,16,16,1)" stroke-width="4" stroke-linecap="round" stroke-linejoin="round" fill="none"></path><path d="M15.9917 31V5" stroke="rgba(16,16,16,1)" stroke-width="4" stroke-linecap="round" stroke-linejoin="round" fill="none"></path><path d="M42 34L33 43L24 34" stroke="rgba(16,16,16,1)" stroke-width="4" stroke-linecap="round" stroke-linejoin="round" fill="none"></path><path d="M32.9917 17V43" stroke="rgba(16,16,16,1)" stroke-width="4" stroke-linecap="round" stroke-linejoin="round" fill="none"></path>
+    </g>
+  </svg>

+ 6 - 3
src/icons/svg/components/spacing.svg

@@ -1,3 +1,6 @@
-<svg width="14" height="12" viewBox="0 0 14 12" fill="none" xmlns="http://www.w3.org/2000/svg">
-<path d="M10.333 12V9.33333H3.66634V12H2.33301V8.66667C2.33301 8.29847 2.63149 8 2.99967 8H10.9997C11.3679 8 11.6663 8.29847 11.6663 8.66667V12H10.333ZM3.66634 0V2.66667H10.333V0H11.6663V3.33333C11.6663 3.70152 11.3679 4 10.9997 4H2.99967C2.63149 4 2.33301 3.70152 2.33301 3.33333V0H3.66634ZM0.333008 4L2.99967 6L0.333008 8V4ZM13.6663 4V8L10.9997 6L13.6663 4Z" fill="black"/>
-</svg>
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 32 32" width="24" height="24" style="" filter="none">
+    
+    <g>
+    <path d="M22.667 28v-5.333h-13.333v5.333h-2.667v-6.667c0-0.736 0.597-1.333 1.333-1.333v0h16c0.736 0 1.333 0.597 1.333 1.333v0 6.667h-2.667zM9.333 4v5.333h13.333v-5.333h2.667v6.667c0 0.736-0.597 1.333-1.333 1.333v0h-16c-0.736 0-1.333-0.597-1.333-1.333v0-6.667h2.667zM2.667 12l5.333 4-5.333 4v-8zM29.333 12v8l-5.333-4 5.333-4z" fill="rgba(16,16,16,1)"></path>
+    </g>
+  </svg>

+ 6 - 0
src/icons/svg/components/table.svg

@@ -0,0 +1,6 @@
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 32 32" width="24" height="24" style="" filter="none">
+    
+    <g>
+    <path d="M17.333 13.333v5.333h8v-5.333h-8zM14.667 13.333h-8v5.333h8v-5.333zM17.333 25.333h8v-4h-8v4zM14.667 25.333v-4h-8v4h8zM17.333 6.667v4h8v-4h-8zM14.667 6.667h-8v4h8v-4zM5.333 4h21.333c0.736 0 1.333 0.597 1.333 1.333v0 21.333c0 0.736-0.597 1.333-1.333 1.333v0h-21.333c-0.736 0-1.333-0.597-1.333-1.333v0-21.333c0-0.736 0.597-1.333 1.333-1.333v0z" fill="rgba(16,16,16,1)"></path>
+    </g>
+  </svg>

+ 6 - 0
src/icons/svg/components/three-model.svg

@@ -0,0 +1,6 @@
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 48 48" width="22" height="22" style="" filter="none">
+    
+    <g>
+    <rect width="48" height="48" fill="rgba(16,16,16,1)" fill-opacity="0.01" stroke="none"></rect><path d="M48 0H0V48H48V0Z" fill="rgba(16,16,16,1)" fill-opacity="0.01" stroke="none"></path><path d="M4 44V14L14 4H44V34L34 44H4Z" stroke="rgba(16,16,16,1)" stroke-width="4" stroke-linecap="round" stroke-linejoin="round" fill="none"></path><path d="M34 14V44" stroke="rgba(16,16,16,1)" stroke-width="4" stroke-linecap="round" stroke-linejoin="round" fill="none"></path><path d="M14 4L14 34" stroke="rgba(16,16,16,1)" stroke-width="4" stroke-linecap="round" stroke-linejoin="round" fill="none"></path><path d="M4 14L34 14" stroke="rgba(16,16,16,1)" stroke-width="4" stroke-linecap="round" stroke-linejoin="round" fill="none"></path><path d="M44 4L34 14" stroke="rgba(16,16,16,1)" stroke-width="4" stroke-linecap="round" stroke-linejoin="round" fill="none"></path><path d="M4 44L14 34" stroke="rgba(16,16,16,1)" stroke-width="4" stroke-linecap="round" stroke-linejoin="round" fill="none"></path><path d="M14 34L44 34" stroke="rgba(16,16,16,1)" stroke-width="4" stroke-linecap="round" stroke-linejoin="round" fill="none"></path>
+    </g>
+  </svg>

+ 6 - 5
src/icons/svg/components/uploadPreview.svg

@@ -1,5 +1,6 @@
-<svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg">
-  <path
-    d="M8.00028 2C11.595 2 14.5857 4.58651 15.2127 8C14.5857 11.4135 11.595 14 8.00028 14C4.4055 14 1.41485 11.4135 0.787842 8C1.41485 4.58651 4.4055 2 8.00028 2ZM8.00028 12.6667C10.824 12.6667 13.2403 10.7013 13.8519 8C13.2403 5.29869 10.824 3.33333 8.00028 3.33333C5.17648 3.33333 2.76023 5.29869 2.1486 8C2.76023 10.7013 5.17648 12.6667 8.00028 12.6667ZM8.00028 11C6.3434 11 5.00026 9.65687 5.00026 8C5.00026 6.34315 6.3434 5 8.00028 5C9.65708 5 11.0003 6.34315 11.0003 8C11.0003 9.65687 9.65708 11 8.00028 11ZM8.00028 9.66667C8.92075 9.66667 9.66695 8.92047 9.66695 8C9.66695 7.07953 8.92075 6.33333 8.00028 6.33333C7.07982 6.33333 6.33359 7.07953 6.33359 8C6.33359 8.92047 7.07982 9.66667 8.00028 9.66667Z"
-    fill="#4E5969" />
-</svg>
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 32 32" width="24" height="24" style="" filter="none">
+    
+    <g>
+    <path d="M16.552 6.667h11.448c0.736 0 1.333 0.597 1.333 1.333v0 18.667c0 0.736-0.597 1.333-1.333 1.333v0h-24c-0.736 0-1.333-0.597-1.333-1.333v0-21.333c0-0.736 0.597-1.333 1.333-1.333v0h9.885l2.667 2.667zM5.333 6.667v18.667h21.333v-16h-11.219l-2.667-2.667h-7.448zM17.333 17.333v5.333h-2.667v-5.333h-4l5.333-5.333 5.333 5.333h-4z" fill="rgba(16,16,16,1)"></path>
+    </g>
+  </svg>

+ 6 - 3
src/icons/svg/components/video.svg

@@ -1,3 +1,6 @@
-<svg width="14" height="12" viewBox="0 0 14 12" fill="none" xmlns="http://www.w3.org/2000/svg">
-<path d="M0.333008 0.662267C0.333008 0.296507 0.636548 0 0.994208 0H13.0051C13.3703 0 13.6663 0.296633 13.6663 0.662267V11.3377C13.6663 11.7035 13.3628 12 13.0051 12H0.994208C0.629041 12 0.333008 11.7034 0.333008 11.3377V0.662267ZM1.66634 1.33333V10.6667H12.333V1.33333H1.66634ZM6.08094 3.60973L9.33354 5.77813C9.45607 5.8598 9.48921 6.0254 9.40747 6.14793C9.38794 6.1772 9.36281 6.20233 9.33354 6.22187L6.08094 8.39027C5.95841 8.472 5.79281 8.43887 5.71114 8.31633C5.68194 8.27253 5.66634 8.22107 5.66634 8.1684V3.83161C5.66634 3.68433 5.78574 3.56494 5.93301 3.56494C5.98567 3.56494 6.03714 3.58052 6.08094 3.60973Z" fill="black"/>
-</svg>
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 32 32" width="24" height="24" style="" filter="none">
+    
+    <g>
+    <path d="M2.667 5.324c0.005-0.729 0.594-1.318 1.322-1.324h24.022c0.731 0 1.323 0.593 1.323 1.324v21.352c-0.005 0.729-0.594 1.318-1.322 1.324h-24.022c-0.731-0.001-1.323-0.593-1.323-1.324v0-21.352zM5.333 6.667v18.667h21.333v-18.667h-21.333zM14.163 11.22l6.505 4.336c0.144 0.097 0.238 0.26 0.238 0.444s-0.094 0.347-0.236 0.443l-0.002 0.001-6.507 4.336c-0.083 0.056-0.185 0.089-0.295 0.089-0.294 0-0.532-0.238-0.533-0.531v-8.675c0.001-0.294 0.239-0.532 0.533-0.532 0.11 0 0.213 0.034 0.298 0.091l-0.002-0.001z" fill="rgba(16,16,16,1)"></path>
+    </g>
+  </svg>

+ 6 - 0
src/icons/svg/components/video_interaction.svg

@@ -0,0 +1,6 @@
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 32 32" width="24" height="24" style="" filter="none">
+    
+    <g>
+    <path d="M18.667 13.667l4-3v8l-4-3v3h-9.333v-8h9.333v3zM7.684 22.667h18.983v-16h-21.333v17.847l2.351-1.847zM8.607 25.333l-5.94 4.667v-24.667c0-0.736 0.597-1.333 1.333-1.333v0h24c0.736 0 1.333 0.597 1.333 1.333v0 18.667c0 0.736-0.597 1.333-1.333 1.333v0h-19.393z" fill="rgba(16,16,16,1)"></path>
+    </g>
+  </svg>

+ 6 - 0
src/icons/svg/components/voice_matrix.svg

@@ -0,0 +1,6 @@
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 48 48" width="24" height="24" style="" filter="none">
+    
+    <g>
+    <path d="M18 6H8C6.89543 6 6 6.89543 6 8V18C6 19.1046 6.89543 20 8 20H18C19.1046 20 20 19.1046 20 18V8C20 6.89543 19.1046 6 18 6Z" fill="none" stroke="rgba(16,16,16,1)" stroke-width="4" stroke-linejoin="round"></path><path d="M18 28H8C6.89543 28 6 28.8954 6 30V40C6 41.1046 6.89543 42 8 42H18C19.1046 42 20 41.1046 20 40V30C20 28.8954 19.1046 28 18 28Z" fill="none" stroke="rgba(16,16,16,1)" stroke-width="4" stroke-linejoin="round"></path><path d="M40 6H30C28.8954 6 28 6.89543 28 8V18C28 19.1046 28.8954 20 30 20H40C41.1046 20 42 19.1046 42 18V8C42 6.89543 41.1046 6 40 6Z" fill="none" stroke="rgba(16,16,16,1)" stroke-width="4" stroke-linejoin="round"></path><path d="M40 28H30C28.8954 28 28 28.8954 28 30V40C28 41.1046 28.8954 42 30 42H40C41.1046 42 42 41.1046 42 40V30C42 28.8954 41.1046 28 40 28Z" fill="none" stroke="rgba(16,16,16,1)" stroke-width="4" stroke-linejoin="round"></path>
+    </g>
+  </svg>

+ 6 - 0
src/icons/svg/components/write_base.svg

@@ -0,0 +1,6 @@
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 32 32" width="22" height="22" style="" filter="none">
+    
+    <g>
+    <path d="M26 28h-22v-20h10.4l2-2h-14.4v24h26v-16.4l-2 2z" fill="rgba(16,16,16,1)"></path><path d="M10 22h6l14-14-6-6-14 14v6zM12 16.8l9.4-9.4 3.2 3.2-9.4 9.4h-3.2v-3.2z" fill="rgba(16,16,16,1)"></path>
+    </g>
+  </svg>

+ 6 - 0
src/icons/svg/components/文件.svg

@@ -0,0 +1,6 @@
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 32 32" width="24" height="24" style="" filter="none">
+    
+    <g>
+    <path d="M5.333 6.667v18.667h21.333v-16h-11.219l-2.667-2.667h-7.448zM16.552 6.667h11.448c0.736 0 1.333 0.597 1.333 1.333v0 18.667c0 0.736-0.597 1.333-1.333 1.333v0h-24c-0.736 0-1.333-0.597-1.333-1.333v0-21.333c0-0.736 0.597-1.333 1.333-1.333v0h9.885l2.667 2.667z" fill="rgba(16,16,16,1)"></path>
+    </g>
+  </svg>

+ 6 - 0
src/icons/svg/components/问答题.svg

@@ -0,0 +1,6 @@
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 32 32" width="24" height="24" style="" filter="none">
+    
+    <g>
+    <path d="M7.684 22.667h18.983v-16h-21.333v17.847l2.351-1.847zM8.607 25.333l-5.94 4.667v-24.667c0-0.736 0.597-1.333 1.333-1.333v0h24c0.736 0 1.333 0.597 1.333 1.333v0 18.667c0 0.736-0.597 1.333-1.333 1.333v0h-19.393zM14.667 18.667h2.667v2.667h-2.667v-2.667zM11.423 11.751c0.442-2.155 2.323-3.753 4.578-3.753 2.578 0 4.668 2.090 4.668 4.668s-2.090 4.668-4.668 4.668c-0 0-0 0-0 0h-1.333v-2.667h1.333c1.105-0 2-0.895 2-2s-0.895-2-2-2c-0.966 0-1.772 0.685-1.959 1.595l-0.002 0.013-2.616-0.524z" fill="rgba(16,16,16,1)"></path>
+    </g>
+  </svg>

+ 0 - 13
src/icons/svg/games.svg

@@ -1,13 +0,0 @@
-<?xml version="1.0" standalone="no"?>
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1750410306045"
-  class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="2380"
-  xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200">
-  <path
-    d="M917.4 507c-27.8-98.4-66-189.8-79.3-214.7-16.8-31.4-39.9-55.5-68.7-71.5-29.8-16.6-66.7-25.1-109.6-25.1H364c-42.9 0-79.8 8.4-109.6 25.1-28.7 16-51.8 40.1-68.7 71.5-13.4 24.9-51.5 116.3-79.3 214.7-37.1 131.4-42.1 224.8-14.7 277.7 15.2 29.3 40.4 47 73.1 51.1 13.5 1.7 26 2.5 37.7 2.5 87.6 0 127.7-44.2 163.5-83.8 21.2-23.4 41.3-45.6 70.9-57.9h166.3c29.4 12.3 46.5 33.8 66.1 58.5 18 22.7 36.7 46.1 65.9 62.6 32.8 18.5 73.3 24.5 123.9 18.1 32.7-4.1 57.9-21.8 73.1-51.1 27.3-52.9 22.3-146.3-14.8-277.7z m-29.7 254.8c-7.7 14.8-18.4 22.4-34.9 24.4-11.4 1.4-21.8 2.1-31.3 2.1-61.9 0-85-29-113.1-64.4-22-27.6-46.9-59-91.7-75.8-2.8-1.1-5.8-1.6-8.8-1.6H432.1c-3 0-6 0.5-8.8 1.6-43.2 16.2-70.4 46.3-94.4 72.8-38.7 42.7-69.2 76.4-158 65.3-16.5-2.1-27.2-9.6-34.9-24.4-20.7-40.1-14.2-125.7 18.4-241.1 27.3-96.7 64.4-184.4 75.3-204.7 25.6-47.9 68.3-70.1 134.2-70.1h295.8c65.9 0 108.6 22.3 134.2 70.1 10.9 20.3 48 108 75.3 204.7 32.7 115.4 39.2 201 18.5 241.1z"
-    fill="currentColor" p-id="2381"></path>
-  <path
-    d="M450 444.9h-70.3v-70.5c0-11-9-20-20-20s-20 9-20 20v70.5H270c-11 0-20 9-20 20s9 20 20 20h69.7v69.5c0 11 9 20 20 20s20-9 20-20v-69.5H450c11 0 20-9 20-20s-9-20-20-20z"
-    fill="currentColor" p-id="2382"></path>
-  <path d="M640.5 427m-41.9 0a41.9 41.9 0 1 0 83.8 0 41.9 41.9 0 1 0-83.8 0Z" fill="currentColor" p-id="2383"></path>
-  <path d="M739.1 525.6m-41.9 0a41.9 41.9 0 1 0 83.8 0 41.9 41.9 0 1 0-83.8 0Z" fill="currentColor" p-id="2384"></path>
-</svg>

+ 0 - 1
src/icons/svg/three-model.svg

@@ -1 +0,0 @@
-<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1752147497625" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="6476" xmlns:xlink="http://www.w3.org/1999/xlink" width="16" height="16"><path d="M177.493333 389.36381a48.761905 48.761905 0 0 1 24.380953 6.534095l249.222095 143.896381a73.142857 73.142857 0 0 1 36.571429 63.341714v287.792762a48.761905 48.761905 0 0 1-45.104762 48.615619l-3.657143 0.146286a48.761905 48.761905 0 0 1-24.380953-6.534096L165.302857 789.26019a73.142857 73.142857 0 0 1-36.571428-63.341714V438.125714a48.761905 48.761905 0 0 1 45.104761-48.64l3.657143-0.121904z m669.135238 0a48.761905 48.761905 0 0 1 48.615619 45.104761l0.146286 3.657143v287.792762a73.142857 73.142857 0 0 1-32.426666 60.757334l-4.144762 2.58438-249.246477 143.896381a48.761905 48.761905 0 0 1-20.114285 6.339048l-4.266667 0.195048a48.761905 48.761905 0 0 1-48.615619-45.104762l-0.146286-3.657143V603.136a73.142857 73.142857 0 0 1 32.426667-60.757333l4.144762-2.584381 249.246476-143.896381a48.761905 48.761905 0 0 1 20.114286-6.339048l4.266666-0.195047zM201.849905 480.353524l0.024381 245.564952 212.650666 122.758095V603.136L201.874286 480.353524z m620.373333 0l-210.553905 121.539047-2.096762 1.243429V848.700952l210.578286-121.514666 2.096762-1.243429-0.024381-245.564952zM544.085333 122.441143l4.608 2.438095 249.222096 143.896381a48.761905 48.761905 0 0 1 3.242666 82.407619l-3.242666 2.048-249.222096 143.896381a73.142857 73.142857 0 0 1-68.559238 2.438095l-4.583619-2.438095-249.246476-143.896381a48.761905 48.761905 0 0 1-3.218286-82.407619l3.218286-2.048 249.246476-143.896381a73.142857 73.142857 0 0 1 68.534857-2.438095zM512.048762 188.220952l-212.601905 122.758096 211.748572 122.270476 0.950857 0.487619 212.626285-122.758095-211.309714-122.002286-1.414095-0.75581z" p-id="6477"></path></svg>

+ 0 - 1
src/icons/svg/write_base.svg

@@ -1 +0,0 @@
-<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1747712026273" class="icon" viewBox="0 0 1147 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="2531" xmlns:xlink="http://www.w3.org/1999/xlink" width="224.0234375" height="200"><path d="M62 902.996h1007.998v56.124h-1007.998v-56.124zM62 864.245l264.137-74.992-188.667-187.513-75.47 262.505zM767.475 350.607l-188.67-187.516-415.077 412.522 188.667 187.497 415.080-412.504zM855.163 193.093l-117.923-117.189c-19.537-19.42-52.267-18.363-73.108 2.342l-56.61 56.243 188.67 187.515 56.606-56.26c20.841-20.707 21.899-53.227 2.364-72.651z" p-id="2532"></path></svg>

+ 35 - 2
src/views/book/courseware/create/components/question/article/Article.vue

@@ -4,7 +4,10 @@
       <!-- eslint-disable max-len -->
       <!-- eslint-disable max-len -->
       <div v-loading="loading" class="article-wrapper">
       <div v-loading="loading" class="article-wrapper">
         <el-input v-model="data.content" placeholder="输入" type="textarea" />
         <el-input v-model="data.content" placeholder="输入" type="textarea" />
-        <SelectUpload label="课文音频" type="audio" width="500px" @uploadSuccess="uploadAudioSuccess" />
+        <div class="btn-box">
+          <SelectUpload label="课文音频" type="audio" width="500px" @uploadSuccess="uploadAudioSuccess" />
+          <el-button @click="handleAutoAudio" :loading="autoLoading">自动生成音频</el-button>
+        </div>
         <div v-if="data.mp3_list.length > 0" class="upload-file">
         <div v-if="data.mp3_list.length > 0" class="upload-file">
           <div class="file-name">
           <div class="file-name">
             <span>
             <span>
@@ -104,6 +107,7 @@ import Notes from './Notes.vue';
 import CheckPic from './CheckPic.vue';
 import CheckPic from './CheckPic.vue';
 
 
 import { getArticleData } from '@/views/book/courseware/data/article';
 import { getArticleData } from '@/views/book/courseware/data/article';
+import { TextToAudioFile } from '@/api/app';
 import {
 import {
   segSentences,
   segSentences,
   BatchSegContent,
   BatchSegContent,
@@ -141,6 +145,7 @@ export default {
       editWordsFlag: false,
       editWordsFlag: false,
       editWordIndex: 0,
       editWordIndex: 0,
       multilingualText: '',
       multilingualText: '',
+      autoLoading: false,
     };
     };
   },
   },
   watch: {
   watch: {
@@ -602,6 +607,34 @@ export default {
         this.$message.warning('请先生成分词');
         this.$message.warning('请先生成分词');
       }
       }
     },
     },
+    // 自动生成音频
+    handleAutoAudio() {
+      this.autoLoading = true;
+      TextToAudioFile({
+        text: this.data.content,
+        voice_type: this.data.property.voice_type,
+        emotion: this.data.property.emotion,
+        speed_ratio: this.data.property.speed_ratio,
+      })
+        .then(({ status, file_id, file_url }) => {
+          this.autoLoading = false;
+          if (status === 1) {
+            this.data.mp3_list = [
+              {
+                name: '自动生成课文音频.mp3',
+                media_duration: 0,
+                temporary_url: file_url,
+                url: file_id,
+                file_id,
+              },
+            ];
+            this.data.file_id_list = [file_id];
+          }
+        })
+        .catch(() => {
+          this.autoLoading = false;
+        });
+    },
   },
   },
 };
 };
 </script>
 </script>
@@ -646,7 +679,7 @@ export default {
 .btn-box {
 .btn-box {
   display: flex;
   display: flex;
   flex-flow: wrap;
   flex-flow: wrap;
-  gap: 16px;
+  gap: 10px;
 
 
   a {
   a {
     padding: 5px 16px;
     padding: 5px 16px;

+ 41 - 1
src/views/book/courseware/create/components/question/article/ArticleSetting.vue

@@ -68,6 +68,26 @@
       <el-form-item label="内容高度">
       <el-form-item label="内容高度">
         <el-input v-model="property.content_height" type="number" />
         <el-input v-model="property.content_height" type="number" />
       </el-form-item>
       </el-form-item>
+      <el-form-item label="音色">
+        <el-select v-model="property.voice_type" placeholder="请选择">
+          <el-option
+            v-for="{ voice_type, name } in voice_type_list"
+            :key="voice_type"
+            :label="name"
+            :value="voice_type"
+          />
+        </el-select>
+      </el-form-item>
+      <el-form-item label="风格情感">
+        <el-select v-model="property.emotion">
+          <el-option v-for="{ emotion, name } in emotion_list" :key="emotion" :label="name" :value="emotion" />
+        </el-select>
+      </el-form-item>
+      <el-form-item label="语速">
+        <el-select v-model="property.speed_ratio">
+          <el-option v-for="{ value, label } in speedRatioList" :key="value" :label="label" :value="value" />
+        </el-select>
+      </el-form-item>
     </el-form>
     </el-form>
   </div>
   </div>
 </template>
 </template>
@@ -83,6 +103,8 @@ import {
   pinyinPositionList,
   pinyinPositionList,
   positionList,
   positionList,
 } from '@/views/book/courseware/data/article';
 } from '@/views/book/courseware/data/article';
+import { GetTextToAudioConfParamList } from '@/api/app';
+import { speedRatioList } from '@/views/book/courseware/data/common';
 
 
 export default {
 export default {
   name: 'ArticleSetting',
   name: 'ArticleSetting',
@@ -95,9 +117,27 @@ export default {
       pinyinPositionList,
       pinyinPositionList,
       multilingualList,
       multilingualList,
       positionList,
       positionList,
+      voice_type_list: [],
+      emotion_list: [],
+      speedRatioList,
     };
     };
   },
   },
-  methods: {},
+  methods: {
+    // 得到文本转音频的配置参数列表
+    getTextToAudioConfParamList() {
+      GetTextToAudioConfParamList()
+        .then(({ status, voice_type_list, emotion_list }) => {
+          if (status === 1) {
+            this.voice_type_list = voice_type_list;
+            this.emotion_list = emotion_list;
+          }
+        })
+        .catch(() => {});
+    },
+  },
+  created() {
+    this.getTextToAudioConfParamList();
+  },
 };
 };
 </script>
 </script>
 
 

+ 8 - 0
src/views/book/courseware/create/components/question/article/NewWord.vue

@@ -270,6 +270,11 @@
             <el-option v-for="{ emotion, name } in emotion_list" :key="emotion" :label="name" :value="emotion" />
             <el-option v-for="{ emotion, name } in emotion_list" :key="emotion" :label="name" :value="emotion" />
           </el-select>
           </el-select>
         </el-form-item>
         </el-form-item>
+        <el-form-item label="语速">
+          <el-select v-model="data.property.speed_ratio">
+            <el-option v-for="{ value, label } in speedRatioList" :key="value" :label="label" :value="value" />
+          </el-select>
+        </el-form-item>
       </template>
       </template>
 
 
       <el-form-item label="拼音位置">
       <el-form-item label="拼音位置">
@@ -309,6 +314,7 @@ import {
   pinyinPositionLists,
   pinyinPositionLists,
 } from '@/views/book/courseware/data/article';
 } from '@/views/book/courseware/data/article';
 import cnchar from 'cnchar';
 import cnchar from 'cnchar';
+import { speedRatioList } from '@/views/book/courseware/data/common';
 
 
 export default {
 export default {
   name: 'NewWordPage',
   name: 'NewWordPage',
@@ -335,6 +341,7 @@ export default {
       subtitleList: [],
       subtitleList: [],
       voice_type_list: [],
       voice_type_list: [],
       emotion_list: [],
       emotion_list: [],
+      speedRatioList,
     };
     };
   },
   },
   methods: {
   methods: {
@@ -493,6 +500,7 @@ export default {
         text: this.data.new_word_list[index].new_word.replace(/<[^>]+>/g, ''),
         text: this.data.new_word_list[index].new_word.replace(/<[^>]+>/g, ''),
         voice_type: this.data.property.voice_type,
         voice_type: this.data.property.voice_type,
         emotion: this.data.property.emotion,
         emotion: this.data.property.emotion,
+        speed_ratio: this.data.property.speed_ratio,
       })
       })
         .then(({ status, file_id }) => {
         .then(({ status, file_id }) => {
           if (status === 1) {
           if (status === 1) {

+ 1 - 0
src/views/book/courseware/create/components/question/character/Character.vue

@@ -167,6 +167,7 @@ export default {
         text: con.replace(/<[^>]+>/g, ''),
         text: con.replace(/<[^>]+>/g, ''),
         voice_type: this.data.property.voice_type,
         voice_type: this.data.property.voice_type,
         emotion: this.data.property.emotion,
         emotion: this.data.property.emotion,
+        speed_ratio: this.data.property.speed_ratio,
       })
       })
         .then(({ status, file_id, file_url }) => {
         .then(({ status, file_id, file_url }) => {
           if (status === 1) {
           if (status === 1) {

+ 7 - 0
src/views/book/courseware/create/components/question/character/CharacterSetting.vue

@@ -80,6 +80,11 @@
             <el-option v-for="{ emotion, name } in emotion_list" :key="emotion" :label="name" :value="emotion" />
             <el-option v-for="{ emotion, name } in emotion_list" :key="emotion" :label="name" :value="emotion" />
           </el-select>
           </el-select>
         </el-form-item>
         </el-form-item>
+        <el-form-item label="语速">
+          <el-select v-model="property.speed_ratio">
+            <el-option v-for="{ value, label } in speedRatioList" :key="value" :label="label" :value="value" />
+          </el-select>
+        </el-form-item>
       </template>
       </template>
     </el-form>
     </el-form>
   </div>
   </div>
@@ -97,6 +102,7 @@ import {
   frameList,
   frameList,
 } from '@/views/book/courseware/data/character';
 } from '@/views/book/courseware/data/character';
 import { GetTextToAudioConfParamList } from '@/api/app';
 import { GetTextToAudioConfParamList } from '@/api/app';
+import { speedRatioList } from '@/views/book/courseware/data/common';
 
 
 export default {
 export default {
   name: 'CharacterSetting',
   name: 'CharacterSetting',
@@ -111,6 +117,7 @@ export default {
       frameList,
       frameList,
       voice_type_list: [],
       voice_type_list: [],
       emotion_list: [],
       emotion_list: [],
+      speedRatioList,
     };
     };
   },
   },
   created() {
   created() {

+ 40 - 4
src/views/book/courseware/create/components/question/dialogue_article/Article.vue

@@ -128,8 +128,10 @@
           <el-input v-model="noticeInput" placeholder="输入语境" style="width: 500px" />
           <el-input v-model="noticeInput" placeholder="输入语境" style="width: 500px" />
           <el-button type="primary" size="small" @click="handleNotice">插入语境</el-button>
           <el-button type="primary" size="small" @click="handleNotice">插入语境</el-button>
         </div>
         </div>
-
-        <SelectUpload label="课文音频" type="audio" width="500px" @uploadSuccess="uploadAudioSuccess" />
+        <div class="btn-box">
+          <SelectUpload label="课文音频" type="audio" width="500px" @uploadSuccess="uploadAudioSuccess" />
+          <el-button @click="handleAutoAudio" :loading="autoLoading">自动生成音频</el-button>
+        </div>
         <div v-if="data.mp3_list.length > 0" class="upload-file">
         <div v-if="data.mp3_list.length > 0" class="upload-file">
           <div class="file-name">
           <div class="file-name">
             <span>
             <span>
@@ -301,7 +303,7 @@ import NewWord from '../article/NewWord.vue';
 import Notes from '../article/Notes.vue';
 import Notes from '../article/Notes.vue';
 
 
 import { getArticleData } from '@/views/book/courseware/data/dialogueArticle';
 import { getArticleData } from '@/views/book/courseware/data/dialogueArticle';
-import { fileUpload } from '@/api/app';
+import { fileUpload, TextToAudioFile } from '@/api/app';
 import {
 import {
   segSentences,
   segSentences,
   BatchSegContent,
   BatchSegContent,
@@ -343,6 +345,7 @@ export default {
       remark: null,
       remark: null,
       paraIndex: 0,
       paraIndex: 0,
       multilingualText: '',
       multilingualText: '',
+      autoLoading: false,
     };
     };
   },
   },
   watch: {
   watch: {
@@ -912,6 +915,39 @@ export default {
         this.$message.warning('请先生成分词');
         this.$message.warning('请先生成分词');
       }
       }
     },
     },
+    // 自动生成音频
+    handleAutoAudio() {
+      this.autoLoading = true;
+      let text = '';
+      this.data.detail.forEach((item) => {
+        if (item.type === 'text') {
+          text += item.sentences.join('');
+        }
+      });
+      TextToAudioFile({
+        text: text,
+        voice_type: this.data.property.voice_type,
+        emotion: this.data.property.emotion,
+        speed_ratio: this.data.property.speed_ratio,
+      })
+        .then(({ status, file_id, file_url }) => {
+          this.autoLoading = false;
+          if (status === 1) {
+            this.data.mp3_list = [
+              {
+                name: '自动生成课文音频.mp3',
+                media_duration: 0,
+                temporary_url: file_url,
+                url: file_id,
+                file_id,
+              },
+            ];
+          }
+        })
+        .catch(() => {
+          this.autoLoading = false;
+        });
+    },
   },
   },
 };
 };
 </script>
 </script>
@@ -1082,7 +1118,7 @@ export default {
 .btn-box {
 .btn-box {
   display: flex;
   display: flex;
   flex-flow: wrap;
   flex-flow: wrap;
-  gap: 16px;
+  gap: 10px;
 
 
   a {
   a {
     padding: 5px 16px;
     padding: 5px 16px;

+ 39 - 0
src/views/book/courseware/create/components/question/dialogue_article/ArticleSetting.vue

@@ -133,6 +133,26 @@
       <el-form-item label="内容高度">
       <el-form-item label="内容高度">
         <el-input v-model="property.content_height" type="number" />
         <el-input v-model="property.content_height" type="number" />
       </el-form-item>
       </el-form-item>
+      <el-form-item label="音色">
+        <el-select v-model="property.voice_type" placeholder="请选择">
+          <el-option
+            v-for="{ voice_type, name } in voice_type_list"
+            :key="voice_type"
+            :label="name"
+            :value="voice_type"
+          />
+        </el-select>
+      </el-form-item>
+      <el-form-item label="风格情感">
+        <el-select v-model="property.emotion">
+          <el-option v-for="{ emotion, name } in emotion_list" :key="emotion" :label="name" :value="emotion" />
+        </el-select>
+      </el-form-item>
+      <el-form-item label="语速">
+        <el-select v-model="property.speed_ratio">
+          <el-option v-for="{ value, label } in speedRatioList" :key="value" :label="label" :value="value" />
+        </el-select>
+      </el-form-item>
     </el-form>
     </el-form>
   </div>
   </div>
 </template>
 </template>
@@ -142,6 +162,7 @@ import SettingMixin from '@/views/book/courseware/create/components/common/Setti
 import { getToken } from '@/utils/auth';
 import { getToken } from '@/utils/auth';
 import { BatchSegContent } from '@/api/article';
 import { BatchSegContent } from '@/api/article';
 const Base64 = require('js-base64').Base64;
 const Base64 = require('js-base64').Base64;
+import { speedRatioList } from '@/views/book/courseware/data/common';
 
 
 import {
 import {
   getArticleProperty,
   getArticleProperty,
@@ -153,6 +174,7 @@ import {
   multilingualList,
   multilingualList,
   pinyinPositionList,
   pinyinPositionList,
 } from '@/views/book/courseware/data/dialogueArticle';
 } from '@/views/book/courseware/data/dialogueArticle';
+import { GetTextToAudioConfParamList } from '@/api/app';
 import cnchar from 'cnchar';
 import cnchar from 'cnchar';
 
 
 export default {
 export default {
@@ -167,6 +189,9 @@ export default {
       roleTypeList,
       roleTypeList,
       multilingualList,
       multilingualList,
       pinyinPositionList,
       pinyinPositionList,
+      voice_type_list: [],
+      emotion_list: [],
+      speedRatioList,
     };
     };
   },
   },
   computed: {
   computed: {
@@ -254,6 +279,20 @@ export default {
         this.property.role_list[i].img_list.push(obj);
         this.property.role_list[i].img_list.push(obj);
       }
       }
     },
     },
+    // 得到文本转音频的配置参数列表
+    getTextToAudioConfParamList() {
+      GetTextToAudioConfParamList()
+        .then(({ status, voice_type_list, emotion_list }) => {
+          if (status === 1) {
+            this.voice_type_list = voice_type_list;
+            this.emotion_list = emotion_list;
+          }
+        })
+        .catch(() => {});
+    },
+  },
+  created() {
+    this.getTextToAudioConfParamList();
   },
   },
 };
 };
 </script>
 </script>

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

@@ -265,6 +265,7 @@ export default {
         text: this.data.content.replace(/<[^>]+>/g, ''),
         text: this.data.content.replace(/<[^>]+>/g, ''),
         voice_type: this.data.property.voice_type,
         voice_type: this.data.property.voice_type,
         emotion: this.data.property.emotion,
         emotion: this.data.property.emotion,
+        speed_ratio: this.data.property.speed_ratio,
       })
       })
         .then(({ status, file_id }) => {
         .then(({ status, file_id }) => {
           if (status === 1) {
           if (status === 1) {

+ 7 - 0
src/views/book/courseware/create/components/question/fill/FillSetting.vue

@@ -47,6 +47,11 @@
             <el-option v-for="{ emotion, name } in emotion_list" :key="emotion" :label="name" :value="emotion" />
             <el-option v-for="{ emotion, name } in emotion_list" :key="emotion" :label="name" :value="emotion" />
           </el-select>
           </el-select>
         </el-form-item>
         </el-form-item>
+        <el-form-item label="语速">
+          <el-select v-model="property.speed_ratio">
+            <el-option v-for="{ value, label } in speedRatioList" :key="value" :label="label" :value="value" />
+          </el-select>
+        </el-form-item>
       </template>
       </template>
       <el-form-item label="填空字体">
       <el-form-item label="填空字体">
         <el-select v-model="property.fill_font" placeholder="请选择">
         <el-select v-model="property.fill_font" placeholder="请选择">
@@ -103,6 +108,7 @@ import {
 } from '@/views/book/courseware/data/fill';
 } from '@/views/book/courseware/data/fill';
 
 
 import { GetTextToAudioConfParamList } from '@/api/app';
 import { GetTextToAudioConfParamList } from '@/api/app';
+import { speedRatioList } from '@/views/book/courseware/data/common';
 
 
 export default {
 export default {
   name: 'FillSetting',
   name: 'FillSetting',
@@ -118,6 +124,7 @@ export default {
       fillTypeList,
       fillTypeList,
       voice_type_list: [],
       voice_type_list: [],
       emotion_list: [],
       emotion_list: [],
+      speedRatioList,
     };
     };
   },
   },
   created() {
   created() {

+ 1 - 0
src/views/book/courseware/create/components/question/new_word/NewWord.vue

@@ -585,6 +585,7 @@ export default {
         text: this.data.new_word_list[index].new_word.replace(/<[^>]+>/g, ''),
         text: this.data.new_word_list[index].new_word.replace(/<[^>]+>/g, ''),
         voice_type: this.data.property.voice_type,
         voice_type: this.data.property.voice_type,
         emotion: this.data.property.emotion,
         emotion: this.data.property.emotion,
+        speed_ratio: this.data.property.speed_ratio,
       })
       })
         .then(({ status, file_id }) => {
         .then(({ status, file_id }) => {
           if (status === 1) {
           if (status === 1) {

+ 7 - 0
src/views/book/courseware/create/components/question/new_word/NewWordSetting.vue

@@ -37,6 +37,11 @@
             <el-option v-for="{ emotion, name } in emotion_list" :key="emotion" :label="name" :value="emotion" />
             <el-option v-for="{ emotion, name } in emotion_list" :key="emotion" :label="name" :value="emotion" />
           </el-select>
           </el-select>
         </el-form-item>
         </el-form-item>
+        <el-form-item label="语速">
+          <el-select v-model="property.speed_ratio">
+            <el-option v-for="{ value, label } in speedRatioList" :key="value" :label="label" :value="value" />
+          </el-select>
+        </el-form-item>
       </template>
       </template>
       <el-form-item label="拼音位置">
       <el-form-item label="拼音位置">
         <el-radio-group v-model="property.pinyin_position">
         <el-radio-group v-model="property.pinyin_position">
@@ -61,6 +66,7 @@ import {
   switchOption,
   switchOption,
 } from '@/views/book/courseware/data/newWord';
 } from '@/views/book/courseware/data/newWord';
 import { GetTextToAudioConfParamList } from '@/api/app';
 import { GetTextToAudioConfParamList } from '@/api/app';
+import { speedRatioList } from '@/views/book/courseware/data/common';
 
 
 export default {
 export default {
   name: 'NewWordSetting',
   name: 'NewWordSetting',
@@ -75,6 +81,7 @@ export default {
       switchOption,
       switchOption,
       voice_type_list: [],
       voice_type_list: [],
       emotion_list: [],
       emotion_list: [],
+      speedRatioList,
     };
     };
   },
   },
   created() {
   created() {

+ 1 - 0
src/views/book/courseware/create/components/question/pinyin_base/PinyinBase.vue

@@ -135,6 +135,7 @@ export default {
           text: this.data.character.trim() || this.data.content_hz,
           text: this.data.character.trim() || this.data.content_hz,
           voice_type: this.data.property.voice_type,
           voice_type: this.data.property.voice_type,
           emotion: this.data.property.emotion,
           emotion: this.data.property.emotion,
+          speed_ratio: this.data.property.speed_ratio,
         };
         };
         TextToAudioFile(data)
         TextToAudioFile(data)
           .then(({ status, file_id, file_url }) => {
           .then(({ status, file_id, file_url }) => {

+ 7 - 0
src/views/book/courseware/create/components/question/pinyin_base/PinyinBaseSetting.vue

@@ -45,6 +45,11 @@
             <el-option v-for="{ emotion, name } in emotion_list" :key="emotion" :label="name" :value="emotion" />
             <el-option v-for="{ emotion, name } in emotion_list" :key="emotion" :label="name" :value="emotion" />
           </el-select>
           </el-select>
         </el-form-item>
         </el-form-item>
+        <el-form-item label="语速">
+          <el-select v-model="property.speed_ratio">
+            <el-option v-for="{ value, label } in speedRatioList" :key="value" :label="label" :value="value" />
+          </el-select>
+        </el-form-item>
       </template>
       </template>
       <el-form-item label="读音位置">
       <el-form-item label="读音位置">
         <el-radio-group v-model="property.audio_position">
         <el-radio-group v-model="property.audio_position">
@@ -79,6 +84,7 @@ import {
 } from '@/views/book/courseware/data/pinyinBase';
 } from '@/views/book/courseware/data/pinyinBase';
 
 
 import { GetTextToAudioConfParamList } from '@/api/app';
 import { GetTextToAudioConfParamList } from '@/api/app';
+import { speedRatioList } from '@/views/book/courseware/data/common';
 
 
 export default {
 export default {
   name: 'PinyinBaseSetting',
   name: 'PinyinBaseSetting',
@@ -94,6 +100,7 @@ export default {
       markList,
       markList,
       voice_type_list: [],
       voice_type_list: [],
       emotion_list: [],
       emotion_list: [],
+      speedRatioList,
     };
     };
   },
   },
   created() {
   created() {

+ 3 - 0
src/views/book/courseware/data/article.js

@@ -81,6 +81,7 @@ export function getArticleProperty() {
     content_height: '', // 内容高度
     content_height: '', // 内容高度
     voice_type: '', // 音色
     voice_type: '', // 音色
     emotion: '', // 风格,情感
     emotion: '', // 风格,情感
+    speed_ratio: '', // 语速
 
 
     ...commonComponentProperty,
     ...commonComponentProperty,
   };
   };
@@ -105,6 +106,7 @@ export function getArticleData() {
         is_has_infor: inforList[0].value,
         is_has_infor: inforList[0].value,
         voice_type: '', // 音色
         voice_type: '', // 音色
         emotion: '', // 风格,情感
         emotion: '', // 风格,情感
+        speed_ratio: '', // 语速
       },
       },
       new_word_list: [],
       new_word_list: [],
       lrc_arr: [], // lrc 文件解析后的数据
       lrc_arr: [], // lrc 文件解析后的数据
@@ -157,6 +159,7 @@ export function getArticleData() {
         is_has_infor: inforList[0].value,
         is_has_infor: inforList[0].value,
         voice_type: '', // 音色
         voice_type: '', // 音色
         emotion: '', // 风格,情感
         emotion: '', // 风格,情感
+        speed_ratio: '', // 语速
       },
       },
       new_word_list: [],
       new_word_list: [],
       lrc_arr: [], // lrc 文件解析后的数据
       lrc_arr: [], // lrc 文件解析后的数据

+ 156 - 150
src/views/book/courseware/data/bookType.js

@@ -117,7 +117,7 @@ import CharacterStructurePreview from '../preview/components/character_structure
 export const bookTypeOption = [
 export const bookTypeOption = [
   {
   {
     value: 'base',
     value: 'base',
-    label: '基础',
+    label: '基础组件',
     children: [
     children: [
       // {
       // {
       //   value: 'stem',
       //   value: 'stem',
@@ -137,14 +137,6 @@ export const bookTypeOption = [
         preview: DescribePreview,
         preview: DescribePreview,
       },
       },
       {
       {
-        value: 'label',
-        label: '标签',
-        icon: 'label',
-        component: LabelPage,
-        set: LabelSetting,
-        preview: LabelPreview,
-      },
-      {
         value: 'audio',
         value: 'audio',
         label: '音频',
         label: '音频',
         icon: 'audio',
         icon: 'audio',
@@ -153,6 +145,14 @@ export const bookTypeOption = [
         preview: AudioPreview,
         preview: AudioPreview,
       },
       },
       {
       {
+        value: 'picture',
+        label: '图片',
+        icon: 'picture',
+        component: PicturePage,
+        set: PictureSetting,
+        preview: PicturePreview,
+      },
+      {
         value: 'video',
         value: 'video',
         label: '视频',
         label: '视频',
         icon: 'video',
         icon: 'video',
@@ -161,12 +161,28 @@ export const bookTypeOption = [
         preview: VideoPreview,
         preview: VideoPreview,
       },
       },
       {
       {
-        value: 'picture',
-        label: '图片',
-        icon: 'picture',
-        component: PicturePage,
-        set: PictureSetting,
-        preview: PicturePreview,
+        value: 'input',
+        label: '输入',
+        icon: 'input',
+        component: Input,
+        set: InputSetting,
+        preview: InputPreview,
+      },
+      {
+        value: 'write_base',
+        label: '写字',
+        icon: 'write_base',
+        component: WriteBase,
+        set: WriteBaseSetting,
+        preview: WriteBasePreview,
+      },
+      {
+        value: 'record_input',
+        label: '录音',
+        icon: 'record_input',
+        component: RecordInput,
+        set: RecordInputSetting,
+        preview: RecordInputPreview,
       },
       },
       // {
       // {
       //   value: 'upload_control',
       //   value: 'upload_control',
@@ -185,12 +201,44 @@ export const bookTypeOption = [
         preview: UploadPreviewPreview,
         preview: UploadPreviewPreview,
       },
       },
       {
       {
-        value: 'divider',
-        label: '分隔',
-        icon: 'spacing',
-        component: DividerPage,
-        set: DividerSetting,
-        preview: DividerPreview,
+        value: 'drawing',
+        label: '趣味画板',
+        icon: 'drawing',
+        component: Drawing,
+        set: DrawingSetting,
+        preview: DrawingPreview,
+      },
+      {
+        value: 'image_text',
+        label: '图文融合',
+        icon: 'image_text',
+        component: ImageText,
+        set: ImageTextSetting,
+        preview: ImageTextPreview,
+      },
+      {
+        value: 'video_interaction',
+        label: '交互视频',
+        icon: 'video_interaction',
+        component: VideoInteraction,
+        set: VideoInteractionSetting,
+        preview: VideoInteractionPreview,
+      },
+      {
+        value: '3DModel',
+        label: '3D模型',
+        icon: 'three-model',
+        component: ThreeModel,
+        set: ThreeModelSetting,
+        preview: ThreeModelPreview,
+      },
+      {
+        value: 'h5_games',
+        label: 'H5游戏',
+        icon: 'games',
+        component: H5Games,
+        set: H5GamesSetting,
+        preview: H5GamesPreview,
       },
       },
       // {
       // {
       //   value: 'spacing',
       //   value: 'spacing',
@@ -209,111 +257,125 @@ export const bookTypeOption = [
       //   preview: CharacterBasePreview,
       //   preview: CharacterBasePreview,
       // },
       // },
       {
       {
-        value: 'write_base',
-        label: '写字',
-        icon: 'write_base',
-        component: WriteBase,
-        set: WriteBaseSetting,
-        preview: WriteBasePreview,
-      },
-      {
-        value: 'h5_games',
-        label: 'H5游戏',
-        icon: 'games',
-        component: H5Games,
-        set: H5GamesSetting,
-        preview: H5GamesPreview,
+        value: 'label',
+        label: '标签',
+        icon: 'label',
+        component: LabelPage,
+        set: LabelSetting,
+        preview: LabelPreview,
       },
       },
       {
       {
-        value: '3DModel',
-        label: '3D模型',
-        icon: 'three-model',
-        component: ThreeModel,
-        set: ThreeModelSetting,
-        preview: ThreeModelPreview,
+        value: 'divider',
+        label: '分隔',
+        icon: 'spacing',
+        component: DividerPage,
+        set: DividerSetting,
+        preview: DividerPreview,
       },
       },
     ],
     ],
   },
   },
   {
   {
-    value: 'question',
-    label: '题型组件',
+    value: 'teaching',
+    label: '教学组件',
     children: [
     children: [
       {
       {
-        value: 'article',
-        label: '文章',
-        icon: '',
-        component: Article,
-        set: ArticleSetting,
-        preview: ArticlePreview,
+        value: 'voice_matrix',
+        label: '语音矩阵',
+        icon: 'voice_matrix',
+        component: VoiceMatrix,
+        set: VoiceMatrixSetting,
+        preview: VoiceMatrixPreview,
+      },
+      {
+        value: 'pinyin_base',
+        label: '拼音',
+        icon: 'pinyin_base',
+        component: PinyinBase,
+        set: PinyinBaseSetting,
+        preview: PinyinBasePreview,
+      },
+      {
+        value: 'character',
+        label: '汉字',
+        icon: 'character',
+        component: Character,
+        set: CharacterSetting,
+        preview: CharacterPreview,
+      },
+      {
+        value: 'new_word',
+        label: '生词表',
+        icon: 'new_word',
+        component: NewWord,
+        set: NewWordSetting,
+        preview: NewWordPreview,
       },
       },
       {
       {
         value: 'dialogue_article',
         value: 'dialogue_article',
-        label: '对话课文',
-        icon: '',
+        label: '对话课文',
+        icon: 'dialogue_article',
         component: DialogueArticlePage,
         component: DialogueArticlePage,
         set: DialogueArticleSetting,
         set: DialogueArticleSetting,
         preview: DialogueArticlePreview,
         preview: DialogueArticlePreview,
       },
       },
       {
       {
+        value: 'article',
+        label: '文章',
+        icon: 'article',
+        component: Article,
+        set: ArticleSetting,
+        preview: ArticlePreview,
+      },
+    ],
+  },
+  {
+    value: 'exercise',
+    label: '练习组件',
+    children: [
+      {
         value: 'select',
         value: 'select',
-        label: '选择',
-        icon: '',
+        label: '选择',
+        icon: 'select',
         component: SelectPage,
         component: SelectPage,
         set: SelectSetting,
         set: SelectSetting,
         preview: SelectPreview,
         preview: SelectPreview,
       },
       },
       {
       {
-        value: 'matching',
-        label: '连线',
-        icon: '',
-        component: MatchingPage,
-        set: MatchingSetting,
-        preview: MatchingPreview,
-      },
-      {
-        value: 'sort',
-        label: '排序',
-        icon: '',
-        component: SortPage,
-        set: SortSetting,
-        preview: SortPreview,
-      },
-      {
-        value: 'voice_matrix',
-        label: '语音矩阵',
-        icon: '',
-        component: VoiceMatrix,
-        set: VoiceMatrixSetting,
-        preview: VoiceMatrixPreview,
+        value: 'judge',
+        label: '判断题',
+        icon: 'judge',
+        component: Judge,
+        set: JudgeSetting,
+        preview: JudgePreview,
       },
       },
       {
       {
         value: 'fill',
         value: 'fill',
-        label: '填空',
-        icon: '',
+        label: '填空题',
+        icon: 'fill',
         component: FillPage,
         component: FillPage,
         set: FillSetting,
         set: FillSetting,
         preview: FillPreview,
         preview: FillPreview,
       },
       },
       {
       {
-        value: 'record_input',
-        label: '录音',
-        icon: '',
-        component: RecordInput,
-        set: RecordInputSetting,
-        preview: RecordInputPreview,
+        value: 'matching',
+        label: '连线题',
+        icon: 'matching',
+        component: MatchingPage,
+        set: MatchingSetting,
+        preview: MatchingPreview,
       },
       },
       {
       {
-        value: 'new_word',
-        label: '生词',
-        icon: '',
-        component: NewWord,
-        set: NewWordSetting,
-        preview: NewWordPreview,
+        value: 'sort',
+        label: '排序题',
+        icon: 'sort',
+        component: SortPage,
+        set: SortSetting,
+        preview: SortPreview,
       },
       },
       {
       {
         value: 'notes',
         value: 'notes',
         label: '注释',
         label: '注释',
-        icon: '',
+        icon: 'notes',
         component: Notes,
         component: Notes,
         set: NotesSetting,
         set: NotesSetting,
         preview: NotesPreview,
         preview: NotesPreview,
@@ -327,17 +389,9 @@ export const bookTypeOption = [
       //   preview: OtherWordPreview,
       //   preview: OtherWordPreview,
       // },
       // },
       {
       {
-        value: 'character',
-        label: '汉字',
-        icon: '',
-        component: Character,
-        set: CharacterSetting,
-        preview: CharacterPreview,
-      },
-      {
         value: 'newWord_template',
         value: 'newWord_template',
         label: '生字',
         label: '生字',
-        icon: '',
+        icon: 'newWord_template',
         component: NewWordTemplate,
         component: NewWordTemplate,
         set: NewWordTemplateSetting,
         set: NewWordTemplateSetting,
         preview: NewWordTemplatePreview,
         preview: NewWordTemplatePreview,
@@ -345,7 +399,7 @@ export const bookTypeOption = [
       {
       {
         value: 'character_structure',
         value: 'character_structure',
         label: '汉字结构',
         label: '汉字结构',
-        icon: '',
+        icon: 'character_structure',
         component: CharacterStructure,
         component: CharacterStructure,
         set: CharacterStructureSetting,
         set: CharacterStructureSetting,
         preview: CharacterStructurePreview,
         preview: CharacterStructurePreview,
@@ -367,61 +421,13 @@ export const bookTypeOption = [
       //   preview: MathPreview,
       //   preview: MathPreview,
       // },
       // },
       {
       {
-        value: 'input',
-        label: '输入框',
-        icon: '',
-        component: Input,
-        set: InputSetting,
-        preview: InputPreview,
-      },
-      {
-        value: 'judge',
-        label: '判断',
-        icon: '',
-        component: Judge,
-        set: JudgeSetting,
-        preview: JudgePreview,
-      },
-      {
-        value: 'image_text',
-        label: '图片文本融合',
-        icon: '',
-        component: ImageText,
-        set: ImageTextSetting,
-        preview: ImageTextPreview,
-      },
-      {
         value: 'table',
         value: 'table',
-        label: '表格',
-        icon: '',
+        label: '表格题',
+        icon: 'table',
         component: Table,
         component: Table,
         set: TableSetting,
         set: TableSetting,
         preview: TablePreview,
         preview: TablePreview,
       },
       },
-      {
-        value: 'pinyin_base',
-        label: '拼音',
-        icon: '',
-        component: PinyinBase,
-        set: PinyinBaseSetting,
-        preview: PinyinBasePreview,
-      },
-      {
-        value: 'video_interaction',
-        label: '视频交互',
-        icon: '',
-        component: VideoInteraction,
-        set: VideoInteractionSetting,
-        preview: VideoInteractionPreview,
-      },
-      {
-        value: 'drawing',
-        label: '画板',
-        icon: '',
-        component: Drawing,
-        set: DrawingSetting,
-        preview: DrawingPreview,
-      },
     ],
     ],
   },
   },
 ];
 ];

+ 1 - 0
src/views/book/courseware/data/character.js

@@ -88,6 +88,7 @@ export function getCharacterProperty() {
     is_enable_error: showList[0].value,
     is_enable_error: showList[0].value,
     voice_type: '', // 音色
     voice_type: '', // 音色
     emotion: '', // 风格,情感
     emotion: '', // 风格,情感
+    speed_ratio: '', // 语速
     ...commonComponentProperty,
     ...commonComponentProperty,
   };
   };
 }
 }

+ 10 - 0
src/views/book/courseware/data/common.js

@@ -224,3 +224,13 @@ export const reversedComputeOptionMethods = {
   [serialNumberTypeList[2].value]: (i) => i.charCodeAt(0) - 97 + 1, // 小写
   [serialNumberTypeList[2].value]: (i) => i.charCodeAt(0) - 97 + 1, // 小写
   [serialNumberTypeList[3].value]: (i) => i.charCodeAt(0) - 65 + 1,
   [serialNumberTypeList[3].value]: (i) => i.charCodeAt(0) - 65 + 1,
 };
 };
+
+// 生成音频倍速
+export const speedRatioList = [
+  { value: 0.5, label: '0.5' },
+  { value: 0.75, label: '0.75' },
+  { value: 1, label: '1.0' },
+  { value: 1.25, label: '1.25' },
+  { value: 1.5, label: '1.5' },
+  { value: 2, label: '2.0' },
+];

+ 3 - 1
src/views/book/courseware/data/dialogueArticle.js

@@ -121,7 +121,7 @@ export function getArticleProperty() {
     content_height: '', // 内容高度
     content_height: '', // 内容高度
     voice_type: '', // 音色
     voice_type: '', // 音色
     emotion: '', // 风格,情感
     emotion: '', // 风格,情感
-
+    speed_ratio: '', // 语速
     ...commonComponentProperty,
     ...commonComponentProperty,
   };
   };
 }
 }
@@ -145,6 +145,7 @@ export function getArticleData() {
         is_has_infor: inforList[0].value,
         is_has_infor: inforList[0].value,
         voice_type: '', // 音色
         voice_type: '', // 音色
         emotion: '', // 风格,情感
         emotion: '', // 风格,情感
+        speed_ratio: '', // 语速
       },
       },
       new_word_list: [],
       new_word_list: [],
       lrc_arr: [], // lrc 文件解析后的数据
       lrc_arr: [], // lrc 文件解析后的数据
@@ -196,6 +197,7 @@ export function getArticleData() {
         is_has_infor: inforList[0].value,
         is_has_infor: inforList[0].value,
         voice_type: '', // 音色
         voice_type: '', // 音色
         emotion: '', // 风格,情感
         emotion: '', // 风格,情感
+        speed_ratio: '', // 语速
       },
       },
       new_word_list: [],
       new_word_list: [],
       lrc_arr: [], // lrc 文件解析后的数据
       lrc_arr: [], // lrc 文件解析后的数据

+ 1 - 0
src/views/book/courseware/data/fill.js

@@ -64,6 +64,7 @@ export function getFillProperty() {
     is_first_sentence_first_hz_pinyin_first_char_upper_case: displayList[0].value, // 句首大写
     is_first_sentence_first_hz_pinyin_first_char_upper_case: displayList[0].value, // 句首大写
     voice_type: '', // 音色
     voice_type: '', // 音色
     emotion: '', // 风格,情感
     emotion: '', // 风格,情感
+    speed_ratio: '', // 语速
     ...commonComponentProperty,
     ...commonComponentProperty,
   };
   };
 }
 }

+ 1 - 0
src/views/book/courseware/data/newWord.js

@@ -75,6 +75,7 @@ export function getNewWordProperty() {
     is_has_infor: inforList[0].value,
     is_has_infor: inforList[0].value,
     voice_type: '', // 音色
     voice_type: '', // 音色
     emotion: '', // 风格,情感
     emotion: '', // 风格,情感
+    speed_ratio: '', // 语速
     ...commonComponentProperty,
     ...commonComponentProperty,
   };
   };
 }
 }

+ 1 - 0
src/views/book/courseware/data/pinyinBase.js

@@ -76,6 +76,7 @@ export function getPinyinBaseProperty() {
 
 
     voice_type: '', // 音色
     voice_type: '', // 音色
     emotion: '', // 风格,情感
     emotion: '', // 风格,情感
+    speed_ratio: '', // 语速
 
 
     ...commonComponentProperty,
     ...commonComponentProperty,
   };
   };

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

@@ -363,7 +363,6 @@ export default {
       path.setAttribute('stroke-linecap', 'round'); // 设置线段的两端样式
       path.setAttribute('stroke-linecap', 'round'); // 设置线段的两端样式
       const assistColor = this.data?.unified_attrib?.topic_color || '#306eff';
       const assistColor = this.data?.unified_attrib?.topic_color || '#306eff';
       path.setAttribute('stroke', assistColor); // 设置填充颜色
       path.setAttribute('stroke', assistColor); // 设置填充颜色
-      path.setAttribute('transform', `translate(2, 2)`); // 设置偏移量
     },
     },
     /**
     /**
      * 计算当前连线点的位置
      * 计算当前连线点的位置
@@ -523,7 +522,7 @@ export default {
     .list-item {
     .list-item {
       display: flex;
       display: flex;
       column-gap: 8px;
       column-gap: 8px;
-      align-items: center;
+      align-items: stretch;
       padding: 1px;
       padding: 1px;
 
 
       .item-wrapper {
       .item-wrapper {

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

@@ -1460,7 +1460,7 @@ export default {
           // flex-flow: wrap;
           // flex-flow: wrap;
           justify-content: flex-start;
           justify-content: flex-start;
           padding: 8px 13px 8px 12px;
           padding: 8px 13px 8px 12px;
-          padding-right: 82px;
+          padding-right: 86px;
           cursor: pointer;
           cursor: pointer;
           border-radius: 8px;
           border-radius: 8px;