import { PropType, defineComponent, onMounted, onUnmounted, reactive, toRefs, watch } from 'vue'; import ResourceSearchGroup from './resource-search-group'; import { NScrollbar, NSpin, useMessage } from 'naive-ui'; import styles from './index.module.less'; import CardType from '/src/components/card-type'; import { favorite, materialQueryPage } from '/src/views/natural-resources/api'; import TheEmpty from '/src/components/TheEmpty'; import { usePrepareStore } from '/src/store/modules/prepareLessons'; import { useDebounceFn, useResizeObserver } from '@vueuse/core'; import CardPreview from '/src/components/card-preview'; import { eventGlobal } from '/src/utils'; import ClassSearchGroup from './class-search-group'; import { useCatchStore } from '/src/store/modules/catchData'; const formatType = (type: string) => { if (type === 'shareResources') { return 2; } else if (type === 'myResources') { return 3; } else if (type === 'myCollect') { return 4; } else if (type === 'relateResources') { return 5; } }; export default defineComponent({ name: 'share-resources', props: { type: { type: String as PropType< 'relateResources' | 'shareResources' | 'myResources' | 'myCollect' >, default: 'shareResources' }, /** 从哪里使用 */ from: { type: String, default: '' } }, setup(props) { const prepareStore = usePrepareStore(); const catchStore = useCatchStore(); const message = useMessage(); const { type } = toRefs(props); const className = 'resourceSearchGroup' + +new Date(); const state = reactive({ searchHeight: '0px', loading: false, finshed: false, // 是否加载完 pagination: { page: 1, rows: 20 }, searchGroup: { type: 'MUSIC', // name: '', bookVersionId: null, subjectId: null, sourceType: formatType(type.value), musicalInstrumentId: null as any, enableFlag: true }, tableList: [] as any, show: false, item: {} as any }); // 查询列表 const getList = async () => { try { if (state.pagination.page === 1) { state.loading = true; } const { data } = await materialQueryPage({ ...state.searchGroup, ...state.pagination, lessonCoursewareKnowledgeId: props.type === 'relateResources' || props.type === 'shareResources' ? prepareStore.getSelectKey : null, relateLessonCoursewareKnowledgeMaterialIds: getIds() }); state.loading = false; const tempRows = data.rows || []; const temp: any = []; tempRows.forEach((row: any) => { temp.push({ id: row.id, coverImg: row.coverImg, type: row.type, title: row.name, isCollect: !!row.favoriteFlag, isSelected: row.sourceFrom === 'PLATFORM' ? true : false, refFlag: row.refFlag, containAccompaniment: row.containAccompaniment, content: row.content }); }); state.tableList.push(...temp); state.finshed = data.pages <= data.current ? true : false; } catch { state.loading = false; } }; const throttledFnSearch = useDebounceFn(item => { state.pagination.page = 1; state.tableList = []; const { subjectId, ...res } = item; state.searchGroup = Object.assign(state.searchGroup, { ...res, musicalInstrumentId: subjectId, subjectId: null }); getList(); }, 500); // 添加资源 const onAdd = async (item: any) => { try { eventGlobal.emit('onPrepareAddItem', { materialId: item.id, coverImg: item.coverImg, type: item.type, title: item.title, refFlag: item.refFlag, isCollect: item.isCollect, isSelected: item.isSelected, content: item.content, removeFlag: false }); } catch { // } }; // 收藏 const onCollect = async (item: any) => { try { await favorite({ materialId: item.id, favoriteFlag: item.isCollect ? 0 : 1, type: item.type }); item.isCollect = !item.isCollect; } catch { // } }; const getIds = () => { let noRepeatIds: any = []; if (props.type === 'relateResources') { const materialIds: any = []; prepareStore.getCoursewareList.forEach((course: any) => { course.list?.forEach((item: any) => { materialIds.push(item.materialId); }); }); noRepeatIds = Array(...new Set(materialIds)); } return noRepeatIds.join(','); }; const onUpdate = () => { state.pagination.page = 1; state.tableList = []; getList(); }; onMounted(async () => { // 加载的时候判断是否有资源数据 // 获取声部 await catchStore.getSubjects(); useResizeObserver( document.querySelector('.' + className) as HTMLElement, (entries: any) => { const entry = entries[0]; const { height } = entry.contentRect; state.searchHeight = height + 'px'; } ); getList(); if (props.type === 'relateResources') { eventGlobal.on('onCoursewareUpdate', onUpdate); } }); onUnmounted(() => { eventGlobal.off('onCoursewareUpdate', onUpdate); }); // onMounted(async () => { // // 获取声部 // await catchStore.getSubjects(); // // 加载的时候判断是否有资源数据 // let noRepeatIds: any = []; // if (props.type === 'relateResources') { // const materialIds: any = []; // prepareStore.getCoursewareList.forEach((course: any) => { // course.list?.forEach((item: any) => { // materialIds.push(item.materialId); // }); // }); // noRepeatIds = Array(...new Set(materialIds)); // } // getList(noRepeatIds.join(',')); // useResizeObserver( // document.querySelector('.' + className) as HTMLElement, // (entries: any) => { // const entry = entries[0]; // const { height } = entry.contentRect; // state.searchHeight = height + 'px'; // } // ); // }); return () => (