【山东大学项目实训】PPT辅导&PPT评价功能前后端连接

1.PPT辅导:

这个功能逻辑比较简单主要就是前端将input中输入的内容发送给后端,后端调用ai并返回ai的话,因此前后端连接前端代码如下:

import axios from 'axios';



export default {

  data() {

    return {

      userInput: '',

      messages: [],

      messageId: 0

    };

  },

  methods: {

    async sendMessage() {

      if (this.userInput.trim() === '') return;



      const userMessage = {

        id: this.messageId++,

        text: this.userInput,

        type: 'user'

      };

      this.messages.push(userMessage);



      try {

        const response = await axios.post('http://localhost:8080/teach/async', this.userInput, {

          headers: {

            'Content-Type': 'text/plain'

          }

        });



        const aiMessage = {

          id: this.messageId++,

          text: response.data,

          type: 'ai'

        };

        this.messages.push(aiMessage);

      } catch (error) {

        console.error('Error sending message:', error);

      }



      this.userInput = '';

    }

  }

};

2.PPT评价:

此功能跟PPT辅导比较类似,即上传PPT,前端分页提取PPT中的内容并将内容返回给后端,后端调用ai对上传的PPT进行评价并给出修改意见,返回给前端。

前端代码如下:

分页提取PPT:

readFile(file) {

      const reader = new FileReader();



      reader.onload = async (e) => {

        const arrayBuffer = e.target.result;



        try {

          let pptData = await parse(arrayBuffer);

          console.log(pptData);



          var allText = [];

          console.log(Array.isArray(pptData));

          //pptData=JSON.parse(pptData);

          for(let si in pptData){

            console.log(si);

          }

          pptData.slides.forEach((slide) => {

            console.log("yyy");

            console.log(slide.elements.content);

            if (slide.elements) {

              slide.elements.forEach(text => {

                console.log("msy");

                var processcontent=text.content.replace(/<(style|script|iframe)[^>]*?>[\s\S]+?<\/\1\s*>/gi,'').replace(/<[^>]+?>/g,'').replace(/\s+/g,' ').replace(/ /g,' ').replace(/>/g,' ');

                allText.push(processcontent);

              });

            }

          });



        // 分页处理

        const pageSize = 1000; // 每页字符数

        const pages = [];

        for (let i = 0; i < allText.length; i += pageSize) {

          pages.push(allText.slice(i).join(' '));

        }



        // 逐页发送到后端

        pages.forEach((pageContent, index) => {

          this.sendMessage(pageContent, `${file.name}-page-${index + 1}`);

        });

      }catch(err)  {

          console.error('PPT解析失败:', err);

        }

      };



      reader.onerror = (e) => {

        console.error("File reading error:", e);

      };



      reader.readAsArrayBuffer(file);

    },

前后端连接:

async sendMessage(content = this.userInput,fileName='') {

      if (content.trim() === '') return;



      const userMessage = {

        id: this.messageId++,

        text: content,

        type: 'user'

      };

      this.messages.push(userMessage);



      try {

        const response = await axios.post('http://localhost:8080/chat/async', {content,fileName}, {

          headers: {

            'Content-Type': 'application/json'

          }

        });



        const aiMessage = {

          id: this.messageId++,

          text: response.data,

          type: 'ai'

        };

        this.messages.push(aiMessage);

        console.log(aiMessage);

      } catch (error) {

        console.error('Error sending message:', error);

      }



      this.userInput = '';

    }

页面效果:

  • 6
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值