feat(self-operated): add charts and continuous collection status

This commit is contained in:
2026-10-13 20:44:31 +08:00
parent 698ca34529
commit 4c4a3db1eb
33 changed files with 780 additions and 211 deletions
@@ -0,0 +1,21 @@
import { describe, expect, it } from 'vitest'
import type { LineSeriesOption } from 'echarts'
import type { DailyPoint } from './types'
import { skuTrendOption } from './skuTrendChart'
const point = (day: number, status: string, value: string | null = '2'): DailyPoint => ({ businessDate: `2026-10-${day}`, dataStatus: status, outboundQuantity: value, observedQuantity: value, quantityUnit: 'PCS', reasonCodes: [] })
describe('SKU ECharts data configuration', () => {
it('connects complete to partial days with dashed edges and resumes solid edges', () => {
const series = skuTrendOption([point(10, 'COMPLETE'), point(11, 'PARTIAL'), point(12, 'COMPLETE'), point(13, 'COMPLETE')]).series as LineSeriesOption[]
expect(series[1]?.lineStyle?.type).toBe('dashed')
expect(series[1]?.data).toEqual([2, 2, 2, null])
expect(series[2]?.lineStyle?.type).toBe('solid')
expect(series[2]?.data).toEqual([null, null, 2, 2])
})
it('does not join across unknown or omitted dates and preserves zero', () => {
const series = skuTrendOption([point(10, 'COMPLETE', '0'), point(11, 'UNKNOWN', null), point(12, 'COMPLETE'), point(14, 'COMPLETE')]).series as LineSeriesOption[]
expect(series).toHaveLength(1)
expect(series[0]?.data?.[0]).toMatchObject({ value: 0 })
expect(series[0]?.data?.[1]).toMatchObject({ value: null })
expect(series[0]?.connectNulls).toBe(false)
})
})