| 
					
				 | 
			
			
				@@ -1,4 +1,12 @@ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-import { computed, defineComponent, nextTick, onMounted, onUnmounted, reactive, ref } from 'vue'; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  computed, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  defineComponent, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  nextTick, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  onMounted, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  onUnmounted, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  reactive, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  ref 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+} from 'vue'; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import styles from './detail.module.less'; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import CBreadcrumb from '/src/components/CBreadcrumb'; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import { useRoute } from 'vue-router'; 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -10,7 +18,7 @@ import { api_musicSheetPage } from '../xiaoku-ai/api'; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import { formatUsedNum } from '.'; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import { vaildMusicScoreUrl } from '/src/utils/urlUtils'; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import { exitFullscreen, fscreen } from '/src/utils'; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-import {state as baseState} from '/src/state'; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import { state as baseState } from '/src/state'; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import { useUserStore } from '/src/store/modules/users'; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import PreviewWindow from '../preview-window'; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -21,19 +29,19 @@ export default defineComponent({ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     const userStore = useUserStore(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     const routerList = ref([ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				       { name: 'AI学练', path: '/xiaoku-list' }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      { name: '全部曲目', path: '' } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      { name: '曲目列表', path: '' } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     ]); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     const forms = reactive({ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				       page: 1, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				       rows: 32, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				       status: true, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      searchType: '', 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      searchType: '' 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     }); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     const state = reactive({ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				       loading: true, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				       finshed: false, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				       reshing: false, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      tabName: '' as any, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      tabName: '' as '' | 'RECOMMEND' | 'HOT' | 'NEW', 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				       list: [] as any, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				       allSearch: { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         name: '', 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -45,31 +53,45 @@ export default defineComponent({ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				       }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				       hotSearch: { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         name: '', 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        musicalInstrumentId: null as any 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				       }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				       newSearch: { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         name: '', 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        musicalInstrumentId: null as any 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				       }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				       recommendSearch: { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         name: '', 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        musicalInstrumentId: null as any 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				       }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				       previewModal: false, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				       previewParams: { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         type: '', 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         src: '' 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      } as any, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      } as any 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     }); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     const searchValue = computed(() => { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      if(state.tabName === 'RECOMMEND') { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        return state.recommendSearch.name 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      } else if(state.tabName === 'HOT') { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        return state.hotSearch.name 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      } else if(state.tabName === 'NEW') { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        return state.newSearch.name 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      if (state.tabName === 'RECOMMEND') { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        return state.recommendSearch.name; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      } else if (state.tabName === 'HOT') { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        return state.hotSearch.name; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      } else if (state.tabName === 'NEW') { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        return state.newSearch.name; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				       } else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        return state.allSearch.name 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        return state.allSearch.name; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				       } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    }) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    }); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    const musicalInstrumentId = computed(() => { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      let id = state.allSearch.musicalInstrumentId; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      if (state.tabName === 'RECOMMEND') { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        id = state.recommendSearch.musicalInstrumentId; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      } else if (state.tabName === 'HOT') { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        id = state.hotSearch.musicalInstrumentId; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      } else if (state.tabName === 'NEW') { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        id = state.newSearch.musicalInstrumentId; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      return id; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    }); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     const onSearch = async (item: any) => { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				       forms.page = 1; 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -77,20 +99,32 @@ export default defineComponent({ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				       state.finshed = false; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				       const { subjectId, ...res } = item; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-       
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      state.allSearch = Object.assign(state.allSearch, { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        ...res, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        musicalInstrumentId: subjectId, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        subjectId: null 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      }); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      if (state.tabName === 'HOT') { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        state.hotSearch = Object.assign(state.hotSearch, { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          musicalInstrumentId: subjectId 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        }); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      } else if (state.tabName == 'NEW') { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        state.newSearch = Object.assign(state.newSearch, { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          musicalInstrumentId: subjectId 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        }); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      } else if (state.tabName === 'RECOMMEND') { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        state.recommendSearch = Object.assign(state.recommendSearch, { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          musicalInstrumentId: subjectId 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        }); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      } else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        state.allSearch = Object.assign(state.allSearch, { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          ...res, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          musicalInstrumentId: subjectId, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          subjectId: null 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        }); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				       getList(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				       nextTick(() => { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        __initSpin() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      }) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        __initSpin(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      }); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     }; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     const spinRef = ref(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     const handleResh = () => { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				       if (state.loading || state.finshed) return; 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -99,26 +133,27 @@ export default defineComponent({ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     }; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     const getList = async () => { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      state.loading = true; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      if(forms.page == 1) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        state.loading = true; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				       let res = {} as any; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      const { ...result } = forms; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      let params = { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        ...result, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        searchType: state.tabName 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      } as any; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      if (state.tabName === 'RECOMMEND') { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        params = Object.assign(params, state.recommendSearch); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      } else if (state.tabName === 'HOT') { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        params = Object.assign(params, state.hotSearch); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      } else if (state.tabName === 'NEW') { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        params = Object.assign(params, state.newSearch); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      } else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        params.name = state.allSearch.name; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        const { ...more } = state.allSearch; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        params = Object.assign(params, { ...more }); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				       try { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        const { ...result } = forms; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        let params = { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-          ...result, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-          searchType: state.tabName 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        } as any 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        if(state.tabName === 'RECOMMEND') { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-          params = Object.assign(params, state.recommendSearch); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        } else if(state.tabName === 'HOT') { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-          params = Object.assign(params, state.hotSearch); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        } else if(state.tabName === 'NEW') { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-          params = Object.assign(params, state.newSearch); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        } else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-          params.name = state.allSearch.name 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-          const { ...more } = state.allSearch 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-          params = Object.assign(params, { ...more }); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-          // params.audioPlayTypes =  audioPlayTypes 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         res = await api_musicSheetPage(params); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				       } catch (error) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         console.log(error); 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -134,9 +169,18 @@ export default defineComponent({ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				           item.audioPlayTypeArray = item.audioPlayTypes 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             ? item.audioPlayTypes.split(',') 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             : []; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          if (item.musicSheetName) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            const regex = new RegExp(params.name, 'gi'); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            const highlightedText = item.musicSheetName.replace( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+              regex, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+              `<span>$&</span>` 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            ); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            item.musicNameReg = highlightedText; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         }); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         state.list = [...state.list, ...res.data.rows]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        state.finshed = forms.page >= res.data.pages;  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        state.finshed = forms.page >= res.data.pages; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				       } else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         state.finshed = true; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				       } 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -144,13 +188,13 @@ export default defineComponent({ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     }; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     const __initSpin = () => { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      const obv = new IntersectionObserver(entries => { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        if (entries[0].intersectionRatio > 0) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-          handleResh(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      }); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      obv.observe(spinRef.value); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      // const obv = new IntersectionObserver(entries => { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      //   if (entries[0].intersectionRatio > 0) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      //     handleResh(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      //   } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      // }); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      // obv.observe(spinRef.value); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    }; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     // 查看详情 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     const onDetail = (item: any) => { 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -160,9 +204,7 @@ export default defineComponent({ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         item.id 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				       }&Authorization=${ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         userStore.getToken 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      }&musicRenderType=${lineType}&showGuide=true&part-index=${ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        0 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      }`; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      }&musicRenderType=${lineType}&showGuide=true&part-index=${0}`; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				       if (state.allSearch.musicalInstrumentId && !state.tabName) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         src += '&instrumentId=' + state.allSearch.musicalInstrumentId; 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -181,28 +223,28 @@ export default defineComponent({ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				       } else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         window.open(src, +new Date() + ''); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				       } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    }; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     const iframeHandle = (ev: MessageEvent) => { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				       if (ev.data?.api === 'onAttendToggleMenu') { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        exitFullscreen() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        exitFullscreen(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         state.previewModal = !state.previewModal; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				       } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    }; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     onMounted(async () => { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      if(route.query.type) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        state.tabName = route.query.type 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      if (route.query.type) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        state.tabName = route.query.type as any; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				       } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				       // getList(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      __initSpin() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      __initSpin(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				       window.addEventListener('message', iframeHandle); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     }); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     onUnmounted(() => { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      window.removeEventListener('message', iframeHandle) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    }) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      window.removeEventListener('message', iframeHandle); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    }); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     return () => ( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				       <div class={styles.xiaokuDetail}> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         <CBreadcrumb list={routerList.value}></CBreadcrumb> 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -217,31 +259,31 @@ export default defineComponent({ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				               forms.page = 1; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				               state.finshed = false; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				               state.reshing = true; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-              state.list = [] 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+              state.list = []; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				               getList(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-              __initSpin() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+              __initSpin(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             }} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             v-slots={{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				               suffix: () => ( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 <TheSearch 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                  placeholder='请输入曲目名称' 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                  placeholder="请输入曲目名称" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                   round 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                   value={searchValue.value} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                   class={styles.inputSearch} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                   onSearch={val => { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    if(state.tabName === 'RECOMMEND') { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                      state.recommendSearch.name = val 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    } else if(state.tabName === 'HOT') { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                      state.hotSearch.name = val 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    } else if(state.tabName === 'NEW') { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                      state.newSearch.name = val 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    if (state.tabName === 'RECOMMEND') { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                      state.recommendSearch.name = val; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    } else if (state.tabName === 'HOT') { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                      state.hotSearch.name = val; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    } else if (state.tabName === 'NEW') { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                      state.newSearch.name = val; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                     } else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                      state.allSearch.name = val 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                      state.allSearch.name = val; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                     } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                     forms.page = 1; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                     state.finshed = false; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    state.list = [] 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    state.list = []; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                     getList(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                   }} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 /> 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -253,60 +295,95 @@ export default defineComponent({ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             <NTabPane name={`NEW`} tab={'最新曲目'}></NTabPane> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				           </NTabs> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-          <NScrollbar class={[[styles.wrapList, !state.loading && state.list.length === 0 && styles.wrapListEmpty]]}> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-              <div class={[styles.searchSection, state.tabName ? styles.searchSectionHide : '']}> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                <SearchGroupResources onSearch={(val: any) => { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                  onSearch(val) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                }} /> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-              </div> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-             
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            {state.list.length > 0 && <div 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-              class={[ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                styles.sectionContainer, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                state.tabName && styles.noSearchContainer 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-              ]}> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-              {state.list.map((item: any) => ( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                <div class={styles.sectionItem} onClick={() => onDetail(item)}> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                  <div class={styles.img}> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    <img referrerpolicy="no-referrer" src={item.titleImg} /> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                  </div> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                  <div class={styles.infos}> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    <div class={styles.topName}>{item.musicSheetName}</div> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    <div class={styles.types}> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                      <div class={styles.hot}> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                        <span>{formatUsedNum(item.usedNum)}</span> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                      </div> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                      {item.audioPlayTypes?.includes('SING') && ( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                        <div class={styles.sing}>演唱</div> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                      )} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                      {item.audioPlayTypes?.includes('PLAY') && ( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                        <div class={styles.song}>演奏</div> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                      )} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          <NScrollbar 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            class={[ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+              [ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                styles.wrapList, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                !state.loading && 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                  state.list.length === 0 && 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                  styles.wrapListEmpty 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+              ] 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            ]} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            onScroll={(e: any) => { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+              const clientHeight = e.target?.clientHeight; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+              const scrollTop = e.target?.scrollTop; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+              const scrollHeight = e.target?.scrollHeight; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+              // 是否到底,是否加载完 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+              if ( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                clientHeight + scrollTop + 20 >= scrollHeight && 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                !state.finshed && 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                !state.loading 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+              ) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                forms.page = forms.page + 1; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                getList(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+              } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            }} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            > 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            {/* , state.tabName ? styles.searchSectionHide : '' */} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            <NSpin show={state.loading}> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            <div class={styles.loadingSection}> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            <div class={[styles.searchSection]}> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+              <SearchGroupResources 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                type={state.tabName} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                musicalInstrumentId={musicalInstrumentId.value} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                onSearch={(val: any) => { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                  onSearch(val); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                }} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+              /> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            </div> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            {state.list.length > 0 && ( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+              <div 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                class={[ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                  styles.sectionContainer 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                  // state.tabName && styles.noSearchContainer 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                ]}> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                {state.list.map((item: any) => ( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                  <div 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    class={styles.sectionItem} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    onClick={() => onDetail(item)}> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    <div class={styles.img}> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                      <img referrerpolicy="no-referrer" src={item.titleImg} /> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    </div> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    <div class={styles.infos}> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                      <div class={styles.topName} v-html={item.musicNameReg}></div> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                      <div class={styles.types}> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        <div class={styles.hot}> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                          <span>{formatUsedNum(item.usedNum)}</span> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        </div> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        {item.audioPlayTypes?.includes('SING') && ( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                          <div class={styles.sing}>演唱</div> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        )} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        {item.audioPlayTypes?.includes('PLAY') && ( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                          <div class={styles.song}>演奏</div> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        )} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                      <div class={styles.author}>{item.composer}</div> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        <div class={styles.author}>{item.composer}</div> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                      </div> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                     </div> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                   </div> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                </div> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-              ))} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            </div>} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-             
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                ))} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+              </div> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            )} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            <div 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-              ref={spinRef} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-              class={[styles.loadingWrap, state.finshed && styles.showLoading]}> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            {/* <div 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+              // ref={spinRef} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+              class={[styles.loadingWrap, (state.finshed || !state.loading) && styles.showLoading]}> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				               <NSpin show={true}></NSpin> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            </div> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            </div> */} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             {!state.loading && state.list.length === 0 && ( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				               <div class={styles.empty}> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 <TheEmpty></TheEmpty> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				               </div> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             )} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            </div> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            </NSpin> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				           </NScrollbar> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         </div> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         {/* 应用内预览或上课 */} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      <PreviewWindow 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        <PreviewWindow 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				           v-model:show={state.previewModal} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				           type="music" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				           params={state.previewParams} 
			 |