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