ProductCreate.vue 1.5KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  1. <script setup>
  2. import { onMounted } from 'vue'
  3. import { Inertia } from '@inertiajs/inertia'
  4. import { usePage } from '@inertiajs/inertia-vue3'
  5. import { useForm } from '@/composables/useForm'
  6. import AppInputText from '@/components/AppInputText.vue'
  7. const getProductNumber = () => {
  8. Inertia.reload({ only: ['productNumber'] })
  9. }
  10. onMounted(() => getProductNumber())
  11. const form = useForm({
  12. name: null,
  13. unit: null,
  14. })
  15. const onSubmit = () => {
  16. form
  17. .transform((data) => ({
  18. number: usePage().props.value.productNumber,
  19. ...data,
  20. }))
  21. .post(route('products.store'), {
  22. onSuccess: () => form.reset(),
  23. onFinish: () => getProductNumber(),
  24. })
  25. }
  26. </script>
  27. <template>
  28. <div class="grid">
  29. <div class="col-12 md:col-6">
  30. <AppInputText
  31. disabled
  32. label="Nomor Produk"
  33. placeholder="nomor produk"
  34. v-model="$page.props.productNumber"
  35. />
  36. </div>
  37. <div class="col-12 md:col-6">
  38. <AppInputText
  39. label="Nama"
  40. placeholder="nama"
  41. :error="form.errors.name"
  42. v-model="form.name"
  43. />
  44. </div>
  45. <div class="col-12 md:col-6">
  46. <AppInputText
  47. label="Satuan"
  48. placeholder="satuan"
  49. :error="form.errors.unit"
  50. v-model="form.unit"
  51. />
  52. </div>
  53. </div>
  54. <div class="flex flex-column md:flex-row justify-content-end">
  55. <Button
  56. label="Simpan"
  57. icon="pi pi-check"
  58. class="p-button-outlined"
  59. :disabled="form.processing"
  60. @click="onSubmit"
  61. />
  62. </div>
  63. </template>