import request from '@/utils/http' function normalizeText(value) { return typeof value === 'string' ? value.trim() : value } function hasValue(value) { return value !== '' && value !== null && value !== undefined } function normalizeIds(ids) { if (Array.isArray(ids)) { return ids .map((id) => String(id).trim()) .filter(Boolean) .join(',') } if (ids === null || ids === undefined) { return '' } return String(ids).trim() } function normalizeNumber(value, fallback = void 0) { if (!hasValue(value)) { return fallback } const parsed = Number(value) return Number.isNaN(parsed) ? fallback : parsed } function toOptionalNumber(value) { return hasValue(value) ? Number(value) : void 0 } function toNumberOr(value, fallback) { return hasValue(value) ? Number(value) : fallback } function buildNumberField(key, value) { return hasValue(value) ? { [key]: Number(value) } : {} } function normalizeTypeIds(typeIds = []) { if (Array.isArray(typeIds)) { return typeIds .map((item) => normalizeNumber(item, void 0)) .filter((item) => item !== void 0 && item !== null) } if (typeof typeIds === 'string' && typeIds.trim()) { return typeIds .split(',') .map((item) => normalizeNumber(item, void 0)) .filter((item) => item !== void 0 && item !== null) } return [] } function filterParams(params = {}, ignoredKeys = []) { return Object.fromEntries( Object.entries(params) .filter(([key, value]) => { if (ignoredKeys.includes(key)) return false if (value === undefined || value === null) return false if (typeof value === 'string' && value.trim() === '') return false return true }) .map(([key, value]) => [key, normalizeText(value)]) ) } export function buildLocPageParams(params = {}) { return { current: params.current || 1, pageSize: params.pageSize || params.size || 20, ...filterParams(params, ['current', 'pageSize', 'size']) } } export function buildLocSearchParams(params = {}) { const searchParams = { condition: normalizeText(params.condition), warehouseId: toOptionalNumber(params.warehouseId), areaId: toOptionalNumber(params.areaId), code: normalizeText(params.code), useStatus: normalizeText(params.useStatus), row: toOptionalNumber(params.row), col: toOptionalNumber(params.col), lev: toOptionalNumber(params.lev), channel: toOptionalNumber(params.channel), status: toOptionalNumber(params.status), barcode: normalizeText(params.barcode), memo: normalizeText(params.memo) } return Object.fromEntries(Object.entries(searchParams).filter(([, value]) => hasValue(value))) } export function buildLocSavePayload(formData = {}) { return { ...buildNumberField('id', formData.id), ...buildNumberField('version', formData.version), ...buildNumberField('warehouseId', formData.warehouseId), ...buildNumberField('areaId', formData.areaId), code: normalizeText(formData.code) || '', typeIds: normalizeTypeIds(formData.typeIds), ...buildNumberField('flagLogic', formData.flagLogic), fucAtrrs: normalizeText(formData.fucAtrrs) || '', barcode: normalizeText(formData.barcode) || '', unit: normalizeText(formData.unit) || '', ...buildNumberField('length', formData.length), ...buildNumberField('height', formData.height), ...buildNumberField('width', formData.width), ...buildNumberField('row', formData.row), ...buildNumberField('col', formData.col), ...buildNumberField('lev', formData.lev), ...buildNumberField('channel', formData.channel), ...buildNumberField('maxParts', formData.maxParts), ...buildNumberField('maxPack', formData.maxPack), useStatus: normalizeText(formData.useStatus) || 'O', ...buildNumberField('flagLabelMange', formData.flagLabelMange), locAttrs: normalizeText(formData.locAttrs) || '', status: toNumberOr(formData.status, 1), memo: normalizeText(formData.memo) || '' } } export function fetchLocPage(params = {}) { return request.post({ url: '/loc/page', params: buildLocPageParams(params) }) } export function fetchGetLocDetail(id) { return request.get({ url: `/loc/${id}` }) } export function fetchGetLocMany(ids) { return request.post({ url: `/loc/many/${normalizeIds(ids)}` }) } export function fetchSaveLoc(params = {}) { return request.post({ url: '/loc/save', params: buildLocSavePayload(params) }) } export function fetchUpdateLoc(params = {}) { return request.post({ url: '/loc/update', params: buildLocSavePayload(params) }) } export function fetchDeleteLoc(ids) { return request.post({ url: `/loc/remove/${normalizeIds(ids)}` }) } export function fetchLocQuery(condition = '') { return request.post({ url: '/loc/query', params: { condition: normalizeText(condition) } }) } export function fetchLocTypeList() { return request.post({ url: '/locType/list', data: {} }) } export function fetchWarehouseList() { return request.post({ url: '/warehouse/list', data: {} }) } export function fetchWarehouseAreasList() { return request.post({ url: '/warehouseAreas/list', data: {} }) } export async function fetchExportLocReport(payload = {}, options = {}) { return fetch(`${import.meta.env.VITE_API_URL}/loc/export`, { method: 'POST', headers: { 'Content-Type': 'application/json', ...(options.headers || {}) }, body: JSON.stringify(payload) }) }