Delete.vue 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  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 ot-grey ot-white--text" @click="closeDialog">
  21. {{ $t('cancel') }}
  22. </v-btn>
  23. <v-btn class="mr-4 submitBtn ot-danger ot-white--text" @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 "~/store/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().addAlerts(TYPE_ALERT.SUCCESS, ['deleteSuccess'])
  52. } catch (error: any) {
  53. usePageStore().addAlerts(TYPE_ALERT.ALERT, [error.message])
  54. }
  55. showDialog.value = false
  56. }
  57. const alertDeleteItem = () => { showDialog.value = true }
  58. const closeDialog = () => { showDialog.value = false }
  59. </script>
  60. <style scoped>
  61. </style>