update empty page
This commit is contained in:
parent
7af900bee1
commit
c11d286a7e
@ -1352,6 +1352,10 @@ select {
|
|||||||
width: 1px;
|
width: 1px;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.w-16 {
|
||||||
|
width: 4rem;
|
||||||
|
}
|
||||||
|
|
||||||
.max-w-2xl {
|
.max-w-2xl {
|
||||||
max-width: 42rem;
|
max-width: 42rem;
|
||||||
}
|
}
|
||||||
@ -1918,6 +1922,10 @@ select {
|
|||||||
fill: #fff;
|
fill: #fff;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.fill-primary-300 {
|
||||||
|
fill: #689daa;
|
||||||
|
}
|
||||||
|
|
||||||
.stroke-white {
|
.stroke-white {
|
||||||
stroke: #fff;
|
stroke: #fff;
|
||||||
}
|
}
|
||||||
|
@ -1,14 +1,96 @@
|
|||||||
<template>
|
<template>
|
||||||
<div>
|
<div class="flex flex-col items-center justify-center w-full min-h-full">
|
||||||
|
<component :is="icon" class="w-16 h-16 mb-3 fill-primary-300" />
|
||||||
|
<dt class="text-lg font-medium text-center text-gray-800">
|
||||||
|
{{ title }}
|
||||||
|
</dt>
|
||||||
|
<dd class="text-sm text-center text-gray-800">
|
||||||
|
{{ desc }}
|
||||||
|
</dd>
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script setup lang="ts">
|
<script setup lang="ts">
|
||||||
defineProps({
|
import { computed } from 'vue'
|
||||||
|
import {
|
||||||
|
IconFilter,
|
||||||
|
IconFileX,
|
||||||
|
IconNetworkDisconnected,
|
||||||
|
IconNetworkChange,
|
||||||
|
IconLinkBreak,
|
||||||
|
IconLockKey,
|
||||||
|
IconDatabase,
|
||||||
|
IconSmileySad
|
||||||
|
} from '@/utils/icons'
|
||||||
|
|
||||||
|
const props = defineProps({
|
||||||
type: {
|
type: {
|
||||||
type: String as () => "no_filter" | "not_found" | "disconnect" | "connection_change" | "error_404" | "error_403" | "error_500",
|
type: String as () => "no_filter" | "not_found" | "disconnect" | "connection_change" | "error_404" | "error_403" | "error_500",
|
||||||
default: 'not_found',
|
default: 'error_404',
|
||||||
|
required: true
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
|
const title = computed(() => {
|
||||||
|
switch (props.type) {
|
||||||
|
case 'no_filter':
|
||||||
|
return 'Pilih Filter'
|
||||||
|
case 'not_found':
|
||||||
|
return 'Tidak ditemukan'
|
||||||
|
case 'disconnect':
|
||||||
|
return 'Koneksi Terputus'
|
||||||
|
case 'connection_change':
|
||||||
|
return 'Perubahan Koneksi'
|
||||||
|
case 'error_404':
|
||||||
|
return 'Error 404'
|
||||||
|
case 'error_403':
|
||||||
|
return 'Error 403'
|
||||||
|
case 'error_500':
|
||||||
|
return 'Error 500'
|
||||||
|
default:
|
||||||
|
return 'Tidak ditemukan'
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
|
const desc = computed(() => {
|
||||||
|
switch (props.type) {
|
||||||
|
case 'no_filter':
|
||||||
|
return 'Silahkan terapkan filter di atas untuk mulai menampilkan data'
|
||||||
|
case 'not_found':
|
||||||
|
return 'Data yang kamu cari tidak ditemukan'
|
||||||
|
case 'disconnect':
|
||||||
|
return 'Harap hubungkan perangkat ke jaringan internet'
|
||||||
|
case 'connection_change':
|
||||||
|
return 'Terjadinya perubahan koneksi, harap muat ulang halaman'
|
||||||
|
case 'error_404':
|
||||||
|
return 'Halaman yang kamu tuju tidak ditemukan'
|
||||||
|
case 'error_403':
|
||||||
|
return 'Kamu tidak punya akses ke halaman ini'
|
||||||
|
case 'error_500':
|
||||||
|
return 'Terjadi kesalahan, silahkan coba beberapa saat lagi'
|
||||||
|
default:
|
||||||
|
return 'Terjadi kesalahan, silahkan coba beberapa saat lagi'
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
|
const icon = computed(() => {
|
||||||
|
switch (props.type) {
|
||||||
|
case 'no_filter':
|
||||||
|
return IconFilter
|
||||||
|
case 'not_found':
|
||||||
|
return IconFileX
|
||||||
|
case 'disconnect':
|
||||||
|
return IconNetworkDisconnected
|
||||||
|
case 'connection_change':
|
||||||
|
return IconNetworkChange
|
||||||
|
case 'error_404':
|
||||||
|
return IconLinkBreak
|
||||||
|
case 'error_403':
|
||||||
|
return IconLockKey
|
||||||
|
case 'error_500':
|
||||||
|
return IconDatabase
|
||||||
|
default:
|
||||||
|
return IconSmileySad
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
</script>
|
</script>
|
@ -1,5 +1,6 @@
|
|||||||
<template>
|
<template>
|
||||||
<div>
|
<EmptyPage />
|
||||||
|
<!-- <div>
|
||||||
<DxDataGrid class="max-h-[calc(100vh-140px)]" :data-source="data" key-expr="no_laporan" :show-column-lines="true"
|
<DxDataGrid class="max-h-[calc(100vh-140px)]" :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"
|
:show-row-lines="false" :show-borders="true" :row-alternation-enabled="true" :hover-state-enabled="true"
|
||||||
@selection-changed="onSelectionChanged" :column-width="100" @exporting="onExporting"
|
@selection-changed="onSelectionChanged" :column-width="100" @exporting="onExporting"
|
||||||
@ -29,7 +30,7 @@
|
|||||||
<DxColumn :width="170" alignment="center" data-field="posko" caption="Posko" />
|
<DxColumn :width="170" alignment="center" data-field="posko" caption="Posko" />
|
||||||
|
|
||||||
</DxDataGrid>
|
</DxDataGrid>
|
||||||
</div>
|
</div> -->
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script setup lang="ts">
|
<script setup lang="ts">
|
||||||
@ -42,6 +43,7 @@ import { exportDataGrid as exportToExcel } from 'devextreme/excel_exporter'
|
|||||||
import type { Data2 } from '@/types/gangguan'
|
import type { Data2 } from '@/types/gangguan'
|
||||||
import { saveAs } from 'file-saver'
|
import { saveAs } from 'file-saver'
|
||||||
import { Workbook } from 'exceljs'
|
import { Workbook } from 'exceljs'
|
||||||
|
import EmptyPage from '@/components/Pages/EmptyPage.vue'
|
||||||
|
|
||||||
const data = ref<Data2[]>([])
|
const data = ref<Data2[]>([])
|
||||||
|
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
<template>
|
<template>
|
||||||
<div>
|
<!-- <div>
|
||||||
<DxDataGrid class="max-h-[calc(100vh-140px)]" :data-source="data" key-expr="no_laporan" :show-column-lines="true"
|
<DxDataGrid class="max-h-[calc(100vh-140px)]" :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"
|
:show-row-lines="false" :show-borders="true" :row-alternation-enabled="true" :hover-state-enabled="true"
|
||||||
@selection-changed="onSelectionChanged" :column-width="100" @exporting="onExporting"
|
@selection-changed="onSelectionChanged" :column-width="100" @exporting="onExporting"
|
||||||
@ -28,7 +28,8 @@
|
|||||||
<DxColumn :width="170" alignment="center" data-field="posko" caption="Posko" />
|
<DxColumn :width="170" alignment="center" data-field="posko" caption="Posko" />
|
||||||
|
|
||||||
</DxDataGrid>
|
</DxDataGrid>
|
||||||
</div>
|
</div> -->
|
||||||
|
<EmptyPage />
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script setup lang="ts">
|
<script setup lang="ts">
|
||||||
@ -41,6 +42,7 @@ import { exportDataGrid as exportToExcel } from 'devextreme/excel_exporter'
|
|||||||
import type { Data3 } from '@/types/gangguan'
|
import type { Data3 } from '@/types/gangguan'
|
||||||
import { saveAs } from 'file-saver'
|
import { saveAs } from 'file-saver'
|
||||||
import { Workbook } from 'exceljs'
|
import { Workbook } from 'exceljs'
|
||||||
|
import EmptyPage from '@/components/Pages/EmptyPage.vue'
|
||||||
|
|
||||||
const data = ref<Data3[]>([])
|
const data = ref<Data3[]>([])
|
||||||
|
|
||||||
|
@ -1,13 +1,14 @@
|
|||||||
<template>
|
<template>
|
||||||
<main class="flex-1 px-4 overflow-y-auto bg-white md:mr-3 sm:px-3 md:px-6 rounded-t-2xl md:rounded-t-3xl no-scroll-bar">
|
<main
|
||||||
|
class="flex flex-col justify-between flex-1 px-4 overflow-y-auto bg-white md:mr-3 sm:px-3 md:px-6 rounded-t-2xl md:rounded-t-3xl no-scroll-bar">
|
||||||
<div v-if="route.path !== '/home'" class="mt-4 lg:mt-6 max-w-7xl">
|
<div v-if="route.path !== '/home'" class="mt-4 lg:mt-6 max-w-7xl">
|
||||||
<h1 class="text-xl font-medium md:text-3xl text-dark">{{ pageMetaData[0] }}</h1>
|
<h1 class="text-xl font-medium md:text-3xl text-dark">{{ pageMetaData[0] }}</h1>
|
||||||
</div>
|
</div>
|
||||||
<div class="mt-2 sm:mt-4 dx-viewport">
|
<div class="flex-1 mt-2 sm:mt-4 dx-viewport">
|
||||||
<Filters :report-button="typeof pageMetaData[2] !== 'undefined'" class="mb-4" v-if="pageMetaData.length > 1">
|
<Filters :report-button="typeof pageMetaData[2] !== 'undefined'" class="mb-4" v-if="pageMetaData.length > 1">
|
||||||
<Type1 v-if="pageMetaData[1] == 'type-1'" />
|
<Type1 v-if="pageMetaData[1] == 'type-1'" />
|
||||||
</Filters>
|
</Filters>
|
||||||
|
|
||||||
<slot></slot>
|
<slot></slot>
|
||||||
</div>
|
</div>
|
||||||
</main>
|
</main>
|
||||||
|
@ -12,3 +12,11 @@ export { default as IconBox } from '@/components/icons/IconBox.vue'
|
|||||||
export { default as IconFileSearch } from '@/components/icons/IconFileSearch.vue'
|
export { default as IconFileSearch } from '@/components/icons/IconFileSearch.vue'
|
||||||
export { default as IconWallet } from '@/components/icons/IconWallet.vue'
|
export { default as IconWallet } from '@/components/icons/IconWallet.vue'
|
||||||
export { default as IconBars3 } from '@/components/icons/IconBars3.vue'
|
export { default as IconBars3 } from '@/components/icons/IconBars3.vue'
|
||||||
|
export { default as IconFilter } from '@/components/icons/IconFilter.vue'
|
||||||
|
export { default as IconFileX } from '@/components/icons/IconFileX.vue'
|
||||||
|
export { default as IconNetworkDisconnected } from '@/components/icons/IconNetworkDisconnected.vue'
|
||||||
|
export { default as IconNetworkChange } from '@/components/icons/IconNetworkChange.vue'
|
||||||
|
export { default as IconLinkBreak } from '@/components/icons/IconLinkBreak.vue'
|
||||||
|
export { default as IconLockKey } from '@/components/icons/IconLockKey.vue'
|
||||||
|
export { default as IconDatabase } from '@/components/icons/IconDatabase.vue'
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user