index.tsx 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117
  1. import { Cell, Grid, GridItem, Image } from 'vant'
  2. import { defineComponent, toRefs } from 'vue'
  3. import styles from './index.module.less'
  4. import iconTeacher from '@common/images/icon_teacher.png'
  5. import iconMessage from '@common/images/icon-muit-message.png'
  6. import { postMessage } from '@/helpers/native-message'
  7. import { openDefaultWebView, state } from '../../../state'
  8. export default defineComponent({
  9. name: 'my-orchestra',
  10. props: {
  11. orchestraName: {
  12. type: String,
  13. default: ''
  14. },
  15. list: {
  16. type: Object,
  17. default: () => []
  18. }
  19. },
  20. setup(props) {
  21. const { orchestraName } = toRefs(props)
  22. console.log('🚀 ~ orchestraName', orchestraName.value)
  23. const onMessage = async (item: any) => {
  24. console.log(item)
  25. postMessage({
  26. api: 'joinChatGroup',
  27. content: {
  28. type: 'multi', // single 单人 multi 多人
  29. id: item.imGroupId
  30. }
  31. })
  32. }
  33. const openClassDetail = (item: any) => {
  34. console.log("🚀 ~ item", item)
  35. postMessage({
  36. api: 'open_app_page',
  37. content: {
  38. action: 'app',
  39. pageTag: 'classDetail',
  40. url: '',
  41. params: JSON.stringify({ classId: item.classGroupId })
  42. }
  43. })
  44. }
  45. const { list } = toRefs(props)
  46. return () => (
  47. <div class={styles.myClass}>
  48. {Array.isArray(list.value) &&
  49. list.value.map((item: any) => (
  50. <div class={styles.itemDiv} onClick={() => openClassDetail(item)}>
  51. <Cell center>
  52. {{
  53. icon: () => (
  54. <Image
  55. src={item.teacherAvatar || iconTeacher}
  56. class={styles.iconImg}
  57. fit="cover"
  58. />
  59. ),
  60. title: () => (
  61. <>
  62. {state.platformType == 'TEACHER' ? (
  63. <>
  64. <div class={styles.content}>
  65. <div class={['van-ellipsis', styles.teacherName]}>
  66. {item.classGroupName}
  67. </div>
  68. </div>
  69. <div class="van-ellipsis van-cell__label">{orchestraName.value}</div>
  70. </>
  71. ) : (
  72. <>
  73. <div class={styles.content}>
  74. <div class={['van-ellipsis', styles.teacherName]}>
  75. {item.teacherName}
  76. </div>
  77. </div>
  78. <div class="van-cell__label">
  79. <span class={styles.tag}>{item.classGroupName}</span>
  80. </div>
  81. </>
  82. )}
  83. </>
  84. ),
  85. value: () => (
  86. <Image
  87. class={styles.messageImg}
  88. src={iconMessage}
  89. onClick={(e: Event) => {
  90. e.stopPropagation()
  91. onMessage(item)
  92. }}
  93. />
  94. )
  95. }}
  96. </Cell>
  97. <Grid border={false} columnNum={3} class={styles.grid}>
  98. <GridItem>
  99. <p class={styles.title}>{item.studentNum || 0}</p>
  100. <p class={styles.name}>学生人数</p>
  101. </GridItem>
  102. <GridItem>
  103. <p class={[styles.title]}>{item.totalCourseNum - item.completeCourseNum || 0}</p>
  104. <p class={styles.name}>剩余课时</p>
  105. </GridItem>
  106. <GridItem>
  107. <p class={styles.title}>{item.totalCourseNum || 0}</p>
  108. <p class={styles.name}>总课时</p>
  109. </GridItem>
  110. </Grid>
  111. </div>
  112. ))}
  113. </div>
  114. )
  115. }
  116. })