chd 5 months ago
parent
commit
23946731ef

+ 24 - 9
src/entrypoints/content.js

@@ -212,9 +212,13 @@ export default defineContentScript({
                         }
                     }
 
-                    if (item.type === 'input' || item.type === 'text' || item.type === 'number' || item.type === 'tel' || item.type === 'email') {
-                        const input = findLabelForInput(label)
+                    if (item.type === 'input' || item.type === 'text' || item.type === 'number' || item.type === 'tel' || item.type === 'email' || item.type === 'textarea') {
+                        let input
+                        if (item.type === 'textarea') {
+                             input = findLabelForTextarea(label)
+                        } else input = findLabelForInput(label)
                         if (input) {
+                            if (input.value) continue
                             console.log(excelDataA[item.excelColumn]);
 
                             await simulateUserInput(input, excelDataA[item.excelColumn])
@@ -231,12 +235,12 @@ export default defineContentScript({
         }
         const simulateUserInput = async (element, value) => {
             // 设置值
-            // if (element.tagName.toLowerCase() === 'textarea') {
-            //   element.focus()
-            //   element.value = value
-            //   element.blur()
-            //   return
-            // }
+            if (element.tagName.toLowerCase() === 'textarea') {
+              element.focus()
+              element.value = value
+              element.blur()
+              return
+            }
             element.value = value;
 
             // 创建并触发 input 事件
@@ -253,7 +257,7 @@ export default defineContentScript({
         }
         const findLabelForInput = (label) => {
             let p = label.parentElement
-            for (let i = 0; i < 10; i++) {
+            for (let i = 0; i < 5; i++) {
                 const input = p.getElementsByTagName('input')
                 if (input.length > 0) {
                     return input[0]
@@ -284,6 +288,17 @@ export default defineContentScript({
             }
             return null
         }
+        const findLabelForTextarea = (label) => {
+            let p = label.parentElement
+            for (let i = 0; i < 10; i++) {
+                const span = p.getElementsByTagName('textarea')
+                if (span.length > 0) {
+                    return [...span]
+                }
+                p = p.parentElement
+            }
+            return null
+        }
         const simulateCompleteUserAction = async (clickElement, inputElement, inputText, tdTitle) => {
             // 1. 模拟鼠标弹起事件
             const simulateMouseUp = (element) => {

+ 5 - 4
src/entrypoints/sidepanel/Chat.vue

@@ -72,7 +72,7 @@
 <script setup>
 import { ref, onMounted, nextTick, inject, useTemplateRef } from 'vue'
 import { ElScrollbar, ElAvatar, ElInput, ElButton } from 'element-plus'
-import { buildExcelUnderstandingPrompt ,getFileContent} from '@/utils/ai-service.js'
+import { buildExcelUnderstandingPrompt ,getFileSummaryPrompt} from '@/utils/ai-service.js'
 import * as XLSX from "xlsx";
 import { ElMessage } from 'element-plus';
 import { useMsg } from '@/entrypoints/sidepanel/hook/useMsg.ts';
@@ -136,7 +136,7 @@ const titleScroll = computed(() => {
 let formInfo = []
 const flag = ref(false)  //true调用算法接口
 
-const handleUpload = (file) => {
+const handleUpload =async (file) => {
   if (type.value === '2') {
       chrome.runtime.sendMessage({
     type: 'FROM_SIDE_PANEL_TO_GET_PAGE_FORM',
@@ -179,7 +179,7 @@ const handleUpload = (file) => {
             xlsxData.value[header] = readData[1][i]
           })
           if (type.value === '2') {
-            await streamRes(buildExcelUnderstandingPrompt(readData, file?.name, response), false)
+            await streamRes(buildExcelUnderstandingPrompt(readData, file?.name, response.data), false)
           }
         };
       } else {
@@ -200,7 +200,8 @@ const handleUpload = (file) => {
 
   }
   if (type.value === '') {
-    
+    addMessage(`已上传文件:${file.name}`, false)
+    await getFileValue(file, )
   }
 }
 let str = ''

+ 19 - 13
src/entrypoints/sidepanel/hook/useMsg.ts

@@ -2,7 +2,7 @@
 import { ref, reactive } from 'vue';
 import avator from '@/public/icon/32.png';
 import moment from 'moment'
-// import { getFileContent, getFormKey, buildObjPrompt } from '../../../utils/ai-service'
+import { getFileContent, getFormKey, buildObjPrompt ,getFileSummaryPrompt} from '@/utils/ai-service'
 import { ElMessage } from 'element-plus';
 // import { sendMessage } from '@/utils/ai-service';
 export function useMsg(scrollbar: any, xlsxData: any, fetchDataAndProcess: Function) {
@@ -41,21 +41,27 @@ export function useMsg(scrollbar: any, xlsxData: any, fetchDataAndProcess: Funct
       let formData = new FormData();
       formData.append("file", file);
       const res = await getFileContent(formData)
-      console.log({
-        body: form,
-        input_data: res.data
-      });
+      if (type.value === '2') {
+        const response = await getFormKey({
+          body: form,
+          input_data: res.data
+        })
+        xlsxData.value = response.data
+        console.log(xlsxData.value);
+        console.log(type.value);
 
-      const response = await getFormKey({
-        body: form,
-        input_data: res.data
-      })
-      xlsxData.value = response.data
-      console.log(xlsxData.value);
-      console.log(type.value);
+        await streamRes(buildObjPrompt(response.data, form), false)
+      }
+      console.log(res.data,file);
       
-      await streamRes(buildObjPrompt(response.data, form), false)
+      if (type.value === '') {
+        console.log(getFileSummaryPrompt(res.data, file.name));
+        
+        await streamRes(getFileSummaryPrompt(res.data, file.name), false)
+      }
     } catch (error) {
+      console.log(error);
+      
       obj.content = '解析出错'
     } finally {
 

+ 18 - 1
src/utils/ai-service.js

@@ -103,6 +103,23 @@ ${pageInfo.mainContent}
 
 请以"以下是对该页面内容的总结:"开头,然后用要点的形式列出主要内容。`;
 }
+
+export function getFileSummaryPrompt(file,name) {
+    return `请帮我总结以下文件内容的要点:
+
+文件名称:${name}
+
+主要内容:
+${file}
+
+要求:
+1. 用简洁清晰的语言提取3-5个核心要点
+2. 保持客观中立的语气
+3. 按重要性排序
+4. 返回内容做好换行,以及展示样式
+
+请以"以下是对该文件内容的总结:"开头,然后用要点的形式列出主要内容。`;
+}
 export function formatMessage(text) {
     if (!text) return "";
 
@@ -214,7 +231,7 @@ export function buildObjPrompt(obj,  pageInfo) {
 ${pageInfo}
              
 要求:
-1. 请根据表单中的表单项和对象进行匹配,一定以表单为准!
+1. 请根据表单中的表单项和对象进行匹配,一定以表单为准,key同时在对象和表单中出现,才能返回
 2. 表单项有label,根据label匹配,没有label根据placeholder匹配,没有placeholder,根据id匹配,再根据其他内容匹配
 3. 并根据实际可操作的表单项的所有信息与上传的对象的key进行匹配,生成表单项与key的数组,并使用findBy告诉我通过表单项的什么字段信息匹配到的,使用findByValue告诉我匹配到的表单项字段值,使用excelColumn字段告诉我对应的key值。在一个字段内返回
 4. 并去除没有匹配到的表单项和对象中没有匹配到的key,