Cart.vue 2.5KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111
  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. columnResizeMode="expand"
  36. edit-mode="row"
  37. data-key="number"
  38. :value="cart"
  39. :rowHover="true"
  40. :stripedRows="true"
  41. v-model:editing-rows="editingRows"
  42. @row-edit-save="$emit('edit', $event)"
  43. >
  44. <template #header>
  45. <h2 class="text-2xl font-bold">{{ title }}</h2>
  46. <div class="field-checkbox flex justify-content-end gap-2">
  47. <label class="text-sm" for="ppn">
  48. Semua produk dikenakan PPN {{ $page.props.ppn }}%
  49. </label>
  50. <input
  51. type="checkbox"
  52. id="ppn"
  53. :disabled="btnPpnDisabled"
  54. :checked="checkedPpn"
  55. @input="$emit('update:checkedPpn', $event.target.checked)"
  56. />
  57. </div>
  58. </template>
  59. <Column
  60. v-for="value in headerTable"
  61. :key="value.field"
  62. :field="value.field"
  63. :header="value.header"
  64. >
  65. <template #body="{ data, field }">
  66. <template v-if="field == 'price'">
  67. {{ IDRCurrencyFormat(data[field]) }}
  68. </template>
  69. <template v-else> {{ data[field] }} </template>
  70. </template>
  71. <template #editor="{ data, field }">
  72. <AppInputNumber
  73. v-if="field == 'price'"
  74. label="Harga"
  75. placeholder="harga"
  76. v-model="data[field]"
  77. />
  78. <AppInputText
  79. v-if="field == 'qty'"
  80. label="Kuantitas"
  81. placeholder="kuantitas"
  82. type="number"
  83. v-model="data[field]"
  84. />
  85. </template>
  86. </Column>
  87. <Column v-if="btnEditShow" :row-editor="true" />
  88. <Column>
  89. <template #body="{ index }">
  90. <Button
  91. v-if="btnDeleteShow"
  92. icon="pi pi-trash"
  93. class="p-button-icon-only p-button-rounded p-button-text"
  94. v-tooltip.bottom="'hapus'"
  95. @click="$emit('delete', index)"
  96. />
  97. </template>
  98. </Column>
  99. </DataTable>
  100. </template>