|
@@ -70,10 +70,10 @@ export default defineComponent({
|
|
|
const musicInfo = {
|
|
|
...res.data,
|
|
|
};
|
|
|
- if (res.data.background[index]){
|
|
|
- for(let key in res.data.background[index]){
|
|
|
- if (res.data.background[index][key]){
|
|
|
- musicInfo[key] = res.data.background[index][key]
|
|
|
+ if (res.data.background[index]) {
|
|
|
+ for (let key in res.data.background[index]) {
|
|
|
+ if (res.data.background[index][key]) {
|
|
|
+ musicInfo[key] = res.data.background[index][key];
|
|
|
}
|
|
|
}
|
|
|
}
|
|
@@ -126,7 +126,7 @@ export default defineComponent({
|
|
|
|
|
|
// 检测是否原音和伴奏都有
|
|
|
if (!state.music || !state.accompany) {
|
|
|
- state.playSource = state.music ? "music" : "background"
|
|
|
+ state.playSource = state.music ? "music" : "background";
|
|
|
}
|
|
|
};
|
|
|
|
|
@@ -228,79 +228,82 @@ export default defineComponent({
|
|
|
|
|
|
const guideShow = !localStorage.getItem("isFirstTip") || !localStorage.getItem("isFirstModel");
|
|
|
return () => (
|
|
|
- <div
|
|
|
- class={["van-safe-area-bottom", styles.detail, state.setting.eyeProtection && "eyeProtection"]}
|
|
|
- style={{ paddingLeft: detailData.paddingLeft, opacity: state.setting.camera ? `${state.setting.cameraOpacity / 100}` : "" }}
|
|
|
- onClick={(e: Event) => {
|
|
|
- if (state.playState === "play") {
|
|
|
- detailData.headerHide = !detailData.headerHide;
|
|
|
- }
|
|
|
- }}
|
|
|
- >
|
|
|
- {!state.musicRendered && (
|
|
|
- <div class={styles.skeleton}>
|
|
|
- <Skeleton class={styles.skeleton} row={8} />
|
|
|
- </div>
|
|
|
- )}
|
|
|
- <div class={[styles.headHeight, detailData.headerHide && styles.headHide]} onClick={(e: Event) => e.stopPropagation()}>
|
|
|
- <Transition name="van-slide-down">{state.musicRendered && <HeaderTop />}</Transition>
|
|
|
- </div>
|
|
|
+ <div class={[state.setting.eyeProtection && "eyeProtection"]}>
|
|
|
+ <div style={{opacity: state.setting.camera ? `${state.setting.cameraOpacity / 100}` : ""}} class={styles.bgContainer}></div>
|
|
|
<div
|
|
|
- id="scrollContainer"
|
|
|
- style={{ ...fingerConfig.value.container, height: detailData.headerHide ? "100vh" : "" }}
|
|
|
- class={[styles.container, !state.setting.displayCursor && "hideCursor"]}
|
|
|
+ class={["van-safe-area-bottom", styles.detail]}
|
|
|
+ style={{ paddingLeft: detailData.paddingLeft }}
|
|
|
+ onClick={(e: Event) => {
|
|
|
+ if (state.playState === "play") {
|
|
|
+ detailData.headerHide = !detailData.headerHide;
|
|
|
+ }
|
|
|
+ }}
|
|
|
>
|
|
|
- {/* <div style={{display: detailData.headerHide ? 'none' : ''}} class={styles.musicName}>{state.examSongName}</div> */}
|
|
|
- {/* 曲谱渲染 */}
|
|
|
- {!detailData.isLoading && <MusicScore onRendered={handleRendered} />}
|
|
|
- {/* 播放 */}
|
|
|
- {!detailData.isLoading && <AudioList />}
|
|
|
- {/* 评测 */}
|
|
|
- {state.modeType === "evaluating" && (
|
|
|
- <>
|
|
|
- <Evaluating />
|
|
|
- {evaluatingData.rendered && <EvaluatModel />}
|
|
|
- </>
|
|
|
+ {!state.musicRendered && (
|
|
|
+ <div class={styles.skeleton}>
|
|
|
+ <Skeleton class={styles.skeleton} row={8} />
|
|
|
+ </div>
|
|
|
)}
|
|
|
- {/* 指法 */}
|
|
|
- <Transition name={state.fingeringInfo.direction === "transverse" ? "v-slide-up" : "v-slide-right"}>
|
|
|
- {state.setting.displayFingering && state.fingeringInfo?.name && (
|
|
|
- <div style={{ ...fingerConfig.value.fingerBox }}>
|
|
|
- <Fingering />
|
|
|
- </div>
|
|
|
+ <div class={[styles.headHeight, detailData.headerHide && styles.headHide]} onClick={(e: Event) => e.stopPropagation()}>
|
|
|
+ <Transition name="van-slide-down">{state.musicRendered && <HeaderTop />}</Transition>
|
|
|
+ </div>
|
|
|
+ <div
|
|
|
+ id="scrollContainer"
|
|
|
+ style={{ ...fingerConfig.value.container, height: detailData.headerHide ? "100vh" : "" }}
|
|
|
+ class={[styles.container, !state.setting.displayCursor && "hideCursor"]}
|
|
|
+ >
|
|
|
+ {/* <div style={{display: detailData.headerHide ? 'none' : ''}} class={styles.musicName}>{state.examSongName}</div> */}
|
|
|
+ {/* 曲谱渲染 */}
|
|
|
+ {!detailData.isLoading && <MusicScore onRendered={handleRendered} />}
|
|
|
+ {/* 播放 */}
|
|
|
+ {!detailData.isLoading && <AudioList />}
|
|
|
+ {/* 评测 */}
|
|
|
+ {state.modeType === "evaluating" && (
|
|
|
+ <>
|
|
|
+ <Evaluating />
|
|
|
+ {evaluatingData.rendered && <EvaluatModel />}
|
|
|
+ </>
|
|
|
)}
|
|
|
- </Transition>
|
|
|
- </div>
|
|
|
+ {/* 指法 */}
|
|
|
+ <Transition name={state.fingeringInfo.direction === "transverse" ? "v-slide-up" : "v-slide-right"}>
|
|
|
+ {state.setting.displayFingering && state.fingeringInfo?.name && (
|
|
|
+ <div style={{ ...fingerConfig.value.fingerBox }}>
|
|
|
+ <Fingering />
|
|
|
+ </div>
|
|
|
+ )}
|
|
|
+ </Transition>
|
|
|
+ </div>
|
|
|
+
|
|
|
+ {/* 插件 */}
|
|
|
+ <div class="plugins-box">
|
|
|
+ {state.musicRendered && (
|
|
|
+ <>
|
|
|
+ {/* 设置选段小节速度 */}
|
|
|
+ {!query.questionId && !query.lessonTrainingId && <MeasureSpeed />}
|
|
|
+ {/* 统计训练时长 */}
|
|
|
+ {storeData.platformType === "STUDENT" && <RecordingTime />}
|
|
|
+ {/* 单元测验 和 课后训练 */}
|
|
|
+ {storeData.platformType === "STUDENT" && <UnitTest />}
|
|
|
+ {/* 学生端检测是否是会员 */}
|
|
|
+ {storeData.platformType === "STUDENT" && <CheckStudentVip />}
|
|
|
+ {/* 后台课后训练小节选择 */}
|
|
|
+ {storeData.platformType === "WEB" && <AfterClassTraining />}
|
|
|
+ {/* 引导 */}
|
|
|
+ {guideShow && <GuidePage />}
|
|
|
+ </>
|
|
|
+ )}
|
|
|
+ </div>
|
|
|
+ {/* 节拍器 */}
|
|
|
+ {state.needTick && <Tick />}
|
|
|
|
|
|
- {/* 插件 */}
|
|
|
- <div class="plugins-box">
|
|
|
- {state.musicRendered && (
|
|
|
+ {/* 跟练模式 */}
|
|
|
+ {state.modeType === "follow" && (
|
|
|
<>
|
|
|
- {/* 设置选段小节速度 */}
|
|
|
- {!query.questionId && !query.lessonTrainingId && <MeasureSpeed />}
|
|
|
- {/* 统计训练时长 */}
|
|
|
- {storeData.platformType === "STUDENT" && <RecordingTime />}
|
|
|
- {/* 单元测验 和 课后训练 */}
|
|
|
- {storeData.platformType === "STUDENT" && <UnitTest />}
|
|
|
- {/* 学生端检测是否是会员 */}
|
|
|
- {storeData.platformType === "STUDENT" && <CheckStudentVip />}
|
|
|
- {/* 后台课后训练小节选择 */}
|
|
|
- {storeData.platformType === "WEB" && <AfterClassTraining />}
|
|
|
- {/* 引导 */}
|
|
|
- {guideShow && <GuidePage />}
|
|
|
+ <FollowPractice />
|
|
|
+ <FollowModel />
|
|
|
</>
|
|
|
)}
|
|
|
</div>
|
|
|
- {/* 节拍器 */}
|
|
|
- {state.needTick && <Tick />}
|
|
|
-
|
|
|
- {/* 跟练模式 */}
|
|
|
- {state.modeType === "follow" && (
|
|
|
- <>
|
|
|
- <FollowPractice />
|
|
|
- <FollowModel />
|
|
|
- </>
|
|
|
- )}
|
|
|
</div>
|
|
|
);
|
|
|
},
|