|
@@ -6,6 +6,15 @@ import state from "/src/state";
|
|
|
import iconBack from "./image/icon-back.svg";
|
|
|
import iconShiyi from "./image/icon-shiyi.svg";
|
|
|
import iconhuifang from "./image/icon-huifang.svg";
|
|
|
+import shiyiTop from "./image/shiyi-top.png";
|
|
|
+import firstLeft from "./image/first-left.svg";
|
|
|
+import firstRight from "./image/first-right.svg";
|
|
|
+import firstTop from "./image/first-top.svg";
|
|
|
+import firstBottom from "./image/first-bottom.svg";
|
|
|
+import firstCorrect from "./image/first-correct.svg";
|
|
|
+import firstError from "./image/first-error.svg";
|
|
|
+import firstNot from "./image/first-not.svg";
|
|
|
+import firstLack from "./image/first-lack.svg";
|
|
|
import { Grid, GridItem, Popup } from "vant";
|
|
|
import videobg from "./image/videobg.png";
|
|
|
import "plyr/dist/plyr.css";
|
|
@@ -73,10 +82,47 @@ export default defineComponent({
|
|
|
};
|
|
|
return () => (
|
|
|
<div class={[styles.headerTop, browserInfo.android && styles.android]}>
|
|
|
- <div class={[styles.back, !storeData.isApp && styles.disabled]} onClick={handleBack}>
|
|
|
- <img src={iconBack} />
|
|
|
+ <div class={styles.left}>
|
|
|
+ <div class={[styles.back, !storeData.isApp && styles.disabled]} onClick={handleBack}>
|
|
|
+ <img src={iconBack} />
|
|
|
+ </div>
|
|
|
+ <div class={styles.leftContent}>
|
|
|
+ <div class={styles.lcName}>{state.examSongName}</div>
|
|
|
+ <div class={styles.lcScore}>{level[scoreData.value.heardLevel]}|综合分数:{scoreData.value.score}分</div>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+
|
|
|
+ {/* 音准、节奏、完整度纬度 */}
|
|
|
+
|
|
|
+
|
|
|
+ <div class={styles.middle}>
|
|
|
+ {
|
|
|
+ state.isPercussion ? null :
|
|
|
+ <div
|
|
|
+ onClick={() => handleChange("intonation")}
|
|
|
+ class={[styles.cItem, itemType.value === "intonation" && styles.active]}>
|
|
|
+ <span class={styles.mScore}>{scoreData.value.intonation}分</span>
|
|
|
+ <span class={styles.mLabel}>音准</span>
|
|
|
+ </div>
|
|
|
+ }
|
|
|
+ <div
|
|
|
+ onClick={() => handleChange("cadence")}
|
|
|
+ class={[styles.cItem, itemType.value === "cadence" && styles.active]}>
|
|
|
+ <span class={styles.mScore}>{scoreData.value.cadence}分</span>
|
|
|
+ <span class={styles.mLabel}>节奏</span>
|
|
|
+ </div>
|
|
|
+ {
|
|
|
+ state.isPercussion ? null :
|
|
|
+ <div
|
|
|
+ onClick={() => handleChange("integrity")}
|
|
|
+ class={[styles.cItem, itemType.value === "integrity" && styles.active]}>
|
|
|
+ <span class={styles.mScore}>{scoreData.value.integrity}分</span>
|
|
|
+ <span class={styles.mLabel}>完整度</span>
|
|
|
+ </div>
|
|
|
+ }
|
|
|
</div>
|
|
|
- <div class={styles.center}>
|
|
|
+
|
|
|
+ {/* <div class={styles.center}>
|
|
|
<div class={styles.cItem}>
|
|
|
<div>{level[scoreData.value.heardLevel]}</div>
|
|
|
<div>难度</div>
|
|
@@ -110,7 +156,8 @@ export default defineComponent({
|
|
|
</div>
|
|
|
</>
|
|
|
)}
|
|
|
- </div>
|
|
|
+ </div> */}
|
|
|
+
|
|
|
<div class={styles.right}>
|
|
|
<div
|
|
|
style={{ display: scoreData.value.videoFilePath ? "" : "none" }}
|
|
@@ -130,48 +177,116 @@ export default defineComponent({
|
|
|
</div> */}
|
|
|
</div>
|
|
|
|
|
|
- {state.isPercussion ? null : (
|
|
|
- <div class={styles.demos}>
|
|
|
- <div>
|
|
|
- <Note fill="#01C1B5" />
|
|
|
- <span>演奏正确</span>
|
|
|
- </div>
|
|
|
- {itemType.value === "intonation" && (
|
|
|
- <>
|
|
|
- <div>
|
|
|
- <Note fill="rgba(1, 193, 181, .8)" shadowFill="#FFAB25" shadow x={-2} y={0} />
|
|
|
- <span>音高了</span>
|
|
|
- </div>
|
|
|
- <div>
|
|
|
- <Note fill="rgba(1, 193, 181, .8)" shadowFill="#FFAB25" shadow x={-1} y={-3} />
|
|
|
- <span>音低了</span>
|
|
|
- </div>
|
|
|
- </>
|
|
|
- )}
|
|
|
- {itemType.value === "cadence" && (
|
|
|
- <>
|
|
|
+ {/* 五线谱,简谱类型提示 */}
|
|
|
+ {
|
|
|
+ scoreData.value.musicType === 'staff' ?
|
|
|
+ <>
|
|
|
+ {state.isPercussion ? null : (
|
|
|
+ <div class={styles.demos}>
|
|
|
+ {itemType.value === "intonation" && (
|
|
|
+ <>
|
|
|
+ <div>
|
|
|
+ <Note fill="rgba(1, 193, 181, .8)" shadowFill="#FFAB25" shadow x={-2} y={0} />
|
|
|
+ <span>演奏偏高</span>
|
|
|
+ </div>
|
|
|
+ <div>
|
|
|
+ <Note fill="rgba(1, 193, 181, .8)" shadowFill="#FFAB25" shadow x={-1} y={-3} />
|
|
|
+ <span>演奏偏低</span>
|
|
|
+ </div>
|
|
|
+ </>
|
|
|
+ )}
|
|
|
+ {itemType.value === "cadence" && (
|
|
|
+ <>
|
|
|
+ <div>
|
|
|
+ <Note fill="rgba(1, 193, 181, .8)" shadowFill="#FFAB25" shadow x={0.5} y={-1} />
|
|
|
+ <span>节奏偏快</span>
|
|
|
+ </div>
|
|
|
+ <div>
|
|
|
+ <Note fill="rgba(1, 193, 181, .8)" shadowFill="#FFAB25" shadow x={-3} y={-2.5} />
|
|
|
+ <span>演奏偏低</span>
|
|
|
+ </div>
|
|
|
+ </>
|
|
|
+ )}
|
|
|
+ {(itemType.value === "intonation" || itemType.value === "cadence") && (
|
|
|
+ <>
|
|
|
+ <div>
|
|
|
+ <Note fill="#2ABC6F" />
|
|
|
+ <span>演奏正确</span>
|
|
|
+ </div>
|
|
|
+ <div>
|
|
|
+ <Note fill="#FF2B29" />
|
|
|
+ <span>错音</span>
|
|
|
+ </div>
|
|
|
+ </>
|
|
|
+ )}
|
|
|
+
|
|
|
+ {(itemType.value === "intonation" || itemType.value === "integrity") && (
|
|
|
<div>
|
|
|
- <Note fill="rgba(1, 193, 181, .8)" shadowFill="#FF4444" shadow x={0.5} y={-1} />
|
|
|
- <span>节奏过快</span>
|
|
|
+ <Note fill="#8F4EFB" />
|
|
|
+ <span>时值不足</span>
|
|
|
</div>
|
|
|
+ )}
|
|
|
+ <div>
|
|
|
+ <Note fill="#ADADAD" />
|
|
|
+ <span>未演奏</span>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ )}
|
|
|
+ </> :
|
|
|
+ <>
|
|
|
+ {state.isPercussion ? null : (
|
|
|
+ <div class={styles.demos}>
|
|
|
+ {itemType.value === "intonation" && (
|
|
|
+ <>
|
|
|
+ <div>
|
|
|
+ <img class={styles.firstIcon1} src={firstTop} />
|
|
|
+ <span>演奏偏高</span>
|
|
|
+ </div>
|
|
|
+ <div>
|
|
|
+ <img class={styles.firstIcon1} src={firstBottom} />
|
|
|
+ <span>演奏偏低</span>
|
|
|
+ </div>
|
|
|
+ </>
|
|
|
+ )}
|
|
|
+ {itemType.value === "cadence" && (
|
|
|
+ <>
|
|
|
+ <div>
|
|
|
+ <img class={styles.firstIcon2} src={firstLeft} />
|
|
|
+ <span>节奏偏快</span>
|
|
|
+ </div>
|
|
|
+ <div>
|
|
|
+ <img class={styles.firstIcon2} src={firstRight} />
|
|
|
+ <span>节奏偏慢</span>
|
|
|
+ </div>
|
|
|
+ </>
|
|
|
+ )}
|
|
|
+ {(itemType.value === "intonation" || itemType.value === "cadence") && (
|
|
|
+ <>
|
|
|
+ <div>
|
|
|
+ <img class={styles.firstIcon3} src={firstCorrect} />
|
|
|
+ <span>演奏正确</span>
|
|
|
+ </div>
|
|
|
+ <div>
|
|
|
+ <img class={styles.firstIcon3} src={firstError} />
|
|
|
+ <span>演奏错误</span>
|
|
|
+ </div>
|
|
|
+ </>
|
|
|
+ )}
|
|
|
+ {(itemType.value === "intonation" || itemType.value === "integrity") && (
|
|
|
<div>
|
|
|
- <Note fill="rgba(1, 193, 181, .8)" shadowFill="#FF4444" shadow x={-3} y={-2.5} />
|
|
|
- <span>节奏慢了</span>
|
|
|
+ <img class={styles.firstIcon3} src={firstLack} />
|
|
|
+ <span>时值不足</span>
|
|
|
</div>
|
|
|
- </>
|
|
|
- )}
|
|
|
- {itemType.value === "integrity" && (
|
|
|
+ )}
|
|
|
<div>
|
|
|
- <Note fill="#CC75FF" />
|
|
|
- <span>完成度不足</span>
|
|
|
+ <img class={styles.firstIcon3} src={firstNot} />
|
|
|
+ <span>未演奏</span>
|
|
|
</div>
|
|
|
- )}
|
|
|
- <div>
|
|
|
- <Note fill="#AEAEAE" />
|
|
|
- <span>未演奏</span>
|
|
|
</div>
|
|
|
- </div>
|
|
|
- )}
|
|
|
+ )}
|
|
|
+ </>
|
|
|
+ }
|
|
|
+
|
|
|
<Popup
|
|
|
teleport="body"
|
|
|
class={["popup-custom", "van-scale", styles.popup]}
|
|
@@ -214,43 +329,88 @@ export default defineComponent({
|
|
|
teleport="body"
|
|
|
closeable
|
|
|
>
|
|
|
- <div class={styles.shiyiPopup}>
|
|
|
- <div class={styles.shiyiTitle}>图标释义</div>
|
|
|
- <div class={styles.items}>
|
|
|
- <div class={styles.item}>
|
|
|
- <Note fill="#01C1B5" />
|
|
|
- <span>绿色音符:演奏正确</span>
|
|
|
- </div>
|
|
|
- <div class={styles.item}>
|
|
|
- <Note fill="#FF4444" />
|
|
|
- <span>红色音符:错音</span>
|
|
|
- </div>
|
|
|
- <div class={styles.item}>
|
|
|
- <Note fill="#CC75FF" />
|
|
|
- <span>紫色音符:完成度不足</span>
|
|
|
- </div>
|
|
|
- <div class={styles.item}>
|
|
|
- <Note fill="#AEAEAE" />
|
|
|
- <span>灰色音符:未演奏</span>
|
|
|
- </div>
|
|
|
- <div class={styles.item}>
|
|
|
- <Note fill="rgba(1, 193, 181, .8)" shadowFill="#FF4444" shadow x={0.5} y={-1} />
|
|
|
- <span>音符重影(红色在前):节奏过快</span>
|
|
|
- </div>
|
|
|
- <div class={styles.item}>
|
|
|
- <Note fill="rgba(1, 193, 181, .8)" shadowFill="#FF4444" shadow x={-3} y={-2.5} />
|
|
|
- <span>音符重影(红色在后):节奏慢了</span>
|
|
|
- </div>
|
|
|
- <div class={styles.item}>
|
|
|
- <Note fill="rgba(1, 193, 181, .8)" shadowFill="#FFAB25" shadow x={-2} y={0} />
|
|
|
- <span>音符重影(黄色在上):音高了</span>
|
|
|
+ {scoreData.value.musicType === 'staff' ?
|
|
|
+ <div class={styles.shiyiPopup}>
|
|
|
+ <img class={styles.shiyiTop} src={shiyiTop} />
|
|
|
+ <div class={styles.items}>
|
|
|
+ <div class={styles.item}>
|
|
|
+ <Note fill="rgba(1, 193, 181, .8)" shadowFill="#FFAB25" shadow x={-2} y={0} />
|
|
|
+ <span>黄色音符在上:演奏偏高</span>
|
|
|
+ </div>
|
|
|
+ <div class={styles.item}>
|
|
|
+ <Note fill="#2ABC6F" />
|
|
|
+ <span>绿色音符:演奏正确</span>
|
|
|
+ </div>
|
|
|
+ <div class={styles.item}>
|
|
|
+ <Note fill="rgba(1, 193, 181, .8)" shadowFill="#FFAB25" shadow x={-1} y={-3} />
|
|
|
+ <span>黄色音符在下:演奏偏低</span>
|
|
|
+ </div>
|
|
|
+ <div class={styles.item}>
|
|
|
+ <Note fill="#FF2B29" />
|
|
|
+ <span>红色音符:演奏错误</span>
|
|
|
+ </div>
|
|
|
+ <div class={styles.item}>
|
|
|
+ <Note fill="rgba(1, 193, 181, .8)" shadowFill="#FFAB25" shadow x={0.5} y={-1} />
|
|
|
+ <span>黄色音符在左:节奏偏快</span>
|
|
|
+ </div>
|
|
|
+ <div class={styles.item}>
|
|
|
+ <Note fill="#8F4EFB" />
|
|
|
+ <span>紫色音符:时值不足</span>
|
|
|
+ </div>
|
|
|
+ <div class={styles.item}>
|
|
|
+ <Note fill="rgba(1, 193, 181, .8)" shadowFill="#FFAB25" shadow x={-3} y={-2.5} />
|
|
|
+ <span>黄色音符在右:节奏偏慢</span>
|
|
|
+ </div>
|
|
|
+ <div class={styles.item}>
|
|
|
+ <Note fill="#ADADAD" />
|
|
|
+ <span>灰色音符:未演奏</span>
|
|
|
+ </div>
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
</div>
|
|
|
- <div class={styles.item}>
|
|
|
- <Note fill="rgba(1, 193, 181, .8)" shadowFill="#FFAB25" shadow x={-1} y={-3} />
|
|
|
- <span>音符重影(黄色在下):音低了</span>
|
|
|
+ </div> :
|
|
|
+ <div class={styles.shiyiPopup}>
|
|
|
+ <img class={styles.shiyiTop} src={shiyiTop} />
|
|
|
+ <div class={styles.items}>
|
|
|
+ <div class={styles.itemTone}>
|
|
|
+ <img class={styles.firstIcon1} src={firstTop} />
|
|
|
+ <span>黄色箭头朝上:演奏偏高</span>
|
|
|
+ </div>
|
|
|
+ <div class={styles.itemTone}>
|
|
|
+ <img class={styles.firstIcon3} src={firstCorrect} />
|
|
|
+ <span>绿色音符:演奏正确</span>
|
|
|
+ </div>
|
|
|
+ <div class={styles.itemTone}>
|
|
|
+ <img class={styles.firstIcon1} src={firstBottom} />
|
|
|
+ <span>黄色箭头朝下:演奏偏低</span>
|
|
|
+ </div>
|
|
|
+ <div class={styles.itemTone}>
|
|
|
+ <img class={styles.firstIcon3} src={firstError} />
|
|
|
+ <span>红色音符:演奏错误</span>
|
|
|
+ </div>
|
|
|
+ <div class={styles.itemTone}>
|
|
|
+ <img class={[styles.firstIcon2, styles.fiz]} src={firstLeft} />
|
|
|
+ <span>黄色箭头朝左:节奏偏快</span>
|
|
|
+ </div>
|
|
|
+ <div class={styles.itemTone}>
|
|
|
+ <img class={styles.firstIcon3} src={firstLack} />
|
|
|
+ <span>紫色音符:时值不足</span>
|
|
|
+ </div>
|
|
|
+ <div class={styles.itemTone}>
|
|
|
+ <img class={styles.firstIcon2} src={firstRight} />
|
|
|
+ <span>黄色箭头朝右:节奏偏慢</span>
|
|
|
+ </div>
|
|
|
+ <div class={styles.itemTone}>
|
|
|
+ <img class={styles.firstIcon3} src={firstNot} />
|
|
|
+ <span>灰色音符:未演奏</span>
|
|
|
+ </div>
|
|
|
</div>
|
|
|
- </div>
|
|
|
- </div>
|
|
|
+ </div>
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
</Popup>
|
|
|
</div>
|
|
|
);
|