|
@@ -0,0 +1,97 @@
|
|
|
+import { defineComponent, ref, watch } from 'vue';
|
|
|
+import styles from './index.module.less';
|
|
|
+import qs from 'query-string';
|
|
|
+import { storage } from '@/helpers/storage';
|
|
|
+import { ACCESS_TOKEN } from '@/store/mutation-types';
|
|
|
+
|
|
|
+export function vaildMusicScoreUrl() {
|
|
|
+ const url: string = window.location.href;
|
|
|
+ let returnUrl = '';
|
|
|
+ if (/192/.test(url) || /localhost/.test(url)) {
|
|
|
+ //本地环境
|
|
|
+ returnUrl = 'https://test.kt.colexiu.com';
|
|
|
+ } else if (/test/.test(url)) {
|
|
|
+ // dev 环境
|
|
|
+ returnUrl = 'https://test.kt.colexiu.com';
|
|
|
+ } else if (/dev/.test(url)) {
|
|
|
+ returnUrl = 'https://dev.kt.colexiu.com';
|
|
|
+ } else {
|
|
|
+ returnUrl = 'https://mec.colexiu.com';
|
|
|
+ }
|
|
|
+ return returnUrl;
|
|
|
+}
|
|
|
+
|
|
|
+export default defineComponent({
|
|
|
+ name: 'tempo-item',
|
|
|
+ props: {
|
|
|
+ pageVisibility: {
|
|
|
+ type: String,
|
|
|
+ default: ''
|
|
|
+ },
|
|
|
+ show: {
|
|
|
+ type: Boolean,
|
|
|
+ default: false
|
|
|
+ },
|
|
|
+ activeModel: {
|
|
|
+ type: Boolean,
|
|
|
+ default: false
|
|
|
+ },
|
|
|
+ item: {
|
|
|
+ type: Object,
|
|
|
+ default: () => ({})
|
|
|
+ }
|
|
|
+ },
|
|
|
+ emits: ['setIframe'],
|
|
|
+ setup(props, { emit }) {
|
|
|
+ const iframeRef = ref();
|
|
|
+ const isLoading = ref(false);
|
|
|
+ const isLoaded = ref(false);
|
|
|
+
|
|
|
+ /** 页面显示和隐藏 */
|
|
|
+ watch(
|
|
|
+ () => props.pageVisibility,
|
|
|
+ value => {
|
|
|
+ if (value == 'hidden') {
|
|
|
+ isLoading.value = false;
|
|
|
+ }
|
|
|
+ if (value == 'hidden' && props.show) {
|
|
|
+ iframeRef.value?.contentWindow?.postMessage(
|
|
|
+ { api: 'setPlayState' },
|
|
|
+ '*'
|
|
|
+ );
|
|
|
+ }
|
|
|
+ }
|
|
|
+ );
|
|
|
+ // 是否显示当前曲谱
|
|
|
+ watch(
|
|
|
+ () => props.show,
|
|
|
+ val => {
|
|
|
+ if (!val) {
|
|
|
+ iframeRef.value?.contentWindow?.postMessage(
|
|
|
+ { api: 'setPlayState' },
|
|
|
+ '*'
|
|
|
+ );
|
|
|
+ }
|
|
|
+ }
|
|
|
+ );
|
|
|
+
|
|
|
+ const Authorization = storage.get(ACCESS_TOKEN);
|
|
|
+ // const src = `${location.origin}/classroom-app/#/tempo-practice?dataJson=${props.dataJson}&Authorization=${Authorization}&modeType=courseware`;
|
|
|
+ const src = `${vaildMusicScoreUrl()}/instrument/#/view-figner?Authorization=${Authorization}&code=${
|
|
|
+ props.item.content
|
|
|
+ }&type=listenMode`;
|
|
|
+ return () => (
|
|
|
+ <div class={styles.tempoItem}>
|
|
|
+ <iframe
|
|
|
+ ref={iframeRef}
|
|
|
+ onLoad={(e: Event) => {
|
|
|
+ emit('setIframe', iframeRef.value);
|
|
|
+ isLoaded.value = true;
|
|
|
+ }}
|
|
|
+ class={[styles.container]}
|
|
|
+ frameborder="0"
|
|
|
+ src={src}></iframe>
|
|
|
+ </div>
|
|
|
+ );
|
|
|
+ }
|
|
|
+});
|