Edit.vue 4.0KB

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