Delete.vue 2.0 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
  10. :show="showDialog"
  11. >
  12. <template #dialogType>{{ $t('delete_assistant') }}</template>
  13. <template #dialogTitle>{{ $t('caution') }}</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 type {Ref} from "@vue/reactivity";
  33. import {useEntityManager} from "~/composables/data/useEntityManager";
  34. import ApiResource from "~/models/ApiResource";
  35. import {usePageStore} from "~/stores/page";
  36. import ApiModel from "~/models/ApiModel";
  37. const props = defineProps({
  38. model: {
  39. type: Function as any as () => typeof ApiModel,
  40. required: true
  41. },
  42. entity: {
  43. type: Object as () => ApiResource,
  44. required: true
  45. },
  46. flat: {
  47. type: Boolean,
  48. required: false,
  49. default: false
  50. }
  51. })
  52. const showDialog: Ref<boolean> = ref(false)
  53. const { em } = useEntityManager()
  54. const deleteItem = async () => {
  55. try {
  56. //@ts-ignore
  57. await em.delete(props.model, props.entity)
  58. usePageStore().addAlert(TYPE_ALERT.SUCCESS, ['deleteSuccess'])
  59. } catch (error: any) {
  60. usePageStore().addAlert(TYPE_ALERT.ALERT, [error.message])
  61. throw error
  62. }
  63. showDialog.value = false
  64. }
  65. const alertDeleteItem = () => { showDialog.value = true }
  66. const closeDialog = () => { showDialog.value = false }
  67. </script>
  68. <style scoped>
  69. </style>