Header.vue 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106
  1. <script setup lang="ts">
  2. import { useRouter } from 'vue-router';
  3. import Clock from '../small/Clock.vue';
  4. const emit = defineEmits(['back']);
  5. const props = defineProps({
  6. showBack: {
  7. type: Boolean,
  8. default: false,
  9. },
  10. absolute: {
  11. type: Boolean,
  12. default: false,
  13. },
  14. customBack: {
  15. type: Boolean,
  16. default: false,
  17. }
  18. });
  19. const router = useRouter();
  20. function handleBack() {
  21. if (props.customBack) {
  22. emit('back');
  23. } else {
  24. router.back();
  25. }
  26. }
  27. </script>
  28. <template>
  29. <header :class="{ 'absolute': absolute }">
  30. <div class="logo">
  31. <div v-if="showBack" class="back main-any-button" role="button" tabindex="0" @click="handleBack()">
  32. <img src="@/assets/images/IconBack.png" >
  33. 返回上一级
  34. </div>
  35. <img class="logo-img" src="@/assets/images/Logo.png" alt="">
  36. <img class="title-img" src="@/assets/images/TitleText.png" alt="">
  37. </div>
  38. <div class="extra">
  39. <Clock format="YYYY年MM月dd日 HH:mm" :flush-time="1000 * 30" />
  40. </div>
  41. </header>
  42. </template>
  43. <style lang="scss" scoped>
  44. header {
  45. display: flex;
  46. flex-direction: row;
  47. justify-content: space-between;
  48. align-items: center;
  49. padding: 10px 20px;
  50. background: linear-gradient(360deg,
  51. var(--color-header1) 0%,
  52. var(--color-header2) 80%,
  53. var(--color-header3) 100%
  54. );
  55. padding: 1.5% 5%;
  56. &.absolute {
  57. position: absolute;
  58. top: 0;
  59. left: 0;
  60. right: 0;
  61. z-index: 100;
  62. }
  63. .back {
  64. display: flex;
  65. flex-direction: row;
  66. align-items: center;
  67. font-size: 0.8rem;
  68. color: var(--color-text-light);
  69. margin-right: 30px;
  70. img {
  71. margin-right: 10px;
  72. width: 50px;
  73. }
  74. }
  75. .logo {
  76. display: flex;
  77. flex-direction: row;
  78. align-items: center;
  79. .logo-img {
  80. width: 40px;
  81. }
  82. .title-img {
  83. width: 120px;
  84. margin-left: 15px;
  85. }
  86. }
  87. .extra {
  88. color: var(--color-text-light);
  89. font-size: 0.8rem;
  90. }
  91. }
  92. </style>