123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138
  1. <script setup>
  2. import { Head, useForm } from '@inertiajs/inertia-vue3'
  3. import { useFormErrorReset } from '@/components/useFormErrorReset'
  4. import DashboardLayout from '@/layouts/DashboardLayout.vue'
  5. import AppInputText from '@/components/AppInputText.vue'
  6. import AppPassword from '@/components/AppPassword.vue'
  7. const props = defineProps({
  8. user: Object,
  9. roles: Array,
  10. })
  11. const form = useForm({
  12. name: props.user.name,
  13. phone: null,
  14. email: props.user.email,
  15. role_id: props.user.role_id,
  16. })
  17. useFormErrorReset(form)
  18. const onSubmit = () => {
  19. form.put(route('users.update', props.user.id))
  20. }
  21. const formChangePassword = useForm({
  22. old_password: '',
  23. new_password: '',
  24. new_password_confirmation: '',
  25. })
  26. useFormErrorReset(formChangePassword)
  27. const onChangePassword = () => {
  28. formChangePassword.post(route('users.change-password', props.user.id), {
  29. onSuccess: () => formChangePassword.reset(),
  30. })
  31. }
  32. </script>
  33. <template>
  34. <Head title="Profil Saya" />
  35. <DashboardLayout>
  36. <div class="grid">
  37. <div class="col-12 md:col-8">
  38. <Card>
  39. <template #title>Profil Saya</template>
  40. <template #content>
  41. <TabView lazy>
  42. <TabPanel header="Ubah Profil">
  43. <div class="grid">
  44. <div class="col-12 md:col-6">
  45. <AppInputText
  46. label="Nama"
  47. placeholder="nama"
  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. :error="form.errors.phone"
  57. v-model="form.phone"
  58. />
  59. </div>
  60. <div class="col-12 md:col-6">
  61. <AppInputText
  62. label="Email"
  63. placeholder="email"
  64. :error="form.errors.email"
  65. v-model="form.email"
  66. />
  67. </div>
  68. <div class="col-12 flex justify-content-end">
  69. <Button
  70. label="Simpan"
  71. icon="pi pi-check"
  72. class="p-button-outlined"
  73. :disabled="form.processing"
  74. @click="onSubmit"
  75. />
  76. </div>
  77. </div>
  78. </TabPanel>
  79. <TabPanel header="Ubah Password">
  80. <div class="grid">
  81. <div class="col-12">
  82. <AppPassword
  83. label="Password Lama"
  84. placeholder="password lama"
  85. :error="formChangePassword.errors.old_password"
  86. v-model="formChangePassword.old_password"
  87. />
  88. </div>
  89. <div class="col-12">
  90. <AppPassword
  91. label="Password Baru"
  92. placeholder="password baru"
  93. :error="formChangePassword.errors.new_password"
  94. v-model="formChangePassword.new_password"
  95. />
  96. </div>
  97. <div class="col-12">
  98. <AppPassword
  99. label="Konfirmasi Password"
  100. placeholder="konfirmasi password"
  101. v-model="formChangePassword.new_password_confirmation"
  102. />
  103. </div>
  104. <div class="col-12 flex justify-content-end">
  105. <Button
  106. label="Simpan"
  107. icon="pi pi-check"
  108. class="p-button-outlined"
  109. :disabled="formChangePassword.processing"
  110. @click="onChangePassword"
  111. />
  112. </div>
  113. </div>
  114. </TabPanel>
  115. </TabView>
  116. </template>
  117. </Card>
  118. </div>
  119. </div>
  120. </DashboardLayout>
  121. </template>