|
@@ -102,7 +102,7 @@ export const headTopData = reactive({
|
|
|
// 改变模式之前的状态
|
|
|
oldPlayType: "play",
|
|
|
// 记录切换模式前的状态
|
|
|
- oldModeType: "practise" as "practise" | "follow" | "evaluating"
|
|
|
+ oldModeType: "practise" as "practise" | "follow" | "evaluating",
|
|
|
});
|
|
|
|
|
|
export const headData = reactive({
|
|
@@ -115,7 +115,7 @@ let resetBtn: ComputedRef<{
|
|
|
disabled: boolean;
|
|
|
}>;
|
|
|
// 点击切换的时候才触发提醒
|
|
|
-let isClickMode = false
|
|
|
+let isClickMode = false;
|
|
|
/**
|
|
|
* 处理模式切换
|
|
|
* @param oldPlayType 没改变之前的播放模式
|
|
@@ -138,13 +138,13 @@ export function handlerModeChange(oldPlayType: "play" | "sing", oldPlaySource: I
|
|
|
resetBtn && (resetBtn.value.display = false);
|
|
|
}
|
|
|
// 当模式改变的时候 放在这里是因为需要等谱面加载完成之后再提示(点击按钮模式切换才提示)
|
|
|
- if(isClickMode){
|
|
|
+ if (isClickMode) {
|
|
|
showToast({
|
|
|
message: state.playType === "play" ? "已切换为演奏场景" : "已切换为演唱场景",
|
|
|
position: "top",
|
|
|
className: "selectionToast",
|
|
|
});
|
|
|
- isClickMode = false
|
|
|
+ isClickMode = false;
|
|
|
}
|
|
|
}
|
|
|
// 模式切换之后重新给times赋值
|
|
@@ -268,7 +268,8 @@ export default defineComponent({
|
|
|
// 是否显示引导
|
|
|
const showGuide = ref(false);
|
|
|
const showStudentGuide = ref(false);
|
|
|
- let displayFingeringCache = false // 指法缓存
|
|
|
+ const showWebGuide = ref(true);
|
|
|
+ let displayFingeringCache = false; // 指法缓存
|
|
|
/** 设置按钮 */
|
|
|
const settingBtn = computed(() => {
|
|
|
// 音频播放中 禁用
|
|
@@ -366,7 +367,7 @@ export default defineComponent({
|
|
|
/** 原声按钮 */
|
|
|
const originBtn = computed(() => {
|
|
|
// 没有音源不显示
|
|
|
- if(state.noMusicSource) return { display: false, disabled: false };
|
|
|
+ if (state.noMusicSource) return { display: false, disabled: false };
|
|
|
// 选择模式,跟练模式 不显示
|
|
|
//if (headTopData.modeType !== "show" || state.modeType === "follow") return { display: false, disabled: false };
|
|
|
if (state.modeType === "follow") return { display: false, disabled: false };
|
|
@@ -412,8 +413,8 @@ export default defineComponent({
|
|
|
// 演唱和演奏 都有数据的时间不禁用
|
|
|
if (songIndex > 0 && index > 0) {
|
|
|
// 音频播放中 禁用
|
|
|
- if(state.playState === "play"){
|
|
|
- return { display: true, disabled: true }
|
|
|
+ if (state.playState === "play") {
|
|
|
+ return { display: true, disabled: true };
|
|
|
}
|
|
|
return { display: true, disabled: false };
|
|
|
}
|
|
@@ -429,9 +430,9 @@ export default defineComponent({
|
|
|
if (state.isPercussion && state.platform === IPlatform.PC) return { display: false, disabled: false };
|
|
|
if(state.isCombineRender) return { display: false, disabled: false };
|
|
|
// 没有音源不显示
|
|
|
- if(state.noMusicSource) return { display: false, disabled: false };
|
|
|
+ if (state.noMusicSource) return { display: false, disabled: false };
|
|
|
// 不是演奏模式 影藏
|
|
|
- if(state.playType !== "play") return { display: false, disabled: false }
|
|
|
+ if (state.playType !== "play") return { display: false, disabled: false };
|
|
|
// 选择模式, url设置模式 不显示
|
|
|
if (headTopData.modeType !== "show" || !headTopData.showBack) return { display: false, disabled: false };
|
|
|
// 跟练开始, 评测开始 播放开始 隐藏
|
|
@@ -446,7 +447,7 @@ export default defineComponent({
|
|
|
/** 播放按钮 */
|
|
|
const playBtn = computed(() => {
|
|
|
// 没有音源不显示
|
|
|
- if(state.noMusicSource) return { display: false, disabled: false };
|
|
|
+ if (state.noMusicSource) return { display: false, disabled: false };
|
|
|
// 选择模式 不显示
|
|
|
if (headTopData.modeType !== "show") return { display: false, disabled: false };
|
|
|
// 评测模式 不显示,跟练模式 不显示
|
|
@@ -462,7 +463,7 @@ export default defineComponent({
|
|
|
/** 重播按钮 */
|
|
|
resetBtn = computed(() => {
|
|
|
// 没有音源不显示
|
|
|
- if(state.noMusicSource) return { display: false, disabled: false };
|
|
|
+ if (state.noMusicSource) return { display: false, disabled: false };
|
|
|
// 选择模式 不显示
|
|
|
if (headTopData.modeType !== "show") return { display: false, disabled: false };
|
|
|
// 评测模式 不显示,跟练模式 不显示
|
|
@@ -558,6 +559,16 @@ export default defineComponent({
|
|
|
if (res?.data?.api === "setPlayState") {
|
|
|
togglePlay("paused", true);
|
|
|
}
|
|
|
+ if(res?.data?.api === 'togglePlayState') {
|
|
|
+ // if(state.playState === "play") {
|
|
|
+ // togglePlay("paused");
|
|
|
+ // }
|
|
|
+ // if(state.playState === 'paused') {
|
|
|
+ // togglePlay("play");
|
|
|
+ // }
|
|
|
+ console.log('togglePlayState', state.playState)
|
|
|
+ togglePlay(state.playState === "play" ? "paused" : "play");
|
|
|
+ }
|
|
|
// 上课页面,按钮方向
|
|
|
if (res?.data?.api === "imagePos") {
|
|
|
if (res?.data.data) {
|
|
@@ -589,21 +600,38 @@ export default defineComponent({
|
|
|
} else {
|
|
|
showStudentGuide.value = true;
|
|
|
}
|
|
|
+
|
|
|
+ if (query.showWebGuide === "false") {
|
|
|
+ showWebGuide.value = false;
|
|
|
+ }
|
|
|
+
|
|
|
+ document.addEventListener("keydown", (e: KeyboardEvent) => {
|
|
|
+ if (e.code === "Tab") {
|
|
|
+ e.stopPropagation();
|
|
|
+ e.preventDefault();
|
|
|
+ // onStartPlayState();
|
|
|
+ togglePlay(state.playState === "play" ? "paused" : "play");
|
|
|
+ }
|
|
|
+ });
|
|
|
});
|
|
|
|
|
|
onUnmounted(() => {
|
|
|
window.removeEventListener("message", changePlay);
|
|
|
});
|
|
|
- const noticeBarWidth = ref<number>()
|
|
|
- watch(()=>smoothAnimationState.isShow.value, ()=>{
|
|
|
- // NoticeBar能不能滚动
|
|
|
- if((smoothAnimationState.isShow.value || state.isCombineRender) && isMusicList.value){
|
|
|
- nextTick(()=>{
|
|
|
- const widthCon = (document.querySelector("#noticeBarRollDom .van-notice-bar__content") as any)?.offsetWidth || undefined
|
|
|
- noticeBarWidth.value = widthCon
|
|
|
- })
|
|
|
- }
|
|
|
- },{ immediate: true })
|
|
|
+ const noticeBarWidth = ref<number>();
|
|
|
+ watch(
|
|
|
+ () => smoothAnimationState.isShow.value,
|
|
|
+ () => {
|
|
|
+ // NoticeBar能不能滚动
|
|
|
+ if ((smoothAnimationState.isShow.value || state.isCombineRender) && isMusicList.value) {
|
|
|
+ nextTick(() => {
|
|
|
+ const widthCon = (document.querySelector("#noticeBarRollDom .van-notice-bar__content") as any)?.offsetWidth || undefined;
|
|
|
+ noticeBarWidth.value = widthCon;
|
|
|
+ });
|
|
|
+ }
|
|
|
+ },
|
|
|
+ { immediate: true }
|
|
|
+ );
|
|
|
// 设置改变触发
|
|
|
watch(state.setting, () => {
|
|
|
console.log(state.setting, "state.setting");
|
|
@@ -654,61 +682,64 @@ export default defineComponent({
|
|
|
}}
|
|
|
>
|
|
|
{/* 返回和标题 */}
|
|
|
- {
|
|
|
- !(state.playState == "play" || followData.start || evaluatingData.startBegin) &&
|
|
|
- <div id="noticeBarRollDom" class={styles.headTopLeftBox}>
|
|
|
- <img src={iconBack} class={['headTopBackBtn', styles.img, !headTopData.showBack && styles.hidenBack]} onClick={handleBack} />
|
|
|
- {
|
|
|
- smoothAnimationState.isShow.value || state.isCombineRender ?
|
|
|
- <div
|
|
|
- style={
|
|
|
- noticeBarWidth.value ? {
|
|
|
- "--noticeBarWidth":noticeBarWidth.value + "px"
|
|
|
- } : {}
|
|
|
- }
|
|
|
- class={[styles.title, "driver-8"]}
|
|
|
- onClick={()=>{
|
|
|
- isMusicList.value && (musicListShow.value = true)
|
|
|
- }}>
|
|
|
- {
|
|
|
- isMusicList.value && <div class={styles.symbolNote}></div>
|
|
|
+ {!(state.playState == "play" || followData.start || evaluatingData.startBegin) && (
|
|
|
+ <div id="noticeBarRollDom" class={styles.headTopLeftBox}>
|
|
|
+ <img src={iconBack} class={["headTopBackBtn", styles.img, !headTopData.showBack && styles.hidenBack]} onClick={handleBack} />
|
|
|
+ {smoothAnimationState.isShow.value || state.isCombineRender ? (
|
|
|
+ <div
|
|
|
+ style={
|
|
|
+ noticeBarWidth.value
|
|
|
+ ? {
|
|
|
+ "--noticeBarWidth": noticeBarWidth.value + "px",
|
|
|
}
|
|
|
- <NoticeBar
|
|
|
- text={state.examSongName}
|
|
|
- background="none"
|
|
|
- />
|
|
|
- </div> :
|
|
|
- isMusicList.value &&
|
|
|
- <img src={listImg} class={[styles.img, styles.listImg, "driver-8"]} onClick={()=>{
|
|
|
- musicListShow.value = true
|
|
|
- }} />
|
|
|
- }
|
|
|
- </div>
|
|
|
- }
|
|
|
+ : {}
|
|
|
+ }
|
|
|
+ class={[styles.title, "headeTopTitleBtn"]}
|
|
|
+ onClick={() => {
|
|
|
+ isMusicList.value && (musicListShow.value = true);
|
|
|
+ }}
|
|
|
+ >
|
|
|
+ {isMusicList.value && <div class={[styles.symbolNote, "driver-8"]}></div>}
|
|
|
+ <NoticeBar text={state.examSongName} background="none" />
|
|
|
+ </div>
|
|
|
+ ) : (
|
|
|
+ isMusicList.value && (
|
|
|
+ <img
|
|
|
+ src={listImg}
|
|
|
+ class={[styles.img, styles.listImg, "driver-8"]}
|
|
|
+ onClick={() => {
|
|
|
+ musicListShow.value = true;
|
|
|
+ }}
|
|
|
+ />
|
|
|
+ )
|
|
|
+ )}
|
|
|
+ </div>
|
|
|
+ )}
|
|
|
+
|
|
|
{/* 模式切换 */}
|
|
|
{
|
|
|
- <div
|
|
|
+ <div
|
|
|
id={state.platform === IPlatform.PC ? "teacherTop-0" : "studnetT-0"}
|
|
|
style={{ display: toggleBtn.value.display ? "" : "none" }}
|
|
|
- class={["driver-9", styles.modeChangeBox, toggleBtn.value.disabled && styles.disabled]}
|
|
|
+ class={["driver-9", styles.modeChangeBox, toggleBtn.value.disabled && styles.disabled]}
|
|
|
onClick={() => {
|
|
|
- headTopData.oldModeType = state.modeType
|
|
|
- handleRessetState();
|
|
|
- headTopData.modeType = "init";
|
|
|
+ headTopData.oldModeType = state.modeType;
|
|
|
+ handleRessetState();
|
|
|
+ headTopData.modeType = "init";
|
|
|
}}
|
|
|
>
|
|
|
<img class={styles.img} src={iconMode} />
|
|
|
- <div class={styles.title}>{state.modeType==="practise" ? '练习模式' : state.modeType==="follow" ? "跟练模式" : state.modeType==="evaluating" ? "评测模式" : ""}</div>
|
|
|
+ <div class={styles.title}>{state.modeType === "practise" ? "练习模式" : state.modeType === "follow" ? "跟练模式" : state.modeType === "evaluating" ? "评测模式" : ""}</div>
|
|
|
</div>
|
|
|
}
|
|
|
+
|
|
|
{/* 模式提醒 */}
|
|
|
- {
|
|
|
- state.modeType === "practise" &&
|
|
|
+ {state.modeType === "practise" && (
|
|
|
<div class={[styles.modeWarn, "practiseModeWarn", state.platform === IPlatform.PC && state.musicScoreBtnDirection === "left" ? styles.modeWarnRight : ""]}>
|
|
|
- <img src={state.playType === "play" ? headImg("perform1.png") : headImg("sing1.png")} />
|
|
|
- <div>{state.playType === "play" ? "演奏场景" : "演唱场景"}</div>
|
|
|
- </div>
|
|
|
- }
|
|
|
+ <img src={state.playType === "play" ? headImg("perform1.png") : headImg("sing1.png")} />
|
|
|
+ <div>{state.playType === "play" ? "演奏场景" : "演唱场景"}</div>
|
|
|
+ </div>
|
|
|
+ )}
|
|
|
{/* 功能按钮 */}
|
|
|
<div
|
|
|
class={[styles.headRight]}
|
|
@@ -745,10 +776,10 @@ export default defineComponent({
|
|
|
) : null} */}
|
|
|
<div
|
|
|
style={{ display: playTypeBtn.value.display ? "" : "none" }}
|
|
|
- class={["driver-2", styles.btn, playTypeBtn.value.disabled && styles.disabled,styles.playType]}
|
|
|
+ class={["driver-2", styles.btn, playTypeBtn.value.disabled && styles.disabled, styles.playType]}
|
|
|
onClick={() => {
|
|
|
const oldPlayType = state.playType;
|
|
|
- headTopData.oldPlayType = oldPlayType
|
|
|
+ headTopData.oldPlayType = oldPlayType;
|
|
|
const oldPlaySource = state.playSource;
|
|
|
if (state.playType === "play") {
|
|
|
state.playType = "sing";
|
|
@@ -757,7 +788,7 @@ export default defineComponent({
|
|
|
state.playType = "play";
|
|
|
state.playSource = state.music ? "music" : "background";
|
|
|
}
|
|
|
- isClickMode = true
|
|
|
+ isClickMode = true;
|
|
|
// 有指法并且显示指法的时候 切换到演唱模式 需要影藏指法
|
|
|
let isRefresh = false;
|
|
|
if (state.isShowFingering && state.fingeringInfo.name && (state.setting.displayFingering || displayFingeringCache)) {
|
|
@@ -788,7 +819,7 @@ export default defineComponent({
|
|
|
<div
|
|
|
id={state.platform === IPlatform.PC ? "teacherTop-1" : "studnetT-1"}
|
|
|
style={{ display: originBtn.value.display ? "" : "none" }}
|
|
|
- class={["driver-3", styles.btn, originBtn.value.disabled && styles.disabled,state.playType === "play"?styles.playSource:styles.songSource]}
|
|
|
+ class={["driver-3", styles.btn, originBtn.value.disabled && styles.disabled, state.playType === "play" ? styles.playSource : styles.songSource]}
|
|
|
onClick={() => {
|
|
|
const oldPlayType = state.playType;
|
|
|
const oldPlaySource = state.playSource;
|
|
@@ -816,17 +847,22 @@ export default defineComponent({
|
|
|
<img style={{ display: state.playSource === "mingSong" ? "" : "none" }} class={styles.iconBtn} src={headImg(`mingsong.png`)} />
|
|
|
<span>{state.playSource === "music" ? (state.playType === "play" ? "原声" : "范唱") : state.playSource === "background" ? (state.playType === "play" ? "伴奏" : "伴唱") : "唱名"}</span>
|
|
|
</div>
|
|
|
- <div id={state.platform === IPlatform.PC ? "teacherTop-2" : "studnetT-2"} style={{ display: selectBtn.value.display ? "" : "none" }} class={["driver-4", styles.btn, selectBtn.value.disabled && styles.disabled, styles.section, state.sectionStatus && styles.isSection]} onClick={() => handleChangeSection()}>
|
|
|
+ <div
|
|
|
+ id={state.platform === IPlatform.PC ? "teacherTop-2" : "studnetT-2"}
|
|
|
+ style={{ display: selectBtn.value.display ? "" : "none" }}
|
|
|
+ class={["driver-4", styles.btn, selectBtn.value.disabled && styles.disabled, styles.section, state.sectionStatus && styles.isSection]}
|
|
|
+ onClick={() => handleChangeSection()}
|
|
|
+ >
|
|
|
<img style={{ display: state.section.length === 0 ? "" : "none" }} class={styles.iconBtn} src={headImg(`section0.png`)} />
|
|
|
<img style={{ display: state.section.length === 1 ? "" : "none" }} class={styles.iconBtn} src={headImg(`section1.png`)} />
|
|
|
<img style={{ display: state.section.length === 2 ? "" : "none" }} class={styles.iconBtn} src={headImg(`section2.png`)} />
|
|
|
<span>选段</span>
|
|
|
</div>
|
|
|
- {(
|
|
|
+ {
|
|
|
<>
|
|
|
<div
|
|
|
style={{ display: metronomeBtn.value.display ? "" : "none" }}
|
|
|
- class={["driver-5", styles.btn, styles.metronomeBtn, metronomeBtn.value.disabled && styles.disabled,headData.speedShow && styles.isSpeed,styles.speed]}
|
|
|
+ class={["driver-5", styles.btn, styles.metronomeBtn, metronomeBtn.value.disabled && styles.disabled, headData.speedShow && styles.isSpeed, styles.speed]}
|
|
|
onClick={async () => {
|
|
|
headData.speedShow = !headData.speedShow;
|
|
|
}}
|
|
@@ -846,7 +882,7 @@ export default defineComponent({
|
|
|
</Popup>
|
|
|
}
|
|
|
</>
|
|
|
- )}
|
|
|
+ }
|
|
|
{/* {state.enableNotation ? (
|
|
|
<Popover trigger="manual" v-model:show={headData.musicTypeShow} class={state.platform === IPlatform.PC && styles.pcTransPop} placement={state.platform === IPlatform.PC ? "top-end" : "bottom-end"} overlay={false} offset={state.platform === IPlatform.PC ? [0, 40] : [0, 8]}>
|
|
|
{{
|
|
@@ -870,7 +906,7 @@ export default defineComponent({
|
|
|
) : null} */}
|
|
|
{state.musicRendered && !query.lessonTrainingId && !query.questionId && state.isConcert && (
|
|
|
<div
|
|
|
- class={[styles.btn, state.playState === "play" && fingeringBtn.value.disabled && styles.disabled,toggleMusicSheet.show&&styles.isMusicSheet,styles.musicSheet]}
|
|
|
+ class={[styles.btn, state.playState === "play" && fingeringBtn.value.disabled && styles.disabled, toggleMusicSheet.show && styles.isMusicSheet, styles.musicSheet, "driver-10"]}
|
|
|
onClick={() => {
|
|
|
toggleMusicSheet.toggle(true);
|
|
|
}}
|
|
@@ -879,7 +915,12 @@ export default defineComponent({
|
|
|
<span>声部</span>
|
|
|
</div>
|
|
|
)}
|
|
|
- <div id={state.platform === IPlatform.PC ? "teacherTop-6" : "studnetT-6"} style={{ display: settingBtn.value.display ? "" : "none" }} class={["driver-6", styles.btn, settingBtn.value.disabled && styles.disabled,headTopData.settingMode&&styles.isSettingMode,styles.settingMode]} onClick={() => (headTopData.settingMode = true)}>
|
|
|
+ <div
|
|
|
+ id={state.platform === IPlatform.PC ? "teacherTop-6" : "studnetT-6"}
|
|
|
+ style={{ display: settingBtn.value.display ? "" : "none" }}
|
|
|
+ class={["driver-6", styles.btn, settingBtn.value.disabled && styles.disabled, headTopData.settingMode && styles.isSettingMode, styles.settingMode]}
|
|
|
+ onClick={() => (headTopData.settingMode = true)}
|
|
|
+ >
|
|
|
<img class={styles.iconBtn} src={headImg("icon_menu.png")} />
|
|
|
<span>设置</span>
|
|
|
</div>
|
|
@@ -952,17 +993,22 @@ export default defineComponent({
|
|
|
{isAllBtnsStudent.value && !query.isCbs && showGuideIndex.value && <StudentTop></StudentTop>} */}
|
|
|
|
|
|
{/* 练习模式功能引导 加载音频完成 不是会员 */}
|
|
|
- {state.modeType === "practise" && headTopData.modeType !== "init" && !query.isCbs && state.audioDone && !state.isLoading && !state.isVip && (
|
|
|
+ {state.modeType === "practise" && headTopData.modeType !== "init" && !query.isCbs && state.audioDone && !state.isLoading && !state.isVip && showWebGuide.value && (
|
|
|
<PractiseDriver
|
|
|
statusAll={{
|
|
|
+ playBtnStatus: playBtn.value.display,
|
|
|
subjectStatus: state.musicRendered && !query.lessonTrainingId && !query.questionId && state.isConcert,
|
|
|
modelTypeStatus: toggleBtn.value.display,
|
|
|
playType: playTypeBtn.value.display,
|
|
|
+ originPlayType: state.playType === "play" ? true : false,
|
|
|
+ originBtnStatus: originBtn.value.display,
|
|
|
+ backTitle: !(state.playState == "play" || followData.start || evaluatingData.startBegin) && isMusicList.value,
|
|
|
+ titleType: smoothAnimationState.isShow.value ? "TEXT" : isMusicList.value ? "IMG" : "NONE",
|
|
|
}}
|
|
|
/>
|
|
|
)}
|
|
|
{/* 跟练模式功能引导 加载音频完成 不是会员 */}
|
|
|
- {state.modeType === "follow" && headTopData.modeType !== "init" && !query.isCbs && state.audioDone && !state.isLoading && !state.isVip && (
|
|
|
+ {state.modeType === "follow" && headTopData.modeType !== "init" && !query.isCbs && state.audioDone && !state.isLoading && !state.isVip && showWebGuide.value && (
|
|
|
<FollowDriver
|
|
|
statusAll={{
|
|
|
subjectStatus: state.musicRendered && !query.lessonTrainingId && !query.questionId && state.isConcert,
|
|
@@ -970,7 +1016,7 @@ export default defineComponent({
|
|
|
/>
|
|
|
)}
|
|
|
{/* 评测模式功能引导 加载音频完成 不是会员 */}
|
|
|
- {state.modeType === "evaluating" && headTopData.modeType !== "init" && !evaluatingData.earphoneMode && !query.isCbs && state.audioDone && !state.isLoading && !state.isVip && evaluatingData.websocketState && !evaluatingData.startBegin && evaluatingData.checkEnd && (
|
|
|
+ {state.modeType === "evaluating" && headTopData.modeType !== "init" && !evaluatingData.earphoneMode && !query.isCbs && state.audioDone && !state.isLoading && !state.isVip && evaluatingData.websocketState && !evaluatingData.startBegin && evaluatingData.checkEnd && showWebGuide.value && (
|
|
|
<EvaluatingDriver
|
|
|
statusAll={{
|
|
|
subjectStatus: state.musicRendered && !query.lessonTrainingId && !query.questionId && state.isConcert,
|
|
@@ -980,4 +1026,4 @@ export default defineComponent({
|
|
|
</>
|
|
|
);
|
|
|
},
|
|
|
-});
|
|
|
+});
|