Out.vue 4.3KB

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