musicItem.tsx 2.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889
  1. import { defineComponent, reactive, watch } from 'vue'
  2. import icon from '../videoDetailItem/images/icon.png'
  3. import classes from './musicItem.module.less'
  4. import music from '@/components/musicLIstItem/images/music.png'
  5. import arrow from '@/components/musicLIstItem/images/arrow.png'
  6. import { useRouter } from 'vue-router'
  7. import { ElTooltip } from 'element-plus'
  8. import iconFine from '@/common/images/icon_fine.png'
  9. import iconAlbum from '@/common/images/icon_album_active.png'
  10. type Props = {
  11. id?: Number
  12. addName: String
  13. addUserAvatar: String
  14. musicSheetName: String
  15. subjectNames: String
  16. titleImg: String
  17. composer: String
  18. chargeType: String
  19. }
  20. const chargeTypes = {
  21. CHARGE: '点播',
  22. FREE: '免费',
  23. VIP: 'VIP'
  24. }
  25. export default defineComponent({
  26. name: 'musicItem',
  27. emits: ['musicDetail'],
  28. props: {
  29. item: {
  30. type: Object as () => Props,
  31. default: () => ({})
  32. },
  33. onClick: {
  34. type: Function,
  35. default: (item: any) => {}
  36. }
  37. },
  38. setup(props: any, conent) {
  39. const router = useRouter()
  40. const state = reactive({
  41. item: props.item
  42. })
  43. watch(
  44. () => props.item,
  45. item => {
  46. state.item = item
  47. }
  48. )
  49. const gotoMusicDetail = () => {
  50. conent.emit('musicDetail', state.item.id)
  51. // router.push({path:'/muiscDetial',query:{id:state.item.id}})
  52. }
  53. return () => (
  54. <div
  55. onClick={() => {
  56. props.onClick(state.item)
  57. }}
  58. >
  59. <div class={classes.itemWrap} onClick={() => gotoMusicDetail()}>
  60. <div class={classes.left}>
  61. <div class={classes.imgWrap}>
  62. <img src={state.item.titleImg || music} alt="" />
  63. </div>
  64. <div class={classes.textWrap}>
  65. <p>
  66. {state.item.exquisiteFlag === 1 && (
  67. <img src={iconFine} class={classes.iconFine} />
  68. )}
  69. {state.item.albumNums > 0 && (
  70. <img src={iconAlbum} class={classes.iconAlbum} />
  71. )}
  72. <ElTooltip placement="top" content={state.item.musicSheetName}>
  73. {state.item.musicSheetName}
  74. </ElTooltip>
  75. </p>
  76. <p>
  77. <span>作曲: {state.item.composer}</span>
  78. </p>
  79. </div>
  80. </div>
  81. </div>
  82. </div>
  83. )
  84. }
  85. })