Procházet zdrojové kódy

feat(文本提取): 增强幻灯片文本内容提取功能

扩展文本提取逻辑以包含形状元素中的文本内容
修改颜色主题为#ff9300
lsc před 1 dnem
rodič
revize
0bc3a0cac0

+ 2 - 2
index.html

@@ -34,7 +34,7 @@
       .first-screen-loading-spinner {
         width: 36px;
         height: 36px;
-        border: 3px solid #d14424;
+        border: 3px solid #ff9300;
         border-top-color: transparent;
         border-radius: 50%;
         box-sizing: border-box;
@@ -42,7 +42,7 @@
       }
       .first-screen-loading-text {
         margin-top: 20px;
-        color: #d14424;
+        color: #ff9300;
       }
       @keyframes spinner {
         0% {

+ 9 - 1
src/components/CollapsibleToolbar/componets/aiChat.vue

@@ -355,12 +355,20 @@ const sendAction = async (action: string) => {
 
   // 提取当前页面中 type 为 'text' 的元素的纯文本内容
   const textContents = slidesStore.currentSlide?.elements
-    .filter((element: any) => element.type === 'text')
+    .filter((element: any) => element.type === 'text' || (element.type === 'shape' && element.text && element.text.content))
     .map((textElement: any) => {
+      if (textElement.type === 'shape') {
+        // 创建一个临时元素来解析 HTML 并提取纯文本
+        const tempElement = document.createElement('div')
+        tempElement.innerHTML = textElement.text.content
+        return tempElement.textContent || tempElement.innerText || ''
+      }
       // 创建一个临时元素来解析 HTML 并提取纯文本
       const tempElement = document.createElement('div')
       tempElement.innerHTML = textElement.content
       return tempElement.textContent || tempElement.innerText || ''
+      
+
     })
     .filter(content => content.trim() !== '') || []
   console.log('textContents', textContents)

+ 4 - 2
src/components/FullscreenSpin.vue

@@ -51,14 +51,16 @@ withDefaults(defineProps<{
 .spinner {
   width: 36px;
   height: 36px;
-  border: 3px solid $themeColor;
+  // border: 3px solid $themeColor;
+  border: 3px solid #ff9300;
   border-top-color: transparent;
   border-radius: 50%;
   animation: spinner .8s linear infinite;
 }
 .text {
   margin-top: 20px;
-  color: $themeColor;
+  // color: $themeColor;
+  color: #ff9300;
 }
 @keyframes spinner {
   0% {

+ 11 - 3
src/views/Student/index.vue

@@ -2626,9 +2626,17 @@ const getCourseDetail = async () => {
             jsonObj.slides.forEach((slide: any, index: number) => {
               let slideContent = ''
               if (slide.elements) {
-                const textElements = slide.elements.filter((element: any) => element.type === 'text')
-                if (textElements.length > 0) {
-                  slideContent = textElements.map((element: any) => element.content).join(' ')
+                // 提取文本内容(包括普通文本和形状文本)
+                const allTextElements = slide.elements.filter((element: any) => 
+                  element.type === 'text' || (element.type === 'shape' && element.text?.content)
+                )
+                if (allTextElements.length > 0) {
+                  slideContent = allTextElements
+                    .map((element: any) => {
+                      const content = element.type === 'text' ? element.content : element.text.content
+                      return content.replace(/<[^>]*>/g, '')
+                    })
+                    .join(' ')
                 }
               }
               pptContent.push(`第${index + 1}页: ${slideContent || '内容为空'}`)