feat: create pop up in rekapitulasi keluhan per fungsi bidang
This commit is contained in:
		| @@ -1,25 +1,57 @@ | ||||
| <template> | ||||
|   <Filters @reset-form="data = []" @run-search="() => filterData(filters)" :report-button="true" class="mb-4"> | ||||
|     <Type13 @update:filters="(value) => filters = value" /> | ||||
|   <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="onDataSelectionChanged" | ||||
|       :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-model:visible="loadingData" | ||||
|         :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="100" alignment="center" | ||||
|         :calculateCellValue="(item: any) => data.findIndex((i) => i == item) + 1" data-type="number" data-field="no" | ||||
|         caption="No" /> | ||||
|       <DxColumn | ||||
|         css-class="custom-table-column" | ||||
|         :width="100" | ||||
|         alignment="center" | ||||
|         :calculateCellValue="(item: any) => data.findIndex((i) => i == item) + 1" | ||||
|         data-type="number" | ||||
|         data-field="no" | ||||
|         caption="No" | ||||
|       /> | ||||
|       <!-- <DxColumn | ||||
|         :width="120" | ||||
|         alignment="center" | ||||
| @@ -30,108 +62,649 @@ | ||||
|         name="NamaUID" | ||||
|         v-if="filters.groupBy" | ||||
|       /> --> | ||||
|       <DxColumn :width="170" alignment="center" data-field="fungsi_bidang" caption="Fungsi Bidang" | ||||
|         css-class="custom-table-column" cell-template="cell-left" /> | ||||
|       <DxColumn | ||||
|         :width="170" | ||||
|         alignment="center" | ||||
|         data-field="fungsi_bidang" | ||||
|         caption="Fungsi Bidang" | ||||
|         css-class="custom-table-column" | ||||
|         cell-template="cell-left" | ||||
|       /> | ||||
|       <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="70" alignment="center" data-field="persen_selesai" data-type="number" caption="%" | ||||
|             css-class="custom-table-column" cell-template="percent" /> | ||||
|           <DxColumn | ||||
|             :width="150" | ||||
|             alignment="center" | ||||
|             data-field="total_selesai" | ||||
|             data-type="number" | ||||
|             caption="Jml" | ||||
|             css-class="custom-table-column" | ||||
|           /> | ||||
|           <DxColumn | ||||
|             :width="70" | ||||
|             alignment="center" | ||||
|             data-field="persen_selesai" | ||||
|             data-type="number" | ||||
|             caption="%" | ||||
|             css-class="custom-table-column" | ||||
|             cell-template="percent" | ||||
|           /> | ||||
|         </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="70" alignment="center" data-field="persen_inproses" data-type="number" caption="%" | ||||
|             css-class="custom-table-column" cell-template="percent" /> | ||||
|           <DxColumn | ||||
|             :width="150" | ||||
|             alignment="center" | ||||
|             data-field="total_inproses" | ||||
|             data-type="number" | ||||
|             caption="Jml" | ||||
|             css-class="custom-table-column" | ||||
|           /> | ||||
|           <DxColumn | ||||
|             :width="70" | ||||
|             alignment="center" | ||||
|             data-field="persen_inproses" | ||||
|             data-type="number" | ||||
|             caption="%" | ||||
|             css-class="custom-table-column" | ||||
|             cell-template="percent" | ||||
|           /> | ||||
|         </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_durasi_response" 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" cell-template="data-waktu" /> | ||||
|           <DxColumn :width="150" alignment="center" data-field="max_durasi_response" data-type="number" caption="Min" | ||||
|             css-class="custom-table-column" cell-template="data-waktu" /> | ||||
|           <DxColumn | ||||
|             :width="150" | ||||
|             alignment="center" | ||||
|             data-field="total_durasi_response" | ||||
|             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" | ||||
|             cell-template="data-waktu" | ||||
|           /> | ||||
|           <DxColumn | ||||
|             :width="150" | ||||
|             alignment="center" | ||||
|             data-field="max_durasi_response" | ||||
|             data-type="number" | ||||
|             caption="Min" | ||||
|             css-class="custom-table-column" | ||||
|             cell-template="data-waktu" | ||||
|           /> | ||||
|         </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_durasi_recovery" 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" cell-template="data-waktu" /> | ||||
|           <DxColumn :width="150" alignment="center" data-field="min_durasi_recovery" data-type="number" caption="Min" | ||||
|             css-class="custom-table-column" cell-template="data-waktu" /> | ||||
|           <DxColumn | ||||
|             :width="150" | ||||
|             alignment="center" | ||||
|             data-field="total_durasi_recovery" | ||||
|             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" | ||||
|             cell-template="data-waktu" | ||||
|           /> | ||||
|           <DxColumn | ||||
|             :width="150" | ||||
|             alignment="center" | ||||
|             data-field="min_durasi_recovery" | ||||
|             data-type="number" | ||||
|             caption="Min" | ||||
|             css-class="custom-table-column" | ||||
|             cell-template="data-waktu" | ||||
|           /> | ||||
|         </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> | ||||
|  | ||||
|       <DxSummary> | ||||
|         <DxTotalItem summary-type="sum" display-format="Total" show-in-column="no" css-class="text-white" /> | ||||
|         <DxTotalItem summary-type="sum" display-format="{0}" column="total" css-class="text-white" /> | ||||
|         <DxTotalItem summary-type="sum" display-format="{0}" column="total_selesai" css-class="text-white" /> | ||||
|         <DxTotalItem summary-type="sum" display-format="{0}%" column="persen_selesai" css-class="text-white" /> | ||||
|         <DxTotalItem summary-type="sum" display-format="{0}" column="total_inproses" css-class="text-white" /> | ||||
|         <DxTotalItem summary-type="sum" display-format="{0}%" column="persen_inproses" css-class="text-white" /> | ||||
|         <DxTotalItem summary-type="sum" display-format="{0}" column="total_durasi_response" css-class="text-white" /> | ||||
|         <DxTotalItem summary-type="sum" display-format="{0}" column="avg_durasi_response" css-class="text-white" /> | ||||
|         <DxTotalItem summary-type="sum" display-format="{0}" column="min_durasi_response" css-class="text-white" /> | ||||
|         <DxTotalItem summary-type="sum" display-format="{0}" column="max_durasi_response" css-class="text-white" /> | ||||
|         <DxTotalItem summary-type="sum" display-format="{0}" column="total_diatas_sla_response" | ||||
|           css-class="text-white" /> | ||||
|         <DxTotalItem summary-type="sum" display-format="{0}" column="total_dibawah_sla_response" | ||||
|           css-class="text-white" /> | ||||
|         <DxTotalItem summary-type="sum" display-format="{0}" column="total_durasi_recovery" css-class="text-white" /> | ||||
|         <DxTotalItem summary-type="sum" display-format="{0}" column="avg_durasi_recovery" css-class="text-white" /> | ||||
|         <DxTotalItem summary-type="sum" display-format="{0}" column="min_durasi_recovery" css-class="text-white" /> | ||||
|         <DxTotalItem summary-type="sum" display-format="{0}" column="max_durasi_recovery" css-class="text-white" /> | ||||
|         <DxTotalItem summary-type="sum" display-format="{0}" column="total_diatas_sla_recovery" | ||||
|           css-class="text-white" /> | ||||
|         <DxTotalItem summary-type="sum" display-format="{0}" column="total_dibawah_sla_recovery" | ||||
|           css-class="text-white" /> | ||||
|         <DxTotalItem | ||||
|           summary-type="sum" | ||||
|           display-format="Total" | ||||
|           show-in-column="no" | ||||
|           css-class="text-white" | ||||
|         /> | ||||
|         <DxTotalItem | ||||
|           summary-type="sum" | ||||
|           display-format="{0}" | ||||
|           column="total" | ||||
|           css-class="text-white" | ||||
|         /> | ||||
|         <DxTotalItem | ||||
|           summary-type="sum" | ||||
|           display-format="{0}" | ||||
|           column="total_selesai" | ||||
|           css-class="text-white" | ||||
|         /> | ||||
|         <DxTotalItem | ||||
|           summary-type="sum" | ||||
|           display-format="{0}%" | ||||
|           column="persen_selesai" | ||||
|           css-class="text-white" | ||||
|         /> | ||||
|         <DxTotalItem | ||||
|           summary-type="sum" | ||||
|           display-format="{0}" | ||||
|           column="total_inproses" | ||||
|           css-class="text-white" | ||||
|         /> | ||||
|         <DxTotalItem | ||||
|           summary-type="sum" | ||||
|           display-format="{0}%" | ||||
|           column="persen_inproses" | ||||
|           css-class="text-white" | ||||
|         /> | ||||
|         <DxTotalItem | ||||
|           summary-type="sum" | ||||
|           display-format="{0}" | ||||
|           column="total_durasi_response" | ||||
|           css-class="text-white" | ||||
|         /> | ||||
|         <DxTotalItem | ||||
|           summary-type="sum" | ||||
|           display-format="{0}" | ||||
|           column="avg_durasi_response" | ||||
|           css-class="text-white" | ||||
|         /> | ||||
|         <DxTotalItem | ||||
|           summary-type="sum" | ||||
|           display-format="{0}" | ||||
|           column="min_durasi_response" | ||||
|           css-class="text-white" | ||||
|         /> | ||||
|         <DxTotalItem | ||||
|           summary-type="sum" | ||||
|           display-format="{0}" | ||||
|           column="max_durasi_response" | ||||
|           css-class="text-white" | ||||
|         /> | ||||
|         <DxTotalItem | ||||
|           summary-type="sum" | ||||
|           display-format="{0}" | ||||
|           column="total_diatas_sla_response" | ||||
|           css-class="text-white" | ||||
|         /> | ||||
|         <DxTotalItem | ||||
|           summary-type="sum" | ||||
|           display-format="{0}" | ||||
|           column="total_dibawah_sla_response" | ||||
|           css-class="text-white" | ||||
|         /> | ||||
|         <DxTotalItem | ||||
|           summary-type="sum" | ||||
|           display-format="{0}" | ||||
|           column="total_durasi_recovery" | ||||
|           css-class="text-white" | ||||
|         /> | ||||
|         <DxTotalItem | ||||
|           summary-type="sum" | ||||
|           display-format="{0}" | ||||
|           column="avg_durasi_recovery" | ||||
|           css-class="text-white" | ||||
|         /> | ||||
|         <DxTotalItem | ||||
|           summary-type="sum" | ||||
|           display-format="{0}" | ||||
|           column="min_durasi_recovery" | ||||
|           css-class="text-white" | ||||
|         /> | ||||
|         <DxTotalItem | ||||
|           summary-type="sum" | ||||
|           display-format="{0}" | ||||
|           column="max_durasi_recovery" | ||||
|           css-class="text-white" | ||||
|         /> | ||||
|         <DxTotalItem | ||||
|           summary-type="sum" | ||||
|           display-format="{0}" | ||||
|           column="total_diatas_sla_recovery" | ||||
|           css-class="text-white" | ||||
|         /> | ||||
|         <DxTotalItem | ||||
|           summary-type="sum" | ||||
|           display-format="{0}" | ||||
|           column="total_dibawah_sla_recovery" | ||||
|           css-class="text-white" | ||||
|         /> | ||||
|       </DxSummary> | ||||
|  | ||||
|       <template #data-waktu="{ data }"> | ||||
|         <p> | ||||
|         <p class="cursor-pointer" @click="showDialogDataSelected()"> | ||||
|           {{ parseInt(data.text) ? formatWaktu(data.text) : '-' }} | ||||
|         </p> | ||||
|       </template> | ||||
|       <template #percent="{ data }"> | ||||
|         <p>{{ data.text }}%</p> | ||||
|         <p class="cursor-pointer" @click="showDialogDataSelected()">{{ data.text }}%</p> | ||||
|       </template> | ||||
|       <template #cell-left="{ data }"> | ||||
|         <p class="text-left"> | ||||
|         <p class="cursor-pointer text-left" @click="showDialogDataSelected()"> | ||||
|           {{ data.text }} | ||||
|         </p> | ||||
|       </template> | ||||
|     </DxDataGrid> | ||||
|   </div> | ||||
|  | ||||
|   <DetailDialog | ||||
|     :open="dialogDataSelected" | ||||
|     title="Rekapitulasi Keluhan Per Fungsi Bidang" | ||||
|     @on-close="closeDialogDataSelected" | ||||
|     :full-width="true" | ||||
|   > | ||||
|     <div class="w-full mb-4 lg:w-[70%] lg:float-left"> | ||||
|       <div class="p-4 bg-white rounded-xl lg:mr-4"> | ||||
|         <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="onDataSubSelectionChanged" | ||||
|           :column-width="100" | ||||
|           @exporting="onExporting" | ||||
|           :allow-column-resizing="true" | ||||
|           column-resizing-mode="widget" | ||||
|         > | ||||
|           <DxSelection mode="single" /> | ||||
|           <DxPaging :page-size="5" :enabled="true" /> | ||||
|           <DxPager | ||||
|             :visible="true" | ||||
|             :allowed-page-sizes="[5, 10, 20]" | ||||
|             display-mode="full" | ||||
|             :show-page-size-selector="true" | ||||
|             :show-info="true" | ||||
|             :show-navigation-buttons="true" | ||||
|           /> | ||||
|           <DxLoadPanel | ||||
|             :position="position" | ||||
|             :show-indicator="showIndicator" | ||||
|             :show-pane="showPane" | ||||
|             :shading="shading" | ||||
|             v-model:visible="loadingSubData" | ||||
|             :enabled="true" | ||||
|           /> | ||||
|           <DxSearchPanel :visible="true" :highlight-case-sensitive="true" /> | ||||
|           <DxExport | ||||
|             :enabled="true" | ||||
|             :formats="['pdf', 'xlsx', 'document']" | ||||
|             :allow-export-selected-data="false" | ||||
|           /> | ||||
|  | ||||
|           <DxColumn | ||||
|             css-class="custom-table-column" | ||||
|             :width="50" | ||||
|             alignment="center" | ||||
|             :calculateCellValue=" | ||||
|               (item: any) => dummyData.gangguan.rekap.detailGangguan.findIndex((i) => i == item) + 1 | ||||
|             " | ||||
|             data-type="number" | ||||
|             caption="No" | ||||
|             cell-template="cellRight" | ||||
|           /> | ||||
|           <DxColumn | ||||
|             :width="150" | ||||
|             alignment="center" | ||||
|             data-field="no_laporan" | ||||
|             caption="No Laporan" | ||||
|             css-class="custom-table-column" | ||||
|             cell-template="cellLeft" | ||||
|           /> | ||||
|           <DxColumn | ||||
|             :width="150" | ||||
|             alignment="center" | ||||
|             data-field="waktu_lapor" | ||||
|             caption="Tgl Lapor" | ||||
|             css-class="custom-table-column" | ||||
|             cell-template="cellLeft" | ||||
|           /> | ||||
|           <DxColumn | ||||
|             :width="150" | ||||
|             alignment="center" | ||||
|             data-field="" | ||||
|             caption="Dalam Proses Bidang" | ||||
|             :allow-resizing="false" | ||||
|             css-class="custom-table-column" | ||||
|             cell-template="cellLeft" | ||||
|           /> | ||||
|           <DxColumn | ||||
|             :width="150" | ||||
|             alignment="center" | ||||
|             data-field="" | ||||
|             caption="Selesai Bidang Unit" | ||||
|             :allow-resizing="false" | ||||
|             css-class="custom-table-column" | ||||
|             cell-template="cellLeft" | ||||
|           /> | ||||
|           <DxColumn | ||||
|             :width="150" | ||||
|             alignment="center" | ||||
|             data-field="durasi_response_time" | ||||
|             caption="Durasi Response Time" | ||||
|             :allow-resizing="false" | ||||
|             css-class="custom-table-column" | ||||
|             cell-template="data-waktu" | ||||
|           /> | ||||
|           <DxColumn | ||||
|             :width="150" | ||||
|             alignment="center" | ||||
|             data-field="durasi_recovery_time" | ||||
|             caption="Durasi Recovery Time" | ||||
|             :allow-resizing="false" | ||||
|             css-class="custom-table-column" | ||||
|             cell-template="data-waktu" | ||||
|           /> | ||||
|           <DxColumn | ||||
|             :width="150" | ||||
|             alignment="center" | ||||
|             data-field="" | ||||
|             caption="Status" | ||||
|             :allow-resizing="false" | ||||
|             css-class="custom-table-column" | ||||
|             cell-template="data-waktu" | ||||
|           /> | ||||
|           <DxColumn | ||||
|             :width="150" | ||||
|             alignment="center" | ||||
|             data-field="idpel_nometer" | ||||
|             caption="IDPEL/NO METER" | ||||
|             :allow-resizing="false" | ||||
|             css-class="custom-table-column" | ||||
|             cell-template="data-waktu" | ||||
|           /> | ||||
|           <DxColumn | ||||
|             :width="150" | ||||
|             alignment="center" | ||||
|             data-field="nama_pelapor" | ||||
|             caption="Nama Pelapor" | ||||
|             :allow-resizing="false" | ||||
|             css-class="custom-table-column" | ||||
|             cell-template="cellLeft" | ||||
|           /> | ||||
|           <DxColumn | ||||
|             :width="200" | ||||
|             alignment="center" | ||||
|             data-field="alamat_pelapor" | ||||
|             caption="Alamat Pelapor" | ||||
|             :allow-resizing="false" | ||||
|             css-class="custom-table-column" | ||||
|             cell-template="cellLeft" | ||||
|           /> | ||||
|           <DxColumn | ||||
|             :width="150" | ||||
|             alignment="center" | ||||
|             data-field="no_telp_pelapor" | ||||
|             caption="No Tlp Pelapor" | ||||
|             :allow-resizing="false" | ||||
|             css-class="custom-table-column" | ||||
|             cell-template="cellLeft" | ||||
|           /> | ||||
|           <DxColumn | ||||
|             :width="200" | ||||
|             alignment="center" | ||||
|             data-field="keterangan_pelapor" | ||||
|             caption="Keterangan Pelapor" | ||||
|             :allow-resizing="false" | ||||
|             css-class="custom-table-column" | ||||
|             cell-template="cellLeft" | ||||
|           /> | ||||
|           <DxColumn | ||||
|             :width="150" | ||||
|             alignment="center" | ||||
|             data-field="" | ||||
|             caption="Rayon" | ||||
|             :allow-resizing="false" | ||||
|             css-class="custom-table-column" | ||||
|             cell-template="cellLeft" | ||||
|           /> | ||||
|           <DxColumn | ||||
|             :width="150" | ||||
|             alignment="center" | ||||
|             data-field="" | ||||
|             caption="Uraian" | ||||
|             :allow-resizing="false" | ||||
|             css-class="custom-table-column" | ||||
|             cell-template="cellLeft" | ||||
|           /> | ||||
|           <DxColumn | ||||
|             :width="150" | ||||
|             alignment="center" | ||||
|             data-field="" | ||||
|             caption="Respon Pelanggan" | ||||
|             :allow-resizing="false" | ||||
|             css-class="custom-table-column" | ||||
|             cell-template="cellLeft" | ||||
|           /> | ||||
|  | ||||
|           <template #cellLeft="{ data }"> | ||||
|             <p class="text-left cursor-pointer"> | ||||
|               {{ data.text }} | ||||
|             </p> | ||||
|           </template> | ||||
|  | ||||
|           <template #cellRight="{ data }"> | ||||
|             <p class="text-right cursor-pointer"> | ||||
|               {{ data.text }} | ||||
|             </p> | ||||
|           </template> | ||||
|  | ||||
|           <template #data-waktu="{ data }"> | ||||
|             <p> | ||||
|               {{ parseInt(data.text) ? formatWaktu(data.text) : '-' }} | ||||
|             </p> | ||||
|           </template> | ||||
|         </DxDataGrid> | ||||
|       </div> | ||||
|     </div> | ||||
|  | ||||
|     <div class="w-full mb-4 lg:w-[30%] lg:float-right"> | ||||
|       <div class="p-4 space-y-2 bg-white rounded-xl"> | ||||
|         <div class="flex flex-row items-center justify-between w-full"> | ||||
|           <h3 class="text-sm font-medium w-[135px] text-gray-800">No Laporan:</h3> | ||||
|           <InputText :readonly="true" :value="dataSubSelected?.no_laporan" class-name="flex-1" /> | ||||
|         </div> | ||||
|  | ||||
|         <div class="flex flex-row items-center justify-between w-full"> | ||||
|           <h3 class="text-sm font-medium w-[135px] text-gray-800">Tgl Lapor:</h3> | ||||
|           <InputText :readonly="true" :value="dataSubSelected?.waktu_lapor" class-name="flex-1" /> | ||||
|         </div> | ||||
|  | ||||
|         <div class="flex flex-row items-center justify-between w-full"> | ||||
|           <h3 class="text-sm font-medium w-[135px] text-gray-800">Dalam Proses Bidang:</h3> | ||||
|           <InputText | ||||
|             :readonly="true" | ||||
|             :value="dataSubSelected?.dalam_proses_bidang" | ||||
|             class-name="flex-1" | ||||
|           /> | ||||
|         </div> | ||||
|  | ||||
|         <div class="flex flex-row items-center justify-between w-full"> | ||||
|           <h3 class="text-sm font-medium w-[135px] text-gray-800">Selesai Bidang Unit:</h3> | ||||
|           <InputText | ||||
|             :readonly="true" | ||||
|             :value="dataSubSelected?.selesai_bidang_unit" | ||||
|             class-name="flex-1" | ||||
|           /> | ||||
|         </div> | ||||
|  | ||||
|         <div class="flex flex-row items-center justify-between w-full"> | ||||
|           <h3 class="text-sm font-medium w-[135px] text-gray-800">Durasi Response Time:</h3> | ||||
|           <InputText | ||||
|             :readonly="true" | ||||
|             :value=" | ||||
|               parseInt(dataSubSelected?.durasi_response_time) | ||||
|                 ? formatWaktu(dataSubSelected?.durasi_response_time) | ||||
|                 : '-' | ||||
|             " | ||||
|             class-name="flex-1" | ||||
|           /> | ||||
|         </div> | ||||
|  | ||||
|         <div class="flex flex-row items-center justify-between w-full"> | ||||
|           <h3 class="text-sm font-medium w-[135px] text-gray-800">Durasi Recovery Time:</h3> | ||||
|           <InputText | ||||
|             :readonly="true" | ||||
|             :value=" | ||||
|               parseInt(dataSubSelected?.durasi_recovery_time) | ||||
|                 ? formatWaktu(dataSubSelected?.durasi_recovery_time) | ||||
|                 : '-' | ||||
|             " | ||||
|             class-name="flex-1" | ||||
|           /> | ||||
|         </div> | ||||
|  | ||||
|         <div class="flex flex-row items-center justify-between w-full"> | ||||
|           <h3 class="text-sm font-medium w-[135px] text-gray-800">Status:</h3> | ||||
|           <InputText :readonly="true" :value="dataSubSelected?.status_akhir" class-name="flex-1" /> | ||||
|         </div> | ||||
|  | ||||
|         <div class="flex flex-row items-center justify-between w-full"> | ||||
|           <h3 class="text-sm font-medium w-[135px] text-gray-800">IDPEL/NO METER:</h3> | ||||
|           <InputText :readonly="true" :value="dataSubSelected?.idpel_nometer" class-name="flex-1" /> | ||||
|         </div> | ||||
|  | ||||
|         <div class="flex flex-row items-center justify-between w-full"> | ||||
|           <h3 class="text-sm font-medium w-[135px] text-gray-800">Nama Pelapor:</h3> | ||||
|           <InputText :readonly="true" :value="dataSubSelected?.nama_pelapor" class-name="flex-1" /> | ||||
|         </div> | ||||
|  | ||||
|         <div class="flex flex-row items-center justify-between w-full"> | ||||
|           <h3 class="text-sm font-medium w-[135px] text-gray-800">Alamat Pelapor:</h3> | ||||
|           <InputText | ||||
|             :readonly="true" | ||||
|             type="textarea" | ||||
|             :value="dataSubSelected?.alamat_pelapor" | ||||
|             class-name="flex-1" | ||||
|           /> | ||||
|         </div> | ||||
|  | ||||
|         <div class="flex flex-row items-center justify-between w-full"> | ||||
|           <h3 class="text-sm font-medium w-[135px] text-gray-800">NO Telp Pelapor:</h3> | ||||
|           <InputText | ||||
|             :readonly="true" | ||||
|             :value="dataSubSelected?.no_telp_pelapor" | ||||
|             class-name="flex-1" | ||||
|           /> | ||||
|         </div> | ||||
|  | ||||
|         <div class="flex flex-row items-center justify-between w-full"> | ||||
|           <h3 class="text-sm font-medium w-[135px] text-gray-800">Keterangan Pelapor:</h3> | ||||
|           <InputText | ||||
|             :readonly="true" | ||||
|             :value="dataSubSelected?.keterangan_pelapor" | ||||
|             class-name="flex-1" | ||||
|           /> | ||||
|         </div> | ||||
|  | ||||
|         <div class="flex flex-row items-center justify-between w-full"> | ||||
|           <h3 class="text-sm font-medium w-[135px] text-gray-800">Rayon:</h3> | ||||
|           <InputText :readonly="true" :value="dataSubSelected?.rayon" class-name="flex-1" /> | ||||
|         </div> | ||||
|  | ||||
|         <div class="flex flex-row items-center justify-between w-full"> | ||||
|           <h3 class="text-sm font-medium w-[135px] text-gray-800">Uraian:</h3> | ||||
|           <InputText | ||||
|             :readonly="true" | ||||
|             type="textarea" | ||||
|             :value="dataSubSelected?.uraian" | ||||
|             class-name="flex-1" | ||||
|           /> | ||||
|         </div> | ||||
|  | ||||
|         <div class="flex flex-row items-center justify-between w-full"> | ||||
|           <h3 class="text-sm font-medium w-[135px] text-gray-800">Response Pelanggan:</h3> | ||||
|           <InputText | ||||
|             :readonly="true" | ||||
|             type="textarea" | ||||
|             :value="dataSubSelected?.response_pelanggan" | ||||
|             class-name="flex-1" | ||||
|           /> | ||||
|         </div> | ||||
|       </div> | ||||
|     </div> | ||||
|   </DetailDialog> | ||||
| </template> | ||||
|  | ||||
| <script setup lang="ts"> | ||||
| import DetailDialog from '@/components/Dialogs/DetailDialog.vue' | ||||
| import InputText from '@/components/InputText.vue' | ||||
| import Filters from '@/components/Form/Filters.vue' | ||||
| import Type13 from '@/components/Form/FiltersType/Type13.vue' | ||||
| import { formatWaktu } from '@/components/Form/FiltersType/reference' | ||||
| import { ref } from 'vue' | ||||
| import { ref, onMounted, watch } from 'vue' | ||||
| import { DxDataGrid } from 'devextreme-vue' | ||||
| import { | ||||
|   DxColumn, | ||||
| @@ -139,11 +712,12 @@ import { | ||||
|   DxExport, | ||||
|   DxLoadPanel, | ||||
|   DxPaging, | ||||
|   DxPager, | ||||
|   DxSummary, | ||||
|   DxTotalItem, | ||||
|   DxScrolling, | ||||
|   DxSearchPanel, | ||||
|   DxSelection, | ||||
|   DxSummary, | ||||
|   DxTotalItem | ||||
|   DxSelection | ||||
| } from 'devextreme-vue/data-grid' | ||||
| import { jsPDF } from 'jspdf' | ||||
| import { exportDataGrid as exportToPdf } from 'devextreme/pdf_exporter' | ||||
| @@ -151,11 +725,75 @@ import { exportDataGrid as exportToExcel } from 'devextreme/excel_exporter' | ||||
| import { saveAs } from 'file-saver' | ||||
| import { Workbook } from 'exceljs' | ||||
| import { useQuery } from '@vue/apollo-composable' | ||||
| import { formatWaktu } from '@/components/Form/FiltersType/reference' | ||||
| import { queries } from '@/utils/api/api.graphql' | ||||
| import { dummyData } from '@/utils/dummy' | ||||
|  | ||||
| const position = { of: '#data' } | ||||
| const showIndicator = ref(true) | ||||
| const shading = ref(true) | ||||
| const showPane = ref(true) | ||||
| const data = ref<any[]>([]) | ||||
| const dataSub = ref<any[]>([]) | ||||
| const dataSelected = ref<any>() | ||||
| const dataSubSelected = ref<any>() | ||||
| const dialogDataSelected = ref(false) | ||||
| const closeDialogDataSelected = () => (dialogDataSelected.value = false) | ||||
| const loadingData = ref(false) | ||||
| const loadingSubData = ref(false) | ||||
|  | ||||
| const filterData = (params: any) => { | ||||
|   const { onResult, onError, loading, refetch } = useQuery( | ||||
|     queries.keluhan.rekap.keluhanPenyelesaianPerFungsiBIidang, | ||||
|     { | ||||
|       dateFrom: new Date('2023-10-01').toISOString().slice(0, 10), | ||||
|       dateTo: new Date('2023-10-01').toISOString().slice(0, 10), | ||||
|       idUlp: 0, | ||||
|       idUid: 0, | ||||
|       idUp3: 0 | ||||
|     } | ||||
|   ) | ||||
|  | ||||
|   const dateValue = params.periode.split(' s/d ') | ||||
|   const { ulp, 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), | ||||
|     idUlp: ulp ? ulp.id : 0, | ||||
|     idUid: uid ? uid.id : 0, | ||||
|     idUp3: up3 ? up3.id : 0 | ||||
|   }) | ||||
|  | ||||
|   onResult((queryResult) => { | ||||
|     if (queryResult.data != undefined) { | ||||
|       data.value = queryResult.data.rekapitulasiKeluhanPenyelesaianPerFungsiBidang | ||||
|     } | ||||
|     console.log(queryResult.data) | ||||
|     console.log(queryResult.loading) | ||||
|     console.log(queryResult.networkStatus) | ||||
|   }) | ||||
|  | ||||
|   onError((error) => { | ||||
|     console.log(error) | ||||
|   }) | ||||
|  | ||||
|   watch(loading, (value) => { | ||||
|     loadingData.value = value | ||||
|   }) | ||||
| } | ||||
|  | ||||
| const getDetail = () => { | ||||
|   dataSub.value = dummyData.keluhan.rekap.rekapitulasiKeluhanPenyelesaianPerFungsiBidang | ||||
| } | ||||
|  | ||||
| const showDialogDataSelected = () => { | ||||
|   dialogDataSelected.value = true | ||||
|   getDetail() | ||||
| } | ||||
|  | ||||
| const onExporting = (e: any) => { | ||||
|   if (e.format === 'pdf') { | ||||
| @@ -186,84 +824,21 @@ const onExporting = (e: any) => { | ||||
|   } | ||||
| } | ||||
|  | ||||
| const onSelectionChanged = ({ selectedRowsData }: any) => { | ||||
| const onDataSelectionChanged = ({ selectedRowsData }: any) => { | ||||
|   const data = selectedRowsData[0] | ||||
|   dataSelected.value = data | ||||
|   console.log(data) | ||||
| } | ||||
|  | ||||
| const onDataSubSelectionChanged = ({ selectedRowsData }: any) => { | ||||
|   const data = selectedRowsData[0] | ||||
|   dataSubSelected.value = data | ||||
|   console.log(data) | ||||
| } | ||||
|  | ||||
| const data = ref<any[]>([]) | ||||
| // const GET_DATA = gql` | ||||
| //   query rekapitulasiKeluhanPenyelesaianPerFungsiBidang( | ||||
| //     $dateFrom: Date! | ||||
| //     $dateTo: Date! | ||||
| //     $idUlp: Int! | ||||
| //     $idUid: Int! | ||||
| //     $idUp3: Int! | ||||
| //   ) { | ||||
| //     rekapitulasiKeluhanPenyelesaianPerFungsiBidang( | ||||
| //       dateFrom: $dateFrom | ||||
| //       dateTo: $dateTo | ||||
| //       idUlp: $idUlp | ||||
| //       idUid: $idUid | ||||
| //       idUp3: $idUp3 | ||||
| //     ) { | ||||
| //       id_uid | ||||
| //       nama_uid | ||||
| //       fungsi_bidang | ||||
| //       total | ||||
| //       total_durasi_response | ||||
| //       total_durasi_recovery | ||||
| //       total_selesai | ||||
| //       persen_selesai | ||||
| //       total_inproses | ||||
| //       persen_inproses | ||||
| //       avg_durasi_response | ||||
| //       min_durasi_response | ||||
| //       max_durasi_response | ||||
| //       total_dibawah_sla_response | ||||
| //       total_diatas_sla_response | ||||
| //       avg_durasi_recovery | ||||
| //       min_durasi_recovery | ||||
| //       max_durasi_recovery | ||||
| //       total_dibawah_sla_recovery | ||||
| //       total_diatas_sla_recovery | ||||
| //     } | ||||
| //   } | ||||
| // ` | ||||
| const { onResult, onError, loading, refetch } = useQuery(queries.keluhan.rekap.keluhanPenyelesaianPerFungsiBIidang, { | ||||
|   dateFrom: new Date('2023-10-01').toISOString().slice(0, 10), | ||||
|   dateTo: new Date('2023-10-01').toISOString().slice(0, 10), | ||||
|   idUlp: 0, | ||||
|   idUid: 0, | ||||
|   idUp3: 0 | ||||
| }) | ||||
| const filters = ref({ groupBy: false }) | ||||
|  | ||||
| const filterData = (params: any) => { | ||||
|   const dateValue = params.periode.split(' s/d ') | ||||
|   const { ulp, 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), | ||||
|     idUlp: ulp ? ulp.id : 0, | ||||
|     idUid: uid ? uid.id : 0, | ||||
|     idUp3: up3 ? up3.id : 0 | ||||
|   }) | ||||
|  | ||||
|   onResult((queryResult) => { | ||||
|     if (queryResult.data != undefined) { | ||||
|       data.value = queryResult.data.rekapitulasiKeluhanPenyelesaianPerFungsiBidang | ||||
|     } | ||||
|     console.log(queryResult.data) | ||||
|     console.log(queryResult.loading) | ||||
|     console.log(queryResult.networkStatus) | ||||
|   }) | ||||
|   onError((error) => { | ||||
|     console.log(error) | ||||
|   }) | ||||
| } | ||||
| </script> | ||||
| onMounted(() => { | ||||
|   data.value = dummyData.keluhan.rekap.rekapitulasiKeluhanPenyelesaianPerFungsiBidang | ||||
| }) | ||||
| </script> | ||||
|   | ||||
		Reference in New Issue
	
	Block a user