|
@@ -1,4 +1,4 @@
|
|
-import { defineComponent, onMounted, reactive, ref } from 'vue';
|
|
|
|
|
|
+import { defineComponent, onMounted, onUnmounted, reactive, ref } from 'vue';
|
|
import styles from './index.module.less';
|
|
import styles from './index.module.less';
|
|
import { postMessage } from '@/helpers/native-message';
|
|
import { postMessage } from '@/helpers/native-message';
|
|
import icon_title from './images/icon-title.png';
|
|
import icon_title from './images/icon-title.png';
|
|
@@ -33,9 +33,9 @@ export default defineComponent({
|
|
dataJson: {
|
|
dataJson: {
|
|
type: Object,
|
|
type: Object,
|
|
default: () => {}
|
|
default: () => {}
|
|
- }
|
|
|
|
|
|
+ }
|
|
},
|
|
},
|
|
- setup() {
|
|
|
|
|
|
+ setup(props) {
|
|
const route = useRoute();
|
|
const route = useRoute();
|
|
const state = reactive({
|
|
const state = reactive({
|
|
platform: route.query.platform, // microapp 老师端应用里面打开单独处理返回逻辑
|
|
platform: route.query.platform, // microapp 老师端应用里面打开单独处理返回逻辑
|
|
@@ -59,7 +59,8 @@ export default defineComponent({
|
|
{ text: '180', value: 180, color: '#060606' },
|
|
{ text: '180', value: 180, color: '#060606' },
|
|
{ text: '190', value: 190, color: '#060606' },
|
|
{ text: '190', value: 190, color: '#060606' },
|
|
{ text: '200', value: 200, color: '#060606' }
|
|
{ text: '200', value: 200, color: '#060606' }
|
|
- ]
|
|
|
|
|
|
+ ],
|
|
|
|
+ dataJson: {} as any
|
|
});
|
|
});
|
|
// 返回
|
|
// 返回
|
|
const goback = () => {
|
|
const goback = () => {
|
|
@@ -112,17 +113,74 @@ export default defineComponent({
|
|
}
|
|
}
|
|
};
|
|
};
|
|
|
|
|
|
|
|
+ // {"element":"jianpu","beat":"4-4","barLine":"1","tempo":["1","2","3"]}'
|
|
|
|
+ const onIframeHandle = (ev: MessageEvent) => {
|
|
|
|
+ // 获取配置
|
|
|
|
+ if (ev.data.api === 'getTempoSetting') {
|
|
|
|
+ window.parent.postMessage(
|
|
|
|
+ {
|
|
|
|
+ api: 'getTempoSetting',
|
|
|
|
+ data: JSON.stringify({
|
|
|
|
+ setting: {
|
|
|
|
+ element: setting.element,
|
|
|
|
+ beat: setting.beat,
|
|
|
|
+ barLine: setting.barLine,
|
|
|
|
+ tempo: setting.tempo
|
|
|
|
+ },
|
|
|
|
+ coverImg: ''
|
|
|
|
+ })
|
|
|
|
+ },
|
|
|
|
+ '*'
|
|
|
|
+ );
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ if (ev.data.api === 'setPlayState') {
|
|
|
|
+ if (ev.data.data) {
|
|
|
|
+ handlePlay();
|
|
|
|
+ } else {
|
|
|
|
+ handleStop();
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ };
|
|
|
|
+
|
|
onMounted(() => {
|
|
onMounted(() => {
|
|
|
|
+ try {
|
|
|
|
+ let dataJson = props.dataJson;
|
|
|
|
+ if (route.query.dataJson) {
|
|
|
|
+ dataJson = JSON.parse(route.query.dataJson as any);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ setting.element = dataJson.element;
|
|
|
|
+ setting.beat = dataJson.beat;
|
|
|
|
+ setting.barLine = dataJson.barLine;
|
|
|
|
+ setting.tempo = dataJson.tempo;
|
|
|
|
+
|
|
|
|
+ state.dataJson = dataJson;
|
|
|
|
+ } catch {
|
|
|
|
+ //
|
|
|
|
+ }
|
|
|
|
+
|
|
state.speedList.forEach((item: any) => {
|
|
state.speedList.forEach((item: any) => {
|
|
if (item.value === setting.speed) item.color = '#1CACF1';
|
|
if (item.value === setting.speed) item.color = '#1CACF1';
|
|
});
|
|
});
|
|
renderScore();
|
|
renderScore();
|
|
|
|
+
|
|
|
|
+ window.addEventListener('message', onIframeHandle);
|
|
|
|
+ });
|
|
|
|
+
|
|
|
|
+ onUnmounted(() => {
|
|
|
|
+ window.removeEventListener('message', onIframeHandle);
|
|
});
|
|
});
|
|
return () => (
|
|
return () => (
|
|
- <div class={[styles.tempoPractice, state.win === 'pc' ? styles.pc : '']}>
|
|
|
|
|
|
+ <div
|
|
|
|
+ class={[
|
|
|
|
+ styles.tempoPractice,
|
|
|
|
+ state.win === 'pc' ? styles.pc : '',
|
|
|
|
+ state.win === 'modal' ? styles.modal : ''
|
|
|
|
+ ]}>
|
|
<div class={styles.head}>
|
|
<div class={styles.head}>
|
|
<div
|
|
<div
|
|
- class={styles.back}
|
|
|
|
|
|
+ class={[styles.back, styles.iconBack]}
|
|
onClick={goback}
|
|
onClick={goback}
|
|
style={{ cursor: 'pointer' }}>
|
|
style={{ cursor: 'pointer' }}>
|
|
<img src={icon_back} />
|
|
<img src={icon_back} />
|
|
@@ -267,7 +325,10 @@ export default defineComponent({
|
|
</div>
|
|
</div>
|
|
|
|
|
|
<Popup v-model:show={state.settingStatus} class={styles.settingPopup}>
|
|
<Popup v-model:show={state.settingStatus} class={styles.settingPopup}>
|
|
- <SettingModal onClose={() => (state.settingStatus = false)} />
|
|
|
|
|
|
+ <SettingModal
|
|
|
|
+ dataJson={state.dataJson}
|
|
|
|
+ onClose={() => (state.settingStatus = false)}
|
|
|
|
+ />
|
|
</Popup>
|
|
</Popup>
|
|
</div>
|
|
</div>
|
|
);
|
|
);
|