提交 a75f6598 编写于 作者: D DebugIsFalse

fix: 自动滚动问题

上级 3b442069
...@@ -9,7 +9,7 @@ ...@@ -9,7 +9,7 @@
:repo="state.repo" :repo="state.repo"
@update-query="handleUpdateQuery" @update-query="handleUpdateQuery"
/> />
<div class="container min-h-svh max-w-screen-lg 2xl:max-w-screen-xl flex flex-col space-y-6 p-6 mb-6 pb-0" id="scrollElement"> <div class="container min-h-svh max-w-screen-lg 2xl:max-w-screen-xl flex flex-col space-y-6 p-6 mb-6 pb-0" ref="scrollElement">
<template v-for="(item, index) in data" :key="index"> <template v-for="(item, index) in data" :key="index">
<ISearchArticle> <ISearchArticle>
<template #title> <template #title>
...@@ -74,7 +74,8 @@ const historyStatus = ref(200) ...@@ -74,7 +74,8 @@ const historyStatus = ref(200)
const data = ref([]) const data = ref([])
const askingData = ref({ question: $setFirstRecordTitle.value, collapse: true, actions: [], processStatus: 'start' }) const askingData = ref({ question: $setFirstRecordTitle.value, collapse: true, actions: [], processStatus: 'start' })
const recommendQuestions = ref([]) const recommendQuestions = ref([])
let asking = ref(false) const asking = ref(false)
const scrollElement = ref(null)
// demo [{ type: 'search_relate_repo', data: [] }], 右侧推荐图表数据 // demo [{ type: 'search_relate_repo', data: [] }], 右侧推荐图表数据
const askingSidebarCards = ref([]) const askingSidebarCards = ref([])
// 处理ai generate // 处理ai generate
...@@ -161,18 +162,27 @@ function resetAskingData (question) { ...@@ -161,18 +162,27 @@ function resetAskingData (question) {
} }
// 是否停止自动滚动到底部 // 是否停止自动滚动到底部
const isAutoToBottom = ref(true) const isAutoToBottom = ref(true)
watch( () => directions.top, watch(() => directions.top, () => {
() => { if (directions.top) isAutoToBottom.value = false
if (directions.top) { })
isAutoToBottom.value = false watch(() => askingData.value.collapse, (newVal, oldVal) => {
} if (!newVal && asking.value) resetAutoBottom()
})
watch(() => directions.bottom, () => {
if (directions.bottom && asking.value) handleToBottom()
})
function handleToBottom () {
const $target = scrollElement.value
const scrollTop = window.innerHeight + window.scrollY + 30;
const height = $target.parentNode.clientHeight
if (scrollTop >= height) {
isAutoToBottom.value = true
scrollToView()
} }
) }
function scrollToView () { function scrollToView () {
if (!isAutoToBottom.value) return if (!isAutoToBottom.value || !scrollElement.value) return
const $target = document.querySelector('#scrollElement') y.value = scrollElement.value.clientHeight
if (!$target) return
y.value = $target.clientHeight
} }
function createGenerateInitItem (question, regenerate) { function createGenerateInitItem (question, regenerate) {
if (askingData.value.question && !regenerate) { if (askingData.value.question && !regenerate) {
...@@ -195,18 +205,14 @@ function handleContinueAsk (question, regenerate) { ...@@ -195,18 +205,14 @@ function handleContinueAsk (question, regenerate) {
question = regenerate || question question = regenerate || question
generateFetchData(question) generateFetchData(question)
setTimeout(() => { setTimeout(() => {
isAutoToBottom.value = true
scrollToView() scrollToView()
isAutoToBottom.value = true
}) })
} }
function handleReGenerate () { function handleReGenerate () {
const { question } = askingData.value const { question } = askingData.value
handleContinueAsk(question, `根据上述回答,对问题"${question}"重新生成`) handleContinueAsk(question, `根据上述回答,对问题"${question}"重新生成`)
} }
function resetAnsLoading () {
Object.assign(askingData.value, { showActions: true })
}
function resetAutoBottom () { function resetAutoBottom () {
nextTick(() => { nextTick(() => {
isAutoToBottom.value = true isAutoToBottom.value = true
...@@ -236,9 +242,6 @@ function handleFormFetchData (fetchData) { ...@@ -236,9 +242,6 @@ function handleFormFetchData (fetchData) {
} catch(error) { } } catch(error) { }
if (Object.keys(message).length === 0) return if (Object.keys(message).length === 0) return
const { meta, choices, error, code } = message const { meta, choices, error, code } = message
setTimeout(() => {
scrollToView()
})
// 处理403 // 处理403
if (error && code === 403) { if (error && code === 403) {
handleSetNoPermission() handleSetNoPermission()
...@@ -251,6 +254,9 @@ function handleFormFetchData (fetchData) { ...@@ -251,6 +254,9 @@ function handleFormFetchData (fetchData) {
let article = message.choices[0].message.content let article = message.choices[0].message.content
article = Array.isArray(article) ? handleFormatReports(article) : article article = Array.isArray(article) ? handleFormatReports(article) : article
Object.assign(askingData.value, { article, collapse: false, processStatus: 'finish', ansLoading: true }) Object.assign(askingData.value, { article, collapse: false, processStatus: 'finish', ansLoading: true })
nextTick(() => {
scrollToView()
})
return return
} }
if (meta.type !== 'log') return if (meta.type !== 'log') return
...@@ -292,9 +298,8 @@ function handleCreateAiTitle () { ...@@ -292,9 +298,8 @@ function handleCreateAiTitle () {
} }
function handleMessage (event) { function handleMessage (event) {
if (event.data === markedEnd) { if (event.data === markedEnd) {
askingData.value.ansLoading = false Object.assign(askingData.value, { ansLoading: false, showActions: true })
handleCreateAiTitle() handleCreateAiTitle()
resetAnsLoading()
handleStopGenerate() handleStopGenerate()
return return
} }
...@@ -370,5 +375,4 @@ nextTick( () => { ...@@ -370,5 +375,4 @@ nextTick( () => {
asking.value = false; asking.value = false;
} }
}) })
</script> </script>
\ No newline at end of file
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册