index.tsx 1.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344
  1. import { Grid, GridItem, Icon, Image, Loading } from 'vant'
  2. import { defineComponent, PropType } from 'vue'
  3. import styles from './index.module.less'
  4. import IconXin from '../images/icon-xin.png'
  5. export default defineComponent({
  6. name: 'TheMusicGrid',
  7. props: {
  8. list: {
  9. type: Array as any,
  10. default: () => []
  11. }
  12. },
  13. emits: ['goto'],
  14. setup(props, { emit }) {
  15. return () => (
  16. <div class={styles.theMusicGrid}>
  17. <Grid border={false} columnNum={3}>
  18. {props.list.map((n: any) => (
  19. <GridItem>
  20. <div class={styles.item} onClick={() => emit('goto', n)}>
  21. <div class={styles.imgWrap}>
  22. <Image
  23. class={styles.image}
  24. width="100%"
  25. height="100%"
  26. fit="cover"
  27. src={n.albumCoverUrl}
  28. />
  29. <div class={styles.model}>
  30. <Icon name={IconXin} />
  31. <span class={styles.num}>{n.albumFavoriteCount}人</span>
  32. </div>
  33. </div>
  34. <div class={styles.title}>{n.albumName}</div>
  35. <div class={styles.des}>共{n.musicSheetCount}首</div>
  36. </div>
  37. </GridItem>
  38. ))}
  39. </Grid>
  40. </div>
  41. )
  42. }
  43. })