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
6e8231d0
Commit
6e8231d0
authored
Jan 29, 2026
by
水玉婷
Browse files
feat:重发消息代码简化
parent
2c5a0d3e
Changes
1
Hide whitespace changes
Inline
Side-by-side
src/views/components/AiChat.vue
View file @
6e8231d0
...
...
@@ -501,135 +501,14 @@ const retrySendMessage = async (messageIndex: number) => {
console
.
log
(
'
重发消息:
'
,
originalMessage
.
originalContent
,
originalMessage
.
originalMessageType
);
//
提前声明 newMessageData 以便在 catch 块中访问
let
newMessageData
:
any
=
null
;
//
重置原失败消息状态为正常
originalMessage
.
status
=
0
;
try
{
// 创建新消息进行重发,保留原失败消息
// const messageContent = '出差标准'
const
messageContent
=
originalMessage
.
originalContent
;
const
messageType
=
originalMessage
.
originalMessageType
;
originalMessage
.
status
=
0
;
// 重置原失败消息状态为正常
loading
.
value
=
true
;
isAIResponding
.
value
=
false
;
isInThinkingMode
.
value
=
false
;
currentAIResponse
.
value
=
null
;
// 创建新消息
newMessageData
=
{
messageType
:
'
sent
'
,
avatar
:
'
我
'
,
recordId
:
''
,
promptTokens
:
0
,
completionTokens
:
0
,
totalTokens
:
0
,
date
:
dayjs
().
format
(
'
HH:mm
'
),
contentBlocks
:
[]
as
any
[],
status
:
1
,
// 发送中状态
originalContent
:
messageContent
,
// 保存原始内容用于重发
originalMessageType
:
messageType
// 保存消息类型用于重发
};
switch
(
messageType
)
{
case
'
text
'
:
newMessageData
.
contentBlocks
.
push
({
content
:
templateService
.
generateTextTemplate
(
messageContent
),
thinkContent
:
''
,
hasThinkBox
:
false
,
thinkBoxExpanded
:
false
,
});
break
;
case
'
audio
'
:
newMessageData
.
contentBlocks
.
push
({
audioData
:
{
src
:
messageContent
,
durationTime
:
0
},
thinkContent
:
''
,
hasThinkBox
:
false
,
thinkBoxExpanded
:
false
,
});
break
;
default
:
loading
.
value
=
false
;
return
;
}
// 添加新消息到聊天记录
messages
.
value
.
push
(
newMessageData
);
await
nextTick
();
scrollToBottom
();
// 调用外部传入的消息发送函数
if
(
props
.
onMessageSend
)
{
const
sendContent
=
messageType
===
'
audio
'
?
messageContent
:
messageContent
;
console
.
log
(
`调用外部发送函数重发消息`
,
sendContent
);
await
props
.
onMessageSend
(
sendContent
);
// 发送成功后更新新消息状态为已发送,并重置原失败消息状态为正常
newMessageData
.
status
=
2
;
}
else
{
// 默认的API调用逻辑
console
.
log
(
`默认API调用逻辑重发消息`
,
dialogSessionId
.
value
);
const
requestData
=
messageType
===
'
audio
'
?
{
questionLocalAudioFilePath
:
messageContent
,
audioDuration
:
0
,
...
props
.
params
,
}
:
{
question
:
messageContent
,
...
props
.
params
,
};
const
response
=
await
fetch
(
`
${
import
.
meta
.
env
.
VITE_SSE_PATH
}
/ask/app/
${
props
.
params
?.
appId
}
`
,
{
method
:
'
POST
'
,
headers
:
{
'
Content-Type
'
:
'
application/json
'
,
'
token
'
:
props
.
token
,
'
x-session-id
'
:
props
?.
token
,
'
x-app-code
'
:
props
.
appCode
||
''
},
body
:
JSON
.
stringify
(
requestData
)
});
const
data
=
await
response
.
json
();
if
(
data
.
code
===
0
)
{
console
.
log
(
`重发成功`
);
// 发送成功,更新新消息状态为已发送,并重置原失败消息状态为正常
newMessageData
.
status
=
2
;
originalMessage
.
status
=
0
;
// 重置原失败消息状态为正常
}
else
if
(
data
.
code
===
-
100
)
{
// 处理-100错误码,触发重连
sseService
.
reconnectSSE
(
dialogSessionId
.
value
);
// 设置新消息为失败状态
newMessageData
.
status
=
-
1
;
const
simulatedMessage
=
{
message
:
'
检测到SSE连接错误,触发重连,请重新发送消息
'
,
status
:
-
1
,
// 错误状态
type
:
0
// 错误类型
};
// 调用handleSSEMessage处理模拟消息
return
handleSSEMessage
(
simulatedMessage
,
true
);
}
else
{
// 其他错误码,设置新消息为失败状态
newMessageData
.
status
=
-
1
;
console
.
error
(
`重发失败,错误码:
${
data
.
code
}
`
);
}
}
}
catch
(
error
)
{
console
.
error
(
'
重发消息失败:
'
,
error
);
// 如果创建了新消息但发送失败,可以将其状态设置为失败
if
(
newMessageData
)
{
newMessageData
.
status
=
-
1
;
}
}
finally
{
loading
.
value
=
false
;
}
await
sendMessage
(
originalMessage
.
originalMessageType
,
{
message
:
originalMessage
.
originalContent
,
audioUrl
:
originalMessage
.
originalMessageType
===
'
audio
'
?
originalMessage
.
originalContent
:
undefined
,
durationTime
:
0
});
};
// 重新连接SSE
...
...
@@ -803,64 +682,6 @@ const simulateLineChartMessage = () => {
const
simulateTips
=
()
=>
{
console
.
log
(
'
模拟总结消息
'
);
// 模拟提示消息
// const simulatedMessage = {
// message: `# 四川公司费用总额分析报告 📊
// ## 一、数据概览 📌
// 根据提供的数据,四川公司2025年1月至3月的费用总额如下:
// | 年月 | 本期费用总额(元) | 同期费用总额(元) | 同比变化(%) |
// |--------|------------------|------------------|--------------|
// | 202501 | 10,682,961.54 | 12,240,780.34 | -12.74% |
// | 202502 | 25,086,103.67 | 26,530,119.19 | -5.45% |
// | 202503 | 39,060,157.77 | 38,533,655.20 | +1.36% |
// ## 二、趋势分析 📈
// ### 1. **费用总额同比变化分析**
// - **2025年1月**:费用总额同比下降 **12.74%**,降幅较大,可能与年初预算控制、业务收缩或成本优化有关。
// - **2025年2月**:费用总额同比下降 **5.45%**,降幅有所收窄,但仍处于下降趋势。
// - **2025年3月**:费用总额同比**增长1.36%**,首次出现同比增长,可能与业务回暖、市场拓展或季节性因素有关。
// ### 2. **费用总额环比变化分析**
// - **1月至2月**:费用总额环比增长 **135.63%**,增长显著,可能与业务活动增加、项目启动或季节性支出有关。
// - **2月至3月**:费用总额环比增长 **55.72%**,增长速度有所放缓,但仍保持增长趋势。
// ## 三、问题识别 🔍
// ### 1. **费用总额同比持续下降(1-2月)**
// - **问题点**:1月至2月费用总额同比持续下降,可能表明公司在成本控制方面采取了较为严格的措施,但也可能影响业务的正常开展。
// - **建议**:需进一步分析费用下降的具体原因,是否为成本优化、业务收缩或预算执行偏差,避免因过度压缩费用影响业务发展。
// ### 2. **3月费用总额同比首次增长**
// - **问题点**:3月费用总额同比首次增长,但增长幅度较小(1.36%),可能表明业务恢复速度较慢,或费用增长主要集中在某些特定项目或部门。
// - **建议**:需关注费用增长的结构,分析增长是否合理,是否与业务增长匹配,避免费用增长脱离实际业务需求。
// ### 3. **缺乏预算和年初数据**
// - **问题点**:数据中“年初费用总额”和“预算费用总额”均为 'null',缺乏预算和年初数据,无法进行预算执行情况分析。
// - **建议**:建议补充预算和年初费用数据,以便更全面地评估费用控制和预算执行情况。
// ## 四、总结与建议 📌
// ### ✅ **总结**
// - 四川公司2025年1月至3月费用总额呈现“先降后升”的趋势,1-2月费用总额同比下降,3月首次出现同比增长。
// - 费用总额同比变化较大,需关注费用控制与业务发展的平衡。
// ### 📌 **建议**
// 1. **加强预算管理**:补充预算和年初费用数据,以便进行预算执行分析。
// 2. **优化费用结构**:分析费用增长的结构,确保费用增长与业务发展相匹配。
// 3. **关注费用下降原因**:对1-2月费用总额同比下降的原因进行深入分析,避免因过度压缩费用影响业务发展。
// 4. **加强成本控制**:在费用增长阶段,需加强成本控制,确保费用增长合理、可控。
// ---
// 📊 **数据可视化建议**(如需进一步分析,可制作折线图、柱状图等,展示费用总额同比、环比变化趋势)。`,
// status: 3, // 图表数据
// type: 6 // 总结消息
// };
const
simulatedMessage
=
{
message
:
`# 四川公司费用总额分析📊
...
...
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