123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154
  1. <script setup>
  2. import { reactive, watch, onMounted } from 'vue'
  3. import { Inertia } from '@inertiajs/inertia'
  4. import { useForm } from '@inertiajs/inertia-vue3'
  5. import AppInputText from '@/components/AppInputText.vue'
  6. import AppDropdown from '@/components/AppDropdown.vue'
  7. import AppPagination from '@/components/AppPagination.vue'
  8. import { InTable, OutTable } from './TableHeader'
  9. const props = defineProps({
  10. data: Object,
  11. dataCount: Number,
  12. typeVehicles: Object,
  13. entryTransactionData: Object,
  14. entryTransactionCount: Number,
  15. })
  16. watch(
  17. () => props.entryTransactionData,
  18. () => {
  19. setLocalEntryTransaction()
  20. form.reset()
  21. }
  22. )
  23. onMounted(() => {
  24. setLocalEntryTransaction()
  25. })
  26. const localEntryTransactions = reactive([])
  27. const setLocalEntryTransaction = () => {
  28. localEntryTransactions.splice(0)
  29. localEntryTransactions.push(...props.entryTransactionData.data)
  30. }
  31. const copy = (data) => {
  32. form.entry_transaction_id = data.transactionNumber
  33. const filterLocalEntryTransactions = props.entryTransactionData.data.filter(
  34. (val) => val.transactionNumber !== data.transactionNumber
  35. )
  36. localEntryTransactions.splice(0)
  37. localEntryTransactions.push(...filterLocalEntryTransactions)
  38. }
  39. const form = useForm({
  40. id: 2,
  41. plat_number: null,
  42. entry_transaction_id: null,
  43. type_vehicle_id: null,
  44. })
  45. watch(
  46. () => form.plat_number,
  47. () => {
  48. Inertia.reload({ only: ['typeVehicles'], data: { plat_number: form.plat_number } })
  49. }
  50. )
  51. const submit = () => {
  52. form.post(route('test-transactions.store'))
  53. }
  54. </script>
  55. <template>
  56. <Card>
  57. <template #title> <h1>Out</h1> </template>
  58. <template #content>
  59. <DataTable
  60. responsiveLayout="scroll"
  61. columnResizeMode="expand"
  62. :value="localEntryTransactions"
  63. :rowHover="true"
  64. :stripedRows="true"
  65. >
  66. <template #header>
  67. <span style="color: var(--primary-color)">Car Entry :</span> {{ entryTransactionCount }}
  68. </template>
  69. <Column v-for="inTable in InTable" :field="inTable.field" :header="inTable.header" :key="inTable.field" />
  70. <Column>
  71. <template #body="{ data }">
  72. <Button icon="pi pi-copy" class="p-button-rounded p-button-text" @click="copy(data)" />
  73. </template>
  74. </Column>
  75. </DataTable>
  76. <AppPagination :links="entryTransactionData.links" />
  77. <Divider type="dashed" />
  78. <div class="grid">
  79. <div class="col-12 md:col-6">
  80. <AppInputText
  81. v-model="form.plat_number"
  82. label="Vehicle Plate"
  83. placeholder="vehicle plate"
  84. :error="form.errors.plat_number"
  85. />
  86. </div>
  87. <div class="col-12 md:col-6">
  88. <AppInputText
  89. disabled
  90. v-model="form.entry_transaction_id"
  91. label="Transaction number"
  92. placeholder="transaction number"
  93. :error="form.errors.entry_transaction_id"
  94. />
  95. </div>
  96. <div class="col-12 md:col-6">
  97. <AppDropdown
  98. v-model="form.type_vehicle_id"
  99. label="Type Vehicle"
  100. placeholder="type vehicle"
  101. :options="typeVehicles"
  102. :error="form.errors.type_vehicle_id"
  103. />
  104. </div>
  105. </div>
  106. <Divider type="dashed" />
  107. <DataTable
  108. responsiveLayout="scroll"
  109. columnResizeMode="expand"
  110. :value="data.data"
  111. :rowHover="true"
  112. :stripedRows="true"
  113. >
  114. <template #header> <span style="color: var(--red-600)">Car Out :</span> {{ dataCount }} </template>
  115. <Column v-for="outTable in OutTable" :field="outTable.field" :header="outTable.header" :key="outTable.field" />
  116. </DataTable>
  117. <AppPagination :links="data.links" />
  118. </template>
  119. <template #footer>
  120. <div class="flex flex-column md:flex-row justify-content-end">
  121. <Button
  122. label="Car Out"
  123. icon="pi pi-check"
  124. class="p-button-outlined"
  125. :disabled="form.processing"
  126. @click="submit"
  127. />
  128. </div>
  129. </template>
  130. </Card>
  131. </template>