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 { getImage } from "../home/images"; import TheCreate from "./component/the-create"; import { storeData } from "/src/store"; import { api_musicSheetCreationPage, api_musicSheetCreationRemove } from "../api"; import ABCJS from "abcjs"; import { usePageVisibility } from "@vant/use"; import UploadToResources from "../component/upload-to-resources"; 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 { saveUploadCatch, uploadState } from "../component/upload-to-tasks/state"; export default defineComponent({ name: "Create", setup() { const query = getQuery(); const dialog = useDialog(); console.log(storeData.user); const forms = reactive({ teacherId: storeData.user.id, page: 1, keyword: "", rows: 20, }); const data = reactive({ list: [] as any[], addShow: query.addShow ? true : false, loading: false, finish: false, isCreated: false, uploadShow: false, item: {} as any, }); const getList = async () => { data.loading = true; const res = await api_musicSheetCreationPage({ ...forms }); if (res?.code == 200) { if (data.isCreated) { data.isCreated = false; handleOpenNotaion(res.data.rows[0]); } data.list = data.list.concat(res.data.rows); data.finish = res.data.rows.length < forms.rows; } data.loading = false; }; const handleReset = () => { forms.page = 1; data.finish = false; data.list = []; getList(); }; const pageVisibility = usePageVisibility(); watch(pageVisibility, (val) => { if (val === "visible") { handleReset(); } }); const handleDelte = (item: any) => { const checked = ref(true); dialog.warning({ autoFocus: false, class: "deleteDialog", title: "删除曲谱", content: () => (
(checked.value = !checked.value)}> 同步删除我的资源中的该曲目
), // content: () =>
确认删除当前曲谱?
, 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 loadingRef = ref(); const messageEvent = (params?: any) => { // 在老师端里面关闭要刷新 if (params.data?.api == "reload") { handleReset(); } }; onMounted(() => { getList(); if (loadingRef.value) { const obv = new IntersectionObserver((entries) => { if (entries[0].isIntersecting) { if (data.finish || data.loading) return; forms.page++; getList(); } }); obv.observe(loadingRef.value?.$el); } window.addEventListener("message", (params?: any) => { messageEvent(params); }); }); onUnmounted(() => { window.removeEventListener("message", messageEvent); }); const handleOpenNotaion = (item: any) => { window.parent.postMessage( { api: "notation_open", url: `${location.origin}/notation/#/?v=${Date.now()}&id=${item.id}`, }, "*" ); }; const productSvg = (abc: string, id: string) => { 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"; }; return () => (
(data.addShow = true)}>
新建乐谱
{data.list.map((item, index: number) => (
handleOpenNotaion(item)}>
{ item.visualObj = productSvg(item.creationConfig, "item_" + index); }} />
{item.name || `未命名乐谱-${index + 1}`}
{item.updateTime}
{item.uploadStatus !== "YES" && ( { e.stopPropagation(); data.item = { ...item }; nextTick(() => { data.uploadShow = true; }); }} /> )} { e.stopPropagation(); handleDelte(item); }} />
{item.uploadStatus === "YES" && } {item.uploadStatus === "UPDATE" && }
))}
{!data.finish && ( )} { data.addShow = false; }} /> handleSuccess()} />
); }, });