Edit.vue 5.0KB

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