From b002c50d8186ad4fcc6838ec085cba22d25ef15b Mon Sep 17 00:00:00 2001 From: DXC Date: Fri, 24 Apr 2026 15:03:01 +0800 Subject: [PATCH] =?UTF-8?q?fix(material):=20=E4=BF=AE=E5=A4=8Drows.find?= =?UTF-8?q?=E6=95=B0=E6=8D=AE=E7=BB=93=E6=9E=84=E5=85=BC=E5=AE=B9=E9=97=AE?= =?UTF-8?q?=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- inventory-web/src/views/material/list.vue | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/inventory-web/src/views/material/list.vue b/inventory-web/src/views/material/list.vue index 0a7e473..d77f192 100644 --- a/inventory-web/src/views/material/list.vue +++ b/inventory-web/src/views/material/list.vue @@ -1601,15 +1601,23 @@ onMounted(() => { // 为了防止 API 不支持直接传 id,我们改用 keyword 搜索(因为大部分 list 接口都支持 keyword) // 或者直接请求列表,拿到第一页数据进行比对 listMaterialBase({ page: 1, pageSize: 50, id: editId }).then((res: any) => { - const rows = res?.data?.list ?? res?.data ?? []; - console.log('API 返回的匹配数据:', rows); + // 1. 尝试获取各种可能的数据结构 + let rawData = res?.data?.list ?? res?.data?.items ?? res?.data ?? []; - // 尝试在返回的列表中精确寻找这个 ID + // 2. 如果后端聪明地直接返回了单条数据(对象),把它包装成数组 + if (!Array.isArray(rawData) && typeof rawData === 'object' && rawData !== null) { + rawData = [rawData]; + } + + // 3. 终极兜底,确保 rows 绝对是数组 + const rows = Array.isArray(rawData) ? rawData : []; + console.log('兼容处理后的数组数据:', rows); + + // 4. 寻找目标行并弹窗 const targetRow = rows.find((r: any) => r.id === editId) || rows[0]; if (targetRow) { console.log('找到目标物料,准备弹窗:', targetRow); - // 加大延迟,确保 DOM 和弹窗组件完全挂载 setTimeout(() => { handleEdit(targetRow); }, 800);