diff --git a/src/modules/sailing-calendar/pages/SailingCalendarView.vue b/src/modules/sailing-calendar/pages/SailingCalendarView.vue index 3c94dbd7..6faccef2 100644 --- a/src/modules/sailing-calendar/pages/SailingCalendarView.vue +++ b/src/modules/sailing-calendar/pages/SailingCalendarView.vue @@ -111,6 +111,37 @@ const cells = computed(() => { }) }) const selectedDateRecords = computed(() => recordsByDate.value.get(selectedDate.value) || []) +const adjacentSailings = computed(() => { + const current = selectedSailing.value + if (!current) return [] + const currentTime = new Date(current.etdAt).getTime() + return (data.value?.records || []) + .filter((record) => record.id !== current.id + && record.status !== 'CANCELLED' + && record.warehouseId === current.warehouseId + && record.channelCode === current.channelCode + && record.departurePortCode === current.departurePortCode + && record.destinationPortCode === current.destinationPortCode) + .sort((left, right) => Math.abs(new Date(left.etdAt).getTime() - currentTime) - Math.abs(new Date(right.etdAt).getTime() - currentTime)) + .slice(0, 3) +}) +function referenceVolume(record: unknown) { + const sailing = record as SailingCalendarEntry + return Number(sailing.volumeSummary.catchableReceivedCbm || 0) + Number(sailing.volumeSummary.catchableForecastCbm || 0) +} +function remainingCapacity(record: unknown) { + const sailing = record as SailingCalendarEntry + const capacity = Number(sailing.volumeSummary.planningCapacityCbm || 0) + return Math.max(capacity - referenceVolume(record), 0) +} +const currentRemainingCapacity = computed(() => selectedSailing.value ? remainingCapacity(selectedSailing.value) : 0) +function mergeAdvice(record: unknown) { + const current = selectedSailing.value + const sailing = record as SailingCalendarEntry + if (!current || current.status !== 'OPEN' || sailing.status !== 'OPEN') return '仅供对比' + const currentCapacity = Number(current.volumeSummary.planningCapacityCbm || 0) + return currentCapacity > 0 && referenceVolume(current) < currentCapacity && remainingCapacity(sailing) > 0 ? '可人工评估合船' : '仅供对比' +} const summaryCards = computed(() => { const summary = data.value?.summary return [ @@ -306,7 +337,7 @@ onMounted(() => void load())
-
+
停用渠道仍保留历史船期,但不能新建模板或生成未来船期。新增渠道
按周几生成前先预览,生成操作使用服务端幂等键。新增周模板
周{{ ['一', '二', '三', '四', '五', '六', '日'][day - 1] }}

生成预览({{ templatePreview.length }} 条)

@@ -314,7 +345,7 @@ onMounted(() => void load())