Merge branch 'dev-bagus' of https://github.com/defuj/eis into dev-defuj

This commit is contained in:
Dede Fuji Abdul 2024-04-01 14:50:20 +07:00
commit f1f7ab7871
18 changed files with 155 additions and 75 deletions

View File

@ -2252,6 +2252,10 @@ body {
overflow-y: auto; overflow-y: auto;
} }
.overflow-y-hidden {
overflow-y: hidden;
}
.overflow-y-scroll { .overflow-y-scroll {
overflow-y: scroll; overflow-y: scroll;
} }

View File

@ -0,0 +1,28 @@
<template>
<div
style="background-color: rgba(0, 0, 0, 0.5)"
class="text-white flex justify-center items-center absolute z-50 w-full top-0 left-0 bottom-0 right-0"
>
<svg
class="animate-spin h-10 w-10 text-white"
xmlns="http://www.w3.org/2000/svg"
fill="none"
viewBox="0 0 24 24"
>
<circle
class="opacity-25"
cx="12"
cy="12"
r="10"
stroke="currentColor"
stroke-width="4"
></circle>
<path
class="opacity-75"
fill="currentColor"
d="M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.962 7.962 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z"
></path>
</svg>
<span class="ml-3 font-bold text-xl">Loading...</span>
</div>
</template>

View File

@ -30,7 +30,7 @@
:show-info="true" :show-info="true"
:show-navigation-buttons="true" :show-navigation-buttons="true"
/> />
<DxLoadPanel <!-- <DxLoadPanel
shading-color="rgba(0,0,0,0.4)" shading-color="rgba(0,0,0,0.4)"
:position="position" :position="position"
:show-indicator="showIndicator" :show-indicator="showIndicator"
@ -39,7 +39,7 @@
v-if="loading" v-if="loading"
v-model:visible="loading" v-model:visible="loading"
:enabled="true" :enabled="true"
/> /> -->
<DxSearchPanel :visible="true" :highlight-case-sensitive="true" /> <DxSearchPanel :visible="true" :highlight-case-sensitive="true" />
<DxExport <DxExport
:enabled="true" :enabled="true"
@ -281,6 +281,8 @@
</div> </div>
</div> </div>
</DetailDialog> </DetailDialog>
<BufferDialog v-if="loading" />
</template> </template>
<script setup lang="ts"> <script setup lang="ts">
@ -303,6 +305,7 @@ import {
import { useQuery } from '@vue/apollo-composable' import { useQuery } from '@vue/apollo-composable'
import { queries, requestGraphQl } from '@/utils/api/api.graphql' import { queries, requestGraphQl } from '@/utils/api/api.graphql'
import { exportToPDF, exportToDOCX, exportToXLSX } from '@/report/Gangguan/Daftar/DGangguan_BM' import { exportToPDF, exportToDOCX, exportToXLSX } from '@/report/Gangguan/Daftar/DGangguan_BM'
import BufferDialog from '@/components/Dialogs/BufferDialog.vue'
const position = { of: '#data' } const position = { of: '#data' }
const showIndicator = ref(true) const showIndicator = ref(true)

View File

@ -8,7 +8,6 @@
ref="dataGridRef" ref="dataGridRef"
:allow-column-reordering="true" :allow-column-reordering="true"
class="max-h-[calc(100vh-140px)] mb-10" class="max-h-[calc(100vh-140px)] mb-10"
:remote-operations="true"
:data-source="data" :data-source="data"
key-expr="no_laporan" key-expr="no_laporan"
:show-column-lines="true" :show-column-lines="true"
@ -33,7 +32,7 @@
/> />
<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 <!-- <DxLoadPanel
shading-color="rgba(0,0,0,0.4)" shading-color="rgba(0,0,0,0.4)"
:position="position" :position="position"
:show-indicator="showIndicator" :show-indicator="showIndicator"
@ -42,7 +41,7 @@
v-if="loading" v-if="loading"
v-model:visible="loading" v-model:visible="loading"
:enabled="true" :enabled="true"
/> /> -->
<DxSearchPanel :visible="true" :highlight-case-sensitive="true" /> <DxSearchPanel :visible="true" :highlight-case-sensitive="true" />
<DxExport <DxExport
:enabled="true" :enabled="true"
@ -340,6 +339,8 @@
</div> </div>
</div> </div>
</DetailDialog> </DetailDialog>
<BufferDialog v-if="loading" />
</template> </template>
<script setup lang="ts"> <script setup lang="ts">
@ -359,9 +360,9 @@ import { formatWaktu } from '@/components/Form/FiltersType/reference'
import { onMounted, ref } from 'vue' import { onMounted, ref } from 'vue'
import DetailDialog from '@/components/Dialogs/DetailDialog.vue' import DetailDialog from '@/components/Dialogs/DetailDialog.vue'
import InputText from '@/components/InputText.vue' import InputText from '@/components/InputText.vue'
import { useQuery } from '@vue/apollo-composable'
import { queries, requestGraphQl } from '@/utils/api/api.graphql' import { queries, requestGraphQl } from '@/utils/api/api.graphql'
import { exportToPDF, exportToXLSX, exportToDOCX } from '@/report/Gangguan/Daftar/DGangguan_DKPL' import { exportToPDF, exportToXLSX, exportToDOCX } from '@/report/Gangguan/Daftar/DGangguan_DKPL'
import BufferDialog from '@/components/Dialogs/BufferDialog.vue'
const position = { of: '#dataTable' } const position = { of: '#dataTable' }
const showIndicator = ref(true) const showIndicator = ref(true)
@ -556,7 +557,7 @@ const onExporting = (e: any) => {
if (e.format === 'pdf') { if (e.format === 'pdf') {
exportToPDF(reportMeta, data) exportToPDF(reportMeta, data)
} else if (e.format === 'xlsx') { } else if (e.format === 'xlsx') {
exportToXLSX(reportMeta, data, e) exportToXLSX(reportMeta, e)
} else { } else {
exportToDOCX(reportMeta, data) exportToDOCX(reportMeta, data)
} }

View File

@ -30,7 +30,7 @@
:show-info="true" :show-info="true"
:show-navigation-buttons="true" :show-navigation-buttons="true"
/> />
<DxLoadPanel <!-- <DxLoadPanel
shading-color="rgba(0,0,0,0.4)" shading-color="rgba(0,0,0,0.4)"
:position="position" :position="position"
:show-indicator="showIndicator" :show-indicator="showIndicator"
@ -39,7 +39,7 @@
v-if="loading" v-if="loading"
v-model:visible="loading" v-model:visible="loading"
:enabled="true" :enabled="true"
/> /> -->
<DxSearchPanel :visible="true" :highlight-case-sensitive="true" /> <DxSearchPanel :visible="true" :highlight-case-sensitive="true" />
<DxExport <DxExport
:enabled="true" :enabled="true"
@ -276,6 +276,8 @@
</div> </div>
</div> </div>
</DetailDialog> </DetailDialog>
<BufferDialog v-if="loading" />
</template> </template>
<script setup lang="ts"> <script setup lang="ts">
@ -298,6 +300,7 @@ import {
import { useQuery } from '@vue/apollo-composable' import { useQuery } from '@vue/apollo-composable'
import { queries, requestGraphQl } from '@/utils/api/api.graphql' import { queries, requestGraphQl } from '@/utils/api/api.graphql'
import { exportToPDF, exportToXLSX, exportToDOCX } from '@/report/Gangguan/Daftar/DGangguan_DMAPKT' import { exportToPDF, exportToXLSX, exportToDOCX } from '@/report/Gangguan/Daftar/DGangguan_DMAPKT'
import BufferDialog from '@/components/Dialogs/BufferDialog.vue'
const position = { of: '#data' } const position = { of: '#data' }
const showIndicator = ref(true) const showIndicator = ref(true)

View File

@ -30,7 +30,7 @@
:show-info="true" :show-info="true"
:show-navigation-buttons="true" :show-navigation-buttons="true"
/> />
<DxLoadPanel <!-- <DxLoadPanel
shading-color="rgba(0,0,0,0.4)" shading-color="rgba(0,0,0,0.4)"
:position="position" :position="position"
:show-indicator="showIndicator" :show-indicator="showIndicator"
@ -38,7 +38,7 @@
:shading="shading" :shading="shading"
v-model:visible.sync="loadingData" v-model:visible.sync="loadingData"
:enabled="true" :enabled="true"
/> /> -->
<DxSearchPanel :visible="true" :highlight-case-sensitive="true" /> <DxSearchPanel :visible="true" :highlight-case-sensitive="true" />
<DxExport <DxExport
:enabled="true" :enabled="true"
@ -323,7 +323,7 @@
:show-info="true" :show-info="true"
:show-navigation-buttons="true" :show-navigation-buttons="true"
/> />
<DxLoadPanel <!-- <DxLoadPanel
shading-color="rgba(0,0,0,0.4)" shading-color="rgba(0,0,0,0.4)"
:position="position" :position="position"
:show-indicator="showIndicator" :show-indicator="showIndicator"
@ -331,7 +331,7 @@
:shading="shading" :shading="shading"
v-model:visible="loadingSubData" v-model:visible="loadingSubData"
:enabled="true" :enabled="true"
/> /> -->
<DxSearchPanel :visible="true" :highlight-case-sensitive="true" /> <DxSearchPanel :visible="true" :highlight-case-sensitive="true" />
<DxExport <DxExport
:enabled="true" :enabled="true"
@ -421,13 +421,15 @@
</div> </div>
</div> </div>
</DetailDialog> </DetailDialog>
<BufferDialog v-if="loadingData || loadingSubData" />
</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 Type6 from '@/components/Form/FiltersType/Type6.vue' import Type6 from '@/components/Form/FiltersType/Type6.vue'
import { formatWaktu } from '@/components/Form/FiltersType/reference' import { formatWaktu } from '@/components/Form/FiltersType/reference'
import { onMounted, ref, watch } from 'vue' import { onMounted, ref } from 'vue'
import { DxDataGrid } from 'devextreme-vue' import { DxDataGrid } from 'devextreme-vue'
import { import {
DxColumn, DxColumn,
@ -440,12 +442,12 @@ import {
} from 'devextreme-vue/data-grid' } from 'devextreme-vue/data-grid'
import DetailDialog from '@/components/Dialogs/DetailDialog.vue' import DetailDialog from '@/components/Dialogs/DetailDialog.vue'
import InputText from '@/components/InputText.vue' import InputText from '@/components/InputText.vue'
import { useQuery } from '@vue/apollo-composable'
import { queries, requestGraphQl } from '@/utils/api/api.graphql' import { queries, requestGraphQl } from '@/utils/api/api.graphql'
import { formatNumber, isNumber } from '@/utils/numbers' import { formatNumber, isNumber } from '@/utils/numbers'
import { exportToPDF, exportToXLSX, exportToDOCX } from '@/report/Gangguan/Daftar/DGangguan_MLD1K' import { exportToPDF, exportToXLSX, exportToDOCX } from '@/report/Gangguan/Daftar/DGangguan_MLD1K'
import { apolloClient } from '@/utils/api/api.graphql' import { apolloClient } from '@/utils/api/api.graphql'
import { provideApolloClient } from '@vue/apollo-composable' import { provideApolloClient } from '@vue/apollo-composable'
import BufferDialog from '@/components/Dialogs/BufferDialog.vue'
const client = apolloClient() const client = apolloClient()
provideApolloClient(client) provideApolloClient(client)
@ -488,7 +490,7 @@ const getDetail = async () => {
const query = { const query = {
noLaporan: selected?.no_laporan ? selected?.no_laporan : '' noLaporan: selected?.no_laporan ? selected?.no_laporan : ''
} }
loadingSubData.value = false loadingSubData.value = true
await requestGraphQl(queries.gangguan.daftar.melaporLebihDariSatuKaliDetail, query) await requestGraphQl(queries.gangguan.daftar.melaporLebihDariSatuKaliDetail, query)
.then((result) => { .then((result) => {
if (result.data.data != undefined) { if (result.data.data != undefined) {
@ -503,6 +505,7 @@ const getDetail = async () => {
console.error(err) console.error(err)
}) })
.finally(() => { .finally(() => {
dialogDetail.value = true
loadingSubData.value = false loadingSubData.value = false
}) })
} }
@ -515,7 +518,6 @@ const clearSelection = () => {
const showDetail = () => { const showDetail = () => {
clearSelection() clearSelection()
dataSubSelected.value = null dataSubSelected.value = null
dialogDetail.value = true
if (detailType.value == 'table') { if (detailType.value == 'table') {
getDetail() getDetail()
} }

View File

@ -46,7 +46,7 @@
:show-info="true" :show-info="true"
:show-navigation-buttons="true" :show-navigation-buttons="true"
/> />
<DxLoadPanel <!-- <DxLoadPanel
shading-color="rgba(0,0,0,0.4)" shading-color="rgba(0,0,0,0.4)"
:position="position" :position="position"
:show-indicator="showIndicator" :show-indicator="showIndicator"
@ -55,7 +55,7 @@
v-if="loading" v-if="loading"
v-model:visible="loading" v-model:visible="loading"
:enabled="true" :enabled="true"
/> /> -->
<DxSearchPanel :visible="true" :highlight-case-sensitive="true" /> <DxSearchPanel :visible="true" :highlight-case-sensitive="true" />
<DxExport <DxExport
:enabled="true" :enabled="true"
@ -331,6 +331,8 @@
</div> </div>
</div> </div>
</DetailDialog> </DetailDialog>
<BufferDialog v-if="loading" />
</template> </template>
<script setup lang="ts"> <script setup lang="ts">
@ -357,6 +359,7 @@ import {
exportToXLSX, exportToXLSX,
exportToDOCX exportToDOCX
} from '@/report/Gangguan/Daftar/DGangguan_RecoveryTime' } from '@/report/Gangguan/Daftar/DGangguan_RecoveryTime'
import BufferDialog from '@/components/Dialogs/BufferDialog.vue'
const position = { of: '#data' } const position = { of: '#data' }
const showIndicator = ref(true) const showIndicator = ref(true)

View File

@ -30,7 +30,7 @@
:show-info="true" :show-info="true"
:show-navigation-buttons="true" :show-navigation-buttons="true"
/> />
<DxLoadPanel <!-- <DxLoadPanel
shading-color="rgba(0,0,0,0.4)" shading-color="rgba(0,0,0,0.4)"
:position="position" :position="position"
:show-indicator="showIndicator" :show-indicator="showIndicator"
@ -39,7 +39,7 @@
v-if="loading" v-if="loading"
v-model:visible="loading" v-model:visible="loading"
:enabled="true" :enabled="true"
/> /> -->
<DxSearchPanel :visible="true" :highlight-case-sensitive="true" /> <DxSearchPanel :visible="true" :highlight-case-sensitive="true" />
<DxExport <DxExport
:enabled="true" :enabled="true"
@ -308,6 +308,8 @@
</div> </div>
</div> </div>
</DetailDialog> </DetailDialog>
<BufferDialog v-if="loading" />
</template> </template>
<script setup lang="ts"> <script setup lang="ts">
@ -334,6 +336,7 @@ import {
exportToXLSX, exportToXLSX,
exportToDOCX exportToDOCX
} from '@/report/Gangguan/Daftar/DGangguan_ResponseTime' } from '@/report/Gangguan/Daftar/DGangguan_ResponseTime'
import BufferDialog from '@/components/Dialogs/BufferDialog.vue'
const position = { of: '#data' } const position = { of: '#data' }
const showIndicator = ref(true) const showIndicator = ref(true)

View File

@ -30,7 +30,7 @@
:show-info="true" :show-info="true"
:show-navigation-buttons="true" :show-navigation-buttons="true"
/> />
<DxLoadPanel <!-- <DxLoadPanel
shading-color="rgba(0,0,0,0.4)" shading-color="rgba(0,0,0,0.4)"
:position="position" :position="position"
:show-indicator="showIndicator" :show-indicator="showIndicator"
@ -39,7 +39,7 @@
v-if="loading" v-if="loading"
v-model:visible="loading" v-model:visible="loading"
:enabled="true" :enabled="true"
/> /> -->
<DxSearchPanel :visible="true" :highlight-case-sensitive="true" /> <DxSearchPanel :visible="true" :highlight-case-sensitive="true" />
<DxExport <DxExport
:enabled="true" :enabled="true"
@ -280,6 +280,8 @@
</div> </div>
</div> </div>
</DetailDialog> </DetailDialog>
<BufferDialog v-if="loading" />
</template> </template>
<script setup lang="ts"> <script setup lang="ts">
@ -302,6 +304,7 @@ import {
import { useQuery } from '@vue/apollo-composable' import { useQuery } from '@vue/apollo-composable'
import { queries, requestGraphQl } from '@/utils/api/api.graphql' import { queries, requestGraphQl } from '@/utils/api/api.graphql'
import { exportToPDF, exportToDOCX, exportToXLSX } from '@/report/Gangguan/Daftar/DGangguan_STIDP' import { exportToPDF, exportToDOCX, exportToXLSX } from '@/report/Gangguan/Daftar/DGangguan_STIDP'
import BufferDialog from '@/components/Dialogs/BufferDialog.vue'
const position = { of: '#data' } const position = { of: '#data' }
const showIndicator = ref(true) const showIndicator = ref(true)

View File

@ -1,19 +1,21 @@
<template> <template>
<main <main
class="flex flex-col justify-between flex-1 px-4 overflow-y-auto bg-white lg:mr-3 sm:px-3 lg:px-6 rounded-t-2xl lg:rounded-t-3xl no-scroll-bar" class="bg-white overflow-hidden flex flex-col justify-between flex-1 rounded-t-2xl lg:rounded-t-3xl relative"
> >
<div v-if="route.path !== '/home'" class="mt-4 lg:mt-6 max-w-7xl"> <div class="overflow-y-auto no-scroll-bar px-4 lg:mr-3 sm:px-3 lg:px-6 w-full">
<h1 class="text-lg font-semibold md:text-xl text-dark">{{ pageTitle }}</h1> <div v-if="route.path !== '/home'" class="mt-4 lg:mt-6 max-w-7xl">
</div> <h1 class="text-lg font-semibold md:text-xl text-dark">{{ pageTitle }}</h1>
<div class="flex-1 mt-2 sm:mt-4 dx-viewport"> </div>
<slot></slot> <div class="flex-1 mt-2 sm:mt-4 dx-viewport">
<slot></slot>
</div>
</div> </div>
</main> </main>
</template> </template>
<script setup lang="ts"> <script setup lang="ts">
import { computed } from 'vue'; import { computed } from 'vue'
import { useRoute } from 'vue-router'; import { useRoute } from 'vue-router'
// Dapatkan objek route dari vue-router // Dapatkan objek route dari vue-router
const route = useRoute() const route = useRoute()

View File

@ -269,7 +269,10 @@ const exportToXLSX = (reportMeta: any, data: any, e: any) => {
component: e.component, component: e.component,
worksheet, worksheet,
autoFilterEnabled: true, autoFilterEnabled: true,
topLeftCell: { row: 10, column: 1 } topLeftCell: { row: 10, column: 1 },
loadPanel: {
enabled: false
}
}).then(() => { }).then(() => {
workbook.xlsx.writeBuffer().then((buffer: any) => { workbook.xlsx.writeBuffer().then((buffer: any) => {
saveAs(new Blob([buffer], { type: 'application/octet-stream' }), `Laporan ${reportName}.xlsx`) saveAs(new Blob([buffer], { type: 'application/octet-stream' }), `Laporan ${reportName}.xlsx`)

View File

@ -20,6 +20,8 @@ import { formatWaktu } from '@/components/Form/FiltersType/reference'
import { setHeaderStyle } from '@/report/utils/xlsx' import { setHeaderStyle } from '@/report/utils/xlsx'
const reportName = 'Daftar Gangguan Dialihkan Ke Posko Lain' const reportName = 'Daftar Gangguan Dialihkan Ke Posko Lain'
const fontSize = 4
const docxFontSize = 6
const formatMetaData = (reportMeta: any) => { const formatMetaData = (reportMeta: any) => {
const periode = reportMeta.value.periode ? reportMeta.value.periode.split(' s/d ') : '' const periode = reportMeta.value.periode ? reportMeta.value.periode.split(' s/d ') : ''
@ -56,7 +58,7 @@ const exportToPDF = (reportMeta: any, data: any) => {
head: [ head: [
['PT. PLN(Persero)', '', ''], ['PT. PLN(Persero)', '', ''],
[ [
{ content: 'UNIT INDUK', styles: { cellWidth: 25 } }, { content: 'UNIT INDUK', styles: { cellWidth: 35 } },
{ content: ':', styles: { cellWidth: 1 } }, { content: ':', styles: { cellWidth: 1 } },
reportMeta.value.uid reportMeta.value.uid
? reportMeta.value.uid.name.toUpperCase() ? reportMeta.value.uid.name.toUpperCase()
@ -78,7 +80,7 @@ const exportToPDF = (reportMeta: any, data: any) => {
] ]
], ],
styles: { styles: {
fontSize: 3, fontSize,
cellPadding: 0.1, cellPadding: 0.1,
textColor: [0, 0, 0], textColor: [0, 0, 0],
fontStyle: 'bold' fontStyle: 'bold'
@ -93,14 +95,14 @@ const exportToPDF = (reportMeta: any, data: any) => {
[`PERIODE TANGGAL : ${meta.dateFromFormat} SD TGL ${meta.dateToFormat}`] [`PERIODE TANGGAL : ${meta.dateFromFormat} SD TGL ${meta.dateToFormat}`]
], ],
styles: { styles: {
fontSize: 3, fontSize,
cellPadding: 0.1, cellPadding: 0.1,
textColor: [0, 0, 0], textColor: [0, 0, 0],
fontStyle: 'bold', fontStyle: 'bold',
halign: 'center' halign: 'center'
}, },
theme: 'plain', theme: 'plain',
startY: 18 startY: 25
}) })
autoTable(doc, { autoTable(doc, {
@ -149,7 +151,7 @@ const exportToPDF = (reportMeta: any, data: any) => {
item.posko item.posko
]), ]),
styles: { styles: {
fontSize: 3, fontSize,
cellPadding: 1, cellPadding: 1,
lineColor: [0, 0, 0], lineColor: [0, 0, 0],
lineWidth: 0.1, lineWidth: 0.1,
@ -173,7 +175,7 @@ const exportToPDF = (reportMeta: any, data: any) => {
}) })
} }
}, },
startY: 23 startY: 35
}) })
autoTable(doc, { autoTable(doc, {
@ -187,7 +189,7 @@ const exportToPDF = (reportMeta: any, data: any) => {
] ]
], ],
styles: { styles: {
fontSize: 3, fontSize,
cellPadding: 0.1, cellPadding: 0.1,
textColor: [0, 0, 0], textColor: [0, 0, 0],
fontStyle: 'bold', fontStyle: 'bold',
@ -203,7 +205,7 @@ const exportToPDF = (reportMeta: any, data: any) => {
}) })
} }
const exportToXLSX = (reportMeta: any, data: any, e: any) => { const exportToXLSX = (reportMeta: any, e: any) => {
const meta = formatMetaData(reportMeta) const meta = formatMetaData(reportMeta)
const workbook = new Workbook() const workbook = new Workbook()
const worksheet = workbook.addWorksheet(`${reportName}`) const worksheet = workbook.addWorksheet(`${reportName}`)
@ -240,27 +242,30 @@ const exportToXLSX = (reportMeta: any, data: any, e: any) => {
}` }`
) )
setHeaderStyle(worksheet, 7, 8, `${reportName}`.toUpperCase(), true) setHeaderStyle(worksheet, 6, 1, `${reportName}`.toUpperCase(), true)
setHeaderStyle( setHeaderStyle(
worksheet, worksheet,
8, 7,
8, 1,
`PERIODE TANGGAL : ${meta.dateFromFormat} SD TGL ${meta.dateToFormat}`, `PERIODE TANGGAL : ${meta.dateFromFormat} SD TGL ${meta.dateToFormat}`,
true true
) )
worksheet.mergeCells('A1:F1') worksheet.mergeCells('A1:S1')
worksheet.mergeCells('A2:F2') worksheet.mergeCells('A2:S2')
worksheet.mergeCells('A3:F3') worksheet.mergeCells('A3:S3')
worksheet.mergeCells('A4:F4') worksheet.mergeCells('A4:S4')
worksheet.mergeCells('H7:I7') worksheet.mergeCells('A6:S6')
worksheet.mergeCells('H8:I8') worksheet.mergeCells('A7:S7')
exportToExcel({ exportToExcel({
component: e.component, component: e.component,
worksheet, worksheet,
autoFilterEnabled: true, autoFilterEnabled: true,
topLeftCell: { row: 10, column: 1 } topLeftCell: { row: 10, column: 1 },
loadPanel: {
enabled: false
}
}).then(() => { }).then(() => {
workbook.xlsx.writeBuffer().then((buffer: any) => { workbook.xlsx.writeBuffer().then((buffer: any) => {
saveAs(new Blob([buffer], { type: 'application/octet-stream' }), `Laporan ${reportName}.xlsx`) saveAs(new Blob([buffer], { type: 'application/octet-stream' }), `Laporan ${reportName}.xlsx`)
@ -314,7 +319,7 @@ const exportToDOCX = (reportMeta: any, data: any) => {
children: [ children: [
new TextRun({ new TextRun({
text: cell.text, text: cell.text,
size: 5 size: docxFontSize
}) })
] ]
}) })
@ -343,7 +348,7 @@ const exportToDOCX = (reportMeta: any, data: any) => {
new TextRun({ new TextRun({
text: 'PT. PLN(Persero)', text: 'PT. PLN(Persero)',
bold: true, bold: true,
size: 5 size: docxFontSize
}) })
] ]
}), }),
@ -356,7 +361,7 @@ const exportToDOCX = (reportMeta: any, data: any) => {
: 'Semua Unit Induk Distribusi/Wilayah'.toUpperCase() : 'Semua Unit Induk Distribusi/Wilayah'.toUpperCase()
}`, }`,
bold: true, bold: true,
size: 5 size: docxFontSize
}) })
] ]
}), }),
@ -369,7 +374,7 @@ const exportToDOCX = (reportMeta: any, data: any) => {
: 'Semua Unit Pelaksanaan Pelayanan Pelanggan'.toUpperCase() : 'Semua Unit Pelaksanaan Pelayanan Pelanggan'.toUpperCase()
}`, }`,
bold: true, bold: true,
size: 5 size: docxFontSize
}) })
] ]
}), }),
@ -382,7 +387,7 @@ const exportToDOCX = (reportMeta: any, data: any) => {
: 'Semua Posko'.toUpperCase() : 'Semua Posko'.toUpperCase()
}`, }`,
bold: true, bold: true,
size: 5 size: docxFontSize
}) })
] ]
}), }),
@ -391,7 +396,7 @@ const exportToDOCX = (reportMeta: any, data: any) => {
new TextRun({ new TextRun({
text: '', text: '',
bold: true, bold: true,
size: 5 size: docxFontSize
}) })
] ]
}), }),
@ -401,7 +406,7 @@ const exportToDOCX = (reportMeta: any, data: any) => {
new TextRun({ new TextRun({
text: `${reportName}`.toUpperCase(), text: `${reportName}`.toUpperCase(),
bold: true, bold: true,
size: 5 size: docxFontSize
}) })
] ]
}), }),
@ -411,7 +416,7 @@ const exportToDOCX = (reportMeta: any, data: any) => {
new TextRun({ new TextRun({
text: `PERIODE TANGGAL : ${meta.dateFromFormat} SD TGL ${meta.dateToFormat}`, text: `PERIODE TANGGAL : ${meta.dateFromFormat} SD TGL ${meta.dateToFormat}`,
bold: true, bold: true,
size: 5 size: docxFontSize
}) })
] ]
}), }),
@ -420,7 +425,7 @@ const exportToDOCX = (reportMeta: any, data: any) => {
new TextRun({ new TextRun({
text: '', text: '',
bold: true, bold: true,
size: 5 size: docxFontSize
}) })
] ]
}), }),
@ -461,7 +466,7 @@ const exportToDOCX = (reportMeta: any, data: any) => {
new TextRun({ new TextRun({
text: header.text, text: header.text,
bold: true, bold: true,
size: 5, size: docxFontSize,
allCaps: true allCaps: true
}) })
] ]
@ -479,7 +484,7 @@ const exportToDOCX = (reportMeta: any, data: any) => {
new TextRun({ new TextRun({
text: '', text: '',
bold: true, bold: true,
size: 5 size: docxFontSize
}) })
] ]
}), }),
@ -489,7 +494,7 @@ const exportToDOCX = (reportMeta: any, data: any) => {
new TextRun({ new TextRun({
text: `${meta.dayTo}, ${meta.dateToFormat}`, text: `${meta.dayTo}, ${meta.dateToFormat}`,
bold: true, bold: true,
size: 5 size: docxFontSize
}) })
] ]
}), }),
@ -498,7 +503,7 @@ const exportToDOCX = (reportMeta: any, data: any) => {
new TextRun({ new TextRun({
text: '', text: '',
bold: true, bold: true,
size: 5 size: docxFontSize
}) })
] ]
}), }),
@ -508,7 +513,7 @@ const exportToDOCX = (reportMeta: any, data: any) => {
new TextRun({ new TextRun({
text: '(.........................................)', text: '(.........................................)',
bold: true, bold: true,
size: 5 size: docxFontSize
}) })
] ]
}) })

View File

@ -252,7 +252,10 @@ const exportToXLSX = (reportMeta: any, data: any, e: any) => {
component: e.component, component: e.component,
worksheet, worksheet,
autoFilterEnabled: true, autoFilterEnabled: true,
topLeftCell: { row: 10, column: 1 } topLeftCell: { row: 10, column: 1 },
loadPanel: {
enabled: false
}
}).then(() => { }).then(() => {
workbook.xlsx.writeBuffer().then((buffer: any) => { workbook.xlsx.writeBuffer().then((buffer: any) => {
saveAs(new Blob([buffer], { type: 'application/octet-stream' }), `Laporan ${reportName}.xlsx`) saveAs(new Blob([buffer], { type: 'application/octet-stream' }), `Laporan ${reportName}.xlsx`)

View File

@ -261,7 +261,10 @@ const exportToXLSX = (reportMeta: any, data: any, e: any) => {
component: e.component, component: e.component,
worksheet, worksheet,
autoFilterEnabled: true, autoFilterEnabled: true,
topLeftCell: { row: 11, column: 1 } topLeftCell: { row: 11, column: 1 },
loadPanel: {
enabled: false
}
}).then(() => { }).then(() => {
workbook.xlsx.writeBuffer().then((buffer: any) => { workbook.xlsx.writeBuffer().then((buffer: any) => {
saveAs(new Blob([buffer], { type: 'application/octet-stream' }), `Laporan ${reportName}.xlsx`) saveAs(new Blob([buffer], { type: 'application/octet-stream' }), `Laporan ${reportName}.xlsx`)

View File

@ -282,7 +282,10 @@ const exportToXLSX = (reportMeta: any, data: any, e: any) => {
component: e.component, component: e.component,
worksheet, worksheet,
autoFilterEnabled: true, autoFilterEnabled: true,
topLeftCell: { row: 11, column: 1 } topLeftCell: { row: 11, column: 1 },
loadPanel: {
enabled: false
}
}).then(() => { }).then(() => {
workbook.xlsx.writeBuffer().then((buffer: any) => { workbook.xlsx.writeBuffer().then((buffer: any) => {
saveAs(new Blob([buffer], { type: 'application/octet-stream' }), `Laporan ${reportName}.xlsx`) saveAs(new Blob([buffer], { type: 'application/octet-stream' }), `Laporan ${reportName}.xlsx`)

View File

@ -282,7 +282,10 @@ const exportToXLSX = (reportMeta: any, data: any, e: any) => {
component: e.component, component: e.component,
worksheet, worksheet,
autoFilterEnabled: true, autoFilterEnabled: true,
topLeftCell: { row: 11, column: 1 } topLeftCell: { row: 11, column: 1 },
loadPanel: {
enabled: false
}
}).then(() => { }).then(() => {
workbook.xlsx.writeBuffer().then((buffer: any) => { workbook.xlsx.writeBuffer().then((buffer: any) => {
saveAs(new Blob([buffer], { type: 'application/octet-stream' }), `Laporan ${reportName}.xlsx`) saveAs(new Blob([buffer], { type: 'application/octet-stream' }), `Laporan ${reportName}.xlsx`)

View File

@ -252,7 +252,10 @@ const exportToXLSX = (reportMeta: any, data: any, e: any) => {
component: e.component, component: e.component,
worksheet, worksheet,
autoFilterEnabled: true, autoFilterEnabled: true,
topLeftCell: { row: 10, column: 1 } topLeftCell: { row: 10, column: 1 },
loadPanel: {
enabled: false
}
}).then(() => { }).then(() => {
workbook.xlsx.writeBuffer().then((buffer: any) => { workbook.xlsx.writeBuffer().then((buffer: any) => {
saveAs(new Blob([buffer], { type: 'application/octet-stream' }), `Laporan ${reportName}.xlsx`) saveAs(new Blob([buffer], { type: 'application/octet-stream' }), `Laporan ${reportName}.xlsx`)

View File

@ -1,15 +1,20 @@
<script setup lang="ts"> <script setup lang="ts">
import MenuProvider from '@/components/Pages/MenuProvider.vue'; import MenuProvider from '@/components/Pages/MenuProvider.vue'
import Navigation from '@/components/Navigation/Navigation.vue'; import Navigation from '@/components/Navigation/Navigation.vue'
import { useMenuStore } from '@/stores/menu'; import { useMenuStore } from '@/stores/menu'
import { RouterView } from 'vue-router'; import { RouterView } from 'vue-router'
const menu = useMenuStore() const menu = useMenuStore()
</script> </script>
<template> <template>
<Navigation /> <Navigation />
<div <div
:class="['flex flex-col flex-1 h-[calc(100%-64px)] overflow-hidden bg-primary-50', 'transition-transform', menu.sidebarShowed ? 'transform duration-300 lg:pl-80' : 'transform duration-300 md:pl-4']"> :class="[
'flex flex-col flex-1 h-[calc(100%-64px)] overflow-hidden bg-primary-50',
'transition-transform',
menu.sidebarShowed ? 'transform duration-300 lg:pl-80' : 'transform duration-300 md:pl-4'
]"
>
<MenuProvider> <MenuProvider>
<RouterView /> <RouterView />
</MenuProvider> </MenuProvider>