wangxy 1 month ago
parent
commit
7bfeaf37e9
1 changed files with 171 additions and 0 deletions
  1. 171 0
      utils/useQieping.js

+ 171 - 0
utils/useQieping.js

@@ -0,0 +1,171 @@
+import {
+	ref,
+	onUnmounted,
+	nextTick,
+	computed
+} from "vue";
+import {
+	getClientQiepingCheat,
+	getClientQiepingTimes
+} from "@/api/kaoshi.js"
+import {
+	useZhuapaiStore
+} from "@/store/zhuapai.js"
+import {
+	onLoad,
+	onShow,
+	onHide
+} from "@dcloudio/uni-app";
+
+
+export function useQiePing() {
+
+
+	const zhuapaiStore = useZhuapaiStore();
+
+	// const emits = defineEmits(['zhuapai', 'forceSubmit'])
+	const zhuapaiFlag = ref(false);
+	const zhuapaixiaoshi = ref(0);
+	const leaveTime = ref('');
+	const toggleScreenSecond = ref(0);
+	const toggleScreenFlag = ref(0);
+	const ksId = ref('')
+	let visibilityState = 'hidden'
+	let initStatus = false;
+	
+	let zhuapaiFn = null;
+	let	forceSubmitFn = null;
+	let	qiepingToastFn = null;
+
+	function cheatingFun() {
+		// 用户离开了当前页面
+		if (visibilityState === 'hidden') {
+			console.log('页面不可见');
+			if (zhuapaiFlag.value) {
+				// 此时 切出后台 发生抓拍情况下 要传递固定图片
+				console.log('切出去zhuapaixiaoshi 恢复正常');
+				zhuapaixiaoshi.value = 1
+				zhuapaiStore.setStatus(1)
+			}
+			//  计时
+			leaveTime.value = new Date().getTime();
+		} else if (visibilityState === 'visible') {
+			console.log('切回来 恢复正常');
+			// 用户打开或回到页面
+			if (zhuapaiFlag.value) {
+				zhuapaixiaoshi.value = 0
+				zhuapaiStore.setStatus(0)
+				// emits('zhuapai') // 重置抓拍
+				zhuapaiFn && zhuapaiFn()
+			}
+			zhuapaixiaoshi.value = 0
+			zhuapaiStore.setStatus(0)
+			console.log('页面可见');
+			let nowTime = new Date().getTime();
+			if (Number(nowTime) - Number(leaveTime.value) > toggleScreenSecond.value + '000') {
+				let req = {
+					ksId: ksId.value,
+				};
+				getClientQiepingCheat(req).then(res => {
+					//cutScreenDialog   是否超限 true:超过限制 false:未超过限制 ,
+					if (res.code === 0 && res.data.flag) {
+						// emits('forceSubmit') // 强制交卷
+						forceSubmitFn && forceSubmitFn();
+					} else {
+						emits('qiepingToast', res.data.times) // 提示警告
+						qiepingToastFn && qiepingToastFn( res.data.times)
+					}
+				});
+			}
+		}
+	}
+
+	function zhuapaiFun() {
+		if (visibilityState === 'hidden') {
+			console.log('页面不可见');
+			zhuapaixiaoshi.value = 1
+			zhuapaiStore.setStatus(1)
+		} else if (visibilityState === 'visible') {
+			zhuapaixiaoshi.value = 0
+			zhuapaiStore.setStatus(0)
+			// emits('zhuapai')
+			zhuapaiFn && zhuapaiFn()
+		}
+	}
+
+	function init(options, {
+		zhuapai,
+		forceSubmit,
+		qiepingToast
+	}) {
+		initStatus = true;
+		zhuapaiFn  = zhuapai;
+		forceSubmitFn = forceSubmit;
+		qiepingToastFn = qiepingToast;
+		
+		toggleScreenFlag.value = options.toggleScreenFlag;
+		toggleScreenSecond.value = options.toggleScreenSecond;
+		zhuapaiFlag.value = options.zhuapaiFlag;
+		ksId.value = options.ksId;
+		if (toggleScreenFlag.value !== 0) {
+			console.log("有切屏");
+			cheatingNumberSearch();
+		}
+		if (zhuapaiFlag.value && toggleScreenFlag.value == 0) {
+			console.log("有抓拍 无切屏");
+		}
+	}
+
+	function cheatingNumberSearch() {
+		let req = {
+			ksId: ksId.value,
+		};
+		getClientQiepingTimes(req).then(res => {
+			if (res.code === 0) {
+				if (res.data.times > 0 && res.data.times <= res.data.toggleScreenFlag) {
+					// emits('qiepingToast', res.data.times) // 提示警告
+					qiepingToastFn && qiepingToastFn( res.data.times)
+				} else if (res.data.times > 0 && res.data.times >= res.data.toggleScreenFlag) {
+					// emits('forceSubmit') // 强制交卷
+					forceSubmitFn && forceSubmitFn()
+				}
+			}
+		});
+	}
+
+	onShow(() => {
+		if (!initStatus) {
+			return 
+		}
+		visibilityState = 'visible'
+		if (toggleScreenFlag.value !== 0) {
+			console.log("有切屏");
+			cheatingFun();
+		}
+		if (zhuapaiFlag.value && toggleScreenFlag.value == 0) {
+			console.log("有抓拍 无切屏");
+			// 有抓拍 没有切屏  此方法是 解决切到后台,抓拍停留一帧的问题
+			zhuapaiFun();
+		}
+	})
+	
+	onHide(() => {
+		if (!initStatus) {
+			return 
+		}
+		visibilityState = 'hidden'
+		if (toggleScreenFlag.value !== 0) {
+			console.log("有切屏");
+			cheatingFun();
+		}
+		if (zhuapaiFlag.value && toggleScreenFlag.value == 0) {
+			console.log("有抓拍 无切屏");
+			// 有抓拍 没有切屏  此方法是 解决切到后台,抓拍停留一帧的问题
+			zhuapaiFun();
+		}
+	})
+
+	return {
+		init
+	}
+}