lex 1 year ago
parent
commit
f0dd15b40b

File diff suppressed because it is too large
+ 0 - 0
dist/assets/index-63e7d2ac.js


File diff suppressed because it is too large
+ 0 - 0
dist/assets/index-legacy-3a866481.js


File diff suppressed because it is too large
+ 1 - 0
dist/assets/index-legacy-acd7c944.js


+ 8 - 0
dist/index.html

@@ -26,7 +26,11 @@
   <script src="./flexible.js"></script>
   <script src="./abc2svg/xml2abc.js"></script>
   <script src="./abc2svg/jquery-1.11.1.min.js"></script>
+<<<<<<< HEAD
   <script type="module" crossorigin src="./assets/index-d5339330.js"></script>
+=======
+  <script type="module" crossorigin src="./assets/index-63e7d2ac.js"></script>
+>>>>>>> iteration-20231220
   <link rel="stylesheet" href="./assets/index-7267f7b6.css">
   <script type="module">import.meta.url;import("_").catch(()=>1);async function* g(){};if(location.protocol!="file:"){window.__vite_is_modern_browser=true}</script>
   <script type="module">!function(){if(window.__vite_is_modern_browser)return;console.warn("vite: loading legacy chunks, syntax error above and the same error below should be ignored");var e=document.getElementById("vite-legacy-polyfill"),n=document.createElement("script");n.src=e.src,n.onload=function(){System.import(document.getElementById('vite-legacy-entry').getAttribute('data-src'))},document.body.appendChild(n)}();</script>
@@ -37,7 +41,11 @@
   
   <script nomodule>!function(){var e=document,t=e.createElement("script");if(!("noModule"in t)&&"onbeforeload"in t){var n=!1;e.addEventListener("beforeload",(function(e){if(e.target===t)n=!0;else if(!e.target.hasAttribute("nomodule")||!n)return;e.preventDefault()}),!0),t.type="module",t.src=".",e.head.appendChild(t),t.remove()}}();</script>
   <script nomodule crossorigin id="vite-legacy-polyfill" src="./assets/polyfills-legacy-a19b005e.js"></script>
+<<<<<<< HEAD
   <script nomodule crossorigin id="vite-legacy-entry" data-src="./assets/index-legacy-acd7c944.js">System.import(document.getElementById('vite-legacy-entry').getAttribute('data-src'))</script>
+=======
+  <script nomodule crossorigin id="vite-legacy-entry" data-src="./assets/index-legacy-3a866481.js">System.import(document.getElementById('vite-legacy-entry').getAttribute('data-src'))</script>
+>>>>>>> iteration-20231220
 </body>
 
 </html>

+ 7 - 5
src/pc/component/upload-file/index.module.less

@@ -2,6 +2,7 @@
   display: flex;
   align-items: center;
   padding-left: 10px;
+  padding-bottom: 17px;
 
   :global {
     .n-upload {
@@ -9,25 +10,26 @@
     }
 
     .n-button {
-      height: 36px !important;
-      font-size: 15px;
+      height: 34px !important;
+      font-size: 13px !important;
       font-weight: 600;
       color: #FFFFFF;
       line-height: 21px;
+      padding: 0 18px;
       border-radius: 7px !important;
     }
   }
 
   .iconUpload {
-    width: 19px;
-    height: 16px;
+    width: 17px;
+    height: 14px;
     margin-right: 8px;
   }
 }
 
 .tips {
   padding-left: 11px;
-  font-size: 15px;
+  font-size: 13px;
   color: #777777;
   line-height: 21px;
 }

+ 210 - 265
src/pc/create/component/the-create/index.tsx

@@ -1,25 +1,4 @@
-import {
-	NButton,
-	NCard,
-	NCheckbox,
-	NGi,
-	NGrid,
-	NIcon,
-	NInputNumber,
-	NLayout,
-	NLayoutContent,
-	NLayoutSider,
-	NModal,
-	NPopover,
-	NRadio,
-	NRadioGroup,
-	NScrollbar,
-	NSpace,
-	NTabPane,
-	NTable,
-	NTabs,
-	useMessage,
-} from "naive-ui";
+import { NButton, NCard, NCheckbox, NGi, NGrid, NIcon, NInputNumber, NLayout, NLayoutContent, NLayoutSider, NModal, NPopover, NRadio, NRadioGroup, NScrollbar, NSpace, NTabPane, NTable, NTabs, useMessage } from "naive-ui";
 import { defineComponent, onMounted, reactive, watch } from "vue";
 import { Close } from "@vicons/ionicons5";
 import styles from "./index.module.less";
@@ -28,140 +7,128 @@ import { ABC_DATA } from "/src/pc/home/runtime";
 import TheIcon from "/src/components/The-icon";
 import { encodeUrl } from "/src/utils";
 const instruments = [
-	{
-		label: "竖笛",
-		key: "recorder",
-		id: 4,
-		icon: getImage("icon_27_0.png"),
-		range: {
-			min: 36,
-			max: 62,
-		},
-	},
-	{
-		label: "排箫",
-		key: "pan_flute",
-		id: 1,
-		icon: getImage("icon_27_1.png"),
-		range: {
-			min: 31,
-			max: 66,
-		},
-	},
-	{
-		label: "口风琴",
-		key: "piccolo",
-		id: 5,
-		icon: getImage("icon_27_2.png"),
-		range: {
-			min: 41,
-			max: 72,
-		},
-	},
-	{
-		label: "陶笛",
-		key: "blown_bottle",
-		id: 2,
-		icon: getImage("icon_27_3.png"),
-		range: {
-			min: 33,
-			max: 53,
-		},
-	},
-	{
-		label: "葫芦丝",
-		key: "clarinet",
-		id: 3,
-		icon: getImage("icon_27_4.png"),
-		range: {
-			min: 40,
-			max: 57,
-		},
-	},
+  {
+    label: "竖笛",
+    key: "recorder",
+    id: 4,
+    icon: getImage("icon_27_0.png"),
+    range: {
+      min: 36,
+      max: 62,
+    },
+  },
+  {
+    label: "排箫",
+    key: "pan_flute",
+    id: 1,
+    icon: getImage("icon_27_1.png"),
+    range: {
+      min: 31,
+      max: 66,
+    },
+  },
+  {
+    label: "口风琴",
+    key: "piccolo",
+    id: 5,
+    icon: getImage("icon_27_2.png"),
+    range: {
+      min: 41,
+      max: 72,
+    },
+  },
+  {
+    label: "陶笛",
+    key: "blown_bottle",
+    id: 2,
+    icon: getImage("icon_27_3.png"),
+    range: {
+      min: 33,
+      max: 53,
+    },
+  },
+  {
+    label: "葫芦丝",
+    key: "clarinet",
+    id: 3,
+    icon: getImage("icon_27_4.png"),
+    range: {
+      min: 40,
+      max: 57,
+    },
+  },
 ];
 export const notationInstruments = instruments;
 export default defineComponent({
-	name: "TheCreate",
-	props: {
-		show: {
-			type: Boolean,
-			default: false,
-		},
-	},
-	emits: ["update:show", "create"],
-	setup(props, { emit }) {
-		const message = useMessage();
+  name: "TheCreate",
+  props: {
+    show: {
+      type: Boolean,
+      default: false,
+    },
+  },
+  emits: ["update:show", "create"],
+  setup(props, { emit }) {
+    const message = useMessage();
 
-		const formsOptions = reactive({
-			loading: false,
-		});
-		const froms = reactive({
-			key: ABC_DATA.key[0],
-			meter: ABC_DATA.meter[0],
-			speed: 80,
-			measure: 30,
-			subjectCode: "recorder",
-			subjectId: 4,
-		});
+    const formsOptions = reactive({
+      loading: false,
+    });
+    const froms = reactive({
+      key: ABC_DATA.key[0],
+      meter: ABC_DATA.meter[0],
+      speed: 80,
+      measure: 30,
+      // subjectCode: "recorder",
+      // subjectId: 4,
+    });
 
-		const handleCreate = async () => {
-			if (!froms.speed) {
-				message.warning("请输入开始速度");
-				return;
-			}
-			if (!froms.measure) {
-				message.warning("请输入小节数量");
-				return;
-			}
-			formsOptions.loading = true;
-			handleOpenNotaion({
-				meter: froms.meter.value,
-				speed: `Q:1/4=${froms.speed}`,
-				key: froms.key.value,
-				subjectCode: froms.subjectCode,
-				measure: froms.measure,
-				subjectId: froms.subjectId
-			});
-			emit("create");
-			formsOptions.loading = false;
-		};
+    const handleCreate = async () => {
+      if (!froms.speed) {
+        message.warning("请输入开始速度");
+        return;
+      }
+      if (!froms.measure) {
+        message.warning("请输入小节数量");
+        return;
+      }
+      formsOptions.loading = true;
+      handleOpenNotaion({
+        meter: froms.meter.value,
+        speed: `Q:1/4=${froms.speed}`,
+        key: froms.key.value,
+        // subjectCode: froms.subjectCode,
+        measure: froms.measure,
+        // subjectId: froms.subjectId
+      });
+      emit("create");
+      formsOptions.loading = false;
+    };
 
-		const handleOpenNotaion = (data: any) => {
-			const url = `${location.origin}/notation/#/?v=${Date.now()}&config=${encodeUrl(data)}`;
-			// console.log("🚀 ~ url:", url);
-			window.parent.postMessage(
-				{
-					api: "notation_open",
-					url: url,
-				},
-				"*"
-			);
-			// window.open(url, "_blank");
-		};
+    const handleOpenNotaion = (data: any) => {
+      const url = `${location.origin}/notation/#/?v=${Date.now()}&config=${encodeUrl(data)}`;
+      // console.log("🚀 ~ url:", url);
+      window.parent.postMessage(
+        {
+          api: "notation_open",
+          url: url,
+        },
+        "*"
+      );
+      // window.open(url, "_blank");
+    };
 
-		return () => (
-			<NModal
-				unstableShowMask={false}
-				transformOrigin="center"
-				autoFocus={false}
-				show={props.show}
-				onUpdate:show={(val) => emit("update:show", val)}
-			>
-				<div class={styles.setbox}>
-					<div class={styles.head}>
-						<div>新建乐谱</div>
-						<NButton
-							class={styles.close}
-							quaternary
-							circle
-							size="small"
-							onClick={() => emit("update:show", false)}
-						>
-							<NIcon component={Close} size={18} />
-						</NButton>
-					</div>
-					<div class={styles.content}>
-						<div class={styles.lineTitle}>声部</div>
+    return () => (
+      <NModal unstableShowMask={false} transformOrigin="center" autoFocus={false} show={props.show} onUpdate:show={(val) => emit("update:show", val)}>
+        <div class={styles.setbox}>
+          <div class={styles.head}>
+            <div>新建乐谱</div>
+            <NButton class={styles.close} quaternary circle size="small" onClick={() => emit("update:show", false)}>
+              <NIcon component={Close} size={18} />
+            </NButton>
+          </div>
+          <div class={styles.content}>
+            {/* <div class={styles.lineTitle}>声部</div>
 						<NSpace size={32} style={{ paddingBottom: "45px" }}>
 							{instruments.map((item) => (
 								<div
@@ -178,122 +145,100 @@ export default defineComponent({
 									<img class={styles.itemIcon} src={getImage("icon_check.png")} />
 								</div>
 							))}
-						</NSpace>
-						<NSpace style={{ paddingBottom: "45px" }}>
-							<NPopover to="body" trigger="click">
-								{{
-									trigger: () => (
-										<div>
-											<div class={styles.lineTitle}>调号</div>
-											<div class={styles.beatItem}>
-												<div class={[styles.beatIcon]}>
-													<TheIcon iconClassName={froms.key.icon} />
-												</div>
-												<div>{froms.key.name}</div>
-											</div>
-										</div>
-									),
-									default: () => (
-										<NGrid cols={5} xGap={20} yGap={8}>
-											{ABC_DATA.key.map((item) => (
-												<NGi>
-													<div
-														class={[styles.btnItem, froms.key.value === item.value && styles.active]}
-														onClick={() => (froms.key = item)}
-													>
-														<div class={[styles.btnItemIcon]}>
-															<TheIcon iconClassName={item.icon} />
-														</div>
-														<div class={styles.btnItemName}>{item.name}</div>
-													</div>
-												</NGi>
-											))}
-										</NGrid>
-									),
-								}}
-							</NPopover>
+						</NSpace> */}
+            <NSpace style={{ paddingBottom: "45px" }}>
+              <NPopover to="body" trigger="click">
+                {{
+                  trigger: () => (
+                    <div>
+                      <div class={styles.lineTitle}>调号</div>
+                      <div class={styles.beatItem}>
+                        <div class={[styles.beatIcon]}>
+                          <TheIcon iconClassName={froms.key.icon} />
+                        </div>
+                        <div>{froms.key.name}</div>
+                      </div>
+                    </div>
+                  ),
+                  default: () => (
+                    <NGrid cols={5} xGap={20} yGap={8}>
+                      {ABC_DATA.key.map((item) => (
+                        <NGi>
+                          <div class={[styles.btnItem, froms.key.value === item.value && styles.active]} onClick={() => (froms.key = item)}>
+                            <div class={[styles.btnItemIcon]}>
+                              <TheIcon iconClassName={item.icon} />
+                            </div>
+                            <div class={styles.btnItemName}>{item.name}</div>
+                          </div>
+                        </NGi>
+                      ))}
+                    </NGrid>
+                  ),
+                }}
+              </NPopover>
 
-							<NPopover to="body" trigger="click">
-								{{
-									trigger: () => (
-										<div>
-											<div class={styles.lineTitle}>拍号</div>
-											<div class={styles.beatItem}>
-												<div class={[styles.beatIcon]}>
-													<TheIcon iconClassName={froms.meter.icon} />
-												</div>
-												<div>{froms.meter.name}</div>
-											</div>
-										</div>
-									),
-									default: () => (
-										<NGrid cols={5} xGap={50} yGap={20}>
-											{ABC_DATA.meter.map((item) => (
-												<NGi>
-													<div
-														class={[styles.btnItem, froms.meter.value === item.value && styles.active]}
-														onClick={() => (froms.meter = item)}
-													>
-														<div class={[styles.btnItemIcon]}>
-															<TheIcon iconClassName={item.icon} />
-														</div>
-														<div class={styles.btnItemName}>{item.name}</div>
-													</div>
-												</NGi>
-											))}
-										</NGrid>
-									),
-								}}
-							</NPopover>
-							<div>
-								<div class={styles.lineTitle}>速度</div>
-								<div class={styles.beatItem}>
-									<NInputNumber
-										size="large"
-										v-model:value={froms.speed}
-										placeholder="开始速度"
-										showButton={false}
-										min={50}
-									>
-										{{
-											prefix: () => (
-												<div class={styles.speedIcon}>
-													<TheIcon iconClassName="icon-a-sudu-4fenyinfu" size={["2em", "1em"]} />
-												</div>
-											),
-										}}
-									</NInputNumber>
-								</div>
-							</div>
-							<div>
-								<div class={styles.lineTitle}>小节</div>
-								<div class={styles.beatItem}>
-									<NInputNumber
-										placeholder="小节数量"
-										size="large"
-										v-model:value={froms.measure}
-										min={4}
-									></NInputNumber>
-								</div>
-							</div>
-						</NSpace>
+              <NPopover to="body" trigger="click">
+                {{
+                  trigger: () => (
+                    <div>
+                      <div class={styles.lineTitle}>拍号</div>
+                      <div class={styles.beatItem}>
+                        <div class={[styles.beatIcon]}>
+                          <TheIcon iconClassName={froms.meter.icon} />
+                        </div>
+                        <div>{froms.meter.name}</div>
+                      </div>
+                    </div>
+                  ),
+                  default: () => (
+                    <NGrid cols={5} xGap={50} yGap={20}>
+                      {ABC_DATA.meter.map((item) => (
+                        <NGi>
+                          <div class={[styles.btnItem, froms.meter.value === item.value && styles.active]} onClick={() => (froms.meter = item)}>
+                            <div class={[styles.btnItemIcon]}>
+                              <TheIcon iconClassName={item.icon} />
+                            </div>
+                            <div class={styles.btnItemName}>{item.name}</div>
+                          </div>
+                        </NGi>
+                      ))}
+                    </NGrid>
+                  ),
+                }}
+              </NPopover>
+              <div>
+                <div class={styles.lineTitle}>速度</div>
+                <div class={styles.beatItem}>
+                  <NInputNumber size="large" v-model:value={froms.speed} placeholder="开始速度" showButton={false} min={50}>
+                    {{
+                      prefix: () => (
+                        <div class={styles.speedIcon}>
+                          <TheIcon iconClassName="icon-a-sudu-4fenyinfu" size={["2em", "1em"]} />
+                        </div>
+                      ),
+                    }}
+                  </NInputNumber>
+                </div>
+              </div>
+              <div>
+                <div class={styles.lineTitle}>小节</div>
+                <div class={styles.beatItem}>
+                  <NInputNumber placeholder="小节数量" size="large" v-model:value={froms.measure} min={4}></NInputNumber>
+                </div>
+              </div>
+            </NSpace>
 
-						<div class={styles.btns}>
-							<NButton round onClick={() => emit("update:show", false)}>
-								取消
-							</NButton>
-							<NButton
-								loading={formsOptions.loading}
-								round
-								type="primary"
-								onClick={() => handleCreate()}
-							>
-								确定
-							</NButton>
-						</div>
-					</div>
-				</div>
-			</NModal>
-		);
-	},
+            <div class={styles.btns}>
+              <NButton round onClick={() => emit("update:show", false)}>
+                取消
+              </NButton>
+              <NButton loading={formsOptions.loading} round type="primary" onClick={() => handleCreate()}>
+                确定
+              </NButton>
+            </div>
+          </div>
+        </div>
+      </NModal>
+    );
+  },
 });

+ 17 - 11
src/pc/home/index.tsx

@@ -570,7 +570,7 @@ export default defineComponent({
     const autoSave = () => {
       saveTimer && clearTimeout(saveTimer);
       saveTimer = setTimeout(() => {
-        handleSaveMusic(false);
+        handleSaveMusic(false, false);
       }, 15000);
     };
 
@@ -723,7 +723,7 @@ export default defineComponent({
     const handleClickExit = async () => {
       if (data.saveLoading) return;
       const msg = message.loading("保存中...", { duration: 0 });
-      await handleSaveMusic(false);
+      await handleSaveMusic(false, false);
       setTimeout(async () => {
         msg.type = "success";
         msg.content = "保存成功";
@@ -1519,12 +1519,18 @@ export default defineComponent({
         message.loading("保存中...", { duration: 0 });
       }
     };
-    const handleSaveMusic = async (tips = true) => {
+
+    /**
+     * 保存谱面
+     * @param tips 是否显示加载 默认 true
+     * @param saveWav 是否保存wav文件 默认true
+     */
+    const handleSaveMusic = async (tips = true, saveWav = true) => {
       const query = getQuery();
       abcData.abc.title = data.musicName;
       abcData.abc.creator = data.creator;
       setSaveLoading(tips);
-      const wavUrl = await productWav(false);
+      const wavUrl = saveWav ? await productWav(false) : null;
       const pngUrl = await productPng(false);
       console.log("🚀 ~ pngUrl:", pngUrl);
       try {
@@ -1540,7 +1546,7 @@ export default defineComponent({
             creationData: JSON.stringify(cleanDeep(abcData.abc)),
             id: query.id,
             subjectId: data.subjectId,
-            filePath: wavUrl,
+            filePath: saveWav ? wavUrl : null,
             coverImg: pngUrl,
           });
         } else {
@@ -1554,7 +1560,7 @@ export default defineComponent({
             }),
             creationData: JSON.stringify(cleanDeep(abcData.abc)),
             subjectId: data.subjectId,
-            filePath: wavUrl,
+            filePath: saveWav ? wavUrl : null,
             coverImg: pngUrl,
           });
           if (res?.data) {
@@ -1627,7 +1633,6 @@ export default defineComponent({
         });
       }
 
-      console.log(ABCJS);
       await handleResetRender();
       loadMiniMp3();
       document.addEventListener("keyup", handleKeyUp);
@@ -1902,9 +1907,10 @@ export default defineComponent({
 
     const handleUpdate = async () => {
       if (data.saveLoading) return;
-      if (!data.isSave) {
-        await handleSaveMusic();
-      }
+      // if (!data.isSave) {
+      // }
+      // 由于没有保存wav文件这里需要在保存一次
+      await handleSaveMusic();
       const query = getQuery();
       const res = await api_musicSheetCreationDetail(query.id);
       if (res.data) {
@@ -1935,7 +1941,7 @@ export default defineComponent({
                     if (val === "newMusic") {
                       handleCreateMusic();
                     } else if (val === "save") {
-                      handleSaveMusic();
+                      handleSaveMusic(true, false);
                     } else if (["xml"].includes(val)) {
                       handleExport();
                     } else if (val === "upload") {

+ 2 - 2
vite.config.ts

@@ -48,8 +48,8 @@ export default defineConfig({
     // https: true,
     proxy: {
       "^/edu-app/.*": {
-        // target: "https://test.lexiaoya.cn",
-        target: "https://dev.kt.colexiu.com",
+        target: "https://test.lexiaoya.cn",
+        // target: "https://dev.kt.colexiu.com",
         changeOrigin: true,
         // rewrite: (path) => path.replace(/^\/edu-app/, ""),
       },

Some files were not shown because too many files changed in this diff