fix: 优化 Workbench 会话列表加载
This commit is contained in:
@@ -98,32 +98,30 @@ function formatSessionUpdatedTime(value: string | null | undefined): string {
|
||||
<h2>显式会话</h2>
|
||||
</div>
|
||||
<div class="session-rail-header-actions">
|
||||
<button v-if="!collapsed" id="session-detail-toggle" class="message-detail-button session-detail-button" type="button" aria-label="Session 详情" title="Session 详情" :disabled="showSessionListLoading || !activeTab" @click="detailOpen = true">!</button>
|
||||
<button v-if="!collapsed" id="session-detail-toggle" class="message-detail-button session-detail-button" type="button" aria-label="Session 详情" title="Session 详情" :disabled="!activeTab" @click="detailOpen = true">!</button>
|
||||
<button v-if="!collapsed" id="session-create" class="btn btn-primary btn-sm" type="button" @click="workbench.createSession">新建</button>
|
||||
<button id="session-collapse-toggle" class="btn btn-secondary btn-sm session-collapse-toggle" type="button" :aria-label="collapsed ? '展开 Sessions' : '折叠 Sessions'" :title="collapsed ? '展开 Sessions' : '折叠 Sessions'" :aria-expanded="!collapsed" @click="toggleCollapsed">{{ collapsed ? '›' : '‹' }}</button>
|
||||
</div>
|
||||
</div>
|
||||
<div v-if="!collapsed" class="session-list" id="session-tabs" :data-loading="showSessionListLoading">
|
||||
<LoadingState v-if="showSessionListLoading" class="session-list-loading" label="加载中" />
|
||||
<template v-else>
|
||||
<button v-for="tab in workbench.sessionTabs" :key="tab.sessionId || tab.key" class="session-tab" :data-active="tab.active" :data-running="tab.running" :data-status="tab.status || undefined" :data-projection-health="tab.projectionHealth || undefined" :data-session-id="tab.sessionId || undefined" type="button" :title="tab.tooltip" @click="workbench.selectSession(tab)">
|
||||
<span class="session-tab-title">{{ tab.label }}</span>
|
||||
<span v-if="tab.projectionDiagnosticText" class="session-tab-diagnostic">状态更新异常</span>
|
||||
<time class="session-tab-time" :datetime="tab.updatedAt || tab.startedAt || undefined">{{ formatSessionUpdatedTime(tab.updatedAt || tab.startedAt) }}</time>
|
||||
<LoadingState v-if="showSessionListLoading" class="session-list-refreshing" label="正在加载其他会话" compact />
|
||||
<button v-for="tab in workbench.sessionTabs" :key="tab.sessionId || tab.key" class="session-tab" :data-active="tab.active" :data-running="tab.running" :data-status="tab.status || undefined" :data-projection-health="tab.projectionHealth || undefined" :data-session-id="tab.sessionId || undefined" type="button" :title="tab.tooltip" @click="workbench.selectSession(tab)">
|
||||
<span class="session-tab-title">{{ tab.label }}</span>
|
||||
<span v-if="tab.projectionDiagnosticText" class="session-tab-diagnostic">状态更新异常</span>
|
||||
<time class="session-tab-time" :datetime="tab.updatedAt || tab.startedAt || undefined">{{ formatSessionUpdatedTime(tab.updatedAt || tab.startedAt) }}</time>
|
||||
</button>
|
||||
<p v-if="workbench.sessionTabs.length === 0 && !showSessionListLoading" class="muted-box">没有 session。发送前必须显式新建或选择 session。</p>
|
||||
<div v-if="workbench.sessionTabs.length > 0 && !showSessionListLoading" class="session-list-footer">
|
||||
<button v-if="workbench.sessionListHasMore" id="session-load-more" class="btn btn-secondary btn-sm session-load-more" type="button" :disabled="workbench.sessionListLoadingMore" @click="workbench.loadMoreSessions">
|
||||
{{ workbench.sessionListLoadingMore ? '加载中' : '加载更多' }}
|
||||
</button>
|
||||
<p v-if="workbench.sessionTabs.length === 0" class="muted-box">没有 session。发送前必须显式新建或选择 session。</p>
|
||||
<div v-else class="session-list-footer">
|
||||
<button v-if="workbench.sessionListHasMore" id="session-load-more" class="btn btn-secondary btn-sm session-load-more" type="button" :disabled="workbench.sessionListLoadingMore" @click="workbench.loadMoreSessions">
|
||||
{{ workbench.sessionListLoadingMore ? '加载中' : '加载更多' }}
|
||||
</button>
|
||||
<p v-else id="session-list-complete" class="session-list-terminal">已显示全部 sessions</p>
|
||||
<p v-if="workbench.sessionListLoadMoreError" id="session-load-more-error" class="session-list-error">{{ workbench.sessionListLoadMoreError }}</p>
|
||||
</div>
|
||||
</template>
|
||||
<p v-else id="session-list-complete" class="session-list-terminal">已显示全部 sessions</p>
|
||||
<p v-if="workbench.sessionListLoadMoreError" id="session-load-more-error" class="session-list-error">{{ workbench.sessionListLoadMoreError }}</p>
|
||||
</div>
|
||||
</div>
|
||||
<div v-if="!collapsed" class="session-rail-actions">
|
||||
<button id="session-copy" class="btn btn-secondary btn-sm" type="button" :disabled="showSessionListLoading || !activeTab" @click="copyActive">复制</button>
|
||||
<button id="session-delete" class="btn btn-secondary btn-sm" type="button" :disabled="showSessionListLoading || !activeTab" @click="workbench.deleteCurrentSession">删除当前</button>
|
||||
<button id="session-copy" class="btn btn-secondary btn-sm" type="button" :disabled="!activeTab" @click="copyActive">复制</button>
|
||||
<button id="session-delete" class="btn btn-secondary btn-sm" type="button" :disabled="!activeTab" @click="workbench.deleteCurrentSession">删除当前</button>
|
||||
</div>
|
||||
<div v-if="detailOpen && activeTab" class="workbench-dialog-backdrop" role="presentation" @click.self="detailOpen = false">
|
||||
<section id="session-detail-dialog" class="workbench-dialog" role="dialog" aria-modal="true" aria-labelledby="session-detail-title">
|
||||
|
||||
@@ -268,13 +268,17 @@
|
||||
}
|
||||
|
||||
.session-list[data-loading="true"] {
|
||||
align-content: center;
|
||||
justify-items: center;
|
||||
overflow: hidden;
|
||||
overflow: auto;
|
||||
}
|
||||
|
||||
.session-list-loading {
|
||||
min-height: 120px;
|
||||
.session-list-refreshing {
|
||||
width: 100%;
|
||||
min-height: 32px;
|
||||
justify-content: flex-start;
|
||||
border: 1px solid #bae6fd;
|
||||
border-radius: 6px;
|
||||
background: #f0f9ff;
|
||||
padding: 6px 9px;
|
||||
}
|
||||
|
||||
.conversation-panel {
|
||||
|
||||
Reference in New Issue
Block a user