From da9c918fa9a5437c930286d928e7085d88e62f7d Mon Sep 17 00:00:00 2001 From: louispaulb Date: Sun, 19 Jul 2026 10:30:45 -0400 Subject: [PATCH] feat(ux): gate ONU device actions + delete behind manage_settings, own block MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Lane 3 (durcissement) : OnuActionsPanel (suspendre/rétablir/redémarrer/vitesse/remplacer/retirer — écritures réseau live, suspendre coupe le client) était monté SANS permission dans EquipmentDetail. Désormais gaté can('manage_settings') + sorti du bloc olt_name (garde propre serial+olt_ip → visible même sans olt_name). Bouton « Supprimer cet équipement » aussi gaté. (Panel déjà monté depuis un travail antérieur ; ici = gating + placement.) Lane 1c (déployé via bundle, PlanificationPage co-édité non commité) : puces géofence live En route/Arrivé/Reparti sur les cartes Jour (kanban) + lignes éditeur de journée, via l'endpoint /roster/geofence-states existant mais jamais appelé (geofenceStates + refreshGeofenceStates hooké dans reloadOccupancy). Lane 1a : le picker lead exclut déjà le tech assigné + garde 409 « déjà assigné dans F » → re-pick déjà empêché (aucun code risqué ajouté). Co-Authored-By: Claude Fable 5 --- .../shared/detail-sections/EquipmentDetail.vue | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/apps/ops/src/components/shared/detail-sections/EquipmentDetail.vue b/apps/ops/src/components/shared/detail-sections/EquipmentDetail.vue index 7221c9c..234872a 100644 --- a/apps/ops/src/components/shared/detail-sections/EquipmentDetail.vue +++ b/apps/ops/src/components/shared/detail-sections/EquipmentDetail.vue @@ -448,8 +448,13 @@
Fin garantie{{ doc.warranty_end }}
Adresse{{ doc.service_location }}
Abonnement{{ doc.subscription }}
- - + + + +
+
Actions appareil (réseau)
+
@@ -499,7 +504,7 @@ -
+
@@ -510,6 +515,7 @@ import { ref, computed, onMounted, onUnmounted, watch } from 'vue' import { useQuasar } from 'quasar' import InlineField from 'src/components/shared/InlineField.vue' import OnuActionsPanel from './modules/OnuActionsPanel.vue' +import { usePermissions } from 'src/composables/usePermissions' import { useDeviceStatus } from 'src/composables/useDeviceStatus' import { useModemDiagnostic } from 'src/composables/useModemDiagnostic' import { deleteDoc } from 'src/api/erp' @@ -519,6 +525,7 @@ const props = defineProps({ doc: { type: Object, required: true }, docName: Stri const emit = defineEmits(['deleted']) const $q = useQuasar() +const { can } = usePermissions() // écritures réseau ONU + suppression = gated (manage_settings) const { fetchStatus, fetchOltStatus, fetchPortContext, getDevice, isOnline, combinedStatus, signalQuality, refreshDeviceParams, fetchHosts, loading: deviceLoading } = useDeviceStatus() const { fetchDiagnostic, fetchDiagnosticAuto, loading: wifiDiagLoading, error: wifiDiagError, data: wifiDiag } = useModemDiagnostic() const refreshing = ref(false)