unitDetail.tsx 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138
  1. import OEmpty from '@/components/o-empty'
  2. import OHeader from '@/components/o-header'
  3. import OSearch from '@/components/o-search'
  4. import OSticky from '@/components/o-sticky'
  5. import { Button, Dialog, Icon, Tab, Tabs } from 'vant'
  6. import { computed, defineComponent, onMounted, reactive, ref } from 'vue'
  7. import questIcon from '@/school/images/quest-icon.png'
  8. import styles from './index.module.less'
  9. import { useRoute, useRouter } from 'vue-router'
  10. import UnitListItem from './models/unit-list-item'
  11. import UnitStudentList from './models/unit-student-list'
  12. import { state } from '@/state'
  13. import request from '@/helpers/request'
  14. import ODialog from '@/components/o-dialog'
  15. export default defineComponent({
  16. name: 'unitDetail',
  17. setup() {
  18. const router = useRouter()
  19. const route = useRoute()
  20. const form = reactive({
  21. studentList: {} as any
  22. })
  23. const refreshing = ref(false)
  24. const loading = ref(false)
  25. const platformApi = state.platformApi
  26. const activeName = ref(1)
  27. const info = ref({} as any)
  28. const showTip = ref(false)
  29. const getDetail = async () => {
  30. try {
  31. const res = await request.post(`${platformApi}/classGroupUnitExamination/detail`, {
  32. data: { classGroupUnitExaminationId: route.query.id },
  33. requestType: 'form'
  34. })
  35. info.value = res.data
  36. console.log('🚀 ~ file: unitDetail.tsx:45 ~ getDetail ~ info.value', info.value)
  37. } catch (e) {
  38. console.log(e)
  39. }
  40. }
  41. const getStudentList = async () => {
  42. try {
  43. const { data } = await request.post(`${platformApi}/studentUnitExamination/studentDetail`, {
  44. data: {
  45. classGroupUnitExaminationId: route.query.id
  46. },
  47. requestType: 'form'
  48. })
  49. console.log(data)
  50. form.studentList = data || {}
  51. } catch {
  52. //
  53. }
  54. }
  55. // 判断是否可以查看测试报名,如果没有学生则不能查看
  56. const activeNameStatus = computed(() =>
  57. form.studentList[activeName.value] && form.studentList[activeName.value].length > 0
  58. ? false
  59. : true
  60. )
  61. onMounted(() => {
  62. getDetail()
  63. getStudentList()
  64. })
  65. return () => (
  66. <div class={styles.unitDetail}>
  67. <UnitListItem item={info.value}></UnitListItem>
  68. <div class={styles.tabsWrap}>
  69. <Icon
  70. class={styles.tabsWrapIcon}
  71. name={questIcon}
  72. size={18}
  73. color="#333"
  74. onClick={() => {
  75. showTip.value = true
  76. }}
  77. />
  78. <Tabs
  79. v-model:active={activeName.value}
  80. class={styles.rankTabs}
  81. background={'#F8F8F8'}
  82. title-active-color={'#333333'}
  83. title-inactive-color={'#777'}
  84. color={'#FF8057'}
  85. lineWidth={20}
  86. lineHeight={4}
  87. shrink
  88. >
  89. <Tab name={1} title="单团学生">
  90. <UnitStudentList type={1}></UnitStudentList>
  91. </Tab>
  92. <Tab name={2} title="双团学生">
  93. <UnitStudentList type={2}></UnitStudentList>
  94. </Tab>
  95. <Tab name={3} title="多团学生">
  96. <UnitStudentList type={3}></UnitStudentList>
  97. </Tab>
  98. </Tabs>
  99. </div>
  100. <OSticky position="bottom">
  101. <div class={['btnGroup']}>
  102. <Button
  103. block
  104. round
  105. type="primary"
  106. disabled={activeNameStatus.value}
  107. onClick={() => {
  108. router.push({
  109. path: '/unit-detail',
  110. query: {
  111. id: route.query.id,
  112. level: activeName.value
  113. }
  114. })
  115. }}
  116. >
  117. 测试报告
  118. </Button>
  119. </div>
  120. </OSticky>
  121. <ODialog
  122. v-model:show={showTip.value}
  123. title="学生分类"
  124. message="根据学生入团的批次对不同训练阶段的学生进行分类,不同训练阶段的学生可布置不同标准的课后作业和阶段自测内容。\n\n单团学生:最新进入本乐团的学员\n双团学生:较早进入本乐团的学员\n多团学生:最早进入本乐团的学员"
  125. messageAlign="left"
  126. confirmButtonText="我知道了"
  127. />
  128. </div>
  129. )
  130. }
  131. })