Преглед изворни кода

feat: 添加拍照类型的学习内容工具

新增了多语言的拍照工具文案,在编辑器工具栏中添加拍照工具入口,配置对应的类型映射与图标
lsc пре 1 дан
родитељ
комит
3ed0b6af45

+ 1 - 0
src/components/CollapsibleToolbar/index.vue

@@ -288,6 +288,7 @@ const getTypeLabel = (type?: number) => {
     76: lang.ssCreative,
     76: lang.ssCreative,
     77: lang.ssEnglishSpeakingTool,
     77: lang.ssEnglishSpeakingTool,
     78: lang.ssVote,
     78: lang.ssVote,
+    79: lang.ssPhoto,
   }
   }
   return typeMap[type || 0] || lang.ssUnknown
   return typeMap[type || 0] || lang.ssUnknown
 }
 }

+ 14 - 1
src/components/CollapsibleToolbar/index2.vue

@@ -232,6 +232,7 @@
         <img class="submenu-img" v-else-if="hoveredTool === 'qa'" key="qa" :src="toolAnswer" alt="">
         <img class="submenu-img" v-else-if="hoveredTool === 'qa'" key="qa" :src="toolAnswer" alt="">
         <img class="submenu-img" v-else-if="hoveredTool === 'choice'" key="choice" :src="toolChoice" alt="">
         <img class="submenu-img" v-else-if="hoveredTool === 'choice'" key="choice" :src="toolChoice" alt="">
         <img class="submenu-img" v-else-if="hoveredTool === 'vote'" key="vote" :src="toolVote" alt="">
         <img class="submenu-img" v-else-if="hoveredTool === 'vote'" key="vote" :src="toolVote" alt="">
+        <img class="submenu-img" v-else-if="hoveredTool === 'photo'" key="photo" :src="toolPhoto" alt="">
       </transition>
       </transition>
       <div class="submenu-item-box">
       <div class="submenu-item-box">
         <div class="submenu-item" @click="handleToolClick('choice')" @mouseenter="hoveredTool = 'choice'"
         <div class="submenu-item" @click="handleToolClick('choice')" @mouseenter="hoveredTool = 'choice'"
@@ -250,13 +251,21 @@
           <span class="submenu-label">{{ lang.ssQandA }}</span>
           <span class="submenu-label">{{ lang.ssQandA }}</span>
         </div>
         </div>
         <div class="submenu-item" @click="handleToolClick('vote')" @mouseenter="hoveredTool = 'vote'"
         <div class="submenu-item" @click="handleToolClick('vote')" @mouseenter="hoveredTool = 'vote'"
-          @mouseleave="hoveredTool = null" v-show="false">
+          @mouseleave="hoveredTool = null">
           <svg class="submenu-icon" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2">
           <svg class="submenu-icon" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2">
               <polyline points="9 11 12 14 22 4"></polyline>
               <polyline points="9 11 12 14 22 4"></polyline>
               <path d="M21 12v7a2 2 0 01-2 2H5a2 2 0 01-2-2V5a2 2 0 012-2h11"></path>
               <path d="M21 12v7a2 2 0 01-2 2H5a2 2 0 01-2-2V5a2 2 0 012-2h11"></path>
           </svg>
           </svg>
           <span class="submenu-label">{{ lang.ssVote }}</span>
           <span class="submenu-label">{{ lang.ssVote }}</span>
         </div>
         </div>
+        <div class="submenu-item" @click="handleToolClick('photo')" @mouseenter="hoveredTool = 'photo'"
+          @mouseleave="hoveredTool = null">
+          <svg class="submenu-icon" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2">
+              <path d="M23 19a2 2 0 01-2 2H3a2 2 0 01-2-2V8a2 2 0 012-2h4l2-3h6l2 3h4a2 2 0 012 2z"></path>
+              <circle cx="12" cy="13" r="4"></circle>
+          </svg>
+          <span class="submenu-label">{{ lang.ssPhoto }}</span>
+        </div>
         <div class="submenu-item" @click="handleToolClick('creative')" @mouseenter="hoveredTool = null"
         <div class="submenu-item" @click="handleToolClick('creative')" @mouseenter="hoveredTool = null"
           @mouseleave="hoveredTool = null">
           @mouseleave="hoveredTool = null">
           <svg class="submenu-icon" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2">
           <svg class="submenu-icon" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2">
@@ -555,6 +564,9 @@ import { lang } from '@/main'
 import toolChoice from '@/assets/img/tool_choice.jpeg'
 import toolChoice from '@/assets/img/tool_choice.jpeg'
 import toolAnswer from '@/assets/img/tool_answer.png'
 import toolAnswer from '@/assets/img/tool_answer.png'
 import toolVote from '@/assets/img/tool_vote.png'
 import toolVote from '@/assets/img/tool_vote.png'
+import toolPhoto from '@/assets/img/tool_photo.png'
+
+
 
 
 interface ContentItem {
 interface ContentItem {
   tool?: number
   tool?: number
@@ -963,6 +975,7 @@ const getTypeLabel = (type?: number) => {
     76: lang.ssCreative,
     76: lang.ssCreative,
     77: lang.ssEnglishSpeakingTool,
     77: lang.ssEnglishSpeakingTool,
     78: lang.ssVote,
     78: lang.ssVote,
+    79: lang.ssPhoto,
   }
   }
   return typeMap[type || 0] || lang.ssUnknown
   return typeMap[type || 0] || lang.ssUnknown
 }
 }

+ 1 - 0
src/views/Editor/CanvasTool/WebpageInput.vue

@@ -108,6 +108,7 @@ const getTypeLabel = (type: number) => {
     76: lang.ssCreative,
     76: lang.ssCreative,
     77: lang.ssEnglishSpeakingTool,
     77: lang.ssEnglishSpeakingTool,
     78: lang.ssVote,
     78: lang.ssVote,
+    79: lang.ssPhoto,
   }
   }
   return typeMap[type] || lang.ssUnknown
   return typeMap[type] || lang.ssUnknown
 }
 }

+ 14 - 2
src/views/Editor/CanvasTool/index2.vue

@@ -17,13 +17,20 @@
             </svg>
             </svg>
             <span>{{ lang.ssQandA }}</span>
             <span>{{ lang.ssQandA }}</span>
           </div>
           </div>
-          <!-- <div class="popover-item" @click="editContent(78)" v-if="frametype != 78">
+          <div class="popover-item" @click="editContent(78)" v-if="frametype != 78">
             <svg width="1em" height="1em" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2">
             <svg width="1em" height="1em" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2">
                 <polyline points="9 11 12 14 22 4"></polyline>
                 <polyline points="9 11 12 14 22 4"></polyline>
                 <path d="M21 12v7a2 2 0 01-2 2H5a2 2 0 01-2-2V5a2 2 0 012-2h11"></path>
                 <path d="M21 12v7a2 2 0 01-2 2H5a2 2 0 01-2-2V5a2 2 0 012-2h11"></path>
             </svg>
             </svg>
             <span>{{ lang.ssVote }}</span>
             <span>{{ lang.ssVote }}</span>
-          </div> -->
+          </div>
+          <div class="popover-item" @click="editContent(79)" v-if="frametype != 79">
+            <svg width="1em" height="1em" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2">
+                <path d="M23 19a2 2 0 01-2 2H3a2 2 0 01-2-2V8a2 2 0 012-2h4l2-3h6l2 3h4a2 2 0 012 2z"></path>
+                <circle cx="12" cy="13" r="4"></circle>
+            </svg>
+            <span>{{ lang.ssPhoto }}</span>
+          </div>
         </template>
         </template>
         <div class="handler-item" :class="{ active: toolVisible }">
         <div class="handler-item" :class="{ active: toolVisible }">
           <span class="svg-icon">
           <span class="svg-icon">
@@ -40,6 +47,10 @@
                 <polyline points="9 11 12 14 22 4"></polyline>
                 <polyline points="9 11 12 14 22 4"></polyline>
                 <path d="M21 12v7a2 2 0 01-2 2H5a2 2 0 01-2-2V5a2 2 0 012-2h11"></path>
                 <path d="M21 12v7a2 2 0 01-2 2H5a2 2 0 01-2-2V5a2 2 0 012-2h11"></path>
             </svg>
             </svg>
+            <svg v-if="frametype == 79" width="1em" height="1em" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2">
+                <path d="M23 19a2 2 0 01-2 2H3a2 2 0 01-2-2V8a2 2 0 012-2h4l2-3h6l2 3h4a2 2 0 012 2z"></path>
+                <circle cx="12" cy="13" r="4"></circle>
+            </svg>
           </span>
           </span>
           <span>{{ iframeLabel }}</span>
           <span>{{ iframeLabel }}</span>
           <svg t="1776672009773" class="xia-icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg"
           <svg t="1776672009773" class="xia-icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg"
@@ -246,6 +257,7 @@ const getTypeLabel = (type: number) => {
     76: lang.ssCreative,
     76: lang.ssCreative,
     77: lang.ssEnglishSpeakingTool,
     77: lang.ssEnglishSpeakingTool,
     78: lang.ssVote,
     78: lang.ssVote,
+    79: lang.ssPhoto,
   }
   }
   return typeMap[type] || lang.ssUnknown
   return typeMap[type] || lang.ssUnknown
 }
 }

+ 1 - 0
src/views/lang/cn.json

@@ -162,6 +162,7 @@
   "ssChoiceQ": "选择",
   "ssChoiceQ": "选择",
   "ssQandA": "问答",
   "ssQandA": "问答",
   "ssVote": "投票",
   "ssVote": "投票",
+  "ssPhoto": "拍照",
   "ssNoLearn": "暂无学习内容",
   "ssNoLearn": "暂无学习内容",
   "ssNeedUpload": "请先上传或创建学习内容",
   "ssNeedUpload": "请先上传或创建学习内容",
   "ssPreview": "预览",
   "ssPreview": "预览",

+ 1 - 0
src/views/lang/en.json

@@ -161,6 +161,7 @@
   "ssContentList": "Content list",
   "ssContentList": "Content list",
   "ssQandA": "Q&A",
   "ssQandA": "Q&A",
   "ssVote": "Vote",
   "ssVote": "Vote",
+  "ssPhoto": "Photo",
   "ssNoLearn": "No learning content",
   "ssNoLearn": "No learning content",
   "ssNeedUpload": "Please upload or create learning content first",
   "ssNeedUpload": "Please upload or create learning content first",
   "ssPreview": "Preview",
   "ssPreview": "Preview",

+ 1 - 0
src/views/lang/hk.json

@@ -161,6 +161,7 @@
   "ssContentList": "內容列表",
   "ssContentList": "內容列表",
   "ssQandA": "問答",
   "ssQandA": "問答",
   "ssVote": "投票",
   "ssVote": "投票",
+  "ssPhoto": "拍照",
   "ssNoLearn": "暫無學習內容",
   "ssNoLearn": "暫無學習內容",
   "ssNeedUpload": "請先上傳或創建學習內容",
   "ssNeedUpload": "請先上傳或創建學習內容",
   "ssPreview": "預覽",
   "ssPreview": "預覽",