const STATUS_META = { 1: { text: '正常', type: 'success', bool: true }, 0: { text: '冻结', type: 'danger', bool: false } } const USE_STATUS_META = { O: { text: '空库', type: 'success' }, D: { text: '空板', type: 'info' }, R: { text: '预约出库', type: 'warning' }, S: { text: '预约入库', type: 'warning' }, X: { text: '禁用', type: 'danger' }, F: { text: '在库', type: 'primary' } } export const LOC_REPORT_TITLE = '库位报表' export const LOC_REPORT_STYLE = { titleAlign: 'center', titleLevel: 'strong', orientation: 'portrait', density: 'compact', showSequence: true } function normalizeText(value) { return String(value ?? '').trim() } function normalizeNumber(value, fallback = void 0) { if (value === '' || value === null || value === undefined) { return fallback } const parsed = Number(value) return Number.isNaN(parsed) ? fallback : parsed } function normalizeFlagText(value) { if (value === 1 || value === '1' || value === true || value === '是') { return '是' } if (value === 0 || value === '0' || value === false || value === '否') { return '否' } return normalizeText(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 [] } export function createLocSearchState() { return { condition: '', warehouseId: '', areaId: '', code: '', useStatus: '', row: '', col: '', lev: '', channel: '', status: '', barcode: '', memo: '' } } export function createLocFormState() { return { id: void 0, version: void 0, warehouseId: void 0, areaId: void 0, code: '', typeIds: [], flagLogic: 0, fucAtrrs: '', barcode: '', unit: '', length: void 0, height: void 0, width: void 0, row: void 0, col: void 0, lev: void 0, channel: void 0, maxParts: void 0, maxPack: void 0, useStatus: 'O', flagLabelMange: 0, locAttrs: '', status: 1, memo: '' } } export function getLocPaginationKey() { return { current: 'current', size: 'pageSize' } } export function getLocStatusOptions() { return [ { label: '正常', value: 1 }, { label: '冻结', value: 0 } ] } export function getLocUseStatusOptions() { return [ { label: '空库', value: 'O' }, { label: '空板', value: 'D' }, { label: '预约出库', value: 'R' }, { label: '预约入库', value: 'S' }, { label: '禁用', value: 'X' }, { label: '在库', value: 'F' } ] } export function getLocBinaryOptions() { return [ { label: '否', value: 0 }, { label: '是', value: 1 } ] } export function getLocStatusMeta(status) { if (status === true || Number(status) === 1) { return STATUS_META[1] } if (status === false || Number(status) === 0) { return STATUS_META[0] } return { text: '未知', type: 'info', bool: false } } export function getLocUseStatusMeta(useStatus) { if (!useStatus) { return { text: '未知', type: 'info' } } return USE_STATUS_META[String(useStatus).trim()] || { text: String(useStatus), type: 'info' } } export function buildLocSearchParams(params = {}) { const searchParams = { condition: normalizeText(params.condition), warehouseId: params.warehouseId !== undefined && params.warehouseId !== null && params.warehouseId !== '' ? Number(params.warehouseId) : void 0, areaId: params.areaId !== undefined && params.areaId !== null && params.areaId !== '' ? Number(params.areaId) : void 0, code: normalizeText(params.code), useStatus: normalizeText(params.useStatus), row: params.row !== undefined && params.row !== null && params.row !== '' ? Number(params.row) : void 0, col: params.col !== undefined && params.col !== null && params.col !== '' ? Number(params.col) : void 0, lev: params.lev !== undefined && params.lev !== null && params.lev !== '' ? Number(params.lev) : void 0, channel: params.channel !== undefined && params.channel !== null && params.channel !== '' ? Number(params.channel) : void 0, status: params.status !== undefined && params.status !== null && params.status !== '' ? Number(params.status) : void 0, barcode: normalizeText(params.barcode), memo: normalizeText(params.memo) } return Object.fromEntries( Object.entries(searchParams).filter(([, value]) => value !== '' && value !== void 0 && value !== null) ) } export function buildLocPageQueryParams(params = {}) { return { current: params.current || 1, pageSize: params.pageSize || params.size || 20, ...buildLocSearchParams(params) } } export function buildLocSavePayload(formData = {}) { return { ...(formData.id !== undefined && formData.id !== null && formData.id !== '' ? { id: Number(formData.id) } : {}), ...(formData.version !== undefined && formData.version !== null && formData.version !== '' ? { version: Number(formData.version) } : {}), ...(formData.warehouseId !== undefined && formData.warehouseId !== null && formData.warehouseId !== '' ? { warehouseId: Number(formData.warehouseId) } : {}), ...(formData.areaId !== undefined && formData.areaId !== null && formData.areaId !== '' ? { areaId: Number(formData.areaId) } : {}), code: normalizeText(formData.code) || '', typeIds: normalizeTypeIds(formData.typeIds), ...(formData.flagLogic !== undefined && formData.flagLogic !== null && formData.flagLogic !== '' ? { flagLogic: Number(formData.flagLogic) } : {}), fucAtrrs: normalizeText(formData.fucAtrrs) || '', barcode: normalizeText(formData.barcode) || '', unit: normalizeText(formData.unit) || '', ...(formData.length !== undefined && formData.length !== null && formData.length !== '' ? { length: Number(formData.length) } : {}), ...(formData.height !== undefined && formData.height !== null && formData.height !== '' ? { height: Number(formData.height) } : {}), ...(formData.width !== undefined && formData.width !== null && formData.width !== '' ? { width: Number(formData.width) } : {}), ...(formData.row !== undefined && formData.row !== null && formData.row !== '' ? { row: Number(formData.row) } : {}), ...(formData.col !== undefined && formData.col !== null && formData.col !== '' ? { col: Number(formData.col) } : {}), ...(formData.lev !== undefined && formData.lev !== null && formData.lev !== '' ? { lev: Number(formData.lev) } : {}), ...(formData.channel !== undefined && formData.channel !== null && formData.channel !== '' ? { channel: Number(formData.channel) } : {}), ...(formData.maxParts !== undefined && formData.maxParts !== null && formData.maxParts !== '' ? { maxParts: Number(formData.maxParts) } : {}), ...(formData.maxPack !== undefined && formData.maxPack !== null && formData.maxPack !== '' ? { maxPack: Number(formData.maxPack) } : {}), useStatus: normalizeText(formData.useStatus) || 'O', ...(formData.flagLabelMange !== undefined && formData.flagLabelMange !== null && formData.flagLabelMange !== '' ? { flagLabelMange: Number(formData.flagLabelMange) } : {}), locAttrs: normalizeText(formData.locAttrs) || '', status: formData.status !== undefined && formData.status !== null && formData.status !== '' ? Number(formData.status) : 1, memo: normalizeText(formData.memo) || '' } } export function buildLocDialogModel(record = {}) { return { ...createLocFormState(), ...(record.id !== undefined && record.id !== null && record.id !== '' ? { id: Number(record.id) } : {}), ...(record.version !== undefined && record.version !== null && record.version !== '' ? { version: Number(record.version) } : {}), warehouseId: record.warehouseId !== undefined && record.warehouseId !== null && record.warehouseId !== '' ? Number(record.warehouseId) : void 0, areaId: record.areaId !== undefined && record.areaId !== null && record.areaId !== '' ? Number(record.areaId) : void 0, code: normalizeText(record.code || ''), typeIds: normalizeTypeIds(record.typeIds ?? record.type ?? ''), flagLogic: record.flagLogic !== undefined && record.flagLogic !== null && record.flagLogic !== '' ? Number(record.flagLogic) : 0, fucAtrrs: normalizeText(record.fucAtrrs || ''), barcode: normalizeText(record.barcode || ''), unit: normalizeText(record.unit || ''), length: record.length !== undefined && record.length !== null && record.length !== '' ? Number(record.length) : void 0, height: record.height !== undefined && record.height !== null && record.height !== '' ? Number(record.height) : void 0, width: record.width !== undefined && record.width !== null && record.width !== '' ? Number(record.width) : void 0, row: record.row !== undefined && record.row !== null && record.row !== '' ? Number(record.row) : void 0, col: record.col !== undefined && record.col !== null && record.col !== '' ? Number(record.col) : void 0, lev: record.lev !== undefined && record.lev !== null && record.lev !== '' ? Number(record.lev) : void 0, channel: record.channel !== undefined && record.channel !== null && record.channel !== '' ? Number(record.channel) : void 0, maxParts: record.maxParts !== undefined && record.maxParts !== null && record.maxParts !== '' ? Number(record.maxParts) : void 0, maxPack: record.maxPack !== undefined && record.maxPack !== null && record.maxPack !== '' ? Number(record.maxPack) : void 0, useStatus: normalizeText(record.useStatus || 'O') || 'O', flagLabelMange: record.flagLabelMange !== undefined && record.flagLabelMange !== null && record.flagLabelMange !== '' ? Number(record.flagLabelMange) : 0, locAttrs: normalizeText(record.locAttrs || ''), status: record.status !== undefined && record.status !== null ? Number(record.status) : 1, memo: normalizeText(record.memo || '') } } export function normalizeLocDetailRecord(record = {}) { const statusMeta = getLocStatusMeta(record.statusBool ?? record.status) const useStatusMeta = getLocUseStatusMeta(record.useStatus) const typeIds = normalizeTypeIds(record.typeIds ?? record.type ?? '') return { ...record, warehouseName: normalizeText(record.warehouseId$ || record.warehouseName || ''), areaName: normalizeText(record.areaId$ || record.areaName || ''), typeIds, typeIdsText: normalizeText(record.typeIds$ || record.type$ || record.typeText || record.type || ''), code: normalizeText(record.code || ''), barcode: normalizeText(record.barcode || ''), unit: normalizeText(record.unit || ''), fucAtrrs: normalizeText(record.fucAtrrs || ''), locAttrs: normalizeText(record.locAttrs || ''), memo: normalizeText(record.memo || ''), flagLogicText: normalizeFlagText(record.flagLogic), flagLabelMangeText: normalizeFlagText(record.flagLabelMange), useStatusText: useStatusMeta.text, useStatusType: useStatusMeta.type, statusText: statusMeta.text, statusType: statusMeta.type, statusBool: record.statusBool !== void 0 ? Boolean(record.statusBool) : statusMeta.bool, row: record.row !== undefined && record.row !== null ? Number(record.row) : void 0, col: record.col !== undefined && record.col !== null ? Number(record.col) : void 0, lev: record.lev !== undefined && record.lev !== null ? Number(record.lev) : void 0, channel: record.channel !== undefined && record.channel !== null ? Number(record.channel) : void 0, length: record.length !== undefined && record.length !== null ? Number(record.length) : void 0, height: record.height !== undefined && record.height !== null ? Number(record.height) : void 0, width: record.width !== undefined && record.width !== null ? Number(record.width) : void 0, maxParts: record.maxParts !== undefined && record.maxParts !== null ? Number(record.maxParts) : void 0, maxPack: record.maxPack !== undefined && record.maxPack !== null ? Number(record.maxPack) : void 0, createByText: normalizeText(record.createBy$ || record.createByText || ''), createTimeText: normalizeText(record.createTime$ || record.createTime || ''), updateByText: normalizeText(record.updateBy$ || record.updateByText || ''), updateTimeText: normalizeText(record.updateTime$ || record.updateTime || '') } } export function normalizeLocListRow(record = {}) { return normalizeLocDetailRecord(record) } export function buildLocPrintRows(records = []) { if (!Array.isArray(records)) { return [] } return records.map((record) => normalizeLocListRow(record)) } export function buildLocReportMeta({ previewMeta = {}, count = 0, orientation = LOC_REPORT_STYLE.orientation } = {}) { return { reportTitle: LOC_REPORT_TITLE, reportDate: previewMeta.reportDate, printedAt: previewMeta.printedAt, operator: previewMeta.operator, count, reportStyle: { ...LOC_REPORT_STYLE, orientation } } } export function resolveLocWarehouseOptions(records = []) { if (!Array.isArray(records)) { return [] } return records .map((item) => { if (!item || typeof item !== 'object') { return null } const value = item.id ?? item.value if (value === void 0 || value === null || value === '') { return null } return { value: Number(value), label: normalizeText(item.name || item.code || `仓库 ${value}`) } }) .filter(Boolean) } export function resolveLocAreaOptions(records = []) { if (!Array.isArray(records)) { return [] } return records .map((item) => { if (!item || typeof item !== 'object') { return null } const value = item.id ?? item.value if (value === void 0 || value === null || value === '') { return null } return { value: Number(value), label: normalizeText(item.name || item.code || `库区 ${value}`), warehouseId: item.warehouseId !== undefined && item.warehouseId !== null && item.warehouseId !== '' ? Number(item.warehouseId) : void 0 } }) .filter(Boolean) } export function resolveLocTypeOptions(records = []) { if (!Array.isArray(records)) { return [] } return records .map((item) => { if (!item || typeof item !== 'object') { return null } const value = item.id ?? item.value if (value === void 0 || value === null || value === '') { return null } return { value: Number(value), label: normalizeText(item.name || item.code || item.label || `类型 ${value}`) } }) .filter(Boolean) }