index.tsx 2.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697
  1. import { defineComponent, toRefs, reactive, onMounted, ref, watch } from 'vue'
  2. import classes from './index.module.less'
  3. import detaile from './images/detaile.png'
  4. import player from '@/components/albumItem/images/player.png'
  5. import icon from './images/icon.png'
  6. import { useRouter } from 'vue-router'
  7. export default defineComponent({
  8. name: 'albumItem',
  9. emits: ['getDetail'],
  10. props: {
  11. detail: {
  12. type: Object,
  13. default: {
  14. auditStatus: '',
  15. endTime: '',
  16. lessonSubject: '',
  17. order: '',
  18. orderNo: '',
  19. page: 0,
  20. rows: 0,
  21. search: '',
  22. sort: '',
  23. startTime: '',
  24. userId: 0,
  25. videoLessonGroupId: 0
  26. }
  27. },
  28. isFull: {
  29. type: Boolean,
  30. default: false
  31. }
  32. },
  33. setup(props, conent) {
  34. const state = reactive({
  35. detail: props.detail,
  36. isFull: props.isFull
  37. })
  38. watch(
  39. () => props.detail,
  40. detail => {
  41. state.detail = detail
  42. }
  43. )
  44. const router = useRouter()
  45. const gotoVideoDetail = () => {
  46. if (state.isFull) {
  47. conent.emit('getDetail', state.detail.id)
  48. }
  49. router.push({ path: '/videoDetail', query: { id: state.detail.id } })
  50. }
  51. return () => (
  52. <>
  53. <div
  54. class={[classes.itemWrap, state.isFull ? classes.isFull : '']}
  55. onClick={gotoVideoDetail}
  56. >
  57. <div class={classes.detaileWrap}>
  58. <div class={classes.masker}>
  59. <img src={player} alt="" />
  60. </div>
  61. <p class={classes.detaileStudy}>
  62. <span class={classes.detaileDot}></span>
  63. {state.detail.countStudent}人在学
  64. </p>
  65. <img
  66. style={{ objectFit: 'cover' }}
  67. src={
  68. state.detail.lessonCoverUrl
  69. ? state.detail.lessonCoverUrl
  70. : detaile
  71. }
  72. alt=""
  73. class={classes.detaile}
  74. />
  75. </div>
  76. <div class={classes.infoBottom}>
  77. <div class={classes.infoBottomL}>
  78. <img src={icon} class={classes.itemHead} alt="" />
  79. <span class={classes.itemTitle}>{state.detail.username}</span>
  80. </div>
  81. <span class={classes.course}>{state.detail.lessonCount}课时</span>
  82. </div>
  83. <div class={classes.itemBottom}>
  84. <div class={classes.itemBottomL}>
  85. <span class={classes.itemTitle}>
  86. {state.detail.lessonSubjectName}
  87. </span>
  88. {/* <div class={classes.line}></div> */}
  89. </div>
  90. <div class={classes.itemBottomR}>了解更多</div>
  91. </div>
  92. </div>
  93. </>
  94. )
  95. }
  96. })