| 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 {
 
- 			// 其他情况(音视频一秒一保存)
 
- 			kcApi.getClientKechengSave(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
 
- 	}
 
- }
 
 
  |