Delete.vue 1.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576
  1. <template>
  2. <main>
  3. <v-btn icon @click="alertDeleteItem()">
  4. <v-icon>mdi-delete</v-icon>
  5. </v-btn>
  6. <lazy-LayoutDialog
  7. :show="showDialog"
  8. >
  9. <template v-slot:dialogText>
  10. <v-card-title class="text-h5 grey lighten-2">
  11. {{ $t('attention') }}
  12. </v-card-title>
  13. <v-card-text>
  14. <br>
  15. <p>{{ $t('confirm_to_delete') }}</p>
  16. </v-card-text>
  17. </template>
  18. <template v-slot:dialogBtn>
  19. <v-btn class="mr-4 submitBtn ot_grey ot_white--text" @click="closeDialog">
  20. {{ $t('cancel') }}
  21. </v-btn>
  22. <v-btn class="mr-4 submitBtn ot_danger ot_white--text" @click="deleteItem">
  23. {{ $t('delete') }}
  24. </v-btn>
  25. </template>
  26. </lazy-LayoutDialog>
  27. </main>
  28. </template>
  29. <script lang="ts">
  30. import { defineComponent, useContext, ref, Ref } from '@nuxtjs/composition-api'
  31. import { DataDeleterArgs, alert } from '~/types/interfaces'
  32. import { TYPE_ALERT } from '~/types/enums'
  33. export default defineComponent({
  34. props: {
  35. deleteArgs: {
  36. type: Object as () => DataDeleterArgs,
  37. required: true
  38. }
  39. },
  40. setup (props) {
  41. const { $dataDeleter, store, app: { i18n } } = useContext()
  42. const showDialog:Ref<boolean> = ref(false)
  43. const deleteItem = async () => {
  44. try {
  45. await $dataDeleter.invoke(props.deleteArgs)
  46. const alert:alert = {
  47. type: TYPE_ALERT.SUCCESS,
  48. message: i18n.t('deleteSuccess') as string
  49. }
  50. store.commit('page/setAlert', alert)
  51. } catch (error) {
  52. const alert:alert = {
  53. type: TYPE_ALERT.ALERT,
  54. message: error.message
  55. }
  56. store.commit('page/setAlert', alert)
  57. }
  58. showDialog.value = false
  59. }
  60. return {
  61. alertDeleteItem: () => showDialog.value = true,
  62. closeDialog: () => showDialog.value = false,
  63. deleteItem,
  64. showDialog
  65. }
  66. }
  67. })
  68. </script>
  69. <style scoped>
  70. </style>