Refactor data grid components
This commit is contained in:
		| @@ -1,75 +1,215 @@ | ||||
| <template> | ||||
|   <Filters @run-search="() => filterData(filters)" :report-button="true" class="mb-4"> | ||||
|   <Filters | ||||
|     @reset-form="data = []" | ||||
|     @run-search="() => filterData(filters)" | ||||
|     :report-button="true" | ||||
|     class="mb-4" | ||||
|   > | ||||
|     <Type13 @update:filters="(value) => (filters = value)" /> | ||||
|   </Filters> | ||||
|   <div id="data"> | ||||
|     <DxDataGrid class="max-h-[calc(100vh-140px)] mb-10" :data-source="data" :show-column-lines="true" | ||||
|       :show-row-lines="false" :show-borders="true" :row-alternation-enabled="true" :hover-state-enabled="true" | ||||
|       @selection-changed="onSelectionChanged" :column-width="100" @exporting="onExporting" :allow-column-resizing="true" | ||||
|       column-resizing-mode="widget" :word-wrap-enabled="true"> | ||||
|     <DxDataGrid | ||||
|       class="max-h-[calc(100vh-140px)] mb-10" | ||||
|       :data-source="data" | ||||
|       :show-column-lines="true" | ||||
|       :show-row-lines="false" | ||||
|       :show-borders="true" | ||||
|       :row-alternation-enabled="true" | ||||
|       :hover-state-enabled="true" | ||||
|       @selection-changed="onSelectionChanged" | ||||
|       :column-width="100" | ||||
|       @exporting="onExporting" | ||||
|       :allow-column-resizing="true" | ||||
|       column-resizing-mode="widget" | ||||
|       :word-wrap-enabled="true" | ||||
|     > | ||||
|       <DxSelection mode="single" /> | ||||
|       <DxPaging :enabled="false" /> | ||||
|       <DxScrolling column-rendering-mode="virtual" mode="virtual" /> | ||||
|       <DxLoadPanel :position="position" :show-indicator="showIndicator" :show-pane="showPane" :shading="shading" | ||||
|         v-if="loading" v-model:visible="loading" :enabled="true" /> | ||||
|       <DxLoadPanel | ||||
|         :position="position" | ||||
|         :show-indicator="showIndicator" | ||||
|         :show-pane="showPane" | ||||
|         :shading="shading" | ||||
|         v-if="loading" | ||||
|         v-model:visible="loading" | ||||
|         :enabled="true" | ||||
|       /> | ||||
|       <DxSearchPanel :visible="true" :highlight-case-sensitive="true" /> | ||||
|       <DxExport :enabled="true" :formats="['pdf', 'xlsx', 'document']" :allow-export-selected-data="false" /> | ||||
|       <DxExport | ||||
|         :enabled="true" | ||||
|         :formats="['pdf', 'xlsx', 'document']" | ||||
|         :allow-export-selected-data="false" | ||||
|       /> | ||||
|       <DxColumnFixing :enabled="true" /> | ||||
|  | ||||
|       <DxColumn css-class="custom-table-column" :width="50" alignment="center" | ||||
|         :calculateCellValue="(item: any) => data.findIndex((i) => i == item) + 1" data-type="number" caption="No" /> | ||||
|       <DxColumn :width="170" alignment="center" data-field="fungsi_bidang" caption="Fungsi Bidang" | ||||
|         css-class="custom-table-column" /> | ||||
|       <DxColumn | ||||
|         css-class="custom-table-column" | ||||
|         :width="50" | ||||
|         alignment="center" | ||||
|         :calculateCellValue="(item: any) => data.findIndex((i) => i == item) + 1" | ||||
|         data-type="number" | ||||
|         caption="No" | ||||
|       /> | ||||
|       <DxColumn | ||||
|         :width="170" | ||||
|         alignment="center" | ||||
|         data-field="fungsi_bidang" | ||||
|         caption="Fungsi Bidang" | ||||
|         css-class="custom-table-column" | ||||
|       /> | ||||
|       <DxColumn alignment="center" caption="Laporan" css-class="custom-table-column"> | ||||
|         <DxColumn :width="150" alignment="center" data-field="total" data-type="number" caption="Total" | ||||
|           css-class="custom-table-column" /> | ||||
|         <DxColumn | ||||
|           :width="150" | ||||
|           alignment="center" | ||||
|           data-field="total" | ||||
|           data-type="number" | ||||
|           caption="Total" | ||||
|           css-class="custom-table-column" | ||||
|         /> | ||||
|         <DxColumn alignment="center" caption="Sudah Selesai" css-class="custom-table-column"> | ||||
|           <DxColumn :width="150" alignment="center" data-field="total_selesai" data-type="number" caption="Jml" | ||||
|             css-class="custom-table-column" /> | ||||
|           <DxColumn :width="150" alignment="center" data-field="persen_selesai" data-type="number" caption="%" | ||||
|             css-class="custom-table-column" /> | ||||
|           <DxColumn | ||||
|             :width="150" | ||||
|             alignment="center" | ||||
|             data-field="total_selesai" | ||||
|             data-type="number" | ||||
|             caption="Jml" | ||||
|             css-class="custom-table-column" | ||||
|           /> | ||||
|           <DxColumn | ||||
|             :width="150" | ||||
|             alignment="center" | ||||
|             data-field="persen_selesai" | ||||
|             data-type="number" | ||||
|             caption="%" | ||||
|             css-class="custom-table-column" | ||||
|           /> | ||||
|         </DxColumn> | ||||
|         <DxColumn alignment="center" caption="Belum Selesai" css-class="custom-table-column"> | ||||
|           <DxColumn :width="150" alignment="center" data-field="total_inproses" data-type="number" caption="Jml" | ||||
|             css-class="custom-table-column" /> | ||||
|           <DxColumn :width="150" alignment="center" data-field="persen_inproses" data-type="number" caption="%" | ||||
|             css-class="custom-table-column" /> | ||||
|           <DxColumn | ||||
|             :width="150" | ||||
|             alignment="center" | ||||
|             data-field="total_inproses" | ||||
|             data-type="number" | ||||
|             caption="Jml" | ||||
|             css-class="custom-table-column" | ||||
|           /> | ||||
|           <DxColumn | ||||
|             :width="150" | ||||
|             alignment="center" | ||||
|             data-field="persen_inproses" | ||||
|             data-type="number" | ||||
|             caption="%" | ||||
|             css-class="custom-table-column" | ||||
|           /> | ||||
|         </DxColumn> | ||||
|       </DxColumn> | ||||
|       <DxColumn alignment="center" caption="Response Time" css-class="custom-table-column"> | ||||
|         <DxColumn alignment="center" caption="Hari" css-class="custom-table-column"> | ||||
|           <DxColumn :width="150" alignment="center" data-field="total" data-type="number" caption="Total" | ||||
|             css-class="custom-table-column" /> | ||||
|           <DxColumn :width="150" alignment="center" data-field="avg_durasi_response" data-type="number" | ||||
|             caption="Rata-Rata" css-class="custom-table-column" /> | ||||
|           <DxColumn :width="150" alignment="center" data-field="min_durasi_response" data-type="number" caption="Max" | ||||
|             css-class="custom-table-column" /> | ||||
|           <DxColumn :width="150" alignment="center" data-field="max_durasi_response" data-type="number" caption="Min" | ||||
|             css-class="custom-table-column" /> | ||||
|           <DxColumn | ||||
|             :width="150" | ||||
|             alignment="center" | ||||
|             data-field="total" | ||||
|             data-type="number" | ||||
|             caption="Total" | ||||
|             css-class="custom-table-column" | ||||
|           /> | ||||
|           <DxColumn | ||||
|             :width="150" | ||||
|             alignment="center" | ||||
|             data-field="avg_durasi_response" | ||||
|             data-type="number" | ||||
|             caption="Rata-Rata" | ||||
|             css-class="custom-table-column" | ||||
|           /> | ||||
|           <DxColumn | ||||
|             :width="150" | ||||
|             alignment="center" | ||||
|             data-field="min_durasi_response" | ||||
|             data-type="number" | ||||
|             caption="Max" | ||||
|             css-class="custom-table-column" | ||||
|           /> | ||||
|           <DxColumn | ||||
|             :width="150" | ||||
|             alignment="center" | ||||
|             data-field="max_durasi_response" | ||||
|             data-type="number" | ||||
|             caption="Min" | ||||
|             css-class="custom-table-column" | ||||
|           /> | ||||
|         </DxColumn> | ||||
|         <DxColumn alignment="center" caption="Laporan" css-class="custom-table-column"> | ||||
|           <DxColumn :width="150" alignment="center" data-field="total_diatas_sla_response" data-type="number" | ||||
|             caption=">SLA" css-class="custom-table-column" /> | ||||
|           <DxColumn :width="150" alignment="center" data-field="total_dibawah_sla_response" data-type="number" | ||||
|             caption="≤SLA" css-class="custom-table-column" /> | ||||
|           <DxColumn | ||||
|             :width="150" | ||||
|             alignment="center" | ||||
|             data-field="total_diatas_sla_response" | ||||
|             data-type="number" | ||||
|             caption=">SLA" | ||||
|             css-class="custom-table-column" | ||||
|           /> | ||||
|           <DxColumn | ||||
|             :width="150" | ||||
|             alignment="center" | ||||
|             data-field="total_dibawah_sla_response" | ||||
|             data-type="number" | ||||
|             caption="≤SLA" | ||||
|             css-class="custom-table-column" | ||||
|           /> | ||||
|         </DxColumn> | ||||
|       </DxColumn> | ||||
|       <DxColumn alignment="center" caption="Penyelesaian" css-class="custom-table-column"> | ||||
|         <DxColumn alignment="center" caption="Hari" css-class="custom-table-column"> | ||||
|           <DxColumn :width="150" alignment="center" data-field="total" data-type="number" caption="Total" | ||||
|             css-class="custom-table-column" /> | ||||
|           <DxColumn :width="150" alignment="center" data-field="avg_durasi_recovery" data-type="number" | ||||
|             caption="Rata-Rata" css-class="custom-table-column" /> | ||||
|           <DxColumn :width="150" alignment="center" data-field="max_durasi_recovery" data-type="number" caption="Max" | ||||
|             css-class="custom-table-column" /> | ||||
|           <DxColumn :width="150" alignment="center" data-field="min_durasi_recovery" data-type="number" caption="Min" | ||||
|             css-class="custom-table-column" /> | ||||
|           <DxColumn | ||||
|             :width="150" | ||||
|             alignment="center" | ||||
|             data-field="total" | ||||
|             data-type="number" | ||||
|             caption="Total" | ||||
|             css-class="custom-table-column" | ||||
|           /> | ||||
|           <DxColumn | ||||
|             :width="150" | ||||
|             alignment="center" | ||||
|             data-field="avg_durasi_recovery" | ||||
|             data-type="number" | ||||
|             caption="Rata-Rata" | ||||
|             css-class="custom-table-column" | ||||
|           /> | ||||
|           <DxColumn | ||||
|             :width="150" | ||||
|             alignment="center" | ||||
|             data-field="max_durasi_recovery" | ||||
|             data-type="number" | ||||
|             caption="Max" | ||||
|             css-class="custom-table-column" | ||||
|           /> | ||||
|           <DxColumn | ||||
|             :width="150" | ||||
|             alignment="center" | ||||
|             data-field="min_durasi_recovery" | ||||
|             data-type="number" | ||||
|             caption="Min" | ||||
|             css-class="custom-table-column" | ||||
|           /> | ||||
|         </DxColumn> | ||||
|         <DxColumn alignment="center" caption="Laporan" css-class="custom-table-column"> | ||||
|           <DxColumn :width="150" alignment="center" data-field="total_diatas_sla_recovery" data-type="number" | ||||
|             caption=">SLA" css-class="custom-table-column" /> | ||||
|           <DxColumn :width="150" alignment="center" data-field="total_dibawah_sla_recovery" data-type="number" | ||||
|             caption="≤SLA" css-class="custom-table-column" /> | ||||
|           <DxColumn | ||||
|             :width="150" | ||||
|             alignment="center" | ||||
|             data-field="total_diatas_sla_recovery" | ||||
|             data-type="number" | ||||
|             caption=">SLA" | ||||
|             css-class="custom-table-column" | ||||
|           /> | ||||
|           <DxColumn | ||||
|             :width="150" | ||||
|             alignment="center" | ||||
|             data-field="total_dibawah_sla_recovery" | ||||
|             data-type="number" | ||||
|             caption="≤SLA" | ||||
|             css-class="custom-table-column" | ||||
|           /> | ||||
|         </DxColumn> | ||||
|       </DxColumn> | ||||
|     </DxDataGrid> | ||||
| @@ -79,8 +219,7 @@ | ||||
| <script setup lang="ts"> | ||||
| import Filters from '@/components/Form/Filters.vue' | ||||
| import Type13 from '@/components/Form/FiltersType/Type13.vue' | ||||
| import { onMounted, ref } from 'vue' | ||||
| import { useFiltersStore } from '@/stores/filters' | ||||
| import { ref } from 'vue' | ||||
| import { DxDataGrid } from 'devextreme-vue' | ||||
| import { | ||||
|   DxColumn, | ||||
| @@ -103,8 +242,7 @@ const position = { of: '#data' } | ||||
| const showIndicator = ref(true) | ||||
| const shading = ref(true) | ||||
| const showPane = ref(true) | ||||
| const dataDetail = ref<any>() | ||||
| const showDetail = ref(false) | ||||
|  | ||||
| const onExporting = (e: any) => { | ||||
|   if (e.format === 'pdf') { | ||||
|     const doc = new jsPDF() | ||||
|   | ||||
		Reference in New Issue
	
	Block a user