import request from '@/utils/request' /** 仓库模块 API 基础路径 */ const API_BASE = '/warehouse' /** * 标准化列表接口返回的数据格式 * 处理后端返回的不同数据结构,统一转换为 { list, total } 格式 * @param {Object} payload - 接口返回的原始响应对象,通常包含 data 字段 * @param {*} payload.data - 实际数据,可能是数组或包含 list/total 的对象 * @returns {{ list: Array, total: number }} 标准化后的列表数据 */ const normalizeListResponse = (payload) => { const data = payload?.data // 无数据时返回空列表 if (!data) { return { list: [], total: 0 } } // 如果 data 直接是数组,则将其作为列表,总数即为数组长度 if (Array.isArray(data)) { return { list: data, total: data.length } } // 如果 data 是对象,则尝试提取 list 和 total 字段,并提供默认值 return { list: Array.isArray(data.list) ? data.list : [], total: typeof data.total === 'number' ? data.total : Array.isArray(data.list) ? data.list.length : 0 } } /** * 获取仓库列表(支持分页和筛选) * @param {Object} params - 请求参数 * @param {string} [params.keyword] - 搜索关键字(匹配仓库编码或名称) * @param {string} [params.type] - 仓库类型筛选 * @param {string|number} [params.status] - 仓库状态筛选 * @param {number} [params.page] - 当前页码 * @param {number} [params.pageSize] - 每页条数,最终请求字段为 page_size * @returns {Promise<{ list: Array, total: number }>} 标准化后的仓库列表 */ export const fetchWarehouseList = async ({ keyword, type, status, page, pageSize }) => { const params = { keyword: keyword || undefined, type, status, page: page, page_size: pageSize } const response = await request.get(`${API_BASE}/list`, { params }) return normalizeListResponse(response) } /** * 根据id批量获取仓库信息 */ export const fetchWarehousesByIds = async ({ ids, page, pageSize }) => { // 基础分页参数 const params = { page: page, page_size: pageSize, }; // 将 ids 数组转换为 id[0]=val0&id[1]=val1 形式 if (Array.isArray(ids) && ids.length > 0) { ids.forEach((id, index) => { params[`id[${index}]`] = id; }); } const response = await request.get(`${API_BASE}/list`, { params }); return normalizeListResponse(response); } /** * 获取单个仓库详情 * @param {string|number} id - 仓库 ID * @returns {Promise} 仓库详情对象,若接口无数据则返回 null */ export const fetchWarehouseDetail = async (id) => { const response = await request.get(`${API_BASE}/detail/${id}`) return response?.data || null } /** * 创建新仓库 * @param {Object} warehouse - 待创建的仓库信息 * @returns {Promise} 接口返回的 Promise 对象,包含创建结果 */ export const createWarehouse = async (warehouse) => { return request.post(`${API_BASE}/create`, warehouse) } /** * 更新仓库信息 * @param {Object} warehouse - 包含更新字段的仓库对象(通常需要 id) * @returns {Promise} 接口返回的 Promise 对象,包含更新结果 */ export const updateWarehouse = async (warehouse) => { return request.put(`${API_BASE}/update`, warehouse) } /** * 删除仓库 * @param {Object} warehouse - 要删除的仓库对象(通常包含 id 等标识) * @returns {Promise} 接口返回的 Promise 对象,包含删除结果 */ export const deleteWarehouse = async (warehouse) => { return request.post(`${API_BASE}/delete`, warehouse) } /** * 同步仓库(从旺店通拉取) * @returns {Promise} 接口返回的 Promise 对象 */ export const syncWarehouseFromWdt = async () => { return request.get('/wangdian/query-warehouse') }