diff --git a/frontend/app/components/DetailHeader.vue b/frontend/app/components/DetailHeader.vue
index 1fc7552..3713c3e 100644
--- a/frontend/app/components/DetailHeader.vue
+++ b/frontend/app/components/DetailHeader.vue
@@ -15,10 +15,10 @@
{{ isEditMode ? 'Voir détails' : 'Modifier' }}
-
+
+
@@ -29,6 +29,7 @@ import IconLucideEye from '~icons/lucide/eye'
import IconLucideArrowLeft from '~icons/lucide/arrow-left'
const route = useRoute()
+const router = useRouter()
const props = defineProps<{
title: string
@@ -43,12 +44,20 @@ defineEmits<{
'toggle-edit': []
}>()
-const backDestination = computed(() => {
+// Retour : on revient à l'URL précédente pour préserver l'état de la liste
+// (recherche, tri, pagination persistés en query params). Fallback sur le
+// backLink si pas d'historique applicatif (accès direct, refresh, lien partagé).
+const goBack = () => {
if (route.query.from === 'machine' && route.query.machineId) {
- return `/machine/${route.query.machineId}`
+ router.push(`/machine/${route.query.machineId}`)
+ return
}
- return props.backLink
-})
+ if (window.history.state?.back) {
+ router.back()
+ return
+ }
+ router.push(props.backLink)
+}
const backLabel = computed(() => {
if (route.query.from === 'machine') {
diff --git a/frontend/app/components/machine/MachineDetailHeader.vue b/frontend/app/components/machine/MachineDetailHeader.vue
index 22440e3..43f332d 100644
--- a/frontend/app/components/machine/MachineDetailHeader.vue
+++ b/frontend/app/components/machine/MachineDetailHeader.vue
@@ -36,10 +36,10 @@
>
-
+
+
@@ -52,6 +52,18 @@ import IconLucidePrinter from '~icons/lucide/printer'
import IconLucideArrowLeft from '~icons/lucide/arrow-left'
const { canEdit } = usePermissions()
+const router = useRouter()
+
+// Retour : revient à l'URL précédente pour préserver la recherche/filtres du
+// parc machines (persistés en query params). Fallback vers /machines si pas
+// d'historique applicatif (accès direct, refresh, lien partagé).
+const goBack = () => {
+ if (window.history.state?.back) {
+ router.back()
+ return
+ }
+ router.push('/machines')
+}
const props = defineProps<{
title: string
diff --git a/frontend/app/components/model-types/ManagementView.vue b/frontend/app/components/model-types/ManagementView.vue
index 2f63bf9..0862a9d 100644
--- a/frontend/app/components/model-types/ManagementView.vue
+++ b/frontend/app/components/model-types/ManagementView.vue
@@ -281,7 +281,10 @@ const doRefresh = async ({ resetOffset = false }: { resetOffset?: boolean } = {}
limit.value = response.limit
}
catch (error: unknown) {
- if (error && typeof error === 'object' && (error as { name?: string }).name === 'AbortError') return
+ // Requête annulée volontairement (nouvelle recherche / démontage) : pas une
+ // vraie erreur. On teste le signal car ofetch encapsule l'AbortError dans
+ // une FetchError, donc error.name n'est pas fiable.
+ if (controller.signal.aborted) return
showError(extractErrorMessage(error))
}
finally {