musicItem.tsx 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081
  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. type Props = {
  9. id?: Number
  10. addName: String
  11. addUserAvatar: String
  12. musicSheetName: String
  13. subjectNames: String
  14. composer: String
  15. chargeType: String
  16. }
  17. const chargeTypes = {
  18. CHARGE: '点播',
  19. FREE: '免费',
  20. VIP: 'VIP'
  21. }
  22. export default defineComponent({
  23. name: 'musicItem',
  24. emits:['musicDetail'],
  25. props: {
  26. item: {
  27. type: Object as () => Props,
  28. default: () => ({})
  29. },
  30. onClick: {
  31. type: Function,
  32. default: (item: any) => {}
  33. }
  34. },
  35. setup(props: any,conent) {
  36. const router = useRouter()
  37. const state = reactive({
  38. item:props.item
  39. })
  40. watch(
  41. () => props.item,
  42. item => {
  43. state.item = item
  44. }
  45. )
  46. const gotoMusicDetail = () => {
  47. conent.emit('musicDetail',state.item.id)
  48. // router.push({path:'/muiscDetial',query:{id:state.item.id}})
  49. }
  50. return () => (
  51. <div
  52. onClick={() => {
  53. props.onClick(state.item)
  54. }}
  55. >
  56. <div class={classes.itemWrap} onClick={() => gotoMusicDetail()}>
  57. <div class={classes.left}>
  58. <div class={classes.imgWrap}>
  59. <img src={music} alt="" />
  60. </div>
  61. <div class={classes.textWrap}>
  62. <p>
  63. <ElTooltip placement="top" content={state.item.musicSheetName}>{state.item.musicSheetName}</ElTooltip>
  64. </p>
  65. <p>
  66. <span>作曲: {state.item.composer}</span>
  67. </p>
  68. </div>
  69. </div>
  70. </div>
  71. </div>
  72. )
  73. }
  74. })