Skip to content
GitLab
Projects
Groups
Snippets
/
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Sign in / Register
Toggle navigation
Menu
Open sidebar
水玉婷
ai-wechat
Commits
4a8d1aff
Commit
4a8d1aff
authored
Feb 05, 2026
by
水玉婷
Browse files
feat:点击消息直接放在输入框里
parent
9266ba84
Changes
2
Hide whitespace changes
Inline
Side-by-side
src/views/components/AiChat.vue
View file @
4a8d1aff
...
...
@@ -50,14 +50,8 @@
/>
</
template
>
<!-- 普通内容块 -->
<div
v-else
class=
"message-inner-box"
>
<div
v-else
class=
"message-inner-box"
@
click=
"msg.messageType === 'sent' ? handleMessageClick(msg, item) : null"
>
<div
v-html=
"item.content"
></div>
<!-- 复制按钮 -->
<div
v-if=
"msg.messageType === 'sent'"
class=
"message-actions"
>
<a-button
class=
"copy-button"
@
click=
"copyMessage(msg)"
title=
"复制"
>
<copy-outlined
/>
</a-button>
</div>
</div>
<!-- 思考过程框 -->
<div
v-if=
"item.hasThinkBox"
class=
"think-box-wrapper"
>
...
...
@@ -520,50 +514,55 @@ const retrySendMessage = async (messageIndex: number) => {
});
};
// 复制消息
const
copyMessage
=
async
(
message
:
Message
)
=>
{
// 处理消息点击 - 将消息内容放到输入框
const
handleMessageClick
=
(
message
:
Message
,
block
:
any
)
=>
{
// 只处理文字消息,不处理音频、图表等特殊消息
if
(
block
.
audioData
||
block
.
chartData
)
{
return
;
}
try
{
// 提取消息中的
所有
文本内容
let
textTo
Copy
=
''
;
// 提取消息中的文本内容
let
textTo
Input
=
''
;
if
(
message
.
contentBlocks
&&
message
.
contentBlocks
.
length
>
0
)
{
message
.
contentBlocks
.
forEach
(
block
=>
{
// 跳过非文字内容块
if
(
block
.
audioData
||
block
.
chartData
)
{
return
;
}
if
(
block
.
content
)
{
// 移除HTML标签,只保留纯文本
const
textContent
=
block
.
content
.
replace
(
/<
[^
>
]
*>/g
,
''
).
trim
();
if
(
textContent
)
{
textTo
Copy
+=
textContent
+
'
\n
'
;
textTo
Input
+=
textContent
+
'
\n
'
;
}
}
});
}
// 如果没有内容,使用原始内容
if
(
!
textTo
Copy
.
trim
()
&&
message
.
originalContent
)
{
textTo
Copy
=
message
.
originalContent
;
if
(
!
textTo
Input
.
trim
()
&&
message
.
originalContent
)
{
textTo
Input
=
message
.
originalContent
;
}
if
(
textToCopy
.
trim
())
{
await
navigator
.
clipboard
.
writeText
(
textToCopy
.
trim
());
// 复制成功提示
antdMessage
.
success
(
'
消息已复制到剪贴板
'
);
}
else
{
antdMessage
.
warning
(
'
没有可复制的内容
'
);
if
(
textToInput
.
trim
())
{
// 将内容设置到输入框
messageText
.
value
=
textToInput
.
trim
();
// 自动调整输入框高度
adjustTextareaHeight
();
// 聚焦到输入框
if
(
textarea
.
value
)
{
textarea
.
value
.
focus
();
}
// 提示用户
antdMessage
.
success
(
'
消息内容已放入输入框
'
);
}
}
catch
(
error
)
{
console
.
error
(
'
复制失败:
'
,
error
);
// 备用方案:使用传统的execCommand方法
try
{
const
textArea
=
document
.
createElement
(
'
textarea
'
);
textArea
.
value
=
message
.
originalContent
||
''
;
document
.
body
.
appendChild
(
textArea
);
textArea
.
select
();
document
.
execCommand
(
'
copy
'
);
document
.
body
.
removeChild
(
textArea
);
antdMessage
.
success
(
'
消息已复制到剪贴板
'
);
}
catch
(
fallbackError
)
{
console
.
error
(
'
备用复制方法也失败:
'
,
fallbackError
);
}
console
.
error
(
'
处理消息点击失败:
'
,
error
);
}
};
...
...
src/views/components/style.less
View file @
4a8d1aff
...
...
@@ -294,17 +294,6 @@ li {
.message.sent .message-content {
background: #5B8AFE;
color: @white;
.message-inner-box {
display: flex;
.copy-button {
margin-left: 8px;
width: 24px;
height: 24px;
color: #fff;
background: none;
border: none;
}
}
}
// 图表块样式
...
...
Write
Preview
Supports
Markdown
0%
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment