src/assets/img/emoji/clown-face.png
src/assets/img/emoji/face-screaming-in-fear.png
src/assets/img/emoji/face-vomiting.png
src/assets/img/emoji/face-with-tongue.png
src/assets/img/emoji/face-without-mouth.png
src/assets/img/emoji/ghost.png
src/assets/img/emoji/hibiscus.png
src/assets/img/emoji/jack-o-lantern.png
src/assets/img/emoji/lips.png
src/assets/img/emoji/loudly-crying-face.png
src/assets/img/emoji/money-bag.png
src/assets/img/emoji/money-mouth-face.png
src/assets/img/emoji/new-moon-face.png
src/assets/img/emoji/ok-hand-yellow.png
src/assets/img/emoji/pile-of-poo.png
src/assets/img/emoji/pouting-face.png
src/assets/img/emoji/rainbow.png
src/assets/img/emoji/rocket.png
src/assets/img/emoji/shamrock.png
src/assets/img/emoji/shangchuan.png
src/assets/img/emoji/slightly-smiling-face.png
src/assets/img/emoji/smiling-face-with-heart-eyes.png
src/assets/img/emoji/smiling-face-with-horns.png
src/assets/img/emoji/smiling-face-with-sunglasses.png
src/assets/img/emoji/smiling-face.png
src/assets/img/emoji/sparkles.png
src/assets/img/emoji/star.png
src/assets/img/emoji/thinking-face.png
src/assets/img/emoji/thought-balloon.png
src/assets/img/emoji/thumbs-up-yellow.png
src/assets/img/emoji/tired-face.png
src/assets/img/emoji/two-hearts.png
src/assets/img/emoji/victory-hand-yellow.png
src/assets/img/emoji/È¡Ïû.png
src/assets/img/fileImg/excel.png
src/assets/img/fileImg/pdf.png
src/assets/img/fileImg/ppt.png
src/assets/img/fileImg/txt.png
src/assets/img/fileImg/unknowfile.png
src/assets/img/fileImg/word.png
src/assets/img/fileImg/zpi.png
src/assets/img/head_portrait.jpg
src/assets/img/head_portrait1.png
src/assets/img/logo.png
src/components/FileCard.vue
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,81 @@ <template> <div class="file-card"> <img src="@/assets/img/fileImg/unknowfile.png" alt="" v-if="fileType == 0"/> <img src="@/assets/img/fileImg/word.png" alt="" v-else-if="fileType == 1"/> <img src="@/assets/img/fileImg/excel.png" alt="" v-else-if="fileType == 2"/> <img src="@/assets/img/fileImg/ppt.png" alt="" v-else-if="fileType == 3"/> <img src="@/assets/img/fileImg/pdf.png" alt="" v-else-if="fileType == 4"/> <img src="@/assets/img/fileImg/zpi.png" alt="" v-else-if="fileType == 5"/> <img src="@/assets/img/fileImg/txt.png" alt="" v-else/> <div class="word"> <span >{{file.name || 'æªç¥'}}</span > <span>154kb</span> </div> </div> </template> <script> export default { // props: ["fileType", "file"], props: { fileType: Number, file: File, default() { return {}; }, }, watch: { file() { console.log(this.file); }, }, mounted() { console.log(this.file); console.log(this.fileType); } }; </script> <style lang="scss" scoped> .file-card { width: 250px; height: 100px; background-color: rgb(45, 48, 63); border-radius: 20px; display: flex; justify-content: center; align-items: center; padding: 10px; box-sizing: border-box; cursor: pointer; &:hover { background-color: rgb(33, 36, 54); } img { width: 60px; height: 60px; } .word { width: 60%; margin-left: 10px; overflow: hidden; span { width: 90%; display: inline-block; color: #fff; } span:first-child { font-size: 14px; overflow: hidden; white-space: nowrap; text-overflow: ellipsis; } span:last-child { font-size: 12px; color: rgb(180, 180, 180); } } } </style> src/router/index.js
@@ -57,6 +57,7 @@ component: () => import('@/views/error/401'), hidden: true }, { path: '', component: Layout, @@ -71,6 +72,20 @@ ] }, { path: '/main/MobileChat', component: Layout, redirect: '', hidden: true, children: [ { path: '', component: () => import('@/views/chatHome/chatHomeIndex/MobileChat'), name: 'MobileChat', meta: { title: 'AI对è¯', icon: 'dashboard', affix: true} } ] }, { path: '/user', component: Layout, hidden: true, src/utils/util.js
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,92 @@ //鲿 export function debounce(fn) { console.log(1) let t = null //åªä¼æ§è¡ä¸æ¬¡ debugger return function (){ if(t){ clearTimeout(t) } t = setTimeout(()=>{ console.log(temp); //å¯ä»¥è·å // console.log(arguments[0]) //undefined fn.apply(this,arguments) //å¨è¿ä¸ªåè°å½æ°éé¢çargumentæ¯è¿ä¸ªåè°å½æ°çåæ°ï¼å 为没æåæ°æä»¥undefinedï¼å¯ä»¥éè¿å¤é¢ç彿°èµå¼æ¥è¿è¡è®¿é® //ä¹å¯ä»¥æ¹åæç®å¤´å½æ°,ç®å¤´å½æ°çthisæ¯æåå®ä¹å½æ°çé£ä¸å±çï¼æä»¥è®¿é®å°çargumentsæ¯ä¸ä¸å±å½æ°çarguments },1000) } } //èæµ export function throttle(fn, delay = 200) { let timer = null console.log(fn); debugger return function () { if(timer) return timer = setTimeout(() => { debugger fn.apply(this,arguments) timer = null }) } } //䏿å¨ç» export function animation(obj, target, fn1) { // console.log(fn1); // fnæ¯ä¸ä¸ªåè°å½æ°ï¼å¨å®æ¶å¨ç»æçæ¶åæ·»å // æ¯æ¬¡å¼å®æ¶å¨ä¹åå æ¸ 餿宿¶å¨ clearInterval(obj.timer); obj.timer = setInterval(function () { // æ¥é¿è®¡ç®å ¬å¼ è¶æ¥è¶å° // æ¥é¿åæ´ var step = (target - obj.scrollTop) / 10; step = step > 0 ? Math.ceil(step) : Math.floor(step); if (obj.scrollTop >= target) { clearInterval(obj.timer); // 妿fn1åå¨ï¼è°ç¨fn if (fn1) { fn1(); } } else { // æ¯30毫ç§å°±å°æ°çå¼ç»obj.left obj.scrollTop = obj.scrollTop + step; } }, 10); } //夿æä»¶ç±»å export function judgeFileType(file) { if (file == null||file == ""){ alert("è¯·éæ©è¦ä¸ä¼ çå¾ç!"); return false; } if (file.lastIndexOf('.')==-1){ //妿ä¸åå¨"." alert("è·¯å¾ä¸æ£ç¡®!"); return false; } var AllImgExt=".jpg|.jpeg|.gif|.bmp|.png|"; var extName = file.substring(file.lastIndexOf(".")).toLowerCase();//ï¼æè·¯å¾ä¸çææåæ¯å ¨é¨è½¬æ¢ä¸ºå°åï¼ if(AllImgExt.indexOf(extName+"|")==-1) { ErrMsg="该æä»¶ç±»åä¸å 许ä¸ä¼ ã请ä¸ä¼ "+AllImgExt+" ç±»åçæä»¶ï¼å½åæä»¶ç±»å为"+extName; alert(ErrMsg); return false; } } //æä»¶ç±»å export function fileType() { return { 'application/msword': 'word', 'application/pdf': 'pdf', 'application/vnd.ms-powerpoint': 'ppt', 'application/vnd.ms-excel': 'excel', 'aplication/zip': 'zpi', } } export function filterArr(arr) { return arr.filter(item => item.flag !== false); } src/views/chatHome/chatHomeIndex/MobileChat.vue
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,457 @@ <template> <div class="mobile-chat-wrapper" style="height: 91vh;"> <div class="chat-history"> <div class="chat-content" ref="chatContent"> <div class="chat-wrapper" v-for="(item, index) in chatList" :key="index"> <div class="chat-friend" v-if="item.uid !== '1001'"> <div class="info-time"> <img :src="item.headImg" alt="" /> <span>{{ item.name }}</span> <span>{{ item.time }}</span> </div> <div class="chat-text" v-if="item.chatType == 0"> <template v-if="isSend && index === chatList.length - 1"> <span class="flash_cursor"></span> </template> <template v-else> <pre>{{ item.msg }}</pre> </template> </div> <div class="chat-img" v-if="item.chatType == 1"> <img :src="item.msg" alt="表æ " v-if="item.extend.imgType == 1" style="width: 100px; height: 100px" /> <el-image :src="item.msg" :preview-src-list="srcImgList" v-else> </el-image> </div> <div class="chat-img" v-if="item.chatType == 2"> <div class="word-file"> <FileCard :fileType="item.extend.fileType" :file="item.msg"></FileCard> </div> </div> </div> <div class="chat-me" v-else> <div class="info-time"> <span>{{ item.name }}</span> <span>{{ item.time }}</span> <img :src="item.headImg" alt="" /> </div> <div class="chat-text" v-if="item.chatType == 0"> {{ item.msg }} </div> <div class="chat-img" v-if="item.chatType == 1"> <img :src="item.msg" alt="表æ " v-if="item.extend.imgType == 1" style="width: 100px; height: 100px" /> <el-image style="max-width: 300px; border-radius: 10px" :src="item.msg" :preview-src-list="srcImgList" v-else> </el-image> </div> <div class="chat-img" v-if="item.chatType == 2"> <div class="word-file"> <FileCard :fileType="item.extend.fileType" :file="item.msg"></FileCard> </div> </div> </div> </div> </div> </div> <!-- <div class="chat-input-wrapper">--> <!-- <div style="display: flex; align-items: center">--> <!-- <input v-model="inputMsg" @change="sendText" class="input-text" autofocus placeholder="ç»DeepSeekåéæ¶æ¯" />--> <!-- <img class="send-icon" src="@/assets/img/emoji/rocket.png" alt="" @click="sendText" />--> <!-- </div>--> <!-- </div>--> </div> </template> <script setup> import { ref, reactive, onMounted, nextTick,onActivated } from 'vue' import { useRoute } from 'vue-router' import { animation } from '@/utils/util' import chatGPTHeadImg from '@/assets/img/head_portrait1.png' import headPortrait from '@/assets/img/head_portrait.jpg' import FileCard from '@/components/FileCard.vue' import { ElMessage } from "element-plus" // å®ä¹ååºå¼æ°æ® const route = useRoute() const chatContent = ref(null) const ws = ref(null) const chatList = ref([ { headImg: chatGPTHeadImg, name: 'å°æº', time: new Date().toLocaleTimeString(), msg: ' å°æºä¸ºæ¨æå¡', chatType: 0, uid: '1002' } ]) const inputMsg = ref('') const isSend = ref(false) const fileList = ref([]) const isProcessing = ref(false) const loading = ref(false) const srcImgList = ref([]) // å é¤å¾ç const deleteImg = (index) => { if (index >= 0 && index < fileList.value.length) { fileList.value.splice(index, 1) } } // WebSocketæ¶æ¯æ¥æ¶ const websocketonmessage = (e) => { const redata = JSON.parse(e.data) //æ°æ®æ¥æ¶ let chatGPT = { headImg: headPortrait, name: 'DeepSeek', time: new Date().toLocaleTimeString(), msg: redata[0].text, chatType: 0, //ä¿¡æ¯ç±»åï¼0æåï¼1å¾ç uid: '1002' //uid } sendMsg(chatGPT) isSend.value = false } // WebSocketåéæ¶æ¯ const websocketsend = (Data) => { console.log("å³å°åéæ¶æ¯", Data) if (ws.value && ws.value.readyState === WebSocket.OPEN) { console.log("åéæ¶æ¯", ws.value) console.log("åéæ¶æ¯", Data) let fileUrls = fileList.value.map(item => item.file.fileUrl) //æ°æ®åé ws.value.send(Data + ":" + fileUrls.join(",")) fileList.value = [] inputMsg.value = '' } } // åéææ¬æ¶æ¯ const sendText = () => { if (inputMsg.value) { let chatMsg = { headImg: headPortrait, name: 'å§é¾', time: new Date().toLocaleTimeString(), msg: inputMsg.value, chatType: 0, //ä¿¡æ¯ç±»åï¼0æåï¼1å¾ç uid: '1001' //uid } sendMsg(chatMsg) let chatGPT = { headImg: headPortrait, name: 'DeepSeek', time: new Date().toLocaleTimeString(), msg: "", chatType: 0, //ä¿¡æ¯ç±»åï¼0æåï¼1å¾ç uid: '1002' //uid } chatList.value.push(chatGPT) // å°æ¥æ¶å°çæ¶æ¯åå¨å° messages æ°ç» inputMsg.value = '' loading.value = true isSend.value = true websocketsend(chatMsg.msg) } else { ElMessage({ message: 'æ¶æ¯ä¸è½ä¸ºç©ºå¦~', type: 'warning' }) } } // åéä¿¡æ¯ const sendMsg = (msgList) => { chatList.value.push(msgList) scrollBottom() } // è·åçªå£é«åº¦å¹¶æ»å¨è³æåºå± const scrollBottom = () => { nextTick(() => { const scrollDom = chatContent.value animation(scrollDom, scrollDom.scrollHeight - scrollDom.offsetHeight) }) } // ç»ä»¶æè½½æ¶æ§è¡ onActivated(() => { chatList.value = [] chatList.value.push({ headImg: chatGPTHeadImg, name: 'å°æº', time: new Date().toLocaleTimeString(), msg: 'å°æºä¸ºæ¨æå¡', chatType: 0, uid: '1002' }) chatList.value.push({ headImg: chatGPTHeadImg, name: 'å§é¾', time: new Date().toLocaleTimeString(), msg: route.query.keyWord, chatType: 0, uid: '1001' }) // æ·»å ä¸ä¸ªç©ºçå夿¶æ¯å ä½ const replyMsg = { headImg: chatGPTHeadImg, name: 'å°æº', time: new Date().toLocaleTimeString(), msg: '', chatType: 0, uid: '1002' } chatList.value.push(replyMsg) scrollBottom() // å¦æææ¥è¯¢å ³é®åï¼åæ¨¡ææµå¼è¾åº if (route.query.keyWord) { simulateStreamingOutput(replyMsg) } }) // æ¨¡ææµå¼è¾åº const simulateStreamingOutput = (msgObj) => { // çæ0.8-1.8ç§ä¹é´çéæºå»¶è¿ const delay = Math.random() * 1000 + 800 // 模æåå¤å 容ï¼å®é åºç¨ä¸åºä»APIè·åï¼ const responseText = `å ³äº"${route.query.keyWord}"çé®é¢ï¼ææ¥ä¸ºæ¨è§£çï¼\n\nè¿æ¯ä¸ä¸ªç¤ºä¾åå¤å 容ï¼å±ç¤ºæµå¼è¾åºææãå¨å®é åºç¨ä¸ï¼è¿é伿¯æ¥èªAIççå®åå¤å 容ã\n\n请ç¨çï¼ææ£å¨æ´çç¸å ³ä¿¡æ¯...` isSend.value = true let index = 0 const interval = setInterval(() => { isSend.value = true if (index < responseText.length) { msgObj.msg += responseText.charAt(index) index++ isSend.value = false scrollBottom() } else { clearInterval(interval) isSend.value = false } }, 50) // æ¯50msè¾åºä¸ä¸ªåç¬¦ï¼æ¨¡ææµå¼ææ } </script> <style lang="scss" scoped> .mobile-chat-wrapper { display: flex; flex-direction: column; overflow: hidden; height: 91vh; position: relative; background-color: white; .chat-history { flex: 1 1 0; overflow-y: auto; } .chat-input-wrapper { padding: 8px 16px 8px 8px; position: absolute; left: 0; right: 0; bottom: 0; .file-tt{ flex-direction: column; width: 200px; display: flex; padding: 5px; border-radius: 5px; margin-right: 5px; background: #cacaca; .file-item{ width: 200px; overflow:hidden; word-wrap: break-word; text-overflow:ellipsis; display:-webkit-box; -webkit-box-orient:vertical; -webkit-line-clamp:2; } } .send-icon { height: 40px; margin-left: 16px; } .input-text{ font-size: 18px; width: 100%; border-radius: 20px; height: 80px; padding-left: 10px; //padding-top: 10px; border: none; color: black; /* ä¿®æ¹ææ¬é¢è²ä¸ºç½è² */ background-color: #f5f4f4; /* ä¿®æ¹èæ¯é¢è²ä¸ºæ·±ç°è² */ } } .chat-content { width: 100%; height: 80%; overflow-y: scroll; padding: 20px; box-sizing: border-box; &::-webkit-scrollbar { width: 0; /* Safari,Chrome éèæ»å¨æ¡ */ height: 0; /* Safari,Chrome éèæ»å¨æ¡ */ display: none; /* ç§»å¨ç«¯ãpad ä¸Safariï¼Chromeï¼éèæ»å¨æ¡ */ } .chat-wrapper { position: relative; word-break: break-all; .chat-friend { width: 100%; float: left; margin-bottom: 20px; display: flex; flex-direction: column; justify-content: flex-start; align-items: flex-start; .chat-text { max-width: 90%; padding: 20px; border-radius: 20px 20px 20px 5px; background-color: rgb(245, 248, 248); color: black; &:hover { background-color: rgb(232, 232, 232); } pre { white-space: break-spaces; } } .chat-img { img { width: 100px; height: 100px; } } .info-time { margin: 10px 0; color: black; font-size: 14px; img { width: 30px; height: 30px; border-radius: 50%; vertical-align: middle; margin-right: 10px; } span:last-child { color: rgb(101, 104, 115); margin-left: 10px; vertical-align: middle; } } } .chat-me { width: 100%; float: right; margin-bottom: 20px; position: relative; display: flex; flex-direction: column; justify-content: flex-end; align-items: flex-end; .chat-text { float: right; max-width: 90%; padding: 20px; border-radius: 20px 20px 5px 20px; background-color: rgb(29, 144, 245); color: #fff; &:hover { background-color: rgb(26, 129, 219); } } .chat-img { img { max-width: 300px; max-height: 200px; border-radius: 10px; } } .info-time { margin: 10px 0; color: black; font-size: 14px; display: flex; justify-content: flex-end; img { width: 30px; height: 30px; border-radius: 50%; vertical-align: middle; margin-left: 10px; } span { line-height: 30px; } span:first-child { color: rgb(101, 104, 115); margin-right: 10px; vertical-align: middle; } } } } } .flash_cursor { width: 20px; height: 30px; display: inline-block; background: #d6e3f5; opacity: 1; animation: glow 800ms ease-out infinite alternate; } @keyframes glow { 0% { opacity: 1; } 25% { opacity: 0.5; } 50% { opacity: 0; } 75% { opacity: 0.5; } 100% { opacity: 1; } } } </style> src/views/chatHome/chatHomeIndex/home.vue
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,190 @@ <template> <div class="home"> <div style="background: white;color: black;font-size: 30px;" class="logo"> <div class="logo-one" style="font-weight: bold"> <!-- <img src="/src/assets/img/logo.png" style="width: 50px;height: 50px;margin: 0 10px" />--> <div><i>æ·®å䏿¹å»é¢éå¢DeepSeekåºç¨å¹³å°</i></div> </div> <div class="input"> <input type="text" v-model="keyWord" class="input-text" placeholder="ç»DeepSeekåéæ¶æ¯" @keyup.enter="sendMsg" /> <div style="font-size: 13px;color: #808080;display: flex;justify-content: space-between;padding: 10px;"> <div style="display: flex;justify-content: center;align-items: center;"> <!-- <div style="display: flex;justify-content: center;align-items: center;">--> <!-- <img src="/src/assets/img/logo.png" style="width: 15px;height: 15px;margin: 0 5px" />--> <!-- <span>深度æè(R1)</span>--> <!-- </div>--> <!-- <div style="display: flex;justify-content: center;align-items: center;">--> <!-- <img src="/src/assets/img/logo.png" style="width: 15px;height: 15px;margin: 0 5px" />--> <!-- <span>èç½æç´¢</span>--> <!-- </div>--> </div> <div style="display: flex;justify-content: center;align-items: center;margin-right: 5px;"> <!-- <img src="/src/assets/img/logo.png" style="width: 25px;height: 25px;margin: 0 5px" />--> <img src="@/assets/img/emoji/rocket.png" style="width: 25px;height: 25px;margin: 0 5px" @click="sendMsg"/> </div> </div> </div> <div style="width: 780px;"> <div style="font-weight: bold;margin: 30px 0;">ç鍿¨è</div> <div class="keywords"> <div class="keywordss" @click="sendMsgDefault(keyWordOne)"> <p class="fontSize aaa">{{keyWordOne}}</p> <p class="fontSize">éæ©ç§ç©º:æ ¹æ®ç æ éæ©ç¸åºçç§å®¤(å¦å ç§ãå¤ç§ãå¿ç§ç)</p> <p class="fontSize">æå·æ¹å¼:ç°åºæå·:å¨å»é¢æå·çªå£æéåçãçº¿ä¸æå·:éè¿å»é¢å®ç½ãå¾®</p> <p class="fontSize">ä¿¡å ¬ä¼å·æç¬¬ä¸æ¹å¹³å°é¢çº¦...</p> </div> <div class="keywordss" @click="sendMsgDefault(keyWordTwo)"> <p class="fontSize aaa">{{keyWordTwo}}</p> <p class="fontSize">æ®éç æ¿:æ¢è§æ¶é®ä¸è¬ä¸ºæ¯å¤©ä¸å10:00-12:00ï¼ä¸å14:00-20.00ãæ¯æ¬¡æ¢è§äºº</p> <p class="fontSize">æ°ä¸è¶ è¿2äººï¼æ¢è§æ¶é´ä¸è¶ è¿30åéã</p> <p class="fontSize">éççæ¤å®¤(1CU):æ¢è§æ¶é®è¾çï¼é常为æ¯å¤©15:00-16:00ãæ¢è§äººæ°.</p> </div> </div> <div class="keywords"> <div class="keywordss" @click="sendMsgDefault(keyWordFive)"> <p class="fontSize aaa">{{keyWordFive}}</p> <p class="fontSize">鿩使£å¥é¤:æ ¹æ®ä¸ªäººéæ±éæ©åºç¡å¥è½»æä¸é¡¹æ£æå¥ã</p> <p class="fontSize">é¢çº¦æ¹å¼:线ä¸é¢çº¦:éè¿å»é¢å®ç½ãå¾®ä¿¡å ¬ä¼å·æç¬¬ä¸æ¹å¹³å°é¢çº¦ãçµè¯è±«</p> <p class="fontSize">约:æ¨æå»é¢ä½æ£ä¸å¿çµè¯è¿è¡é¢çº¦ãç°åºé¢çº¦:ç´æ¥å°ä½æ£ä¸å¿</p> </div> <div class="keywordss" @click="sendMsgDefault(keyWordSix)"> <p class="fontSize aaa">{{keyWordSix}}</p> <p class="fontSize">å»ç确认åºé¢:主治å»çè¯ä¼°æ£è ç æ åï¼å¼å ·åºé¢ã</p> <p class="fontSize">ç»ç®è´¹ç¨:æ£è æå®¶å±æºå¸¦ä½é¢æ¼éåãå»ä¿å¡çææå°åºé¢ç»ç®çªå£åçãæ ¸</p> <p class="fontSize">å¯¹è´¹ç¨æç»ï¼æ¯ä»èªè´¹é¨åæåçå»ä¿æ¥é..</p> </div> </div> <div class="keywords"> <div class="keywordss" @click="sendMsgDefault(keyWordServen)"> <p class="fontSize aaa">{{keyWordServen}}</p> <p class="fontSize">é¢å æè¯:ç´æ¥åå»é¢å»å¡ç§ææ£è æå¡ä¸å¿åæ é®é¢ãå¡«åæè¯è¡¨ï¼æä¾è¯¦ç»</p> <p class="fontSize">æ åµåè¯æ®(å¦ç åãå½é³ç)ã</p> <p class="fontSize">ä¸çº§é¨é¨æè¯:åå½å°å«çè½åº·å§å伿å»ççº çº·è°è§£å§å伿è¯ãæ¨æâ¦</p> </div> <div class="keywordss" @click="sendMsgDefault(keyWordEight)"> <p class="fontSize aaa">{{keyWordEight}}</p> <p class="fontSize">ç³è¯·è½¬é¢:æ£è æå®¶å±å主治å»çæåºè½¬é¢ç³è¯·ãå»çè¯ä¼°ç æ ï¼ç¡®è®¤æ¯å¦éè¦</p> <p class="fontSize">转é¢ã</p> <p class="fontSize">å¼å ·è½¬é¢è¯æ:主治å»çå¼å ·è½¬é¢è¯æï¼è¯´æè½¬é¢åå åç æ ..â¦</p> </div> </div> </div> </div> <div></div> </div> </template> <script setup> import { ref,onMounted } from "vue"; import {useRoute,useRouter} from "vue-router" const route = useRoute(); const router = useRouter(); const keyWord = ref(''); const keyWordOne = ref('å»é¢æå·æµç¨æ¯ææ ·ç?'); const keyWordTwo = ref('å»é¢æ¢è§æ¶é®æåªäºè§å®?'); const keyWordFive = ref('å»é¢å¦ä½é¢çº¦ä½æ£?'); const keyWordSix = ref('å»é¢å¦ä½åçåºé¢æç»?'); const keyWordServen = ref('å»é¢å¦ä½æè¯å»çæå¡è´¨é?'); const keyWordEight = ref('å»é¢å¦ä½åçè½¬é¢æç»?'); onMounted(() => { // const script = document.createElement('script'); // script.src = '/src/assets/js/index.js'; // // script.type = 'module' // script.onload = () => { // console.log('index.js å·²å è½½'); // }; // document.head.appendChild(script); }); const sendMsg = () => { router.push({ path: '/main/MobileChat',query:{ keyWord: keyWord.value} }) } const sendMsgDefault = (value) => { router.push({ path: '/main/MobileChat',query:{ keyWord: value} }) } </script> <style lang="scss" scoped> .home { width: 100%; height: 91vh; display: flex; flex-direction: column; align-items: center; .logo { display: flex; justify-content: center; align-items: center; flex-direction: column; z-index: 99; width: 100%; height: 100%; color: #fff; cursor: pointer; overflow: hidden; background-color: #F0F6F9; .keywords { display: flex; width: 100%; height: 90px; line-height: 80px; justify-content: space-between; margin: 10px 0; .keywordss { box-shadow: 0px 2px 5px #b8b8b8; width: 48%; background: #e0edfc; border-radius: 10px; .aaa { font-weight: bold; font-size: 12px; } .fontSize { font-size: 10px; height: 15px; line-height: 15px; margin: 6px; } } } .logo-one { display: flex; justify-content: center; align-items: center; margin-bottom: 20px; } .input { width: 780px; height: 150px; background: #f5f4f4; border-radius: 20px; .input-text { font-size: 18px; width: 568px; border-radius: 20px 20px 0 0; height: 90px; padding-left: 10px; border: none; color: black; background-color: #f5f4f4; } .input-text:focus { outline: none; border: none; } } } } </style>