Edit.vue 4.0KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139
  1. <script setup>
  2. import { ref, watch, computed } from 'vue'
  3. import { Inertia } from '@inertiajs/inertia'
  4. import { useForm, Head, usePage } from '@inertiajs/inertia-vue3'
  5. import AppInputText from '@/components/AppInputText.vue'
  6. import AppDropdown from '@/components/AppDropdown.vue'
  7. import AppButton from '@/components/AppButton.vue'
  8. import AppDialog from '@/components/AppDialog.vue'
  9. import AppLayout from '@/layouts/AppLayout.vue'
  10. const props = defineProps({
  11. user: Object,
  12. roles: Array,
  13. })
  14. const errors = computed(() => usePage().props.value.errors)
  15. watch(errors, () => {
  16. form.clearErrors()
  17. })
  18. const visibleDialog = ref(false)
  19. const confirmDialog = () => {
  20. visibleDialog.value = true
  21. }
  22. const onAgree = () => Inertia.delete(route('users.destroy', props.user.id))
  23. const onCancel = () => (visibleDialog.value = false)
  24. const form = useForm({
  25. name: props.user.name,
  26. phone: props.user.phone,
  27. email: props.user.email,
  28. role_id: props.user.role_id,
  29. })
  30. const submit = () => {
  31. form.put(route('users.update', props.user.id))
  32. }
  33. </script>
  34. <template>
  35. <Head title="Ubah User" />
  36. <AppLayout>
  37. <div class="grid">
  38. <div class="col-12 lg:col-8">
  39. <Card>
  40. <template #title> Edit User </template>
  41. <template #content>
  42. <div class="grid">
  43. <div class="col-12 md:col-6">
  44. <AppInputText
  45. label="Nama"
  46. placeholder="nama"
  47. :disabled="user.role_id !== 1"
  48. :error="form.errors.name"
  49. v-model="form.name"
  50. />
  51. </div>
  52. <div class="col-12 md:col-6">
  53. <AppInputText
  54. label="Nomor HP"
  55. placeholder="nomor hp"
  56. :disabled="user.role_id !== 1"
  57. :error="form.errors.phone"
  58. v-model="form.phone"
  59. />
  60. </div>
  61. <div class="col-12 md:col-6">
  62. <AppInputText
  63. label="Email"
  64. placeholder="email"
  65. :disabled="user.role_id !== 1"
  66. :error="form.errors.email"
  67. v-model="form.email"
  68. />
  69. </div>
  70. <div v-if="user.role_id !== 1" class="col-12 md:col-6">
  71. <AppDropdown
  72. label="Hak Akses"
  73. placeholder="Pilih satu"
  74. v-model="form.role_id"
  75. :options="roles"
  76. :error="form.errors.role_id"
  77. />
  78. </div>
  79. </div>
  80. </template>
  81. <template #footer>
  82. <div class="grid">
  83. <div class="col-12 md:col-6 flex flex-column md:flex-row justify-content-center md:justify-content-start">
  84. <AppDialog
  85. message="Yakin akan menghapus data ini?"
  86. v-model:visible="visibleDialog"
  87. @agree="onAgree"
  88. @cancel="onCancel"
  89. />
  90. <Button
  91. v-if="$page.props.auth.user.role_id !== user.role_id"
  92. label="Hapus"
  93. icon="pi pi-trash"
  94. class="p-button-outlined p-button-danger"
  95. @click="confirmDialog"
  96. />
  97. </div>
  98. <div class="col-12 md:col-6 flex flex-column md:flex-row justify-content-center md:justify-content-end">
  99. <AppButton
  100. label="Blokir"
  101. icon="pi pi-ban"
  102. method="delete"
  103. class="p-button-outlined p-button-danger md:mr-3 mb-3 md:mb-0"
  104. :href="route('users.block', user.id)"
  105. />
  106. <Button
  107. label="Simpan"
  108. class="p-button-outlined"
  109. icon="pi pi-check"
  110. :disabled="form.processing"
  111. @click="submit"
  112. />
  113. </div>
  114. </div>
  115. </template>
  116. </Card>
  117. </div>
  118. </div>
  119. </AppLayout>
  120. </template>