Browse Source
* feat: page component * chore: basic page * chore: add demos * chore: add header-sticky support * chore: update web-ele * chore: rename slot name --------- Co-authored-by: Vben <ann.vben@gmail.com>pull/4118/head
committed by
GitHub
9 changed files with 98 additions and 16 deletions
@ -0,0 +1 @@ |
|||||
|
export { default as Page } from './page.vue'; |
||||
@ -0,0 +1,13 @@ |
|||||
|
<script setup lang="ts"> |
||||
|
defineOptions({ |
||||
|
name: 'PageFooter', |
||||
|
}); |
||||
|
</script> |
||||
|
|
||||
|
<template> |
||||
|
<div |
||||
|
class="bg-card align-center absolute bottom-0 left-0 right-0 flex px-6 py-4" |
||||
|
> |
||||
|
<slot></slot> |
||||
|
</div> |
||||
|
</template> |
||||
@ -0,0 +1,20 @@ |
|||||
|
<script setup lang="ts"> |
||||
|
import type { PageHeaderProps } from './page.ts'; |
||||
|
|
||||
|
defineOptions({ |
||||
|
name: 'PageHeader', |
||||
|
}); |
||||
|
|
||||
|
const props = defineProps<PageHeaderProps>(); |
||||
|
</script> |
||||
|
|
||||
|
<template> |
||||
|
<div class="bg-card px-6 py-4"> |
||||
|
<div class="flex justify-between text-lg font-bold"> |
||||
|
{{ props.title }} |
||||
|
</div> |
||||
|
<div class="pt-3"> |
||||
|
<slot></slot> |
||||
|
</div> |
||||
|
</div> |
||||
|
</template> |
||||
@ -0,0 +1,11 @@ |
|||||
|
interface PageHeaderProps { |
||||
|
title?: string; |
||||
|
} |
||||
|
|
||||
|
interface Props extends PageHeaderProps { |
||||
|
headerSticky?: boolean; |
||||
|
showFooter?: boolean; |
||||
|
showHeader?: boolean; |
||||
|
} |
||||
|
|
||||
|
export type { PageHeaderProps, Props }; |
||||
@ -0,0 +1,34 @@ |
|||||
|
<script setup lang="ts"> |
||||
|
import type { Props } from './page.ts'; |
||||
|
|
||||
|
import PageFooter from './page-footer.vue'; |
||||
|
import PageHeader from './page-header.vue'; |
||||
|
|
||||
|
defineOptions({ |
||||
|
name: 'Page', |
||||
|
}); |
||||
|
|
||||
|
const props = withDefaults(defineProps<Props>(), { |
||||
|
showFooter: false, |
||||
|
showHeader: true, |
||||
|
title: '', |
||||
|
}); |
||||
|
</script> |
||||
|
|
||||
|
<template> |
||||
|
<div class="relative h-full"> |
||||
|
<PageHeader v-if="props.showHeader" :title="props.title"> |
||||
|
<template #default> |
||||
|
<slot name="header"></slot> |
||||
|
</template> |
||||
|
</PageHeader> |
||||
|
<div class="m-4 overflow-hidden"> |
||||
|
<slot></slot> |
||||
|
</div> |
||||
|
<PageFooter v-if="props.showFooter"> |
||||
|
<template #default> |
||||
|
<slot name="footer"></slot> |
||||
|
</template> |
||||
|
</PageFooter> |
||||
|
</div> |
||||
|
</template> |
||||
Loading…
Reference in new issue