feat: create pdf export in Daftar Gangguan Dialihkan ke Posko Lain

This commit is contained in:
kur0nek-o
2024-03-12 20:54:46 +07:00
parent 8be9ae3dc4
commit 0527227018

View File

@ -1,181 +1,342 @@
<template> <template>
<Filters @reset-form="data = []" @run-search="() => filterData(filters)" class="mb-4"> <Filters @reset-form="data = []" @run-search="() => filterData(filters)" class="mb-4">
<Type1 @update:filters="(value) => filters = value" /> <Type1 @update:filters="(value) => (filters = value)" />
</Filters> </Filters>
<div id="dataTable"> <div id="dataTable">
<DxDataGrid class="max-h-[calc(100vh-140px)] mb-10" :remote-operations="true" :data-source="data" <DxDataGrid
key-expr="no_laporan" :show-column-lines="true" :show-row-lines="false" :show-borders="true" class="max-h-[calc(100vh-140px)] mb-10"
:row-alternation-enabled="true" :hover-state-enabled="true" @selection-changed="onSelectionChanged" :remote-operations="true"
:column-width="100" @exporting="onExporting" :allow-column-resizing="true" column-resizing-mode="widget"> :data-source="data"
<DxPaging :page-size="5" :enabled="true" /> key-expr="no_laporan"
<DxPager :visible="true" :allowed-page-sizes="[5, 10, 20]" display-mode="full" :show-column-lines="true"
:show-page-size-selector="true" :show-info="true" :show-navigation-buttons="true" /> :show-row-lines="false"
<DxSelection mode="single" /> :show-borders="true"
<!-- <DxScrolling column-rendering-mode="virtual" mode="virtual" row-rendering-mode="virtual" /> --> :row-alternation-enabled="true"
<DxLoadPanel :position="position" :show-indicator="showIndicator" :show-pane="showPane" :shading="shading" :hover-state-enabled="true"
v-if="loading" v-model:visible="loading" :enabled="true" /> @selection-changed="onSelectionChanged"
<DxSearchPanel :visible="true" :highlight-case-sensitive="true" /> :column-width="100"
<DxExport :enabled="true" :formats="['pdf', 'xlsx', 'document']" :allow-export-selected-data="false" /> @exporting="onExporting"
<DxColumn css-class="custom-table-column !text-right" :width="50" alignment="center" :allow-column-resizing="true"
:calculateCellValue="(item: any) => data.findIndex((i) => i == item) + 1" data-type="number" column-resizing-mode="widget"
caption="No" /> >
<DxColumn css-class="custom-table-column" :width="150" alignment="center" data-field="no_laporan" <DxPaging :page-size="5" :enabled="true" />
caption="No Laporan" cell-template="cellCenter" /> <DxPager
<DxColumn css-class="custom-table-column" :width="150" alignment="center" data-field="pembuat_laporan" :visible="true"
caption="Pembuat Laporan" cell-template="cellLeft" /> :allowed-page-sizes="[5, 10, 20]"
<DxColumn css-class="custom-table-column" :width="150" alignment="center" data-field="waktu_lapor" display-mode="full"
caption="Tgl Lapor" cell-template="cellCenter" /> :show-page-size-selector="true"
<DxColumn css-class="custom-table-column" :width="150" alignment="center" data-field="waktu_dialihkan" :show-info="true"
caption="Tgl Dialihkan" cell-template="cellCenter" /> :show-navigation-buttons="true"
<DxColumn css-class="custom-table-column" :width="150" alignment="center" data-field="waktu_response" />
caption="Tgl Response" cell-template="cellCenter" /> <DxSelection mode="single" />
<DxColumn css-class="custom-table-column" :width="150" alignment="center" data-field="waktu_recovery" <!-- <DxScrolling column-rendering-mode="virtual" mode="virtual" row-rendering-mode="virtual" /> -->
caption="Tgl Recovery" cell-template="cellCenter" /> <DxLoadPanel
<DxColumn css-class="custom-table-column" :width="170" alignment="center" data-field="durasi_response_time" :position="position"
caption="Durasi Response Time" cell-template="data-waktu" /> :show-indicator="showIndicator"
<DxColumn css-class="custom-table-column" :width="170" alignment="center" data-field="durasi_recovery_time" :show-pane="showPane"
caption="Durasi Recovery Time" cell-template="data-waktu" /> :shading="shading"
<DxColumn css-class="custom-table-column" :width="170" alignment="center" data-field="nama_posko_lama" v-if="loading"
caption="Posko Asal" cell-template="cellLeft" /> v-model:visible="loading"
<DxColumn css-class="custom-table-column" :width="170" alignment="center" data-field="nama_posko_baru" :enabled="true"
caption="Posko Tujuan" cell-template="cellLeft" /> />
<DxColumn css-class="custom-table-column" :width="150" alignment="center" data-field="status_akhir" <DxSearchPanel :visible="true" :highlight-case-sensitive="true" />
caption="Status" cell-template="cellLeft" /> <DxExport
<DxColumn css-class="custom-table-column" :width="150" alignment="center" data-field="idpel_nometer" :enabled="true"
caption="IDPEL/NO METER" cell-template="cellCenter" /> :formats="['pdf', 'xlsx', 'document']"
<DxColumn css-class="custom-table-column" :width="150" alignment="center" data-field="nama_pelapor" :allow-export-selected-data="false"
caption="Nama Pelapor" cell-template="cellLeft" /> />
<DxColumn css-class="custom-table-column" :width="170" alignment="center" data-field="alamat_pelapor" <DxColumn
caption="Alamat Pelapor" cell-template="cellLeft" /> css-class="custom-table-column !text-right"
<DxColumn css-class="custom-table-column" :width="150" alignment="center" data-field="no_telp_pelapor" :width="50"
caption="No Telp Pelapor" cell-template="cellCenter" /> alignment="center"
<DxColumn css-class="custom-table-column" :width="250" alignment="center" data-field="keterangan_pelapor" :calculateCellValue="(item: any) => data.findIndex((i) => i == item) + 1"
caption="Keterangan Pelapor" cell-template="cellLeft" /> data-type="number"
<DxColumn css-class="custom-table-column" :width="150" alignment="center" data-field="media" caption="No"
caption="Sumber Lapor" cell-template="cellLeft" /> />
<DxColumn css-class="custom-table-column" :width="170" alignment="center" data-field="nama_posko_lama" <DxColumn
caption="Posko" cell-template="cellLeft" /> css-class="custom-table-column"
:width="150"
alignment="center"
data-field="no_laporan"
caption="No Laporan"
cell-template="cellCenter"
/>
<DxColumn
css-class="custom-table-column"
:width="150"
alignment="center"
data-field="pembuat_laporan"
caption="Pembuat Laporan"
cell-template="cellLeft"
/>
<DxColumn
css-class="custom-table-column"
:width="150"
alignment="center"
data-field="waktu_lapor"
caption="Tgl Lapor"
cell-template="cellCenter"
/>
<DxColumn
css-class="custom-table-column"
:width="150"
alignment="center"
data-field="waktu_dialihkan"
caption="Tgl Dialihkan"
cell-template="cellCenter"
/>
<DxColumn
css-class="custom-table-column"
:width="150"
alignment="center"
data-field="waktu_response"
caption="Tgl Response"
cell-template="cellCenter"
/>
<DxColumn
css-class="custom-table-column"
:width="150"
alignment="center"
data-field="waktu_recovery"
caption="Tgl Recovery"
cell-template="cellCenter"
/>
<DxColumn
css-class="custom-table-column"
:width="170"
alignment="center"
data-field="durasi_response_time"
caption="Durasi Response Time"
cell-template="data-waktu"
/>
<DxColumn
css-class="custom-table-column"
:width="170"
alignment="center"
data-field="durasi_recovery_time"
caption="Durasi Recovery Time"
cell-template="data-waktu"
/>
<DxColumn
css-class="custom-table-column"
:width="170"
alignment="center"
data-field="nama_posko_lama"
caption="Posko Asal"
cell-template="cellLeft"
/>
<DxColumn
css-class="custom-table-column"
:width="170"
alignment="center"
data-field="nama_posko_baru"
caption="Posko Tujuan"
cell-template="cellLeft"
/>
<DxColumn
css-class="custom-table-column"
:width="150"
alignment="center"
data-field="status_akhir"
caption="Status"
cell-template="cellLeft"
/>
<DxColumn
css-class="custom-table-column"
:width="150"
alignment="center"
data-field="idpel_nometer"
caption="IDPEL/NO METER"
cell-template="cellCenter"
/>
<DxColumn
css-class="custom-table-column"
:width="150"
alignment="center"
data-field="nama_pelapor"
caption="Nama Pelapor"
cell-template="cellLeft"
/>
<DxColumn
css-class="custom-table-column"
:width="170"
alignment="center"
data-field="alamat_pelapor"
caption="Alamat Pelapor"
cell-template="cellLeft"
/>
<DxColumn
css-class="custom-table-column"
:width="150"
alignment="center"
data-field="no_telp_pelapor"
caption="No Telp Pelapor"
cell-template="cellCenter"
/>
<DxColumn
css-class="custom-table-column"
:width="250"
alignment="center"
data-field="keterangan_pelapor"
caption="Keterangan Pelapor"
cell-template="cellLeft"
/>
<DxColumn
css-class="custom-table-column"
:width="150"
alignment="center"
data-field="media"
caption="Sumber Lapor"
cell-template="cellLeft"
/>
<DxColumn
css-class="custom-table-column"
:width="170"
alignment="center"
data-field="nama_posko_lama"
caption="Posko"
cell-template="cellLeft"
/>
<template #cellCenter="{ data }"> <template #cellCenter="{ data }">
<p class="cursor-pointer" @click="showData()"> <p class="cursor-pointer" @click="showData()">
{{ data.text }} {{ data.text }}
</p> </p>
</template> </template>
<template #cellLeft="{ data }"> <template #cellLeft="{ data }">
<p class="text-left cursor-pointer" @click="showData()"> <p class="text-left cursor-pointer" @click="showData()">
{{ data.text }} {{ data.text }}
</p> </p>
</template> </template>
<template #data-waktu="{ data }"> <template #data-waktu="{ data }">
<p class="cursor-pointer" @click="showData()"> <p class="cursor-pointer" @click="showData()">
{{ parseInt(data.text) ? formatWaktu(data.text) : '-' }} {{ parseInt(data.text) ? formatWaktu(data.text) : '-' }}
</p> </p>
</template> </template>
</DxDataGrid> </DxDataGrid>
</div>
<DetailDialog
:open="showDetail"
title="Daftar Gangguan Dialihkan ke Posko Lain"
@on-close="closeDetail"
>
<div class="w-full 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-[170px] text-gray-800">No Laporan:</h3>
<InputText :readonly="true" :value="dataDetail?.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-[170px] text-gray-800">Pembuat Laporan:</h3>
<InputText :readonly="true" :value="dataDetail?.pembuat_laporan" class-name="flex-1" />
</div>
<div class="flex flex-row items-center justify-between w-full">
<h3 class="text-sm font-medium w-[170px] text-gray-800">Tanggal Laporan:</h3>
<InputText :readonly="true" :value="dataDetail?.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-[170px] text-gray-800">Tanggal Dialihkan:</h3>
<InputText :readonly="true" :value="dataDetail?.waktu_dialihkan" class-name="flex-1" />
</div>
<div class="flex flex-row items-center justify-between w-full">
<h3 class="text-sm font-medium w-[170px] text-gray-800">Tanggal Respon:</h3>
<InputText :readonly="true" :value="dataDetail?.waktu_response" class-name="flex-1" />
</div>
<div class="flex flex-row items-center justify-between w-full">
<h3 class="text-sm font-medium w-[170px] text-gray-800">Tanggal Recovery:</h3>
<InputText :readonly="true" :value="dataDetail?.waktu_recovery" class-name="flex-1" />
</div>
<div class="flex flex-row items-center justify-between w-full">
<h3 class="text-sm font-medium w-[170px] text-gray-800">Durasi Response Time:</h3>
<InputText
:readonly="true"
:value="
parseInt(dataDetail?.durasi_response_time)
? formatWaktu(dataDetail?.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-[170px] text-gray-800">Durasi Recovery Time:</h3>
<InputText
:readonly="true"
class-name="flex-1"
:value="
parseInt(dataDetail?.durasi_recovery_time)
? formatWaktu(dataDetail?.durasi_recovery_time)
: '-'
"
/>
</div>
<div class="flex flex-row items-center justify-between w-full">
<h3 class="text-sm font-medium w-[170px] text-gray-800">Posko Awal:</h3>
<InputText :readonly="true" :value="dataDetail?.nama_posko_lama" class-name="flex-1" />
</div>
<div class="flex flex-row items-center justify-between w-full">
<h3 class="text-sm font-medium w-[170px] text-gray-800">Posko Tujuan:</h3>
<InputText :readonly="true" :value="dataDetail?.nama_posko_baru" class-name="flex-1" />
</div>
<div class="flex flex-row items-center justify-between w-full">
<h3 class="text-sm font-medium w-[170px] text-gray-800">Status:</h3>
<InputText :readonly="true" :value="dataDetail?.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-[170px] text-gray-800">IDPEL/NO METER:</h3>
<InputText :readonly="true" :value="dataDetail?.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-[170px] text-gray-800">Nama Pelapor:</h3>
<InputText :readonly="true" :value="dataDetail?.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-[170px] text-gray-800">Alamat Pelapor:</h3>
<InputText
:readonly="true"
type="textarea"
:value="dataDetail?.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-[170px] text-gray-800">Pembuat Laporan:</h3>
<InputText :readonly="true" :value="dataDetail?.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-[170px] text-gray-800">Keterangan Pelapor:</h3>
<InputText :readonly="true" :value="dataDetail?.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-[170px] text-gray-800">Sumber Laporan:</h3>
<InputText :readonly="true" :value="dataDetail?.media" class-name="flex-1" />
</div>
<div class="flex flex-row items-center justify-between w-full">
<h3 class="text-sm font-medium w-[170px] text-gray-800">Posko:</h3>
<InputText :readonly="true" :value="dataDetail?.nama_posko_lama" class-name="flex-1" />
</div>
</div> </div>
</DetailDialog>
<DetailDialog :open="showDetail" title="Daftar Gangguan Dialihkan ke Posko Lain" @on-close="closeDetail">
<div class="w-full 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-[170px] text-gray-800">No Laporan:</h3>
<InputText :readonly="true" :value="dataDetail?.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-[170px] text-gray-800">Pembuat Laporan:</h3>
<InputText :readonly="true" :value="dataDetail?.pembuat_laporan" class-name="flex-1" />
</div>
<div class="flex flex-row items-center justify-between w-full">
<h3 class="text-sm font-medium w-[170px] text-gray-800">Tanggal Laporan:</h3>
<InputText :readonly="true" :value="dataDetail?.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-[170px] text-gray-800">Tanggal Dialihkan:</h3>
<InputText :readonly="true" :value="dataDetail?.waktu_dialihkan" class-name="flex-1" />
</div>
<div class="flex flex-row items-center justify-between w-full">
<h3 class="text-sm font-medium w-[170px] text-gray-800">Tanggal Respon:</h3>
<InputText :readonly="true" :value="dataDetail?.waktu_response" class-name="flex-1" />
</div>
<div class="flex flex-row items-center justify-between w-full">
<h3 class="text-sm font-medium w-[170px] text-gray-800">Tanggal Recovery:</h3>
<InputText :readonly="true" :value="dataDetail?.waktu_recovery" class-name="flex-1" />
</div>
<div class="flex flex-row items-center justify-between w-full">
<h3 class="text-sm font-medium w-[170px] text-gray-800">Durasi Response Time:</h3>
<InputText :readonly="true" :value="parseInt(dataDetail?.durasi_response_time)
? formatWaktu(dataDetail?.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-[170px] text-gray-800">Durasi Recovery Time:</h3>
<InputText :readonly="true" class-name="flex-1" :value="parseInt(dataDetail?.durasi_recovery_time)
? formatWaktu(dataDetail?.durasi_recovery_time)
: '-'
" />
</div>
<div class="flex flex-row items-center justify-between w-full">
<h3 class="text-sm font-medium w-[170px] text-gray-800">Posko Awal:</h3>
<InputText :readonly="true" :value="dataDetail?.nama_posko_lama" class-name="flex-1" />
</div>
<div class="flex flex-row items-center justify-between w-full">
<h3 class="text-sm font-medium w-[170px] text-gray-800">Posko Tujuan:</h3>
<InputText :readonly="true" :value="dataDetail?.nama_posko_baru" class-name="flex-1" />
</div>
<div class="flex flex-row items-center justify-between w-full">
<h3 class="text-sm font-medium w-[170px] text-gray-800">Status:</h3>
<InputText :readonly="true" :value="dataDetail?.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-[170px] text-gray-800">IDPEL/NO METER:</h3>
<InputText :readonly="true" :value="dataDetail?.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-[170px] text-gray-800">Nama Pelapor:</h3>
<InputText :readonly="true" :value="dataDetail?.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-[170px] text-gray-800">Alamat Pelapor:</h3>
<InputText :readonly="true" type="textarea" :value="dataDetail?.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-[170px] text-gray-800">Pembuat Laporan:</h3>
<InputText :readonly="true" :value="dataDetail?.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-[170px] text-gray-800">Keterangan Pelapor:</h3>
<InputText :readonly="true" :value="dataDetail?.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-[170px] text-gray-800">Sumber Laporan:</h3>
<InputText :readonly="true" :value="dataDetail?.media" class-name="flex-1" />
</div>
<div class="flex flex-row items-center justify-between w-full">
<h3 class="text-sm font-medium w-[170px] text-gray-800">Posko:</h3>
<InputText :readonly="true" :value="dataDetail?.nama_posko_lama" class-name="flex-1" />
</div>
</div>
</DetailDialog>
</template> </template>
<script setup lang="ts"> <script setup lang="ts">
@ -183,13 +344,13 @@ import Filters from '@/components/Form/Filters.vue'
import Type1 from '@/components/Form/FiltersType/Type1.vue' import Type1 from '@/components/Form/FiltersType/Type1.vue'
import { DxDataGrid } from 'devextreme-vue' import { DxDataGrid } from 'devextreme-vue'
import { import {
DxColumn, DxColumn,
DxExport, DxExport,
DxLoadPanel, DxLoadPanel,
DxPager, DxPager,
DxPaging, DxPaging,
DxSearchPanel, DxSearchPanel,
DxSelection DxSelection
} from 'devextreme-vue/data-grid' } from 'devextreme-vue/data-grid'
import { formatWaktu } from '@/components/Form/FiltersType/reference' import { formatWaktu } from '@/components/Form/FiltersType/reference'
import { onMounted, ref } from 'vue' import { onMounted, ref } from 'vue'
@ -203,6 +364,7 @@ import { useQuery } from '@vue/apollo-composable'
import { queries } from '@/utils/api/api.graphql' import { queries } from '@/utils/api/api.graphql'
import { dummyData } from '@/utils/dummy' import { dummyData } from '@/utils/dummy'
import { exportDataGrid as exportToExcel } from 'devextreme/excel_exporter' import { exportDataGrid as exportToExcel } from 'devextreme/excel_exporter'
import { exportDataGrid as exportToPdf } from 'devextreme/pdf_exporter'
const position = { of: '#dataTable' } const position = { of: '#dataTable' }
const showIndicator = ref(true) const showIndicator = ref(true)
@ -211,146 +373,190 @@ const showPane = ref(true)
const data = ref<any[]>([]) const data = ref<any[]>([])
const dataDetail = ref<any>() const dataDetail = ref<any>()
const showDetail = ref(false) const showDetail = ref(false)
const closeDetail = () => showDetail.value = false const closeDetail = () => (showDetail.value = false)
const onExporting = (e: any) => { const onExporting = (e: any) => {
if (e.format === 'pdf') { if (e.format === 'pdf') {
const doc = new jsPDF({ const doc = new jsPDF({
orientation: 'landscape', orientation: 'landscape'
unit: 'mm', })
format: 'F4'
})
// Initialize page number autoTable(doc, {
const pageNumber = ref(1) head: [
autoTable(doc, { [
head: [ 'No Laporan',
[ 'Pembuat Laporan',
'No Laporan', 'Tgl Lapor',
'Pembuat Laporan', 'Tgl Dialihkan',
'Tgl Lapor', 'Tgl Response',
'Tgl Dialihkan', 'Tgl Recovery',
'Tgl Response', 'Durasi Response Time',
'Tgl Recovery', 'Durasi Recovery Time',
'Durasi Response Time', 'Posko Awal',
'Durasi Recovery Time', 'Posko Tujuan',
'Posko Awal', 'Status',
'Posko Tujuan', 'IDPEL/NO METER',
'Status', 'Nama Pelapor',
'IDPEL/NO METER', 'Alamat Pelapor',
'Nama Pelapor', 'No Telp Pelapor',
'Alamat Pelapor', 'Keterangan Pelapor',
'No Telp Pelapor', 'Sumber Lapor',
'Keterangan Pelapor', 'Posko'
'Sumber Lapor', ]
'Posko' ],
] body: data.value.map((item) => [
], item.no_laporan,
startY: 10, item.pembuat_laporan,
body: data.value.map((item) => [ item.waktu_lapor,
item.no_laporan, item.waktu_dialihkan,
item.pembuat_laporan, item.waktu_response,
item.waktu_lapor, item.waktu_recovery,
item.waktu_dialihkan, item.durasi_response_time,
item.waktu_response, item.durasi_recovery_time,
item.waktu_recovery, item.nama_posko_lama,
item.durasi_response_time, item.nama_posko_baru,
item.durasi_recovery_time, item.status_akhir,
item.nama_posko_lama, item.idpel_nometer,
item.nama_posko_baru, item.nama_pelapor,
item.status_akhir, item.alamat_pelapor,
item.idpel_nometer, item.no_telp_pelapor,
item.nama_pelapor, item.keterangan_pelapor,
item.alamat_pelapor, item.media,
item.no_telp_pelapor, item.posko
item.keterangan_pelapor, ]),
item.media, styles: {
item.posko fontSize: 3
]), }
styles: { })
fontSize: 6,
cellWidth: 'wrap'
}
})
doc.setProperties({
title: 'Daftar Gangguan Dialihkan Ke Posko Lain',
subject: 'Daftar Gangguan Dialihkan Ke Posko Lain'
})
pageNumber.value++ // Increment the pageNumber doc.save('Daftar Gangguan Dialihkan Ke Posko Lain.pdf')
doc.save(`Daftar Gangguan Dialihkan Ke Posko Lain.pdf`)
// exportToPdf({ // const doc = new jsPDF({
// jsPDFDocument: doc, // orientation: 'landscape',
// component: e.component, // unit: 'mm',
// }).then(() => { // format: 'F4'
// doc.save(`Daftar Gangguan Dialihkan Ke Posko Lain.pdf`) // })
// // Initialize page number
// const pageNumber = ref(1)
// autoTable(doc, {
// head: [
// [
// 'No Laporan',
// 'Pembuat Laporan',
// 'Tgl Lapor',
// 'Tgl Dialihkan',
// 'Tgl Response',
// 'Tgl Recovery',
// 'Durasi Response Time',
// 'Durasi Recovery Time',
// 'Posko Awal',
// 'Posko Tujuan',
// 'Status',
// 'IDPEL/NO METER',
// 'Nama Pelapor',
// 'Alamat Pelapor',
// 'No Telp Pelapor',
// 'Keterangan Pelapor',
// 'Sumber Lapor',
// 'Posko'
// ]
// ],
// startY: 10,
// body: data.value.map((item) => [
// item.no_laporan,
// item.pembuat_laporan,
// item.waktu_lapor,
// item.waktu_dialihkan,
// item.waktu_response,
// item.waktu_recovery,
// item.durasi_response_time,
// item.durasi_recovery_time,
// item.nama_posko_lama,
// item.nama_posko_baru,
// item.status_akhir,
// item.idpel_nometer,
// item.nama_pelapor,
// item.alamat_pelapor,
// item.no_telp_pelapor,
// item.keterangan_pelapor,
// item.media,
// item.posko
// ]),
// styles: {
// fontSize: 6,
// cellWidth: 'wrap'
// }
// })
// doc.setProperties({
// title: 'Daftar Gangguan Dialihkan Ke Posko Lain',
// subject: 'Daftar Gangguan Dialihkan Ke Posko Lain'
// })
// pageNumber.value++ // Increment the pageNumber
// doc.save(`Daftar Gangguan Dialihkan Ke Posko Lain.pdf`)
} else {
const workbook = new Workbook()
const worksheet = workbook.addWorksheet('Daftar Gangguan Dialihkan Ke Posko Lain')
// }) exportToExcel({
} else { component: e.component,
const workbook = new Workbook() worksheet,
const worksheet = workbook.addWorksheet('Daftar Gangguan Dialihkan Ke Posko Lain') autoFilterEnabled: true
}).then(() => {
workbook.xlsx.writeBuffer().then((buffer: any) => {
saveAs(
new Blob([buffer], { type: 'application/octet-stream' }),
'DaftarGangguanDialihkanKePoskoLain.xlsx'
)
})
})
exportToExcel({ e.cancel = true
component: e.component, }
worksheet,
autoFilterEnabled: true
}).then(() => {
workbook.xlsx.writeBuffer().then((buffer: any) => {
saveAs(
new Blob([buffer], { type: 'application/octet-stream' }),
'DaftarGangguanDialihkanKePoskoLain.xlsx'
)
})
})
e.cancel = true
}
} }
const filterData = (params: any) => { const filterData = (params: any) => {
const { posko, uid, up3 } = params const { posko, uid, up3 } = params
const dateValue = params.periode.split(' s/d ') const dateValue = params.periode.split(' s/d ')
refetch({ refetch({
dateFrom: dateValue[0] dateFrom: dateValue[0]
? dateValue[0].split('-').reverse().join('-') ? dateValue[0].split('-').reverse().join('-')
: new Date().toISOString().slice(0, 10), : new Date().toISOString().slice(0, 10),
dateTo: dateValue[1] dateTo: dateValue[1]
? dateValue[1].split('-').reverse().join('-') ? dateValue[1].split('-').reverse().join('-')
: new Date().toISOString().slice(0, 10), : new Date().toISOString().slice(0, 10),
posko: posko ? posko.id : 0, posko: posko ? posko.id : 0,
idUid: uid ? uid.id : 0, idUid: uid ? uid.id : 0,
idUp3: up3 ? up3.id : 0 idUp3: up3 ? up3.id : 0
}) })
onResult((queryResult) => { onResult((queryResult) => {
if (queryResult.data != undefined) { if (queryResult.data != undefined) {
data.value = queryResult.data.daftarGangguanDialihkanKePoskoLain data.value = queryResult.data.daftarGangguanDialihkanKePoskoLain
} }
console.log(queryResult.data) console.log(queryResult.data)
console.log(queryResult.loading) console.log(queryResult.loading)
console.log(queryResult.networkStatus) console.log(queryResult.networkStatus)
}) })
onError((error) => { onError((error) => {
console.log(error) console.log(error)
}) })
} }
const { onResult, onError, loading, refetch } = useQuery( const { onResult, onError, loading, refetch } = useQuery(
queries.gangguan.daftar.dataDialihkanKePoskoLain, queries.gangguan.daftar.dataDialihkanKePoskoLain,
{ {
dateFrom: new Date().toISOString().slice(0, 10), dateFrom: new Date().toISOString().slice(0, 10),
dateTo: new Date().toISOString().slice(0, 10), dateTo: new Date().toISOString().slice(0, 10),
posko: 0, posko: 0,
idUid: 0, idUid: 0,
idUp3: 0 idUp3: 0
} }
) )
const onSelectionChanged = ({ selectedRowsData }: any) => { const onSelectionChanged = ({ selectedRowsData }: any) => {
const data = selectedRowsData[0] const data = selectedRowsData[0]
dataDetail.value = data dataDetail.value = data
} }
const showData = () => showDetail.value = true const showData = () => (showDetail.value = true)
const filters = ref() const filters = ref()
onMounted(() => { onMounted(() => {
data.value = dummyData.gangguan.daftar.dialihkanKePoskoLain data.value = dummyData.gangguan.daftar.dialihkanKePoskoLain
}) })
</script> </script>