MarkHeader.vue 2.6 KB

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