MarkManage.vue 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117
  1. <template>
  2. <div class="mark-manage-container">
  3. <!-- 顶部标签导航 -->
  4. <el-tabs v-model="activeMenu" class="mark-tabs" @tab-click="handleTabClick">
  5. <el-tab-pane label="分组管理" name="GroupManage">
  6. <template #label>
  7. <span>分组管理</span>
  8. </template>
  9. </el-tab-pane>
  10. <el-tab-pane label="评卷员管理" name="MarkerManage">
  11. <template #label>
  12. <span>评卷员管理</span>
  13. </template>
  14. </el-tab-pane>
  15. <el-tab-pane label="试评管理" name="TrialManage">
  16. <template #label>
  17. <span>试评管理</span>
  18. </template>
  19. </el-tab-pane>
  20. <el-tab-pane label="任务管理" name="TaskManage">
  21. <template #label>
  22. <span>任务管理</span>
  23. </template>
  24. </el-tab-pane>
  25. <el-tab-pane label="仲裁管理" name="ArbitrationManage">
  26. <template #label>
  27. <span>仲裁管理</span>
  28. </template>
  29. </el-tab-pane>
  30. <el-tab-pane label="质量监控" name="QualityMonitor">
  31. <template #label>
  32. <span>质量监控</span>
  33. </template>
  34. </el-tab-pane>
  35. </el-tabs>
  36. <!-- 子页面内容区域 -->
  37. <div class="content-container">
  38. <router-view />
  39. </div>
  40. </div>
  41. </template>
  42. <script setup lang="ts">
  43. import { ref, watch, onMounted } from 'vue';
  44. import { useRoute, useRouter } from 'vue-router';
  45. defineOptions({
  46. name: 'MarkManage',
  47. });
  48. const route = useRoute();
  49. const router = useRouter();
  50. // 当前激活的菜单项
  51. const activeMenu = ref<string>('');
  52. // 标签点击处理
  53. function handleTabClick(tab: any) {
  54. const tabName = tab.paneName || tab.props.name;
  55. if (tabName !== route.name) {
  56. router.push({ name: tabName });
  57. }
  58. }
  59. // 监听路由变化,更新激活菜单
  60. watch(
  61. () => route.name,
  62. (newName) => {
  63. activeMenu.value = newName as string;
  64. },
  65. { immediate: true }
  66. );
  67. // 组件挂载时初始化
  68. onMounted(() => {
  69. // 如果当前路径是父路由,默认跳转到分组管理
  70. if (route.name === 'MarkManage') {
  71. router.replace({ name: 'GroupManage' });
  72. } else {
  73. activeMenu.value = route.name as string;
  74. }
  75. });
  76. </script>
  77. <style scoped>
  78. .mark-manage-container {
  79. height: 100%;
  80. display: flex;
  81. flex-direction: column;
  82. }
  83. .mark-tabs {
  84. border-bottom: 1px solid var(--el-border-color-light);
  85. }
  86. .mark-tabs :deep(.el-tabs__item) {
  87. display: flex;
  88. align-items: center;
  89. gap: 8px;
  90. }
  91. .mark-tabs :deep(.el-tabs__content) {
  92. display: none;
  93. }
  94. .content-container {
  95. flex: 1;
  96. overflow: auto;
  97. padding: 0;
  98. }
  99. /* 移除子页面的顶部间距 */
  100. .content-container :deep(.part-box:first-child) {
  101. margin-top: 0;
  102. }
  103. </style>