gradient-navbar.vue 1.2 KB

12345678910111213141516171819202122232425262728293031323334353637
  1. <template>
  2. <uv-navbar v-bind="navBinding">
  3. <template #left>
  4. <view class="text-primary-deep text-xl font-[FZBangSKJW]">单招一卡通</view>
  5. </template>
  6. <template #right>
  7. <uv-text slot="right" color="var(--primary-deep-color)" prefix-icon="map" :text="provinceName"
  8. :icon-style="{color: 'var(--primary-deep-color)', fontSize: '20px'}"/>
  9. </template>
  10. </uv-navbar>
  11. </template>
  12. <script setup>
  13. import {computed} from 'vue'
  14. import {useInjectPageScroll} from "@/hooks/usePageScrollInjection";
  15. import {useUserStore} from "@/hooks/useUserStore";
  16. import {useInjectPageConfig} from "@/hooks/usePageConfigInjection";
  17. const {scrollTop} = useInjectPageScroll()
  18. const {currentUser} = useUserStore()
  19. const {headerOption} = useInjectPageConfig()
  20. const provinceName = computed(() => currentUser.value.provinceName || '湖南')
  21. const bgOpacity = computed(() => {
  22. if (scrollTop.value <= 0) return 0
  23. return Math.min(1, scrollTop.value / 44)
  24. })
  25. const navBinding = computed(() => ({
  26. bgColor: uni.$uv.colorToRgba('#ffffff', bgOpacity.value),
  27. border: bgOpacity.value >= 1,
  28. ...headerOption.value
  29. }))
  30. </script>
  31. <style scoped>
  32. </style>