New file |
| | |
| | | <template> |
| | | <div class="page-layout-wrapper"> |
| | | <slot v-if="showNavigationBar" name="navigationBar"> |
| | | <CommonNavigationBar v-bind="props" /> |
| | | </slot> |
| | | <div class="page-layout-scroll-view-wrapper"> |
| | | <slot></slot> |
| | | </div> |
| | | <div class="safe-area-bottom"></div> |
| | | </div> |
| | | </template> |
| | | |
| | | <script setup lang="ts"> |
| | | import CommonNavigationBar from '../NavigationBar/CommonNavigationBar.vue'; |
| | | import { commonNavigationBarProps } from '../NavigationBar/commonNavigationBar'; |
| | | |
| | | defineOptions({ |
| | | name: 'PageLayout', |
| | | }); |
| | | |
| | | const props = defineProps({ |
| | | ...commonNavigationBarProps, |
| | | hasLinearBg: { |
| | | type: Boolean, |
| | | default: false, |
| | | }, |
| | | linearBgHeight: { |
| | | type: Number, |
| | | default: 199, |
| | | }, |
| | | }); |
| | | </script> |
| | | |
| | | <style lang="scss" scoped> |
| | | @use '@/style/common.scss' as *; |
| | | |
| | | .page-layout-wrapper { |
| | | display: flex; |
| | | height: 100%; |
| | | flex-direction: column; |
| | | |
| | | .navigation-bar { |
| | | height: 88px; |
| | | } |
| | | |
| | | .page-layout-scroll-view-wrapper { |
| | | display: flex; |
| | | min-height: 0; |
| | | flex: 1; |
| | | flex-direction: column; |
| | | |
| | | :deep() { |
| | | .loading-layout-wrapper { |
| | | display: flex; |
| | | min-height: 0; |
| | | flex: 1; |
| | | flex-direction: column; |
| | | } |
| | | } |
| | | } |
| | | |
| | | .safe-area-bottom { |
| | | padding-bottom: 20px; /* 默认值 */ |
| | | padding-bottom: constant(safe-area-inset-bottom); |
| | | padding-bottom: env(safe-area-inset-bottom); |
| | | } |
| | | } |
| | | </style> |