| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899 | 
							- import { defineComponent, ref } from 'vue'
 
- import { Button, Icon, Image, Tag } from 'vant'
 
- import classNames from 'classnames'
 
- import MusicIcon from './icons/music-icon.png'
 
- import InitUserIcon from './icons/init-user-icon.png'
 
- import FavoriteIcon from '../album/favorite.svg'
 
- import FavoritedIcon from '../album/favorited.svg'
 
- import styles from './item.module.less'
 
- import request from '@/helpers/request'
 
- const chargeTypes = {
 
-   CHARGE: '点播',
 
-   FREE: '免费',
 
-   VIP: 'VIP'
 
- }
 
- export default defineComponent({
 
-   name: 'MusicItem',
 
-   props: {
 
-     data: {
 
-       type: Object,
 
-       default: {}
 
-     },
 
-     onClick: {
 
-       type: Function,
 
-       default: (item: any) => {}
 
-     }
 
-   },
 
-   setup({ data, onClick }) {
 
-     const favorite = ref(data.favorite)
 
-     const favoriteLoading = ref(false)
 
-     const toggleFavorite = async (evt: MouseEvent) => {
 
-       evt.stopPropagation()
 
-       favoriteLoading.value = true
 
-       try {
 
-         await request.post('/api-student/music/sheet/favorite/' + data.id)
 
-         favorite.value = !favorite.value
 
-       } catch (error) {}
 
-       favoriteLoading.value = false
 
-     }
 
-     return () => (
 
-       <div
 
-         class={styles.item}
 
-         onClick={() => {
 
-           onClick(data)
 
-         }}
 
-       >
 
-         <header class={styles.header}>
 
-           <div class={styles.mate}>
 
-             <Image src={MusicIcon} round class={styles.icon} />
 
-             <div class={styles.info}>
 
-               <h4>{data.musicSheetName}</h4>
 
-               <p>{data.composer}</p>
 
-             </div>
 
-           </div>
 
-           <div class={styles.buttons}>
 
-             <Button
 
-               class={classNames(
 
-                 styles.btn,
 
-                 styles[data.chargeType.toLocaleLowerCase()]
 
-               )}
 
-             >
 
-               {chargeTypes[data.chargeType]}
 
-               <Icon name="arrow" />
 
-             </Button>
 
-           </div>
 
-         </header>
 
-         <footer class={styles.footer}>
 
-           <div class={styles.user}>
 
-             <Image
 
-               round
 
-               src={data.addUserAvatar || InitUserIcon}
 
-               class={styles.userIcon}
 
-             />
 
-             <p>{data.addName}</p>
 
-             <div class={styles.tags}>
 
-               {(data.subjectNames || '').split(',').map(item => (
 
-                 <Tag>{item}</Tag>
 
-               ))}
 
-             </div>
 
-           </div>
 
-           <div class={styles.icons}>
 
-             <Button
 
-               style={{ border: 'none' }}
 
-               onClick={toggleFavorite}
 
-               loading={favoriteLoading.value}
 
-             >
 
-               <Icon
 
-                 class={styles.favorite}
 
-                 name={favorite.value ? FavoritedIcon : FavoriteIcon}
 
-               />
 
-             </Button>
 
-           </div>
 
-         </footer>
 
-       </div>
 
-     )
 
-   }
 
- })
 
 
  |