index.tsx 2.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283
  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 } from '../../../state'
  8. export default defineComponent({
  9. name: 'my-orchestra',
  10. props: {
  11. list: {
  12. type: Object,
  13. default: () => []
  14. }
  15. },
  16. setup(props) {
  17. const onMessage = async (item: any) => {
  18. console.log(item)
  19. postMessage({
  20. api: 'joinChatGroup',
  21. content: {
  22. type: 'multi', // single 单人 multi 多人
  23. id: item.imGroupId
  24. }
  25. })
  26. }
  27. const openClassDetail = (item: any) => {
  28. openDefaultWebView(`/classDetail?classId=${item.id}`)
  29. }
  30. const { list } = toRefs(props)
  31. return () => (
  32. <div class={styles.myClass}>
  33. {Array.isArray(list.value) &&
  34. list.value.map((item: any) => (
  35. <div class={styles.itemDiv} onClick={() => openClassDetail(item)}>
  36. <Cell center label={item.classGroupId}>
  37. {{
  38. icon: () => (
  39. <Image
  40. src={item.teacherAvatar || iconTeacher}
  41. class={styles.iconImg}
  42. fit="cover"
  43. />
  44. ),
  45. title: () => (
  46. <div class={styles.content}>
  47. <div class={['van-ellipsis', styles.teacherName]}>{item.teacherName}</div>
  48. <div class={styles.tag}>{item.classGroupName}</div>
  49. </div>
  50. ),
  51. value: () => (
  52. <Image
  53. class={styles.messageImg}
  54. src={iconMessage}
  55. onClick={(e: Event) => {
  56. e.stopPropagation()
  57. onMessage(item)
  58. }}
  59. />
  60. )
  61. }}
  62. </Cell>
  63. <Grid border={false} columnNum={3} class={styles.grid}>
  64. <GridItem>
  65. <p class={styles.title}>{item.preStudentNum || 0}</p>
  66. <p class={styles.name}>学生人数</p>
  67. </GridItem>
  68. <GridItem>
  69. <p class={[styles.title]}>{item.courseNum || 0}</p>
  70. <p class={styles.name}>剩余课时</p>
  71. </GridItem>
  72. <GridItem>
  73. <p class={styles.title}>{item.courseScheduleNum || 0}</p>
  74. <p class={styles.name}>总课时</p>
  75. </GridItem>
  76. </Grid>
  77. </div>
  78. ))}
  79. </div>
  80. )
  81. }
  82. })