Cart.vue 2.2KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697
  1. <script setup>
  2. import { ref } from 'vue'
  3. import { IDRCurrencyFormat } from '@/utils/currencyFormat'
  4. import AppInputNumber from '@/components/AppInputNumber.vue'
  5. import AppInputText from '@/components/AppInputText.vue'
  6. defineProps({
  7. title: String,
  8. headerTable: {
  9. required: true,
  10. type: Array,
  11. },
  12. productCart: {
  13. required: true,
  14. type: Array,
  15. },
  16. checkedPpn: Boolean,
  17. })
  18. const editingRows = ref([])
  19. </script>
  20. <template>
  21. <DataTable
  22. responsiveLayout="scroll"
  23. columnResizeMode="expand"
  24. edit-mode="row"
  25. data-key="number"
  26. :value="productCart"
  27. :rowHover="true"
  28. :stripedRows="true"
  29. v-model:editing-rows="editingRows"
  30. @row-edit-save="$emit('edit', $event)"
  31. >
  32. <template #header>
  33. <h2 class="text-2xl font-bold">{{ title }}</h2>
  34. <div class="field-checkbox flex justify-content-end gap-2">
  35. <label class="text-sm" for="ppn">
  36. Semua produk dikenakan PPN {{ $page.props.ppn }}%
  37. </label>
  38. <input
  39. type="checkbox"
  40. id="ppn"
  41. :checked="checkedPpn"
  42. @input="$emit('update:checkedPpn', $event.target.checked)"
  43. />
  44. </div>
  45. </template>
  46. <Column
  47. v-for="value in headerTable"
  48. :key="value.field"
  49. :field="value.field"
  50. :header="value.header"
  51. >
  52. <template #body="{ data, field }">
  53. <template v-if="field == 'price'">
  54. {{ IDRCurrencyFormat(data[field]) }}
  55. </template>
  56. <template v-else> {{ data[field] }} </template>
  57. </template>
  58. <template #editor="{ data, field }">
  59. <AppInputNumber
  60. v-if="field == 'price'"
  61. label="Harga"
  62. placeholder="harga"
  63. v-model="data[field]"
  64. />
  65. <AppInputText
  66. v-if="field == 'qty'"
  67. label="Kuantitas"
  68. placeholder="kuantitas"
  69. type="number"
  70. v-model="data[field]"
  71. />
  72. </template>
  73. </Column>
  74. <Column :row-editor="true" />
  75. <Column>
  76. <template #body="{ index }">
  77. <Button
  78. icon="pi pi-trash"
  79. class="p-button-icon-only p-button-rounded p-button-text"
  80. v-tooltip.bottom="'hapus'"
  81. @click="$emit('delete', index)"
  82. />
  83. </template>
  84. </Column>
  85. </DataTable>
  86. </template>