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