Cart.vue 2.5KB

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