feat: 添加面板滑动过渡效果,优化数据库刷新逻辑,调整样式细节

This commit is contained in:
Wenjie Zhang 2026-01-25 23:00:03 +08:00
parent 882a90cb9b
commit 729d2fe6b3
4 changed files with 39 additions and 14 deletions

View File

@ -166,14 +166,16 @@
<!-- Agent Panel Area -->
<div class="agent-panel-wrapper" v-if="isAgentPanelOpen && hasAgentStateContent">
<AgentPanel
:agent-state="currentAgentState"
:thread-id="currentChatId"
@refresh="handleAgentStateRefresh"
@close="toggleAgentPanel"
/>
</div>
<transition name="panel-slide">
<div class="agent-panel-wrapper" v-if="isAgentPanelOpen && hasAgentStateContent">
<AgentPanel
:agent-state="currentAgentState"
:thread-id="currentChatId"
@refresh="handleAgentStateRefresh"
@close="toggleAgentPanel"
/>
</div>
</transition>
</div>
</div>
</div>
@ -1146,6 +1148,7 @@ watch(
flex-direction: column;
overflow-y: auto; /* Scroll is here now */
position: relative;
transition: flex 0.4s ease;
}
.agent-panel-wrapper {
@ -1161,6 +1164,23 @@ watch(
border: 1px solid var(--gray-200);
}
/* Workbench transition animations */
.panel-slide-enter-active,
.panel-slide-leave-active {
transition:
transform 0.4s cubic-bezier(0.34, 1.56, 0.64, 1),
opacity 0.3s ease,
flex 0.4s ease;
}
.panel-slide-enter-from,
.panel-slide-leave-to {
transform: translateX(30px) scale(0.98);
opacity: 0;
flex: 0 0 0; /* Shrink to zero width during transition */
margin-left: -16px; /* Compensate for margin during close */
}
.chat-examples {
padding: 0 50px;
text-align: center;

View File

@ -327,7 +327,6 @@ defineExpose({
justify-self: start;
display: flex;
align-items: center;
margin-right: 8px;
gap: 8px;
}

View File

@ -62,7 +62,7 @@
<a-col :span="12">
<a-form-item
:label="
selectedBenchmark.has_gold_answers ? '答案生成模型' : '答案生成模型(当前基准无需)'
selectedBenchmark.has_gold_answers ? '答案生成模型(可选)' : '答案生成模型(当前基准无需)'
"
>
<ModelSelectorComponent
@ -78,7 +78,7 @@
<a-col :span="12">
<a-form-item
:label="
selectedBenchmark.has_gold_answers ? '答案评判模型' : '答案评判模型(当前基准无需)'
selectedBenchmark.has_gold_answers ? '答案评判模型(可选)' : '答案评判模型(当前基准无需)'
"
>
<ModelSelectorComponent

View File

@ -325,7 +325,7 @@ export const useDatabaseStore = defineStore('database', () => {
}
})
}
await getDatabaseInfo(undefined, true) // Skip query params when adding files
await delayedRefresh() // 延迟1秒后刷新
return true // Indicate success
} else {
message.error(data.message || '处理失败')
@ -357,7 +357,7 @@ export const useDatabaseStore = defineStore('database', () => {
payload: { db_id: databaseId.value, count: fileIds.length }
})
}
await getDatabaseInfo(undefined, true)
await delayedRefresh() // 延迟1秒后刷新
return true
} else {
message.error(data.message || '提交失败')
@ -389,7 +389,7 @@ export const useDatabaseStore = defineStore('database', () => {
payload: { db_id: databaseId.value, count: fileIds.length }
})
}
await getDatabaseInfo(undefined, true)
await delayedRefresh() // 延迟1秒后刷新
return true
} else {
message.error(data.message || '提交失败')
@ -482,6 +482,12 @@ export const useDatabaseStore = defineStore('database', () => {
}
}
// 延时刷新文件理解延迟1秒后刷新
async function delayedRefresh() {
await new Promise((resolve) => setTimeout(resolve, 1000))
await getDatabaseInfo(undefined, true)
}
function toggleAutoRefresh() {
const nextState = !state.autoRefresh
state.autoRefresh = nextState