index.tsx 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146
  1. import { defineComponent, reactive, watch } from 'vue'
  2. import icon from '@/components/videoDetailItem/images/icon.png'
  3. import classes from './index.module.less'
  4. import gou from './images/gou.png'
  5. import music from './images/music.png'
  6. import member from './images/member.png'
  7. import palyer from './images/palyer.png'
  8. // import arrow from './images/arrow.png'
  9. import { goodsType } from '@/constant'
  10. import { useRouter } from 'vue-router'
  11. import start from '@/common/images/start.png'
  12. import lineStart from '@/common/images/lineStart.png'
  13. import arrow from '@/views/home/images/moreArrow.png'
  14. type Props = {
  15. id?: Number
  16. addName: String
  17. addUserAvatar: String
  18. musicSheetName: String
  19. titleImg: String
  20. subjectNames: String
  21. composer: String
  22. chargeType: String
  23. }
  24. const chargeTypes = {
  25. CHARGE: '点播',
  26. FREE: '免费',
  27. VIP: '会员'
  28. }
  29. const chargeImg = {
  30. CHARGE: palyer,
  31. FREE: gou,
  32. VIP: member
  33. }
  34. export default defineComponent({
  35. name: 'musicLIstItem',
  36. props: {
  37. item: {
  38. type: Object as () => Props,
  39. default: () => ({})
  40. },
  41. onClick: {
  42. type: Function,
  43. default: (item: any) => {}
  44. }
  45. },
  46. setup(props: any) {
  47. const state = reactive({
  48. item: props.item
  49. })
  50. const router = useRouter()
  51. watch(
  52. () => props.item,
  53. item => {
  54. state.item = item
  55. }
  56. )
  57. const gotoMusicDetail = () => {
  58. router.push({ path: '/muiscDetial', query: { id: state.item.id } })
  59. }
  60. return () => (
  61. <div
  62. class={classes.itemAllWrap}
  63. onClick={() => {
  64. props.onClick(state.item)
  65. }}
  66. onMouseover={() => {
  67. state.item.hoverTop = true
  68. }}
  69. onMouseout={() => {
  70. state.item.hoverTop = false
  71. }}
  72. >
  73. <div class={classes.itemWrap} onClick={() => gotoMusicDetail()}>
  74. <div class={classes.leftWrap}>
  75. <div class={classes.left}>
  76. <div class={classes.imgWrap}>
  77. <img src={state.item.titleImg || music} alt="" />
  78. </div>
  79. <div class={classes.textWrap}>
  80. <p class={classes.musicName}>{state.item.musicSheetName}</p>
  81. <p class={classes.authorName}>作曲:{state.item.composer}</p>
  82. <div class={classes.favoriteWrap}>
  83. <img src={state.item.favorite ? lineStart : start} alt="" />
  84. <span>{state.item.favoriteCount | 0} 收藏</span>
  85. </div>
  86. <div class={[classes.touchButtonO]}>
  87. {state.item.hoverTop ? (
  88. <div
  89. class={[
  90. classes.touchButton,
  91. classes[state.item.chargeType?.toLocaleLowerCase()]
  92. ]}
  93. >
  94. <p>查看</p>
  95. </div>
  96. ) : (
  97. <>
  98. {state.item.paymentType && state.item.paymentType.map((tag: string) => (
  99. <div
  100. class={[
  101. classes.touchButton,
  102. classes[tag?.toLocaleLowerCase()]
  103. ]}
  104. >
  105. <div class={classes.touchButtonText}>
  106. {chargeTypes[tag]
  107. ? chargeTypes[tag]
  108. : '点播'}
  109. </div>
  110. </div>
  111. ))}
  112. </>
  113. )}
  114. </div>
  115. </div>
  116. </div>
  117. <div class={classes.authorBottom}>
  118. <div class={classes.authorInfo}>
  119. <img
  120. class={classes.icon}
  121. src={state.item.addUserAvatar || icon}
  122. alt=""
  123. />
  124. <span class={classes.authorName}>
  125. {state.item.addName ? state.item.addName : '小酷有谱'}
  126. </span>
  127. </div>
  128. {/* <img class={classes.arrow} src={arrow} alt="" /> */}
  129. <div class={classes.tagList}>
  130. {state.item.subjectNames ? (
  131. <div class={classes.tag}>{state.item.subjectNames}</div>
  132. ) : null}
  133. {/* <div class={classes.tag}>圆号</div> */}
  134. </div>
  135. </div>
  136. </div>
  137. {/* <div class={classes.right}></div> */}
  138. </div>
  139. </div>
  140. )
  141. }
  142. })