Merge branch 'dev-bagus' of https://github.com/defuj/eis into dev-defuj
This commit is contained in:
commit
f1f7ab7871
@ -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;
|
||||||
}
|
}
|
||||||
|
28
src/components/Dialogs/BufferDialog.vue
Normal file
28
src/components/Dialogs/BufferDialog.vue
Normal 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>
|
@ -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)
|
||||||
|
@ -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)
|
||||||
}
|
}
|
||||||
|
@ -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)
|
||||||
|
@ -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()
|
||||||
}
|
}
|
||||||
|
@ -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)
|
||||||
|
@ -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)
|
||||||
|
@ -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)
|
||||||
|
@ -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()
|
||||||
|
@ -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`)
|
||||||
|
@ -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
|
||||||
})
|
})
|
||||||
]
|
]
|
||||||
})
|
})
|
||||||
|
@ -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`)
|
||||||
|
@ -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`)
|
||||||
|
@ -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`)
|
||||||
|
@ -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`)
|
||||||
|
@ -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`)
|
||||||
|
@ -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>
|
||||||
|
Loading…
x
Reference in New Issue
Block a user