|  | @@ -1,4 +1,4 @@
 | 
	
		
			
				|  |  | -import { defineComponent, onMounted, reactive } from 'vue';
 | 
	
		
			
				|  |  | +import { defineComponent, onMounted, reactive, ref } from 'vue';
 | 
	
		
			
				|  |  |  import WaveSurfer from 'wavesurfer.js';
 | 
	
		
			
				|  |  |  import styles from './index.module.less';
 | 
	
		
			
				|  |  |  import MSticky from '@/components/m-sticky';
 | 
	
	
		
			
				|  | @@ -11,11 +11,12 @@ import iconZ from './images/icon-z.png';
 | 
	
		
			
				|  |  |  import iconPlay from './images/icon-play.png';
 | 
	
		
			
				|  |  |  import iconPause from './images/icon-pause.png';
 | 
	
		
			
				|  |  |  import { browser, getGradeCh, getSecondRPM } from '@/helpers/utils';
 | 
	
		
			
				|  |  | -import { useRoute, useRouter } from 'vue-router';
 | 
	
		
			
				|  |  | +import { onBeforeRouteUpdate, useRoute, useRouter } from 'vue-router';
 | 
	
		
			
				|  |  |  import {
 | 
	
		
			
				|  |  |    api_openUserMusicDetail,
 | 
	
		
			
				|  |  |    api_openUserMusicPage,
 | 
	
		
			
				|  |  | -  api_userMusicStar
 | 
	
		
			
				|  |  | +  api_userMusicStar,
 | 
	
		
			
				|  |  | +  api_verification
 | 
	
		
			
				|  |  |  } from './api';
 | 
	
		
			
				|  |  |  import MEmpty from '@/components/m-empty';
 | 
	
		
			
				|  |  |  import { nextTick } from 'process';
 | 
	
	
		
			
				|  | @@ -23,6 +24,8 @@ import MVideo from '@/components/m-video';
 | 
	
		
			
				|  |  |  import LoginModel from './login-model';
 | 
	
		
			
				|  |  |  import { removeAuth } from '../student-register/layout/utils';
 | 
	
		
			
				|  |  |  import { setLogout } from '@/state';
 | 
	
		
			
				|  |  | +import { storage } from '@/helpers/storage';
 | 
	
		
			
				|  |  | +import { ACCESS_TOKEN } from '@/store/mutation-types';
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  export default defineComponent({
 | 
	
		
			
				|  |  |    name: 'creation-detail',
 | 
	
	
		
			
				|  | @@ -34,7 +37,7 @@ export default defineComponent({
 | 
	
		
			
				|  |  |      const state = reactive({
 | 
	
		
			
				|  |  |        id: route.query.id,
 | 
	
		
			
				|  |  |        loginTag: false, // 是否登录标识
 | 
	
		
			
				|  |  | -      loginStatus: true,
 | 
	
		
			
				|  |  | +      loginStatus: false,
 | 
	
		
			
				|  |  |        playType: '' as 'Audio' | 'Video' | '', // 播放类型
 | 
	
		
			
				|  |  |        musicDetail: {} as any,
 | 
	
		
			
				|  |  |        timer: null as any,
 | 
	
	
		
			
				|  | @@ -55,6 +58,7 @@ export default defineComponent({
 | 
	
		
			
				|  |  |          rows: 20
 | 
	
		
			
				|  |  |        }
 | 
	
		
			
				|  |  |      });
 | 
	
		
			
				|  |  | +    const wavesurfer = ref();
 | 
	
		
			
				|  |  |      const audioDom = new Audio();
 | 
	
		
			
				|  |  |      audioDom.controls = true;
 | 
	
		
			
				|  |  |      audioDom.style.width = '100%';
 | 
	
	
		
			
				|  | @@ -90,10 +94,17 @@ export default defineComponent({
 | 
	
		
			
				|  |  |          return;
 | 
	
		
			
				|  |  |        }
 | 
	
		
			
				|  |  |        try {
 | 
	
		
			
				|  |  | -        const { data } = await api_userMusicStar({
 | 
	
		
			
				|  |  | -          userMusicId: '1698984095609106434',
 | 
	
		
			
				|  |  | -          star: true
 | 
	
		
			
				|  |  | +        await api_userMusicStar({
 | 
	
		
			
				|  |  | +          userMusicId: state.id,
 | 
	
		
			
				|  |  | +          star: !state.musicDetail.starFlag
 | 
	
		
			
				|  |  |          });
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        state.musicDetail.starFlag = !state.musicDetail.starFlag;
 | 
	
		
			
				|  |  | +        if (state.musicDetail.starFlag) {
 | 
	
		
			
				|  |  | +          state.musicDetail.likeNum += 1;
 | 
	
		
			
				|  |  | +        } else {
 | 
	
		
			
				|  |  | +          state.musicDetail.likeNum -= 1;
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  |        } catch {
 | 
	
		
			
				|  |  |          //
 | 
	
		
			
				|  |  |        }
 | 
	
	
		
			
				|  | @@ -127,8 +138,18 @@ export default defineComponent({
 | 
	
		
			
				|  |  |        }
 | 
	
		
			
				|  |  |      };
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | +    const onDetail = (item: any) => {
 | 
	
		
			
				|  |  | +      console.log(item, 'item');
 | 
	
		
			
				|  |  | +      router.push({
 | 
	
		
			
				|  |  | +        path: '/shareCreation',
 | 
	
		
			
				|  |  | +        query: {
 | 
	
		
			
				|  |  | +          id: item.id
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +      });
 | 
	
		
			
				|  |  | +    };
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |      const initAudio = () => {
 | 
	
		
			
				|  |  | -      const wavesurfer = WaveSurfer.create({
 | 
	
		
			
				|  |  | +      wavesurfer.value = WaveSurfer.create({
 | 
	
		
			
				|  |  |          container: document.querySelector(`#${audioId}`) as HTMLElement,
 | 
	
		
			
				|  |  |          waveColor: '#fff',
 | 
	
		
			
				|  |  |          progressColor: '#2FA1FD',
 | 
	
	
		
			
				|  | @@ -151,15 +172,15 @@ export default defineComponent({
 | 
	
		
			
				|  |  |          media: audioDom
 | 
	
		
			
				|  |  |        });
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -      wavesurfer.once('interaction', () => {
 | 
	
		
			
				|  |  | -        // wavesurfer.play();
 | 
	
		
			
				|  |  | +      wavesurfer.value.once('interaction', () => {
 | 
	
		
			
				|  |  | +        // wavesurfer.value.play();
 | 
	
		
			
				|  |  |        });
 | 
	
		
			
				|  |  | -      wavesurfer.once('ready', () => {
 | 
	
		
			
				|  |  | +      wavesurfer.value.once('ready', () => {
 | 
	
		
			
				|  |  |          state.paused = audioDom.paused;
 | 
	
		
			
				|  |  |          state.duration = audioDom.duration;
 | 
	
		
			
				|  |  |        });
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -      wavesurfer.on('finish', () => {
 | 
	
		
			
				|  |  | +      wavesurfer.value.on('finish', () => {
 | 
	
		
			
				|  |  |          state.paused = true;
 | 
	
		
			
				|  |  |        });
 | 
	
		
			
				|  |  |  
 | 
	
	
		
			
				|  | @@ -169,14 +190,22 @@ export default defineComponent({
 | 
	
		
			
				|  |  |        });
 | 
	
		
			
				|  |  |      };
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -    onMounted(async () => {
 | 
	
		
			
				|  |  | -      // 判断是否登录
 | 
	
		
			
				|  |  | -      if (!state.loginTag) {
 | 
	
		
			
				|  |  | -        removeAuth();
 | 
	
		
			
				|  |  | -        setLogout();
 | 
	
		
			
				|  |  | -      }
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | +    const __init = async () => {
 | 
	
		
			
				|  |  |        try {
 | 
	
		
			
				|  |  | +        // 判断是否登录
 | 
	
		
			
				|  |  | +        const Authorization = storage.get(ACCESS_TOKEN) || '';
 | 
	
		
			
				|  |  | +        if (Authorization) {
 | 
	
		
			
				|  |  | +          const res = await api_verification({
 | 
	
		
			
				|  |  | +            token: Authorization
 | 
	
		
			
				|  |  | +          });
 | 
	
		
			
				|  |  | +          console.log(res, 'res');
 | 
	
		
			
				|  |  | +          state.loginTag = res.data;
 | 
	
		
			
				|  |  | +          if (!res.data) {
 | 
	
		
			
				|  |  | +            removeAuth();
 | 
	
		
			
				|  |  | +            setLogout();
 | 
	
		
			
				|  |  | +          }
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |          const { data } = await api_openUserMusicDetail(state.id);
 | 
	
		
			
				|  |  |          state.musicDetail = data;
 | 
	
		
			
				|  |  |          getList();
 | 
	
	
		
			
				|  | @@ -193,6 +222,17 @@ export default defineComponent({
 | 
	
		
			
				|  |  |        } catch {
 | 
	
		
			
				|  |  |          //
 | 
	
		
			
				|  |  |        }
 | 
	
		
			
				|  |  | +    };
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    onMounted(async () => {
 | 
	
		
			
				|  |  | +      __init();
 | 
	
		
			
				|  |  | +    });
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    onBeforeRouteUpdate((to: any) => {
 | 
	
		
			
				|  |  | +      state.id = to.query.id;
 | 
	
		
			
				|  |  | +      state.playType = '';
 | 
	
		
			
				|  |  | +      state.params.page = 1;
 | 
	
		
			
				|  |  | +      __init();
 | 
	
		
			
				|  |  |      });
 | 
	
		
			
				|  |  |      return () => (
 | 
	
		
			
				|  |  |        <div class={styles.creation}>
 | 
	
	
		
			
				|  | @@ -289,7 +329,10 @@ export default defineComponent({
 | 
	
		
			
				|  |  |              ),
 | 
	
		
			
				|  |  |              value: () => (
 | 
	
		
			
				|  |  |                <div class={styles.zan} onClick={onStarChange}>
 | 
	
		
			
				|  |  | -                <img src={iconZanActive} class={styles.iconZan} />
 | 
	
		
			
				|  |  | +                <img
 | 
	
		
			
				|  |  | +                  src={state.musicDetail.starFlag ? iconZanActive : iconZan}
 | 
	
		
			
				|  |  | +                  class={styles.iconZan}
 | 
	
		
			
				|  |  | +                />
 | 
	
		
			
				|  |  |                  {state.musicDetail.likeNum}
 | 
	
		
			
				|  |  |                </div>
 | 
	
		
			
				|  |  |              )
 | 
	
	
		
			
				|  | @@ -318,9 +361,13 @@ export default defineComponent({
 | 
	
		
			
				|  |  |                immediateCheck={false}>
 | 
	
		
			
				|  |  |                <div class={styles.cellGroup}>
 | 
	
		
			
				|  |  |                  {state.list.map((item: any) => (
 | 
	
		
			
				|  |  | -                  <div class={styles.cell}>
 | 
	
		
			
				|  |  | +                  <div class={styles.cell} onClick={() => onDetail(item)}>
 | 
	
		
			
				|  |  |                      <div class={styles.cellImg}>
 | 
	
		
			
				|  |  | -                      <Image class={styles.cellImage} src={item.img} />
 | 
	
		
			
				|  |  | +                      <Image
 | 
	
		
			
				|  |  | +                        class={styles.cellImage}
 | 
	
		
			
				|  |  | +                        src={item.img}
 | 
	
		
			
				|  |  | +                        fit="cover"
 | 
	
		
			
				|  |  | +                      />
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |                        <div class={styles.iconZan}>{item.likeNum}</div>
 | 
	
		
			
				|  |  |                      </div>
 | 
	
	
		
			
				|  | @@ -347,6 +394,7 @@ export default defineComponent({
 | 
	
		
			
				|  |  |              onClose={() => (state.loginStatus = false)}
 | 
	
		
			
				|  |  |              onConfirm={async (val: boolean) => {
 | 
	
		
			
				|  |  |                state.loginStatus = val;
 | 
	
		
			
				|  |  | +              state.loginStatus = false;
 | 
	
		
			
				|  |  |                const { data } = await api_openUserMusicDetail(state.id);
 | 
	
		
			
				|  |  |                state.musicDetail = data;
 | 
	
		
			
				|  |  |              }}
 |