|
@@ -1,20 +1,24 @@
|
|
-import { computed, defineComponent, onMounted, reactive, ref } from 'vue';
|
|
|
|
|
|
+import { computed, defineComponent, onMounted, onUnmounted, reactive, ref } from 'vue';
|
|
import styles from './detail.module.less';
|
|
import styles from './detail.module.less';
|
|
import CBreadcrumb from '/src/components/CBreadcrumb';
|
|
import CBreadcrumb from '/src/components/CBreadcrumb';
|
|
import { useRoute } from 'vue-router';
|
|
import { useRoute } from 'vue-router';
|
|
-import { NForm, NFormItem, NScrollbar, NSpin, NTabPane, NTabs } from 'naive-ui';
|
|
|
|
|
|
+import { NScrollbar, NSpin, NTabPane, NTabs } from 'naive-ui';
|
|
import SearchGroupResources from './search-group-resources';
|
|
import SearchGroupResources from './search-group-resources';
|
|
import TheSearch from '/src/components/TheSearch';
|
|
import TheSearch from '/src/components/TheSearch';
|
|
import TheEmpty from '/src/components/TheEmpty';
|
|
import TheEmpty from '/src/components/TheEmpty';
|
|
-import { audioPlayType } from '/src/utils/contants';
|
|
|
|
import { api_musicSheetPage } from '../xiaoku-ai/api';
|
|
import { api_musicSheetPage } from '../xiaoku-ai/api';
|
|
-import { api_musicSheetTagQueryList } from './api';
|
|
|
|
import { formatUsedNum } from '.';
|
|
import { formatUsedNum } from '.';
|
|
|
|
+import { vaildMusicScoreUrl } from '/src/utils/urlUtils';
|
|
|
|
+import { exitFullscreen, fscreen } from '/src/utils';
|
|
|
|
+import {state as baseState} from '/src/state';
|
|
|
|
+import { useUserStore } from '/src/store/modules/users';
|
|
|
|
+import PreviewWindow from '../preview-window';
|
|
|
|
|
|
export default defineComponent({
|
|
export default defineComponent({
|
|
name: 'xiaoku-detail',
|
|
name: 'xiaoku-detail',
|
|
setup() {
|
|
setup() {
|
|
const route = useRoute();
|
|
const route = useRoute();
|
|
|
|
+ const userStore = useUserStore();
|
|
const routerList = ref([
|
|
const routerList = ref([
|
|
{ name: 'AI学练', path: '/xiaoku-list' },
|
|
{ name: 'AI学练', path: '/xiaoku-list' },
|
|
{ name: '全部曲目', path: '' }
|
|
{ name: '全部曲目', path: '' }
|
|
@@ -29,13 +33,14 @@ export default defineComponent({
|
|
loading: true,
|
|
loading: true,
|
|
finshed: false,
|
|
finshed: false,
|
|
reshing: false,
|
|
reshing: false,
|
|
- tabName: '',
|
|
|
|
|
|
+ tabName: '' as any,
|
|
list: [] as any,
|
|
list: [] as any,
|
|
allSearch: {
|
|
allSearch: {
|
|
name: '',
|
|
name: '',
|
|
musicTagIds: '',
|
|
musicTagIds: '',
|
|
audioPlayTypes: null as any,
|
|
audioPlayTypes: null as any,
|
|
bookVersionId: null as any,
|
|
bookVersionId: null as any,
|
|
|
|
+ musicalInstrumentId: null as any,
|
|
subjectId: null
|
|
subjectId: null
|
|
},
|
|
},
|
|
hotSearch: {
|
|
hotSearch: {
|
|
@@ -46,7 +51,12 @@ export default defineComponent({
|
|
},
|
|
},
|
|
recommendSearch: {
|
|
recommendSearch: {
|
|
name: '',
|
|
name: '',
|
|
- }
|
|
|
|
|
|
+ },
|
|
|
|
+ previewModal: false,
|
|
|
|
+ previewParams: {
|
|
|
|
+ type: '',
|
|
|
|
+ src: ''
|
|
|
|
+ } as any,
|
|
});
|
|
});
|
|
|
|
|
|
const searchValue = computed(() => {
|
|
const searchValue = computed(() => {
|
|
@@ -142,10 +152,57 @@ export default defineComponent({
|
|
obv.observe(spinRef.value);
|
|
obv.observe(spinRef.value);
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+ // 查看详情
|
|
|
|
+ const onDetail = (item: any) => {
|
|
|
|
+ // 默认进页面显示对应的曲谱
|
|
|
|
+ let lineType = item.scoreType || 'FIRST';
|
|
|
|
+ let src = `${vaildMusicScoreUrl()}/instrument?v=${+new Date()}&platform=pc&id=${
|
|
|
|
+ item.id
|
|
|
|
+ }&Authorization=${
|
|
|
|
+ userStore.getToken
|
|
|
|
+ }&musicRenderType=${lineType}&showGuide=true&part-index=${
|
|
|
|
+ 0
|
|
|
|
+ }`;
|
|
|
|
+
|
|
|
|
+ if (state.allSearch.musicalInstrumentId && !state.tabName) {
|
|
|
|
+ src += '&instrumentId=' + state.allSearch.musicalInstrumentId;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ 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(async () => {
|
|
onMounted(async () => {
|
|
|
|
+ if(route.query.type) {
|
|
|
|
+ state.tabName = route.query.type
|
|
|
|
+ }
|
|
|
|
+
|
|
// getList();
|
|
// getList();
|
|
__initSpin()
|
|
__initSpin()
|
|
|
|
+ window.addEventListener('message', iframeHandle);
|
|
});
|
|
});
|
|
|
|
+
|
|
|
|
+ onUnmounted(() => {
|
|
|
|
+ window.removeEventListener('message', iframeHandle)
|
|
|
|
+ })
|
|
return () => (
|
|
return () => (
|
|
<div class={styles.xiaokuDetail}>
|
|
<div class={styles.xiaokuDetail}>
|
|
<CBreadcrumb list={routerList.value}></CBreadcrumb>
|
|
<CBreadcrumb list={routerList.value}></CBreadcrumb>
|
|
@@ -209,7 +266,7 @@ export default defineComponent({
|
|
state.tabName && styles.noSearchContainer
|
|
state.tabName && styles.noSearchContainer
|
|
]}>
|
|
]}>
|
|
{state.list.map((item: any) => (
|
|
{state.list.map((item: any) => (
|
|
- <div class={styles.sectionItem}>
|
|
|
|
|
|
+ <div class={styles.sectionItem} onClick={() => onDetail(item)}>
|
|
<div class={styles.img}>
|
|
<div class={styles.img}>
|
|
<img referrerpolicy="no-referrer" src={item.titleImg} />
|
|
<img referrerpolicy="no-referrer" src={item.titleImg} />
|
|
</div>
|
|
</div>
|
|
@@ -247,6 +304,13 @@ export default defineComponent({
|
|
)}
|
|
)}
|
|
</NScrollbar>
|
|
</NScrollbar>
|
|
</div>
|
|
</div>
|
|
|
|
+
|
|
|
|
+ {/* 应用内预览或上课 */}
|
|
|
|
+ <PreviewWindow
|
|
|
|
+ v-model:show={state.previewModal}
|
|
|
|
+ type="music"
|
|
|
|
+ params={state.previewParams}
|
|
|
|
+ />
|
|
</div>
|
|
</div>
|
|
);
|
|
);
|
|
}
|
|
}
|