|
@@ -193,6 +193,8 @@ export default defineComponent({
|
|
|
multiSelect: false,
|
|
|
multiSelectList: [] as any[],
|
|
|
multilList: [] as any[],
|
|
|
+
|
|
|
+ isrhythm: false, // 是否节奏
|
|
|
});
|
|
|
const noteTypes = ABC_DATA.types.map((item) => item.value).filter(Boolean);
|
|
|
const accidentals = ABC_DATA.accidentals.map((item) => item.value).filter(Boolean);
|
|
@@ -371,6 +373,7 @@ export default defineComponent({
|
|
|
visualKey: "K:C",
|
|
|
subjectCode: "acoustic_grand_piano",
|
|
|
measures: initMusic(30),
|
|
|
+ isrhythm: "",
|
|
|
} as IAbc,
|
|
|
});
|
|
|
|
|
@@ -1038,26 +1041,26 @@ export default defineComponent({
|
|
|
|
|
|
// 调号
|
|
|
if (type === "key") {
|
|
|
- if (data.active) {
|
|
|
- if (data.active.measureIndex === 0 && data.active.noteIndex === 0) {
|
|
|
- abcData.abc.key = value;
|
|
|
- abcData.abc.visualTranspose = 0;
|
|
|
- abcData.abc.visualKey = "K:C";
|
|
|
- abcData.abc.visualKey = value;
|
|
|
- await handleResetRender();
|
|
|
- } else {
|
|
|
- if (!activeNote) return;
|
|
|
- activeNote.key = `[${value}]`;
|
|
|
- await handleResetRender();
|
|
|
- }
|
|
|
- rangeHighlight(data.active.startChar);
|
|
|
- } else {
|
|
|
- abcData.abc.key = value;
|
|
|
- abcData.abc.visualTranspose = 0;
|
|
|
- abcData.abc.visualKey = "K:C";
|
|
|
- abcData.abc.visualKey = value;
|
|
|
- await handleResetRender();
|
|
|
- }
|
|
|
+ // if (data.active) {
|
|
|
+ // if (data.active.measureIndex === 0 && data.active.noteIndex === 0) {
|
|
|
+ // abcData.abc.key = value;
|
|
|
+ // abcData.abc.visualTranspose = 0;
|
|
|
+ // abcData.abc.visualKey = "K:C";
|
|
|
+ // abcData.abc.visualKey = value;
|
|
|
+ // await handleResetRender();
|
|
|
+ // } else {
|
|
|
+ // if (!activeNote) return;
|
|
|
+ // activeNote.key = `[${value}]`;
|
|
|
+ // await handleResetRender();
|
|
|
+ // }
|
|
|
+ // rangeHighlight(data.active.startChar);
|
|
|
+ // } else {
|
|
|
+ // }
|
|
|
+ abcData.abc.key = value;
|
|
|
+ abcData.abc.visualTranspose = 0;
|
|
|
+ abcData.abc.visualKey = "K:C";
|
|
|
+ abcData.abc.visualKey = value;
|
|
|
+ await handleResetRender();
|
|
|
}
|
|
|
|
|
|
// 拍号
|
|
@@ -1313,7 +1316,15 @@ export default defineComponent({
|
|
|
await handleResetRender();
|
|
|
data.active = null as unknown as INoteActive;
|
|
|
}
|
|
|
- handleClearMultiSelect();
|
|
|
+ if (data.multilList.length) {
|
|
|
+ handleClearMultiSelect();
|
|
|
+ }
|
|
|
+ if (type === "setrhythm") {
|
|
|
+ abcData.abc.isrhythm = abcData.abc.isrhythm === "rhythm" ? "" : "rhythm";
|
|
|
+ console.log("🚀 ~ abcData.abc.isrhythm:", abcData.abc.isrhythm);
|
|
|
+ popup.moveKeyShow = false;
|
|
|
+ await handleResetRender();
|
|
|
+ }
|
|
|
};
|
|
|
const handleClearMultiSelect = async () => {
|
|
|
data.multilList = [];
|
|
@@ -1402,9 +1413,13 @@ export default defineComponent({
|
|
|
/** 移调 */
|
|
|
const handleMoveKey = async (item: (typeof ABC_DATA.key)[0]) => {
|
|
|
console.log(item);
|
|
|
- console.log(abcData.abc.visualKey || abcData.abc.key, "=>", item.value)
|
|
|
- const moveData = getKeyStep(item.value, abcData.abc.visualKey || abcData.abc.key, data.moveKeyType);
|
|
|
- console.log("🚀 ~ item:", moveData);
|
|
|
+ console.log(abcData.abc.visualKey || abcData.abc.key, "=>", item.value);
|
|
|
+ const moveData = getKeyStep(
|
|
|
+ item.value,
|
|
|
+ abcData.abc.visualKey || abcData.abc.key,
|
|
|
+ data.moveKeyType
|
|
|
+ );
|
|
|
+ console.log("🚀 ~ item:", moveData);
|
|
|
(window as any).visual_Key = item.value.split(":")[1];
|
|
|
abcData.abc.visualTranspose = moveData.step;
|
|
|
abcData.abc.visualKey = item.value;
|
|
@@ -1517,6 +1532,7 @@ export default defineComponent({
|
|
|
const _instruments = ABCJS.synth.instrumentIndexToName.indexOf(abcData.abc.subjectCode as any);
|
|
|
abcData.synthOptions.program = _instruments > -1 ? _instruments : 0;
|
|
|
abcData.abc.measures = abc.measures || initMusic(30);
|
|
|
+ abcData.abc.isrhythm = abc.isrhythm ? abc.isrhythm : "";
|
|
|
// console.log("🚀 ~ abcData.abc:", abcData.abc);
|
|
|
}
|
|
|
}
|
|
@@ -2179,7 +2195,9 @@ export default defineComponent({
|
|
|
>
|
|
|
{{
|
|
|
trigger: () => (
|
|
|
- <div class={styles.topBtn}>
|
|
|
+ <div
|
|
|
+ class={[styles.topBtn, abcData.abc.isrhythm === "rhythm" && styles.btnDisabled]}
|
|
|
+ >
|
|
|
<div class={styles.btnImg}>
|
|
|
<img class={styles.topBtnIcon} src={getImage("icon_15.png")} />
|
|
|
</div>
|
|
@@ -2676,6 +2694,34 @@ export default defineComponent({
|
|
|
</div>
|
|
|
</div>
|
|
|
</CollapseItem>
|
|
|
+ <CollapseItem title="模式" name="staffmodel">
|
|
|
+ <div class={styles.wrapBox}>
|
|
|
+ <div
|
|
|
+ class={styles.topBtn}
|
|
|
+ onClick={() => {
|
|
|
+ handleChange({ type: "setrhythm", value: "" });
|
|
|
+ }}
|
|
|
+ >
|
|
|
+ <div
|
|
|
+ class={[styles.btnImg, abcData.abc.isrhythm === "rhythm" && styles.btnImgActive]}
|
|
|
+ >
|
|
|
+ {/* <TheIcon iconClassName={ABC_DATA.dynamics[8].icon} size={["2em", "2em"]} /> */}
|
|
|
+ </div>
|
|
|
+ <div>节奏模式</div>
|
|
|
+ </div>
|
|
|
+ <div
|
|
|
+ class={styles.topBtn}
|
|
|
+ onClick={() => {
|
|
|
+ // handleChange({ type: "dynamics", value: ABC_DATA.dynamics[8].value });
|
|
|
+ }}
|
|
|
+ >
|
|
|
+ <div class={[styles.btnImg]}>
|
|
|
+ {/* <TheIcon iconClassName={ABC_DATA.dynamics[8].icon} size={["2em", "2em"]} /> */}
|
|
|
+ </div>
|
|
|
+ <div>预览简谱</div>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ </CollapseItem>
|
|
|
<CollapseItem title="反复与跳跃" name="repeat">
|
|
|
<div class={styles.wrapBox}>
|
|
|
{ABC_DATA.repeat.map((item) => (
|
|
@@ -2753,7 +2799,7 @@ export default defineComponent({
|
|
|
</Collapse>
|
|
|
</div>
|
|
|
|
|
|
- <div class={styles.box}>
|
|
|
+ <div class={[styles.box, abcData.abc.isrhythm === "rhythm" && styles.rhythm]}>
|
|
|
{/* <NButton type={data.multiSelect ? "primary" : "default"}>多选</NButton> */}
|
|
|
<div class={styles.titleBox}>
|
|
|
<div class={styles.titleName} style={{ width: "50%", margin: "0 auto" }}>
|