Edit.vue 3.4KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116
  1. <script setup>
  2. import { computed, watch, ref } from 'vue'
  3. import { Inertia } from '@inertiajs/inertia'
  4. import { Head, useForm, usePage } from '@inertiajs/inertia-vue3'
  5. import AppLayout from '@/layouts/AppLayout.vue'
  6. import AppDialog from '@/components/AppDialog.vue'
  7. import AppDropdown from '@/components/AppDropdown.vue'
  8. import AppInputText from '@/components/AppInputText.vue'
  9. const props = defineProps({
  10. member: Object,
  11. typeMembers: Array,
  12. })
  13. const errors = computed(() => usePage().props.value.errors)
  14. watch(errors, () => {
  15. form.clearErrors()
  16. })
  17. const visibleDialog = ref(false)
  18. const confirmDialog = () => {
  19. visibleDialog.value = true
  20. }
  21. const onAgree = () => Inertia.delete(route('users.destroy', props.member.id))
  22. const onCancel = () => (visibleDialog.value = false)
  23. const form = useForm({
  24. name: props.member.name,
  25. phone: props.member.phone,
  26. plat_number: props.member.plat_number,
  27. type_member_id: props.member.type_member_id,
  28. })
  29. const submit = () => {
  30. form.put(route('members.update', props.member.id))
  31. }
  32. </script>
  33. <template>
  34. <Head title="Ubah Member" />
  35. <AppLayout>
  36. <div class="grid">
  37. <div class="col-12 md:col-8">
  38. <Card>
  39. <template #title> Ubah Member </template>
  40. <template #content>
  41. <div class="grid">
  42. <div class="col-12 md:col-6">
  43. <AppInputText v-model="form.name" label="Nama" placeholder="nama" :error="form.errors.name" />
  44. </div>
  45. <div class="col-12 md:col-6">
  46. <AppInputText v-model="form.phone" label="Nomor HP" placeholder="nomor hp" :error="form.errors.phone" />
  47. </div>
  48. <div class="col-12 md:col-6">
  49. <AppInputText
  50. v-model="form.plat_number"
  51. label="Plat Kendaraan"
  52. placeholder="plat kendaraan"
  53. :error="form.errors.plat_number"
  54. />
  55. </div>
  56. <div class="col-12 md:col-6">
  57. <AppDropdown
  58. label="Jenis member"
  59. placeholder="pilih satu"
  60. v-model="form.type_member_id"
  61. :options="typeMembers"
  62. :error="form.errors.type_member_id"
  63. />
  64. </div>
  65. </div>
  66. </template>
  67. <template #footer>
  68. <div class="grid">
  69. <div class="col-12 md:col-6 flex flex-column md:flex-row justify-content-center md:justify-content-start">
  70. <AppDialog
  71. message="Yakin akan menghapus data ini?"
  72. v-model:visible="visibleDialog"
  73. @agree="onAgree"
  74. @cancel="onCancel"
  75. />
  76. <Button
  77. label="Hapus"
  78. icon="pi pi-trash"
  79. class="p-button-outlined p-button-danger"
  80. @click="confirmDialog"
  81. />
  82. </div>
  83. <div class="col-12 md:col-6 flex flex-column md:flex-row justify-content-center md:justify-content-end">
  84. <Button
  85. label="Simpan"
  86. icon="pi pi-check"
  87. class="p-button-outlined"
  88. :disabled="form.processing"
  89. @click="submit"
  90. />
  91. </div>
  92. </div>
  93. </template>
  94. </Card>
  95. </div>
  96. </div>
  97. </AppLayout>
  98. </template>