118 lines
3.7 KiB
JavaScript
118 lines
3.7 KiB
JavaScript
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<Object|null>} 仓库详情对象,若接口无数据则返回 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')
|
||
} |