123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246 |
- import {
- useUserCache
- } from "@/utils/userCache.js"
- import * as kcApi from "@/api/kecheng.js"
- export function useKechengTools() {
- const {
- saveCache,
- getCache,
- removeCache
- } = useUserCache();
- function getCurKjIndex(kjId, operId) {
- const arrKecheng = getKechengDataFromHistory(operId);
- for (let zi = 0; zi < arrKecheng.length; zi++) {
- for (let ji = 0; ji < arrKecheng[zi].jieList.length; ji++) {
- if (arrKecheng[zi].jieList[ji].kejianList.some(kj => kj.kjId == kjId)) {
- return {
- zhangIndex: zi,
- jieIndex: ji
- }
- }
- }
- }
- }
- function mergeProgress(backData, historyData) {
- const curData = JSON.parse(JSON.stringify(historyData));
- backData.forEach((item, zhangIndex) => {
- item.jieList.forEach((jieItem, jieIndex) => {
- jieItem.kejianList.forEach((kjItem, kjIndex) => {
- const backCurJie = backData[zhangIndex].jieList[jieIndex].kejianList[
- kjIndex];
- // 大于等于100 的进度以后台为准
- if (kjItem.maxProcess >= 100) {
- curData[zhangIndex].jieList[jieIndex].kejianList[kjIndex] = backCurJie;
- } else if (curData[zhangIndex].jieList[jieIndex].kejianList[kjIndex]
- .maxProcess == 100) {
- // 前台缓存进度为100 使用后台进度
- // alert('前台缓存进度为100 使用后台进度')
- curData[zhangIndex].jieList[jieIndex].kejianList[kjIndex] = backCurJie;
- }
- curData[zhangIndex].jieList[jieIndex].kejianList[kjIndex].lockFlag =
- backCurJie.lockFlag;
- })
- })
- })
- return curData;
- }
- function saveKechengData(operId, data) {
- saveCache('SectionInfo' + operId, 'arrKecheng', data)
- }
- function getKechengDataFromHistory(operId) {
- return getCache('SectionInfo' + operId, 'arrKecheng')
- }
- function saveKechengSectionPage(operId, data) {
- saveCache('SectionInfo' + operId, 'sectionPage', data)
- }
- function getKechengSectionPageFromHistory(operId) {
- return getCache('SectionInfo' + operId, 'sectionPage')
- }
- function initCourseProgressAll(operId) {
- let arrKecheng = getCache('SectionInfo' + operId, 'arrKecheng');
- // 判断是否有课程信息
- if (!arrKecheng || arrKecheng.length === 0) {
- throw new Error('initCourseProgress业务逻辑错误: arrKecheng 异常');
- }
- for (const chapter of arrKecheng) {
- for (const section of chapter.jieList) {
- let kejianArr = section.kejianList;
- if (kejianArr && kejianArr.length > 0) {
- for (const kejian of kejianArr) {
- if (!kejian.maxProcess) {
- kejian.curProcess = 0;
- kejian.maxProcess = 0;
- kejian.hasFinished = false;
- } else if (kejian.maxProcess < 100) {
- kejian.hasFinished = false;
- }
- }
- }
- }
- }
- saveCache('SectionInfo' + operId, 'arrKecheng', arrKecheng);
- return arrKecheng;
- }
- function saveCourseProgress(cur, total, operId, code, type) {
- let sectionPage = getCache('SectionInfo' + operId, 'sectionPage');
- let arrKecheng = getCache('SectionInfo' + operId, 'arrKecheng');
-
- let section = arrKecheng[sectionPage.iChapter].jieList[sectionPage.iSection];
- for (const kejian of section.kejianList) {
- if (kejian.kjId === sectionPage.kjId) {
- // video或audio的end为100,其他情况最大99
- if (code === 'end') {
- kejian['curProcess'] = 100;
- kejian['maxProcess'] = 100;
- } else if (type === 'other') {
- // 除了音视频以外的课件
- kejian['curProcess'] = 100;
- kejian['maxProcess'] = 100;
- } else {
- // 0 ~ 99
- kejian['curProcess'] = parseInt(cur / total * 100) >= 100 ?
- 99 :
- parseInt(cur / total * 100);
- kejian['maxProcess'] = kejian['curProcess'] > kejian['maxProcess'] ?
- kejian['curProcess'] :
- kejian['maxProcess'];
- }
- break;
- }
- }
- saveCache('SectionInfo' + operId, 'arrKecheng', arrKecheng);
- }
- function getCourseProgress(total) {
- let sectionPage = getCache('SectionInfo', 'sectionPage');
- let arrKecheng = getCache('SectionInfo', 'arrKecheng');
- let section = getSection(arrKecheng, sectionPage.iChapter, sectionPage.iSection);
- for (const kejian of section.kejianList) {
- if (kejian.kjId === sectionPage.kjId) {
- return {
- cur: total * parseFloat(kejian['curProcess']) / 100,
- max: total * parseFloat(kejian['maxProcess']) / 100,
- };
- }
- }
- }
- function updateSectionProgress(operId, code, type, callback) {
- let sectionPage = getCache('SectionInfo' + operId, 'sectionPage');
- let arrKecheng = getCache('SectionInfo' + operId, 'arrKecheng');
- if (sectionPage && sectionPage.finish) {
- console.log('已经结束,不再保存进度')
- return;
- }
- let kejianList = arrKecheng[sectionPage.iChapter].jieList[sectionPage.iSection].kejianList;
- let kejianIndex = kejianList.findIndex(item => item.kjId === sectionPage.kjId);
- const optX = {
- zhangIndex: sectionPage.iChapter,
- jieIndex: sectionPage.iSection,
- kejianIndex: kejianIndex,
- kjId: sectionPage.kjId,
- operId: sectionPage.operId,
- process: kejianList[kejianIndex].maxProcess,
- customLoadingSwitch: false,
- };
- saveCache('SectionInfo' + operId, 'arrKecheng', arrKecheng);
- const saveOpt = {
- kejianList: kejianList,
- kejianIndex: kejianIndex,
- arrKecheng: arrKecheng,
- optX: optX,
- };
- // 音视频end
- if (code === 'end') {
- kcApi.getClientKechengSave(optX).then(res => {
- // 接口正常执行
- if (res.code === 0) {
- // 音视频end事件
- kejianList[kejianIndex].curProcess = 100;
- kejianList[kejianIndex].maxProcess = 100;
- arrKecheng[optX.zhangIndex].jieList[optX.jieIndex].kejianList[optX.kejianIndex]
- .hasFinished = true;
- saveCache('SectionInfo' + operId, 'arrKecheng', arrKecheng);
- if (res.data.finish === true) {
- // 整个课程学完 data为true
- uni.showToast({
- title: "课程已学完!"
- })
- sectionPage.finish = true;
- saveCache('SectionInfo' + operId, 'sectionPage', sectionPage);
- }
- } else {
- saveInterfaceAbnormal(saveOpt, 99);
- callback(99)
- }
- }).catch(err => {
- saveInterfaceAbnormal(saveOpt, 99);
- callback(99)
- });
- } else {
- // 其他情况(音视频一秒一保存)
- getTskcSave(optX).then(res => {
- if (res.code === 0) {
- if (res.data.finish === true) {
- uni.showToast({
- title: "课程已学完!"
- })
- sectionPage.finish = true;
- saveCache('SectionInfo' + operId, 'sectionPage', sectionPage);
- }
- }
- });
- }
- }
- function saveInterfaceAbnormal(saveOpt, jindu) {
- const {
- kejianList,
- kejianIndex,
- arrKecheng,
- optX,
- operId
- } = saveOpt;
- kejianList[kejianIndex].curProcess = jindu;
- kejianList[kejianIndex].maxProcess = jindu;
- arrKecheng[optX.zhangIndex].jieList[optX.jieIndex].kejianList[optX.kejianIndex].hasFinished = false;
- saveCache('SectionInfo' + operId, 'arrKecheng', arrKecheng);
- uni.redirectTo({
- url:"/pages/client/Kecheng/list"
- })
- }
- return {
- getCurKjIndex,
- saveKechengData,
- getKechengDataFromHistory,
- saveKechengSectionPage,
- getKechengSectionPageFromHistory,
- mergeProgress,
- initCourseProgressAll,
- saveCourseProgress,
- getCourseProgress,
- updateSectionProgress,
- saveInterfaceAbnormal
- }
- }
|