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_schoolDetail, api_subjectList, api_bookVersionPage } 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'; import deepClone from '@/helpers/deep-clone'; import book from './component/book'; import { browser } from '@/helpers/utils'; import CoursewareReload from './courseware-reload'; 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 reloadStatus = ref(false); const baseBookVerionList = ref([] as any); const bookVersionList = ref([] as any); // 返回 const goback = () => { postMessage({ api: 'goBack' }); }; const coursewareStorage = localStorage.getItem('courseware-list') ? JSON.parse(localStorage.getItem('courseware-list') as any) : {}; const forms = reactive({ currentGradeNum: coursewareStorage.currentGradeNum || null, bookVersionId: coursewareStorage.bookVersionId || (null as any), // instrumentId: // coursewareStorage.instrumentId || // state.user.data?.instrumentId || // (null as any), // subjectId: // coursewareStorage.subjectId || // state.user.data?.subjectId || // (null as any), 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, bookLessonId: '', subjectList: [] as any, instrumentList: [] as any, // 乐器列表 showBook: false, book: {} as DOMRect }); const getTanentList = async () => { try { // const schoolInfos = state.user.data.schoolInfos; // const schoolId = // schoolInfos && schoolInfos.length > 0 ? schoolInfos[0].id : null; // if (!schoolId) return; // await api_schoolDetail({ // id: schoolId // }); const { data } = await api_bookVersionPage({ type: 'COURSEWARE' }); const result = data.rows || [] baseBookVerionList.value = result.map((item: any) => { return { bookVersionId: item.id, bookVersionName: item.name }; }); bookVersionList.value = deepClone(baseBookVerionList.value); const index = baseBookVerionList.value.findIndex( (item: any) => item.bookVersionId == coursewareStorage.bookVersionId ); // 判断列表中是存在,缓存的教材数据 if (index < 0) { forms.bookVersionId = null; } } catch (e) { // console.log(e); } }; const getList = async () => { data.loading = true; const { bookVersionId, currentGradeNum, ...more } = forms; const res = await api_lessonCoursewarePage({ ...more, bookVersionId: bookVersionId == -1 ? null : bookVersionId, currentGradeNum: currentGradeNum ? 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; setTimeout(() => { isShowGuide.value = true; }, 100); }; const getFavoriteList = async () => { data.loading = true; const res = await api_lessonCoursewareFavoriteage({ clientType: 'STUDENT', userId: state.user?.data?.id, page: forms.page, rows: forms.rows, // subjectId: forms.subjectId, bookVersionId: forms.bookVersionId != -1 ? 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, // subjectId: forms.subjectId, 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 contentContainerRef = ref(); const handleChange = () => { if (data.tab === 'course') { bookVersionList.value = [ ...deepClone(baseBookVerionList.value), { bookVersionId: -1, bookVersionName: '自定义' } ]; } else { bookVersionList.value = deepClone(baseBookVerionList.value); } getData(); if (contentContainerRef.value && browser().isTablet) { contentContainerRef.value.scrollTo(0, 0); } }; const getSubjectList = async () => { try { const res = await api_subjectList({ enableFlag: true, delFlag: 0, page: 1, rows: 999 }); // console.log(res.data, ' subjectList'); data.subjectList = res.data.rows || []; } catch {} }; onMounted(async () => { window.addEventListener('error', (e: any) => { console.log(e, 'error'); }); // console.log(browser().isTablet, 'browser().isTablet'); await getTanentList(); await getSubjectList(); // if (forms.subjectId && data.subjectList.length > 0) { // data.subjectList.forEach((item: any) => { // if (item.id == forms.subjectId) { // data.instrumentList = item.instruments || []; // } // }); // } getData(); // 安卓的状态栏 postMessage({ api: 'setStatusBarVisibility', content: { isVisibility: 0 } }); }); 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(); // item.favoriteFlag = !item.favoriteFlag; } } }; 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({ id: item.id // subjectId: forms.subjectId }); if (res?.code == 200 && Array.isArray(res?.data?.lessonList)) { data.details = res.data.lessonList || []; data.bookData = res.data; data.bookLessonId = item.id; console.log('🚀 ~ data.details course:', data.details); } else { // showConfirmDialog({ // title: '提示', // message: '课程教材已更新,是否重新加载?' // }) // .then(() => { // // on confirm // getData(); // }) // .catch(() => { // // on cancel // }); reloadStatus.value = true; return; } } else { const res = await api_lessonCoursewareDetail({ id: item.id // subjectId: forms.subjectId }); if (res?.code == 200 && Array.isArray(res?.data?.lessonList)) { data.details = res.data.lessonList || []; data.bookData = res.data; data.bookLessonId = item.id; 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 () => (