import { computed, defineComponent, onMounted, reactive } from 'vue'; import styles from './index.module.less'; import { Button, showToast } from 'vant'; import { barLineList, beatList, elementList, renderScore, setting, tempo4, tempo8 } from '../setting'; import { getImage } from '../images/music'; import { hendleEndTick } from '../tick'; import { hendleEndBeat } from '../beat-tick'; import deepClone from '@/helpers/deep-clone'; import { useRoute } from 'vue-router'; export default defineComponent({ emits: ['close'], props: { dataJson: { type: Object, default: () => {} } }, name: 'setting-modal', setup(props, { emit }) { const route = useRoute(); const { element, beat, barLine, tempo } = props.dataJson; const state = reactive({ win: route.query.win, element: element || ('jianpu' as 'jianpu' | 'staff'), // 元素 beat: beat || ('4-4' as '4-2' | '4-3' | '4-4' | '8-3' | '8-6'), // 拍号 barLine: barLine || ('1' as '1' | '2' | '4'), // 小节数 tempo: tempo || (['1', '2', '3'] as any[]) // 节奏形筛选 }); const tempoList = computed(() => { if (['4-2', '4-3', '4-4'].includes(state.beat)) { return tempo4; } else if (['8-3', '8-6'].includes(state.beat)) { return tempo8; } return tempo4; }); const onChangeTempo = (item: any) => { const index = state.tempo.indexOf(item); if (index !== -1) { state.tempo.splice(index, 1); } else { state.tempo.push(item); } }; const handleStop = () => { setting.playState = 'pause'; if (setting.playType === 'beat') { hendleEndTick(); } else { hendleEndBeat(); } }; const onSubmit = () => { if (state.tempo.length <= 0) { showToast('节奏型不能为空'); return; } let status = false; // 是否有更改 if ( setting.element !== state.element || setting.beat !== state.beat || setting.barLine !== state.barLine || setting.tempo.join(',') !== state.tempo.join(',') ) { status = true; } // 判断是否有数据变化 handleStop(); if (status) { setting.element = JSON.parse(JSON.stringify(state.element)); setting.beat = JSON.parse(JSON.stringify(state.beat)); //state.beat; setting.barLine = JSON.parse(JSON.stringify(state.barLine)); // state.barLine; setting.tempo = JSON.parse(JSON.stringify(state.tempo)); // state.tempo; renderScore(); } emit('close'); }; return () => (