提交 b46e0652 authored 作者: 朱政's avatar 朱政

feat:优化多智库分析的流式输出显示状态

上级 3f12faf6
......@@ -222,7 +222,7 @@ export async function postReportDomainViewAnalysisStream(data, handlers = {}) {
const msg = JSON.parse(jsonText)
if (typeof onMessage === 'function') onMessage(msg)
if (msg?.type === 'reasoning' && msg?.chunk != null && typeof onReasoningChunk === 'function') {
const c = String(msg.chunk).trim()
const c = String(msg.chunk)
if (c) onReasoningChunk(c)
}
} catch (e) {
......@@ -241,7 +241,7 @@ export async function postReportDomainViewAnalysisStream(data, handlers = {}) {
const msg = JSON.parse(jsonText)
if (typeof onMessage === 'function') onMessage(msg)
if (msg?.type === 'reasoning' && msg?.chunk != null && typeof onReasoningChunk === 'function') {
const c = String(msg.chunk).trim()
const c = String(msg.chunk)
if (c) onReasoningChunk(c)
}
} catch (e) {
......
......@@ -187,9 +187,7 @@
</div>
</div>
<div class="being-analysis-box-content" ref="beingAnalysisContentRef">
<div class="being-analysis-content-line" v-for="(line, idx) in beingAnalysisChunks" :key="idx">
{{ line }}
</div>
<div class="being-analysis-content-text">{{ beingAnalysisContent }}</div>
</div>
</div>
<div v-if="isAnalysisLoading" class="being-analysis-image">
......@@ -326,7 +324,7 @@ const searchPolicy = ref("");
const isBox2 = ref(true)
const isAnalysisLoading = ref(false)
const isBeingAnalysisExpanded = ref(false)
const beingAnalysisChunks = ref([])
const beingAnalysisContent = ref("")
const beingAnalysisContentRef = ref(null)
const activeOpinionTab = ref('consensus')
const toggleBeingAnalysisBox = () => {
......@@ -338,7 +336,7 @@ const scrollBeingAnalysisToBottom = async () => {
if (!el) return
el.scrollTop = el.scrollHeight
}
watch(() => beingAnalysisChunks.value.length, async () => {
watch(() => beingAnalysisContent.value, async () => {
if (!isBeingAnalysisExpanded.value) return
await scrollBeingAnalysisToBottom()
})
......@@ -588,7 +586,7 @@ const handleAnalysis = async () => {
isBox2.value = false
isAnalysisLoading.value = true
isBeingAnalysisExpanded.value = false
beingAnalysisChunks.value = []
beingAnalysisContent.value = ""
domainViewAnalysisRes.value = null
// 每次进入“开始分析”默认回到共识观点,避免上次状态残留导致内容错位
activeOpinionTab.value = 'consensus'
......@@ -600,7 +598,7 @@ const handleBack = () => {
// 返回选择时终止“分析中”展示,恢复空态图
isAnalysisLoading.value = false
isBeingAnalysisExpanded.value = false
beingAnalysisChunks.value = []
beingAnalysisContent.value = ""
// 返回选择时也重置,确保下次进入分析展示一致
activeOpinionTab.value = 'consensus'
}
......@@ -693,7 +691,7 @@ const mergeAnalysisAnswerParts = (parts) => {
const handlePostReportDomainViewAnalysis = async () => {
try {
viewpointDetailByKey.value = {}
beingAnalysisChunks.value = []
beingAnalysisContent.value = ""
const selectedReports = selectedReportList.value || []
const reportEntriesRaw = await Promise.all(
selectedReports.map(async (report) => {
......@@ -798,7 +796,7 @@ const handlePostReportDomainViewAnalysis = async () => {
console.log("智库领域观点分析入参", payload)
const res = await postReportDomainViewAnalysisStream(payload, {
onReasoningChunk: async (chunk) => {
beingAnalysisChunks.value = [...beingAnalysisChunks.value, chunk]
beingAnalysisContent.value += String(chunk)
await scrollBeingAnalysisToBottom()
}
})
......@@ -1103,9 +1101,10 @@ onMounted(async () => {
}
}
.being-analysis-content-line {
.being-analysis-content-text {
line-height: 22px;
white-space: nowrap;
white-space: pre-wrap;
word-break: break-word;
}
.being-analysis-image {
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论