88 @click =" likeThisResponse(msg)"
99 :title =" feedbackState.hasSubmitted && feedbackState.rating === 'like' ? '已点赞' : '点赞'"
1010 >
11- <LikeFilled v-if =" feedbackState.rating === 'like'" />
12- <LikeOutlined v-else />
11+ <ThumbsUp size =" 12" :fill =" feedbackState.rating === 'like' ? 'currentColor' : 'none'" />
1312 </span >
1413 <span
1514 class =" item btn"
1615 :class =" { 'disabled': feedbackState.hasSubmitted }"
1716 @click =" dislikeThisResponse(msg)"
1817 :title =" feedbackState.hasSubmitted && feedbackState.rating === 'dislike' ? '已点踩' : '点踩'"
1918 >
20- <DislikeFilled v-if =" feedbackState.rating === 'dislike'" />
21- <DislikeOutlined v-else />
19+ <ThumbsDown size =" 12" :fill =" feedbackState.rating === 'dislike' ? 'currentColor' : 'none'" />
2220 </span >
2321 <!-- 模型名称 -->
2422 <span v-if =" showKey('model') && getModelName(msg)" class =" item" @click =" console.log(msg)" >
25- <BulbOutlined /> {{ getModelName(msg) }}
23+ <Bot size = " 12 " /> {{ getModelName(msg) }}
2624 </span >
2725 <!-- 复制 -->
2826 <span
2927 v-if =" showKey('copy')"
30- class =" item btn" @click =" copyText(msg.content)" title =" 复制" ><CopyOutlined />
28+ class =" item btn" @click =" copyText(msg.content)" title =" 复制" >
29+ <Check v-if =" isCopied" size =" 12" />
30+ <Copy v-else size =" 12" />
3131 </span >
3232
3333 <!-- 重试 -->
3434 <span
3535 v-if =" showKey('regenerate')"
36- class =" item btn" @click =" regenerateMessage()" title =" 重新生成" ><ReloadOutlined />
36+ class =" item btn" @click =" regenerateMessage()" title =" 重新生成" ><RotateCcw size = " 12 " />
3737 </span >
3838 </div >
3939 </div >
@@ -63,14 +63,13 @@ import { ref, computed, reactive, onMounted } from 'vue'
6363import { useClipboard } from ' @vueuse/core'
6464import { message } from ' ant-design-vue'
6565import {
66- CopyOutlined ,
67- BulbOutlined ,
68- ReloadOutlined ,
69- LikeOutlined ,
70- LikeFilled ,
71- DislikeOutlined ,
72- DislikeFilled ,
73- } from ' @ant-design/icons-vue'
66+ ThumbsUp ,
67+ ThumbsDown ,
68+ Bot ,
69+ Copy ,
70+ Check ,
71+ RotateCcw ,
72+ } from ' lucide-vue-next'
7473import { agentApi } from ' @/apis'
7574
7675const emit = defineEmits ([' retry' , ' openRefs' ]);
@@ -110,12 +109,19 @@ const showKey = (key) => {
110109 return props .showRefs .includes (key)
111110}
112111
112+ // 复制状态
113+ const isCopied = ref (false )
114+
113115// 定义 copy 方法
114116const copyText = async (text ) => {
115117 if (isSupported) {
116118 try {
117119 await copy (text)
118120 message .success (' 文本已复制到剪贴板' )
121+ isCopied .value = true
122+ setTimeout (() => {
123+ isCopied .value = false
124+ }, 2000 )
119125 } catch (error) {
120126 console .error (' 复制失败:' , error)
121127 message .error (' 复制失败,请手动复制' )
@@ -255,11 +261,16 @@ const cancelDislike = () => {
255261 .item {
256262 background: var (-- gray- 50 );
257263 color: var (-- gray- 700 );
258- padding: 2px 8px ;
264+ padding: 6px 8px ;
259265 border- radius: 8px ;
260266 font- size: 13px ;
261267 user- select: none;
262268 transition: all 0 .2s ease;
269+ display: inline- flex;
270+ align- items: center;
271+ justify- content: center;
272+ gap: 4px ;
273+ line- height: 1 ;
263274
264275 & .btn {
265276 cursor: pointer;
@@ -272,8 +283,6 @@ const cancelDislike = () => {
272283
273284 // Disabled state - when feedback has been submitted
274285 & .disabled {
275- cursor: not- allowed;
276- opacity: 0.7 ;
277286
278287 & : hover {
279288 background: var (-- gray- 50 );
0 commit comments