import { DEFAULT_REQUEST_GUARD_TIMEOUT, withRequestGuard } from '../../../utils/sys/requestGuard.js'
|
|
const EMPTY_SUMMARY = {
|
pendingIn: 0,
|
pendingOut: 0,
|
completedIn: 0,
|
completedOut: 0,
|
taskQty: 0
|
}
|
const DASHBOARD_SECTION_TIMEOUT = DEFAULT_REQUEST_GUARD_TIMEOUT
|
|
function buildDashboardDeadStockQuery() {
|
return {
|
current: 1,
|
pageSize: 10,
|
orderBy: 'create_time asc'
|
}
|
}
|
|
function buildDashboardTaskQuery() {
|
return {
|
current: 1,
|
pageSize: 100,
|
orderBy: 'sort desc'
|
}
|
}
|
|
function unwrapDashboardPayload(payload) {
|
let current = payload
|
|
while (
|
current &&
|
typeof current === 'object' &&
|
typeof current.code === 'number' &&
|
Object.prototype.hasOwnProperty.call(current, 'data')
|
) {
|
current = current.data
|
}
|
|
return current || {}
|
}
|
|
function normalizeDashboardSummary(payload) {
|
const data = unwrapDashboardPayload(payload)
|
return {
|
pendingIn: normalizeNumber(data?.inAnf),
|
pendingOut: normalizeNumber(data?.outAnf),
|
completedIn: normalizeNumber(data?.taskIn),
|
completedOut: normalizeNumber(data?.taskOut),
|
taskQty: normalizeNumber(data?.taskQty)
|
}
|
}
|
|
function normalizeDashboardTrend(payload) {
|
const data = unwrapDashboardPayload(payload)
|
const items = Array.isArray(data?.trandItem) ? data.trandItem : []
|
|
return {
|
xAxisData: items.map((item) => formatTrendDate(item?.orderTime)),
|
series: [
|
{
|
name: '入库数量',
|
data: items.map((item) => normalizeNumber(item?.inQty))
|
},
|
{
|
name: '出库数量',
|
data: items.map((item) => normalizeNumber(item?.outQty))
|
}
|
],
|
maxQty: normalizeNumber(data?.maxQty)
|
}
|
}
|
|
function normalizeDashboardDeadStockList(payload) {
|
const records = Array.isArray(payload?.records) ? payload.records : []
|
|
return records.map((item) => ({
|
title: [item?.matnrCode, item?.maktx].filter(Boolean).join(' · ') || '-',
|
status: `数量 ${formatAmount(item?.anfme)} · 呆滞 ${item?.deadTime || '-'}`,
|
time: item?.locCode || '-',
|
icon: 'ri:archive-stack-line',
|
class: 'bg-amber-50 text-amber-600'
|
}))
|
}
|
|
function normalizeDashboardTaskList(payload) {
|
const records = Array.isArray(payload?.records) ? payload.records : []
|
|
return records.map((item) => ({
|
title: item?.taskCode || '-',
|
status: [item?.taskType$, item?.taskStatus$].filter(Boolean).join(' · ') || '待处理任务',
|
time: formatDateTime(item?.createTime),
|
icon: resolveTaskIcon(item?.taskStatus$),
|
class: resolveTaskClass(item?.taskStatus$)
|
}))
|
}
|
|
function normalizeDashboardLocUsage(payload) {
|
const data = unwrapDashboardPayload(payload)
|
const items = Array.isArray(data) ? data : []
|
return items.map((item) => ({
|
name: item?.name || '-',
|
value: normalizeNumber(item?.value)
|
}))
|
}
|
|
function withDashboardRequestGuard(task, fallbackValue, timeoutMs = DASHBOARD_SECTION_TIMEOUT) {
|
return withRequestGuard(task, fallbackValue, { timeoutMs })
|
}
|
|
function formatTrendDate(value) {
|
if (!value) return '--'
|
const text = String(value)
|
return text.length >= 10 ? text.slice(5, 10) : text
|
}
|
|
function formatDateTime(value) {
|
if (!value) return '--'
|
const text = String(value).replace('T', ' ')
|
if (text.length >= 16) {
|
return text.slice(5, 16)
|
}
|
return text
|
}
|
|
function formatAmount(value) {
|
const amount = Number(value)
|
if (!Number.isFinite(amount)) return '0'
|
if (Number.isInteger(amount)) return String(amount)
|
return amount.toFixed(2)
|
}
|
|
function normalizeNumber(value) {
|
const amount = Number(value)
|
return Number.isFinite(amount) ? amount : 0
|
}
|
|
function resolveTaskIcon(statusText) {
|
const text = String(statusText || '')
|
if (text.includes('完成')) return 'ri:checkbox-circle-line'
|
if (text.includes('异常') || text.includes('失败')) return 'ri:error-warning-line'
|
return 'ri:task-line'
|
}
|
|
function resolveTaskClass(statusText) {
|
const text = String(statusText || '')
|
if (text.includes('完成')) return 'bg-emerald-50 text-emerald-600'
|
if (text.includes('异常') || text.includes('失败')) return 'bg-rose-50 text-rose-600'
|
return 'bg-sky-50 text-sky-600'
|
}
|
|
export {
|
DASHBOARD_SECTION_TIMEOUT,
|
EMPTY_SUMMARY,
|
buildDashboardDeadStockQuery,
|
buildDashboardTaskQuery,
|
normalizeDashboardDeadStockList,
|
normalizeDashboardLocUsage,
|
normalizeDashboardSummary,
|
normalizeDashboardTaskList,
|
normalizeDashboardTrend,
|
unwrapDashboardPayload,
|
withDashboardRequestGuard
|
}
|