import { PropType, defineComponent, nextTick, onMounted, reactive, ref, toRef } from 'vue'; import styles from './index.module.less'; import { NTabs, NTabPane, NModal } from 'naive-ui'; import SelectMusicModal from '../../model/select-music'; import { usePrepareStore } from '/src/store/modules/prepareLessons'; import SelectResources from '../../model/select-resources'; import SelectMusic, { typeFormat } from './components/select-music'; import ResourceItem from './components/resource-item'; import TrainUpdate from '/src/views/attend-class/model/train-update'; import requestOrigin from 'umi-request'; import { eventGlobal } from '/src/utils'; import useDrag from '@/hooks/useDrag'; import Dragbom from '@/hooks/useDrag/dragbom'; import { useUserStore } from '@/store/modules/users'; import { useCatchStore } from '/src/store/modules/catchData'; import { modalClickMask } from '/src/state'; export default defineComponent({ name: 'resource-main', props: { /** 类型 */ cardType: { type: String as PropType<'' | 'homerowk-record' | 'prepare'>, default: '' }, from: { // 来自哪里 type: String, default: '' } }, setup(props, { expose }) { const prepareStore = usePrepareStore(); const catchStore = useCatchStore(); const forms = reactive({ tabType: 'relateResources', tabWorkType: 'myMusic', selectMusicStatus: false, selectResourceStatus: false, editStatus: false, editItem: {} as any, searchGroup: {} as any }); const relateResourcesRef = ref(); const shareResourcesRef = ref(); const myResourcesRef = ref(); const myCollectRef = ref(); const tabRef = ref(); const workRef = ref(); const onAdd = async (item: any) => { let xmlStatus = 'init'; // 第一个声部小节 let firstMeasures: any = null; try { // 获取文件 const res = await requestOrigin.get(item.xmlFileUrl, { mode: 'cors' }); const xmlParse = new DOMParser().parseFromString(res, 'text/xml'); /** * 妙极客的曲子,systems中含有part标签,需过滤掉systems标签,xmlParse.querySelectorAll('systems') */ const systems = Array.from(xmlParse?.querySelectorAll('systems')) || []; systems.forEach((system: any) => { const childs = Array.from(system?.querySelectorAll('system')) || []; childs.forEach((child: any) => { system?.removeChild(child); }) }); const parts = xmlParse.getElementsByTagName('part'); firstMeasures = parts[0]?.getElementsByTagName('measure'); xmlStatus = 'success'; } catch (error) { xmlStatus = 'error'; } // 判断读取小节数 if (xmlStatus == 'success') { // 标记xml是否是从0小节开始 item.firstMeasureIsZero = firstMeasures?.[0]?.getAttribute('number') === '0'; item.practiceChapterMax = item.firstMeasureIsZero ? firstMeasures.length - 1 : firstMeasures.length; } else { item.practiceChapterMax = 0; } item.coursewareKnowledgeDetailId = prepareStore.getSelectKey; item.subjectId = prepareStore.getSubjectId; forms.editItem = item; forms.editStatus = true; }; const resetTabPosition = () => { nextTick(() => { tabRef.value?.syncBarPosition(); workRef.value?.syncBarPosition(); }); }; onMounted(async () => { resetTabPosition(); // 获取教材分类列表 await catchStore.getMusicSheetCategory(true); }); // 弹窗拖动 // 曲目资源 let selectResourceStatusAddBoxDragData: any; let selectResourceStatusAddBoxClass: string; if (props.from === 'class') { const users = useUserStore(); selectResourceStatusAddBoxClass = 'selectResourceStatusAddBoxClass_drag'; selectResourceStatusAddBoxDragData = useDrag( [ `${selectResourceStatusAddBoxClass} .select-resource>.n-tabs>.n-tabs-nav--top.n-tabs-nav`, `${selectResourceStatusAddBoxClass} .bom_drag` ], selectResourceStatusAddBoxClass, toRef(forms, 'selectMusicStatus'), users.info.id ); } // 曲目资源 作业设置 let workSetingBoxDragData: any; let workSetingBoxClass: string; if (props.from === 'class') { const users = useUserStore(); workSetingBoxClass = 'workSetingBoxClass_drag'; workSetingBoxDragData = useDrag( [ `${workSetingBoxClass}>.n-card-header`, `${workSetingBoxClass} .bom_drag` ], workSetingBoxClass, toRef(forms, 'editStatus'), users.info.id ); } // expose({ resetTabPosition }); return () => (