import { computed, defineComponent, onBeforeUnmount, onMounted, reactive, ref, watch } from "vue"; import styles from "./index.module.less"; import store from 'store' import Title from "./title"; import icons from "./image/headerTop.json"; import { Badge, Circle, Popover, Popup } from "vant"; import { metronomeData } from "../../helpers/metronome"; import Speed from "./speed"; import { evaluatingData, handleEndBegin, handleStartEvaluat } from "/src/view/evaluating"; import Settting from "./settting"; import ModeTypeMode from "./mode-type-mode"; import state, { handleChangeSection, handleResetPlay, handleRessetState, togglePlay } from "/src/state"; import { getAudioCurrentTime } from "/src/view/audio-list"; import { followData, toggleFollow } from "/src/view/follow-practice"; import { api_back, api_suspendPlay } from "/src/helpers/communication"; import MusicType from "./music-type"; import { handleNoEndExit } from "../custom-plugins/recording-time"; import { handle_stopFollow } from "../follow-model"; export const headData = reactive({ speedShow: false, musicTypeShow: false, modeMode: true, // 模式弹框 settingMode: false, // 设置弹框 }); /** 关闭模式选择 */ export const handleCloseModeMode = (type = false) => { headData.modeMode = type; }; export default defineComponent({ name: "header-top", setup() { /** 切换模式 */ const handleChangeModeType = (value: "practise" | "follow" | "evaluating") => { if (value === "evaluating") { handleStartEvaluat(); } else if (value === "follow") { toggleFollow(); } headData.modeMode = false; }; /** 设置按钮 */ const settingBtn = computed(() => { // 音频播放中 禁用 if (state.playState === "play") return { display: true, disabled: true }; // 评测开始 禁用, 跟练开始 禁用 if (evaluatingData.startBegin || followData.start) return { display: true, disabled: true }; return { display: true, disabled: false, }; }); /** 转谱按钮 */ const converBtn = computed(() => { // 音频播放中 禁用 if (state.playState === "play") return { display: true, disabled: true }; // 评测开始 禁用 if (evaluatingData.startBegin || followData.start) return { display: true, disabled: true }; return { disabled: false, display: true, }; }); /** 速度按钮 */ const speedBtn = computed(() => { // 选择模式 不显示 if (headData.modeMode) return { display: false, disabled: false }; // 音频播放中 禁用 if (state.playState === "play") return { display: true, disabled: true }; // 评测模式 禁用 if (state.modeType === "evaluating") return { display: true, disabled: true }; // 跟练模式 不显示 if (state.modeType === "follow") return { display: false, disabled: true }; return { disabled: false, display: true, }; }); /** 指法按钮 */ const fingeringBtn = computed(() => { // 没有指法 不显示 if (!state.fingeringInfo.name) return { display: false, disabled: true }; // 选择模式 不显示 if (headData.modeMode) return { display: false, disabled: false }; // 音频播放中 禁用 if (state.playState === "play") return { display: true, disabled: true }; // 评测模式 不显示,跟练模式 不显示 if (["evaluating", "follow"].includes(state.modeType)) return { display: false, disabled: true }; return { disabled: false, display: true, }; }); /** 选段按钮 */ const selectBtn = computed(() => { // 选择模式 不显示 if (headData.modeMode) return { display: false, disabled: false }; // 音频播放中 禁用 if (state.playState === "play") return { display: true, disabled: true }; // 评测模式 不显示,跟练模式 不显示 if (["evaluating", "follow"].includes(state.modeType)) return { display: false, disabled: true }; return { disabled: false, display: true, }; }); /** 原声按钮 */ const originBtn = computed(() => { // 选择模式 不显示 if (headData.modeMode) return { display: false, disabled: false }; // 跟练模式 不显示 if (state.modeType === "follow") return { display: false, disabled: true }; // 评测开始 禁用 if (state.modeType === "evaluating") return { display: true, disabled: true }; return { disabled: false, display: true, }; }); /** 模式切换按钮 */ const toggleBtn = computed(() => { // 选择模式 不显示 if (headData.modeMode) return { display: false, disabled: false }; // 跟练开始 禁用 if (followData.start) return { display: true, disabled: true }; return { display: true, disabled: false, }; }); /** 播放按钮 */ const playBtn = computed(() => { // 选择模式 不显示 if (headData.modeMode) return { display: false, disabled: false }; // 评测模式 不显示,跟练模式 不显示 if (["evaluating", "follow"].includes(state.modeType)) return { display: false, disabled: true }; return { display: true, disabled: false, }; }); /** 重播按钮 */ const resetBtn = computed(() => { // 选择模式 不显示 if (headData.modeMode) return { display: false, disabled: false }; // 评测模式 不显示,跟练模式 不显示 if (["evaluating", "follow"].includes(state.modeType)) return { display: false, disabled: true }; // 播放进度为0 不显示, 不是暂停状态不显示 const currentTime = getAudioCurrentTime(); if (currentTime === 0 || state.playState !== "paused") return { display: false, disabled: true }; return { display: true, disabled: false, }; }); /** 返回 */ const handleBack = () => { handleNoEndExit(); api_back(); }; onMounted(() => { api_suspendPlay(() => { if (state.modeType === "practise") { togglePlay("paused"); } else if (state.modeType === "evaluating") { handleEndBegin(); } else if (state.modeType === "follow") { handle_stopFollow(); } }); }); // 设置改变触发 watch(state.setting, () => { store.set("musicscoresetting", state.setting); }); return () => (