index.tsx 1.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061
  1. import { defineComponent, PropType } from 'vue'
  2. import styles from './index.module.less'
  3. import iconTop from './image/icon-top.png'
  4. import iconLock from './image/icon-lock.png'
  5. import { Image, Loading } from 'vant'
  6. export default defineComponent({
  7. name: 'CourseItem',
  8. props: {
  9. list: {
  10. type: Array as PropType<any[]>,
  11. default: () => []
  12. },
  13. term: {
  14. type: String as PropType<any>,
  15. defaut: 0
  16. }
  17. },
  18. emits: ['itemClick'],
  19. setup(prop, { emit }) {
  20. const schoolTerm = {
  21. 1: '一',
  22. 2: '二',
  23. 3: '三',
  24. 4: '四',
  25. 5: '五',
  26. 6: '六'
  27. }
  28. return () => (
  29. <div class={styles.content}>
  30. <div class={styles.wrap}>
  31. <div class={styles.icon}>
  32. <div>第{schoolTerm[prop.term as any]}学期</div>
  33. </div>
  34. {prop.list.map((item: any, index: number) => {
  35. return (
  36. <div class={styles.item} onClick={() => emit('itemClick', item)}>
  37. <div class={styles.cover}>
  38. <div class={styles.coverImg}>
  39. <img
  40. src={item.coverImg}
  41. onLoad={(e: Event) => {
  42. if (e.target) {
  43. (e.target as any).style.opacity = 1
  44. }
  45. }}
  46. />
  47. </div>
  48. <div class={styles.coverNum}>
  49. {item.courseNumName ? item.courseNumName : `共${item.courseNum}课`}
  50. </div>
  51. </div>
  52. <div class={[styles.name, 'van-ellipsis']}>{item.name}</div>
  53. </div>
  54. )
  55. })}
  56. </div>
  57. </div>
  58. )
  59. }
  60. })