| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475 |
- <template>
- <div class="app-navbar" :style="styles">
- <app-navback class="app-navbar__backbutton" @back="goback" v-if="showBackButton" />
- <app-statusbar class="app-navbar__wrapper" @ready="onReady">
- <div class="app-navbar__header">
- <div class="column column--left">
- <div class="column-block">
- <slot name="left"></slot>
- </div>
- </div>
- <div class="column column--center">
- <div class="column-block">
- <slot>
- <span>{{ title }}</span>
- </slot>
- </div>
- </div>
- <div class="column column--right">
- <div class="column-block">
- <slot name="right"></slot>
- </div>
- </div>
- </div>
- <div class="app-navbar__footer">
- <slot name="footer"></slot>
- </div>
- </app-statusbar>
- </div>
- </template>
- <script lang="ts" setup>
- import { useAttrs, computed } from 'vue'
- import { useRouter } from 'vue-router'
- import { useGlobalStore } from '@/stores'
- const emit = defineEmits<{ (event: string, ...args: unknown[]): void }>()
- const props = defineProps({
- // 导航栏标题
- title: String,
- // 是否固定导航栏
- fixed: Boolean,
- // 是否显示返回按钮
- showBackButton: {
- type: Boolean,
- default: true,
- }
- })
- const router = useRouter();
- const attrs = useAttrs();
- const globalStore = useGlobalStore()
- const styles = computed(() => ({
- position: props.fixed ? 'fixed' : 'static',
- width: globalStore.clientWidth + 'px',
- }))
- // 返回按钮事件
- const goback = () => {
- if (attrs.onBack) {
- emit('back');
- } else {
- router.go(-1);
- }
- }
- const onReady = (el: HTMLElement) => {
- emit('ready', el);
- }
- </script>
- <style lang="less" scoped>
- @import './index.less';
- </style>
|