diff --git a/apps/ops/src/components/shared/detail-sections/IssueDetail.vue b/apps/ops/src/components/shared/detail-sections/IssueDetail.vue index 4cc2725..ede38a9 100644 --- a/apps/ops/src/components/shared/detail-sections/IssueDetail.vue +++ b/apps/ops/src/components/shared/detail-sections/IssueDetail.vue @@ -35,6 +35,16 @@ + +
+ + Technicien + + Non assigné +
+
Statut @@ -427,6 +437,14 @@ async function unlinkCustomer () { const userOptions = ref([]) const loadingUsers = ref(false) const assignees = ref([]) +// Technicien(s) assigné(s) surfacé(s) EN TÊTE : tech des Dispatch Jobs liés (« assigné au job ») + staff legacy (ce que montrent les lignes de liste, absent du panneau jusqu'ici). Dédupliqué. +const assignedPeople = computed(() => { + const seen = new Set(); const out = [] + const add = v => { const s = (v == null ? '' : String(v)).trim(); if (s && !seen.has(s.toLowerCase())) { seen.add(s.toLowerCase()); out.push(s) } } + for (const j of (props.dispatchJobs || [])) add(j.assigned_tech) + add(props.doc && props.doc.assigned_staff) + return out +}) function parseAssign (raw) { if (!raw) return [] @@ -863,6 +881,8 @@ async function sendTicketEmail () { } .cust-name { font-weight: 600; font-size: 0.9rem; color: #166534; cursor: pointer; } .cust-name:hover { text-decoration: underline; } +.tech-banner { display: flex; align-items: center; flex-wrap: wrap; gap: 6px; } +.tech-banner-lbl { font-size: 12px; font-weight: 600; color: #607d8b; } /* Fil unifié en bulles */ .thread-wrap { display: flex; flex-direction: column; gap: 10px; }