24 lines
1.4 KiB
TypeScript
24 lines
1.4 KiB
TypeScript
import type { OceanBookingContainerRequirement } from './types'
|
|
import { applyContainerSpecification, containerSpecification } from '@/shared/domain/containerSpecifications'
|
|
|
|
export function createBlankContainerRequirement(): OceanBookingContainerRequirement {
|
|
return { containerType: '40HC', containerKind: 'FCL', quantity: 1, capacityCbm: 76, maxWeightKg: 28000 }
|
|
}
|
|
|
|
export function selectContainerRequirementType(requirement: OceanBookingContainerRequirement, containerType: string) {
|
|
applyContainerSpecification(requirement, containerType)
|
|
}
|
|
|
|
export function containerRequirementError(requirements: OceanBookingContainerRequirement[]) {
|
|
if (!requirements.length) return '请至少保留一项柜型需求'
|
|
if (requirements.length > 20) return '单次订舱最多登记 20 项柜型需求'
|
|
const invalidQuantityIndex = requirements.findIndex((item) => !Number.isInteger(Number(item.quantity)) || Number(item.quantity) < 1)
|
|
if (invalidQuantityIndex >= 0) return `第 ${invalidQuantityIndex + 1} 项柜型需求的数量必须是大于 0 的整数`
|
|
const invalid = requirements.find((item) => {
|
|
const specification = containerSpecification(item.containerType)
|
|
return !specification || Number(item.capacityCbm) !== specification.capacityCbm
|
|
|| Number(item.maxWeightKg) !== specification.maxWeightKg
|
|
})
|
|
return invalid ? `柜型 ${invalid.containerType || '未命名'} 必须使用平台固定规格,请重新选择柜型` : null
|
|
}
|