|
@@ -1,6 +1,20 @@
|
|
|
-import { defineComponent, onMounted, onUnmounted, reactive, watch } from "vue";
|
|
|
-import { api_musicSheetCreationWav2mp3, api_musicSheetSave, api_subjectList } from "../../api";
|
|
|
-import { NButton, NForm, NFormItem, NIcon, NModal, NSelect, NSpace, useMessage } from "naive-ui";
|
|
|
+import { defineComponent, nextTick, onMounted, onUnmounted, reactive, watch } from "vue";
|
|
|
+import {
|
|
|
+ api_musicSheetCreationWav2mp3,
|
|
|
+ api_musicSheetCreationSaveMusic,
|
|
|
+ api_subjectList,
|
|
|
+} from "../../api";
|
|
|
+import {
|
|
|
+ NButton,
|
|
|
+ NForm,
|
|
|
+ NFormItem,
|
|
|
+ NIcon,
|
|
|
+ NModal,
|
|
|
+ NProgress,
|
|
|
+ NSelect,
|
|
|
+ NSpace,
|
|
|
+ useMessage,
|
|
|
+} from "naive-ui";
|
|
|
import styles from "./index.module.less";
|
|
|
import { Close } from "@vicons/ionicons5";
|
|
|
import { SelectMixedOption } from "naive-ui/es/select/src/interface";
|
|
@@ -18,12 +32,13 @@ export default defineComponent({
|
|
|
default: () => ({}),
|
|
|
},
|
|
|
},
|
|
|
- emits: ["update:show"],
|
|
|
+ emits: ["update:show", "success"],
|
|
|
setup(props, { emit }) {
|
|
|
const message = useMessage();
|
|
|
const model = reactive({
|
|
|
subjects: [] as SelectMixedOption[],
|
|
|
saveLoading: false,
|
|
|
+ saveProgress: 0,
|
|
|
productOpen: false,
|
|
|
productIfameSrc: "",
|
|
|
});
|
|
@@ -56,10 +71,7 @@ export default defineComponent({
|
|
|
}
|
|
|
imgs = imgs.filter((item: any) => item.base64);
|
|
|
if (imgs.length === 3) {
|
|
|
- message.success("生成成功");
|
|
|
handleUploadImg(imgs);
|
|
|
- } else {
|
|
|
- message.error("生成失败");
|
|
|
}
|
|
|
console.log("🚀 ~ 上传之前", [...imgs]);
|
|
|
}
|
|
@@ -69,6 +81,7 @@ export default defineComponent({
|
|
|
const fileName = `${Date.now()}p${i}.png`;
|
|
|
const file = dataURLtoFile(imgs[i].base64, fileName);
|
|
|
imgs[i].url = await api_uploadFile(file, fileName, () => {});
|
|
|
+ model.saveProgress = (i + 1) * 20;
|
|
|
}
|
|
|
froms.musicImg = imgs[0]?.url || "";
|
|
|
froms.musicSvg = imgs[1]?.url || "";
|
|
@@ -105,9 +118,10 @@ export default defineComponent({
|
|
|
);
|
|
|
|
|
|
const createMusic = async () => {
|
|
|
- await api_musicSheetSave({
|
|
|
+ await api_musicSheetCreationSaveMusic({
|
|
|
+ musicSheetCreationId: props.item.id,
|
|
|
musicSheetName: props.item.name || "曲谱名称",
|
|
|
- musicSheetCategoriesId: 29,
|
|
|
+ musicSheetCategoriesId: "",
|
|
|
audioType: "MP3",
|
|
|
mp3Type: "MP3",
|
|
|
xmlFileUrl: props.item.xml,
|
|
@@ -119,7 +133,7 @@ export default defineComponent({
|
|
|
background: [
|
|
|
{
|
|
|
audioFileUrl: froms.mp3,
|
|
|
- track: "",
|
|
|
+ track: "P1",
|
|
|
},
|
|
|
],
|
|
|
musicImg: froms.musicImg,
|
|
@@ -133,18 +147,34 @@ export default defineComponent({
|
|
|
froms.mp3 = data;
|
|
|
};
|
|
|
|
|
|
+ const handleClose = () => {
|
|
|
+ model.saveLoading = false;
|
|
|
+ model.saveProgress = 0;
|
|
|
+ }
|
|
|
+
|
|
|
/** 自动生成图片 */
|
|
|
- const handleAutoProduct = () => {
|
|
|
+ const handleAutoProduct = async () => {
|
|
|
+ model.saveProgress = 0;
|
|
|
const xml = props.item.xml;
|
|
|
if (!xml) {
|
|
|
message.error("没有生成xml文件");
|
|
|
+ handleClose();
|
|
|
return;
|
|
|
}
|
|
|
+ const res = await fetch(xml)
|
|
|
+ if (res.status > 299 || res.status < 200){
|
|
|
+ message.error("xml文件不存在");
|
|
|
+ handleClose();
|
|
|
+ return;
|
|
|
+ }
|
|
|
const origin = /(localhost|192)/.test(location.host)
|
|
|
? "https://test.lexiaoya.cn"
|
|
|
: location.origin;
|
|
|
model.productIfameSrc = `${origin}/instrument/#/product-img?xmlUrl=${xml}&productXmlImg=1`;
|
|
|
model.productOpen = true;
|
|
|
+ setTimeout(() => {
|
|
|
+ model.saveProgress = 10;
|
|
|
+ }, 800)
|
|
|
};
|
|
|
|
|
|
const handleUpload = () => {
|
|
@@ -153,11 +183,15 @@ export default defineComponent({
|
|
|
};
|
|
|
const handleSubmit = async () => {
|
|
|
await wav2mp3();
|
|
|
+ model.saveProgress = 70;
|
|
|
await createMusic();
|
|
|
+ model.saveProgress = 100;
|
|
|
+ emit("success");
|
|
|
+ message.success("上传成功");
|
|
|
setTimeout(() => {
|
|
|
model.saveLoading = false;
|
|
|
emit("update:show", false);
|
|
|
- }, 1000);
|
|
|
+ }, 300);
|
|
|
};
|
|
|
return () => (
|
|
|
<>
|
|
@@ -184,7 +218,7 @@ export default defineComponent({
|
|
|
v-model:value={froms.subjectId}
|
|
|
></NSelect>
|
|
|
</NFormItem>
|
|
|
- <NFormItem label="是否公开">
|
|
|
+ {/* <NFormItem label="是否公开">
|
|
|
<NSpace class={styles.checkbox} wrapItem={false}>
|
|
|
<NButton
|
|
|
secondary
|
|
@@ -203,6 +237,9 @@ export default defineComponent({
|
|
|
不公开
|
|
|
</NButton>
|
|
|
</NSpace>
|
|
|
+ </NFormItem> */}
|
|
|
+ <NFormItem label="上传进度" style={{ display: model.saveLoading ? "" : "none" }}>
|
|
|
+ <NProgress percentage={model.saveProgress} />
|
|
|
</NFormItem>
|
|
|
</NForm>
|
|
|
<div class={styles.btns}>
|
|
@@ -213,7 +250,7 @@ export default defineComponent({
|
|
|
</div>
|
|
|
</div>
|
|
|
</NModal>
|
|
|
- { model.productOpen && <iframe class={styles.productIframe} src={model.productIfameSrc}></iframe>}
|
|
|
+ {model.productOpen && <iframe class={styles.productIframe} src={model.productIfameSrc}></iframe>}
|
|
|
</>
|
|
|
);
|
|
|
},
|