|  | @@ -1,10 +1,21 @@
 | 
	
		
			
				|  |  | -import { defineComponent, nextTick, onMounted, onUnmounted, reactive, ref, watch } from "vue";
 | 
	
		
			
				|  |  | +import {
 | 
	
		
			
				|  |  | +  defineComponent,
 | 
	
		
			
				|  |  | +  nextTick,
 | 
	
		
			
				|  |  | +  onMounted,
 | 
	
		
			
				|  |  | +  onUnmounted,
 | 
	
		
			
				|  |  | +  reactive,
 | 
	
		
			
				|  |  | +  ref,
 | 
	
		
			
				|  |  | +  watch,
 | 
	
		
			
				|  |  | +} from "vue";
 | 
	
		
			
				|  |  |  import styles from "./index.module.less";
 | 
	
		
			
				|  |  | -import { NRadio, NSpace, NSpin, useDialog } from "naive-ui";
 | 
	
		
			
				|  |  | +import { NDialog, NModal, NRadio, NSpace, NSpin, useDialog } from "naive-ui";
 | 
	
		
			
				|  |  |  import { getImage } from "../home/images";
 | 
	
		
			
				|  |  |  import TheCreate from "./component/the-create";
 | 
	
		
			
				|  |  |  import { storeData } from "/src/store";
 | 
	
		
			
				|  |  | -import { api_musicSheetCreationPage, api_musicSheetCreationRemove } from "../api";
 | 
	
		
			
				|  |  | +import {
 | 
	
		
			
				|  |  | +  api_musicSheetCreationPage,
 | 
	
		
			
				|  |  | +  api_musicSheetCreationRemove,
 | 
	
		
			
				|  |  | +} from "../api";
 | 
	
		
			
				|  |  |  import ABCJS from "abcjs";
 | 
	
		
			
				|  |  |  import { usePageVisibility } from "@vant/use";
 | 
	
		
			
				|  |  |  import UploadToResources from "../component/upload-to-resources";
 | 
	
	
		
			
				|  | @@ -12,7 +23,11 @@ import { getQuery } from "/src/utils/queryString";
 | 
	
		
			
				|  |  |  import { browser } from "/src/utils";
 | 
	
		
			
				|  |  |  import UploadToTasks from "../component/upload-to-tasks";
 | 
	
		
			
				|  |  |  import UploadFile from "../component/upload-file";
 | 
	
		
			
				|  |  | -import { eventGlobal, saveUploadCatch, uploadState } from "../component/upload-to-tasks/state";
 | 
	
		
			
				|  |  | +import {
 | 
	
		
			
				|  |  | +  eventGlobal,
 | 
	
		
			
				|  |  | +  saveUploadCatch,
 | 
	
		
			
				|  |  | +  uploadState,
 | 
	
		
			
				|  |  | +} from "../component/upload-to-tasks/state";
 | 
	
		
			
				|  |  |  import { formateAbc, renderMeasures } from "../home/runtime";
 | 
	
		
			
				|  |  |  import requestOrigin from "umi-request";
 | 
	
		
			
				|  |  |  
 | 
	
	
		
			
				|  | @@ -41,7 +56,7 @@ export default defineComponent({
 | 
	
		
			
				|  |  |        data.loading = true;
 | 
	
		
			
				|  |  |        try {
 | 
	
		
			
				|  |  |          const res = await api_musicSheetCreationPage({ ...forms });
 | 
	
		
			
				|  |  | -        console.log(res, 'res')
 | 
	
		
			
				|  |  | +        console.log(res, "res");
 | 
	
		
			
				|  |  |          if (res?.code == 200) {
 | 
	
		
			
				|  |  |            if (data.isCreated) {
 | 
	
		
			
				|  |  |              data.isCreated = false;
 | 
	
	
		
			
				|  | @@ -68,42 +83,19 @@ export default defineComponent({
 | 
	
		
			
				|  |  |        }
 | 
	
		
			
				|  |  |      });
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -    const handleDelte = (item: any) => {
 | 
	
		
			
				|  |  | -      const checked = ref(true);
 | 
	
		
			
				|  |  | -      dialog.warning({
 | 
	
		
			
				|  |  | -        autoFocus: false,
 | 
	
		
			
				|  |  | -        class: "deleteDialog",
 | 
	
		
			
				|  |  | -        title: "删除曲谱",
 | 
	
		
			
				|  |  | -        maskClosable: false,
 | 
	
		
			
				|  |  | -        content: () => (
 | 
	
		
			
				|  |  | -          <div onClick={() => (checked.value = !checked.value)}>
 | 
	
		
			
				|  |  | -            <NRadio checked={checked.value}>同步删除我的资源中的该曲目</NRadio>
 | 
	
		
			
				|  |  | -          </div>
 | 
	
		
			
				|  |  | -        ),
 | 
	
		
			
				|  |  | -        // content: () => <div>确认删除当前曲谱?</div>,
 | 
	
		
			
				|  |  | -        positiveText: "取消",
 | 
	
		
			
				|  |  | -        positiveButtonProps: {
 | 
	
		
			
				|  |  | -          type: "default",
 | 
	
		
			
				|  |  | -        },
 | 
	
		
			
				|  |  | -        negativeText: "删除",
 | 
	
		
			
				|  |  | -        negativeButtonProps: {
 | 
	
		
			
				|  |  | -          type: "primary",
 | 
	
		
			
				|  |  | -          ghost: false,
 | 
	
		
			
				|  |  | -        },
 | 
	
		
			
				|  |  | -        onPositiveClick: () => {},
 | 
	
		
			
				|  |  | -        onNegativeClick: async () => {
 | 
	
		
			
				|  |  | -          await api_musicSheetCreationRemove(item.id, checked.value ? 1 : 0);
 | 
	
		
			
				|  |  | -          handleReset();
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -          // 删除上传记录里面的数据
 | 
	
		
			
				|  |  | -          const index = uploadState.uploadList.findIndex((upload: any) => upload.musicSheetCreationId === item.id);
 | 
	
		
			
				|  |  | -          if (index !== -1) {
 | 
	
		
			
				|  |  | -            uploadState.uploadList.splice(index, 1);
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -            saveUploadCatch();
 | 
	
		
			
				|  |  | -          }
 | 
	
		
			
				|  |  | -        },
 | 
	
		
			
				|  |  | -      });
 | 
	
		
			
				|  |  | +    const checked = ref(true);
 | 
	
		
			
				|  |  | +    const dialogWarning = ref(false);
 | 
	
		
			
				|  |  | +    const itemId = ref();
 | 
	
		
			
				|  |  | +    const handleDelete = (item: any) => {
 | 
	
		
			
				|  |  | +      // dialog.warning({
 | 
	
		
			
				|  |  | +      //   autoFocus: false,
 | 
	
		
			
				|  |  | +      //   class: "deleteDialog",
 | 
	
		
			
				|  |  | +      //   title: "删除曲谱",
 | 
	
		
			
				|  |  | +      //   maskClosable: false,
 | 
	
		
			
				|  |  | +      // });
 | 
	
		
			
				|  |  | +      checked.value = true;
 | 
	
		
			
				|  |  | +      dialogWarning.value = true;
 | 
	
		
			
				|  |  | +      itemId.value = item.id;
 | 
	
		
			
				|  |  |      };
 | 
	
		
			
				|  |  |      const loadingRef = ref();
 | 
	
		
			
				|  |  |  
 | 
	
	
		
			
				|  | @@ -147,12 +139,16 @@ export default defineComponent({
 | 
	
		
			
				|  |  |        );
 | 
	
		
			
				|  |  |      };
 | 
	
		
			
				|  |  |      const productSvg = (abc: string, id: string) => {
 | 
	
		
			
				|  |  | -      const a = ABCJS.renderAbc(id, abc, { selectTypes: false, add_classes: true })[0];
 | 
	
		
			
				|  |  | +      const a = ABCJS.renderAbc(id, abc, {
 | 
	
		
			
				|  |  | +        selectTypes: false,
 | 
	
		
			
				|  |  | +        add_classes: true,
 | 
	
		
			
				|  |  | +      })[0];
 | 
	
		
			
				|  |  |        return a;
 | 
	
		
			
				|  |  |      };
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |      const handleSuccess = () => {
 | 
	
		
			
				|  |  | -      data.list.find((item: any) => item.id === data.item.id).uploadStatus = "YES";
 | 
	
		
			
				|  |  | +      data.list.find((item: any) => item.id === data.item.id).uploadStatus =
 | 
	
		
			
				|  |  | +        "YES";
 | 
	
		
			
				|  |  |      };
 | 
	
		
			
				|  |  |      return () => (
 | 
	
		
			
				|  |  |        <div class={styles.wrap}>
 | 
	
	
		
			
				|  | @@ -161,7 +157,10 @@ export default defineComponent({
 | 
	
		
			
				|  |  |          <div class={styles.wrapBox}>
 | 
	
		
			
				|  |  |            <div class={styles.itemWrap}>
 | 
	
		
			
				|  |  |              <div class={styles.itemWrapBox}>
 | 
	
		
			
				|  |  | -              <div class={styles.createItem} onClick={() => (data.addShow = true)}>
 | 
	
		
			
				|  |  | +              <div
 | 
	
		
			
				|  |  | +                class={styles.createItem}
 | 
	
		
			
				|  |  | +                onClick={() => (data.addShow = true)}
 | 
	
		
			
				|  |  | +              >
 | 
	
		
			
				|  |  |                  <img src={getImage("icon_29.png")} />
 | 
	
		
			
				|  |  |                  <div>新建乐谱</div>
 | 
	
		
			
				|  |  |                </div>
 | 
	
	
		
			
				|  | @@ -171,7 +170,10 @@ export default defineComponent({
 | 
	
		
			
				|  |  |            {data.list.map((item, index: number) => (
 | 
	
		
			
				|  |  |              <div class={styles.itemWrap}>
 | 
	
		
			
				|  |  |                <div class={styles.itemWrapBox}>
 | 
	
		
			
				|  |  | -                <div class={styles.item} onClick={() => handleOpenNotaion(item)}>
 | 
	
		
			
				|  |  | +                <div
 | 
	
		
			
				|  |  | +                  class={styles.item}
 | 
	
		
			
				|  |  | +                  onClick={() => handleOpenNotaion(item)}
 | 
	
		
			
				|  |  | +                >
 | 
	
		
			
				|  |  |                    <div class={[styles.imgBox]} id={"item_" + index}>
 | 
	
		
			
				|  |  |                      <img
 | 
	
		
			
				|  |  |                        src={getImage("icon_staff.png")}
 | 
	
	
		
			
				|  | @@ -182,28 +184,52 @@ export default defineComponent({
 | 
	
		
			
				|  |  |                              const result = await requestOrigin.get(item.xml, {
 | 
	
		
			
				|  |  |                                mode: "cors",
 | 
	
		
			
				|  |  |                              });
 | 
	
		
			
				|  |  | -                            let abc: any = new DOMParser().parseFromString(result, "text/xml");
 | 
	
		
			
				|  |  | +                            let abc: any = new DOMParser().parseFromString(
 | 
	
		
			
				|  |  | +                              result,
 | 
	
		
			
				|  |  | +                              "text/xml"
 | 
	
		
			
				|  |  | +                            );
 | 
	
		
			
				|  |  |                              const title = abc.querySelector("movement-title");
 | 
	
		
			
				|  |  |                              // xmlParse.getElementsByTagName("words");
 | 
	
		
			
				|  |  |                              // const title = abc.getElementsByTagName("movement-title");
 | 
	
		
			
				|  |  | -                            if (title && title.textContent.trim() !== item?.name) {
 | 
	
		
			
				|  |  | +                            if (
 | 
	
		
			
				|  |  | +                              title &&
 | 
	
		
			
				|  |  | +                              title.textContent.trim() !== item?.name
 | 
	
		
			
				|  |  | +                            ) {
 | 
	
		
			
				|  |  |                                title.textContent = item.name;
 | 
	
		
			
				|  |  |                              }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -                            abc = (window as any).vertaal(abc, { p: "f", t: 1, u: 0, v: 3, mnum: 0 });
 | 
	
		
			
				|  |  | -                            const r: any = ABCJS.renderAbc("importRef", abc[0], { responsive: "resize" }); //ABCJS.renderAbc("item_" + index, abc[0], { selectTypes: false, add_classes: true })[0];
 | 
	
		
			
				|  |  | -                            const abcd = formateAbc(r[0], { subjectCode: "acoustic_grand_piano" });
 | 
	
		
			
				|  |  | +                            abc = (window as any).vertaal(abc, {
 | 
	
		
			
				|  |  | +                              p: "f",
 | 
	
		
			
				|  |  | +                              t: 1,
 | 
	
		
			
				|  |  | +                              u: 0,
 | 
	
		
			
				|  |  | +                              v: 3,
 | 
	
		
			
				|  |  | +                              mnum: 0,
 | 
	
		
			
				|  |  | +                            });
 | 
	
		
			
				|  |  | +                            const r: any = ABCJS.renderAbc(
 | 
	
		
			
				|  |  | +                              "importRef",
 | 
	
		
			
				|  |  | +                              abc[0],
 | 
	
		
			
				|  |  | +                              { responsive: "resize" }
 | 
	
		
			
				|  |  | +                            ); //ABCJS.renderAbc("item_" + index, abc[0], { selectTypes: false, add_classes: true })[0];
 | 
	
		
			
				|  |  | +                            const abcd = formateAbc(r[0], {
 | 
	
		
			
				|  |  | +                              subjectCode: "acoustic_grand_piano",
 | 
	
		
			
				|  |  | +                            });
 | 
	
		
			
				|  |  |                              const config = renderMeasures(abcd, {
 | 
	
		
			
				|  |  |                                hiddenIndex: true,
 | 
	
		
			
				|  |  |                                showTitle: true,
 | 
	
		
			
				|  |  |                                showCreator: true,
 | 
	
		
			
				|  |  |                              });
 | 
	
		
			
				|  |  | -                            item.visualObj = productSvg(config, "item_" + index);
 | 
	
		
			
				|  |  | +                            item.visualObj = productSvg(
 | 
	
		
			
				|  |  | +                              config,
 | 
	
		
			
				|  |  | +                              "item_" + index
 | 
	
		
			
				|  |  | +                            );
 | 
	
		
			
				|  |  |                            } catch (e) {
 | 
	
		
			
				|  |  |                              console.log(e, "1222222");
 | 
	
		
			
				|  |  |                            }
 | 
	
		
			
				|  |  |                          } else {
 | 
	
		
			
				|  |  | -                          item.visualObj = productSvg(item.creationConfig, "item_" + index);
 | 
	
		
			
				|  |  | +                          item.visualObj = productSvg(
 | 
	
		
			
				|  |  | +                            item.creationConfig,
 | 
	
		
			
				|  |  | +                            "item_" + index
 | 
	
		
			
				|  |  | +                          );
 | 
	
		
			
				|  |  |                          }
 | 
	
		
			
				|  |  |                        }}
 | 
	
		
			
				|  |  |                      />
 | 
	
	
		
			
				|  | @@ -222,8 +248,14 @@ export default defineComponent({
 | 
	
		
			
				|  |  |                            src={getImage("icon_29_2.png")}
 | 
	
		
			
				|  |  |                            onClick={(e: Event) => {
 | 
	
		
			
				|  |  |                              e.stopPropagation();
 | 
	
		
			
				|  |  | -                            const abc = item.creationData ? JSON.parse(item.creationData) : {};
 | 
	
		
			
				|  |  | -                            data.item = { ...item, subjectCode: abc.subjectCode || "acoustic_grand_piano" };
 | 
	
		
			
				|  |  | +                            const abc = item.creationData
 | 
	
		
			
				|  |  | +                              ? JSON.parse(item.creationData)
 | 
	
		
			
				|  |  | +                              : {};
 | 
	
		
			
				|  |  | +                            data.item = {
 | 
	
		
			
				|  |  | +                              ...item,
 | 
	
		
			
				|  |  | +                              subjectCode:
 | 
	
		
			
				|  |  | +                                abc.subjectCode || "acoustic_grand_piano",
 | 
	
		
			
				|  |  | +                            };
 | 
	
		
			
				|  |  |                              nextTick(() => {
 | 
	
		
			
				|  |  |                                data.uploadShow = true;
 | 
	
		
			
				|  |  |                              });
 | 
	
	
		
			
				|  | @@ -235,19 +267,27 @@ export default defineComponent({
 | 
	
		
			
				|  |  |                          src={getImage("icon_29_3.png")}
 | 
	
		
			
				|  |  |                          onClick={(e: Event) => {
 | 
	
		
			
				|  |  |                            e.stopPropagation();
 | 
	
		
			
				|  |  | -                          handleDelte(item);
 | 
	
		
			
				|  |  | +                          handleDelete(item);
 | 
	
		
			
				|  |  |                          }}
 | 
	
		
			
				|  |  |                        />
 | 
	
		
			
				|  |  |                      </div>
 | 
	
		
			
				|  |  |                    </div>
 | 
	
		
			
				|  |  | -                  {item.uploadStatus === "YES" && <img class={styles.btn} src={getImage("icon_29_4.png")} />}
 | 
	
		
			
				|  |  | -                  {item.uploadStatus === "UPDATE" && <img class={styles.btn} src={getImage("icon_29_5.png")} />}
 | 
	
		
			
				|  |  | +                  {item.uploadStatus === "YES" && (
 | 
	
		
			
				|  |  | +                    <img class={styles.btn} src={getImage("icon_29_4.png")} />
 | 
	
		
			
				|  |  | +                  )}
 | 
	
		
			
				|  |  | +                  {item.uploadStatus === "UPDATE" && (
 | 
	
		
			
				|  |  | +                    <img class={styles.btn} src={getImage("icon_29_5.png")} />
 | 
	
		
			
				|  |  | +                  )}
 | 
	
		
			
				|  |  |                  </div>
 | 
	
		
			
				|  |  |                </div>
 | 
	
		
			
				|  |  |              </div>
 | 
	
		
			
				|  |  |            ))}
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -          <div id="importRef" class={styles.importRef} style={{ display: "none" }}></div>
 | 
	
		
			
				|  |  | +          <div
 | 
	
		
			
				|  |  | +            id="importRef"
 | 
	
		
			
				|  |  | +            class={styles.importRef}
 | 
	
		
			
				|  |  | +            style={{ display: "none" }}
 | 
	
		
			
				|  |  | +          ></div>
 | 
	
		
			
				|  |  |          </div>
 | 
	
		
			
				|  |  |          {!data.finish && (
 | 
	
		
			
				|  |  |            <NSpace ref={loadingRef} justify="center" style={{ padding: "30px" }}>
 | 
	
	
		
			
				|  | @@ -262,9 +302,67 @@ export default defineComponent({
 | 
	
		
			
				|  |  |            }}
 | 
	
		
			
				|  |  |          />
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -        <UploadToResources v-model:show={data.uploadShow} item={data.item} onSuccess={() => handleSuccess()} />
 | 
	
		
			
				|  |  | +        <UploadToResources
 | 
	
		
			
				|  |  | +          v-model:show={data.uploadShow}
 | 
	
		
			
				|  |  | +          item={data.item}
 | 
	
		
			
				|  |  | +          onSuccess={() => handleSuccess()}
 | 
	
		
			
				|  |  | +        />
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |          <UploadToTasks />
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        <NModal
 | 
	
		
			
				|  |  | +          autoFocus={false}
 | 
	
		
			
				|  |  | +          show={dialogWarning.value}
 | 
	
		
			
				|  |  | +          unstableShowMask={false}
 | 
	
		
			
				|  |  | +          maskClosable={false}
 | 
	
		
			
				|  |  | +          // onUpdate:show={(val) => {
 | 
	
		
			
				|  |  | +          //   model.productOpen = false;
 | 
	
		
			
				|  |  | +          //   emit("update:show", val);
 | 
	
		
			
				|  |  | +          // }}
 | 
	
		
			
				|  |  | +        >
 | 
	
		
			
				|  |  | +          <NDialog
 | 
	
		
			
				|  |  | +            type="warning"
 | 
	
		
			
				|  |  | +            class={"deleteDialog"}
 | 
	
		
			
				|  |  | +            title="删除曲谱"
 | 
	
		
			
				|  |  | +            positiveText="取消"
 | 
	
		
			
				|  |  | +            positiveButtonProps={{
 | 
	
		
			
				|  |  | +              type: "default",
 | 
	
		
			
				|  |  | +            }}
 | 
	
		
			
				|  |  | +            content={() => (
 | 
	
		
			
				|  |  | +              <div onClick={() => (checked.value = !checked.value)}>
 | 
	
		
			
				|  |  | +                <NRadio checked={checked.value}>
 | 
	
		
			
				|  |  | +                  同步删除我的资源中的该曲目
 | 
	
		
			
				|  |  | +                </NRadio>
 | 
	
		
			
				|  |  | +              </div>
 | 
	
		
			
				|  |  | +            )}
 | 
	
		
			
				|  |  | +            negativeText="删除"
 | 
	
		
			
				|  |  | +            negativeButtonProps={{
 | 
	
		
			
				|  |  | +              type: "primary",
 | 
	
		
			
				|  |  | +              ghost: false,
 | 
	
		
			
				|  |  | +            }}
 | 
	
		
			
				|  |  | +            onClose={() => dialogWarning.value = false}
 | 
	
		
			
				|  |  | +            onPositiveClick={() => {
 | 
	
		
			
				|  |  | +              dialogWarning.value = false;
 | 
	
		
			
				|  |  | +            }}
 | 
	
		
			
				|  |  | +            onNegativeClick={async () => {
 | 
	
		
			
				|  |  | +              await api_musicSheetCreationRemove(
 | 
	
		
			
				|  |  | +                itemId.value,
 | 
	
		
			
				|  |  | +                checked.value ? 1 : 0
 | 
	
		
			
				|  |  | +              );
 | 
	
		
			
				|  |  | +              handleReset();
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +              // 删除上传记录里面的数据
 | 
	
		
			
				|  |  | +              const index = uploadState.uploadList.findIndex(
 | 
	
		
			
				|  |  | +                (upload: any) => upload.musicSheetCreationId === itemId.value
 | 
	
		
			
				|  |  | +              );
 | 
	
		
			
				|  |  | +              if (index !== -1) {
 | 
	
		
			
				|  |  | +                uploadState.uploadList.splice(index, 1);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +                saveUploadCatch();
 | 
	
		
			
				|  |  | +              }
 | 
	
		
			
				|  |  | +            }}
 | 
	
		
			
				|  |  | +          />
 | 
	
		
			
				|  |  | +        </NModal>
 | 
	
		
			
				|  |  |        </div>
 | 
	
		
			
				|  |  |      );
 | 
	
		
			
				|  |  |    },
 |