Delete.vue 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172
  1. <!--
  2. Bouton Delete avec modale de confirmation de la suppression
  3. -->
  4. <template>
  5. <main>
  6. <v-btn :icon="true" @click="alertDeleteItem()">
  7. <v-icon>mdi-delete</v-icon>
  8. </v-btn>
  9. <LazyLayoutDialog
  10. :show="showDialog"
  11. >
  12. <template #dialogType>{{ $t('delete_assistant') }}</template>
  13. <template #dialogTitle>{{ $t('attention') }}</template>
  14. <template #dialogText>
  15. <v-card-text>
  16. <p>{{ $t('confirm_to_delete') }}</p>
  17. </v-card-text>
  18. </template>
  19. <template #dialogBtn>
  20. <v-btn class="mr-4 submitBtn theme-neutral-strong" @click="closeDialog">
  21. {{ $t('cancel') }}
  22. </v-btn>
  23. <v-btn class="mr-4 submitBtn theme-danger" @click="deleteItem">
  24. {{ $t('delete') }}
  25. </v-btn>
  26. </template>
  27. </LazyLayoutDialog>
  28. </main>
  29. </template>
  30. <script setup lang="ts">
  31. import {TYPE_ALERT} from '~/types/enum/enums'
  32. import {Ref} from "@vue/reactivity";
  33. import {useEntityManager} from "~/composables/data/useEntityManager";
  34. import ApiResource from "~/models/ApiResource";
  35. import {usePageStore} from "~/stores/page";
  36. const props = defineProps({
  37. model: {
  38. type: Object,
  39. required: true
  40. },
  41. entity: {
  42. type: Object as () => ApiResource,
  43. required: true
  44. }
  45. })
  46. const showDialog: Ref<boolean> = ref(false)
  47. const { em } = useEntityManager()
  48. const deleteItem = async () => {
  49. try {
  50. await em.delete(props.model, props.entity)
  51. usePageStore().addAlert(TYPE_ALERT.SUCCESS, ['deleteSuccess'])
  52. } catch (error: any) {
  53. usePageStore().addAlert(TYPE_ALERT.ALERT, [error.message])
  54. throw error
  55. }
  56. showDialog.value = false
  57. }
  58. const alertDeleteItem = () => { showDialog.value = true }
  59. const closeDialog = () => { showDialog.value = false }
  60. </script>
  61. <style scoped>
  62. </style>