App.vue 1.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
  1. <script setup lang="ts">
  2. import { RouterView } from 'vue-router';
  3. import SideMenu from './layouts/BlogMenu.vue';
  4. import Footer from './layouts/BlogFooter.vue';
  5. import { ref } from 'vue';
  6. import LoginAlert from '@/layouts/LoginAlert.vue'
  7. const displayLoginAlert = ref(false);
  8. let pressTimer: number | null = null;
  9. const LONG_PRESS_DURATION = 1000;
  10. const avatarMouseDownHandler = () => {
  11. pressTimer = window.setTimeout(() => {
  12. displayLoginAlert.value = true;
  13. }, LONG_PRESS_DURATION);
  14. };
  15. const avatarMouseUpHandler = () => {
  16. if (pressTimer) {
  17. window.clearTimeout(pressTimer);
  18. pressTimer = null;
  19. }
  20. };
  21. </script>
  22. <template>
  23. <div class="container">
  24. <div class="aside">
  25. <div class="avatar-box">
  26. <img src="./assets/headset.jpg" alt="avatar" class="avatar" @mousedown.prevent="avatarMouseDownHandler" @mouseup.prevent="avatarMouseUpHandler"/>
  27. <div class="info">
  28. <span class="blogger">枫叶秋林</span>
  29. <span class="desc">枫林天天忙,不想写代码</span>
  30. </div>
  31. </div>
  32. <SideMenu />
  33. </div>
  34. <div class="main">
  35. <RouterView />
  36. <Footer />
  37. </div>
  38. <LoginAlert v-model="displayLoginAlert"/>
  39. </div>
  40. </template>
  41. <style scoped>
  42. </style>