|
@@ -1,4 +1,4 @@
|
|
|
-import { Button, Icon, Popup, Swipe, SwipeItem } from 'vant';
|
|
|
+import { Button, Icon, Popup, Swipe, SwipeItem, showDialog } from 'vant';
|
|
|
import {
|
|
|
defineComponent,
|
|
|
onMounted,
|
|
@@ -6,7 +6,8 @@ import {
|
|
|
onUnmounted,
|
|
|
ref,
|
|
|
Transition,
|
|
|
- watch
|
|
|
+ watch,
|
|
|
+ nextTick
|
|
|
} from 'vue';
|
|
|
import styles from './index.module.less';
|
|
|
import 'plyr/dist/plyr.css';
|
|
@@ -14,7 +15,11 @@ import request from '@/helpers/request';
|
|
|
import { state } from '@/state';
|
|
|
import { useRoute } from 'vue-router';
|
|
|
import iconBack from '../coursewarePlay/image/back.svg';
|
|
|
-import { postMessage } from '@/helpers/native-message';
|
|
|
+import {
|
|
|
+ listenerMessage,
|
|
|
+ postMessage,
|
|
|
+ promisefiyPostMessage
|
|
|
+} from '@/helpers/native-message';
|
|
|
// import { browser } from '@/helpers/utils';
|
|
|
import { Vue3Lottie } from 'vue3-lottie';
|
|
|
import playLoadData from '../coursewarePlay/datas/data.json';
|
|
@@ -22,6 +27,7 @@ import playLoadData from '../coursewarePlay/datas/data.json';
|
|
|
import VideoClass from './video-class';
|
|
|
import { usePageVisibility } from '@vant/use';
|
|
|
import { useInterval, useIntervalFn } from '@vueuse/core';
|
|
|
+import { handleCheckVip } from '../hook/useFee';
|
|
|
|
|
|
// const materialType = {
|
|
|
// 视频: 'VIDEO',
|
|
@@ -74,6 +80,7 @@ export default defineComponent({
|
|
|
const query = route.query;
|
|
|
const headeRef = ref();
|
|
|
const data = reactive({
|
|
|
+ disableScreenRecordingFlag: '0', // disable recording
|
|
|
visiableStatus: false,
|
|
|
visiableConfirmText: '下一题',
|
|
|
isLastIndex: false,
|
|
@@ -151,10 +158,9 @@ export default defineComponent({
|
|
|
loop: false,
|
|
|
videoEle: null,
|
|
|
timer: null,
|
|
|
- // muted: state.user.data?.vipMember ? false : true, // 静音
|
|
|
- muted: true,
|
|
|
- autoplay: true
|
|
|
- // autoplay: state.user.data?.vipMember ? true : false //自动播放
|
|
|
+ muted: state.user.data?.vipMember ? false : true, // 静音
|
|
|
+ // muted: true,
|
|
|
+ autoplay: state.user.data?.vipMember ? true : false //自动播放
|
|
|
};
|
|
|
});
|
|
|
console.log(data.trainings, 'trainings');
|
|
@@ -162,6 +168,11 @@ export default defineComponent({
|
|
|
(n: any) => n.id == route.query.materialId
|
|
|
);
|
|
|
data.videoData = data.itemList[0];
|
|
|
+
|
|
|
+ if (data.disableScreenRecordingFlag === '1') {
|
|
|
+ // 检测是否录屏
|
|
|
+ handleLimitScreenRecord();
|
|
|
+ }
|
|
|
handleExerciseCompleted();
|
|
|
}
|
|
|
};
|
|
@@ -193,20 +204,124 @@ export default defineComponent({
|
|
|
}
|
|
|
};
|
|
|
|
|
|
+ // 获取支付渠道
|
|
|
+ const sysParamConfig = async () => {
|
|
|
+ try {
|
|
|
+ const res = await request.get(
|
|
|
+ state.platformApi + '/sysConfig/queryByParamName',
|
|
|
+ {
|
|
|
+ params: {
|
|
|
+ paramName: 'disable_screen_recording_flag'
|
|
|
+ }
|
|
|
+ }
|
|
|
+ );
|
|
|
+ data.disableScreenRecordingFlag = res.data.paranValue || '';
|
|
|
+ } catch {
|
|
|
+ //
|
|
|
+ }
|
|
|
+ };
|
|
|
+
|
|
|
+ let timers: any = null;
|
|
|
+ const checkVideoPlay = () => {
|
|
|
+ const activeVideoRef = data.videoData?.videoEle;
|
|
|
+ if (activeVideoRef) {
|
|
|
+ timers = setInterval(() => {
|
|
|
+ if (!activeVideoRef.paused()) {
|
|
|
+ activeVideoRef.pause();
|
|
|
+ clearInterval(timers);
|
|
|
+ }
|
|
|
+ activeVideoRef.pause();
|
|
|
+ }, 100);
|
|
|
+ }
|
|
|
+ setTimeout(() => {
|
|
|
+ clearInterval(timers);
|
|
|
+ }, 3000);
|
|
|
+ };
|
|
|
+ // 切换播放
|
|
|
+ const togglePlay = (m: any, isPlay: boolean) => {
|
|
|
+ if (isPlay) {
|
|
|
+ m.videoEle?.play();
|
|
|
+ } else {
|
|
|
+ m.videoEle?.pause();
|
|
|
+ }
|
|
|
+ };
|
|
|
+ //录屏时间触发
|
|
|
+ const handleLimitScreenRecord = async () => {
|
|
|
+ const result = await promisefiyPostMessage({
|
|
|
+ api: 'getDeviceStatus',
|
|
|
+ content: { type: 'video' }
|
|
|
+ });
|
|
|
+ const { status } = result?.content || {};
|
|
|
+ if (status == '1') {
|
|
|
+ data.itemList.forEach((item: any) => (item.autoPlay = false));
|
|
|
+ handleStopVideo();
|
|
|
+ // 处理事件 - 事件事件后加载的
|
|
|
+ checkVideoPlay();
|
|
|
+ data.visiableStatus = false;
|
|
|
+ showDialog({
|
|
|
+ title: '温馨提示',
|
|
|
+ message: '课件内容请勿录屏',
|
|
|
+ beforeClose: () => {
|
|
|
+ return new Promise(resolve => {
|
|
|
+ promisefiyPostMessage({
|
|
|
+ api: 'getDeviceStatus',
|
|
|
+ content: { type: 'video' }
|
|
|
+ }).then((res: any) => {
|
|
|
+ const content = res.content;
|
|
|
+ if (content?.status == '1') {
|
|
|
+ togglePlay(data.videoData, false);
|
|
|
+ resolve(false);
|
|
|
+ } else {
|
|
|
+ togglePlay(data.videoData, true);
|
|
|
+ resolve(true);
|
|
|
+ }
|
|
|
+
|
|
|
+ handleExerciseCompleted();
|
|
|
+ });
|
|
|
+ });
|
|
|
+ }
|
|
|
+ });
|
|
|
+ }
|
|
|
+ };
|
|
|
onMounted(async () => {
|
|
|
+ await sysParamConfig();
|
|
|
const trainings = await getTrainingRecord();
|
|
|
// 初始化状态
|
|
|
- // trainings.forEach((record: any) => {
|
|
|
- // if (record.times > record.trainingTimes) {
|
|
|
- // console.log(record, 'times');
|
|
|
- // data.isPlayBaseStatus = false;
|
|
|
- // }
|
|
|
- // });
|
|
|
|
|
|
setRecord(trainings);
|
|
|
// 是否为会员
|
|
|
- // data.isMember = handleCheckVip();
|
|
|
+ if (state.platformType === 'STUDENT') {
|
|
|
+ data.isMember = handleCheckVip();
|
|
|
+ console.log(data.isMember, 'isMember');
|
|
|
+ if (!data.isMember) {
|
|
|
+ nextTick(() => {
|
|
|
+ postMessage({
|
|
|
+ api: 'courseLoading',
|
|
|
+ content: {
|
|
|
+ show: false,
|
|
|
+ type: 'fullscreen'
|
|
|
+ }
|
|
|
+ });
|
|
|
+ });
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ }
|
|
|
|
|
|
+ if (data.disableScreenRecordingFlag === '1') {
|
|
|
+ //禁止录屏 ios
|
|
|
+ listenerMessage('setVideoPlayer', result => {
|
|
|
+ if (result?.content?.status == 'pause') {
|
|
|
+ handleLimitScreenRecord();
|
|
|
+ }
|
|
|
+ });
|
|
|
+ // 安卓
|
|
|
+ postMessage({
|
|
|
+ api: 'limitScreenRecord',
|
|
|
+ content: {
|
|
|
+ type: 1
|
|
|
+ }
|
|
|
+ });
|
|
|
+ }
|
|
|
// 只有学生才统计数据
|
|
|
if (state.platformType === 'STUDENT') {
|
|
|
// 间隔多少时间同步数据
|
|
@@ -328,7 +443,7 @@ export default defineComponent({
|
|
|
};
|
|
|
const dialogCancel = () => {
|
|
|
try {
|
|
|
- data.trainings[data.itemIndex].currentTime = 0;
|
|
|
+ // data.trainings[data.itemIndex].currentTime = 0;
|
|
|
} catch (e) {
|
|
|
//
|
|
|
}
|