Delete.vue 1.9 KB

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