|
@@ -45,11 +45,15 @@ import {
|
|
|
} from "naive-ui";
|
|
|
import { LongArrowAltDown, LongArrowAltUp, GripLinesVertical } from "@vicons/fa";
|
|
|
import { svg2canvas } from "/src/utils/svg2canvas";
|
|
|
-import { downloadFile } from "/src/utils";
|
|
|
+import { decodeUrl, downloadFile } from "/src/utils";
|
|
|
import FileBtn, { IFileBtnType } from "./component/file-btn";
|
|
|
import TheSetting from "./component/the-setting";
|
|
|
import { useRoute } from "vue-router";
|
|
|
-import { api_musicSheetCreationDetail, api_musicSheetCreationUpdate } from "../api";
|
|
|
+import {
|
|
|
+ api_musicSheetCreationDetail,
|
|
|
+ api_musicSheetCreationSave,
|
|
|
+ api_musicSheetCreationUpdate,
|
|
|
+} from "../api";
|
|
|
import instrumentsNames from "/src/constant/instrmentsNames.json";
|
|
|
import { ALL_NOTES, ALL_Pitches } from "./noteData";
|
|
|
import { Close } from "@vicons/ionicons5";
|
|
@@ -58,6 +62,7 @@ import { getQuery } from "/src/utils/queryString";
|
|
|
import Metronome, { metronomeData } from "/src/helpers/metronome";
|
|
|
import cleanDeep from "clean-deep";
|
|
|
import { saveAs } from "file-saver";
|
|
|
+import qs from "query-string";
|
|
|
|
|
|
export const initMusic = (total: number): IMeasure[] => {
|
|
|
return new Array(total).fill(0).map((item, index) => {
|
|
@@ -338,7 +343,7 @@ export default defineComponent({
|
|
|
const progress = startTime / 1000 / totalTime;
|
|
|
nextTick(() => {
|
|
|
(abcData.synthControl as any).seek(progress);
|
|
|
- })
|
|
|
+ });
|
|
|
return;
|
|
|
}
|
|
|
}
|
|
@@ -1236,8 +1241,8 @@ export default defineComponent({
|
|
|
return instrumentsNames[code as keyof typeof instrumentsNames];
|
|
|
});
|
|
|
const getDetailData = async () => {
|
|
|
+ const query = getQuery();
|
|
|
data.loading = true;
|
|
|
- const query: any = getQuery();
|
|
|
const res = await api_musicSheetCreationDetail(query.id);
|
|
|
if (res?.code == 200) {
|
|
|
data.musicId = res.data.id || "";
|
|
@@ -1268,21 +1273,63 @@ export default defineComponent({
|
|
|
return res;
|
|
|
};
|
|
|
const handleSaveMusic = async (tips = true) => {
|
|
|
- await api_musicSheetCreationUpdate({
|
|
|
- name: data.musicName,
|
|
|
- creator: data.creator,
|
|
|
- creationConfig: renderMeasures(abcData.abc, { hiddenIndex: true }),
|
|
|
- creationData: JSON.stringify(cleanDeep(abcData.abc)),
|
|
|
- id: data.musicId,
|
|
|
- subjectId: 3,
|
|
|
- });
|
|
|
+ const query = getQuery();
|
|
|
+ if (query.id) {
|
|
|
+ await api_musicSheetCreationUpdate({
|
|
|
+ name: data.musicName,
|
|
|
+ creator: data.creator,
|
|
|
+ creationConfig: renderMeasures(abcData.abc, { hiddenIndex: true }),
|
|
|
+ creationData: JSON.stringify(cleanDeep(abcData.abc)),
|
|
|
+ id: query.id,
|
|
|
+ subjectId: "",
|
|
|
+ });
|
|
|
+ } else {
|
|
|
+ const res = await api_musicSheetCreationSave({
|
|
|
+ name: data.musicName,
|
|
|
+ creator: data.creator,
|
|
|
+ creationConfig: renderMeasures(abcData.abc, { hiddenIndex: true }),
|
|
|
+ creationData: JSON.stringify(cleanDeep(abcData.abc)),
|
|
|
+ subjectId: "",
|
|
|
+ });
|
|
|
+ if (res?.data) {
|
|
|
+ const hash = location.hash.split("?");
|
|
|
+ const qs_data = qs.parse(hash[1]);
|
|
|
+ qs_data.id = res.data;
|
|
|
+ try {
|
|
|
+ delete qs_data.config;
|
|
|
+ } catch (error) {
|
|
|
+ console.log("🚀 ~ error:", error)
|
|
|
+ }
|
|
|
+ location.hash = hash[0] + "?" + qs.stringify(qs_data);
|
|
|
+ }
|
|
|
+ }
|
|
|
if (tips) {
|
|
|
message.success("保存成功");
|
|
|
}
|
|
|
data.isSave = true;
|
|
|
};
|
|
|
+ const hanldeInitCreate = () => {
|
|
|
+ const query = getQuery();
|
|
|
+ const abc = decodeUrl(query.config);
|
|
|
+ console.log("🚀 ~ abc:", abc);
|
|
|
+ abcData.abc.celf = abc.celf ?? "K:treble";
|
|
|
+ abcData.abc.key = abc.key ?? "K:C";
|
|
|
+ abcData.abc.meter = abc.meter ?? "M:4/4";
|
|
|
+ abcData.abc.speed = abc.speed ?? "Q:1/4=80";
|
|
|
+ abcData.abc.visualTranspose = abc.visualTranspose ?? 0;
|
|
|
+ abcData.abc.subjectCode = abc.subjectCode ?? "acoustic_grand_piano";
|
|
|
+ const _instruments = ABCJS.synth.instrumentIndexToName.indexOf(abcData.abc.subjectCode as any);
|
|
|
+ abcData.synthOptions.program = _instruments > -1 ? _instruments : 0;
|
|
|
+ abcData.abc.measures = initMusic(abc.measure ?? 30);
|
|
|
+ data.loading = false;
|
|
|
+ };
|
|
|
onMounted(async () => {
|
|
|
- await getDetailData();
|
|
|
+ const query = getQuery();
|
|
|
+ if (query.id) {
|
|
|
+ await getDetailData();
|
|
|
+ } else {
|
|
|
+ hanldeInitCreate();
|
|
|
+ }
|
|
|
if (ABCJS.synth.supportsAudio()) {
|
|
|
abcData.synthControl = new ABCJS.synth.SynthController();
|
|
|
// console.log("🚀 ~ abcData.synthControl:", abcData.synthControl)
|
|
@@ -1757,6 +1804,8 @@ export default defineComponent({
|
|
|
await loadMiniMp3();
|
|
|
resetMidi(true);
|
|
|
popup.selectSubjectShow = false;
|
|
|
+ abcData.abc.subjectCode =
|
|
|
+ ABCJS.synth.instrumentIndexToName[abcData.synthOptions.program];
|
|
|
}}
|
|
|
></NSelect>
|
|
|
</>
|