Show.vue 4.5KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140
  1. <script setup>
  2. import { useForm } from '@/composables/useForm'
  3. import AppInputText from '@/components/AppInputText.vue'
  4. import AppPassword from '@/components/AppPassword.vue'
  5. import DashboardLayout from '@/layouts/Dashboard/DashboardLayout.vue'
  6. const props = defineProps({
  7. user: Object,
  8. roles: Array,
  9. })
  10. const form = useForm({
  11. name: props.user.name,
  12. username: props.user.username,
  13. role_id: props.user.role_id,
  14. })
  15. const onSubmit = () => {
  16. form.put(route('users.update', props.user.id))
  17. }
  18. const formChangePassword = useForm({
  19. old_password: '',
  20. new_password: '',
  21. new_password_confirmation: '',
  22. })
  23. const onChangePassword = () => {
  24. formChangePassword.post(route('users.change-password', props.user.id), {
  25. onSuccess: () => formChangePassword.reset(),
  26. })
  27. }
  28. </script>
  29. <template>
  30. <DashboardLayout title="Profil Saya">
  31. <div class="grid">
  32. <div class="col-12">
  33. <Card>
  34. <template #title>Profil Saya</template>
  35. <template #content>
  36. <TabView lazy>
  37. <TabPanel header="Ubah Profil">
  38. <div class="grid">
  39. <div class="col-12 md:col-6">
  40. <AppInputText
  41. label="Nama"
  42. placeholder="nama"
  43. :error="form.errors.name"
  44. v-model="form.name"
  45. />
  46. </div>
  47. <div class="col-12 md:col-6">
  48. <AppInputText
  49. label="Nama Pengguna"
  50. placeholder="nama pengguna"
  51. :error="form.errors.username"
  52. v-model="form.username"
  53. />
  54. </div>
  55. <div
  56. class="col-12 flex flex-column sm:flex-row justify-content-end"
  57. >
  58. <Button
  59. label="Simpan"
  60. icon="pi pi-check"
  61. class="p-button-outlined"
  62. :disabled="form.processing"
  63. @click="onSubmit"
  64. />
  65. </div>
  66. </div>
  67. </TabPanel>
  68. <TabPanel header="Ubah Kata Sandi">
  69. <div class="grid">
  70. <div class="col-12">
  71. <AppPassword
  72. label="Kata Sandi Lama"
  73. placeholder="kata sandi lama"
  74. promptLabel="Masukan Kata Sandi"
  75. weakLabel="Lemah"
  76. mediumLabel="Sedang"
  77. strongLabel="Sangat Kuat"
  78. :toggleMask="true"
  79. :error="formChangePassword.errors.old_password"
  80. v-model="formChangePassword.old_password"
  81. />
  82. </div>
  83. <div class="col-12">
  84. <AppPassword
  85. label="Kata Sandi Baru"
  86. placeholder="kata sandi baru"
  87. promptLabel="Masukan Kata Sandi"
  88. weakLabel="Lemah"
  89. mediumLabel="Sedang"
  90. strongLabel="Sangat Kuat"
  91. :toggleMask="true"
  92. :error="formChangePassword.errors.new_password"
  93. v-model="formChangePassword.new_password"
  94. />
  95. </div>
  96. <div class="col-12">
  97. <AppPassword
  98. label="Konfirmasi Kata Sandi"
  99. placeholder="konfirmasi kata sandi"
  100. promptLabel="Masukan Kata Sandi"
  101. weakLabel="Lemah"
  102. mediumLabel="Sedang"
  103. strongLabel="Sangat Kuat"
  104. :toggleMask="true"
  105. v-model="formChangePassword.new_password_confirmation"
  106. />
  107. </div>
  108. <div
  109. class="col-12 flex flex-column sm:flex-row justify-content-end"
  110. >
  111. <Button
  112. label="Simpan"
  113. icon="pi pi-check"
  114. class="p-button-outlined"
  115. :disabled="formChangePassword.processing"
  116. @click="onChangePassword"
  117. />
  118. </div>
  119. </div>
  120. </TabPanel>
  121. </TabView>
  122. </template>
  123. </Card>
  124. </div>
  125. </div>
  126. </DashboardLayout>
  127. </template>