daShangDao_psiWebApp/src/api/warehouse.js
97694731 fac91a81e2
Some checks failed
CI / build (18.x) (push) Failing after 33m30s
CI / build (20.x) (push) Failing after 1m35s
CI / deploy-preview (push) Has been skipped
CI / lint (push) Failing after 34s
CI / test (push) Failing after 15s
CI / security (push) Failing after 34s
同步列表
2026-06-29 14:52:02 +08:00

118 lines
3.7 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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')
}