videoCourseItem.tsx 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  1. import { defineComponent, toRefs, reactive, onMounted, ref, watch } from 'vue'
  2. import player from '../images/player.png'
  3. import clock from '../images/clock.png'
  4. import classes from './videoCourseItem.module.less'
  5. import detaile from '@/components/videoDetailItem/images/detaile.png'
  6. import { ElDialog } from 'element-plus'
  7. import downModel from './downModel'
  8. export default defineComponent({
  9. name: 'videoCourseItem',
  10. props: {
  11. item: {
  12. type: Object,
  13. default: {}
  14. }
  15. },
  16. components: {
  17. downModel
  18. },
  19. setup(props, conent) {
  20. const state = reactive({
  21. title: props.item,
  22. item: props.item,
  23. showDown: false
  24. })
  25. watch(
  26. () => props.item,
  27. item => {
  28. state.item = item
  29. }
  30. )
  31. return () => (
  32. <>
  33. <div
  34. class={classes.videoWrap}
  35. onClick={() => {
  36. state.showDown = true
  37. }}
  38. >
  39. <div class={classes.videoImgWrap}>
  40. <img
  41. class={ classes.videoImgWrapImg}
  42. src={state.item.coverUrl ? state.item.coverUrl : detaile}
  43. alt=""
  44. />
  45. <img src={player} alt="" class={classes.player} />
  46. </div>
  47. <div class={classes.courseInfo}>
  48. <h4>{state.item.videoTitle}</h4>
  49. <p class={classes.courseDetial}>{state.item.videoContent}</p>
  50. <p class={classes.courseDetialTime}><img src={clock} alt="" /> <span>课时:</span><span>120分钟</span></p>
  51. </div>
  52. <ElDialog
  53. modelValue={state.showDown}
  54. onUpdate:modelValue={val => (state.showDown = val)}
  55. closeOnClickModal={false}
  56. closeOnPressEscape={false}
  57. >
  58. <downModel onClose={() => (state.showDown = false)}></downModel>
  59. </ElDialog>
  60. </div>
  61. </>
  62. )
  63. }
  64. })