From 4e09829dcdcd6877b1d618e0d0975f9c1fdf1ff7 Mon Sep 17 00:00:00 2001 From: laogao Date: Thu, 22 Oct 2026 12:56:42 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E4=BF=AE=E5=A4=8D=20App=20=E5=88=86?= =?UTF-8?q?=E9=A1=B5=E5=AD=97=E6=AE=B5=20list/items=20=E4=B8=8D=E4=B8=80?= =?UTF-8?q?=E8=87=B4=E5=AF=BC=E8=87=B4=E5=88=97=E8=A1=A8=E6=81=92=E7=A9=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 根因:后端 PageResultSchema 统一返回 items 字段,但 App 端 PageResult 类型与 useListPage 等消费点硬编码读取 list,导致工单评论、AI 会话、首页公告等既有列表页数据恒为空。 影响面:工单详情评论分页、AI 助手会话列表、首页公告,以及所有复用 useListPage 的通用列表页(工单列表、公告列表等)。 修复: - global.d.ts 的 PageResult 字段 list → items,与后端对齐 - useListPage.ts 的 data 提取器改读 items - ticket-detail / chat / 首页 index 三处消费点 res.list → res.items --- frontend/app/src/composables/useListPage.ts | 4 ++-- frontend/app/src/pages/index/index.vue | 2 +- frontend/app/src/subPages/module_ai/chat/index.vue | 2 +- .../app/src/subPages/module_system/ticket-detail/index.vue | 2 +- frontend/app/src/types/global.d.ts | 4 ++-- 5 files changed, 7 insertions(+), 7 deletions(-) diff --git a/frontend/app/src/composables/useListPage.ts b/frontend/app/src/composables/useListPage.ts index 5020e55f2..68b4895d3 100644 --- a/frontend/app/src/composables/useListPage.ts +++ b/frontend/app/src/composables/useListPage.ts @@ -48,8 +48,8 @@ export function useListPage(options watchingStates: [], preloadNextPage: false, preloadPreviousPage: false, - // 响应已由 http 层 responded 解包为业务结构 { list, total } - data: res => (res as PageResult).list ?? [], + // 响应已由 http 层 responded 解包为业务结构 { items, total } + data: res => (res as PageResult).items ?? [], total: res => (res as PageResult).total ?? 0, }, ) diff --git a/frontend/app/src/pages/index/index.vue b/frontend/app/src/pages/index/index.vue index 69d386aa0..fdf079bec 100644 --- a/frontend/app/src/pages/index/index.vue +++ b/frontend/app/src/pages/index/index.vue @@ -289,7 +289,7 @@ async function loadData() { async function loadNotices() { try { const res = await NoticeAPI.getPage({ page_no: 1, page_size: 3, status: 1 }) - recentNotices.value = res.list || [] + recentNotices.value = res.items || [] } catch { /* silent */ } } diff --git a/frontend/app/src/subPages/module_ai/chat/index.vue b/frontend/app/src/subPages/module_ai/chat/index.vue index 4b8f27209..f4b3452ba 100644 --- a/frontend/app/src/subPages/module_ai/chat/index.vue +++ b/frontend/app/src/subPages/module_ai/chat/index.vue @@ -60,7 +60,7 @@ async function loadSessions() { loading.value = true try { const res = await ChatAPI.getSessions() - sessions.value = res.list || [] + sessions.value = res.items || [] } catch { sessions.value = [] diff --git a/frontend/app/src/subPages/module_system/ticket-detail/index.vue b/frontend/app/src/subPages/module_system/ticket-detail/index.vue index 0097e3a84..31b173123 100644 --- a/frontend/app/src/subPages/module_system/ticket-detail/index.vue +++ b/frontend/app/src/subPages/module_system/ticket-detail/index.vue @@ -52,7 +52,7 @@ async function loadComments() { return try { const res = await TicketAPI.getComments(ticketId.value, { page_no: commentPage.page_no, page_size: commentPage.page_size }) - comments.value = res.list || [] + comments.value = res.items || [] commentTotal.value = res.total || 0 } catch (e) { diff --git a/frontend/app/src/types/global.d.ts b/frontend/app/src/types/global.d.ts index dfbaabb52..f12bda511 100644 --- a/frontend/app/src/types/global.d.ts +++ b/frontend/app/src/types/global.d.ts @@ -83,8 +83,8 @@ declare global { * 分页响应对象(列表接口 `data` 统一为该结构) */ interface PageResult { - /** 数据列表 */ - list: T[] + /** 数据列表(后端 PageResultSchema 统一返回 items,而非 list) */ + items: T[] /** 总数 */ total: number page_no?: number