Merge branch 'dev-bagus' of https://github.com/defuj/eis into dev-defuj
This commit is contained in:
commit
6462de41e3
@ -16,7 +16,7 @@ const customShortcuts = () => {
|
|||||||
label: 'Last 15 Days',
|
label: 'Last 15 Days',
|
||||||
atClick: () => {
|
atClick: () => {
|
||||||
const date = new Date()
|
const date = new Date()
|
||||||
return [new Date(date.setDate(date.getDate() + 1)), date]
|
return [new Date(date.setDate(date.getDate() - 15)), new Date()]
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
@ -15,6 +15,7 @@ import {
|
|||||||
} from './reference'
|
} from './reference'
|
||||||
import { onMounted, ref } from 'vue'
|
import { onMounted, ref } from 'vue'
|
||||||
import { getMonthName } from '@/utils/texts'
|
import { getMonthName } from '@/utils/texts'
|
||||||
|
|
||||||
const uidPlaceholder = 'Semua Unit Induk Distribusi/Wilayah'
|
const uidPlaceholder = 'Semua Unit Induk Distribusi/Wilayah'
|
||||||
const up3Placholder = 'Semua Unit Pelaksanaan Pelayanan Pelanggan'
|
const up3Placholder = 'Semua Unit Pelaksanaan Pelayanan Pelanggan'
|
||||||
const ulpPlaceholder = 'Semua Unit Layanan Pelanggan'
|
const ulpPlaceholder = 'Semua Unit Layanan Pelanggan'
|
||||||
@ -42,6 +43,7 @@ const tahunIndex = years.value.findIndex((year) => year.id === tahun.value.id)
|
|||||||
if (tahunIndex !== -1) {
|
if (tahunIndex !== -1) {
|
||||||
years.value.splice(tahunIndex, 1)
|
years.value.splice(tahunIndex, 1)
|
||||||
}
|
}
|
||||||
|
|
||||||
const data = ref({
|
const data = ref({
|
||||||
regional: regional.value,
|
regional: regional.value,
|
||||||
uid: uid.value,
|
uid: uid.value,
|
||||||
@ -60,6 +62,7 @@ const setRegional = (value: any) => {
|
|||||||
uid.value = { id: 0, name: uidPlaceholder }
|
uid.value = { id: 0, name: uidPlaceholder }
|
||||||
data.value.regional = value
|
data.value.regional = value
|
||||||
}
|
}
|
||||||
|
|
||||||
const setUid = (value: any) => {
|
const setUid = (value: any) => {
|
||||||
uid.value = value
|
uid.value = value
|
||||||
selectedUid(value)
|
selectedUid(value)
|
||||||
@ -79,15 +82,18 @@ const setUlp = (value: any) => {
|
|||||||
selectedUp3Ulp(value)
|
selectedUp3Ulp(value)
|
||||||
data.value.ulp = value
|
data.value.ulp = value
|
||||||
}
|
}
|
||||||
|
|
||||||
const setMonth = (value: any) => {
|
const setMonth = (value: any) => {
|
||||||
bulan.value = value
|
bulan.value = value
|
||||||
data.value.bulan = value
|
data.value.bulan = value
|
||||||
console.log(data.value)
|
console.log(data.value)
|
||||||
}
|
}
|
||||||
|
|
||||||
const setYear = (value: any) => {
|
const setYear = (value: any) => {
|
||||||
tahun.value = value
|
tahun.value = value
|
||||||
data.value.tahun = value
|
data.value.tahun = value
|
||||||
}
|
}
|
||||||
|
|
||||||
onMounted(() => {
|
onMounted(() => {
|
||||||
emit('update:filters', data.value)
|
emit('update:filters', data.value)
|
||||||
fetchRegional()
|
fetchRegional()
|
||||||
@ -98,25 +104,48 @@ onMounted(() => {
|
|||||||
<div class="sm:grid sm:grid-cols-2 lg:grid-cols-3 sm:items-center">
|
<div class="sm:grid sm:grid-cols-2 lg:grid-cols-3 sm:items-center">
|
||||||
<label class="block mb-2 font-semibold text-gray-800 sm:mb-0">Regional:</label>
|
<label class="block mb-2 font-semibold text-gray-800 sm:mb-0">Regional:</label>
|
||||||
|
|
||||||
<Select @update:selected="setRegional($event)" :data="itemsRegional" :placeholder="regionalPlaceholder" />
|
<Select
|
||||||
|
@update:selected="setRegional($event)"
|
||||||
|
:data="itemsRegional"
|
||||||
|
:placeholder="regionalPlaceholder"
|
||||||
|
/>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="sm:grid sm:grid-cols-2 lg:grid-cols-3 sm:items-center">
|
<div class="sm:grid sm:grid-cols-2 lg:grid-cols-3 sm:items-center">
|
||||||
<label class="block mb-2 font-semibold text-gray-800 sm:mb-0">Unit Induk Distribusi/Wilayah:</label>
|
<label class="block mb-2 font-semibold text-gray-800 sm:mb-0"
|
||||||
|
>Unit Induk Distribusi/Wilayah:</label
|
||||||
|
>
|
||||||
|
|
||||||
<Select @update:selected="setUid($event)" :data="itemsUid" :placeholder="uidPlaceholder" />
|
<Select
|
||||||
|
@update:selected="setUid($event)"
|
||||||
|
:data="itemsUid"
|
||||||
|
:selected="uid"
|
||||||
|
:placeholder="uidPlaceholder"
|
||||||
|
/>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="sm:grid sm:grid-cols-2 lg:grid-cols-3 sm:items-center">
|
<div class="sm:grid sm:grid-cols-2 lg:grid-cols-3 sm:items-center">
|
||||||
<label class="block mb-2 font-semibold text-gray-800 sm:mb-0">Unit Pelaksanaan Pelayanan Pelanggan:</label>
|
<label class="block mb-2 font-semibold text-gray-800 sm:mb-0"
|
||||||
|
>Unit Pelaksanaan Pelayanan Pelanggan:</label
|
||||||
|
>
|
||||||
|
|
||||||
<Select @update:selected="setUp3($event)" :data="itemsUp3" :placeholder="up3Placholder" />
|
<Select
|
||||||
|
@update:selected="setUp3($event)"
|
||||||
|
:selected="uppp"
|
||||||
|
:data="itemsUp3"
|
||||||
|
:placeholder="up3Placholder"
|
||||||
|
/>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="sm:grid sm:grid-cols-2 lg:grid-cols-3 sm:items-center">
|
<div class="sm:grid sm:grid-cols-2 lg:grid-cols-3 sm:items-center">
|
||||||
<label class="block mb-2 font-semibold text-gray-800 sm:mb-0">Unit Layanan Pelanggan:</label>
|
<label class="block mb-2 font-semibold text-gray-800 sm:mb-0">Unit Layanan Pelanggan:</label>
|
||||||
|
|
||||||
<Select @update:selected="setUlp($event)" :data="itemsUlp" :placeholder="ulpPlaceholder" />
|
<Select
|
||||||
|
@update:selected="setUlp($event)"
|
||||||
|
:data="itemsUlp"
|
||||||
|
:selected="ulp"
|
||||||
|
:placeholder="ulpPlaceholder"
|
||||||
|
/>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="sm:grid sm:grid-cols-2 lg:grid-cols-3 sm:items-center">
|
<div class="sm:grid sm:grid-cols-2 lg:grid-cols-3 sm:items-center">
|
||||||
|
@ -4,57 +4,200 @@
|
|||||||
</Filters>
|
</Filters>
|
||||||
|
|
||||||
<div id="dataTable">
|
<div id="dataTable">
|
||||||
<DxDataGrid class="max-h-[calc(100vh-140px)]" :remote-operations="true" :data-source="data" key-expr="no_laporan"
|
<DxDataGrid
|
||||||
:show-column-lines="true" :show-row-lines="false" :show-borders="true" :row-alternation-enabled="true"
|
class="max-h-[calc(100vh-140px)]"
|
||||||
:hover-state-enabled="true" @selection-changed="onSelectionChanged" :column-width="100" @exporting="onExporting"
|
:remote-operations="true"
|
||||||
:allow-column-resizing="true" column-resizing-mode="widget">
|
:data-source="data"
|
||||||
|
key-expr="no_laporan"
|
||||||
|
: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"
|
||||||
|
>
|
||||||
<DxPaging :page-size="5" :enabled="true" />
|
<DxPaging :page-size="5" :enabled="true" />
|
||||||
<DxPager :visible="true" :allowed-page-sizes="[5, 10, 20]" display-mode="full" :show-page-size-selector="true"
|
<DxPager
|
||||||
:show-info="true" :show-navigation-buttons="true" />
|
:visible="true"
|
||||||
|
:allowed-page-sizes="[5, 10, 20]"
|
||||||
|
display-mode="full"
|
||||||
|
:show-page-size-selector="true"
|
||||||
|
:show-info="true"
|
||||||
|
:show-navigation-buttons="true"
|
||||||
|
/>
|
||||||
<DxSelection mode="single" />
|
<DxSelection mode="single" />
|
||||||
<!-- <DxScrolling column-rendering-mode="virtual" mode="virtual" row-rendering-mode="virtual" /> -->
|
<!-- <DxScrolling column-rendering-mode="virtual" mode="virtual" row-rendering-mode="virtual" /> -->
|
||||||
<DxLoadPanel :position="position" :show-indicator="showIndicator" :show-pane="showPane" :shading="shading"
|
<DxLoadPanel
|
||||||
v-if="loading" v-model:visible="loading" :enabled="true" />
|
:position="position"
|
||||||
|
:show-indicator="showIndicator"
|
||||||
|
:show-pane="showPane"
|
||||||
|
:shading="shading"
|
||||||
|
v-if="loading"
|
||||||
|
v-model:visible="loading"
|
||||||
|
:enabled="true"
|
||||||
|
/>
|
||||||
<DxSearchPanel :visible="true" :highlight-case-sensitive="true" />
|
<DxSearchPanel :visible="true" :highlight-case-sensitive="true" />
|
||||||
<DxExport :enabled="true" :formats="['pdf', 'xlsx', 'document']" :allow-export-selected-data="false" />
|
<DxExport
|
||||||
<DxColumn css-class="custom-table-column" :width="50" alignment="center"
|
:enabled="true"
|
||||||
:calculateCellValue="(item: any) => data.findIndex((i) => i == item) + 1" data-type="number" caption="No" />
|
:formats="['pdf', 'xlsx', 'document']"
|
||||||
<DxColumn css-class="custom-table-column" :width="150" alignment="center" data-field="no_laporan"
|
:allow-export-selected-data="false"
|
||||||
caption="No Laporan" cell-template="data" />
|
/>
|
||||||
<DxColumn css-class="custom-table-column" :width="150" alignment="center" data-field="pembuat_laporan"
|
<DxColumn
|
||||||
caption="Pembuat Laporan" cell-template="data" />
|
css-class="custom-table-column"
|
||||||
<DxColumn css-class="custom-table-column" :width="150" alignment="center" data-field="waktu_lapor"
|
:width="50"
|
||||||
caption="Tgl Lapor" cell-template="data" />
|
alignment="center"
|
||||||
<DxColumn css-class="custom-table-column" :width="150" alignment="center" data-field="waktu_dialihkan"
|
:calculateCellValue="(item: any) => data.findIndex((i) => i == item) + 1"
|
||||||
caption="Tgl Dialihkan" cell-template="data" />
|
data-type="number"
|
||||||
<DxColumn css-class="custom-table-column" :width="150" alignment="center" data-field="waktu_response"
|
caption="No"
|
||||||
caption="Tgl Response" cell-template="data" />
|
/>
|
||||||
<DxColumn css-class="custom-table-column" :width="150" alignment="center" data-field="waktu_recovery"
|
<DxColumn
|
||||||
caption="Tgl Recovery" cell-template="data" />
|
css-class="custom-table-column"
|
||||||
<DxColumn css-class="custom-table-column" :width="170" alignment="center" data-field="durasi_response_time"
|
:width="150"
|
||||||
caption="Durasi Response Time" cell-template="data" />
|
alignment="center"
|
||||||
<DxColumn css-class="custom-table-column" :width="170" alignment="center" data-field="durasi_recovery_time"
|
data-field="no_laporan"
|
||||||
caption="Durasi Recovery Time" cell-template="data" />
|
caption="No Laporan"
|
||||||
<DxColumn css-class="custom-table-column" :width="170" alignment="center" data-field="nama_posko_lama"
|
cell-template="data"
|
||||||
caption="Posko Awal" cell-template="data" />
|
/>
|
||||||
<DxColumn css-class="custom-table-column" :width="170" alignment="center" data-field="nama_posko_baru"
|
<DxColumn
|
||||||
caption="Posko Tujuan" cell-template="data" />
|
css-class="custom-table-column"
|
||||||
<DxColumn css-class="custom-table-column" :width="150" alignment="center" data-field="status_akhir" caption="Status"
|
:width="150"
|
||||||
cell-template="data" />
|
alignment="center"
|
||||||
<DxColumn css-class="custom-table-column" :width="150" alignment="center" data-field="idpel_nometer"
|
data-field="pembuat_laporan"
|
||||||
caption="IDPEL/NO METER" cell-template="data" />
|
caption="Pembuat Laporan"
|
||||||
<DxColumn css-class="custom-table-column" :width="150" alignment="center" data-field="nama_pelapor"
|
cell-template="data"
|
||||||
caption="Nama Pelapor" cell-template="data" />
|
/>
|
||||||
<DxColumn css-class="custom-table-column" :width="170" alignment="center" data-field="alamat_pelapor"
|
<DxColumn
|
||||||
caption="Alamat Pelapor" cell-template="data" />
|
css-class="custom-table-column"
|
||||||
<DxColumn css-class="custom-table-column" :width="150" alignment="center" data-field="no_telp_pelapor"
|
:width="150"
|
||||||
caption="No Telp Pelapor" cell-template="data" />
|
alignment="center"
|
||||||
<DxColumn css-class="custom-table-column" :width="150" alignment="center" data-field="keterangan_pelapor"
|
data-field="waktu_lapor"
|
||||||
caption="Keterangan Pelapor" cell-template="data" />
|
caption="Tgl Lapor"
|
||||||
<DxColumn css-class="custom-table-column" :width="150" alignment="center" data-field="media" caption="Sumber Lapor"
|
cell-template="data"
|
||||||
cell-template="data" />
|
/>
|
||||||
<DxColumn css-class="custom-table-column" :width="170" alignment="center" data-field="posko" caption="Posko"
|
<DxColumn
|
||||||
cell-template="data" />
|
css-class="custom-table-column"
|
||||||
|
:width="150"
|
||||||
|
alignment="center"
|
||||||
|
data-field="waktu_dialihkan"
|
||||||
|
caption="Tgl Dialihkan"
|
||||||
|
cell-template="data"
|
||||||
|
/>
|
||||||
|
<DxColumn
|
||||||
|
css-class="custom-table-column"
|
||||||
|
:width="150"
|
||||||
|
alignment="center"
|
||||||
|
data-field="waktu_response"
|
||||||
|
caption="Tgl Response"
|
||||||
|
cell-template="data"
|
||||||
|
/>
|
||||||
|
<DxColumn
|
||||||
|
css-class="custom-table-column"
|
||||||
|
:width="150"
|
||||||
|
alignment="center"
|
||||||
|
data-field="waktu_recovery"
|
||||||
|
caption="Tgl Recovery"
|
||||||
|
cell-template="data"
|
||||||
|
/>
|
||||||
|
<DxColumn
|
||||||
|
css-class="custom-table-column"
|
||||||
|
:width="170"
|
||||||
|
alignment="center"
|
||||||
|
data-field="durasi_response_time"
|
||||||
|
caption="Durasi Response Time"
|
||||||
|
cell-template="data"
|
||||||
|
/>
|
||||||
|
<DxColumn
|
||||||
|
css-class="custom-table-column"
|
||||||
|
:width="170"
|
||||||
|
alignment="center"
|
||||||
|
data-field="durasi_recovery_time"
|
||||||
|
caption="Durasi Recovery Time"
|
||||||
|
cell-template="data"
|
||||||
|
/>
|
||||||
|
<DxColumn
|
||||||
|
css-class="custom-table-column"
|
||||||
|
:width="170"
|
||||||
|
alignment="center"
|
||||||
|
data-field="nama_posko_lama"
|
||||||
|
caption="Posko Awal"
|
||||||
|
cell-template="data"
|
||||||
|
/>
|
||||||
|
<DxColumn
|
||||||
|
css-class="custom-table-column"
|
||||||
|
:width="170"
|
||||||
|
alignment="center"
|
||||||
|
data-field="nama_posko_baru"
|
||||||
|
caption="Posko Tujuan"
|
||||||
|
cell-template="data"
|
||||||
|
/>
|
||||||
|
<DxColumn
|
||||||
|
css-class="custom-table-column"
|
||||||
|
:width="150"
|
||||||
|
alignment="center"
|
||||||
|
data-field="status_akhir"
|
||||||
|
caption="Status"
|
||||||
|
cell-template="data"
|
||||||
|
/>
|
||||||
|
<DxColumn
|
||||||
|
css-class="custom-table-column"
|
||||||
|
:width="150"
|
||||||
|
alignment="center"
|
||||||
|
data-field="idpel_nometer"
|
||||||
|
caption="IDPEL/NO METER"
|
||||||
|
cell-template="data"
|
||||||
|
/>
|
||||||
|
<DxColumn
|
||||||
|
css-class="custom-table-column"
|
||||||
|
:width="150"
|
||||||
|
alignment="center"
|
||||||
|
data-field="nama_pelapor"
|
||||||
|
caption="Nama Pelapor"
|
||||||
|
cell-template="data"
|
||||||
|
/>
|
||||||
|
<DxColumn
|
||||||
|
css-class="custom-table-column"
|
||||||
|
:width="170"
|
||||||
|
alignment="center"
|
||||||
|
data-field="alamat_pelapor"
|
||||||
|
caption="Alamat Pelapor"
|
||||||
|
cell-template="data"
|
||||||
|
/>
|
||||||
|
<DxColumn
|
||||||
|
css-class="custom-table-column"
|
||||||
|
:width="150"
|
||||||
|
alignment="center"
|
||||||
|
data-field="no_telp_pelapor"
|
||||||
|
caption="No Telp Pelapor"
|
||||||
|
cell-template="data"
|
||||||
|
/>
|
||||||
|
<DxColumn
|
||||||
|
css-class="custom-table-column"
|
||||||
|
:width="150"
|
||||||
|
alignment="center"
|
||||||
|
data-field="keterangan_pelapor"
|
||||||
|
caption="Keterangan Pelapor"
|
||||||
|
cell-template="data"
|
||||||
|
/>
|
||||||
|
<DxColumn
|
||||||
|
css-class="custom-table-column"
|
||||||
|
:width="150"
|
||||||
|
alignment="center"
|
||||||
|
data-field="media"
|
||||||
|
caption="Sumber Lapor"
|
||||||
|
cell-template="data"
|
||||||
|
/>
|
||||||
|
<DxColumn
|
||||||
|
css-class="custom-table-column"
|
||||||
|
:width="170"
|
||||||
|
alignment="center"
|
||||||
|
data-field="nama_posko_lama"
|
||||||
|
caption="Posko"
|
||||||
|
cell-template="data"
|
||||||
|
/>
|
||||||
<template #data="{ data }">
|
<template #data="{ data }">
|
||||||
<p class="cursor-pointer" @click="showData()">
|
<p class="cursor-pointer" @click="showData()">
|
||||||
{{ data.text }}
|
{{ data.text }}
|
||||||
@ -63,7 +206,11 @@
|
|||||||
</DxDataGrid>
|
</DxDataGrid>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<DetailDialog :open="showDetail" title="Daftar Gangguan Dialihkan ke Posko Lain" @on-close="closeDetail">
|
<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="w-full p-4 space-y-2 bg-white rounded-xl">
|
||||||
<div class="flex flex-row items-center justify-between w-full">
|
<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>
|
<h3 class="text-sm font-medium w-[170px] text-gray-800">No Laporan:</h3>
|
||||||
@ -132,7 +279,12 @@
|
|||||||
|
|
||||||
<div class="flex flex-row items-center justify-between w-full">
|
<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>
|
<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 h-[56px]" />
|
<InputText
|
||||||
|
:readonly="true"
|
||||||
|
type="textarea"
|
||||||
|
:value="dataDetail?.alamat_pelapor"
|
||||||
|
class-name="flex-1 h-[56px]"
|
||||||
|
/>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="flex flex-row items-center justify-between w-full">
|
<div class="flex flex-row items-center justify-between w-full">
|
||||||
|
@ -52,14 +52,14 @@
|
|||||||
<DxColumn
|
<DxColumn
|
||||||
:width="120"
|
:width="120"
|
||||||
alignment="center"
|
alignment="center"
|
||||||
data-field="id_regu"
|
data-field="kode_regu"
|
||||||
caption="Kode"
|
caption="Kode"
|
||||||
css-class="custom-table-column"
|
css-class="custom-table-column"
|
||||||
/>
|
/>
|
||||||
<DxColumn
|
<DxColumn
|
||||||
:width="120"
|
:width="120"
|
||||||
alignment="center"
|
alignment="center"
|
||||||
data-field="id_regu"
|
data-field="kode_regu"
|
||||||
caption="Kode"
|
caption="Kode"
|
||||||
css-class="custom-table-column"
|
css-class="custom-table-column"
|
||||||
group-index="0"
|
group-index="0"
|
||||||
@ -388,7 +388,7 @@ const GET_REKAPITULASI_GANGGUAN_PER_REGU = gql`
|
|||||||
idUid: $idUid
|
idUid: $idUid
|
||||||
idUp3: $idUp3
|
idUp3: $idUp3
|
||||||
) {
|
) {
|
||||||
id_regu
|
kode_regu
|
||||||
nama_regu
|
nama_regu
|
||||||
avg_durasi_recovery
|
avg_durasi_recovery
|
||||||
avg_durasi_response
|
avg_durasi_response
|
||||||
@ -473,7 +473,7 @@ const filterData = (params: any) => {
|
|||||||
queryResult.data.rekapitulasiGangguanPerRegu.forEach((item: any) => {
|
queryResult.data.rekapitulasiGangguanPerRegu.forEach((item: any) => {
|
||||||
const entry = {
|
const entry = {
|
||||||
no: Number(i++),
|
no: Number(i++),
|
||||||
id_regu: item.id_regu,
|
kode_regu: item.kode_regu,
|
||||||
nama_regu: item.nama_regu,
|
nama_regu: item.nama_regu,
|
||||||
laporan: {
|
laporan: {
|
||||||
total: item.total,
|
total: item.total,
|
||||||
|
@ -48,6 +48,15 @@
|
|||||||
data-type="number"
|
data-type="number"
|
||||||
caption="No"
|
caption="No"
|
||||||
/>
|
/>
|
||||||
|
<DxColumn
|
||||||
|
:width="120"
|
||||||
|
alignment="center"
|
||||||
|
data-field="nama_uid"
|
||||||
|
caption="Nama UID"
|
||||||
|
css-class="custom-table-column"
|
||||||
|
group-index="0"
|
||||||
|
v-if="filters.groupBy"
|
||||||
|
/>
|
||||||
<DxColumn
|
<DxColumn
|
||||||
:width="170"
|
:width="170"
|
||||||
alignment="center"
|
alignment="center"
|
||||||
@ -290,6 +299,8 @@ const GET_REKAPITULASI_GANGGUAN_PER_TANGGAL = gql`
|
|||||||
idUid: $idUid
|
idUid: $idUid
|
||||||
idUp3: $idUp3
|
idUp3: $idUp3
|
||||||
) {
|
) {
|
||||||
|
id_uid
|
||||||
|
nama_uid
|
||||||
nama_posko
|
nama_posko
|
||||||
avg_durasi_recovery
|
avg_durasi_recovery
|
||||||
avg_durasi_response
|
avg_durasi_response
|
||||||
@ -345,5 +356,7 @@ const filterData = (params: any) => {
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
const filters = ref()
|
const filters = ref({
|
||||||
|
groupBy: false
|
||||||
|
})
|
||||||
</script>
|
</script>
|
||||||
|
@ -54,10 +54,12 @@
|
|||||||
/>
|
/>
|
||||||
<DxColumn
|
<DxColumn
|
||||||
:width="170"
|
:width="170"
|
||||||
alignment="center"
|
|
||||||
data-field="media"
|
data-field="media"
|
||||||
caption="Nama Media"
|
caption="Nama Media"
|
||||||
|
alignment="center"
|
||||||
|
cell-template="data"
|
||||||
css-class="custom-table-column"
|
css-class="custom-table-column"
|
||||||
|
header-cell-template="title-header"
|
||||||
/>
|
/>
|
||||||
<DxColumn alignment="center" caption="Tanggal" css-class="custom-table-column">
|
<DxColumn alignment="center" caption="Tanggal" css-class="custom-table-column">
|
||||||
<DxColumn
|
<DxColumn
|
||||||
@ -77,6 +79,17 @@
|
|||||||
caption="Total"
|
caption="Total"
|
||||||
css-class="custom-table-column"
|
css-class="custom-table-column"
|
||||||
/>
|
/>
|
||||||
|
|
||||||
|
<template #data="{ data }">
|
||||||
|
<p class="text-left cursor-pointer">
|
||||||
|
{{ data.text }}
|
||||||
|
</p>
|
||||||
|
</template>
|
||||||
|
<template #title-header="{ data }">
|
||||||
|
<p class="text-center w-full">
|
||||||
|
{{ data.column.caption }}
|
||||||
|
</p>
|
||||||
|
</template>
|
||||||
</DxDataGrid>
|
</DxDataGrid>
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
@ -235,6 +235,9 @@ const GET_DAFTAR_GANGGUAN_RESPONSE_TIME = gql`
|
|||||||
idpel_nometer
|
idpel_nometer
|
||||||
keterangan_pelapor
|
keterangan_pelapor
|
||||||
media
|
media
|
||||||
|
penyebab
|
||||||
|
referensi_marking
|
||||||
|
tindakan
|
||||||
nama_pelapor
|
nama_pelapor
|
||||||
is_marking
|
is_marking
|
||||||
no_laporan
|
no_laporan
|
||||||
|
@ -71,21 +71,21 @@
|
|||||||
<DxColumn
|
<DxColumn
|
||||||
:width="170"
|
:width="170"
|
||||||
alignment="center"
|
alignment="center"
|
||||||
data-field=""
|
data-field="nama_uid"
|
||||||
caption="UI Dist."
|
caption="UI Dist."
|
||||||
css-class="custom-table-column"
|
css-class="custom-table-column"
|
||||||
/>
|
/>
|
||||||
<DxColumn
|
<DxColumn
|
||||||
:width="170"
|
:width="170"
|
||||||
alignment="center"
|
alignment="center"
|
||||||
data-field=""
|
data-field="nama_ulp"
|
||||||
caption="ULP"
|
caption="ULP"
|
||||||
css-class="custom-table-column"
|
css-class="custom-table-column"
|
||||||
/>
|
/>
|
||||||
<DxColumn
|
<DxColumn
|
||||||
:width="170"
|
:width="170"
|
||||||
alignment="center"
|
alignment="center"
|
||||||
data-field=""
|
data-field="idpel_nometer"
|
||||||
caption="IDPEL/NO METER"
|
caption="IDPEL/NO METER"
|
||||||
css-class="custom-table-column"
|
css-class="custom-table-column"
|
||||||
/>
|
/>
|
||||||
@ -122,7 +122,7 @@
|
|||||||
<DxColumn
|
<DxColumn
|
||||||
:width="150"
|
:width="150"
|
||||||
alignment="center"
|
alignment="center"
|
||||||
data-field=""
|
data-field="status_akhir"
|
||||||
caption="APKT Status"
|
caption="APKT Status"
|
||||||
css-class="custom-table-column"
|
css-class="custom-table-column"
|
||||||
/>
|
/>
|
||||||
@ -157,14 +157,14 @@
|
|||||||
<DxColumn
|
<DxColumn
|
||||||
:width="170"
|
:width="170"
|
||||||
alignment="center"
|
alignment="center"
|
||||||
data-field=""
|
data-field="nama_issuetype"
|
||||||
caption="Issue Type"
|
caption="Issue Type"
|
||||||
css-class="custom-table-column"
|
css-class="custom-table-column"
|
||||||
/>
|
/>
|
||||||
<DxColumn
|
<DxColumn
|
||||||
:width="170"
|
:width="170"
|
||||||
alignment="center"
|
alignment="center"
|
||||||
data-field=""
|
data-field="nama_subissuetype"
|
||||||
caption="Sub Issue Type"
|
caption="Sub Issue Type"
|
||||||
css-class="custom-table-column"
|
css-class="custom-table-column"
|
||||||
/>
|
/>
|
||||||
@ -250,19 +250,18 @@ const GET_DATA = gql`
|
|||||||
idUp3: $idUp3
|
idUp3: $idUp3
|
||||||
) {
|
) {
|
||||||
alamat_pelapor
|
alamat_pelapor
|
||||||
durasi_recovery_time
|
|
||||||
durasi_response_time
|
|
||||||
id_keluhan
|
|
||||||
idpel_nometer
|
idpel_nometer
|
||||||
keterangan_pelapor
|
keterangan_pelapor
|
||||||
media
|
media
|
||||||
|
nama_uid
|
||||||
|
nama_ulp
|
||||||
nama_pelapor
|
nama_pelapor
|
||||||
no_laporan
|
no_laporan
|
||||||
|
nama_issuetype
|
||||||
|
nama_subissuetype
|
||||||
no_telp_pelapor
|
no_telp_pelapor
|
||||||
idUlp
|
|
||||||
status_akhir
|
status_akhir
|
||||||
waktu_recovery
|
waktu_recovery
|
||||||
waktu_response
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
`
|
`
|
||||||
@ -272,8 +271,7 @@ const { onResult, onError, loading, refetch } = useQuery(GET_DATA, {
|
|||||||
dateTo: new Date('2023-10-01').toISOString().slice(0, 10),
|
dateTo: new Date('2023-10-01').toISOString().slice(0, 10),
|
||||||
idUlp: 0,
|
idUlp: 0,
|
||||||
idUid: 0,
|
idUid: 0,
|
||||||
idUp3: 0,
|
idUp3: 0
|
||||||
media: 'Twitter'
|
|
||||||
})
|
})
|
||||||
const filters = ref()
|
const filters = ref()
|
||||||
|
|
||||||
@ -290,8 +288,7 @@ const filterData = (params: any) => {
|
|||||||
: new Date().toISOString().slice(0, 10),
|
: new Date().toISOString().slice(0, 10),
|
||||||
idUlp: idUlp ? idUlp.id : 0,
|
idUlp: idUlp ? idUlp.id : 0,
|
||||||
idUid: uid ? uid.id : 0,
|
idUid: uid ? uid.id : 0,
|
||||||
idUp3: up3 ? up3.id : 0,
|
idUp3: up3 ? up3.id : 0
|
||||||
media: media
|
|
||||||
})
|
})
|
||||||
|
|
||||||
onResult((queryResult) => {
|
onResult((queryResult) => {
|
||||||
|
@ -1,176 +1,322 @@
|
|||||||
<template>
|
<template>
|
||||||
<Filters @run-search="() => filterData(filters)" class="mb-4">
|
<Filters
|
||||||
<Type2 @update:filters="(value) => filters = value" />
|
:report-button="true"
|
||||||
</Filters>
|
@reset-form="data = []"
|
||||||
<div id="data">
|
@run-search="() => filterData(filters)"
|
||||||
<DxDataGrid class="max-h-[calc(100vh-140px)]" :remote-operations="true" :data-source="data"
|
class="mb-4"
|
||||||
:show-column-lines="true" :show-row-lines="false" :show-borders="true" :row-alternation-enabled="true"
|
>
|
||||||
:hover-state-enabled="true" @selection-changed="onSelectionChanged" @exporting="onExporting"
|
<Type2 @update:filters="(value) => (filters = value)" />
|
||||||
:allow-column-resizing="true" column-resizing-mode="widget" :word-wrap-enabled="true">
|
</Filters>
|
||||||
<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.sync="loading" :enabled="true" />
|
|
||||||
<DxSearchPanel :visible="true" :highlight-case-sensitive="true" />
|
|
||||||
<DxExport :enabled="true" :formats="['pdf', 'xlsx', 'document']" :allow-export-selected-data="false" />
|
|
||||||
<DxColumnFixing :enabled="true" />
|
|
||||||
|
|
||||||
<DxColumn alignment="center" data-type="text" data-field="nama_posko" caption="Nama Unit"
|
<div id="data">
|
||||||
css-class="custom-table-column" />
|
<DxDataGrid
|
||||||
<DxColumn alignment="center" caption="Jumlah Kali Gangguan" css-class="custom-table-column">
|
class="max-h-[calc(100vh-140px)]"
|
||||||
<DxColumn alignment="center" caption="MoM" css-class="custom-table-column">
|
:remote-operations="true"
|
||||||
<DxColumn :width="150" alignment="center" data-field="jumlah_bulan" data-type="number"
|
:data-source="data"
|
||||||
:caption="`${getMonthName(bulanSekarang)} ${tahunLalu}`" css-class="custom-table-column" />
|
:show-column-lines="true"
|
||||||
<DxColumn :width="150" alignment="center" data-field="jumlah_bulan_n_1" data-type="number"
|
:show-row-lines="false"
|
||||||
:caption="`${getMonthName(bulanSekarang)} ${tahunSekarang}`" css-class="custom-table-column" />
|
:show-borders="true"
|
||||||
<DxColumn :width="150" alignment="center" data-field="persen_bulan" data-type="number" caption="%"
|
:row-alternation-enabled="true"
|
||||||
css-class="custom-table-column" />
|
:hover-state-enabled="true"
|
||||||
</DxColumn>
|
@selection-changed="onSelectionChanged"
|
||||||
<DxColumn alignment="center" caption="YoY" css-class="custom-table-column">
|
@exporting="onExporting"
|
||||||
<DxColumn :width="150" alignment="center" data-field="jumlah_tahun" data-type="number"
|
:allow-column-resizing="true"
|
||||||
:caption="`s.d ${getMonthName(bulanSekarang)} ${tahunLalu}`" css-class="custom-table-column" />
|
column-resizing-mode="widget"
|
||||||
<DxColumn :width="150" alignment="center" data-field="jumlah_tahun_n_1" data-type="number"
|
:word-wrap-enabled="true"
|
||||||
:caption="`s.d ${getMonthName(bulanSekarang)} ${tahunSekarang}`" css-class="custom-table-column" />
|
>
|
||||||
<DxColumn :width="150" alignment="center" data-field="persen_tahun" data-type="number" caption="%"
|
<DxSelection mode="single" />
|
||||||
css-class="custom-table-column" />
|
<DxPaging :enabled="false" />
|
||||||
</DxColumn>
|
<DxScrolling column-rendering-mode="virtual" mode="virtual" />
|
||||||
</DxColumn>
|
<DxLoadPanel
|
||||||
</DxDataGrid>
|
:position="position"
|
||||||
</div>
|
:show-indicator="showIndicator"
|
||||||
|
:show-pane="showPane"
|
||||||
|
:shading="shading"
|
||||||
|
v-if="loading"
|
||||||
|
v-model:visible.sync="loading"
|
||||||
|
:enabled="true"
|
||||||
|
/>
|
||||||
|
<DxSearchPanel :visible="true" :highlight-case-sensitive="true" />
|
||||||
|
<DxExport
|
||||||
|
:enabled="true"
|
||||||
|
:formats="['pdf', 'xlsx', 'document']"
|
||||||
|
:allow-export-selected-data="false"
|
||||||
|
/>
|
||||||
|
<DxColumnFixing :enabled="true" />
|
||||||
|
|
||||||
|
<DxColumn
|
||||||
|
alignment="center"
|
||||||
|
:min-width="170"
|
||||||
|
data-type="text"
|
||||||
|
data-field="nama_ulp"
|
||||||
|
caption="Nama Unit"
|
||||||
|
css-class="custom-table-column"
|
||||||
|
:group-index="0"
|
||||||
|
/>
|
||||||
|
<DxColumn
|
||||||
|
alignment="center"
|
||||||
|
:min-width="170"
|
||||||
|
data-type="text"
|
||||||
|
data-field="nama_ulp"
|
||||||
|
caption="Nama Unit"
|
||||||
|
css-class="custom-table-column"
|
||||||
|
/>
|
||||||
|
<DxColumn alignment="center" caption="Jumlah Kali Gangguan" css-class="custom-table-column">
|
||||||
|
<DxColumn alignment="center" caption="MoM" css-class="custom-table-column">
|
||||||
|
<DxColumn
|
||||||
|
:width="150"
|
||||||
|
alignment="center"
|
||||||
|
data-field="mom_bulan_kemarin"
|
||||||
|
data-type="number"
|
||||||
|
:caption="`${getMonthName(bulanSekarang)} ${tahunLalu}`"
|
||||||
|
css-class="custom-table-column"
|
||||||
|
/>
|
||||||
|
<DxColumn
|
||||||
|
:width="150"
|
||||||
|
alignment="center"
|
||||||
|
data-field="mom_bulan_ini"
|
||||||
|
data-type="number"
|
||||||
|
:caption="`${getMonthName(bulanSekarang)} ${tahunSekarang}`"
|
||||||
|
css-class="custom-table-column"
|
||||||
|
/>
|
||||||
|
<DxColumn
|
||||||
|
:width="150"
|
||||||
|
alignment="center"
|
||||||
|
data-field="persen_mom"
|
||||||
|
data-type="number"
|
||||||
|
caption="%"
|
||||||
|
css-class="custom-table-column"
|
||||||
|
/>
|
||||||
|
</DxColumn>
|
||||||
|
<DxColumn alignment="center" caption="YoY" css-class="custom-table-column">
|
||||||
|
<DxColumn
|
||||||
|
:width="150"
|
||||||
|
alignment="center"
|
||||||
|
data-field="yoy_tahun_kemarin"
|
||||||
|
data-type="number"
|
||||||
|
:caption="`s.d ${getMonthName(bulanSekarang)} ${tahunLalu}`"
|
||||||
|
css-class="custom-table-column"
|
||||||
|
/>
|
||||||
|
<DxColumn
|
||||||
|
:width="150"
|
||||||
|
alignment="center"
|
||||||
|
data-field="yoy_tahun_ini"
|
||||||
|
data-type="number"
|
||||||
|
:caption="`s.d ${getMonthName(bulanSekarang)} ${tahunSekarang}`"
|
||||||
|
css-class="custom-table-column"
|
||||||
|
/>
|
||||||
|
<DxColumn
|
||||||
|
:width="150"
|
||||||
|
alignment="center"
|
||||||
|
data-field="persen_yoy"
|
||||||
|
data-type="number"
|
||||||
|
caption="%"
|
||||||
|
css-class="custom-table-column"
|
||||||
|
/>
|
||||||
|
</DxColumn>
|
||||||
|
</DxColumn>
|
||||||
|
|
||||||
|
<!-- <DxSummary>
|
||||||
|
<DxGroupItem :show-in-group-footer="true" column="nama_ulp" display-format="Total" />
|
||||||
|
<DxGroupItem
|
||||||
|
:show-in-group-footer="true"
|
||||||
|
column="mom_bulan_kemarin"
|
||||||
|
summary-type="sum"
|
||||||
|
display-format="{0}"
|
||||||
|
/>
|
||||||
|
<DxGroupItem
|
||||||
|
:show-in-group-footer="true"
|
||||||
|
column="mom_bulan_ini"
|
||||||
|
summary-type="sum"
|
||||||
|
display-format="{0}"
|
||||||
|
/>
|
||||||
|
<DxGroupItem
|
||||||
|
:show-in-group-footer="true"
|
||||||
|
column="persen_mom"
|
||||||
|
summary-type="sum"
|
||||||
|
display-format="{0}"
|
||||||
|
/>
|
||||||
|
<DxGroupItem
|
||||||
|
:show-in-group-footer="true"
|
||||||
|
column="yoy_tahun_kemarin"
|
||||||
|
summary-type="sum"
|
||||||
|
display-format="{0}"
|
||||||
|
/>
|
||||||
|
<DxGroupItem
|
||||||
|
:show-in-group-footer="true"
|
||||||
|
column="yoy_tahun_ini"
|
||||||
|
summary-type="sum"
|
||||||
|
display-format="{0}"
|
||||||
|
/>
|
||||||
|
<DxGroupItem
|
||||||
|
:show-in-group-footer="true"
|
||||||
|
column="persen_yoy"
|
||||||
|
summary-type="sum"
|
||||||
|
display-format="{0}"
|
||||||
|
/>
|
||||||
|
</DxSummary> -->
|
||||||
|
</DxDataGrid>
|
||||||
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script setup lang="ts">
|
<script setup lang="ts">
|
||||||
import Filters from '@/components/Form/Filters.vue'
|
import Filters from '@/components/Form/Filters.vue'
|
||||||
import Type2 from '@/components/Form/FiltersType/Type2.vue'
|
import Type2 from '@/components/Form/FiltersType/Type2.vue'
|
||||||
import { onMounted, ref, } from 'vue'
|
import { ref } from 'vue'
|
||||||
import { DxDataGrid } from 'devextreme-vue'
|
import { DxDataGrid } from 'devextreme-vue'
|
||||||
import { getMonthName } from '@/utils/texts'
|
import { getMonthName } from '@/utils/texts'
|
||||||
import {
|
import {
|
||||||
DxColumn,
|
DxColumn,
|
||||||
DxColumnFixing,
|
DxColumnFixing,
|
||||||
DxExport,
|
DxExport,
|
||||||
DxLoadPanel,
|
DxGroupItem,
|
||||||
DxPaging,
|
DxLoadPanel,
|
||||||
DxScrolling,
|
DxPaging,
|
||||||
DxSearchPanel,
|
DxScrolling,
|
||||||
DxSelection
|
DxSearchPanel,
|
||||||
|
DxSelection,
|
||||||
|
DxSummary
|
||||||
} from 'devextreme-vue/data-grid'
|
} from 'devextreme-vue/data-grid'
|
||||||
import { jsPDF } from 'jspdf'
|
import { jsPDF } from 'jspdf'
|
||||||
import { exportDataGrid as exportToPdf } from 'devextreme/pdf_exporter'
|
import { exportDataGrid as exportToPdf } from 'devextreme/pdf_exporter'
|
||||||
import { exportDataGrid as exportToExcel } from 'devextreme/excel_exporter'
|
import { exportDataGrid as exportToExcel } from 'devextreme/excel_exporter'
|
||||||
import { saveAs } from 'file-saver'
|
import { saveAs } from 'file-saver'
|
||||||
import { Workbook } from 'exceljs'
|
import { Workbook } from 'exceljs'
|
||||||
|
|
||||||
import { useQuery } from '@vue/apollo-composable'
|
import { useQuery } from '@vue/apollo-composable'
|
||||||
import gql from 'graphql-tag'
|
import gql from 'graphql-tag'
|
||||||
|
|
||||||
const position = { of: '#data' }
|
const position = { of: '#data' }
|
||||||
const showIndicator = ref(true)
|
const showIndicator = ref(true)
|
||||||
const shading = ref(true)
|
const shading = ref(true)
|
||||||
const showPane = ref(true)
|
const showPane = ref(true)
|
||||||
const data = ref<any[]>([])
|
const data = ref<any[]>([])
|
||||||
|
|
||||||
const dataDetail = ref<any>()
|
|
||||||
const showDetail = ref(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()
|
||||||
|
|
||||||
exportToPdf({
|
exportToPdf({
|
||||||
jsPDFDocument: doc,
|
jsPDFDocument: doc,
|
||||||
component: e.component,
|
component: e.component,
|
||||||
indent: 5
|
indent: 5
|
||||||
}).then(() => {
|
}).then(() => {
|
||||||
doc.save(`.pdf`)
|
doc.save(`.pdf`)
|
||||||
})
|
})
|
||||||
} else {
|
} else {
|
||||||
const workbook = new Workbook()
|
const workbook = new Workbook()
|
||||||
const worksheet = workbook.addWorksheet('Employees')
|
const worksheet = workbook.addWorksheet('Employees')
|
||||||
|
|
||||||
exportToExcel({
|
exportToExcel({
|
||||||
component: e.component,
|
component: e.component,
|
||||||
worksheet,
|
worksheet,
|
||||||
autoFilterEnabled: true
|
autoFilterEnabled: true
|
||||||
}).then(() => {
|
}).then(() => {
|
||||||
workbook.xlsx.writeBuffer().then((buffer: any) => {
|
workbook.xlsx.writeBuffer().then((buffer: any) => {
|
||||||
saveAs(new Blob([buffer], { type: 'application/octet-stream' }), 'DataGrid.xlsx')
|
saveAs(new Blob([buffer], { type: 'application/octet-stream' }), 'DataGrid.xlsx')
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
|
|
||||||
e.cancel = true
|
e.cancel = true
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
const tahunSekarang = ref(new Date().getFullYear())
|
const tahunSekarang = ref(new Date().getFullYear())
|
||||||
const bulanSekarang = ref(new Date().getMonth())
|
const bulanSekarang = ref(new Date().getMonth())
|
||||||
const tahunLalu = ref(tahunSekarang.value - 1)
|
const tahunLalu = ref(tahunSekarang.value - 1)
|
||||||
|
|
||||||
|
// const MONALISAJUMLAHKALIGANGGUAN = gql`
|
||||||
|
// query DaftarMonalisaJumlahKaliGangguan(
|
||||||
|
// $regional: Int
|
||||||
|
// $idUid: Int
|
||||||
|
// $idUp3: Int
|
||||||
|
// $idUlp: Int
|
||||||
|
// $bulan: Int
|
||||||
|
// $tahun: Int
|
||||||
|
// ) {
|
||||||
|
// monalisaJumlahKaliGangguan(
|
||||||
|
// regional: $regional
|
||||||
|
// idUid: $idUid
|
||||||
|
// idUp3: $idUp3
|
||||||
|
// $idUlp: $idUlp
|
||||||
|
// bulan: $bulan
|
||||||
|
// tahun: $tahun
|
||||||
|
// ) {
|
||||||
|
// jumlah_bulan
|
||||||
|
// jumlah_bulan_n_1
|
||||||
|
// jumlah_tahun
|
||||||
|
// jumlah_tahun_n_1
|
||||||
|
// nama_posko
|
||||||
|
// persen_bulan
|
||||||
|
// persen_tahun
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
// `
|
||||||
|
|
||||||
const MONALISAJUMLAHKALIGANGGUAN = gql`
|
const MONALISAJUMLAHKALIGANGGUAN = gql`
|
||||||
query DaftarMonalisaJumlahKaliGangguan(
|
query DaftarMonalisaJumlahKaliGangguan(
|
||||||
$regional: Int
|
|
||||||
$posko: Int
|
|
||||||
$idUid: Int
|
$idUid: Int
|
||||||
$idUp3: Int
|
$idUp3: Int
|
||||||
|
$idUlp: Int
|
||||||
$bulan: Int
|
$bulan: Int
|
||||||
$tahun: Int
|
$tahun: Int
|
||||||
) {
|
) {
|
||||||
monalisaJumlahKaliGangguan(
|
monalisaJumlahKaliGangguan(
|
||||||
regional: $regional
|
|
||||||
posko: $posko
|
|
||||||
idUid: $idUid
|
idUid: $idUid
|
||||||
idUp3: $idUp3
|
idUp3: $idUp3
|
||||||
|
idUlp: $idUlp
|
||||||
bulan: $bulan
|
bulan: $bulan
|
||||||
tahun: $tahun
|
tahun: $tahun
|
||||||
) {
|
) {
|
||||||
jumlah_bulan
|
nama_ulp
|
||||||
jumlah_bulan_n_1
|
mom_bulan_ini
|
||||||
jumlah_tahun
|
mom_bulan_kemarin
|
||||||
jumlah_tahun_n_1
|
persen_mom
|
||||||
nama_posko
|
yoy_tahun_ini
|
||||||
persen_bulan
|
yoy_tahun_kemarin
|
||||||
persen_tahun
|
persen_yoy
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
`
|
`
|
||||||
|
|
||||||
const { onResult, onError, loading, refetch } = useQuery(MONALISAJUMLAHKALIGANGGUAN, {
|
const { onResult, onError, loading, refetch } = useQuery(MONALISAJUMLAHKALIGANGGUAN, {
|
||||||
regional: 0,
|
// regional: 0,
|
||||||
posko: 0,
|
idUp3: 0,
|
||||||
idUid: 0,
|
idUid: 0,
|
||||||
idUp3: 0,
|
idUlp: 0,
|
||||||
bulan: bulanSekarang.value,
|
bulan: bulanSekarang.value,
|
||||||
tahun: tahunSekarang.value
|
tahun: tahunSekarang.value
|
||||||
})
|
})
|
||||||
|
|
||||||
const filterData = (params: any) => {
|
const filterData = (params: any) => {
|
||||||
const { regional, posko, idUid, idUp3, bulan, tahun } = params;
|
const { regional, idUlp, idUid, idUp3, bulan, tahun } = params
|
||||||
bulanSekarang.value = bulan.id;
|
bulanSekarang.value = bulan.id
|
||||||
tahunSekarang.value = tahun.id;
|
tahunSekarang.value = tahun.id
|
||||||
tahunLalu.value = tahun.id - 1;
|
tahunLalu.value = tahun.id - 1
|
||||||
refetch({
|
refetch({
|
||||||
regional: regional,
|
// regional: regional,
|
||||||
posko: posko ? posko.id : 0,
|
idUid: idUid ? idUid.id : 0,
|
||||||
idUid: idUid ? idUid.id : 0,
|
idUp3: idUp3 ? idUp3.id : 0,
|
||||||
idUp3: idUp3 ? idUp3.id : 0,
|
idUlp: idUlp ? idUlp.id : 0,
|
||||||
bulan: bulan ? bulan.id : bulanSekarang.value,
|
bulan: bulan ? bulan.id : bulanSekarang.value,
|
||||||
tahun: bulan ? tahun.id : tahunSekarang.value
|
tahun: bulan ? tahun.id : tahunSekarang.value
|
||||||
})
|
})
|
||||||
onResult((queryResult) => {
|
onResult((queryResult) => {
|
||||||
if (queryResult.data != undefined) {
|
if (queryResult.data != undefined) {
|
||||||
data.value = queryResult.data.monalisaJumlahKaliGangguan;
|
data.value = queryResult.data.monalisaJumlahKaliGangguan
|
||||||
}
|
}
|
||||||
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 onSelectionChanged = ({ selectedRowsData }: any) => {
|
const onSelectionChanged = ({ selectedRowsData }: any) => {
|
||||||
const data = selectedRowsData[0]
|
const data = selectedRowsData[0]
|
||||||
console.log(data)
|
console.log(data)
|
||||||
}
|
}
|
||||||
onMounted(() => {
|
|
||||||
console.log(bulanSekarang.value)
|
const filters = ref()
|
||||||
});
|
|
||||||
const filters = ref();
|
|
||||||
</script>
|
</script>
|
||||||
|
@ -1,42 +1,125 @@
|
|||||||
<template>
|
<template>
|
||||||
<Filters @run-search="() => filterData(filters)" class="mb-4">
|
<Filters
|
||||||
<Type2 @update:filters="(value) => filters = value" />
|
@reset-form="data = []"
|
||||||
</Filters>
|
:report-button="true"
|
||||||
<div id="data">
|
@run-search="() => filterData(filters)"
|
||||||
<DxDataGrid class="max-h-[calc(100vh-140px)]" :data-source="data" :show-column-lines="true" :show-row-lines="false"
|
class="mb-4"
|
||||||
:show-borders="true" :row-alternation-enabled="true" :hover-state-enabled="true"
|
>
|
||||||
@selection-changed="onSelectionChanged" @exporting="onExporting" :allow-column-resizing="true"
|
<Type2 @update:filters="(value) => (filters = value)" />
|
||||||
column-resizing-mode="widget" :word-wrap-enabled="true">
|
</Filters>
|
||||||
<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" />
|
|
||||||
<DxSearchPanel :visible="true" :highlight-case-sensitive="true" />
|
|
||||||
<DxExport :enabled="true" :formats="['pdf', 'xlsx', 'document']" :allow-export-selected-data="false" />
|
|
||||||
<DxColumnFixing :enabled="true" />
|
|
||||||
|
|
||||||
<DxColumn alignment="center" data-field="nama_posko" caption="Nama Unit" css-class="custom-table-column" />
|
<div id="data">
|
||||||
<DxColumn alignment="center" caption="Jumlah Dispatching Time Gangguan" css-class="custom-table-column">
|
<DxDataGrid
|
||||||
<DxColumn alignment="center" caption="MoM" css-class="custom-table-column">
|
class="max-h-[calc(100vh-140px)]"
|
||||||
<DxColumn :width="150" alignment="center" data-field="jumlah_bulan" data-type="number"
|
:data-source="data"
|
||||||
:caption="`${getMonthName(bulanSekarang)} ${tahunLalu}`" css-class="custom-table-column" />
|
:show-column-lines="true"
|
||||||
<DxColumn :width="150" alignment="center" data-field="jumlah_bulan_n_1" data-type="number"
|
:show-row-lines="false"
|
||||||
:caption="`${getMonthName(bulanSekarang)} ${tahunSekarang}`" css-class="custom-table-column" />
|
:show-borders="true"
|
||||||
<DxColumn :width="150" alignment="center" data-field="persen_bulan" data-type="number" caption="%"
|
:row-alternation-enabled="true"
|
||||||
css-class="custom-table-column" />
|
:hover-state-enabled="true"
|
||||||
</DxColumn>
|
@selection-changed="onSelectionChanged"
|
||||||
<DxColumn alignment="center" caption="YoY" css-class="custom-table-column">
|
@exporting="onExporting"
|
||||||
<DxColumn :width="150" alignment="center" data-field="jumlah_tahun" data-type="number"
|
:allow-column-resizing="true"
|
||||||
:caption="`s.d ${getMonthName(bulanSekarang)} ${tahunLalu}`" css-class="custom-table-column" />
|
column-resizing-mode="widget"
|
||||||
<DxColumn :width="150" alignment="center" data-field="jumlah_tahun_n_1" data-type="number"
|
:word-wrap-enabled="true"
|
||||||
:caption="`s.d ${getMonthName(bulanSekarang)} ${tahunSekarang}`" css-class="custom-table-column" />
|
>
|
||||||
<DxColumn :width="150" alignment="center" data-field="persen_tahun" data-type="number" caption="%"
|
<DxSelection mode="single" />
|
||||||
css-class="custom-table-column" />
|
<DxPaging :enabled="false" />
|
||||||
</DxColumn>
|
<DxScrolling column-rendering-mode="virtual" mode="virtual" />
|
||||||
</DxColumn>
|
<DxLoadPanel
|
||||||
</DxDataGrid>
|
:position="position"
|
||||||
</div>
|
:show-indicator="showIndicator"
|
||||||
|
:show-pane="showPane"
|
||||||
|
:shading="shading"
|
||||||
|
v-if="loading"
|
||||||
|
v-model:visible="loading"
|
||||||
|
:enabled="true"
|
||||||
|
/>
|
||||||
|
<DxSearchPanel :visible="true" :highlight-case-sensitive="true" />
|
||||||
|
<DxExport
|
||||||
|
:enabled="true"
|
||||||
|
:formats="['pdf', 'xlsx', 'document']"
|
||||||
|
:allow-export-selected-data="false"
|
||||||
|
/>
|
||||||
|
<DxColumnFixing :enabled="true" />
|
||||||
|
|
||||||
|
<DxColumn
|
||||||
|
alignment="center"
|
||||||
|
:min-width="170"
|
||||||
|
data-type="text"
|
||||||
|
data-field="nama_ulp"
|
||||||
|
caption="Nama Unit"
|
||||||
|
css-class="custom-table-column"
|
||||||
|
:group-index="0"
|
||||||
|
/>
|
||||||
|
<DxColumn
|
||||||
|
alignment="center"
|
||||||
|
:min-width="170"
|
||||||
|
data-type="text"
|
||||||
|
data-field="nama_ulp"
|
||||||
|
caption="Nama Unit"
|
||||||
|
css-class="custom-table-column"
|
||||||
|
/>
|
||||||
|
<DxColumn
|
||||||
|
alignment="center"
|
||||||
|
caption="Jumlah Dispatching Time Gangguan"
|
||||||
|
css-class="custom-table-column"
|
||||||
|
>
|
||||||
|
<DxColumn alignment="center" caption="MoM" css-class="custom-table-column">
|
||||||
|
<DxColumn
|
||||||
|
:width="150"
|
||||||
|
alignment="center"
|
||||||
|
data-field="mom_bulan_kemarin"
|
||||||
|
data-type="number"
|
||||||
|
:caption="`${getMonthName(bulanSekarang)} ${tahunLalu}`"
|
||||||
|
css-class="custom-table-column"
|
||||||
|
/>
|
||||||
|
<DxColumn
|
||||||
|
:width="150"
|
||||||
|
alignment="center"
|
||||||
|
data-field="mom_bulan_ini"
|
||||||
|
data-type="number"
|
||||||
|
:caption="`${getMonthName(bulanSekarang)} ${tahunSekarang}`"
|
||||||
|
css-class="custom-table-column"
|
||||||
|
/>
|
||||||
|
<DxColumn
|
||||||
|
:width="150"
|
||||||
|
alignment="center"
|
||||||
|
data-field="persen_mom"
|
||||||
|
data-type="number"
|
||||||
|
caption="%"
|
||||||
|
css-class="custom-table-column"
|
||||||
|
/>
|
||||||
|
</DxColumn>
|
||||||
|
<DxColumn alignment="center" caption="YoY" css-class="custom-table-column">
|
||||||
|
<DxColumn
|
||||||
|
:width="150"
|
||||||
|
alignment="center"
|
||||||
|
data-field="yoy_tahun_kemarin"
|
||||||
|
data-type="number"
|
||||||
|
:caption="`s.d ${getMonthName(bulanSekarang)} ${tahunLalu}`"
|
||||||
|
css-class="custom-table-column"
|
||||||
|
/>
|
||||||
|
<DxColumn
|
||||||
|
:width="150"
|
||||||
|
alignment="center"
|
||||||
|
data-field="yoy_tahun_ini"
|
||||||
|
data-type="number"
|
||||||
|
:caption="`s.d ${getMonthName(bulanSekarang)} ${tahunSekarang}`"
|
||||||
|
css-class="custom-table-column"
|
||||||
|
/>
|
||||||
|
<DxColumn
|
||||||
|
:width="150"
|
||||||
|
alignment="center"
|
||||||
|
data-field="persen_yoy"
|
||||||
|
data-type="number"
|
||||||
|
caption="%"
|
||||||
|
css-class="custom-table-column"
|
||||||
|
/>
|
||||||
|
</DxColumn>
|
||||||
|
</DxColumn>
|
||||||
|
</DxDataGrid>
|
||||||
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script setup lang="ts">
|
<script setup lang="ts">
|
||||||
@ -45,129 +128,155 @@ import Type2 from '@/components/Form/FiltersType/Type2.vue'
|
|||||||
import { ref } from 'vue'
|
import { ref } from 'vue'
|
||||||
import { DxDataGrid } from 'devextreme-vue'
|
import { DxDataGrid } from 'devextreme-vue'
|
||||||
import {
|
import {
|
||||||
DxColumn,
|
DxColumn,
|
||||||
DxColumnFixing,
|
DxColumnFixing,
|
||||||
DxExport,
|
DxExport,
|
||||||
DxLoadPanel,
|
DxLoadPanel,
|
||||||
DxPaging,
|
DxPaging,
|
||||||
DxScrolling,
|
DxScrolling,
|
||||||
DxSearchPanel,
|
DxSearchPanel,
|
||||||
DxSelection
|
DxSelection
|
||||||
} from 'devextreme-vue/data-grid'
|
} from 'devextreme-vue/data-grid'
|
||||||
import { jsPDF } from 'jspdf'
|
import { jsPDF } from 'jspdf'
|
||||||
import { exportDataGrid as exportToPdf } from 'devextreme/pdf_exporter'
|
import { exportDataGrid as exportToPdf } from 'devextreme/pdf_exporter'
|
||||||
import { exportDataGrid as exportToExcel } from 'devextreme/excel_exporter'
|
import { exportDataGrid as exportToExcel } from 'devextreme/excel_exporter'
|
||||||
import { saveAs } from 'file-saver'
|
import { saveAs } from 'file-saver'
|
||||||
import { Workbook } from 'exceljs'
|
import { Workbook } from 'exceljs'
|
||||||
const tahunSekarang = ref(new Date().getFullYear())
|
|
||||||
const bulanSekarang = ref(new Date().getMonth())
|
|
||||||
const tahunLalu = ref(tahunSekarang.value - 1)
|
|
||||||
import { useQuery } from '@vue/apollo-composable'
|
import { useQuery } from '@vue/apollo-composable'
|
||||||
import gql from 'graphql-tag'
|
import gql from 'graphql-tag'
|
||||||
import { getMonthName } from '@/utils/texts'
|
import { getMonthName } from '@/utils/texts'
|
||||||
|
|
||||||
|
const tahunSekarang = ref(new Date().getFullYear())
|
||||||
|
const bulanSekarang = ref(new Date().getMonth())
|
||||||
|
const tahunLalu = ref(tahunSekarang.value - 1)
|
||||||
const position = { of: '#data' }
|
const position = { of: '#data' }
|
||||||
const showIndicator = ref(true)
|
const showIndicator = ref(true)
|
||||||
const shading = ref(true)
|
const shading = ref(true)
|
||||||
const showPane = ref(true)
|
const showPane = ref(true)
|
||||||
const data = ref<any[]>([])
|
const data = ref<any[]>([])
|
||||||
const dataDetail = ref<any>()
|
|
||||||
const showDetail = ref(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()
|
||||||
|
|
||||||
exportToPdf({
|
exportToPdf({
|
||||||
jsPDFDocument: doc,
|
jsPDFDocument: doc,
|
||||||
component: e.component,
|
component: e.component,
|
||||||
indent: 5
|
indent: 5
|
||||||
}).then(() => {
|
}).then(() => {
|
||||||
doc.save(`.pdf`)
|
doc.save(`.pdf`)
|
||||||
})
|
})
|
||||||
} else {
|
} else {
|
||||||
const workbook = new Workbook()
|
const workbook = new Workbook()
|
||||||
const worksheet = workbook.addWorksheet('Employees')
|
const worksheet = workbook.addWorksheet('Employees')
|
||||||
|
|
||||||
exportToExcel({
|
exportToExcel({
|
||||||
component: e.component,
|
component: e.component,
|
||||||
worksheet,
|
worksheet,
|
||||||
autoFilterEnabled: true
|
autoFilterEnabled: true
|
||||||
}).then(() => {
|
}).then(() => {
|
||||||
workbook.xlsx.writeBuffer().then((buffer: any) => {
|
workbook.xlsx.writeBuffer().then((buffer: any) => {
|
||||||
saveAs(new Blob([buffer], { type: 'application/octet-stream' }), 'DataGrid.xlsx')
|
saveAs(new Blob([buffer], { type: 'application/octet-stream' }), 'DataGrid.xlsx')
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
|
|
||||||
e.cancel = true
|
e.cancel = true
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// const monalisaDispatchingTimeGangguan = gql`
|
||||||
|
// query DaftarmonalisaDispatchingTimeGangguan(
|
||||||
|
// $regional: String
|
||||||
|
// $posko: Int
|
||||||
|
// $idUid: Int
|
||||||
|
// $idUp3: Int
|
||||||
|
// $bulan: Int
|
||||||
|
// $tahun: Int
|
||||||
|
// ) {
|
||||||
|
// monalisaDispatchingTimeGangguan(
|
||||||
|
// regional: $regional
|
||||||
|
// posko: $posko
|
||||||
|
// idUid: $idUid
|
||||||
|
// idUp3: $idUp3
|
||||||
|
// bulan: $bulan
|
||||||
|
// tahun: $tahun
|
||||||
|
// ) {
|
||||||
|
// jumlah_bulan
|
||||||
|
// jumlah_bulan_n_1
|
||||||
|
// jumlah_tahun
|
||||||
|
// jumlah_tahun_n_1
|
||||||
|
// nama_posko
|
||||||
|
// persen_bulan
|
||||||
|
// persen_tahun
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
// `
|
||||||
|
|
||||||
const monalisaDispatchingTimeGangguan = gql`
|
const monalisaDispatchingTimeGangguan = gql`
|
||||||
query DaftarmonalisaDispatchingTimeGangguan(
|
query DaftarmonalisaDispatchingTimeGangguan(
|
||||||
$regional: String
|
|
||||||
$posko: Int
|
|
||||||
$idUid: Int
|
$idUid: Int
|
||||||
$idUp3: Int
|
$idUp3: Int
|
||||||
|
$idUlp: Int
|
||||||
$bulan: Int
|
$bulan: Int
|
||||||
$tahun: Int
|
$tahun: Int
|
||||||
) {
|
) {
|
||||||
monalisaDispatchingTimeGangguan(
|
monalisaDispatchingTimeGangguan(
|
||||||
regional: $regional
|
|
||||||
posko: $posko
|
|
||||||
idUid: $idUid
|
idUid: $idUid
|
||||||
idUp3: $idUp3
|
idUp3: $idUp3
|
||||||
|
idUlp: $idUlp
|
||||||
bulan: $bulan
|
bulan: $bulan
|
||||||
tahun: $tahun
|
tahun: $tahun
|
||||||
) {
|
) {
|
||||||
jumlah_bulan
|
nama_ulp
|
||||||
jumlah_bulan_n_1
|
mom_bulan_ini
|
||||||
jumlah_tahun
|
mom_bulan_kemarin
|
||||||
jumlah_tahun_n_1
|
persen_mom
|
||||||
nama_posko
|
yoy_tahun_ini
|
||||||
persen_bulan
|
yoy_tahun_kemarin
|
||||||
persen_tahun
|
persen_yoy
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
`
|
`
|
||||||
|
|
||||||
const { onResult, onError, loading, refetch } = useQuery(monalisaDispatchingTimeGangguan, {
|
const { onResult, onError, loading, refetch } = useQuery(monalisaDispatchingTimeGangguan, {
|
||||||
regional: '',
|
// regional: 0,
|
||||||
posko: '',
|
idUp3: 0,
|
||||||
idUid: 0,
|
idUid: 0,
|
||||||
idUp3: 0,
|
idUlp: 0,
|
||||||
bulan: 10,
|
bulan: bulanSekarang.value,
|
||||||
tahun: 2023
|
tahun: tahunSekarang.value
|
||||||
})
|
})
|
||||||
|
|
||||||
const filterData = (params: any) => {
|
const filterData = (params: any) => {
|
||||||
const { regional, posko, idUid, idUp3, bulan, tahun } = params;
|
const { regional, idUlp, idUid, idUp3, bulan, tahun } = params
|
||||||
bulanSekarang.value = bulan.id;
|
bulanSekarang.value = bulan.id
|
||||||
tahunSekarang.value = tahun.id;
|
tahunSekarang.value = tahun.id
|
||||||
tahunLalu.value = tahun.id - 1;
|
tahunLalu.value = tahun.id - 1
|
||||||
refetch({
|
refetch({
|
||||||
regional: regional,
|
// regional: regional,
|
||||||
posko: posko ? posko.id : 0,
|
idUid: idUid ? idUid.id : 0,
|
||||||
idUid: idUid ? idUid.id : 0,
|
idUp3: idUp3 ? idUp3.id : 0,
|
||||||
idUp3: idUp3 ? idUp3.id : 0,
|
idUlp: idUlp ? idUlp.id : 0,
|
||||||
bulan: bulan ? bulan.id : 10,
|
bulan: bulan ? bulan.id : bulanSekarang.value,
|
||||||
tahun: bulan ? tahun.id : 2023
|
tahun: bulan ? tahun.id : tahunSekarang.value
|
||||||
})
|
})
|
||||||
onResult((queryResult) => {
|
onResult((queryResult) => {
|
||||||
if (queryResult.data != undefined) {
|
if (queryResult.data != undefined) {
|
||||||
queryResult.data.monalisaDispatchingTimeGangguan.forEach((item: any) => {
|
queryResult.data.monalisaDispatchingTimeGangguan.forEach((item: any) => {
|
||||||
data.value = [
|
data.value = [...data.value, { ...item }]
|
||||||
...data.value, { ...item }
|
})
|
||||||
]
|
}
|
||||||
})
|
console.log(queryResult.data)
|
||||||
}
|
console.log(queryResult.loading)
|
||||||
console.log(queryResult.data)
|
console.log(queryResult.networkStatus)
|
||||||
console.log(queryResult.loading)
|
})
|
||||||
console.log(queryResult.networkStatus)
|
onError((error) => {
|
||||||
})
|
console.log(error)
|
||||||
onError((error) => {
|
})
|
||||||
console.log(error)
|
|
||||||
})
|
|
||||||
}
|
}
|
||||||
const onSelectionChanged = ({ selectedRowsData }: any) => {
|
const onSelectionChanged = ({ selectedRowsData }: any) => {
|
||||||
const data = selectedRowsData[0]
|
const data = selectedRowsData[0]
|
||||||
console.log(data)
|
console.log(data)
|
||||||
}
|
}
|
||||||
|
|
||||||
const filters = ref()
|
const filters = ref()
|
||||||
|
@ -1,42 +1,125 @@
|
|||||||
<template>
|
<template>
|
||||||
<Filters @run-search="() => filterData(filters)" class="mb-4">
|
<Filters
|
||||||
<Type2 @update:filters="(value) => filters = value" />
|
:report-button="true"
|
||||||
</Filters>
|
@reset-form="data = []"
|
||||||
<div id="data">
|
@run-search="() => filterData(filters)"
|
||||||
<DxDataGrid class="max-h-[calc(100vh-140px)]" :data-source="data" :show-column-lines="true" :show-row-lines="false"
|
class="mb-4"
|
||||||
:show-borders="true" :row-alternation-enabled="true" :hover-state-enabled="true"
|
>
|
||||||
@selection-changed="onSelectionChanged" @exporting="onExporting" :allow-column-resizing="true"
|
<Type2 @update:filters="(value) => (filters = value)" />
|
||||||
column-resizing-mode="widget" :word-wrap-enabled="true">
|
</Filters>
|
||||||
<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" />
|
|
||||||
<DxSearchPanel :visible="true" :highlight-case-sensitive="true" />
|
|
||||||
<DxExport :enabled="true" :formats="['pdf', 'xlsx', 'document']" :allow-export-selected-data="false" />
|
|
||||||
<DxColumnFixing :enabled="true" />
|
|
||||||
|
|
||||||
<DxColumn alignment="center" data-field="nama_posko" caption="Nama Unit" css-class="custom-table-column" />
|
<div id="data">
|
||||||
<DxColumn alignment="center" caption="Jumlah RCT Kali Gangguan" css-class="custom-table-column">
|
<DxDataGrid
|
||||||
<DxColumn alignment="center" caption="MoM" css-class="custom-table-column">
|
class="max-h-[calc(100vh-140px)]"
|
||||||
<DxColumn :width="150" alignment="center" data-field="jumlah_bulan" data-type="number"
|
:data-source="data"
|
||||||
:caption="`${getMonthName(bulanSekarang)} ${tahunLalu}`" css-class="custom-table-column" />
|
:show-column-lines="true"
|
||||||
<DxColumn :width="150" alignment="center" data-field="jumlah_bulan_n_1" data-type="number"
|
:show-row-lines="false"
|
||||||
:caption="`${getMonthName(bulanSekarang)} ${tahunSekarang}`" css-class="custom-table-column" />
|
:show-borders="true"
|
||||||
<DxColumn :width="150" alignment="center" data-field="persen_bulan" data-type="number" caption="%"
|
:row-alternation-enabled="true"
|
||||||
css-class="custom-table-column" />
|
:hover-state-enabled="true"
|
||||||
</DxColumn>
|
@selection-changed="onSelectionChanged"
|
||||||
<DxColumn alignment="center" caption="YoY" css-class="custom-table-column">
|
@exporting="onExporting"
|
||||||
<DxColumn :width="150" alignment="center" data-field="jumlah_tahun" data-type="number"
|
:allow-column-resizing="true"
|
||||||
:caption="`s.d ${getMonthName(bulanSekarang)} ${tahunLalu}`" css-class="custom-table-column" />
|
column-resizing-mode="widget"
|
||||||
<DxColumn :width="150" alignment="center" data-field="jumlah_tahun_n_1" data-type="number"
|
:word-wrap-enabled="true"
|
||||||
:caption="`s.d ${getMonthName(bulanSekarang)} ${tahunSekarang}`" css-class="custom-table-column" />
|
>
|
||||||
<DxColumn :width="150" alignment="center" data-field="persen_tahun" data-type="number" caption="%"
|
<DxSelection mode="single" />
|
||||||
css-class="custom-table-column" />
|
<DxPaging :enabled="false" />
|
||||||
</DxColumn>
|
<DxScrolling column-rendering-mode="virtual" mode="virtual" />
|
||||||
</DxColumn>
|
<DxLoadPanel
|
||||||
</DxDataGrid>
|
:position="position"
|
||||||
</div>
|
:show-indicator="showIndicator"
|
||||||
|
:show-pane="showPane"
|
||||||
|
:shading="shading"
|
||||||
|
v-if="loading"
|
||||||
|
v-model:visible="loading"
|
||||||
|
:enabled="true"
|
||||||
|
/>
|
||||||
|
<DxSearchPanel :visible="true" :highlight-case-sensitive="true" />
|
||||||
|
<DxExport
|
||||||
|
:enabled="true"
|
||||||
|
:formats="['pdf', 'xlsx', 'document']"
|
||||||
|
:allow-export-selected-data="false"
|
||||||
|
/>
|
||||||
|
<DxColumnFixing :enabled="true" />
|
||||||
|
|
||||||
|
<DxColumn
|
||||||
|
alignment="center"
|
||||||
|
:min-width="170"
|
||||||
|
data-type="text"
|
||||||
|
data-field="nama_ulp"
|
||||||
|
caption="Nama Unit"
|
||||||
|
css-class="custom-table-column"
|
||||||
|
:group-index="0"
|
||||||
|
/>
|
||||||
|
<DxColumn
|
||||||
|
alignment="center"
|
||||||
|
:min-width="170"
|
||||||
|
data-type="text"
|
||||||
|
data-field="nama_ulp"
|
||||||
|
caption="Nama Unit"
|
||||||
|
css-class="custom-table-column"
|
||||||
|
/>
|
||||||
|
<DxColumn
|
||||||
|
alignment="center"
|
||||||
|
caption="Jumlah RCT Kali Gangguan"
|
||||||
|
css-class="custom-table-column"
|
||||||
|
>
|
||||||
|
<DxColumn alignment="center" caption="MoM" css-class="custom-table-column">
|
||||||
|
<DxColumn
|
||||||
|
:width="150"
|
||||||
|
alignment="center"
|
||||||
|
data-field="mom_bulan_kemarin"
|
||||||
|
data-type="number"
|
||||||
|
:caption="`${getMonthName(bulanSekarang)} ${tahunLalu}`"
|
||||||
|
css-class="custom-table-column"
|
||||||
|
/>
|
||||||
|
<DxColumn
|
||||||
|
:width="150"
|
||||||
|
alignment="center"
|
||||||
|
data-field="mom_bulan_ini"
|
||||||
|
data-type="number"
|
||||||
|
:caption="`${getMonthName(bulanSekarang)} ${tahunSekarang}`"
|
||||||
|
css-class="custom-table-column"
|
||||||
|
/>
|
||||||
|
<DxColumn
|
||||||
|
:width="150"
|
||||||
|
alignment="center"
|
||||||
|
data-field="persen_mom"
|
||||||
|
data-type="number"
|
||||||
|
caption="%"
|
||||||
|
css-class="custom-table-column"
|
||||||
|
/>
|
||||||
|
</DxColumn>
|
||||||
|
<DxColumn alignment="center" caption="YoY" css-class="custom-table-column">
|
||||||
|
<DxColumn
|
||||||
|
:width="150"
|
||||||
|
alignment="center"
|
||||||
|
data-field="yoy_tahun_kemarin"
|
||||||
|
data-type="number"
|
||||||
|
:caption="`s.d ${getMonthName(bulanSekarang)} ${tahunLalu}`"
|
||||||
|
css-class="custom-table-column"
|
||||||
|
/>
|
||||||
|
<DxColumn
|
||||||
|
:width="150"
|
||||||
|
alignment="center"
|
||||||
|
data-field="yoy_tahun_ini"
|
||||||
|
data-type="number"
|
||||||
|
:caption="`s.d ${getMonthName(bulanSekarang)} ${tahunSekarang}`"
|
||||||
|
css-class="custom-table-column"
|
||||||
|
/>
|
||||||
|
<DxColumn
|
||||||
|
:width="150"
|
||||||
|
alignment="center"
|
||||||
|
data-field="persen_yoy"
|
||||||
|
data-type="number"
|
||||||
|
caption="%"
|
||||||
|
css-class="custom-table-column"
|
||||||
|
/>
|
||||||
|
</DxColumn>
|
||||||
|
</DxColumn>
|
||||||
|
</DxDataGrid>
|
||||||
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script setup lang="ts">
|
<script setup lang="ts">
|
||||||
@ -44,7 +127,16 @@ import Filters from '@/components/Form/Filters.vue'
|
|||||||
import Type2 from '@/components/Form/FiltersType/Type2.vue'
|
import Type2 from '@/components/Form/FiltersType/Type2.vue'
|
||||||
import { ref } from 'vue'
|
import { ref } from 'vue'
|
||||||
import { DxDataGrid } from 'devextreme-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 { jsPDF } from 'jspdf'
|
||||||
import { exportDataGrid as exportToPdf } from 'devextreme/pdf_exporter'
|
import { exportDataGrid as exportToPdf } from 'devextreme/pdf_exporter'
|
||||||
import { exportDataGrid as exportToExcel } from 'devextreme/excel_exporter'
|
import { exportDataGrid as exportToExcel } from 'devextreme/excel_exporter'
|
||||||
@ -57,105 +149,140 @@ import { getMonthName } from '@/utils/texts'
|
|||||||
const tahunSekarang = ref(new Date().getFullYear())
|
const tahunSekarang = ref(new Date().getFullYear())
|
||||||
const bulanSekarang = ref(new Date().getMonth())
|
const bulanSekarang = ref(new Date().getMonth())
|
||||||
const tahunLalu = ref(tahunSekarang.value - 1)
|
const tahunLalu = ref(tahunSekarang.value - 1)
|
||||||
const position = { of: '#data' };
|
const position = { of: '#data' }
|
||||||
const showIndicator = ref(true);
|
const showIndicator = ref(true)
|
||||||
const shading = ref(true);
|
const shading = ref(true)
|
||||||
const showPane = ref(true);
|
const showPane = ref(true)
|
||||||
const data = ref<any[]>([])
|
const data = ref<any[]>([])
|
||||||
const dataDetail = ref<any>()
|
|
||||||
const showDetail = ref(false)
|
// const monalisaRecoveryTimeGangguan = gql`
|
||||||
|
// query DaftarmonalisaRecoveryTimeGangguan(
|
||||||
|
// $regional: regional
|
||||||
|
// $posko: Int
|
||||||
|
// $idUid: Int
|
||||||
|
// $idUp3: Int
|
||||||
|
// $bulan: Int
|
||||||
|
// $tahun: Int
|
||||||
|
// ) {
|
||||||
|
// monalisaRecoveryTimeGangguan(
|
||||||
|
// regional: $regional
|
||||||
|
// posko: $posko
|
||||||
|
// idUid: $idUid
|
||||||
|
// idUp3: $idUp3
|
||||||
|
// bulan: $bulan
|
||||||
|
// tahun: $tahun
|
||||||
|
// ) {
|
||||||
|
// jumlah_bulan
|
||||||
|
// jumlah_bulan_n_1
|
||||||
|
// jumlah_tahun
|
||||||
|
// jumlah_tahun_n_1
|
||||||
|
// nama_posko
|
||||||
|
// persen_bulan
|
||||||
|
// persen_tahun
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
// `
|
||||||
|
|
||||||
const monalisaRecoveryTimeGangguan = gql`
|
const monalisaRecoveryTimeGangguan = gql`
|
||||||
query DaftarmonalisaRecoveryTimeGangguan($regional:regional, $posko: Int, $idUid: Int, $idUp3: Int,$bulan: Int, $tahun: Int) {
|
query DaftarmonalisaRecoveryTimeGangguan(
|
||||||
|
$idUid: Int
|
||||||
|
$idUp3: Int
|
||||||
|
$idUlp: Int
|
||||||
|
$bulan: Int
|
||||||
|
$tahun: Int
|
||||||
|
) {
|
||||||
monalisaRecoveryTimeGangguan(
|
monalisaRecoveryTimeGangguan(
|
||||||
regional:$regional
|
|
||||||
posko: $posko
|
|
||||||
idUid: $idUid
|
idUid: $idUid
|
||||||
idUp3: $idUp3
|
idUp3: $idUp3
|
||||||
|
idUlp: $idUlp
|
||||||
bulan: $bulan
|
bulan: $bulan
|
||||||
tahun: $tahun
|
tahun: $tahun
|
||||||
) {
|
) {
|
||||||
jumlah_bulan
|
nama_ulp
|
||||||
jumlah_bulan_n_1
|
mom_bulan_ini
|
||||||
jumlah_tahun
|
mom_bulan_kemarin
|
||||||
jumlah_tahun_n_1
|
persen_mom
|
||||||
nama_posko
|
yoy_tahun_ini
|
||||||
persen_bulan
|
yoy_tahun_kemarin
|
||||||
persen_tahun
|
persen_yoy
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
`;
|
`
|
||||||
const { onResult, onError, loading, refetch } = useQuery(monalisaRecoveryTimeGangguan, {
|
|
||||||
regional: 0,
|
|
||||||
posko: 0,
|
|
||||||
idUid: 0,
|
|
||||||
idUp3: 0,
|
|
||||||
bulan: 10,
|
|
||||||
tahun: 2023,
|
|
||||||
})
|
|
||||||
const filterData = (params: any) => {
|
|
||||||
|
|
||||||
const { regional, posko, idUid, idUp3, bulan, tahun } = params;
|
const { onResult, onError, loading, refetch } = useQuery(monalisaRecoveryTimeGangguan, {
|
||||||
bulanSekarang.value = bulan.id;
|
// regional: 0,
|
||||||
tahunSekarang.value = tahun.id;
|
idUp3: 0,
|
||||||
tahunLalu.value = tahun.id - 1;
|
idUid: 0,
|
||||||
refetch({
|
idUlp: 0,
|
||||||
regional: regional,
|
bulan: bulanSekarang.value,
|
||||||
posko: posko ? posko.id : 0,
|
tahun: tahunSekarang.value
|
||||||
idUid: idUid ? idUid.id : 0,
|
})
|
||||||
idUp3: idUp3 ? idUp3.id : 0,
|
|
||||||
bulan: bulan ? bulan.id : 10,
|
const filterData = (params: any) => {
|
||||||
tahun: bulan ? tahun.id : 2023
|
const { regional, idUlp, idUid, idUp3, bulan, tahun } = params
|
||||||
})
|
bulanSekarang.value = bulan.id
|
||||||
onResult(queryResult => {
|
tahunSekarang.value = tahun.id
|
||||||
if (queryResult.data != undefined) {
|
tahunLalu.value = tahun.id - 1
|
||||||
queryResult.data.monalisaRecoveryTimeGangguan.forEach((item: any) => {
|
refetch({
|
||||||
data.value = [...data.value, {
|
// regional: regional,
|
||||||
...item,
|
idUid: idUid ? idUid.id : 0,
|
||||||
}];
|
idUp3: idUp3 ? idUp3.id : 0,
|
||||||
});
|
idUlp: idUlp ? idUlp.id : 0,
|
||||||
}
|
bulan: bulan ? bulan.id : bulanSekarang.value,
|
||||||
console.log(queryResult.data)
|
tahun: bulan ? tahun.id : tahunSekarang.value
|
||||||
console.log(queryResult.loading)
|
})
|
||||||
console.log(queryResult.networkStatus)
|
onResult((queryResult) => {
|
||||||
})
|
if (queryResult.data != undefined) {
|
||||||
onError((error) => {
|
queryResult.data.monalisaRecoveryTimeGangguan.forEach((item: any) => {
|
||||||
console.log(error)
|
data.value = [
|
||||||
})
|
...data.value,
|
||||||
|
{
|
||||||
|
...item
|
||||||
|
}
|
||||||
|
]
|
||||||
|
})
|
||||||
|
}
|
||||||
|
console.log(queryResult.data)
|
||||||
|
console.log(queryResult.loading)
|
||||||
|
console.log(queryResult.networkStatus)
|
||||||
|
})
|
||||||
|
onError((error) => {
|
||||||
|
console.log(error)
|
||||||
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
const onExporting = (e: any) => {
|
const onExporting = (e: any) => {
|
||||||
if (e.format === 'pdf') {
|
if (e.format === 'pdf') {
|
||||||
const doc = new jsPDF()
|
const doc = new jsPDF()
|
||||||
|
|
||||||
exportToPdf({
|
exportToPdf({
|
||||||
jsPDFDocument: doc,
|
jsPDFDocument: doc,
|
||||||
component: e.component,
|
component: e.component,
|
||||||
indent: 5,
|
indent: 5
|
||||||
}).then(() => {
|
}).then(() => {
|
||||||
doc.save(`.pdf`)
|
doc.save(`.pdf`)
|
||||||
})
|
})
|
||||||
} else {
|
} else {
|
||||||
const workbook = new Workbook()
|
const workbook = new Workbook()
|
||||||
const worksheet = workbook.addWorksheet('Employees')
|
const worksheet = workbook.addWorksheet('Employees')
|
||||||
|
|
||||||
exportToExcel({
|
exportToExcel({
|
||||||
component: e.component,
|
component: e.component,
|
||||||
worksheet,
|
worksheet,
|
||||||
autoFilterEnabled: true,
|
autoFilterEnabled: true
|
||||||
}).then(() => {
|
}).then(() => {
|
||||||
workbook.xlsx.writeBuffer().then((buffer: any) => {
|
workbook.xlsx.writeBuffer().then((buffer: any) => {
|
||||||
saveAs(new Blob([buffer], { type: 'application/octet-stream' }), 'DataGrid.xlsx')
|
saveAs(new Blob([buffer], { type: 'application/octet-stream' }), 'DataGrid.xlsx')
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
|
|
||||||
e.cancel = true
|
e.cancel = true
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
const onSelectionChanged = ({ selectedRowsData }: any) => {
|
const onSelectionChanged = ({ selectedRowsData }: any) => {
|
||||||
const data = selectedRowsData[0]
|
const data = selectedRowsData[0]
|
||||||
console.log(data)
|
console.log(data)
|
||||||
}
|
}
|
||||||
|
|
||||||
const filters = ref()
|
const filters = ref()
|
||||||
|
@ -1,42 +1,125 @@
|
|||||||
<template>
|
<template>
|
||||||
<Filters @run-search="() => filterData(filters)" class="mb-4">
|
<Filters
|
||||||
<Type2 @update:filters="(value) => filters = value" />
|
@reset-form="data = []"
|
||||||
</Filters>
|
:report-button="true"
|
||||||
<div id="data">
|
@run-search="() => filterData(filters)"
|
||||||
<DxDataGrid class="max-h-[calc(100vh-140px)]" :data-source="data" :show-column-lines="true" :show-row-lines="false"
|
class="mb-4"
|
||||||
:show-borders="true" :row-alternation-enabled="true" :hover-state-enabled="true"
|
>
|
||||||
@selection-changed="onSelectionChanged" @exporting="onExporting" :allow-column-resizing="true"
|
<Type2 @update:filters="(value) => (filters = value)" />
|
||||||
column-resizing-mode="widget" :word-wrap-enabled="true">
|
</Filters>
|
||||||
<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" />
|
|
||||||
<DxSearchPanel :visible="true" :highlight-case-sensitive="true" />
|
|
||||||
<DxExport :enabled="true" :formats="['pdf', 'xlsx', 'document']" :allow-export-selected-data="false" />
|
|
||||||
<DxColumnFixing :enabled="true" />
|
|
||||||
|
|
||||||
<DxColumn alignment="center" data-field="nama_posko" caption="Nama Unit" css-class="custom-table-column" />
|
<div id="data">
|
||||||
<DxColumn alignment="center" caption="Jumlah RPT Kali Gangguan" css-class="custom-table-column">
|
<DxDataGrid
|
||||||
<DxColumn alignment="center" caption="MoM" css-class="custom-table-column">
|
class="max-h-[calc(100vh-140px)]"
|
||||||
<DxColumn :width="150" alignment="center" data-field="jumlah_bulan" data-type="number"
|
:data-source="data"
|
||||||
:caption="`${getMonthName(bulanSekarang)} ${tahunLalu}`" css-class="custom-table-column" />
|
:show-column-lines="true"
|
||||||
<DxColumn :width="150" alignment="center" data-field="jumlah_bulan_n_1" data-type="number"
|
:show-row-lines="false"
|
||||||
:caption="`${getMonthName(bulanSekarang)} ${tahunSekarang}`" css-class="custom-table-column" />
|
:show-borders="true"
|
||||||
<DxColumn :width="150" alignment="center" data-field="persen_bulan" data-type="number" caption="%"
|
:row-alternation-enabled="true"
|
||||||
css-class="custom-table-column" />
|
:hover-state-enabled="true"
|
||||||
</DxColumn>
|
@selection-changed="onSelectionChanged"
|
||||||
<DxColumn alignment="center" caption="YoY" css-class="custom-table-column">
|
@exporting="onExporting"
|
||||||
<DxColumn :width="150" alignment="center" data-field="jumlah_tahun" data-type="number"
|
:allow-column-resizing="true"
|
||||||
:caption="`s.d ${getMonthName(bulanSekarang)} ${tahunLalu}`" css-class="custom-table-column" />
|
column-resizing-mode="widget"
|
||||||
<DxColumn :width="150" alignment="center" data-field="jumlah_tahun_n_1" data-type="number"
|
:word-wrap-enabled="true"
|
||||||
:caption="`s.d ${getMonthName(bulanSekarang)} ${tahunSekarang}`" css-class="custom-table-column" />
|
>
|
||||||
<DxColumn :width="150" alignment="center" data-field="persen_tahun" data-type="number" caption="%"
|
<DxSelection mode="single" />
|
||||||
css-class="custom-table-column" />
|
<DxPaging :enabled="false" />
|
||||||
</DxColumn>
|
<DxScrolling column-rendering-mode="virtual" mode="virtual" />
|
||||||
</DxColumn>
|
<DxLoadPanel
|
||||||
</DxDataGrid>
|
:position="position"
|
||||||
</div>
|
:show-indicator="showIndicator"
|
||||||
|
:show-pane="showPane"
|
||||||
|
:shading="shading"
|
||||||
|
v-if="loading"
|
||||||
|
v-model:visible="loading"
|
||||||
|
:enabled="true"
|
||||||
|
/>
|
||||||
|
<DxSearchPanel :visible="true" :highlight-case-sensitive="true" />
|
||||||
|
<DxExport
|
||||||
|
:enabled="true"
|
||||||
|
:formats="['pdf', 'xlsx', 'document']"
|
||||||
|
:allow-export-selected-data="false"
|
||||||
|
/>
|
||||||
|
<DxColumnFixing :enabled="true" />
|
||||||
|
|
||||||
|
<DxColumn
|
||||||
|
alignment="center"
|
||||||
|
:min-width="170"
|
||||||
|
data-type="text"
|
||||||
|
data-field="nama_ulp"
|
||||||
|
caption="Nama Unit"
|
||||||
|
css-class="custom-table-column"
|
||||||
|
:group-index="0"
|
||||||
|
/>
|
||||||
|
<DxColumn
|
||||||
|
alignment="center"
|
||||||
|
:min-width="170"
|
||||||
|
data-type="text"
|
||||||
|
data-field="nama_ulp"
|
||||||
|
caption="Nama Unit"
|
||||||
|
css-class="custom-table-column"
|
||||||
|
/>
|
||||||
|
<DxColumn
|
||||||
|
alignment="center"
|
||||||
|
caption="Jumlah RPT Kali Gangguan"
|
||||||
|
css-class="custom-table-column"
|
||||||
|
>
|
||||||
|
<DxColumn alignment="center" caption="MoM" css-class="custom-table-column">
|
||||||
|
<DxColumn
|
||||||
|
:width="150"
|
||||||
|
alignment="center"
|
||||||
|
data-field="mom_bulan_kemarin"
|
||||||
|
data-type="number"
|
||||||
|
:caption="`${getMonthName(bulanSekarang)} ${tahunLalu}`"
|
||||||
|
css-class="custom-table-column"
|
||||||
|
/>
|
||||||
|
<DxColumn
|
||||||
|
:width="150"
|
||||||
|
alignment="center"
|
||||||
|
data-field="mom_bulan_ini"
|
||||||
|
data-type="number"
|
||||||
|
:caption="`${getMonthName(bulanSekarang)} ${tahunSekarang}`"
|
||||||
|
css-class="custom-table-column"
|
||||||
|
/>
|
||||||
|
<DxColumn
|
||||||
|
:width="150"
|
||||||
|
alignment="center"
|
||||||
|
data-field="persen_mom"
|
||||||
|
data-type="number"
|
||||||
|
caption="%"
|
||||||
|
css-class="custom-table-column"
|
||||||
|
/>
|
||||||
|
</DxColumn>
|
||||||
|
<DxColumn alignment="center" caption="YoY" css-class="custom-table-column">
|
||||||
|
<DxColumn
|
||||||
|
:width="150"
|
||||||
|
alignment="center"
|
||||||
|
data-field="yoy_tahun_kemarin"
|
||||||
|
data-type="number"
|
||||||
|
:caption="`s.d ${getMonthName(bulanSekarang)} ${tahunLalu}`"
|
||||||
|
css-class="custom-table-column"
|
||||||
|
/>
|
||||||
|
<DxColumn
|
||||||
|
:width="150"
|
||||||
|
alignment="center"
|
||||||
|
data-field="yoy_tahun_ini"
|
||||||
|
data-type="number"
|
||||||
|
:caption="`s.d ${getMonthName(bulanSekarang)} ${tahunSekarang}`"
|
||||||
|
css-class="custom-table-column"
|
||||||
|
/>
|
||||||
|
<DxColumn
|
||||||
|
:width="150"
|
||||||
|
alignment="center"
|
||||||
|
data-field="persen_yoy"
|
||||||
|
data-type="number"
|
||||||
|
caption="%"
|
||||||
|
css-class="custom-table-column"
|
||||||
|
/>
|
||||||
|
</DxColumn>
|
||||||
|
</DxColumn>
|
||||||
|
</DxDataGrid>
|
||||||
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script setup lang="ts">
|
<script setup lang="ts">
|
||||||
@ -45,14 +128,14 @@ import Type2 from '@/components/Form/FiltersType/Type2.vue'
|
|||||||
import { ref } from 'vue'
|
import { ref } from 'vue'
|
||||||
import { DxDataGrid } from 'devextreme-vue'
|
import { DxDataGrid } from 'devextreme-vue'
|
||||||
import {
|
import {
|
||||||
DxColumn,
|
DxColumn,
|
||||||
DxColumnFixing,
|
DxColumnFixing,
|
||||||
DxExport,
|
DxExport,
|
||||||
DxLoadPanel,
|
DxLoadPanel,
|
||||||
DxPaging,
|
DxPaging,
|
||||||
DxScrolling,
|
DxScrolling,
|
||||||
DxSearchPanel,
|
DxSearchPanel,
|
||||||
DxSelection
|
DxSelection
|
||||||
} from 'devextreme-vue/data-grid'
|
} from 'devextreme-vue/data-grid'
|
||||||
import { jsPDF } from 'jspdf'
|
import { jsPDF } from 'jspdf'
|
||||||
import { exportDataGrid as exportToPdf } from 'devextreme/pdf_exporter'
|
import { exportDataGrid as exportToPdf } from 'devextreme/pdf_exporter'
|
||||||
@ -60,118 +143,146 @@ import { exportDataGrid as exportToExcel } from 'devextreme/excel_exporter'
|
|||||||
import { saveAs } from 'file-saver'
|
import { saveAs } from 'file-saver'
|
||||||
import { Workbook } from 'exceljs'
|
import { Workbook } from 'exceljs'
|
||||||
import gql from 'graphql-tag'
|
import gql from 'graphql-tag'
|
||||||
|
import { useQuery } from '@vue/apollo-composable'
|
||||||
|
import { getMonthName } from '@/utils/texts'
|
||||||
|
|
||||||
const tahunSekarang = ref(new Date().getFullYear())
|
const tahunSekarang = ref(new Date().getFullYear())
|
||||||
const bulanSekarang = ref(new Date().getMonth())
|
const bulanSekarang = ref(new Date().getMonth())
|
||||||
const tahunLalu = ref(tahunSekarang.value - 1)
|
const tahunLalu = ref(tahunSekarang.value - 1)
|
||||||
import { useQuery } from '@vue/apollo-composable'
|
|
||||||
import { getMonthName } from '@/utils/texts'
|
|
||||||
const position = { of: '#data' }
|
const position = { of: '#data' }
|
||||||
const showIndicator = ref(true)
|
const showIndicator = ref(true)
|
||||||
const shading = ref(true)
|
const shading = ref(true)
|
||||||
const showPane = ref(true)
|
const showPane = ref(true)
|
||||||
const data = ref<any[]>([])
|
const data = ref<any[]>([])
|
||||||
const dataDetail = ref<any>()
|
|
||||||
const showDetail = ref(false)
|
// const monalisaResponseTimeKeluhan = gql`
|
||||||
|
// query DaftarmonalisaResponseTimeKeluhan(
|
||||||
|
// $regional: String
|
||||||
|
// $posko: Int
|
||||||
|
// $idUid: Int
|
||||||
|
// $idUp3: Int
|
||||||
|
// $bulan: Int
|
||||||
|
// $tahun: Int
|
||||||
|
// ) {
|
||||||
|
// monalisaResponseTimeKeluhan(
|
||||||
|
// regional: $regional
|
||||||
|
// posko: $posko
|
||||||
|
// idUid: $idUid
|
||||||
|
// idUp3: $idUp3
|
||||||
|
// bulan: $bulan
|
||||||
|
// tahun: $tahun
|
||||||
|
// ) {
|
||||||
|
// jumlah_bulan
|
||||||
|
// jumlah_bulan_n_1
|
||||||
|
// jumlah_tahun
|
||||||
|
// jumlah_tahun_n_1
|
||||||
|
// nama_posko
|
||||||
|
// persen_bulan
|
||||||
|
// persen_tahun
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
// `
|
||||||
|
|
||||||
const monalisaResponseTimeKeluhan = gql`
|
const monalisaResponseTimeKeluhan = gql`
|
||||||
query DaftarmonalisaResponseTimeKeluhan(
|
query DaftarmonalisaResponseTimeKeluhan(
|
||||||
$regional: String
|
|
||||||
$posko: Int
|
|
||||||
$idUid: Int
|
$idUid: Int
|
||||||
$idUp3: Int
|
$idUp3: Int
|
||||||
|
$idUlp: Int
|
||||||
$bulan: Int
|
$bulan: Int
|
||||||
$tahun: Int
|
$tahun: Int
|
||||||
) {
|
) {
|
||||||
monalisaResponseTimeKeluhan(
|
monalisaResponseTimeKeluhan(
|
||||||
regional: $regional
|
|
||||||
posko: $posko
|
|
||||||
idUid: $idUid
|
idUid: $idUid
|
||||||
idUp3: $idUp3
|
idUp3: $idUp3
|
||||||
|
idUlp: $idUlp
|
||||||
bulan: $bulan
|
bulan: $bulan
|
||||||
tahun: $tahun
|
tahun: $tahun
|
||||||
) {
|
) {
|
||||||
jumlah_bulan
|
nama_ulp
|
||||||
jumlah_bulan_n_1
|
mom_bulan_ini
|
||||||
jumlah_tahun
|
mom_bulan_kemarin
|
||||||
jumlah_tahun_n_1
|
persen_mom
|
||||||
nama_posko
|
yoy_tahun_ini
|
||||||
persen_bulan
|
yoy_tahun_kemarin
|
||||||
persen_tahun
|
persen_yoy
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
`
|
`
|
||||||
|
|
||||||
const { onResult, onError, loading, refetch } = useQuery(monalisaResponseTimeKeluhan, {
|
const { onResult, onError, loading, refetch } = useQuery(monalisaResponseTimeKeluhan, {
|
||||||
bulan: 10,
|
// regional: 0,
|
||||||
tahun: 2023,
|
idUp3: 0,
|
||||||
regional: '',
|
idUid: 0,
|
||||||
posko: '',
|
idUlp: 0,
|
||||||
idUid: 0,
|
bulan: bulanSekarang.value,
|
||||||
idUp3: 0
|
tahun: tahunSekarang.value
|
||||||
})
|
})
|
||||||
|
|
||||||
const filterData = (params: any) => {
|
const filterData = (params: any) => {
|
||||||
const { regional, posko, idUid, idUp3, bulan, tahun } = params;
|
const { regional, idUlp, idUid, idUp3, bulan, tahun } = params
|
||||||
bulanSekarang.value = bulan.id;
|
bulanSekarang.value = bulan.id
|
||||||
tahunSekarang.value = tahun.id;
|
tahunSekarang.value = tahun.id
|
||||||
tahunLalu.value = tahun.id - 1;
|
tahunLalu.value = tahun.id - 1
|
||||||
refetch({
|
refetch({
|
||||||
regional: regional,
|
// regional: regional,
|
||||||
posko: posko ? posko.id : 0,
|
idUid: idUid ? idUid.id : 0,
|
||||||
idUid: idUid ? idUid.id : 0,
|
idUp3: idUp3 ? idUp3.id : 0,
|
||||||
idUp3: idUp3 ? idUp3.id : 0,
|
idUlp: idUlp ? idUlp.id : 0,
|
||||||
bulan: bulan ? bulan.id : 10,
|
bulan: bulan ? bulan.id : bulanSekarang.value,
|
||||||
tahun: bulan ? tahun.id : 2023
|
tahun: bulan ? tahun.id : tahunSekarang.value
|
||||||
})
|
})
|
||||||
onResult((queryResult) => {
|
onResult((queryResult) => {
|
||||||
if (queryResult.data != undefined) {
|
if (queryResult.data != undefined) {
|
||||||
queryResult.data.monalisaResponseTimeKeluhan.forEach((item: any) => {
|
queryResult.data.monalisaResponseTimeKeluhan.forEach((item: any) => {
|
||||||
data.value = [
|
data.value = [
|
||||||
...data.value,
|
...data.value,
|
||||||
{
|
{
|
||||||
...item
|
...item
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
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 onExporting = (e: any) => {
|
const onExporting = (e: any) => {
|
||||||
if (e.format === 'pdf') {
|
if (e.format === 'pdf') {
|
||||||
const doc = new jsPDF()
|
const doc = new jsPDF()
|
||||||
|
|
||||||
exportToPdf({
|
exportToPdf({
|
||||||
jsPDFDocument: doc,
|
jsPDFDocument: doc,
|
||||||
component: e.component,
|
component: e.component,
|
||||||
indent: 5
|
indent: 5
|
||||||
}).then(() => {
|
}).then(() => {
|
||||||
doc.save(`.pdf`)
|
doc.save(`.pdf`)
|
||||||
})
|
})
|
||||||
} else {
|
} else {
|
||||||
const workbook = new Workbook()
|
const workbook = new Workbook()
|
||||||
const worksheet = workbook.addWorksheet('Employees')
|
const worksheet = workbook.addWorksheet('Employees')
|
||||||
|
|
||||||
exportToExcel({
|
exportToExcel({
|
||||||
component: e.component,
|
component: e.component,
|
||||||
worksheet,
|
worksheet,
|
||||||
autoFilterEnabled: true
|
autoFilterEnabled: true
|
||||||
}).then(() => {
|
}).then(() => {
|
||||||
workbook.xlsx.writeBuffer().then((buffer: any) => {
|
workbook.xlsx.writeBuffer().then((buffer: any) => {
|
||||||
saveAs(new Blob([buffer], { type: 'application/octet-stream' }), 'DataGrid.xlsx')
|
saveAs(new Blob([buffer], { type: 'application/octet-stream' }), 'DataGrid.xlsx')
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
|
|
||||||
e.cancel = true
|
e.cancel = true
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
const onSelectionChanged = ({ selectedRowsData }: any) => {
|
const onSelectionChanged = ({ selectedRowsData }: any) => {
|
||||||
const data = selectedRowsData[0]
|
const data = selectedRowsData[0]
|
||||||
console.log(data)
|
console.log(data)
|
||||||
}
|
}
|
||||||
|
|
||||||
const filters = ref()
|
const filters = ref()
|
||||||
|
Loading…
x
Reference in New Issue
Block a user