studentDetail.tsx 4.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135
  1. import { defineComponent, onMounted, reactive, ref } from 'vue';
  2. import styles from '@/views/classList/index.module.less';
  3. import {
  4. NButton,
  5. NDataTable,
  6. NForm,
  7. NFormItem,
  8. NImage,
  9. NSelect,
  10. NSpace,
  11. NTabPane,
  12. NTabs
  13. } from 'naive-ui';
  14. import {
  15. getStudentDetail,
  16. getTrainingStudentList
  17. } from '@/views/classList/api';
  18. import { useRoute } from 'vue-router';
  19. import CBreadcrumb from '/src/components/CBreadcrumb';
  20. import defultHeade from '@/components/layout/images/teacherIcon.png';
  21. import femaleIcon from '@/views/setting/images/femaleIcon.png';
  22. import maleIcon from '@/views/setting/images/maleIcon.png';
  23. import PracticeData from '@/views/studentList/components/practiceData';
  24. import EvaluationRecords from '@/views/studentList/components/evaluationRecords';
  25. import BaseInfo from '@/views/studentList/components/baseInfo';
  26. import StudentAfterWork from './components/studentAfterWork';
  27. import { getTabsCache, setTabsCaches } from '@/hooks/use-async';
  28. import dayjs from 'dayjs';
  29. export default defineComponent({
  30. name: 'studentDetail',
  31. setup(props, { emit }) {
  32. const state = reactive({
  33. studentInfo: {
  34. avatar: '',
  35. nickname: '',
  36. gender: null,
  37. subjectNames: '',
  38. classGroupName: ''
  39. }
  40. });
  41. const activeStudentTab = ref('baseInfo');
  42. const route = useRoute();
  43. console.log(route.meta.isClass);
  44. const routerList = ref(
  45. route.meta.isClass
  46. ? [
  47. { name: '班级管理', path: '/classList' },
  48. { name: route.query.name, path: '/classDetail' },
  49. { name: route.query.studentName, path: '/classStudentRecode' }
  50. ]
  51. : ([
  52. { name: '学生管理', path: '/studentList' },
  53. { name: route.query.studentName, path: '/classStudentRecode' }
  54. ] as any)
  55. );
  56. const getWorkInfo = async () => {
  57. console.log(route.query.studentId);
  58. try {
  59. const res = await getStudentDetail({
  60. id: route.query.studentId
  61. });
  62. state.studentInfo = { ...res.data };
  63. } catch (e) {
  64. console.log(e);
  65. }
  66. };
  67. onMounted(() => {
  68. getWorkInfo();
  69. });
  70. const setTabs = (val: any) => {
  71. setTabsCaches(val, 'tabName', route);
  72. };
  73. return () => (
  74. <div>
  75. <CBreadcrumb list={routerList.value}></CBreadcrumb>
  76. <div class={[styles.listWrap,styles.infoListWrap]}>
  77. <div class={styles.teacherList}>
  78. <div class={styles.teacherHeader}>
  79. <div class={styles.teacherHeaderBorder}>
  80. <NImage
  81. class={styles.teacherHeaderImg}
  82. src={
  83. state.studentInfo.avatar
  84. ? state.studentInfo.avatar
  85. : defultHeade
  86. }
  87. previewDisabled></NImage>
  88. </div>
  89. </div>
  90. <div class={styles.workafterInfo}>
  91. <h4 class={styles.studentGender}>
  92. {state.studentInfo.nickname}{' '}
  93. <NImage
  94. previewDisabled
  95. src={
  96. state.studentInfo.gender ? maleIcon : femaleIcon
  97. }></NImage>
  98. </h4>
  99. <p>
  100. {state.studentInfo.classGroupName}{' '}
  101. {state.studentInfo.subjectNames
  102. ? '| ' + state.studentInfo.subjectNames
  103. : ' '}
  104. </p>
  105. </div>
  106. </div>
  107. <NTabs
  108. onUpdate:value={(val: any) => setTabs(val)}
  109. class={styles.customTabs}
  110. v-model:value={activeStudentTab.value}
  111. size="large"
  112. animated={false}
  113. pane-wrapper-style="margin: 0 -4px"
  114. pane-style="padding-left: 4px; padding-right: 4px; box-sizing: border-box;">
  115. <NTabPane name="baseInfo" tab="基本信息">
  116. <BaseInfo studentInfo={state.studentInfo}></BaseInfo>
  117. </NTabPane>
  118. <NTabPane name="afterWork" tab="课后作业">
  119. <StudentAfterWork></StudentAfterWork>
  120. </NTabPane>
  121. <NTabPane name="textRcode" tab="练习记录">
  122. <PracticeData
  123. studentId={route.query.studentId as string}></PracticeData>
  124. </NTabPane>
  125. <NTabPane name="evaluatingRcode" tab="评测记录">
  126. <EvaluationRecords
  127. studentId={route.query.studentId as string}></EvaluationRecords>
  128. </NTabPane>
  129. </NTabs>
  130. </div>
  131. </div>
  132. );
  133. }
  134. });