Edit.vue 3.0KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109
  1. <script setup>
  2. import { Inertia } from '@inertiajs/inertia'
  3. import { useConfirm } from 'primevue/useconfirm'
  4. import { useForm } from '@/composables/useForm'
  5. import AppInputText from '@/components/AppInputText.vue'
  6. import AppDropdown from '@/components/AppDropdown.vue'
  7. import DashboardLayout from '@/layouts/Dashboard/DashboardLayout.vue'
  8. const props = defineProps({
  9. user: Object,
  10. roles: Array,
  11. })
  12. const blockConfirm = useConfirm()
  13. const onBlockConfirm = () => {
  14. blockConfirm.require({
  15. message: `Yakin akan memblokir (${props.user.username}) ?`,
  16. header: 'Blokir User',
  17. acceptLabel: props.user.status ? 'Blokir' : 'Aktifkan',
  18. rejectLabel: 'Batalkan',
  19. accept: () => {
  20. Inertia.delete(route('users.block', props.user.id))
  21. },
  22. reject: () => {
  23. blockConfirm.close()
  24. },
  25. })
  26. }
  27. const form = useForm({
  28. name: props.user.name,
  29. username: props.user.username,
  30. role_id: props.user.role_id,
  31. })
  32. const onSubmit = () => {
  33. form.put(route('users.update', props.user.id))
  34. }
  35. </script>
  36. <template>
  37. <DashboardLayout title="Ubah User">
  38. <ConfirmDialog />
  39. <div class="grid">
  40. <div class="col-12 lg:col-8">
  41. <Card>
  42. <template #title> Edit User </template>
  43. <template #content>
  44. <div class="grid">
  45. <div class="col-12 md:col-6">
  46. <AppInputText
  47. label="Nama"
  48. placeholder="nama"
  49. :disabled="user.role_id !== 1"
  50. :error="form.errors.name"
  51. v-model="form.name"
  52. />
  53. </div>
  54. <div class="col-12 md:col-6">
  55. <AppInputText
  56. label="Nama Pengguna"
  57. placeholder="nama pengguna"
  58. :disabled="user.role_id !== 1"
  59. :error="form.errors.username"
  60. v-model="form.username"
  61. />
  62. </div>
  63. <div v-if="user.role_id !== 1" class="col-12 md:col-6">
  64. <AppDropdown
  65. label="Hak Akses"
  66. placeholder="Pilih satu"
  67. v-model="form.role_id"
  68. :options="roles"
  69. :error="form.errors.role_id"
  70. />
  71. </div>
  72. </div>
  73. </template>
  74. <template #footer>
  75. <div class="flex flex-column md:flex-row justify-content-end">
  76. <Button
  77. v-if="user.role_id !== 1"
  78. icon="pi pi-ban"
  79. class="p-button-outlined md:mr-3 mb-3 md:mb-0"
  80. :class="[user.status ? 'p-button-danger' : 'p-button-success']"
  81. :label="user.status ? 'Blokir' : 'Aktifkan'"
  82. @click="onBlockConfirm"
  83. />
  84. <Button
  85. label="Simpan"
  86. class="p-button-outlined"
  87. icon="pi pi-check"
  88. :disabled="form.processing"
  89. @click="onSubmit"
  90. />
  91. </div>
  92. </template>
  93. </Card>
  94. </div>
  95. </div>
  96. </DashboardLayout>
  97. </template>