- Add usePermissions composable (isAdmin, canEdit, canView) - Password-protected profile login with modal on profiles page - Disable all form fields for ROLE_VIEWER across edit/create pages - Show navigation buttons (Modifier/Consulter) for all roles, hide delete for viewers - Add readonly prop to ModelTypeForm for category pages - Disable modal fields (sites, constructeurs) for viewers - Guard /admin routes in middleware Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
79 lines
2.1 KiB
Vue
79 lines
2.1 KiB
Vue
<template>
|
|
<div class="flex flex-col gap-4 md:flex-row md:items-start md:justify-between">
|
|
<div class="flex flex-col gap-2">
|
|
<h1 class="text-3xl font-bold">
|
|
{{ title }}
|
|
</h1>
|
|
<div class="btn-group w-full max-w-xs print:hidden" data-print-hide>
|
|
<button
|
|
type="button"
|
|
class="btn btn-sm"
|
|
:class="isDetailsView ? 'btn-primary' : 'btn-outline'"
|
|
@click="$emit('change-view', 'details')"
|
|
>
|
|
Vue machine
|
|
</button>
|
|
<button
|
|
type="button"
|
|
class="btn btn-sm"
|
|
:class="isSkeletonView ? 'btn-primary' : 'btn-outline'"
|
|
:disabled="!hasSkeletonRequirements"
|
|
@click="$emit('change-view', 'skeleton')"
|
|
>
|
|
Squelette
|
|
</button>
|
|
</div>
|
|
</div>
|
|
<div class="flex items-center gap-2 print:hidden" data-print-hide>
|
|
<button
|
|
@click="$emit('toggle-edit')"
|
|
class="btn btn-primary"
|
|
:class="{ 'btn-outline': isEditMode }"
|
|
>
|
|
<IconLucideSquarePen
|
|
v-if="!isEditMode"
|
|
class="w-5 h-5 mr-2"
|
|
aria-hidden="true"
|
|
/>
|
|
<IconLucideEye
|
|
v-else
|
|
class="w-5 h-5 mr-2"
|
|
aria-hidden="true"
|
|
/>
|
|
{{ isEditMode ? 'Voir détails' : 'Modifier' }}
|
|
</button>
|
|
<button
|
|
v-if="isDetailsView && !isEditMode"
|
|
@click="$emit('open-print')"
|
|
type="button"
|
|
class="btn btn-outline btn-secondary"
|
|
>
|
|
<IconLucidePrinter class="w-5 h-5 mr-2" aria-hidden="true" />
|
|
Imprimer
|
|
</button>
|
|
</div>
|
|
</div>
|
|
</template>
|
|
|
|
<script setup lang="ts">
|
|
import IconLucideSquarePen from '~icons/lucide/square-pen'
|
|
import IconLucideEye from '~icons/lucide/eye'
|
|
import IconLucidePrinter from '~icons/lucide/printer'
|
|
|
|
const { canEdit } = usePermissions()
|
|
|
|
defineProps<{
|
|
title: string
|
|
isDetailsView: boolean
|
|
isSkeletonView: boolean
|
|
isEditMode: boolean
|
|
hasSkeletonRequirements: boolean
|
|
}>()
|
|
|
|
defineEmits<{
|
|
'change-view': [view: 'details' | 'skeleton']
|
|
'toggle-edit': []
|
|
'open-print': []
|
|
}>()
|
|
</script>
|