Skip to content

Commit 92e95b1

Browse files
tsukiga-kireilyingbug
authored andcommitted
fix: batch manage dialog now loads all sessions independently from API
1 parent c989c57 commit 92e95b1

File tree

6 files changed

+50
-25
lines changed

6 files changed

+50
-25
lines changed

frontend/src/components/BatchManageDialog.vue

Lines changed: 46 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,10 @@
1515

1616
<!-- 会话列表 -->
1717
<div class="batch-body">
18-
<div class="session-list" v-if="sessions.length > 0">
18+
<div v-if="loading" class="empty-state">
19+
<t-loading />
20+
</div>
21+
<div class="session-list" v-else-if="sessions.length > 0">
1922
<div
2023
class="session-item"
2124
v-for="item in sessions"
@@ -74,18 +77,12 @@
7477
import { ref, computed, watch } from 'vue'
7578
import { useI18n } from 'vue-i18n'
7679
import { MessagePlugin, DialogPlugin } from 'tdesign-vue-next'
77-
import { batchDelSessions, delSession } from '@/api/chat/index'
80+
import { batchDelSessions, delSession, getSessionsList } from '@/api/chat/index'
7881
7982
const { t } = useI18n()
8083
8184
const props = defineProps<{
8285
visible: boolean
83-
sessions: Array<{
84-
id: string
85-
title: string
86-
created_at?: string
87-
updated_at?: string
88-
}>
8986
}>()
9087
9188
const emit = defineEmits<{
@@ -95,16 +92,50 @@ const emit = defineEmits<{
9592
9693
const selectedIds = ref<string[]>([])
9794
const deleting = ref(false)
95+
const loading = ref(false)
96+
const sessions = ref<Array<{ id: string; title: string; created_at?: string; updated_at?: string }>>([])
9897
9998
const isAllSelected = computed(() =>
100-
props.sessions.length > 0 && selectedIds.value.length === props.sessions.length
99+
sessions.value.length > 0 && selectedIds.value.length === sessions.value.length
101100
)
102101
const isIndeterminate = computed(() =>
103-
selectedIds.value.length > 0 && selectedIds.value.length < props.sessions.length
102+
selectedIds.value.length > 0 && selectedIds.value.length < sessions.value.length
104103
)
105104
105+
// 打开弹窗时拉取全量会话列表
106+
const fetchAllSessions = async () => {
107+
loading.value = true
108+
try {
109+
const allItems: any[] = []
110+
let page = 1
111+
const pageSize = 100
112+
let hasMore = true
113+
while (hasMore) {
114+
const res: any = await getSessionsList(page, pageSize)
115+
const items = res?.data?.items || res?.data || []
116+
allItems.push(...items)
117+
const total = res?.data?.total ?? items.length
118+
hasMore = allItems.length < total
119+
page++
120+
}
121+
sessions.value = allItems.map((s: any) => ({
122+
id: s.id,
123+
title: s.title,
124+
created_at: s.created_at,
125+
updated_at: s.updated_at,
126+
}))
127+
} catch {
128+
sessions.value = []
129+
MessagePlugin.error(t('batchManage.loadFailed') || 'Failed to load sessions')
130+
}
131+
loading.value = false
132+
}
133+
106134
watch(() => props.visible, (val) => {
107-
if (val) selectedIds.value = []
135+
if (val) {
136+
selectedIds.value = []
137+
fetchAllSessions()
138+
}
108139
})
109140
110141
const toggleSelect = (id: string) => {
@@ -117,7 +148,7 @@ const toggleSelect = (id: string) => {
117148
}
118149
119150
const toggleSelectAll = (checked: boolean) => {
120-
selectedIds.value = checked ? props.sessions.map(s => s.id) : []
151+
selectedIds.value = checked ? sessions.value.map(s => s.id) : []
121152
}
122153
123154
const formatTime = (dateStr?: string) => {
@@ -138,6 +169,8 @@ const handleDeleteSingle = (item: { id: string; title: string }) => {
138169
try {
139170
const res: any = await delSession(item.id)
140171
if (res && res.success === true) {
172+
sessions.value = sessions.value.filter(s => s.id !== item.id)
173+
selectedIds.value = selectedIds.value.filter(id => id !== item.id)
141174
emit('deleted', [item.id])
142175
MessagePlugin.success(t('batchManage.deleteSuccess'))
143176
} else {
@@ -168,6 +201,7 @@ const handleBatchDelete = () => {
168201
const ids = [...selectedIds.value]
169202
const res: any = await batchDelSessions(ids)
170203
if (res && res.success === true) {
204+
sessions.value = sessions.value.filter(s => !ids.includes(s.id))
171205
emit('deleted', ids)
172206
selectedIds.value = []
173207
MessagePlugin.success(t('batchManage.deleteSuccess'))

frontend/src/components/menu.vue

Lines changed: 0 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,6 @@
5858
<!-- 批量管理对话框 -->
5959
<BatchManageDialog
6060
v-model:visible="batchManageVisible"
61-
:sessions="allSessions"
6261
@deleted="handleBatchDeleted"
6362
/>
6463

@@ -105,18 +104,6 @@ let activeSubmenu = ref<string>('');
105104
// 批量管理状态
106105
const batchManageVisible = ref(false);
107106
108-
// 所有会话列表(用于批量管理对话框)
109-
const allSessions = computed(() => {
110-
const chatMenu = (menuArr.value as unknown as MenuItem[]).find((item: MenuItem) => item.path === 'creatChat');
111-
if (!chatMenu || !chatMenu.children) return [];
112-
return chatMenu.children.map((s: any) => ({
113-
id: s.id,
114-
title: s.title,
115-
created_at: s.created_at,
116-
updated_at: s.updated_at,
117-
}));
118-
});
119-
120107
// 是否可以访问所有租户
121108
const canAccessAllTenants = computed(() => authStore.canAccessAllTenants);
122109

frontend/src/i18n/locales/en-US.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ export default {
2525
deleteSuccess: 'Deleted successfully',
2626
deleteFailed: 'Delete failed, please try again later',
2727
noSelection: 'Please select at least one conversation',
28+
loadFailed: 'Failed to load conversations',
2829
},
2930
listSpaceSidebar: {
3031
title: 'Filter',

frontend/src/i18n/locales/ko-KR.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ export default {
2525
deleteSuccess: "삭제 성공",
2626
deleteFailed: "삭제 실패, 나중에 다시 시도해 주세요",
2727
noSelection: "최소 하나의 대화를 선택해 주세요",
28+
loadFailed: "대화 목록 로드 실패",
2829
},
2930
listSpaceSidebar: {
3031
title: "필터",

frontend/src/i18n/locales/ru-RU.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ export default {
2323
deleteSuccess: 'Успешно удалено',
2424
deleteFailed: 'Ошибка удаления, попробуйте позже',
2525
noSelection: 'Выберите хотя бы один диалог',
26+
loadFailed: 'Не удалось загрузить список диалогов',
2627
},
2728
knowledgeBase: {
2829
title: 'База знаний',

frontend/src/i18n/locales/zh-CN.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ export default {
2525
deleteSuccess: "删除成功",
2626
deleteFailed: "删除失败,请稍后再试",
2727
noSelection: "请至少选择一条对话",
28+
loadFailed: "加载会话列表失败",
2829
},
2930
listSpaceSidebar: {
3031
title: "筛选",

0 commit comments

Comments
 (0)