123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107
  1. <script setup>
  2. import { Inertia } from "@inertiajs/inertia";
  3. import { watch, computed } from "vue";
  4. import { Head, useForm, usePage } from "@inertiajs/inertia-vue3";
  5. import throttle from "lodash/throttle";
  6. import pickBy from "lodash/pickBy";
  7. import AppLayout from "@/layouts/AppLayout.vue";
  8. import AppPagination from "@/components/AppPagination.vue";
  9. import AppButton from "@/components/AppButton.vue";
  10. import AppDropdown from "@/components/AppDropdown.vue";
  11. import TableHeader from "./TableHeader";
  12. const props = defineProps({
  13. mutations: Object,
  14. filters: Object,
  15. outlets: Array,
  16. });
  17. const filterForm = useForm({
  18. dates: props.filters.dates,
  19. outlet: props.filters.outlet,
  20. });
  21. const isAdmin = computed(() => usePage().props.value.isAdmin);
  22. watch(
  23. filterForm,
  24. throttle(() => {
  25. Inertia.get(
  26. "/mutations",
  27. pickBy({
  28. dates: filterForm.dates,
  29. outlet: filterForm.outlet,
  30. }),
  31. {
  32. preserveState: true,
  33. }
  34. );
  35. }, 300)
  36. );
  37. </script>
  38. <template>
  39. <AppLayout>
  40. <Head title="Laporan" />
  41. <DataTable
  42. responsive-layout="scroll"
  43. column-resize-mode="expand"
  44. :value="mutations.data"
  45. :row-hover="true"
  46. :striped-rows="true"
  47. >
  48. <template #header>
  49. <h5>Laporan</h5>
  50. <div class="grid">
  51. <div class="col-12 md:col-8">
  52. <div class="grid">
  53. <div class="col-12 md:col-4">
  54. <Calendar
  55. class="w-full"
  56. v-model="filterForm.dates"
  57. selection-mode="range"
  58. placeholder="filter waktu..."
  59. date-format="dd/mm/yy"
  60. :show-button-bar="true"
  61. :manual-input="false"
  62. />
  63. </div>
  64. <div class="col-12 md:col-4">
  65. <AppDropdown
  66. v-if="isAdmin"
  67. placeholder="pilih outlet"
  68. v-model="filterForm.outlet"
  69. :options="outlets"
  70. />
  71. </div>
  72. </div>
  73. </div>
  74. </div>
  75. </template>
  76. <Column
  77. v-for="tableHeader in TableHeader"
  78. :field="tableHeader.field"
  79. :header="tableHeader.header"
  80. :key="tableHeader.field"
  81. />
  82. <Column>
  83. <template #body="{ data }">
  84. <AppButton
  85. icon="pi pi-link"
  86. class="
  87. p-button-text p-button-icon-only p-button-rounded p-button-text
  88. "
  89. />
  90. </template>
  91. </Column>
  92. </DataTable>
  93. <AppPagination :links="mutations.links" />
  94. </AppLayout>
  95. </template>