MarkHeader.vue 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990
  1. <template>
  2. <div v-if="store.setting && store.setting.subject.name" class="mark-header">
  3. <div class="mark-header-part">
  4. <div
  5. v-if="!isSingleStudent"
  6. :class="['header-menu', { 'is-toggled': store.historyOpen }]"
  7. @click="store.toggleHistory"
  8. >
  9. <img class="header-icon" src="@/assets/icons/icon-left-menu.svg" />回评
  10. </div>
  11. <div class="header-subject" :title="store.setting.subject.name">
  12. <div>
  13. {{
  14. `${store.setting.subject.code ?? ""}-${
  15. store.setting.subject.name ?? ""
  16. }`
  17. }}
  18. </div>
  19. </div>
  20. <div class="header-secret">
  21. <div class="header-noun">
  22. <span>编号:</span>
  23. <span>
  24. {{ store.currentTask?.secretNumber ?? "-" }}
  25. </span>
  26. </div>
  27. </div>
  28. <div v-if="!isSingleStudent" class="header-total">
  29. <span class="header-noun">
  30. <span>待处理:</span>
  31. <transition-group name="count-animation" tag="span">
  32. <span :key="store.status.totalCount || 0">
  33. {{ store.status.totalCount }}
  34. </span>
  35. </transition-group>
  36. </span>
  37. <span class="header-noun">
  38. <span>已处理:</span>
  39. <transition-group name="count-animation" tag="span">
  40. <span :key="store.status.markedCount || 0">
  41. {{ store.status.markedCount }}
  42. </span>
  43. </transition-group>
  44. </span>
  45. </div>
  46. </div>
  47. <div class="mark-header-part">
  48. <div class="header-text-btn">
  49. <img src="@/assets/icons/icon-track-mode.svg" class="header-icon" />
  50. {{ modeName }}
  51. </div>
  52. <div class="header-text-btn header-logout" @click="logout">
  53. <img class="header-icon" src="@/assets/icons/icon-return.svg" />返回
  54. </div>
  55. <a-tooltip v-if="store.isTrackMode" placement="bottomRight">
  56. <template #title>弹出给分板</template>
  57. <div
  58. :class="[
  59. 'header-menu',
  60. { 'is-toggled': store.isScoreBoardVisible && store.currentTask },
  61. ]"
  62. @click="store.toggleScoreBoard"
  63. >
  64. <img src="@/assets/icons/icon-right-menu.svg" class="header-icon" />
  65. </div>
  66. </a-tooltip>
  67. <div v-else class="header-menu is-toggled">
  68. <img src="@/assets/icons/icon-right-menu.svg" class="header-icon" />
  69. </div>
  70. </div>
  71. </div>
  72. </template>
  73. <script setup lang="ts">
  74. import { store } from "@/store/app";
  75. import { doLogout } from "@/api/markPage";
  76. const { isSingleStudent = false } = defineProps<{
  77. isSingleStudent?: boolean;
  78. }>();
  79. const modeName = $computed(() =>
  80. store.setting.mode === "TRACK" ? "轨迹模式" : "普通模式"
  81. );
  82. const logout = () => {
  83. doLogout();
  84. };
  85. </script>