feat(shell): add app shell and maintenance page driver
Introduce reusable shell components for layout, tabs, and global overlays. Add maintenance page model, wrapper component, and composable driver to standardize maintenance page state, search, and pagination handling.feat(shell): add app shell and maintenance page driver Introduce reusable shell components for layout, tabs, and global overlays. Add maintenance page model, wrapper component, and composable driver to standardize maintenance page state, search, and pagination handling.
This commit is contained in:
@@ -0,0 +1,34 @@
|
||||
<script setup lang="ts">
|
||||
import PageMaint from '@/components/PageMaint.vue'
|
||||
import type { MaintenancePageModel } from '@/models/page'
|
||||
|
||||
defineProps<{
|
||||
page: MaintenancePageModel
|
||||
}>()
|
||||
|
||||
const emit = defineEmits<{
|
||||
(e: 'create'): void
|
||||
(e: 'edit', record: unknown): void
|
||||
(e: 'view', record: unknown): void
|
||||
(e: 'delete', record: unknown): void
|
||||
(e: 'search', criteria: Record<string, unknown>): void
|
||||
}>()
|
||||
|
||||
const searchPanelOpen = defineModel<boolean>('searchPanelOpen', { default: false })
|
||||
</script>
|
||||
|
||||
<template>
|
||||
<PageMaint
|
||||
:title="page.title"
|
||||
:search-panel-open="searchPanelOpen"
|
||||
@toggle-search="searchPanelOpen = !searchPanelOpen"
|
||||
@create="emit('create')"
|
||||
>
|
||||
<template #search-fields>
|
||||
<slot name="search-fields" />
|
||||
</template>
|
||||
<template #table>
|
||||
<slot name="table" />
|
||||
</template>
|
||||
</PageMaint>
|
||||
</template>
|
||||
Reference in New Issue
Block a user