diff --git a/apps/ops/src/pages/DispatchPage.vue b/apps/ops/src/pages/DispatchPage.vue
index b044169..8f42d95 100644
--- a/apps/ops/src/pages/DispatchPage.vue
+++ b/apps/ops/src/pages/DispatchPage.vue
@@ -155,6 +155,23 @@ const hourTicks = computed(() => {
const isCalView = computed(() => currentView.value === 'week')
const unassignDropActive = ref(false)
+// Pre-compute expensive per-tech data (memoized — avoids recalculating on every render)
+const segmentsMap = computed(() => {
+ const map = {}
+ for (const tech of filteredResources.value) map[tech.id] = techDayJobsWithTravel(tech)
+ return map
+})
+const loadMap = computed(() => {
+ const map = {}
+ for (const tech of filteredResources.value) map[tech.id] = periodLoadH(tech)
+ return map
+})
+const capMap = computed(() => {
+ const map = {}
+ for (const tech of filteredResources.value) map[tech.id] = techPeriodCapacityH(tech)
+ return map
+})
+
const { pushUndo, performUndo } = useUndo(store, invalidateRoutes)
const smartAssign = (job, newTechId, dateStr) => store.smartAssign(job.id, newTechId, dateStr)
@@ -501,8 +518,8 @@ provide('onRenameTag', onRenameTag)
provide('onDeleteTag', onDeleteTag)
provide('selectedJob', selectedJob)
provide('hoveredJobId', hoveredJobId)
-provide('periodLoadH', periodLoadH)
-provide('techPeriodCapacityH', techPeriodCapacityH)
+provide('periodLoadH', (tech) => loadMap.value[tech.id] ?? 0)
+provide('techPeriodCapacityH', (tech) => capMap.value[tech.id] ?? 8)
provide('techDayEndH', techDayEndH)
provide('isJobMultiSelected', isJobMultiSelected)
provide('btColW', btColW)
@@ -766,7 +783,7 @@ onUnmounted(() => { document.removeEventListener('keydown', onKeyDown); document
Aucune ressource.