import { PropType, defineComponent, nextTick, onMounted, reactive, ref } 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'; export default defineComponent({ name: 'resource-main', props: { /** 类型 */ cardType: { type: String as PropType<'' | 'homerowk-record'>, default: '' } }, setup(props, { expose }) { const prepareStore = usePrepareStore(); const forms = reactive({ tabType: 'relateResources', tabWorkType: 'myMusic', selectMusicStatus: false, selectResourceStatus: false, editStatus: false, editItem: {} as any }); 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'); const parts = xmlParse.getElementsByTagName('part'); firstMeasures = parts[0]?.getElementsByTagName('measure'); xmlStatus = 'success'; } catch (error) { xmlStatus = 'error'; } // 判断读取小节数 if (xmlStatus == 'success') { item.practiceChapterMax = 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(() => { resetTabPosition(); }); expose({ resetTabPosition }); return () => (
{prepareStore.getTabType === 'courseware' && props.cardType !== 'homerowk-record' ? ( { forms.tabType = val; }}> {{ suffix: () => (
{ forms.selectResourceStatus = true; prepareStore.setSelectResourceStatus(true); }}>
), default: () => ( <> ) }}
) : ( { forms.tabWorkType = val; }}> {{ suffix: () => (
{ forms.selectMusicStatus = true; prepareStore.setSelectMusicStatus(true); }}>
), default: () => ( <> ) }}
)} { if (!val) { prepareStore.setSelectResourceStatus(val); } }} class={['modalTitle', styles.selectMusicModal]} preset="card" title={'选择资源'}> { if (!val) { prepareStore.setSelectMusicStatus(val); } }} class={['modalTitle', styles.selectMusicModal]} preset="card" title={'选择曲目'}> onAdd(item)} /> (forms.editStatus = false)} onConfirm={(item: any) => { const tList = typeFormat( item.trainingType, item.trainingConfigJson ); const train = { ...item, id: null, musicName: forms.editItem.title, typeList: tList }; eventGlobal.emit('onTrainAddItem', train); }} />
); } });