index.tsx 2.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495
  1. import { defineComponent, toRefs, reactive, onMounted, ref, watch } from 'vue'
  2. import classes from './index.module.less'
  3. import hold from './images/hold.png'
  4. import start from './images/start.png'
  5. import lineStart from './images/lineStart.png'
  6. import pan from './images/pan.png'
  7. import player from './images/player.png'
  8. import { useRouter } from 'vue-router'
  9. export default defineComponent({
  10. name: 'albumItem',
  11. props: {
  12. detail: {
  13. type: Object,
  14. default: {
  15. albumCoverUrl: '',
  16. albumDesc: '',
  17. albumFavoriteCount: 0,
  18. albumName: '',
  19. albumStatus: 0,
  20. albumTag: '',
  21. auditVersion: 0,
  22. createBy: 0,
  23. createTime: '',
  24. delFlag: null,
  25. hotFlag: null,
  26. id: 0,
  27. musicSheetCount: 0,
  28. musicTagNames: '',
  29. sortNumber: 0,
  30. topFlag: null,
  31. updateBy: 34,
  32. updateTime: '',
  33. favorite: 0
  34. } as any
  35. }
  36. },
  37. setup(props) {
  38. const state = reactive({
  39. detail: props.detail as any
  40. })
  41. watch(
  42. () => props.detail,
  43. detail => {
  44. state.detail = detail
  45. }
  46. )
  47. const router = useRouter()
  48. const gotoAlbum = () => {
  49. router.push({ path: '/albumDetail', query: { id: state.detail.id } })
  50. }
  51. return () => (
  52. <>
  53. <div
  54. class={classes.itemWrap}
  55. onClick={() => {
  56. gotoAlbum()
  57. }}
  58. >
  59. {state.detail.paymentType === 'CHARGE' && (
  60. <span class={classes.albumType}>付费</span>
  61. )}
  62. <img
  63. class={classes.startImage}
  64. src={state.detail.favorite ? lineStart : start}
  65. alt=""
  66. />
  67. <div class={classes.hold}>
  68. <div class={classes.masker}>
  69. <img src={player} alt="" />
  70. </div>
  71. <img
  72. src={
  73. state.detail.albumCoverUrl ? state.detail.albumCoverUrl : hold
  74. }
  75. alt=""
  76. />
  77. </div>
  78. <h2>{state.detail.albumName}</h2>
  79. <div class={classes.itemBottom}>
  80. <div class={classes.itemBottomL}>
  81. {/* <img src={pan} alt="" /> */}
  82. <span>{state.detail.musicSheetCount}首</span>
  83. </div>
  84. <div class={classes.itemBottomR}>
  85. {/* <img src={start} alt="" /> */}
  86. <span>{state.detail.albumFavoriteCount}收藏</span>
  87. </div>
  88. </div>
  89. </div>
  90. </>
  91. )
  92. }
  93. })