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);