import { computed, defineComponent, nextTick, onBeforeMount, onMounted, reactive, ref } from 'vue'; import styles from './index.module.less'; import icon_back from './image/icon_back.svg'; import icon_arrow from './image/icon_arrow.svg'; import { Button, Image, Popover, Popup, Tab, Tabs, Tag, popoverProps, showConfirmDialog, showDialog, showToast } from 'vant'; import { api_lessonCoursewareFavoriteRemove, api_lessonCoursewareFavoriteSave, api_lessonCoursewareFavoriteage, api_lessonCoursewarePage, api_lessonCoursewareDetail, api_classLessonCoursewarePage, api_classLessonCoursewareDetail, api_tenantInfoDetail } from './api'; import { NImage } from 'naive-ui'; import { state } from '@/state'; import TheFavorite from '@/components/the-favorite'; import { useRouter } from 'vue-router'; import TheBook from './component/book'; import { postMessage } from '@/helpers/native-message'; import CoursewareList from '@/custom-plugins/guide-page/courseware-list'; import './jquery.min.1.7.js'; import './turn.js'; import MEmpty from '@/components/m-empty'; export const BOOK_DATA = { grades: [ // { text: '全部年级', value: '' }, { text: '一年级', value: 1 }, { text: '二年级', value: 2 }, { text: '三年级', value: 3 }, { text: '四年级', value: 4 }, { text: '五年级', value: 5 }, { text: '六年级', value: 6 }, { text: '七年级', value: 7 }, { text: '八年级', value: 8 }, { text: '九年级', value: 9 } ], bookTypes: { LAST: '上册', NEXT: '下册' } as { [key: string]: string } }; export default defineComponent({ name: 'courseware-list', setup() { const router = useRouter(); const popoverShow = ref(false); const bookVersionList = ref([] as any); // 返回 const goback = () => { postMessage({ api: 'goBack' }); }; const forms = reactive({ currentGradeNum: null, bookVersionId: null, page: 1, rows: 999, type: 'COURSEWARE' }); const _actions = computed(() => { return BOOK_DATA.grades.map((item, index) => { return { ...item, color: forms.currentGradeNum === index ? 'var(--van-primary-color)' : '', className: forms.currentGradeNum === index ? 'fontBlod' : '' }; }); }); // const onSelect = (action: any, index: number) => { // forms.currentGradeNum = index; // handleChange(); // }; const isShowGuide = ref(false); const data = reactive({ list: [] as any[], loading: false, favoriteList: [] as any[], tab: 'all', details: [] as any[], bookData: {} as any, showBook: false, book: {} as DOMRect }); const getTanentList = async () => { try { const schoolInfos = state.user.data.schoolInfos; const tenantId = schoolInfos.length > 0 ? schoolInfos[0].tenantId : null; if (tenantId) { const { data } = await api_tenantInfoDetail({ id: tenantId }); bookVersionList.value = data.bookVersionList || []; } } catch { // } }; const getList = async () => { data.loading = true; const res = await api_lessonCoursewarePage({ ...forms, currentGradeNum: forms.currentGradeNum ? forms.currentGradeNum : '' }); if (res?.code === 200 && Array.isArray(res?.data?.rows)) { data.list = res.data.rows.map((item: any) => { item.load = false; item.key = Date.now() + item.id; return item; }); } data.loading = false; isShowGuide.value = true; }; const getFavoriteList = async () => { data.loading = true; const res = await api_lessonCoursewareFavoriteage({ clientType: 'STUDENT', userId: state.user?.data?.id, page: forms.page, rows: forms.rows, bookVersionId: forms.bookVersionId ? forms.bookVersionId : '', currentGradeNum: forms.currentGradeNum ? forms.currentGradeNum : '' }); if (res?.code === 200 && Array.isArray(res?.data?.rows)) { data.list = res.data.rows.map((item: any) => { item.name = `${item.name}`; item.load = false; item.favoriteFlag = true; item.key = Date.now() + item.id; return item; }); } data.loading = false; }; const getLessonCourseware = async () => { data.loading = true; const res = await api_classLessonCoursewarePage({ // clientType: 'STUDENT', // userId: state.user?.data?.id, bookVersionId: forms.bookVersionId ? forms.bookVersionId : '', page: forms.page, rows: forms.rows // currentGradeNum: forms.currentGradeNum ? forms.currentGradeNum : '' }); if (res?.code === 200 && Array.isArray(res?.data?.rows)) { data.list = res.data.rows.map((item: any) => { item.load = false; item.key = Date.now() + item.id; return item; }); } data.loading = false; isShowGuide.value = true; }; const getData = () => { if (data.tab === 'all') { getList(); } if (data.tab === 'favorite') { getFavoriteList(); } if (data.tab === 'course') { getLessonCourseware(); } }; const handleChange = () => { getData(); }; onMounted(() => { getTanentList(); getData(); }); const handleFavorite = async (item: any) => { if (item.favoriteFlag) { await api_lessonCoursewareFavoriteSave({ lessonCoursewareId: item.id }); } else { await api_lessonCoursewareFavoriteRemove({ lessonCoursewareId: item.id }); if (data.tab === 'favorite') { getData(); } } }; let timer: any = null; const dubounce = (fn: any, delay: number = 300) => { if (timer) { clearTimeout(timer); } timer = setTimeout(fn, delay); }; /** 学生端根据教材编号获取关联的单元、章节 */ const getDetail = async (item: any) => { if (data.tab === 'course') { const res = await api_classLessonCoursewareDetail(item.id); console.log(res, item, 'course'); if (res?.code == 200 && Array.isArray(res?.data?.lessonList)) { data.details = res.data.lessonList || []; data.bookData = res.data; console.log('🚀 ~ data.details course:', data.details); } else { showConfirmDialog({ title: '提示', message: '课程教材已更新,是否重新加载?' }) .then(() => { // on confirm getData(); }) .catch(() => { // on cancel }); return; } } else { const res = await api_lessonCoursewareDetail(item.id); if (res?.code == 200 && Array.isArray(res?.data?.lessonList)) { data.details = res.data.lessonList || []; data.bookData = res.data; console.log('🚀 ~ data.details:', data.details); } } handleCreateContainer(item.id); handleRender(() => { data.showBook = true; }); }; const handleCreateContainer = (id: string) => { const box = document.querySelector( `[data-id="${id}"]` ) as unknown as HTMLElement; if (!box) return; const rect = box.getBoundingClientRect(); data.book = rect; }; const handleRender = (fn: any) => { requestAnimationFrame(() => { requestAnimationFrame(() => { fn(); }); }); }; const handleOpen = async (item: any) => { await getDetail(item); }; return () => (
handleChange()}>
我的收藏
}}>
{/* {{ reference: () => ( ) }} */}
{data.list.map((item, index) => { return (
handleOpen(item)}> {/* courseware- */}
{ item.load = true; }} onError={() => { item.load = true; }} />
{item.name}
{/* 课程教材不需要收藏 */} {!data.loading && data.tab !== 'course' && (
{ e.stopPropagation(); item.favoriteFlag = !item.favoriteFlag; dubounce(() => handleFavorite(item)); }}>
)}
); })} {data.list.length <= 0 && !data.loading && ( )}
{ data.showBook = false; }} /> {isShowGuide.value ? : null}
教材版本
{bookVersionList.value.map((item: any) => ( (forms.bookVersionId = item.bookVersionId)}> {item.bookVersionName} ))}
选择年级
{BOOK_DATA.grades.map((item: any) => ( (forms.currentGradeNum = item.value)}> {item.text} ))}
); } });