|
@@ -28,8 +28,8 @@ import {
|
|
|
import TheSearch from '/src/components/TheSearch';
|
|
|
import { IMusicItem } from './type';
|
|
|
import icon_arrow from './images/icon_arrow.png';
|
|
|
-import icon_play from './images/icon_play.png';
|
|
|
-import icon_pause from './images/icon_pause.png';
|
|
|
+// import icon_play from './images/icon_play.png';
|
|
|
+// import icon_pause from './images/icon_pause.png';
|
|
|
import icon_goXiaoku from './images/icon_goXiaoku.png';
|
|
|
import icon_favitor from '/src/common/images/icon-collect-default.png';
|
|
|
import icon_favitorActive from '/src/common/images/icon-collect-active.png';
|
|
@@ -44,8 +44,8 @@ import { useCatchStore } from '/src/store/modules/catchData';
|
|
|
import {
|
|
|
api_materialFavorite,
|
|
|
api_materialFavoriteStatus,
|
|
|
- api_musicSheetPage,
|
|
|
- api_subjectList
|
|
|
+ api_musicSheetPage
|
|
|
+ // api_subjectList
|
|
|
} from '../xiaoku-ai/api';
|
|
|
import { useUserStore } from '/src/store/modules/users';
|
|
|
import Musicguide from '@/custom-plugins/guide-page/music-guide';
|
|
@@ -53,7 +53,9 @@ import TheEmpty from '/src/components/TheEmpty';
|
|
|
import { modalClickMask, state } from '/src/state';
|
|
|
import { useResizeObserver } from '@vueuse/core';
|
|
|
import { vaildMusicScoreUrl } from '/src/utils/urlUtils';
|
|
|
-import { getInstrumentName, sortMusical, trackToCode } from '/src/utils';
|
|
|
+import { getInstrumentName, sortMusical } from '/src/utils';
|
|
|
+import { audioPlayType } from '/src/utils/contants';
|
|
|
+import CCascader from '/src/components/CCascader';
|
|
|
|
|
|
export default defineComponent({
|
|
|
name: 'XiaokuMusic',
|
|
@@ -67,6 +69,7 @@ export default defineComponent({
|
|
|
rows: 20,
|
|
|
status: true,
|
|
|
name: '', // 关键词
|
|
|
+ audioPlayTypes: '',
|
|
|
musicSheetCategoriesId: route.query.id || ''
|
|
|
});
|
|
|
const data = reactive({
|
|
@@ -75,6 +78,8 @@ export default defineComponent({
|
|
|
reshing: false,
|
|
|
tags: [] as any[],
|
|
|
tagIndex: 0,
|
|
|
+ musicalInstrumentId: '',
|
|
|
+ musicSubject: '',
|
|
|
list: [] as unknown as IMusicItem[],
|
|
|
listActive: 0,
|
|
|
musicInstrumentIndex: 0,
|
|
@@ -84,31 +89,54 @@ export default defineComponent({
|
|
|
showPreivew: false,
|
|
|
previewUrl: '',
|
|
|
showCloseBtn: true,
|
|
|
+ audioPlayTypeList: [] as any,
|
|
|
iframeSrc: '',
|
|
|
showMusicImg: 'staff' as 'staff' | 'first' | 'fixed', // 显示哪种曲谱
|
|
|
trackList: [] as any, // 可筛选的分轨信息
|
|
|
showTransBtn: true, // 是否显示转谱按钮
|
|
|
trackName: '切换声轨' as any // 分轨名字
|
|
|
});
|
|
|
+ const subjects = ref('');
|
|
|
const showGuide = ref(false);
|
|
|
const userStore = useUserStore();
|
|
|
let musicsrc = '';
|
|
|
+ const formatParentCurrentValue = (list: any) => {
|
|
|
+ for (const item of list) {
|
|
|
+ if (item.instruments && item.instruments.length > 0) {
|
|
|
+ item.instruments.forEach((child: any) => {
|
|
|
+ child.columnName = '乐器';
|
|
|
+ });
|
|
|
+ item.children = item.instruments;
|
|
|
+ formatParentCurrentValue(item.instruments);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ };
|
|
|
const getSubjects = async () => {
|
|
|
// const res = await api_subjectList();
|
|
|
// if (Array.isArray(res?.data)) {
|
|
|
- const tempSubjectList = catchStore.getSubjectInstruments;
|
|
|
+ const tempSubjectList = catchStore.getSubjectList;
|
|
|
const subjectList = sessionStorage.getItem('musicSubjectList')
|
|
|
? JSON.parse(sessionStorage.getItem('musicSubjectList') as any)
|
|
|
: [];
|
|
|
const resultList: any[] = [];
|
|
|
+ console.log(tempSubjectList, subjectList, 'subjectList');
|
|
|
tempSubjectList.forEach((item: any) => {
|
|
|
const hasItem = subjectList.find((s: any) => s.id === item.id);
|
|
|
if (hasItem) {
|
|
|
resultList.push(item);
|
|
|
}
|
|
|
});
|
|
|
+ // data.tags = [
|
|
|
+ // { name: '全部', id: 0, value: 0, label: '全部' },
|
|
|
+ // ...resultList
|
|
|
+ // ];
|
|
|
+ formatParentCurrentValue(resultList);
|
|
|
data.tags = [
|
|
|
- { name: '全部', id: 0, value: 0, label: '全部' },
|
|
|
+ {
|
|
|
+ columnName: '声部',
|
|
|
+ name: '全部声部',
|
|
|
+ id: ''
|
|
|
+ },
|
|
|
...resultList
|
|
|
];
|
|
|
// }
|
|
@@ -117,10 +145,16 @@ export default defineComponent({
|
|
|
data.loading = true;
|
|
|
let res = {} as any;
|
|
|
try {
|
|
|
+ const { audioPlayTypes, ...result } = forms;
|
|
|
res = await api_musicSheetPage({
|
|
|
- ...forms,
|
|
|
- // musicSubject: data.tagIndex ? data.tagIndex : ''
|
|
|
- musicalInstrumentId: data.tagIndex ? data.tagIndex : ''
|
|
|
+ ...result,
|
|
|
+ audioPlayTypes: audioPlayTypes
|
|
|
+ ? audioPlayTypes === 'PLAY_SING'
|
|
|
+ ? ['PLAY', 'SING']
|
|
|
+ : [audioPlayTypes]
|
|
|
+ : [],
|
|
|
+ musicSubject: data.musicSubject,
|
|
|
+ musicalInstrumentId: data.musicalInstrumentId
|
|
|
});
|
|
|
} catch (error) {
|
|
|
console.log(error);
|
|
@@ -170,6 +204,15 @@ export default defineComponent({
|
|
|
};
|
|
|
|
|
|
onMounted(async () => {
|
|
|
+ // 场景
|
|
|
+ const tempAudio = Object.keys(audioPlayType).map(key => {
|
|
|
+ return {
|
|
|
+ value: key,
|
|
|
+ label: audioPlayType[key]
|
|
|
+ };
|
|
|
+ });
|
|
|
+ data.audioPlayTypeList = [{ label: '全部', value: '' }, ...tempAudio];
|
|
|
+
|
|
|
// 获取声部列表
|
|
|
await catchStore.getSubjects();
|
|
|
// musicList-container
|
|
@@ -399,20 +442,6 @@ export default defineComponent({
|
|
|
}
|
|
|
return action;
|
|
|
});
|
|
|
- // const _actions = [
|
|
|
- // {
|
|
|
- // value: 'staff',
|
|
|
- // label: '五线谱'
|
|
|
- // },
|
|
|
- // {
|
|
|
- // value: 'first',
|
|
|
- // label: '首调'
|
|
|
- // },
|
|
|
- // {
|
|
|
- // value: 'fixed',
|
|
|
- // label: '固定调'
|
|
|
- // }
|
|
|
- // ];
|
|
|
|
|
|
// 解析xml,获取分轨信息
|
|
|
const analyzeXml = async () => {
|
|
@@ -618,11 +647,39 @@ export default defineComponent({
|
|
|
<div class={[styles.wrap, data.showPlayer ? styles.wrapBottom : '']}>
|
|
|
<div class={styles.content}>
|
|
|
<div class={styles.tools}>
|
|
|
- <NSpace
|
|
|
- style={{ width: '100%' }}
|
|
|
- size={[24, 12]}
|
|
|
- wrapItem={false}>
|
|
|
- <div
|
|
|
+ <NSpace style={{ width: '100%' }} size={[12, 6]} wrapItem={false}>
|
|
|
+ {data.audioPlayTypeList.map((item: any) => (
|
|
|
+ <NButton
|
|
|
+ round
|
|
|
+ textColor={
|
|
|
+ forms.audioPlayTypes === item.value ? '#fff' : '#000'
|
|
|
+ }
|
|
|
+ color={
|
|
|
+ forms.audioPlayTypes === item.value ? '#198CFE' : '#fff'
|
|
|
+ }
|
|
|
+ type={
|
|
|
+ forms.audioPlayTypes === item.value
|
|
|
+ ? 'primary'
|
|
|
+ : 'default'
|
|
|
+ }
|
|
|
+ onClick={() => {
|
|
|
+ forms.audioPlayTypes = item.value || '';
|
|
|
+ if (item.value === 'SING') {
|
|
|
+ data.musicalInstrumentId = '';
|
|
|
+ data.musicSubject = '';
|
|
|
+ }
|
|
|
+
|
|
|
+ data.reshing = true;
|
|
|
+ document
|
|
|
+ .querySelector('.musicList-container')
|
|
|
+ ?.scroll(0, 0);
|
|
|
+ handleGetList();
|
|
|
+ }}>
|
|
|
+ {item.label}
|
|
|
+ </NButton>
|
|
|
+ ))}
|
|
|
+
|
|
|
+ {/* <div
|
|
|
{...{
|
|
|
id: 'music-0'
|
|
|
}}>
|
|
@@ -642,7 +699,7 @@ export default defineComponent({
|
|
|
data.reshing = true;
|
|
|
document
|
|
|
.querySelector('.musicList-container')
|
|
|
- .scroll(0, 0);
|
|
|
+ ?.scroll(0, 0);
|
|
|
handleGetList();
|
|
|
}}
|
|
|
key={item.value}
|
|
@@ -690,7 +747,7 @@ export default defineComponent({
|
|
|
data.reshing = true;
|
|
|
document
|
|
|
.querySelector('.musicList-container')
|
|
|
- .scroll(0, 0);
|
|
|
+ ?.scroll(0, 0);
|
|
|
handleGetList();
|
|
|
}}>
|
|
|
{item.name}
|
|
@@ -698,22 +755,44 @@ export default defineComponent({
|
|
|
)
|
|
|
)}
|
|
|
</NSpace>
|
|
|
- </div>
|
|
|
+ </div> */}
|
|
|
</NSpace>
|
|
|
- <TheSearch
|
|
|
- style={{ marginLeft: 'auto' }}
|
|
|
- round
|
|
|
- border={false}
|
|
|
- onSearch={val => {
|
|
|
- forms.name = val;
|
|
|
- data.reshing = true;
|
|
|
- handleGetList();
|
|
|
- }}
|
|
|
- />
|
|
|
</div>
|
|
|
|
|
|
<div class={styles.contentWrap}>
|
|
|
<div class={[styles.musicList, 'musicList-container']}>
|
|
|
+ <div class={styles.searchSection}>
|
|
|
+ {forms.audioPlayTypes !== 'SING' && (
|
|
|
+ <CCascader
|
|
|
+ placeholder="全部乐器"
|
|
|
+ showPath
|
|
|
+ arrowType="small"
|
|
|
+ class={styles.instrumentSection}
|
|
|
+ v-model:value={subjects.value}
|
|
|
+ options={data.tags}
|
|
|
+ onMoreId={(val: any) => {
|
|
|
+ data.musicalInstrumentId = val.childId;
|
|
|
+ data.musicSubject = val.parentId;
|
|
|
+ data.reshing = true;
|
|
|
+ document
|
|
|
+ .querySelector('.musicList-container')
|
|
|
+ ?.scroll(0, 0);
|
|
|
+ handleGetList();
|
|
|
+ }}
|
|
|
+ />
|
|
|
+ )}
|
|
|
+
|
|
|
+ <TheSearch
|
|
|
+ style={{ marginLeft: 'auto' }}
|
|
|
+ round
|
|
|
+ border={false}
|
|
|
+ onSearch={val => {
|
|
|
+ forms.name = val;
|
|
|
+ data.reshing = true;
|
|
|
+ handleGetList();
|
|
|
+ }}
|
|
|
+ />
|
|
|
+ </div>
|
|
|
<div class={[styles.wrapList, 'music-wrap-list']}>
|
|
|
{data.list.map((item: IMusicItem, index) => {
|
|
|
return (
|