fix: check all gangguan menu
This commit is contained in:
		| @@ -1,203 +1,349 @@ | ||||
| <template> | ||||
|     <Filters @run-search="() => filterData(filters)" class="mb-4"> | ||||
|         <Type9 @update:filters="(value) => { | ||||
|             filters = value | ||||
|         } | ||||
|             " /> | ||||
|     </Filters> | ||||
|     <div id="data"> | ||||
|         <DxDataGrid class="max-h-[calc(100vh-140px)]" :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" /> | ||||
|   <Filters @reset-form="data = []" @run-search="() => filterData(filters)" class="mb-4"> | ||||
|     <Type9 @update:filters="(value) => (filters = value)" /> | ||||
|   </Filters> | ||||
|  | ||||
|             <DxSearchPanel :visible="true" :highlight-case-sensitive="true" /> | ||||
|             <DxExport :enabled="true" :formats="['pdf', 'xlsx', 'document']" :allow-export-selected-data="false" /> | ||||
|             <DxColumnFixing :enabled="true" /> | ||||
|   <div id="data"> | ||||
|     <DxDataGrid | ||||
|       class="max-h-[calc(100vh-140px)]" | ||||
|       :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" | ||||
|       /> | ||||
|  | ||||
|             <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="tanggal" caption="Tanggal Lapor" | ||||
|                 css-class="custom-table-column" /> | ||||
|             <DxColumn alignment="center" caption="Laporan" css-class="custom-table-column"> | ||||
|                 <DxColumn :width="120" 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="120" alignment="center" data-field="total_selesai" data-type="number" caption="Jml" | ||||
|                         css-class="custom-table-column" /> | ||||
|                     <DxColumn :width="120" 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="120" alignment="center" data-field="total_inproses" data-type="number" caption="Jml" | ||||
|                         css-class="custom-table-column" /> | ||||
|                     <DxColumn :width="120" 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="Menit" css-class="custom-table-column"> | ||||
|                     <DxColumn :width="120" alignment="center" data-field="total_response" data-type="number" caption="Total" | ||||
|                         css-class="custom-table-column" /> | ||||
|                     <DxColumn :width="120" alignment="center" data-field="avg_durasi_response" data-type="number" | ||||
|                         caption="Rata-Rata" css-class="custom-table-column" /> | ||||
|                     <DxColumn :width="120" alignment="center" data-field="max_durasi_response" data-type="number" | ||||
|                         caption="Max" css-class="custom-table-column" /> | ||||
|                     <DxColumn :width="120" alignment="center" data-field="min_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="120" alignment="center" data-field="total_diatas_sla_response" data-type="number" | ||||
|                         caption=">SLA" css-class="custom-table-column" /> | ||||
|                     <DxColumn :width="120" alignment="center" data-field="total_dibawah_sla_response" data-type="number" | ||||
|                         caption="≤SLA" css-class="custom-table-column" /> | ||||
|                 </DxColumn> | ||||
|             </DxColumn> | ||||
|             <DxColumn alignment="center" caption="Recovery Time" css-class="custom-table-column"> | ||||
|                 <DxColumn alignment="center" caption="Menit" css-class="custom-table-column"> | ||||
|                     <DxColumn :width="120" alignment="center" data-field="total_recovery" data-type="number" caption="Total" | ||||
|                         css-class="custom-table-column" /> | ||||
|                     <DxColumn :width="120" alignment="center" data-field="avg_durasi_recovery" data-type="number" | ||||
|                         caption="Rata-Rata" css-class="custom-table-column" /> | ||||
|                     <DxColumn :width="120" alignment="center" data-field="max_durasi_recovery" data-type="number" | ||||
|                         caption="Max" css-class="custom-table-column" /> | ||||
|                     <DxColumn :width="120" 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="120" alignment="center" data-field="total_diatas_sla_recovery" data-type="number" | ||||
|                         caption=">SLA" css-class="custom-table-column" /> | ||||
|                     <DxColumn :width="120" alignment="center" data-field="total_dibawah_sla_recovery" data-type="number" | ||||
|                         caption="≤SLA" css-class="custom-table-column" /> | ||||
|                 </DxColumn> | ||||
|             </DxColumn> | ||||
|         </DxDataGrid> | ||||
|     </div> | ||||
|       <DxSearchPanel :visible="true" :highlight-case-sensitive="true" /> | ||||
|       <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="tanggal" | ||||
|         caption="Tanggal Lapor" | ||||
|         css-class="custom-table-column" | ||||
|       /> | ||||
|       <DxColumn alignment="center" caption="Laporan" css-class="custom-table-column"> | ||||
|         <DxColumn | ||||
|           :width="120" | ||||
|           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="120" | ||||
|             alignment="center" | ||||
|             data-field="total_selesai" | ||||
|             data-type="number" | ||||
|             caption="Jml" | ||||
|             css-class="custom-table-column" | ||||
|           /> | ||||
|           <DxColumn | ||||
|             :width="120" | ||||
|             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="120" | ||||
|             alignment="center" | ||||
|             data-field="total_inproses" | ||||
|             data-type="number" | ||||
|             caption="Jml" | ||||
|             css-class="custom-table-column" | ||||
|           /> | ||||
|           <DxColumn | ||||
|             :width="120" | ||||
|             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="Menit" css-class="custom-table-column"> | ||||
|           <DxColumn | ||||
|             :width="120" | ||||
|             alignment="center" | ||||
|             data-field="total_response" | ||||
|             data-type="number" | ||||
|             caption="Total" | ||||
|             css-class="custom-table-column" | ||||
|           /> | ||||
|           <DxColumn | ||||
|             :width="120" | ||||
|             alignment="center" | ||||
|             data-field="avg_durasi_response" | ||||
|             data-type="number" | ||||
|             caption="Rata-Rata" | ||||
|             css-class="custom-table-column" | ||||
|           /> | ||||
|           <DxColumn | ||||
|             :width="120" | ||||
|             alignment="center" | ||||
|             data-field="max_durasi_response" | ||||
|             data-type="number" | ||||
|             caption="Max" | ||||
|             css-class="custom-table-column" | ||||
|           /> | ||||
|           <DxColumn | ||||
|             :width="120" | ||||
|             alignment="center" | ||||
|             data-field="min_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="120" | ||||
|             alignment="center" | ||||
|             data-field="total_diatas_sla_response" | ||||
|             data-type="number" | ||||
|             caption=">SLA" | ||||
|             css-class="custom-table-column" | ||||
|           /> | ||||
|           <DxColumn | ||||
|             :width="120" | ||||
|             alignment="center" | ||||
|             data-field="total_dibawah_sla_response" | ||||
|             data-type="number" | ||||
|             caption="≤SLA" | ||||
|             css-class="custom-table-column" | ||||
|           /> | ||||
|         </DxColumn> | ||||
|       </DxColumn> | ||||
|       <DxColumn alignment="center" caption="Recovery Time" css-class="custom-table-column"> | ||||
|         <DxColumn alignment="center" caption="Menit" css-class="custom-table-column"> | ||||
|           <DxColumn | ||||
|             :width="120" | ||||
|             alignment="center" | ||||
|             data-field="total_recovery" | ||||
|             data-type="number" | ||||
|             caption="Total" | ||||
|             css-class="custom-table-column" | ||||
|           /> | ||||
|           <DxColumn | ||||
|             :width="120" | ||||
|             alignment="center" | ||||
|             data-field="avg_durasi_recovery" | ||||
|             data-type="number" | ||||
|             caption="Rata-Rata" | ||||
|             css-class="custom-table-column" | ||||
|           /> | ||||
|           <DxColumn | ||||
|             :width="120" | ||||
|             alignment="center" | ||||
|             data-field="max_durasi_recovery" | ||||
|             data-type="number" | ||||
|             caption="Max" | ||||
|             css-class="custom-table-column" | ||||
|           /> | ||||
|           <DxColumn | ||||
|             :width="120" | ||||
|             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="120" | ||||
|             alignment="center" | ||||
|             data-field="total_diatas_sla_recovery" | ||||
|             data-type="number" | ||||
|             caption=">SLA" | ||||
|             css-class="custom-table-column" | ||||
|           /> | ||||
|           <DxColumn | ||||
|             :width="120" | ||||
|             alignment="center" | ||||
|             data-field="total_dibawah_sla_recovery" | ||||
|             data-type="number" | ||||
|             caption="≤SLA" | ||||
|             css-class="custom-table-column" | ||||
|           /> | ||||
|         </DxColumn> | ||||
|       </DxColumn> | ||||
|     </DxDataGrid> | ||||
|   </div> | ||||
| </template> | ||||
|  | ||||
| <script setup lang="ts"> | ||||
| import Filters from '@/components/Form/Filters.vue' | ||||
| import Type9 from '@/components/Form/FiltersType/Type9.vue' | ||||
| import { onMounted, ref } from 'vue' | ||||
| import { useFiltersStore } from '@/stores/filters' | ||||
| import { ref } from 'vue' | ||||
| import { DxDataGrid } from 'devextreme-vue' | ||||
| import { DxColumn, DxColumnFixing, DxExport, DxLoadPanel, DxPaging, DxScrolling, DxSearchPanel, DxSelection } from 'devextreme-vue/data-grid' | ||||
| import { | ||||
|   DxColumn, | ||||
|   DxColumnFixing, | ||||
|   DxExport, | ||||
|   DxLoadPanel, | ||||
|   DxPaging, | ||||
|   DxScrolling, | ||||
|   DxSearchPanel, | ||||
|   DxSelection | ||||
| } from 'devextreme-vue/data-grid' | ||||
| import { jsPDF } from 'jspdf' | ||||
| import { exportDataGrid as exportToPdf } from 'devextreme/pdf_exporter' | ||||
| import { exportDataGrid as exportToExcel } from 'devextreme/excel_exporter' | ||||
| import { saveAs } from 'file-saver' | ||||
| import { Workbook } from 'exceljs' | ||||
| import { useQuery } from '@vue/apollo-composable' | ||||
| import gql from 'graphql-tag'; | ||||
| const position = { of: '#data' }; | ||||
| const showIndicator = ref(true); | ||||
| const shading = ref(true); | ||||
| const showPane = ref(true); | ||||
| import gql from 'graphql-tag' | ||||
|  | ||||
| const position = { of: '#data' } | ||||
| const showIndicator = ref(true) | ||||
| const shading = ref(true) | ||||
| const showPane = ref(true) | ||||
| const onExporting = (e: any) => { | ||||
|     if (e.format === 'pdf') { | ||||
|         const doc = new jsPDF() | ||||
|   if (e.format === 'pdf') { | ||||
|     const doc = new jsPDF() | ||||
|  | ||||
|         exportToPdf({ | ||||
|             jsPDFDocument: doc, | ||||
|             component: e.component, | ||||
|             indent: 5, | ||||
|         }).then(() => { | ||||
|             doc.save(`.pdf`) | ||||
|         }) | ||||
|     } else { | ||||
|         const workbook = new Workbook() | ||||
|         const worksheet = workbook.addWorksheet('Employees') | ||||
|     exportToPdf({ | ||||
|       jsPDFDocument: doc, | ||||
|       component: e.component, | ||||
|       indent: 5 | ||||
|     }).then(() => { | ||||
|       doc.save(`.pdf`) | ||||
|     }) | ||||
|   } else { | ||||
|     const workbook = new Workbook() | ||||
|     const worksheet = workbook.addWorksheet('Employees') | ||||
|  | ||||
|         exportToExcel({ | ||||
|             component: e.component, | ||||
|             worksheet, | ||||
|             autoFilterEnabled: true, | ||||
|         }).then(() => { | ||||
|             workbook.xlsx.writeBuffer().then((buffer: any) => { | ||||
|                 saveAs(new Blob([buffer], { type: 'application/octet-stream' }), 'DataGrid.xlsx') | ||||
|             }) | ||||
|         }) | ||||
|     exportToExcel({ | ||||
|       component: e.component, | ||||
|       worksheet, | ||||
|       autoFilterEnabled: true | ||||
|     }).then(() => { | ||||
|       workbook.xlsx.writeBuffer().then((buffer: any) => { | ||||
|         saveAs(new Blob([buffer], { type: 'application/octet-stream' }), 'DataGrid.xlsx') | ||||
|       }) | ||||
|     }) | ||||
|  | ||||
|         e.cancel = true | ||||
|     } | ||||
|     e.cancel = true | ||||
|   } | ||||
| } | ||||
|  | ||||
| const onSelectionChanged = ({ selectedRowsData }: any) => { | ||||
|     const data = selectedRowsData[0] | ||||
|     console.log(data) | ||||
|   const data = selectedRowsData[0] | ||||
|   console.log(data) | ||||
| } | ||||
|  | ||||
|  | ||||
| const data = ref<any[]>([]) | ||||
| const GET_REKAPITULASI_GANGGUAN_PER_TANGGAL = gql` | ||||
| query rekapitulasiGangguanPerTanggal( | ||||
|   query rekapitulasiGangguanPerTanggal( | ||||
|     $dateFrom: Date! | ||||
|     $dateTo: Date! | ||||
|     $posko: Int! | ||||
|     $idUid: Int! | ||||
|     $idUp3: Int! | ||||
| ) { | ||||
|   ) { | ||||
|     rekapitulasiGangguanPerTanggal( | ||||
|         dateFrom: $dateFrom | ||||
|         dateTo: $dateTo | ||||
|         posko: $posko | ||||
|         idUid: $idUid | ||||
|         idUp3: $idUp3 | ||||
|       dateFrom: $dateFrom | ||||
|       dateTo: $dateTo | ||||
|       posko: $posko | ||||
|       idUid: $idUid | ||||
|       idUp3: $idUp3 | ||||
|     ) { | ||||
|         nama_posko | ||||
|         avg_durasi_recovery | ||||
|         avg_durasi_response | ||||
|         max_durasi_recovery | ||||
|         max_durasi_response | ||||
|         min_durasi_recovery | ||||
|         min_durasi_response | ||||
|         persen_inproses | ||||
|         persen_selesai | ||||
|         tanggal | ||||
|         total | ||||
|         total_diatas_sla_recovery | ||||
|         total_diatas_sla_response | ||||
|         total_dibawah_sla_recovery | ||||
|         total_dibawah_sla_response | ||||
|         total_inproses | ||||
|         total_selesai | ||||
|         } | ||||
| }`; | ||||
|       nama_posko | ||||
|       avg_durasi_recovery | ||||
|       avg_durasi_response | ||||
|       max_durasi_recovery | ||||
|       max_durasi_response | ||||
|       min_durasi_recovery | ||||
|       min_durasi_response | ||||
|       persen_inproses | ||||
|       persen_selesai | ||||
|       tanggal | ||||
|       total | ||||
|       total_diatas_sla_recovery | ||||
|       total_diatas_sla_response | ||||
|       total_dibawah_sla_recovery | ||||
|       total_dibawah_sla_response | ||||
|       total_inproses | ||||
|       total_selesai | ||||
|     } | ||||
|   } | ||||
| ` | ||||
|  | ||||
| const { onResult, onError, loading, refetch } = useQuery(GET_REKAPITULASI_GANGGUAN_PER_TANGGAL, { | ||||
|     dateFrom: new Date("2023-10-01").toISOString().slice(0, 10), | ||||
|     dateTo: new Date("2023-10-01").toISOString().slice(0, 10), | ||||
|     posko: 0, | ||||
|     idUid: 0, | ||||
|     idUp3: 0, | ||||
|   dateFrom: new Date('2023-10-01').toISOString().slice(0, 10), | ||||
|   dateTo: new Date('2023-10-01').toISOString().slice(0, 10), | ||||
|   posko: 0, | ||||
|   idUid: 0, | ||||
|   idUp3: 0 | ||||
| }) | ||||
| const filterData = (params: any) => { | ||||
|     const dateValue = params.periode.split(' s/d ') | ||||
|     const { posko, uid, up3 } = params | ||||
|     refetch({ | ||||
|         dateFrom: dateValue[0] ? dateValue[0].split('-').reverse().join('-') : new Date().toISOString().slice(0, 10), | ||||
|         dateTo: dateValue[1] ? dateValue[1].split('-').reverse().join('-') : new Date().toISOString().slice(0, 10), | ||||
|         posko: posko ? posko.id : 0, | ||||
|         idUid: uid ? uid.id : 0, | ||||
|         idUp3: up3 ? up3.id : 0, | ||||
|     }) | ||||
|     onResult(queryResult => { | ||||
|         if (queryResult.data != undefined) { | ||||
|             data.value = queryResult.data.rekapitulasiGangguanPerTanggal; | ||||
|         } | ||||
|         console.log(queryResult.data) | ||||
|         console.log(queryResult.loading) | ||||
|         console.log(queryResult.networkStatus) | ||||
|     }) | ||||
|     onError((error) => { | ||||
|         console.log(error) | ||||
|     }) | ||||
|  | ||||
|   const dateValue = params.periode.split(' s/d ') | ||||
|   const { posko, uid, up3 } = params | ||||
|   refetch({ | ||||
|     dateFrom: dateValue[0] | ||||
|       ? dateValue[0].split('-').reverse().join('-') | ||||
|       : new Date().toISOString().slice(0, 10), | ||||
|     dateTo: dateValue[1] | ||||
|       ? dateValue[1].split('-').reverse().join('-') | ||||
|       : new Date().toISOString().slice(0, 10), | ||||
|     posko: posko ? posko.id : 0, | ||||
|     idUid: uid ? uid.id : 0, | ||||
|     idUp3: up3 ? up3.id : 0 | ||||
|   }) | ||||
|   onResult((queryResult) => { | ||||
|     if (queryResult.data != undefined) { | ||||
|       data.value = queryResult.data.rekapitulasiGangguanPerTanggal | ||||
|     } | ||||
|     console.log(queryResult.data) | ||||
|     console.log(queryResult.loading) | ||||
|     console.log(queryResult.networkStatus) | ||||
|   }) | ||||
|   onError((error) => { | ||||
|     console.log(error) | ||||
|   }) | ||||
| } | ||||
| const filters = ref(); | ||||
| </script> | ||||
|  | ||||
| const filters = ref() | ||||
| </script> | ||||
|   | ||||
		Reference in New Issue
	
	Block a user