Vue3+Ts實現聊天機器人(chatBot-附代碼)

一:項目介紹

? ? ? ? 本次實驗主要涉及到的技術是 Vue3 + Ts,當然其中也有部分是 Vue2 格式的代碼以及 json 和 CSS 布局等。本來是想仿照 文心一言 來開發的一個聊天機器人案例。結果由于時間不足,可能只是做出來了一個半成品。不過核心功能是有的。由于大 json 內數據寫的比較少,因此可測數據在下文中有。有需要的小伙伴可以自行添加,格式在文中也有。

????????PS.代碼在文章底部,需要的小伙伴請底部自取。

二:各部分代碼

1、項目目錄

? ? ? ? 以下是項目的目錄,index.vue 是我們所看到的主頁面,components 下的兩個文件一個是消息回復的組件,一個是左側導航的組件。至于data.json 則是一個大 json?數據,回復的內容是從這里面拿的,判斷問題產生回復。

2、index.vue代碼

? ? ? ? ?這個頁面呢,主要就是將各個組件進行邏輯串聯。里面有定義清屏方法和加載提示等。該頁面更多的是布局。這里小白的話可以看一下按回車發送消息的判斷邏輯。

<template><div class="screen"><div class="left"><leftMenu /></div><div class="right"><div class="up"><chatMessage :sendMessage="sendMessage" :data='data' /></div><div class="input"><el-input class="inputStyle" v-model="message" placeholder="Please input your problem" clearable /><el-button @click="send" @keyup.enter="keyDown($event)">send</el-button></div></div></div><el-button type="primary" @click="openFullScreen2"> 重新加載 </el-button>
</template><script lang="ts" setup>
import { ref, onMounted } from 'vue'
import { ElLoading } from 'element-plus'
import leftMenu from '@/views/5_chatbotDemo/components/leftMenu.vue'
import chatMessage from '@/views/5_chatbotDemo/components/chatMessage.vue'/** 發送消息模塊 */
let message = ref('')
let sendMessage = ref('')
let data = ref() // 定義一個時間戳,方便檢查是否更新發送了數據
/** 發送消息的方法 */
function send() {sendMessage.value = message.valuedata.value = Date.now()message.value = ''// console.log(data.value);
}/** 刷新加載 */
onMounted(() => {openFullScreen2();window.addEventListener("keydown", keyDown);
});
/** 回車方法 */
function keyDown(e: any) {// 回車則執行登錄方法 enter鍵的ASCII是13if (e.key == 'Enter') {send()}
}
/** 加載中... */
const openFullScreen2 = () => {const loading = ElLoading.service({lock: true,text: '',background: 'rgba(0, 0, 0, 0.7)',})setTimeout(() => {loading.close()}, 2000)
}
</script><style scoped>
.screen {height: 80vh;display: flex;flex-direction: row;background: rgb(236, 239, 246);
}.right {width: 100%;position: relative;
}.up {position: absolute;top: 10px;left: 30%;/* align-items: center; */
}.input {position: absolute;display: flex;bottom: 0px;left: 40%;
}.inputStyle {width: 300px;margin-right: 10px;
}
</style>

3、data.json數據

? ? ? ? 這個是大json里面存儲的數據,我們可以看到這里是一個放了很多對象的數組,對象里有問題字段 question 和回復字段 replay 而我們實現的邏輯則是判斷用戶發送的消息是否被這些 question 所包含,如果包含的話就會返回對應的 replay 。

[{"question":"你叫什么名字?","replay":"我的名字是小娃!"},{"question":"你的年齡是幾歲?","replay":"我今年20歲啦!"},{"question":"你上幾年級","replay":"我今年大四了!"},{"question":"你是哪里人","replay":"我來自浙江溫州"},{"question":"你現在在干嘛?","replay":"我正在學習..."},{"question":"你是豬嗎?","replay":"是的,我是一頭大笨豬~"},{"question":"今天天氣怎么樣?","replay":"為什么要問天氣怎么樣?有這精力不如好好賺錢,好好想想自己的原因,這么多年了工資漲沒漲心里有點數!"},{"question":"我好無聊。","replay":"不要無聊,小娃給你唱首歌吧,太陽當空照,花兒對我笑,小鳥說:喳喳喳,你為什么背上炸藥包?"}
]

4、leftMenu.vue代碼

? ? ? ? 該組件由于時間關系并沒有寫邏輯,只是簡單地布局,如果有小伙伴感興趣的話可以自己思考開發一些東西上去。布局已經布好啦。?

<template><div class="home"><div class="title">我能做什么?</div><div class="menu"><div class="item" v-for="item in menuItem">{{ item }}</div></div></div>
</template><script setup>
let menuItem=['陪你嘮嗑','發現生活','周游世界','吃吃喝喝','一起長胖']
</script><style lang="scss" scoped>
.home{width: 200px;height: 100%;background: linear-gradient(to bottom, rgb(238,231,235), rgb(221,221,245));
}
.title{color: rgb(81,122,237);height: 80px;line-height: 80px;text-align: center;font-size: 26px;border-bottom: 1px solid rgb(222,219,232);
}
.menu{.item{font-size: 18px;text-align: center;height: 60px;line-height: 60px;}.item:hover{cursor: pointer;background: rgb(221,221,245);}
}
</style>

5、chatMessage.vue代碼

? ? ? ? 來了來了,這個頁面是我們的核心組件,消息的發送,判斷,回復等邏輯都是寫在了這個組件里的。里面有寫了注釋,各位小伙伴可以沉下心來看一看哦、

<template><div class="clear"><el-button type="primary" @click="clearScreen">清屏</el-button></div><div class="home" ><div v-for="(item, index) in chatArr" :key="index"><div class="reply" v-if="item.status === '0'"><div class="avatar"><img width="50" src="@/assets/images/avatar.jpeg" alt=""></div><div class="left"></div><div class="content">{{ item.content }}</div></div><div class="question" v-if="item.status === '1'"><div class="content">{{ item.content }}</div><div class="left"></div><div class="avatar"><img width="50" src="@/assets/images/avatar2.png" alt=""></div></div></div></div>
</template><script >
import { defineComponent, reactive } from "vue";
import jsonData from "@/views/5_chatbotDemo/data.json"export default defineComponent({watch: {data(newValue) {this.addArr('1', this.sendMessage);this.replayFnc() // 當監聽到有消息傳入的時候調用回復方法產生回復}},// props:['sendMessage']props: {sendMessage: {type: String,default: "",},data: 0},setup() {let chatArr = reactive([{status: '0', // 0-回復,1-問題content: '您好,我是你的機器助手,有什么可以幫助到您的嗎?'}, {status: '1',content: '我要開始提問啦!'}, {status: '0',content: '請問您想要問什么呢?'}]);/** 判斷問題,產生回復的方法 */function replayFnc() {let hasQuestion = falselet replayMessage = '聽不懂'/** 循環判斷是否存在該問題的答案,存在的話就改變回復的內容 */for (let index = 0; index < jsonData.length; index++) {if(jsonData[index].question.indexOf(this.sendMessage) > -1){replayMessage =jsonData[index].replay hasQuestion = true}}addArr('0',replayMessage)}/** 添加進數組的方法 */function addArr(status, content) {let obj = {status: status,content: content}chatArr.push(obj)}/** 清屏 */function clearScreen(){chatArr.length = 0console.log(chatArr);}return {clearScreen,replayFnc,chatArr,addArr}}
});
</script><style lang="scss" scoped>
.clear{width: 800px;margin-bottom: 10px;display: flex;justify-content: right;
}
.home {height: 70vh;position: relative;width: 800px;overflow: auto; // 滾動條
}// 回復的樣式
.reply {display: flex;margin-top: 5px;.content {padding: 15px;max-width: 500px;border: 1px solid;color: #676490;;}.left {width: 0px;height: 0px;border: 15px solid transparent;border-right-color: rgba(222, 222, 244);}
}// 提問的樣式
.question {display: flex;margin-top: 5px;// background: greenyellow;justify-content: right;.content {padding: 15px;max-width: 500px;border: 1px solid;color: #676490;}.left {width: 0px;height: 0px;border: 15px solid transparent;border-left-color: rgba(222, 222, 244);}
}
</style>

三:結尾

? ? ? ? 其實本次實驗的整體邏輯代碼是很簡單的,只是使用了 Vue3 + Ts 技術,其實現的邏輯和細節部分才是本次實驗的重點。也算是通過本次復習了 Vue3 + Ts + json +css 等諸多內容吧。最后附上gitee的地址:

乾辰/vue3全家桶練習icon-default.png?t=N7T8https://gitee.com/qianchen12138/vue3-family-bucket-practice

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/163474.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/163474.shtml
英文地址,請注明出處:http://en.pswp.cn/news/163474.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

淺談安科瑞智能照明系統在馬來西亞國家石油公司項目的應用

摘要&#xff1a;隨著社會經濟的發展及網絡技術、通信技術的提高&#xff0c;人們對照明設計提出了新的要求&#xff0c;它不僅要控制照明光源的發光時間、 亮度&#xff0c;而且與其它系統來配合不同的應用場合做出相應的燈光場景。本文介紹了馬亞西亞石油公司智能照明項目的應…

tp8 使用rabbitMQ(2)工作隊列

代碼的參數說明在 第一小節的代碼中&#xff0c;如果需要可移步到第一節中查看 工作隊列 工作隊列&#xff08;又稱&#xff1a;任務隊列——Task Queues&#xff09;是為了避免等待一些占用大量資源、時間的操作。當我們把任務&#xff08;Task&#xff09;當作消息發送到隊列…

推薦一款png圖片打包plist工具pngPackerGUI_V2.0

png圖片打包plist工具&#xff0c;手把手教你使用pngPackerGUI_V2.0 此軟件是在pngpacker_V1.1軟件基礎之后&#xff0c;開發的界面化操作軟件&#xff0c;方便不太懂命令行的小白快捷上手使用。1.下載并解壓縮軟件&#xff0c;得到如下目錄&#xff0c;雙擊打開 pngPackerGUI.…

《第一行代碼:Android》第三版-2.4.3循環語句 for循環

本節主要講for 循環&#xff0c;主要就是創建個區間&#xff0c;然后用for 來遍歷。 /*** You can edit, run, and share this code.* play.kotlinlang.org*/fun main() {println("Hello, world!!!")for(i in 1..10)//表示 0 到10 但是包括10 &#xff0c;即數學上的…

使用paddleocr進行OCR文字識別

1 OCR介紹 OCR&#xff08;Optical Character Recognition&#xff09;即光學字符識別&#xff0c;是一種將不同類型的文檔&#xff08;如掃描的紙質文件、PDF文件或圖像文件中的文本&#xff09;轉換成可編輯和可搜索的數據的技術。OCR技術能夠識別和轉換印刷或手寫文字&…

Python接口自動化測試——如何搭建測試環境

前言 接口測試的方式有很多&#xff0c;比如可以用工具&#xff08;jmeter,postman&#xff09;之類&#xff0c;也可以自己寫代碼進行接口測試&#xff0c;工具的使用相對來說都比較簡單&#xff0c;重點是要搞清楚項目接口的協議是什么&#xff0c;然后有針對性的進行選擇&a…

NF是哪個國家品牌?韓國NF-耐福功放芯片介紹

NF是韓國一家專注于數字音頻芯片領域公司旗下的數字功放IC品牌&#xff0c;2008年開始進入中國市場&#xff0c;ISweek工采網作為其代理商&#xff1b;在國內簡稱&#xff1a;韓國NF&#xff0c;又被稱耐福、耐福NTP功放芯片&#xff1b;國內長虹、TCL、海信、小豹AI音箱、騰訊…

大數據-之LibrA數據庫系統告警處理(ALM-37001 MPPDBServer實例Redo日志缺失)

告警解釋 當DN主實例有未同步到DN備實例的xlog日志被刪除時&#xff0c;產生該告警。 告警屬性 告警ID 告警級別 可自動清除 37001 嚴重 是 告警參數 參數名稱 參數含義 ServiceName 產生告警的服務名稱 RoleName 產生告警的角色名稱 HostName 產生告警的主機名…

shell從服務列表中讀取參數并檢查服務

一、shell腳本 #!/usr/bin/env bash# 讀取文檔數據 while read -r line do# 提取服務名和命令service_name$(echo "$line" | awk {print $1})command$(echo "$line" | awk {$1""; print substr($0,2)})#echo "服務名: $service_name"…

SQL進階學習

1.[NISACTF 2022]join-us sql報錯注入和聯合注入 過濾&#xff1a; as IF rand() LEFT by updatesubstring handler union floor benchmark COLUMN UPDATE & sys.schema_auto_increment_columns && 11 database case AND right CAST FLOOR left updatexml DATABA…

Vue3入門組合式 API

Vue3 學習 開發環境 tong ~/Projects/EasyVue3 $ node -v v16.20.1 tong ~/Projects/EasyVue3 $ sw_vers ProductName: macOS ProductVersion: 14.1.1 BuildVersion: 23B81 tong ~/Projects/EasyVue3 $ npm --version 8.19.4 tong ~/Projects/Ea…

selenium 簡單案例 <批量下載文件> <網頁自動化點擊上報>

一、批量下載文件 網頁分析 點擊跳轉到下載頁面 from selenium import webdriver import timedef get_link_list():# 創建瀏覽器對象driver webdriver.Chrome(executable_pathrC:\Users\nlp_1\Desktop\chromedriver\chromedriver-win32\chromedriver.exe)url https://www…

微信報名怎么做_輕松便捷的數字化報名體驗

微信報名&#xff1a;輕松便捷的數字化報名體驗 在這個數字化時代&#xff0c;微信已經成為我們生活中不可或缺的一部分。它不僅僅是一個社交平臺&#xff0c;更是一個功能強大的綜合性工具。其中&#xff0c;微信報名功能更是給我們的生活帶來了極大的便利。本文將詳細介紹微…

Django之cookie和session

文章目錄 Cookie的介紹Cookie的由來什么是CookieCookie原理Cookie覆蓋瀏覽器查看Cookie 在Django中操作Cookie設置Cookie查詢瀏覽器攜帶的Cookie刪除Cookie Cookie校驗登錄sessionSession的由來Session設置查看、更新Session值刪除Session值Seesion的其他方法Session的其他配置…

企業微信機器人:自動化辦公的未來已來!

導語&#xff1a;隨著科技的迅速發展&#xff0c;人工智能已經逐漸滲透到我們的日常生活和工作中。而企業微信機器人的出現&#xff0c;更是開啟了自動化辦公的新紀元。本文將為您詳細解析企業微信機器人的功能、優勢以及如何為企業帶來實質性的價值。 一、企業微信機器人的功…

擴展外部eMMC存儲

By Toradex胡珊逢 簡介 存儲器的嵌入式設備中扮演著重要角色&#xff0c;上面不僅安裝有操作系統&#xff0c;同時也保存著應用程序和運行日志等。對于存儲器如 eMMC&#xff0c;寫入的數據量決定其使用壽命&#xff0c;對于有大量日志記錄的應用&#xff0c;通常可以選用一個…

JavaScript:監聽事件

該方法用于向瀏覽器窗口注冊事件監聽器&#xff0c;當指定的事件&#xff08;如單擊、按鍵按下&#xff09;被觸發時&#xff0c;瀏覽器會自動調用指定的函數&#xff08;回調函數&#xff09;。 window.addEventListener(event, function, useCapture); 參數說明&#xff1a…

洛谷題單--線性表

P3156 【深基15.例1】詢問學號 鏈接 : 【深基15.例1】詢問學號 - 洛谷 直接輸入&#xff0c;然后輸出a[i]即可; 代碼 : #include<iostream> #include<cstring> #include<algorithm> #include<vector> using namespace std; int main(){int n, q …

請手寫一個發布-訂閱的模式

發布-訂閱模式也是經典的設計模式之一&#xff0c;它在前端很多地方都有應用&#xff0c;比如javascript事件池&#xff0c;Vue的$on、$off&#xff0c;nodejs的events模塊和socket通信等等都有應用&#xff0c;也是前端面試比較火熱的考點之一&#xff0c;接下來給大家詳細介紹…

cefsharp119.4.30(cef119.4.3,Chromium119.0.6045.159)版本升級體驗支持H264及其他多個H264版本

Cefsharp119.4.30,cef119.4.3,Chromium119.0.6045.159 此更新包括一個高優先級安全更新 This update includes a high priority security update. 說明:此版本119.4.3支持H264視頻播放(需要聯系我),其他版本。.NETFramework 4.6.2 NuGet Gallery | CefSharp.WinForms 119.…