video-item.tsx 2.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  1. import { defineComponent, PropType } from 'vue'
  2. import { Image } from 'vant'
  3. import styles from './video-item.module.less'
  4. import iconTeacher from '@common/images/icon_teacher.png'
  5. interface VideoItemProps {
  6. id?: number
  7. teacherId?: number
  8. lessonName: string
  9. userName: string
  10. avatar: string
  11. lessonCoverUrl: string
  12. lessonCount: number
  13. lessonPrice: number
  14. countStudent: number
  15. lessonSubjectName: string
  16. }
  17. export default defineComponent({
  18. name: 'VideoItem',
  19. props: {
  20. item: Object as PropType<VideoItemProps>,
  21. onClick: {
  22. type: Function as PropType<(item: any) => void>,
  23. default: (item: any) => {}
  24. }
  25. },
  26. render() {
  27. const item: any = this.item
  28. return (
  29. <div
  30. class={styles.videoItem}
  31. onClick={() => {
  32. this.onClick(item)
  33. }}
  34. >
  35. <div style={{ position: 'relative' }}>
  36. <Image
  37. class={styles.viCover}
  38. fit="cover"
  39. src={item?.lessonCoverUrl}
  40. />
  41. <span class={styles.subjectName}>{item?.lessonSubjectName}</span>
  42. </div>
  43. <div class={styles.viSection}>
  44. <div class={[styles.viTitle, 'van-ellipsis']}>{item?.lessonName}</div>
  45. <div class={styles.viUserInfo}>
  46. <Image
  47. src={item?.avatar || iconTeacher}
  48. class={styles.viUserLogo}
  49. />
  50. <span class={[styles.viUserName, 'van-hairline--right']}>
  51. {item?.userName ||
  52. item?.username ||
  53. `游客${item?.teacherId || ''}`}
  54. </span>
  55. <span class={styles.viUserNum}>{item?.countStudent}人已购买</span>
  56. </div>
  57. <div class={styles.viPrice}>
  58. {item?.lessonPrice > 0 && <>¥{item?.lessonPrice}/</>}
  59. {item?.lessonPrice <= 0 &&item?.auditVersion &&<>¥{0}/</>}
  60. {item?.lessonPrice <= 0 &&!item?.auditVersion &&<>免费/</>}
  61. {item?.lessonCount}课时
  62. </div>
  63. </div>
  64. </div>
  65. )
  66. }
  67. })