|
@@ -1,4 +1,4 @@
|
|
|
-import { defineComponent, nextTick, onMounted, reactive, ref } from 'vue';
|
|
|
+import { defineComponent, nextTick, onMounted, onUnmounted, reactive, ref } from 'vue';
|
|
|
import styles from './index.module.less';
|
|
|
import TheSearch from '/src/components/TheSearch';
|
|
|
import recommendTitle from './images/reommon_title.png';
|
|
@@ -11,6 +11,11 @@ import { api_musicSheetQueryByTag } from './api';
|
|
|
import { api_musicSheetPage } from '../xiaoku-ai/api';
|
|
|
import TheEmpty from '/src/components/TheEmpty';
|
|
|
import titleBg from './images/title-bg.png'
|
|
|
+import { vaildMusicScoreUrl } from '/src/utils/urlUtils';
|
|
|
+import PreviewWindow from '../preview-window';
|
|
|
+import { useUserStore } from '/src/store/modules/users';
|
|
|
+import {state as baseState} from '/src/state';
|
|
|
+import { exitFullscreen, fscreen } from '/src/utils';
|
|
|
|
|
|
export const formatUsedNum = (num: number) => {
|
|
|
if (num < 10000) {
|
|
@@ -25,6 +30,7 @@ export default defineComponent({
|
|
|
name: 'xiaoku-list',
|
|
|
setup() {
|
|
|
const router = useRouter();
|
|
|
+ const userStore = useUserStore();
|
|
|
const state = reactive({
|
|
|
HOT: [] as any,
|
|
|
NEW: [] as any,
|
|
@@ -35,7 +41,12 @@ export default defineComponent({
|
|
|
loading: false as any,
|
|
|
finshed: false,
|
|
|
page: 1,
|
|
|
- rows: 20
|
|
|
+ rows: 20,
|
|
|
+ previewModal: false,
|
|
|
+ previewParams: {
|
|
|
+ type: '',
|
|
|
+ src: ''
|
|
|
+ } as any,
|
|
|
});
|
|
|
|
|
|
|
|
@@ -104,9 +115,56 @@ export default defineComponent({
|
|
|
});
|
|
|
};
|
|
|
|
|
|
+ // 查看详情
|
|
|
+ const onDetail = (item: any) => {
|
|
|
+ // 默认进页面显示对应的曲谱
|
|
|
+ let lineType = item.scoreType || 'FIRST';
|
|
|
+ // if (data.showMusicImg === 'first') {
|
|
|
+ // lineType = 'firstTone';
|
|
|
+ // } else if (data.showMusicImg === 'fixed') {
|
|
|
+ // lineType = 'fixedTone';
|
|
|
+ // } else if (data.showMusicImg === 'staff') {
|
|
|
+ // lineType = 'staff';
|
|
|
+ // }
|
|
|
+ let src = `${vaildMusicScoreUrl()}/instrument?v=${+new Date()}&platform=pc&id=${
|
|
|
+ item.id
|
|
|
+ }&Authorization=${
|
|
|
+ userStore.getToken
|
|
|
+ }&musicRenderType=${lineType}&showGuide=true&part-index=${
|
|
|
+ 0
|
|
|
+ }`;
|
|
|
+
|
|
|
+ if (window.matchMedia('(display-mode: standalone)').matches) {
|
|
|
+ baseState.application = window.matchMedia(
|
|
|
+ '(display-mode: standalone)'
|
|
|
+ ).matches;
|
|
|
+ state.previewModal = true;
|
|
|
+ fscreen();
|
|
|
+ state.previewParams = {
|
|
|
+ type: 'music',
|
|
|
+ src
|
|
|
+ };
|
|
|
+ } else {
|
|
|
+ window.open(src, +new Date() + '');
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ const iframeHandle = (ev: MessageEvent) => {
|
|
|
+ if (ev.data?.api === 'onAttendToggleMenu') {
|
|
|
+ exitFullscreen()
|
|
|
+ state.previewModal = !state.previewModal;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
onMounted(() => {
|
|
|
getDetail();
|
|
|
+
|
|
|
+ window.addEventListener('message', iframeHandle);
|
|
|
});
|
|
|
+
|
|
|
+ onUnmounted(() => {
|
|
|
+ window.removeEventListener('message', iframeHandle)
|
|
|
+ })
|
|
|
return () => (
|
|
|
<div class={styles.list}>
|
|
|
<h2 class={styles.topTitle}>
|
|
@@ -186,7 +244,7 @@ export default defineComponent({
|
|
|
<div class={styles.sectionTitle}>
|
|
|
<img src={recommendTitle} class={styles.imgTitle} />
|
|
|
|
|
|
- <div class={styles.moreBtn}>更多</div>
|
|
|
+ <div class={styles.moreBtn} onClick={() => onMore("RECOMMEND")}>更多</div>
|
|
|
</div>
|
|
|
|
|
|
<NScrollbar>
|
|
@@ -194,7 +252,7 @@ export default defineComponent({
|
|
|
<div
|
|
|
class={styles.item}
|
|
|
onClick={() => {
|
|
|
- onMore('RECOMMEND');
|
|
|
+ onDetail(item)
|
|
|
}}>
|
|
|
<div
|
|
|
class={[
|
|
@@ -233,7 +291,7 @@ export default defineComponent({
|
|
|
<div class={[styles.section, styles.hotSection]}>
|
|
|
<div class={styles.sectionTitle}>
|
|
|
<img src={hotTitle} class={styles.imgTitle} />
|
|
|
- <div class={styles.moreBtn}>更多</div>
|
|
|
+ <div class={styles.moreBtn} onClick={() => onMore("HOT")}>更多</div>
|
|
|
</div>
|
|
|
|
|
|
<NScrollbar>
|
|
@@ -241,7 +299,7 @@ export default defineComponent({
|
|
|
<div
|
|
|
class={styles.item}
|
|
|
onClick={() => {
|
|
|
- onMore('HOT');
|
|
|
+ onDetail(item);
|
|
|
}}>
|
|
|
<div
|
|
|
class={[
|
|
@@ -281,7 +339,7 @@ export default defineComponent({
|
|
|
<div class={styles.sectionTitle}>
|
|
|
<img src={newTitle} class={styles.imgTitle} />
|
|
|
|
|
|
- <div class={styles.moreBtn}>更多</div>
|
|
|
+ <div class={styles.moreBtn} onClick={() => onMore("NEW")}>更多</div>
|
|
|
</div>
|
|
|
|
|
|
<NScrollbar>
|
|
@@ -289,7 +347,7 @@ export default defineComponent({
|
|
|
<div
|
|
|
class={styles.item}
|
|
|
onClick={() => {
|
|
|
- onMore('NEW');
|
|
|
+ onDetail(item)
|
|
|
}}>
|
|
|
<div
|
|
|
class={[
|
|
@@ -327,6 +385,13 @@ export default defineComponent({
|
|
|
</div>
|
|
|
</div>
|
|
|
)}
|
|
|
+
|
|
|
+ {/* 应用内预览*/}
|
|
|
+ <PreviewWindow
|
|
|
+ v-model:show={state.previewModal}
|
|
|
+ type="music"
|
|
|
+ params={state.previewParams}
|
|
|
+ />
|
|
|
</div>
|
|
|
);
|
|
|
}
|