import { defineComponent, ref, nextTick, onMounted, watch } from 'vue'; import styles from './musicScore.module.less'; import qs from 'query-string'; import iconStart from '../image/icon-start.svg'; import { listenerMessage, postMessage } from '@/helpers/native-message'; import { Loading, Skeleton } from 'vant'; import { usePageVisibility } from '@vant/use'; import { useRoute } from 'vue-router'; import { browser } from '@/helpers/utils'; import { storage } from '@/helpers/storage'; import { ACCESS_TOKEN } from '@/store/mutation-types'; export default defineComponent({ name: 'musicScore', props: { pageVisibility: { type: String, default: '' }, show: { type: Boolean, default: false }, music: { type: Object, default: () => {} }, activeModel: { type: Boolean } }, emits: ['setIframe'], setup(props, { emit }) { const browserInfo = browser(); const route = useRoute(); const isLoading = 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 iframeRef = ref(); const isLoaded = ref(false); const renderError = ref(false); const renderSuccess = ref(false); const Authorization = storage.get(ACCESS_TOKEN); const origin = /(localhost|192)/.test(location.host) ? 'https://test.lexiaoya.cn' : location.origin; let src = qs.stringifyUrl({ url: origin + '/instrument', query: { id: props.music.content, modelType: 'practise', Authorization: Authorization } }); const checkView = () => { fetch(src) .then(() => { renderSuccess.value = true; renderError.value = false; }) .catch(err => { renderError.value = true; }); }; watch(props.music, () => { if (renderSuccess.value) return; renderError.value = false; if (props.music.display) { checkView(); } }); // 去云教练完整版 const gotoAccomany = () => { if (isLoading.value) return; if (!browserInfo.ios) { isLoading.value = true; } const Authorization = storage.get(ACCESS_TOKEN); const origin = /(localhost|192)/.test(location.host) ? 'https://test.lexiaoya.cn' : location.origin; let src = qs.stringifyUrl({ url: origin + '/instrument', query: { id: props.music.content, Authorization: Authorization } }); postMessage( { api: 'openAccompanyWebView', content: { url: src, orientation: 0, isHideTitle: true, statusBarTextColor: false, isOpenLight: true, c_orientation: 0 } }, () => { if (browserInfo.ios) { isLoading.value = true; } } ); }; listenerMessage('webViewOnResume', () => { isLoading.value = false; }); return () => (