|
@@ -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;
|
|
|
}}
|