import { PropType, defineComponent, onMounted, reactive, toRefs, watch } from 'vue'; import ResourceSearchGroup from './resource-search-group'; import { NScrollbar, NSpin, useDialog, useMessage } from 'naive-ui'; import styles from './index.module.less'; import CardType from '/src/components/card-type'; import { materialQueryPage } from '/src/views/natural-resources/api'; import TheEmpty from '/src/components/TheEmpty'; import { usePrepareStore } from '/src/store/modules/prepareLessons'; import { saveCourseware } from '../../../api'; import { useDebounceFn } from '@vueuse/core'; import CardPreview from '/src/components/card-preview'; const formatType = (type: string) => { if (type === 'shareResources') { return 2; } else if (type === 'myResources') { return 3; } else if (type === 'myCollect') { return 4; } }; export default defineComponent({ name: 'share-resources', props: { type: { type: String as PropType<'shareResources' | 'myResources' | 'myCollect'>, default: 'shareResources' } }, setup(props) { const prepareStore = usePrepareStore(); const message = useMessage(); const { type } = toRefs(props); const state = reactive({ loading: false, finshed: false, // 是否加载完 pagination: { page: 1, rows: 20 }, searchGroup: { type: type.value === 'shareResources' ? 'MUSIC' : '', // name: '', bookVersionId: null, subjectId: null, sourceType: formatType(type.value), 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, subjectId: prepareStore.getSubjectId }); state.loading = false; const tempRows = data.rows || []; const temp: any = []; tempRows.forEach((row: any) => { const index = prepareStore.getCoursewareList.findIndex( (course: any) => course.materialId === row.id ); temp.push({ id: row.id, coverImg: row.coverImg, type: row.type, title: row.name, isCollect: !!row.favoriteFlag, isSelected: row.sourceFrom === 'PLATFORM' ? true : false, content: row.content, exist: index !== -1 ? true : false // 是否存在 }); }); state.tableList.push(...temp); state.finshed = data.pages <= data.current ? true : false; } catch { state.loading = false; } }; // const onSearch = async (item: any) => { // state.pagination.page = 1; // state.tableList = []; // state.searchGroup = Object.assign(state.searchGroup, item); // getList(); // }; const throttledFnSearch = useDebounceFn(item => { state.pagination.page = 1; state.tableList = []; state.searchGroup = Object.assign(state.searchGroup, item); getList(); }, 500); // 添加资源 const onAdd = async (item: any) => { // dialog.warning({ // title: '提示', // content: `是否添加"${item.title}"资源?`, // positiveText: '确定', // negativeText: '取消', // onPositiveClick: async () => { try { const temp: any = []; prepareStore.getCoursewareList.forEach((item: any) => { temp.push({ materialId: item.materialId, materialName: item.title, materialType: item.type, id: item.id }); }); // 保存课件 await saveCourseware({ coursewareDetailKnowledgeId: prepareStore.getSelectKey, lessonCoursewareId: prepareStore.getLessonCoursewareId, lessonCoursewareDetailId: prepareStore.getLessonCoursewareDetailId, materialList: [ ...temp, { materialName: item.title, materialType: item.type, materialId: item.id } ] }); message.success('添加成功'); prepareStore.setIsAddResource(true); } catch { // } // } // }); }; watch( () => prepareStore.coursewareList, () => { state.tableList.forEach((item: any) => { const index = prepareStore.getCoursewareList.findIndex( (course: any) => course.materialId === item.id ); item.exist = index !== -1 ? true : false; // 是否存在 }); }, { deep: true, immediate: true } ); onMounted(() => { getList(); }); return () => (
throttledFnSearch(item)} /> { const clientHeight = e.target?.clientHeight; const scrollTop = e.target?.scrollTop; const scrollHeight = e.target?.scrollHeight; // 是否到底,是否加载完 if ( clientHeight + scrollTop + 20 >= scrollHeight && !state.finshed && !state.loading ) { state.pagination.page = state.pagination.page + 1; getList(); } }}>
{state.tableList.length > 0 && (
{state.tableList.map((item: any) => ( onAdd(item)} disabledMouseHover={false} onClick={() => { if (item.type === 'IMG') return; state.show = true; state.item = item; }} /> ))}
)} {!state.loading && state.tableList.length <= 0 && }
{/* 弹窗查看 */}
); } });