| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111 |
- import assert from 'node:assert/strict'
- import test from 'node:test'
- import {
- buildAgendaDays,
- validCalendarDate,
- validCalendarMonth
- } from '../src/views/m/pl/dispatch-calendar/model'
- import { toCalendarTrips } from '../src/views/pl/dispatch-calendar/model'
- import type { Plan } from '../src/api/pl'
- const plans = [
- {
- id: 'a',
- calendarVehicleType: 'self',
- planDate: '2026-10-25',
- planNo: '1',
- followStatus: 'pending',
- vehicleId: 'v1',
- licensePlate: '皖H21522',
- load: { customerName: '安庆山峡' },
- deliveries: [
- {
- id: 's1',
- customerId: 'c1',
- customerName: '甲',
- products: [{ productId: 'p1', productName: '98酸' }]
- },
- {
- id: 's2',
- customerId: 'c1',
- customerName: '甲',
- products: [{ productId: 'p1', productName: '98酸' }]
- },
- {
- id: 's3',
- customerId: 'c2',
- customerName: '安徽云栋',
- products: [{ productId: 'p2', productName: '液碱' }]
- }
- ]
- },
- {
- id: 'b',
- calendarVehicleType: 'self',
- planDate: '2026-10-24',
- planNo: '2',
- followStatus: 'pending',
- vehicleId: 'v2',
- licensePlate: '皖HA4855',
- products: [{ productName: '98酸' }]
- }
- ] as Plan[]
- const trips = toCalendarTrips(plans, '2026-10')
- test('每天独立切换,承运商日期在自有模式下保留入口,汇总跟随筛选', () => {
- const mixed = toCalendarTrips(
- [
- ...plans,
- { ...plans[0], id: 'carrier', vehicleId: 'carrier', calendarVehicleType: 'carrier' },
- { ...plans[1], id: 'carrier-only', planDate: '2026-10-26', calendarVehicleType: 'carrier' }
- ] as Plan[],
- '2026-10'
- )
- const defaults = buildAgendaDays(mixed, '2026-10', '', '')
- assert.deepEqual(
- defaults.map((day) => day.total),
- [1, 1, 0]
- )
- assert.equal(defaults[2].hasPlans, true)
- const switched = buildAgendaDays(mixed, '2026-10', '', '', { '2026-10-25': 'all' })
- assert.deepEqual(
- switched.map((day) => day.total),
- [1, 2, 0]
- )
- assert.deepEqual(
- switched[1].summary.map((product) => product.count),
- [2, 2]
- )
- })
- test('纵向日期升序,只加入定位的空日期', () => {
- const days = buildAgendaDays(trips, '2026-10', '', '2026-10-26')
- assert.deepEqual(
- days.map((d) => d.date),
- ['2026-10-24', '2026-10-25', '2026-10-26']
- )
- assert.equal(days[2].total, 0)
- assert.equal(buildAgendaDays([], '2026-11', '', '').length, 0)
- })
- test('车辆筛选后汇总和明细一致,多段仍合计一个计划', () => {
- const days = buildAgendaDays(trips, '2026-10', 'v1', '')
- assert.equal(days.length, 1)
- assert.equal(days[0].total, 1)
- assert.equal(days[0].vehicles[0].tasks.length, 2)
- assert.equal(days[0].vehicles[0].tasks[0].segmentCount, 2)
- assert.equal(days[0].vehicles[0].tasks[0].count, 1)
- assert.equal(days[0].vehicles[0].tasks[1].route, '山峡 → 云栋')
- assert.deepEqual(
- days[0].summary.map((p) => p.count),
- [1, 1]
- )
- })
- test('月份边界与日期有效性,拒绝溢出日期', () => {
- assert.equal(validCalendarMonth('2100-12'), true)
- for (const value of ['1899-12', '2101-01', '2026-13', '2026-1', ''])
- assert.equal(validCalendarMonth(value), false)
- assert.equal(validCalendarDate('2024-02-29'), true)
- for (const value of ['2026-02-29', '2026-04-31', '2026-00-01', '', '2026-10-32'])
- assert.equal(validCalendarDate(value), false)
- assert.deepEqual(buildAgendaDays(trips, '2026-11', '', '2026-10-25'), [])
- })
|