|
@@ -16,7 +16,10 @@ const selectData = reactive({
|
|
|
|
|
|
/** 计算点击层数据 */
|
|
/** 计算点击层数据 */
|
|
const calcNoteData = () => {
|
|
const calcNoteData = () => {
|
|
- const musicContainer = document.getElementById("musicAndSelection")?.getBoundingClientRect() || { x: 0, y: 0 };
|
|
|
|
|
|
+ const musicContainer = document.getElementById("musicAndSelection")?.getBoundingClientRect() || {
|
|
|
|
+ x: 0,
|
|
|
|
+ y: 0,
|
|
|
|
+ };
|
|
const parentLeft = musicContainer.x || 0;
|
|
const parentLeft = musicContainer.x || 0;
|
|
const parentTop = musicContainer.y || 0;
|
|
const parentTop = musicContainer.y || 0;
|
|
const notes = state.times;
|
|
const notes = state.times;
|
|
@@ -35,7 +38,10 @@ const calcNoteData = () => {
|
|
let staveBbox: any = {};
|
|
let staveBbox: any = {};
|
|
if (item.stave?.attrs?.id) {
|
|
if (item.stave?.attrs?.id) {
|
|
const staveEle = document.querySelector(`#${item.stave.attrs.id}`);
|
|
const staveEle = document.querySelector(`#${item.stave.attrs.id}`);
|
|
- staveBbox = staveEle?.parentElement?.parentElement?.getBoundingClientRect?.() || { x: 0, width: 0 };
|
|
|
|
|
|
+ staveBbox = staveEle?.parentElement?.parentElement?.getBoundingClientRect?.() || {
|
|
|
|
+ x: 0,
|
|
|
|
+ width: 0,
|
|
|
|
+ };
|
|
// console.log("🚀 ~ staveBbox:", staveBbox)
|
|
// console.log("🚀 ~ staveBbox:", staveBbox)
|
|
}
|
|
}
|
|
if (item.svgElement) {
|
|
if (item.svgElement) {
|
|
@@ -96,7 +102,9 @@ const calcNoteData = () => {
|
|
MeasureNumberXMLList.push(item.MeasureNumberXML);
|
|
MeasureNumberXMLList.push(item.MeasureNumberXML);
|
|
} else {
|
|
} else {
|
|
if (item.multipleRestMeasures) {
|
|
if (item.multipleRestMeasures) {
|
|
- const preItem = selectData.staves.find((n: any) => n.MeasureNumberXML === item.MeasureNumberXML - 1);
|
|
|
|
|
|
+ const preItem = selectData.staves.find(
|
|
|
|
+ (n: any) => n.MeasureNumberXML === item.MeasureNumberXML - 1
|
|
|
|
+ );
|
|
if (preItem?.staveBox) {
|
|
if (preItem?.staveBox) {
|
|
noteItem.staveBox = {
|
|
noteItem.staveBox = {
|
|
left: preItem.staveBox.left,
|
|
left: preItem.staveBox.left,
|
|
@@ -145,8 +153,14 @@ export default defineComponent({
|
|
if (state.sectionFirst && item.MeasureNumberXML === state.sectionFirst.MeasureNumberXML) {
|
|
if (state.sectionFirst && item.MeasureNumberXML === state.sectionFirst.MeasureNumberXML) {
|
|
return styles.prepareStaveBox;
|
|
return styles.prepareStaveBox;
|
|
}
|
|
}
|
|
- if (item.MeasureNumberXML >= state.section[0].MeasureNumberXML && item.MeasureNumberXML <= state.section[1].MeasureNumberXML) {
|
|
|
|
- if (item.MeasureNumberXML == state.section[0].MeasureNumberXML && item.MeasureNumberXML == state.section[1].MeasureNumberXML) {
|
|
|
|
|
|
+ if (
|
|
|
|
+ item.MeasureNumberXML >= state.section[0].MeasureNumberXML &&
|
|
|
|
+ item.MeasureNumberXML <= state.section[1].MeasureNumberXML
|
|
|
|
+ ) {
|
|
|
|
+ if (
|
|
|
|
+ item.MeasureNumberXML == state.section[0].MeasureNumberXML &&
|
|
|
|
+ item.MeasureNumberXML == state.section[1].MeasureNumberXML
|
|
|
|
+ ) {
|
|
return styles.centerStaveBox;
|
|
return styles.centerStaveBox;
|
|
}
|
|
}
|
|
if (item.MeasureNumberXML == state.section[0].MeasureNumberXML) {
|
|
if (item.MeasureNumberXML == state.section[0].MeasureNumberXML) {
|
|
@@ -169,7 +183,11 @@ export default defineComponent({
|
|
calcNoteData();
|
|
calcNoteData();
|
|
});
|
|
});
|
|
return () => (
|
|
return () => (
|
|
- <div id="selectionBox" class={styles.selectionContainer} onClick={(e: Event) => e.stopPropagation()}>
|
|
|
|
|
|
+ <div
|
|
|
|
+ id="selectionBox"
|
|
|
|
+ class={styles.selectionContainer}
|
|
|
|
+ onClick={(e: Event) => e.stopPropagation()}
|
|
|
|
+ >
|
|
{selectData.staves.map((item: any) => {
|
|
{selectData.staves.map((item: any) => {
|
|
const scoreItem = evaluatingData.evaluatings[item.measureListIndex];
|
|
const scoreItem = evaluatingData.evaluatings[item.measureListIndex];
|
|
// 高级模式下,显示节拍线
|
|
// 高级模式下,显示节拍线
|
|
@@ -188,14 +206,22 @@ export default defineComponent({
|
|
<>
|
|
<>
|
|
{item.staveBox && (
|
|
{item.staveBox && (
|
|
<div
|
|
<div
|
|
- class={[styles.position, showClass.value(item), scoreItem ? `scoreItemLeve${scoreItem.leve}` : ""]}
|
|
|
|
|
|
+ class={[
|
|
|
|
+ styles.position,
|
|
|
|
+ showClass.value(item),
|
|
|
|
+ scoreItem ? `scoreItemLeve${scoreItem.leve}` : "",
|
|
|
|
+ ]}
|
|
style={item.staveBox}
|
|
style={item.staveBox}
|
|
onClick={() => handleSelection(item)}
|
|
onClick={() => handleSelection(item)}
|
|
>
|
|
>
|
|
- {lineShow && <div class={styles.line} style={{ left: metronomeData.activeMetro.left }}></div>}
|
|
|
|
- {!state.isReport && !!item.multipleRestMeasures && state.activeMeasureIndex == item.MeasureNumberXML && (
|
|
|
|
- <div class={styles.dotWrap}>{item.multipleRestMeasures}</div>
|
|
|
|
|
|
+ {lineShow && (
|
|
|
|
+ <div class={styles.line} style={{ left: metronomeData.activeMetro.left }}></div>
|
|
)}
|
|
)}
|
|
|
|
+ {!state.isReport &&
|
|
|
|
+ !!item.multipleRestMeasures &&
|
|
|
|
+ state.activeMeasureIndex == item.MeasureNumberXML && (
|
|
|
|
+ <div class={styles.dotWrap}>{item.multipleRestMeasures}</div>
|
|
|
|
+ )}
|
|
<Transition
|
|
<Transition
|
|
name="centerTop"
|
|
name="centerTop"
|
|
onAfterEnter={() => {
|
|
onAfterEnter={() => {
|
|
@@ -203,7 +229,10 @@ export default defineComponent({
|
|
}}
|
|
}}
|
|
>
|
|
>
|
|
{scoreItem?.show && (
|
|
{scoreItem?.show && (
|
|
- <div class={styles.scoreItem} style={{ color: leveByScoreMeasureIcons[scoreItem.leve]?.color || "" }}>
|
|
|
|
|
|
+ <div
|
|
|
|
+ class={styles.scoreItem}
|
|
|
|
+ style={{ color: leveByScoreMeasureIcons[scoreItem.leve]?.color || "" }}
|
|
|
|
+ >
|
|
<img src={leveByScoreMeasureIcons[scoreItem.leve]?.icon} />
|
|
<img src={leveByScoreMeasureIcons[scoreItem.leve]?.icon} />
|
|
<span>{scoreItem.score}</span>
|
|
<span>{scoreItem.score}</span>
|
|
</div>
|
|
</div>
|
|
@@ -216,7 +245,11 @@ export default defineComponent({
|
|
})}
|
|
})}
|
|
{selectData.notes.map((item: any) => {
|
|
{selectData.notes.map((item: any) => {
|
|
return (
|
|
return (
|
|
- <div class={[styles.position, disableClickNote.value && styles.disable, styles.note]} style={item.bbox} onClick={() => skipNotePlay(item.index)}>
|
|
|
|
|
|
+ <div
|
|
|
|
+ class={[styles.position, disableClickNote.value && styles.disable, styles.note]}
|
|
|
|
+ style={item.bbox}
|
|
|
|
+ onClick={() => skipNotePlay(item.index)}
|
|
|
|
+ >
|
|
<div class={styles.noteFollow} data-vf={"vf" + item.id}>
|
|
<div class={styles.noteFollow} data-vf={"vf" + item.id}>
|
|
<Icon name="success" />
|
|
<Icon name="success" />
|
|
<Icon name="cross" />
|
|
<Icon name="cross" />
|