Create.vue 6.2KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202
  1. <script setup>
  2. import { ref, computed, watch } from 'vue'
  3. import { useForm, usePage } from '@inertiajs/inertia-vue3'
  4. import AppInputNumber from '@/components/AppInputNumber.vue'
  5. import AppLayout from '@/layouts/AppLayout.vue'
  6. const props = defineProps({
  7. parkingFees: Object,
  8. })
  9. const errors = computed(() => usePage().props.value.errors)
  10. watch(errors, () => {
  11. form.clearErrors()
  12. })
  13. const disabled = ref(true)
  14. const edit = () => {
  15. disabled.value = !disabled.value
  16. }
  17. const form = useForm({
  18. id1: props.parkingFees[0]?.id ?? null,
  19. id2: props.parkingFees[1]?.id ?? null,
  20. id3: props.parkingFees[2]?.id ?? null,
  21. id4: props.parkingFees[3]?.id ?? null,
  22. idNext: props.parkingFees[4]?.id ?? null,
  23. timePeriod1: props.parkingFees[0]?.timePeriod ?? null,
  24. timePeriod2: props.parkingFees[1]?.timePeriod ?? null,
  25. timePeriod3: props.parkingFees[2]?.timePeriod ?? null,
  26. timePeriod4: props.parkingFees[3]?.timePeriod ?? null,
  27. timePeriodNext: props.parkingFees[4]?.timePeriod ?? null,
  28. price1: props.parkingFees[0]?.price ?? null,
  29. price2: props.parkingFees[1]?.price ?? null,
  30. price3: props.parkingFees[2]?.price ?? null,
  31. price4: props.parkingFees[3]?.price ?? null,
  32. priceNext: props.parkingFees[4]?.price ?? null,
  33. })
  34. const submit = () => {
  35. form
  36. .transform((data) => ({
  37. id: [data.id1, data.id2, data.id3, data.id4, data.idNext],
  38. time_period: [data.timePeriod1, data.timePeriod2, data.timePeriod3, data.timePeriod4, data.timePeriodNext],
  39. price: [data.price1, data.price2, data.price3, data.price4, data.priceNext],
  40. }))
  41. .post(route('parking-fees.store'), { onSuccess: () => (disabled.value = true) })
  42. }
  43. </script>
  44. <template>
  45. <AppLayout>
  46. <div class="grid">
  47. <div class="col-12 md:col-6">
  48. <Card>
  49. <template #title>
  50. <div class="flex justify-content-between">
  51. <h1>Tarif Parkir</h1>
  52. <Button icon="pi pi-pencil" class="p-button-rounded p-button-primary" @click="edit" />
  53. </div>
  54. </template>
  55. <template #content>
  56. <div class="grid">
  57. <Divider align="center">
  58. <span class="p-tag">Periode 1</span>
  59. </Divider>
  60. <AppInputNumber
  61. v-model="form.timePeriod1"
  62. class="col-12 md:col-6"
  63. label="Durasi/Jam"
  64. placeholder="durasi waktu, contoh: 1"
  65. :disabled="disabled"
  66. :error="form.errors['time_period.0']"
  67. />
  68. <AppInputNumber
  69. v-model="form.price1"
  70. class="col-12 md:col-6"
  71. label="Harga"
  72. placeholder="contoh: 100000"
  73. :disabled="disabled"
  74. :error="form.errors['price.0']"
  75. />
  76. </div>
  77. <Divider align="center">
  78. <span class="p-tag">Periode 2</span>
  79. </Divider>
  80. <div class="grid">
  81. <AppInputNumber
  82. v-model="form.timePeriod2"
  83. class="col-12 md:col-6"
  84. label="Durasi/Jam"
  85. placeholder="durasi waktu, contoh: 2"
  86. :disabled="disabled"
  87. :error="form.errors['time_period.1']"
  88. />
  89. <AppInputNumber
  90. v-model="form.price2"
  91. class="col-12 md:col-6"
  92. label="Harga"
  93. placeholder="contoh: 100000"
  94. :disabled="disabled"
  95. :error="form.errors['price.1']"
  96. />
  97. </div>
  98. <Divider align="center">
  99. <span class="p-tag">Periode 3</span>
  100. </Divider>
  101. <div class="grid">
  102. <AppInputNumber
  103. v-model="form.timePeriod3"
  104. class="col-12 md:col-6"
  105. label="Durasi/Jam"
  106. placeholder="durasi waktu, contoh: 3"
  107. :disabled="disabled"
  108. :error="form.errors['time_period.2']"
  109. />
  110. <AppInputNumber
  111. v-model="form.price3"
  112. class="col-12 md:col-6"
  113. label="Harga"
  114. placeholder="contoh: 100000"
  115. :disabled="disabled"
  116. :error="form.errors['price.2']"
  117. />
  118. </div>
  119. <Divider align="center">
  120. <span class="p-tag">Periode 4</span>
  121. </Divider>
  122. <div class="grid">
  123. <AppInputNumber
  124. v-model="form.timePeriod4"
  125. class="col-12 md:col-6"
  126. label="Durasi/Jam"
  127. placeholder="durasi waktu, contoh: 4"
  128. :disabled="disabled"
  129. :error="form.errors['time_period.3']"
  130. />
  131. <AppInputNumber
  132. v-model="form.price4"
  133. class="col-12 md:col-6"
  134. label="Harga"
  135. placeholder="contoh: 100000"
  136. :disabled="disabled"
  137. :error="form.errors['price.3']"
  138. />
  139. </div>
  140. <Divider align="center">
  141. <span class="p-tag">Seterusnya</span>
  142. </Divider>
  143. <div class="grid">
  144. <AppInputNumber
  145. v-model="form.timePeriodNext"
  146. class="col-12 md:col-6"
  147. label="Durasi/Jam"
  148. placeholder="durasi waktu, contoh: 4"
  149. :disabled="disabled"
  150. :error="form.errors['time_period.4']"
  151. />
  152. <AppInputNumber
  153. v-model="form.priceNext"
  154. class="col-12 md:col-6"
  155. label="Harga"
  156. placeholder="contoh: 100000"
  157. :disabled="disabled"
  158. :error="form.errors['price.4']"
  159. />
  160. </div>
  161. </template>
  162. <template #footer>
  163. <div class="flex flex-column md:flex-row justify-content-end">
  164. <Button
  165. label="Simpan"
  166. icon="pi pi-check"
  167. class="p-button-outlined"
  168. :disabled="form.processing || disabled"
  169. @click="submit"
  170. />
  171. </div>
  172. </template>
  173. </Card>
  174. </div>
  175. </div>
  176. </AppLayout>
  177. </template>