From 4b2f79bd2833ef99aa0c3825b03074be3f2f7196 Mon Sep 17 00:00:00 2001 From: xiangpei <xiangpei@timesnew.cn> Date: 星期五, 28 三月 2025 10:39:46 +0800 Subject: [PATCH] 首页左侧完善 --- src/components/AiChat.vue | 94 ++++++++++++++++++++++++++++++++++++++++------ 1 files changed, 81 insertions(+), 13 deletions(-) diff --git a/src/components/AiChat.vue b/src/components/AiChat.vue index daf8127..a2cca50 100644 --- a/src/components/AiChat.vue +++ b/src/components/AiChat.vue @@ -1,18 +1,36 @@ <template> - <div class="ai-chat-dialog"> + <div style="position: relative;height:calc(100vh - 20px);width: 100%;display: flex;justify-content: center"> <!-- 鑱婂ぉ娑堟伅鍒楄〃 --> <div class="chat-messages"> <div v-for="(message, index) in messages" - :key="index" + :key="message + index" :class="['message', message.role]" + @mouseover="handleMouseEnter(message)" > <div class="avatar"> <img :src="getAvatar(message.role)" alt="avatar" /> </div> <div class="content"> -<!-- <div class="name">{{ getRoleName(message.role) }}</div>--> - <div class="text">{{ message.content }}</div> + <div class="text" :ref="'msg' + index">{{ message.content }}</div> + <div v-if="message.role === 'assistant'"> + <div v-show="msgIndex === message" class="msg-op-list"> + <el-button class="copy" v-show="false"/> + <el-tooltip class="item" effect="dark" content="澶嶅埗" placement="top"> + <i class="el-icon-copy-document msg-op msg-copy" @click="copyText(message.content)"/> + </el-tooltip> + <el-tooltip class="item" effect="dark" content="閲嶆柊鐢熸垚" placement="top"> + <i class="el-icon-refresh msg-op msg-re" @click="reAnswer"/> + </el-tooltip> + </div> + </div> + </div> + <div v-if="message.role === 'user'"> + <div v-show="msgIndex === message" style="display: flex"> + <el-tooltip class="item" effect="dark" content="澶嶅埗" placement="top"> + <i class="el-icon-copy-document msg-op msg-copy" @click="copyText(message.content)"/> + </el-tooltip> + </div> </div> </div> </div> @@ -20,9 +38,8 @@ <!-- 杈撳叆妗� --> <div class="chat-input"> <el-input - style="width: 50%" v-model="inputMessage" - placeholder="璇疯緭鍏ユ秷鎭�" + placeholder="璇疯緭鍏ユ秷鎭紝鎸変笅鍥炶溅鍙戦��" @keyup.native.enter="sendMessage" > <div slot="append"> @@ -37,7 +54,9 @@ </template> <script> +import ClipboardJS from 'clipboard'; import {sendKbMsg} from "@/api/chat"; +import {Message} from "element-ui"; export default { name: 'AiChat', @@ -46,6 +65,10 @@ messages: [ { role: 'assistant', + content: '浣犲ソ锛佹垜鏄綘鐨� AI 鍔╂墜锛屾湁浠�涔堝彲浠ュ府浣犵殑鍚楋紵', + }, + { + role: 'user', content: '浣犲ソ锛佹垜鏄綘鐨� AI 鍔╂墜锛屾湁浠�涔堝彲浠ュ府浣犵殑鍚楋紵', }, ], @@ -72,10 +95,33 @@ max_tokens: 0, prompt_name: "default", return_direct: false - } + }, + msgIndex: null, + msgRole: null }; }, methods: { + handleMouseEnter(msgIndex) { + console.log("榧犳爣绉诲叆", msgIndex) + this.msgIndex = msgIndex + }, + handleMouseLeave() { + console.log("榧犳爣绉婚櫎") + this.msgIndex = null + }, + // 閲嶆柊鐢熸垚 + reAnswer() { + }, + // 澶嶅埗鍐呭 + copyText(content) { + const clipboard = new ClipboardJS('.copy', { + text: () => content + }); + // 瑙﹀彂澶嶅埗锛堥渶瑕佷竴涓殣钘忕殑鎸夐挳锛� + document.querySelector('.copy').click(); + clipboard.destroy(); + Message.success("澶嶅埗鎴愬姛") + }, // 鑾峰彇瑙掕壊澶村儚 getAvatar(role) { const avatars = { @@ -140,17 +186,21 @@ } .chat-messages { - flex: 1; padding: 16px; + margin-top: 14px; overflow-y: auto; + width: 800px; + height: 680px; } .message { display: flex; - margin-bottom: 16px; + margin-bottom: 18px; + min-height: 75px; } .message.user { + align-items: center; flex-direction: row-reverse; } @@ -166,7 +216,7 @@ padding: 8px 12px; border-radius: 8px; background-color: #fff; - box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1); + /*box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);*/ } .message.user .content { @@ -191,13 +241,31 @@ .chat-input { padding: 16px; background-color: #fff; - border-top: 1px solid #ddd; + width: 800px; display: flex; - width: 100%; flex-direction: row; justify-content: center; align-items: center; position: absolute; - bottom: 70px; + bottom: 50px; + left: 50%; /* 灏� div 鐨勫乏杈圭Щ鍔ㄥ埌鐖跺鍣ㄧ殑 50% 浣嶇疆 */ + transform: translateX(-50%); /* 灏� div 鍚戝乏绉诲姩鑷韩瀹藉害鐨� 50% */ +} + +.msg-op-list { + margin-top: 15px; +} +.msg-copy { + font-size: 18px; +} +.msg-re { + font-size: 20px; +} +.msg-op { + color: gray; + margin-right: 5px; +} +.msg-op:hover { + cursor: pointer; } </style> -- Gitblit v1.8.0