Kaynağa Gözat

新增腾讯播放器

huangjianlei 1 yıl önce
ebeveyn
işleme
e5d12f2205

+ 2 - 0
common/api.js

@@ -1,5 +1,6 @@
 import login from './httpList/login.js'
 import polyvVideo from './httpList/polyvVideo.js'
+import tcVideo from './httpList/tcVideo.js'
 import oss from './httpList/oss.js'
 import userInfo from './httpList/userInfo.js'
 import wxpay from './httpList/wxpay.js'
@@ -26,6 +27,7 @@ export default {
 	...mock,
 	...login,
 	...polyvVideo,
+	...tcVideo,
 	...oss,
 	...userInfo,
 	...system,

+ 21 - 0
common/httpList/tcVideo.js

@@ -0,0 +1,21 @@
+import {
+	myRequest
+} from '../request.js'
+export default {
+	//获取腾讯视频播放凭证
+	tcVideoSign(data) {
+		return myRequest({
+			url: '/vod/video/sign/' + data,
+			method: 'get',
+			// noToken: true
+		})
+	},
+	//获取skipPort
+	courseSkipPort(data) {
+		return myRequest({
+			url: '/course/skipPort',
+			method: 'get',
+			data: data
+		})
+	},
+}

+ 1 - 0
common/methodTool.js

@@ -467,6 +467,7 @@ export default {
 		return result;
 	},
 	skipLogin(sign) {
+		console.error("join")
 		return api.skipLogin({
 			sign
 		}).then((res) => {

+ 3 - 3
components/myPlayer/polyvPlayer.vue

@@ -101,7 +101,7 @@
 					var playbackRate = JSON.parse(JSON.stringify(this.playbackRate))
 				}
 				const polyvPlayer = window.polyvPlayer;
-				console.log("this.allowSeek",this.allowSeek)
+				console.log("this.allowSeek", this.allowSeek)
 				this.$api.polyvVideoSign(this.vid).then(async (res) => {
 					let option = {
 						showLine: "off",
@@ -110,7 +110,7 @@
 						forceH5: true,
 						autoplay: this.autoplay, // 自动播放
 						ban_seek: this.allowSeek, // 是否禁止拖拽进度条
-						ban_skin_progress:this.allowSeek == 'on'?true:false,
+						ban_skin_progress: this.allowSeek == 'on' ? true : false,
 						speed: playbackRate, // 倍数
 						banSeekDeviation: 7, // 做兼容
 						teaser_show: 0,
@@ -148,7 +148,7 @@
 				// 设置播放时间会重复触发
 				if (this.needSeek) {
 					// #ifdef H5
-						this.videoToastShow = true;
+					this.videoToastShow = true;
 					// #endif
 					// #ifdef MP-WEIXIN
 					this.videoToastShow = true;

+ 427 - 0
components/myPlayer2/tcPlayer.vue

@@ -0,0 +1,427 @@
+<template>
+	<view>
+		<view class="player_box" style="width: 100%; height: 421rpx">
+			<view id="player2"></view>
+			<template v-if="videoToastShow">
+				<cover-view class="video-toast__close" @click="closeToast()">X</cover-view>
+				<cover-view class="video-toast">
+					<cover-view class="video-toast__text">您上次看到
+						{{ $method.secondToDate(ct) }},正在自动续播</cover-view>
+					<cover-view class="video-toast__btn" @click="restart()">从头播放</cover-view>
+				</cover-view>
+			</template>
+		</view>
+	</view>
+</template>
+
+<script>
+	var tcPlayerContext = null;
+	export default {
+		name: "SaasMiniprogramTcPlayer",
+		props: {
+			playFileId: {
+				type: String,
+				default: "",
+			},
+			autoplay: {
+				type: Boolean,
+				default: false,
+			},
+			controlBar: {
+				type: Boolean,
+				default: () => {
+					return true //是否禁止拖拽进度条,取值:{true,false}。
+				}
+			},
+			currentTime: {
+				type: Number,
+				default: 0,
+			},
+			playbackRate: {
+				type: Array,
+				default: () => {
+					return [1];
+				},
+			},
+		},
+		data() {
+			return {
+				vodPlayerJs: 'https://web.sdk.qcloud.com/player/tcplayer/release/v5.1.0/tcplayer.v5.1.0.min.js',
+				videoToastShow: false,
+				hasStart: false,
+				config: null,
+				Elevideo: false,
+				isInitSeek: false,
+				needSeek: false, // 是否有记录需要跳转播放
+				playTime: 0,
+				PlayStart: 0,
+				isSeeking: false
+			};
+		},
+		created() {
+			tcPlayerContext = null;
+		},
+		mounted() {
+			if (this.fileId) {
+				this.changeFileId(this.fileId);
+			}
+		},
+		methods: {
+			loadPlayerScript(callback) {
+				if (!window.TCPlayer) {
+					const myScript = document.createElement("script");
+					myScript.setAttribute("src", this.vodPlayerJs);
+					myScript.onload = callback;
+					document.body.appendChild(myScript);
+				} else {
+					callback();
+				}
+			},
+			// 播放视频
+			loadPlayer() {
+				if (this.playbackRate.length <= 1) {
+					var playbackRate = [1];
+				} else {
+					var playbackRate = JSON.parse(JSON.stringify(this.playbackRate));
+				}
+				const TCPlayer = window.TCPlayer;
+				console.log("是否显示进度条", this.controlBar);
+				this.$api.tcVideoSign(this.fileId).then(async (res) => {
+					let option = {
+						plugins: {
+							ContinuePlay: {
+								auto: true, // 是否禁用续播功能,取值:{true,false}。
+								SafeCheck: true // 安全检查
+							},
+						},
+						sources: [{
+							src: 'https://1500005692.vod2.myqcloud.com/43843706vodtranscq1500005692/62656d94387702300542496289/v.f100240.m3u8',
+						}],
+						licenseUrl: 'https://license.vod2.myqcloud.com/license/v2/1323759362_1/v_cube.license',
+						playbackRates: playbackRate,
+						autoplay: this.autoplay, // 自动播放
+						controlBar: {
+							progressControl: this.controlBar
+						} // 是否禁止拖拽(隐藏)进度条
+					};
+					if (tcPlayerContext) {
+						tcPlayerContext.currentTime(
+							this.currentTime || 0);
+						tcPlayerContext.changeFileId(option);
+					} else {
+						option = {
+							height: 218,
+							...option,
+						};
+						let player_tencent = document.createElement("video");
+						player_tencent.style.width = "100%";
+						player_tencent.id = "player-tencent";
+						player_tencent.setAttribute("playsinline", true);
+						player_tencent.setAttribute("webkit-playsinline", true);
+						document
+							.getElementById("player2")
+							.insertAdjacentElement("afterend", player_tencent);
+						tcPlayerContext = TCPlayer("player-tencent", option);
+						tcPlayerContext.currentTime(
+							this.currentTime || 0);
+						this.h5StateChange();
+					}
+				});
+			},
+			playing() {
+				if(this.isSeeking) return;
+				console.log("腾讯视频恢复播放");
+				if (!this.PlayStart) {
+					this.onPlayStart();
+					return;
+				}
+				// 设置播放时间会重复触发
+				if (this.needSeek) {
+					this.videoToastShow = true;
+					setTimeout(() => {
+						this.closeToast();
+					}, 3000);
+					this.$emit("studyLog");
+					this.needSeek = false;
+				}
+				// if (!this.Elevideo) {
+				// 	this.Elevideo = document.querySelector("video.plv-player-video");
+				// 	this.Elevideo &&
+				// 		this.Elevideo.addEventListener("timeupdate", this.timeupdate);
+				// }
+
+				if (!this.Elevideo) {
+					this.Elevideo = true;
+					tcPlayerContext.on("timeupdate", this.timeupdate);
+				}
+			},
+
+			onSeeking() {
+				if (!this.needSeek) {
+					console.log("触发拖拽");
+					this.isSeeking = true;
+					this.$emit('isSeeking', this.isSeeking);
+				}
+			},
+			onSeeked() {
+				console.log("触发拖拽结束");
+				this.isSeeking = false;
+				this.$emit('isSeeking', this.isSeeking);
+			},
+
+			resumeVideo() {
+				tcPlayerContext.play();
+			},
+			playerError(err) {
+				console.log("腾讯视频播放err", err);
+			},
+			timeupdate(e) {
+				if(this.isSeeking) return;
+				let time = 0;
+				if (!this.PlayStart) return
+				time = this.PlayStart == 1 ? (this.currentTime || 0) : this.playCurrentTime();
+
+				if (!this.isInitSeek) {
+					if (time >= this.ct) {
+						this.isInitSeek = true;
+					} else {
+						return;
+					}
+				}
+				this.onVideoSeek1(time);
+
+				this.PlayStart++
+				this.$emit("timeupdate", time);
+			},
+			h5StateChange() {
+				let states = {
+					loadstart: "onPlayerInitOver", // 播放器初始化完毕时触发
+					pause: "pause", // 视频暂停时触发
+					playing: "playing", // 视频初次播放或由暂停恢复播放时触发
+					seeking: "onSeeking",
+					seeked: "onSeeked",
+					ended: "ended", // 当前视频播放完毕时触发
+					error: "playerError", // 播放出现错误时触发
+				};
+				let that = this;
+				for (const key in states) {
+					tcPlayerContext.on(key, function() {
+						that[states[key]] && that[states[key]](...arguments);
+						that.$emit(states[key]);
+					});
+				}
+			},
+			onVideoSeek(start, end, vid) {
+				// if (this.allowSeek == "off") {
+				//   return;
+				// }
+				// if (end - this.playTime > 10) {
+				//   this.seekVideo(start);
+				// }
+			},
+			// 新增用户视频学习日志
+			studyLog() {
+				// this.$http({
+				// 	url: "/user/study/log",
+				// 	method: "post",
+				// 	data: {
+				// 		goodsId: this.goodsId,
+				// 		courseId: this.courseId,
+				// 		moduleId: this.moduleId || 0,
+				// 		chapterId: this.chapterId || 0,
+				// 		sectionId: this.playSectionId || 0,
+				// 		fromPlat: 1, //来源平台 1小程序 2PC网站
+				// 		goodsType: 1, // 商品类型 1视频2题库 3补考 4前培 5虚拟赠送题库 6直播
+				// 		orderGoodsId: this.orderGoodsId,
+				// 	},
+				// }).then((res) => {});
+			},
+			onVideoSeek1(time) {
+				if (!this.controlBar) {
+					if (Math.abs(time - this.playTime) > 5) {
+						console.log("进度条回拉", this.playTime, this.ct);
+						this.seekVideo(this.playTime);
+					} else {
+						this.playTime = time;
+					}
+				}
+			},
+			seekVideo(time) {
+				time = time || 0;
+				tcPlayerContext.currentTime(time);
+			},
+			restart() {
+				this.seekVideo(0);
+				this.closeToast();
+			},
+			// 播放时刻
+			playCurrentTime() {
+				if (!tcPlayerContext) {
+					return 0;
+				}
+				return tcPlayerContext.currentTime();
+			},
+			getDuration() {
+				return tcPlayerContext.duration();
+			},
+			// 本次看的时长
+			playVideoTime() {
+				if (!tcPlayerContext) {
+					return 0;
+				}
+				return tcPlayerContext.currentTime();
+			},
+			// 暂停播放
+			playPause() {
+				if (!tcPlayerContext) {
+					return;
+				}
+				tcPlayerContext.pause();
+			},
+			// 退出全屏
+			exitFullScreen() {
+				if (!tcPlayerContext) {
+					return;
+				}
+				if (
+					!!(
+						document.webkitIsFullScreen ||
+						document.mozFullScreen ||
+						document.msFullscreenElement ||
+						document.fullscreenElement
+					)
+				) {
+					try {
+						var de = document;
+						if (de.exitFullscreen) {
+							de.exitFullscreen();
+						} else if (de.mozCancelFullScreen) {
+							de.mozCancelFullScreen();
+						} else if (de.webkitCancelFullScreen) {
+							de.webkitCancelFullScreen();
+						}
+					} catch (err) {}
+				}
+			},
+			onPlayerInitOver() {
+				console.log("腾讯视频加载完毕");
+				uni.$on("playPause", this.playPause);
+				this.$emit("loadedmetadata", tcPlayerContext);
+			},
+			onPlayStart() {
+				console.log("腾讯视频初次播放");
+				this.PlayStart = 1;
+			},
+			loadedmetadata() {
+				if (this.hasStart) {
+					// 防止loadedmetadata事件第二次触发
+					return;
+				}
+				this.hasStart = true;
+				setTimeout(() => {
+					this.hasStart = false;
+				}, 3000);
+				this.onPlayerInitOver();
+			},
+			changeFileId(data) {
+				console.log('调用腾讯视频changeFileId')
+				if (!data) {
+					return;
+				}
+				this.config = this.$method.isObject(data) ?
+					data : {
+						fileId: data,
+						currentTime: this.currentTime
+					};
+				if (!this.fileId) {
+					return;
+				}
+				this.PlayStart = 0;
+				this.loadPlayerScript(this.loadPlayer);
+			},
+			closeToast() {
+				this.videoToastShow = false;
+			},
+		},
+		destroyed() {
+			if (tcPlayerContext) {
+				tcPlayerContext.off();
+				tcPlayerContext.dispose();
+			}
+			// // #ifdef H5
+			// this.Elevideo &&
+			// 	this.Elevideo.removeEventListener("timeupdate", this.timeupdate, false);
+			// // #endif
+			tcPlayerContext = null;
+		},
+		computed: {
+			fileId() {
+				return this.config ? this.config.fileId : this.playFileId;
+			},
+			ct() {
+				return (
+					(this.config ? this.config.currentTime : this.currentTime) ||
+					0
+				);
+			},
+		},
+		watch: {
+			ct: {
+				handler(time) {
+					if (time > 0) {
+						this.needSeek = true;
+						this.playTime = time;
+					}
+				},
+				immediate: true,
+			},
+		},
+	};
+</script>
+
+<style lang="scss" scoped>
+	.player_box {
+		position: relative;
+
+		.video-toast {
+			position: absolute;
+			width: 686rpx;
+			height: 80rpx;
+			background: rgba(0, 0, 0, 0.6);
+			border-radius: 24rpx;
+			bottom: 100rpx;
+			left: 50%;
+			transform: translateX(-50%);
+			color: #fff;
+			display: flex;
+			font-size: 26rpx;
+			align-items: center;
+			overflow: visible;
+			z-index: 999;
+
+			&__text {
+				flex: 1;
+				margin-left: 40rpx;
+			}
+
+			&__btn {
+				width: 180rpx;
+				text-align: center;
+				border-left: 1rpx solid #fff;
+			}
+		}
+
+		.video-toast__close {
+			position: absolute;
+			right: 32rpx;
+			bottom: 184rpx;
+			width: 40rpx;
+			height: 40rpx;
+			line-height: 40rpx;
+			text-align: center;
+			background: rgba(0, 0, 0, 0.6);
+			border-radius: 50%;
+			color: rgba(255, 255, 255, 0.3);
+		}
+	}
+</style>

+ 3 - 0
index.html

@@ -25,6 +25,7 @@
       href="<%= BASE_URL %>static/index.<%= VUE_APP_INDEX_CSS_HASH %>.css"
     />
     <link rel="stylesheet" href="<%= BASE_URL %>static/adapt-pc/pc.css" />
+	 <link href="https://web.sdk.qcloud.com/player/tcplayer/release/v5.1.0/tcplayer.min.css" rel="stylesheet"/>
   </head>
   <body>
     <noscript>
@@ -44,5 +45,7 @@
       type="text/JavaScript"
       src="<%= BASE_URL %>static/adapt-pc/pc.js"
     ></script>
+	<!--播放器脚本文件-->
+	<script src="https://web.sdk.qcloud.com/player/tcplayer/release/v5.1.0/tcplayer.v5.1.0.min.js"></script>
   </body>
 </html>

+ 11 - 0
pages.json

@@ -961,6 +961,17 @@
 						}
 					}
 				},
+				{
+					"path": "webview/detaillink",
+					"style": {
+						"navigationBarTitleText": "课程详情",
+						"navigationStyle": "custom", // 隐藏系统导航栏
+						"app-plus": {
+							"titleNView": false, //禁用原生导航栏
+							"bounce": "none"
+						}
+					}
+				},
 				{
 					"path": "mockRecord/mock_record",
 					"style": {

+ 5 - 0
pages/index/index.vue

@@ -486,6 +486,11 @@
 				});
 			},
 			tabListFunc(item) {
+				// let a = "http://192.168.1.213:8080/pages3/polyv/detail?id=214618&goodsId=490909&orderGoodsId=5535&gradeId=1854&periodWaitTime=1&isQ="
+				// uni.navigateTo({
+				// 	url:`/pages5/webview/sdlink?url=${a}`
+				// })
+				// return
 				if (item.type == 1) {
 					this.$store.state.current = item.url
 					uni.switchTab({

+ 120 - 30
pages/learn/index.vue

@@ -244,30 +244,30 @@
 							<div v-if="
                   (item.periodStatus == 0 || item.periodStatus == -1)
                 ">
-				<span v-if="$method.GetRTime(item.classEndTime) >= 0">
-				温馨提示:当前学习有效期至{{
+								<span v-if="$method.GetRTime(item.classEndTime) >= 0">
+									温馨提示:当前学习有效期至{{
 				  $method.timestampToTime(item.classEndTime)
 				}},超期学时无效,为防审核异常请于{{
 				  $method.timestampToTime(item.classEndTime - 864000, false)
 				}}
-								前完成学习,当前剩余有效学习时间为{{
+									前完成学习,当前剩余有效学习时间为{{
 				  $method.GetRTime(item.classEndTime) < 0
 				    ? 0
 				    : $method.GetRTime(item.classEndTime)
 				}}天。
-				</span>
-				<span v-else-if="$method.GetRTime(item.serviceEndTime) >= 0">
-				温馨提示:当前学习有效期至{{
+								</span>
+								<span v-else-if="$method.GetRTime(item.serviceEndTime) >= 0">
+									温馨提示:当前学习有效期至{{
 				  $method.timestampToTime(item.serviceEndTime)
 				}},超期学时无效,为防审核异常请于{{
 				  $method.timestampToTime(item.serviceEndTime - 864000, false)
 				}}
-								前完成学习,当前剩余有效学习时间为{{
+									前完成学习,当前剩余有效学习时间为{{
 				  $method.GetRTime(item.serviceEndTime) < 0
 				    ? 0
 				    : $method.GetRTime(item.serviceEndTime)
 				}}天。
-				</span>
+								</span>
 							</div>
 							<div v-if="
                   item.gradeStatus == 1 &&
@@ -754,7 +754,7 @@
 									goodsName,
 									subscribeSign
 								} = goods;
-								console.log(goods,'goods')
+								console.log(goods, 'goods')
 								let text =
 									`您七大员新考【${goodsName}】课程` +
 									(subscribeSign == 1 ?
@@ -892,9 +892,36 @@
 
 					if (item.learnStatus > 0) {
 						//跳转第三方h5
-						uni.navigateTo({
-							url: `/pages3/polyv/detail?goodsId=${item.goodsId}&orderGoodsId=${item.orderGoodsId}&gradeId=${item.gradeId}&isOther=1`,
-						});
+						// uni.navigateTo({
+						// 	url: `/pages3/polyv/detail?goodsId=${item.goodsId}&orderGoodsId=${item.orderGoodsId}&gradeId=${item.gradeId}&isOther=1`,
+						// });
+
+						this.$api
+							.courseSkipPort()
+							.then((res) => {
+								let obj = {
+									goodsId: item.goodsId,
+									orderGoodsId: item.orderGoodsId,
+									gradeId: item.gradeId,
+									isOther: 1,
+									skipPort: res.data.data.skipPort
+								}
+								let webViewUrl = null;
+								// #ifdef H5
+								webViewUrl = '/pages3/polyv/detail?obj=' + encodeURIComponent(JSON.stringify(obj));
+								uni.navigateTo({
+									url: webViewUrl
+								})
+								// #endif
+								// #ifdef MP-WEIXIN
+								webViewUrl = encodeURIComponent('http://192.168.1.213:8080' +
+									'/pages3/polyv/detail?obj=' +
+									JSON.stringify(obj))
+								uni.navigateTo({
+									url: `/pages5/webview/detaillink?url=${webViewUrl}`
+								})
+								// #endif
+							})
 						return;
 					} else {
 						const text = this.eduPhone ? ",有疑问,请联系" + this.eduPhone : "";
@@ -1014,25 +1041,88 @@
 					}).then((res) => {
 						if (res.data.code == 200) {
 							if (res.data.total > 1) {
-								uni.navigateTo({
-									url: `/pages3/polyv/detail?id=''&goodsId=${
-                  item.goodsId
-                }&orderGoodsId=${item.orderGoodsId}&gradeId=${
-                  item.gradeId
-                }&periodWaitTime=${item.periodWaitTime ? 1 : ""}&isQ=${
-                  item.orderYear ? 1 : ""
-                }`,
-								});
+								// uni.navigateTo({
+								// 	url: `/pages3/polyv/detail?id=''&goodsId=${
+								//           item.goodsId
+								//         }&orderGoodsId=${item.orderGoodsId}&gradeId=${
+								//           item.gradeId
+								//         }&periodWaitTime=${item.periodWaitTime ? 1 : ""}&isQ=${
+								//           item.orderYear ? 1 : ""
+								//         }`,
+								// });
+
+
+								this.$api
+									.courseSkipPort()
+									.then((res) => {
+										let obj = {
+											id: '',
+											goodsId: item.goodsId,
+											orderGoodsId: item.orderGoodsId,
+											gradeId: item.gradeId,
+											periodWaitTime: item.periodWaitTime ? 1 : "",
+											isQ: item.orderYear ? 1 : "",
+											skipPort: res.data.data.skipPort
+										}
+										let webViewUrl = null;
+										// #ifdef H5
+										webViewUrl = '/pages3/polyv/detail?obj=' +
+											encodeURIComponent(JSON.stringify(obj));
+										uni.navigateTo({
+											url: webViewUrl
+										})
+										// #endif
+										// #ifdef MP-WEIXIN
+										webViewUrl = encodeURIComponent(
+											'http://192.168.1.213:8080' +
+											'/pages3/polyv/detail?obj=' +
+											JSON.stringify(obj))
+										uni.navigateTo({
+											url: `/pages5/webview/detaillink?url=${webViewUrl}`
+										})
+										// #endif
+									})
 							} else if (res.data.total == 1) {
-								uni.navigateTo({
-									url: `/pages3/polyv/detail?id=${
-                  res.data.rows[0].courseId
-                }&goodsId=${item.goodsId}&orderGoodsId=${
-                  item.orderGoodsId
-                }&gradeId=${item.gradeId}&periodWaitTime=${
-                  item.periodWaitTime ? "" : 1
-                }&isQ=${item.orderYear ? 1 : ""}`,
-								});
+								// uni.navigateTo({
+								// 	url: `/pages3/polyv/detail?id=${
+								//           res.data.rows[0].courseId
+								//         }&goodsId=${item.goodsId}&orderGoodsId=${
+								//           item.orderGoodsId
+								//         }&gradeId=${item.gradeId}&periodWaitTime=${
+								//           item.periodWaitTime ? "" : 1
+								//         }&isQ=${item.orderYear ? 1 : ""}`,
+								// });
+
+								this.$api
+									.courseSkipPort()
+									.then((resForDetail) => {
+										let obj = {
+											id: res.data.rows[0].courseId,
+											goodsId: item.goodsId,
+											orderGoodsId: item.orderGoodsId,
+											gradeId: item.gradeId,
+											periodWaitTime: item.periodWaitTime ? "" : 1,
+											isQ: item.orderYear ? 1 : "",
+											skipPort: resForDetail.data.data.skipPort
+										}
+										let webViewUrl = null;
+										// #ifdef H5
+										webViewUrl = '/pages3/polyv/detail?obj=' +
+											encodeURIComponent(JSON.stringify(obj));
+										uni.navigateTo({
+											url: webViewUrl
+										})
+										// #endif
+										// #ifdef MP-WEIXIN
+										webViewUrl = encodeURIComponent(
+											'http://192.168.1.213:8080' +
+											'/pages3/polyv/detail?obj=' +
+											JSON.stringify(obj))
+										uni.navigateTo({
+											url: `/pages5/webview/detaillink?url=${webViewUrl}`
+										})
+										// #endif
+									})
 							} else {
 								uni.showToast({
 									icon: "none",

+ 896 - 1023
pages2/wd/class.vue

@@ -1,200 +1,147 @@
 <template>
-  <view style="padding: 0 30rpx 30rpx">
-    <nav-bar title="我的网课"></nav-bar>
-    <view class="class" v-for="(item, index) in goodsList" :key="index">
-      <view
-        class="class_item"
-        @click.stop="studyIn(item.goodsId, item.gradeId, item, index)"
-      >
-        <image
-          :src="$method.splitImgHost(item.coverUrl, true)"
-          class="class_img"
-        ></image>
-        <view class="class_text">
-          <view class="class_title">{{ item.goodsName }}</view>
-          <view class="content_box">
-            <image src="/static/icon/wk_icon1.png" class="wk_icon"></image>
-            共
-            <text class="content">{{ item.courseNum }}</text>
-            课程
-            <text class="content">{{ item.secAllNum + item.examNum }}</text>
-            节
-            <text class="content">{{ item.classHours || "-" }}</text>
-            学时
-          </view>
-          <view
-            class="content_box"
-            v-if="item.serviceStartTime && item.serviceEndTime"
-          >
-            <image src="/static/icon/wk_icon2.png" class="wk_icon"></image>
-            学习服务期:
-            <text class="content"
-              >{{ $method.timestampToTime(item.serviceStartTime, true, true) }}
-              -
-              {{
+	<view style="padding: 0 30rpx 30rpx">
+		<nav-bar title="我的网课"></nav-bar>
+		<view class="class" v-for="(item, index) in goodsList" :key="index">
+			<view class="class_item" @click.stop="studyIn(item.goodsId, item.gradeId, item, index)">
+				<image :src="$method.splitImgHost(item.coverUrl, true)" class="class_img"></image>
+				<view class="class_text">
+					<view class="class_title">{{ item.goodsName }}</view>
+					<view class="content_box">
+						<image src="/static/icon/wk_icon1.png" class="wk_icon"></image>
+						共
+						<text class="content">{{ item.courseNum }}</text>
+						课程
+						<text class="content">{{ item.secAllNum + item.examNum }}</text>
+						节
+						<text class="content">{{ item.classHours || "-" }}</text>
+						学时
+					</view>
+					<view class="content_box" v-if="item.serviceStartTime && item.serviceEndTime">
+						<image src="/static/icon/wk_icon2.png" class="wk_icon"></image>
+						学习服务期:
+						<text class="content">{{ $method.timestampToTime(item.serviceStartTime, true, true) }}
+							-
+							{{
                 $method.timestampToTime(item.serviceEndTime, true, true)
-              }}</text
-            >
-          </view>
-        </view>
+              }}</text>
+					</view>
+				</view>
 
-        <!-- 不在学习服务期 -->
-        <template
-          v-if="
+				<!-- 不在学习服务期 -->
+				<template v-if="
             item.serviceStartTime &&
             (sysTime < item.serviceStartTime || sysTime > item.serviceEndTime)
-          "
-        >
-          <view
-            class="class-warm"
-            v-if="item.gradeId != 0 && item.gradeStatus == 1"
-          >
-            <view class="class-warm__text">
-              <view class="date"> 不在学习服务期,不可以学习了哦 </view>
-            </view>
-          </view>
-        </template>
+          ">
+					<view class="class-warm" v-if="item.gradeId != 0 && item.gradeStatus == 1">
+						<view class="class-warm__text">
+							<view class="date"> 不在学习服务期,不可以学习了哦 </view>
+						</view>
+					</view>
+				</template>
 
-        <template v-else>
-          <!-- 班级有效期过了 -->
-          <template v-if="item.classEndTime && item.classEndTime < sysTime">
-            <view class="class-warm">
-              <u-icon
-                class="class-warm__icon"
-                size="30"
-                color="#FF3B30"
-                name="error-circle-fill"
-              >
-              </u-icon>
-              <view class="class-warm__text">
-                <view class="date"
-                  >班级有效期:{{
+				<template v-else>
+					<!-- 班级有效期过了 -->
+					<template v-if="item.classEndTime && item.classEndTime < sysTime">
+						<view class="class-warm">
+							<u-icon class="class-warm__icon" size="30" color="#FF3B30" name="error-circle-fill">
+							</u-icon>
+							<view class="class-warm__text">
+								<view class="date">班级有效期:{{
                     $method.timestampToTime(item.classStartTime, true, true)
                   }}
-                  -
-                  {{
+									-
+									{{
                     $method.timestampToTime(item.classEndTime, true, true)
-                  }}</view
-                >
-                <view class="state">班级状态:已过期</view>
-                <!-- <view class="state"
+                  }}
+								</view>
+								<view class="state">班级状态:已过期</view>
+								<!-- <view class="state"
                   >班级状态:已过期,有疑问请联系
                   <text @click="call">020-87085982</text></view
                 > -->
-              </view>
-            </view>
-          </template>
+							</view>
+						</view>
+					</template>
 
-          <!-- 班级有效期之前 -->
-          <template
-            v-else-if="item.classStartTime && item.classStartTime > sysTime"
-          >
-            <view class="class-warm">
-              <u-icon
-                class="class-warm__icon"
-                size="30"
-                color="#FF3B30"
-                name="error-circle-fill"
-              >
-              </u-icon>
-              <view class="class-warm__text">
-                <view class="date"
-                  >班级有效期:{{
+					<!-- 班级有效期之前 -->
+					<template v-else-if="item.classStartTime && item.classStartTime > sysTime">
+						<view class="class-warm">
+							<u-icon class="class-warm__icon" size="30" color="#FF3B30" name="error-circle-fill">
+							</u-icon>
+							<view class="class-warm__text">
+								<view class="date">班级有效期:{{
                     $method.timestampToTime(item.classStartTime, true, true)
                   }}
-                  -
-                  {{
+									-
+									{{
                     $method.timestampToTime(item.classEndTime, true, true)
-                  }}</view
-                >
-                <view class="state">班级状态:未到学习时间</view>
-                <!-- <view class="state"
+                  }}
+								</view>
+								<view class="state">班级状态:未到学习时间</view>
+								<!-- <view class="state"
                   >班级状态:未到学习时间,有疑问请联系
                   <text @click="call">020-87085982</text></view
                 > -->
-              </view>
-            </view>
-          </template>
+							</view>
+						</view>
+					</template>
 
-          <!-- 在班级有效期之间或者没有班级有效期 -->
-          <template v-else>
-            <view
-              class="class-warm"
-              v-if="
+					<!-- 在班级有效期之间或者没有班级有效期 -->
+					<template v-else>
+						<view class="class-warm" v-if="
                 item.gradeId != 0 &&
                 item.gradeStatus == 1 &&
                 item.classStatus != null
-              "
-            >
-              <view class="class-warm__text">
-                <view class="date">
-                  班级状态:
-                  <text v-if="item.classStatus == 1">已开班</text>
-                  <text v-if="item.classStatus == 0">未开班</text>
-                </view>
-                <view class="state" v-if="item.classStatus == 0"
-                  >教务处正在为您开通班级,请耐心等待</view
-                >
-                <view
-                  class="state"
-                  v-if="
+              ">
+							<view class="class-warm__text">
+								<view class="date">
+									班级状态:
+									<text v-if="item.classStatus == 1">已开班</text>
+									<text v-if="item.classStatus == 0">未开班</text>
+								</view>
+								<view class="state" v-if="item.classStatus == 0">教务处正在为您开通班级,请耐心等待</view>
+								<view class="state" v-if="
                     item.classStatus == 1 &&
                     item.classStartTime &&
                     item.classEndTime
-                  "
-                >
-                  班级有效期:{{
+                  ">
+									班级有效期:{{
                     $method.timestampToTime(item.classStartTime, true, true)
                   }}-{{
                     $method.timestampToTime(item.classEndTime, true, true)
                   }}
-                </view>
-              </view>
-            </view>
-            <!-- 学时审核状态不可审核 -->
-            <template v-if="item.periodStatus == -1 || item.periodStatus == 2">
-              <view
-                class="class-warm"
-                v-if="item.classStatus == 1 || item.classStatus === null"
-              >
-                <view class="class-warm__text">
-                  <view class="date">
-                    <template
-                      v-if="
+								</view>
+							</view>
+						</view>
+						<!-- 学时审核状态不可审核 -->
+						<template v-if="item.periodStatus == -1 || item.periodStatus == 2">
+							<view class="class-warm" v-if="item.classStatus == 1 || item.classStatus === null">
+								<view class="class-warm__text">
+									<view class="date">
+										<template v-if="
                         sysTime >= item.serviceStartTime &&
                         sysTime <= item.serviceEndTime
-                      "
-                    >
-                      学习状态:
-                      <text v-if="item.stuAllNum + item.recordNum == 0"
-                        >未学习</text
-                      >
-                      <text
-                        v-else-if="
+                      ">
+											学习状态:
+											<text v-if="item.stuAllNum + item.recordNum == 0">未学习</text>
+											<text v-else-if="
                           item.stuAllNum + item.recordNum > 0 &&
                           item.stuAllNum + item.recordNum <
                             item.secAllNum + item.examNum
-                        "
-                        >学习中</text
-                      >
-                      <text
-                        v-else-if="
+                        ">学习中</text>
+											<text v-else-if="
                           item.stuAllNum + item.recordNum >=
                           item.secAllNum + item.examNum
-                        "
-                        >已学完</text
-                      >
-                    </template>
-                    <template v-else>
-                      <template v-if="item.serviceStartTime"
-                        >已过学习服务期,不可以学习了哦!</template
-                      >
-                    </template>
-                  </view>
-                </view>
-              </view>
+                        ">已学完</text>
+										</template>
+										<template v-else>
+											<template v-if="item.serviceStartTime">已过学习服务期,不可以学习了哦!</template>
+										</template>
+									</view>
+								</view>
+							</view>
 
-              <!-- <view class="class-warm" v-if="item.profileTpStatus == 1">
+							<!-- <view class="class-warm" v-if="item.profileTpStatus == 1">
 								<view class="class-warm__text">
 									<view class="date">
 										资料审核状态:
@@ -205,37 +152,29 @@
 									</view>
 								</view>
 							</view> -->
-            </template>
+						</template>
 
-            <!-- 学时审核状态可以审核 -->
-            <template v-if="item.periodStatus != -1">
-              <view class="class-warm">
-                <view class="class-warm__text">
-                  <view class="date">
-                    <text v-if="item.periodStatus == 0"
-                      >机构审核:学时审核不通过</text
-                    >
-                    <!-- <text v-else-if="item.periodStatus == 2">学时待审核</text> -->
-                    <text v-else-if="item.periodStatus == 3">学时审核中</text>
-                    <text v-else-if="item.periodStatus == 1">
-                      <text v-if="item.periodPlush > 0"
-                        >学时已上报信息中心</text
-                      >
-                      <text v-else>机构审核:学时审核通过</text>
-                    </text>
-                  </view>
-                </view>
-              </view>
+						<!-- 学时审核状态可以审核 -->
+						<template v-if="item.periodStatus != -1">
+							<view class="class-warm">
+								<view class="class-warm__text">
+									<view class="date">
+										<text v-if="item.periodStatus == 0">机构审核:学时审核不通过</text>
+										<!-- <text v-else-if="item.periodStatus == 2">学时待审核</text> -->
+										<text v-else-if="item.periodStatus == 3">学时审核中</text>
+										<text v-else-if="item.periodStatus == 1">
+											<text v-if="item.periodPlush > 0">学时已上报信息中心</text>
+											<text v-else>机构审核:学时审核通过</text>
+										</text>
+									</view>
+								</view>
+							</view>
 
-              <view
-                class="class-warm"
-                v-if="item.subscribeId != null && item.periodStatus == 1"
-              >
-                <view class="class-warm__text">
-                  <view class="date">
-                    <view v-if="item.subExamStatus === null">待预约考试</view>
-                    <view
-                      v-else-if="
+							<view class="class-warm" v-if="item.subscribeId != null && item.periodStatus == 1">
+								<view class="class-warm__text">
+									<view class="date">
+										<view v-if="item.subExamStatus === null">待预约考试</view>
+										<view v-else-if="
                         item.subExamStatus === 0 &&
                         sysTime <
                           $method.TimeTotimestamp(
@@ -246,10 +185,9 @@
                               ' ' +
                               item.subApplySiteStartTime
                           )
-                      "
-                    >
-                      待考试,考试时间:
-                      {{
+                      ">
+											待考试,考试时间:
+											{{
                         $method.timestampToTime(
                           item.subApplySiteExamTime,
                           true
@@ -257,8 +195,8 @@
                         " " +
                         item.subApplySiteStartTime
                       }}
-                      -
-                      {{
+											-
+											{{
                         $method.timestampToTime(
                           item.subApplySiteExamTime,
                           true
@@ -266,41 +204,28 @@
                         " " +
                         item.subApplySiteEndTime
                       }}
-                    </view>
-                    <view v-else-if="item.subExamStatus === 0"
-                      >待出考试结果</view
-                    >
-                    <view v-else-if="item.subExamStatus === 1">
-                      <text v-if="item.subResult === null">待出考试结果</text>
-                      <text v-if="item.subResult === 0"
-                        >考试结果:不通过,需补考</text
-                      >
-                      <text v-else-if="item.subResult === 1"
-                        >考试结果:通过,考试成绩为{{
+										</view>
+										<view v-else-if="item.subExamStatus === 0">待出考试结果</view>
+										<view v-else-if="item.subExamStatus === 1">
+											<text v-if="item.subResult === null">待出考试结果</text>
+											<text v-if="item.subResult === 0">考试结果:不通过,需补考</text>
+											<text v-else-if="item.subResult === 1">考试结果:通过,考试成绩为{{
                           item.subPerformance
-                        }}</text
-                      >
-                    </view>
-                    <view v-else-if="item.subExamStatus === 2"
-                      >缺考,无成绩,需补考</view
-                    >
-                    <view v-else-if="item.subExamStatus === 3"
-                      >作弊,无成绩,需补考</view
-                    >
-                    <view v-else-if="item.subExamStatus === 4"
-                      >替考,无成绩,需补考</view
-                    >
-                  </view>
-                </view>
-              </view>
-            </template>
-          </template>
-        </template>
-      </view>
+                        }}</text>
+										</view>
+										<view v-else-if="item.subExamStatus === 2">缺考,无成绩,需补考</view>
+										<view v-else-if="item.subExamStatus === 3">作弊,无成绩,需补考</view>
+										<view v-else-if="item.subExamStatus === 4">替考,无成绩,需补考</view>
+									</view>
+								</view>
+							</view>
+						</template>
+					</template>
+				</template>
+			</view>
 
-      <view class="bottomBox">
-        <template
-          v-if="
+			<view class="bottomBox">
+				<template v-if="
             item.gradeStatus == 1 &&
             item.status == 1 &&
             item.serviceEndTime > sysTime &&
@@ -309,38 +234,31 @@
             item.classEndTime < sysTime &&
             (item.periodStatus == 0 || item.periodStatus == -1) &&
             item.studyCount > 0
-          "
-        >
-          <view class="restart" @click.stop="selectClass(item, index)">
-            选班重学
-          </view>
-        </template>
+          ">
+					<view class="restart" @click.stop="selectClass(item, index)">
+						选班重学
+					</view>
+				</template>
 
-        <template v-else>
-          <view class="content_box">
-            <image src="/static/icon/wk_icon3.png" class="wk_icon"></image>
-            学习进度:{{ item.stuAllNum + item.recordNum }}/{{
+				<template v-else>
+					<view class="content_box">
+						<image src="/static/icon/wk_icon3.png" class="wk_icon"></image>
+						学习进度:{{ item.stuAllNum + item.recordNum }}/{{
               item.secAllNum + item.examNum
             }}
-          </view>
-          <view class="box_progress">
-            <view style="width: 60%">
-              <u-line-progress
-                :showText="false"
-                height="22"
-                active-color="#ff9900"
-                :show-percent="false"
-                :percent="
+					</view>
+					<view class="box_progress">
+						<view style="width: 60%">
+							<u-line-progress :showText="false" height="22" active-color="#ff9900" :show-percent="false"
+								:percent="
                   ((item.stuAllNum + item.recordNum) /
                     (item.secAllNum + item.examNum)) *
                   100
-                "
-              ></u-line-progress>
-            </view>
+                "></u-line-progress>
+						</view>
 
-            <view>
-              <u-button
-                :class="{
+						<view>
+							<u-button :class="{
                   disabled:
                     (item.serviceStartTime &&
                       (sysTime <= item.serviceStartTime ||
@@ -351,20 +269,12 @@
                     item.classStatus == 0 ||
                     (item.learningStatus == 3 &&
                       sysTime < item.learningTimeStart),
-                }"
-                type="warning"
-                size="mini"
-                @click.stop="studyIn(item.goodsId, item.gradeId, item, index)"
-              >
-                进入学习</u-button
-              >
-            </view>
-          </view>
-          <template v-for="(appoint, appointIndex) in item.examApplyGoodsList">
-            <view
-              class="box_progress"
-              :key="appointIndex"
-              v-if="
+                }" type="warning" size="mini" @click.stop="studyIn(item.goodsId, item.gradeId, item, index)">
+								进入学习</u-button>
+						</view>
+					</view>
+					<template v-for="(appoint, appointIndex) in item.examApplyGoodsList">
+						<view class="box_progress" :key="appointIndex" v-if="
                 item.applyStatus === 1 &&
                 !(
                   sysTime <= item.serviceStartTime ||
@@ -375,25 +285,18 @@
                   item.classStatus == 0 ||
                   (item.learningStatus == 3 && sysTime < item.learningTimeStart)
                 )
-              "
-            >
-              <view style="flex: 1; margin-right: 10rpx">
-                <text style="color: #333333">{{ appoint.applyName }}</text>
-              </view>
-              <view>
-                <u-button
-                  :plain="true"
-                  type="primary"
-                  size="mini"
-                  @click.stop="appointment(item, appoint)"
-                  >预约考试
-                </u-button>
-              </view>
-            </view>
-          </template>
-          <view
-            class="box_progress"
-            v-if="
+              ">
+							<view style="flex: 1; margin-right: 10rpx">
+								<text style="color: #333333">{{ appoint.applyName }}</text>
+							</view>
+							<view>
+								<u-button :plain="true" type="primary" size="mini"
+									@click.stop="appointment(item, appoint)">预约考试
+								</u-button>
+							</view>
+						</view>
+					</template>
+					<view class="box_progress" v-if="
               item.beforeStatus === 1 &&
               !(
                 sysTime <= item.serviceStartTime ||
@@ -404,794 +307,764 @@
                 item.classStatus == 0 ||
                 (item.learningStatus == 3 && sysTime < item.learningTimeStart)
               )
-            "
-          >
-            <view style="flex: 1; margin-right: 10rpx">
-              <text style="color: #2979ff">{{ item.beforeName }}</text>
-            </view>
-            <view>
-              <u-button
-                type="primary"
-                size="mini"
-                @click="appBeforeAddress(item.goodsId, item)"
-                >进入刷题</u-button
-              >
-            </view>
-          </view>
-        </template>
-      </view>
-    </view>
+            ">
+						<view style="flex: 1; margin-right: 10rpx">
+							<text style="color: #2979ff">{{ item.beforeName }}</text>
+						</view>
+						<view>
+							<u-button type="primary" size="mini"
+								@click="appBeforeAddress(item.goodsId, item)">进入刷题</u-button>
+						</view>
+					</view>
+				</template>
+			</view>
+		</view>
 
-    <view v-if="goodsList.length == 0">
-      <u-empty text="暂无网课" margin-top="500" mode="list"></u-empty>
-    </view>
-    <u-popup
-      v-model="selectClassModal"
-      @close="gradeValue = -1"
-      mode="bottom"
-      border-radius="40"
-    >
-      <view class="popup_box">
-        <view style="margin-bottom: 20rpx">
-          <view class="line1"></view>
-          <view class="grade">选择班级1</view>
-        </view>
-        <u-line color="#D6D6DB" />
-        <view>
-          <scroll-view scroll-y="true" style="height: 500rpx">
-            <view>
-              <u-radio-group v-model="gradeValue" @change="radioGroupChange">
-                <view v-for="(item, index) in gradeList" :key="index">
-                  <view
-                    style="display: flex; align-items: center; padding: 20rpx"
-                  >
-                    <view>
-                      <u-radio
-                        shape="circle"
-                        :name="index"
-                        :disabled="
+		<view v-if="goodsList.length == 0">
+			<u-empty text="暂无网课" margin-top="500" mode="list"></u-empty>
+		</view>
+		<u-popup v-model="selectClassModal" @close="gradeValue = -1" mode="bottom" border-radius="40">
+			<view class="popup_box">
+				<view style="margin-bottom: 20rpx">
+					<view class="line1"></view>
+					<view class="grade">选择班级1</view>
+				</view>
+				<u-line color="#D6D6DB" />
+				<view>
+					<scroll-view scroll-y="true" style="height: 500rpx">
+						<view>
+							<u-radio-group v-model="gradeValue" @change="radioGroupChange">
+								<view v-for="(item, index) in gradeList" :key="index">
+									<view style="display: flex; align-items: center; padding: 20rpx">
+										<view>
+											<u-radio shape="circle" :name="index" :disabled="
                           item.studentNum > 0 &&
                           item.studentNum == item.studentUpper
-                        "
-                      >
-                        <view
-                          :class="
+                        ">
+												<view :class="
                             item.checked ? 'white-box blue-box' : 'white-box'
-                          "
-                        >
-                          <view>
-                            <view class="blackTxt">{{ item.className }}</view>
-                            <Class-time-tip :classInfo="item"></Class-time-tip>
-                          </view>
-                        </view>
-                      </u-radio>
-                    </view>
-                  </view>
-                </view>
-              </u-radio-group>
-            </view>
-          </scroll-view>
-        </view>
-        <view class="confrim-btn">
-          <view class="okBtn" @click="okPopup()">确定</view>
-        </view>
-      </view>
-    </u-popup>
-    <u-modal
-      v-model="showMark"
-      title="提示"
-      @confirm="markConfirm"
-      confirm-text="复制学习网址"
-      :show-cancel-button="true"
-      cancel-text="关闭"
-    >
-      <view class="slot-content">
-        <view>您的学习账号已经开通,请按照步骤操作,进行学习。</view>
-        <view>1.复制学习地址:{{ markContent }}</view>
-        <view>2.在【浏览器中】打开复制的学习网址</view>
-        <view>3.打开学习网址后,选择【个人用户】进行登录</view>
-        <view>(1)账号:您个人的身份证号码</view>
-        <view>(2)密码:身份证号码,再加111111</view>
-      </view>
-    </u-modal>
+                          ">
+													<view>
+														<view class="blackTxt">{{ item.className }}</view>
+														<Class-time-tip :classInfo="item"></Class-time-tip>
+													</view>
+												</view>
+											</u-radio>
+										</view>
+									</view>
+								</view>
+							</u-radio-group>
+						</view>
+					</scroll-view>
+				</view>
+				<view class="confrim-btn">
+					<view class="okBtn" @click="okPopup()">确定</view>
+				</view>
+			</view>
+		</u-popup>
+		<u-modal v-model="showMark" title="提示" @confirm="markConfirm" confirm-text="复制学习网址" :show-cancel-button="true"
+			cancel-text="关闭">
+			<view class="slot-content">
+				<view>您的学习账号已经开通,请按照步骤操作,进行学习。</view>
+				<view>1.复制学习地址:{{ markContent }}</view>
+				<view>2.在【浏览器中】打开复制的学习网址</view>
+				<view>3.打开学习网址后,选择【个人用户】进行登录</view>
+				<view>(1)账号:您个人的身份证号码</view>
+				<view>(2)密码:身份证号码,再加111111</view>
+			</view>
+		</u-modal>
 
-    <u-modal
-      v-model="showUserConfirmInfo"
-      @confirm="confirmUserConfirm"
-      ref="uModal"
-      :async-close="true"
-      @cancel="cancelUserConfirm"
-      :confirm-text="
+		<u-modal v-model="showUserConfirmInfo" @confirm="confirmUserConfirm" ref="uModal" :async-close="true"
+			@cancel="cancelUserConfirm" :confirm-text="
         '确认' + (confirmCount > 0 ? '(' + confirmCount + ')' : '')
-      "
-      :confirm-color="confirmCount > 0 ? '#999' : '#2979ff'"
-      class="confirm-modal"
-      title="实名验证确认"
-      cancel="取消"
-      :show-cancel-button="true"
-    >
-      <view class="slot-content">
-        <view class="content">
-          <!-- ,立刻联系020-38946666 -->
-          为避免个人信息不正确导致您的学习时长无效,请认真核对以下信息是否正确,如信息有误请取消当前操作。
-          <view class="msg-list">
-            <view class="item">
-              <text class="item__left">姓名:</text>
-              <text class="item__right">{{ userInfo.realname }}</text>
-            </view>
-            <view class="item">
-              <text class="item__left">手机号:</text>
-              <text class="item__right">{{ userInfo.telphone }}</text>
-            </view>
-            <view class="item">
-              <text class="item__left">身份号:</text>
-              <text class="item__right">{{ userInfo.idCard }}</text>
-            </view>
-            <view class="item">
-              <u-checkbox v-model="confirmChecked" :label-disabled="false"
-                >确认个人信息无误</u-checkbox
-              >
-            </view>
-          </view>
-        </view>
-      </view>
-    </u-modal>
-  </view>
+      " :confirm-color="confirmCount > 0 ? '#999' : '#2979ff'" class="confirm-modal" title="实名验证确认" cancel="取消"
+			:show-cancel-button="true">
+			<view class="slot-content">
+				<view class="content">
+					<!-- ,立刻联系020-38946666 -->
+					为避免个人信息不正确导致您的学习时长无效,请认真核对以下信息是否正确,如信息有误请取消当前操作。
+					<view class="msg-list">
+						<view class="item">
+							<text class="item__left">姓名:</text>
+							<text class="item__right">{{ userInfo.realname }}</text>
+						</view>
+						<view class="item">
+							<text class="item__left">手机号:</text>
+							<text class="item__right">{{ userInfo.telphone }}</text>
+						</view>
+						<view class="item">
+							<text class="item__left">身份号:</text>
+							<text class="item__right">{{ userInfo.idCard }}</text>
+						</view>
+						<view class="item">
+							<u-checkbox v-model="confirmChecked" :label-disabled="false">确认个人信息无误</u-checkbox>
+						</view>
+					</view>
+				</view>
+			</view>
+		</u-modal>
+	</view>
 </template>
 
 <script>
-import { mapGetters, mapActions } from "vuex";
-import ClassTimeTip from "../../components/common/ClassTimeTip.vue";
-export default {
-  computed: {
-    ...mapGetters(["userInfo"]),
-  },
-  data() {
-    return {
-      activeItem: {},
-      confirmTimer: null,
-      confirmCount: 10,
-      confirmChecked: false,
-      showUserConfirmInfo: false,
-      showMark: false,
-      list: [1, 2, 3],
-      goodsList: [],
-      selectClassModal: false,
-      gradeList: [],
-      gradeValue: -1,
-      param: {
-        pageNum: 1,
-        pageSize: 10,
-      },
-      total: 0,
-      sysTime: 0,
-      itemIndex: "",
-      selectItem: {},
-    };
-  },
-  onLoad(option) {
-    // this.sysTime = +this.$method.timest();
-    this.courseGoodsList();
-  },
-  async onShow() {
-    this.getUserInfo();
-    if (this.itemIndex !== "") {
-      this.refreshByIndex();
-    }
-    await this.commonSystemTime();
-    this.sysTime = +this.$method.timest();
-  },
-  onReachBottom() {
-    if (this.goodsList.length < this.total) {
-      this.param.pageNum++;
-      this.courseGoodsList();
-    }
-  },
-  methods: {
-    ...mapActions(["getUserInfo"]),
-    /**
-     * 复制网址
-     */
-    markConfirm() {
-      uni.setClipboardData({
-        data: this.markContent,
-        success: function () {
-          console.log("success");
-        },
-      });
-    },
-    /**
-     * 返回刷新之前进入的课程数据
-     */
-    refreshByIndex() {
-      let self = this;
-      this.$api
-        .courseGoodsList({
-          pageNum: this.itemIndex + 1,
-          pageSize: 1,
-        })
-        .then((res) => {
-          if (res.data.code == 200) {
-            this.$set(this.goodsList, this.itemIndex, res.data.rows[0]);
-          }
-        });
-    },
-    commonSystemTime() {
-      return new Promise((resolve) => {
-        this.$api.commonSystemTime().then((res) => {
-          this.sysTime = res.data.data;
-        });
-      });
-    },
-    selectClass(item, index) {
-      console.log(item);
-      this.itemIndex = index;
-      this.selectItem = item;
-      this.selectClassModal = true;
-      this.goodsGradeList(item.goodsId);
-    },
-    radioGroupChange(e) {
-      console.log(e);
-    },
-    userConfirmInfoDetail() {
-      return new Promise((resolve) => {
-        this.$api
-          .userConfirmInfoDetail({
-            orderGoodsId: this.activeItem.orderGoodsId,
-          })
-          .then((res) => {
-            if (!res.data.data) {
-              clearInterval(this.confirmTimer);
-              this.confirmCount = 10;
-              this.showUserConfirmInfo = true;
-              this.confirmTimer = setInterval(() => {
-                if (this.confirmCount > 0) {
-                  this.confirmCount--;
-                } else {
-                  clearInterval(this.confirmTimer);
-                }
-              }, 1000);
-            } else {
-              if (res.data.data.pushInfo) {
-                resolve(true);
-              } else {
-                // ,请联系020-87085982
-                uni.showModal({
-                  showCancel: false,
-                  title: "提示",
-                  content: "开通信息推送不成功,无法进入学习!",
-                });
-                resolve(false);
-              }
-            }
-          });
-      });
-    },
-    confirmUserConfirm() {
-      this.$refs.uModal.clearLoading();
-      if (this.confirmCount <= 0) {
-        if (this.confirmChecked) {
-          let infoJson = {
-            realname: this.userInfo.realname,
-            idCard: this.userInfo.idCard,
-            telphone: this.userInfo.telphone,
-          };
-          this.$api
-            .userConfirminfo({
-              orderGoodsId: this.activeItem.orderGoodsId,
-              infoJson: JSON.stringify(infoJson),
-            })
-            .then((res) => {
-              if (res.data.data.pushInfo) {
-                uni.showToast({
-                  icon: "none",
-                  title: "提交成功",
-                });
-              } else {
-                // ,请联系020-87085982
-                uni.showModal({
-                  showCancel: false,
-                  title: "提示",
-                  content: "开通信息推送不成功,无法进入学习!",
-                });
-              }
-              this.showUserConfirmInfo = false;
-            });
-        } else {
-          uni.showToast({
-            icon: "none",
-            title: "请勾选确认个人信息无误",
-          });
-        }
-      } else {
-        return;
-      }
-    },
+	import {
+		mapGetters,
+		mapActions
+	} from "vuex";
+	import ClassTimeTip from "../../components/common/ClassTimeTip.vue";
+	export default {
+		computed: {
+			...mapGetters(["userInfo"]),
+		},
+		data() {
+			return {
+				activeItem: {},
+				confirmTimer: null,
+				confirmCount: 10,
+				confirmChecked: false,
+				showUserConfirmInfo: false,
+				showMark: false,
+				list: [1, 2, 3],
+				goodsList: [],
+				selectClassModal: false,
+				gradeList: [],
+				gradeValue: -1,
+				param: {
+					pageNum: 1,
+					pageSize: 10,
+				},
+				total: 0,
+				sysTime: 0,
+				itemIndex: "",
+				selectItem: {},
+			};
+		},
+		onLoad(option) {
+			// this.sysTime = +this.$method.timest();
+			this.courseGoodsList();
+		},
+		async onShow() {
+			this.getUserInfo();
+			if (this.itemIndex !== "") {
+				this.refreshByIndex();
+			}
+			await this.commonSystemTime();
+			this.sysTime = +this.$method.timest();
+		},
+		onReachBottom() {
+			if (this.goodsList.length < this.total) {
+				this.param.pageNum++;
+				this.courseGoodsList();
+			}
+		},
+		methods: {
+			...mapActions(["getUserInfo"]),
+			/**
+			 * 复制网址
+			 */
+			markConfirm() {
+				uni.setClipboardData({
+					data: this.markContent,
+					success: function() {
+						console.log("success");
+					},
+				});
+			},
+			/**
+			 * 返回刷新之前进入的课程数据
+			 */
+			refreshByIndex() {
+				let self = this;
+				this.$api
+					.courseGoodsList({
+						pageNum: this.itemIndex + 1,
+						pageSize: 1,
+					})
+					.then((res) => {
+						if (res.data.code == 200) {
+							this.$set(this.goodsList, this.itemIndex, res.data.rows[0]);
+						}
+					});
+			},
+			commonSystemTime() {
+				return new Promise((resolve) => {
+					this.$api.commonSystemTime().then((res) => {
+						this.sysTime = res.data.data;
+					});
+				});
+			},
+			selectClass(item, index) {
+				console.log(item);
+				this.itemIndex = index;
+				this.selectItem = item;
+				this.selectClassModal = true;
+				this.goodsGradeList(item.goodsId);
+			},
+			radioGroupChange(e) {
+				console.log(e);
+			},
+			userConfirmInfoDetail() {
+				return new Promise((resolve) => {
+					this.$api
+						.userConfirmInfoDetail({
+							orderGoodsId: this.activeItem.orderGoodsId,
+						})
+						.then((res) => {
+							if (!res.data.data) {
+								clearInterval(this.confirmTimer);
+								this.confirmCount = 10;
+								this.showUserConfirmInfo = true;
+								this.confirmTimer = setInterval(() => {
+									if (this.confirmCount > 0) {
+										this.confirmCount--;
+									} else {
+										clearInterval(this.confirmTimer);
+									}
+								}, 1000);
+							} else {
+								if (res.data.data.pushInfo) {
+									resolve(true);
+								} else {
+									// ,请联系020-87085982
+									uni.showModal({
+										showCancel: false,
+										title: "提示",
+										content: "开通信息推送不成功,无法进入学习!",
+									});
+									resolve(false);
+								}
+							}
+						});
+				});
+			},
+			confirmUserConfirm() {
+				this.$refs.uModal.clearLoading();
+				if (this.confirmCount <= 0) {
+					if (this.confirmChecked) {
+						let infoJson = {
+							realname: this.userInfo.realname,
+							idCard: this.userInfo.idCard,
+							telphone: this.userInfo.telphone,
+						};
+						this.$api
+							.userConfirminfo({
+								orderGoodsId: this.activeItem.orderGoodsId,
+								infoJson: JSON.stringify(infoJson),
+							})
+							.then((res) => {
+								if (res.data.data.pushInfo) {
+									uni.showToast({
+										icon: "none",
+										title: "提交成功",
+									});
+								} else {
+									// ,请联系020-87085982
+									uni.showModal({
+										showCancel: false,
+										title: "提示",
+										content: "开通信息推送不成功,无法进入学习!",
+									});
+								}
+								this.showUserConfirmInfo = false;
+							});
+					} else {
+						uni.showToast({
+							icon: "none",
+							title: "请勾选确认个人信息无误",
+						});
+					}
+				} else {
+					return;
+				}
+			},
 
-    cancelUserConfirm() {
-      clearInterval(this.confirmTimer);
-    },
-    goodsGradeList(id) {
-      let self = this;
-      this.$api
-        .goodsGradeList({
-          goodsId: id,
-        })
-        .then((res) => {
-          if (res.data.code == 200) {
-            self.gradeList = res.data.rows;
-            if (self.gradeList.length == 0) {
-              let item = {
-                className: "系统分班",
-                gradeId: 0,
-              };
-              self.gradeList.push(item);
-            } else {
-              let isGradeFull = self.gradeList.every(
-                (item) =>
-                  item.studentNum > 0 && item.studentNum == item.studentUpper
-              );
-              //所有班级都满了
-              if (isGradeFull) {
-                let item = {
-                  className: "系统分班",
-                  gradeId: 0,
-                };
-                self.gradeList.unshift(item);
-              }
-            }
-          }
-        });
-    },
-    appBeforeAddress(goodsId, item) {
-      this.$api
-        .appBeforeAddress({
-          // goodsId,
-          orderGoodsId: item.orderGoodsId,
-        })
-        .then((res) => {
-          if (res.data.code == 200) {
-            uni.navigateToMiniProgram({
-              appId: res.data.data.url,
-              success(res) {
-                // 打开成功
-              },
-            });
-          } else {
-            uni.showModal({
-              title: "提示",
-              content: res.data.msg,
-              showCancel: false,
-            });
-          }
-        });
-    },
-    courseGoodsList() {
-      let self = this;
-      // /course/goodsList 查询用户拥有的商品
-      this.$api.courseGoodsList(this.param).then((res) => {
-        if (res.data.code == 200) {
-          self.goodsList.push.apply(self.goodsList, res.data.rows);
-          self.total = res.data.total;
-        }
-      });
-    },
-    async studyIn(v, i, item, index) {
-      this.activeItem = item;
-      if (item.interfaceAccountId > 0) {
-        //学习账号已开通
+			cancelUserConfirm() {
+				clearInterval(this.confirmTimer);
+			},
+			goodsGradeList(id) {
+				let self = this;
+				this.$api
+					.goodsGradeList({
+						goodsId: id,
+					})
+					.then((res) => {
+						if (res.data.code == 200) {
+							self.gradeList = res.data.rows;
+							if (self.gradeList.length == 0) {
+								let item = {
+									className: "系统分班",
+									gradeId: 0,
+								};
+								self.gradeList.push(item);
+							} else {
+								let isGradeFull = self.gradeList.every(
+									(item) =>
+									item.studentNum > 0 && item.studentNum == item.studentUpper
+								);
+								//所有班级都满了
+								if (isGradeFull) {
+									let item = {
+										className: "系统分班",
+										gradeId: 0,
+									};
+									self.gradeList.unshift(item);
+								}
+							}
+						}
+					});
+			},
+			appBeforeAddress(goodsId, item) {
+				this.$api
+					.appBeforeAddress({
+						// goodsId,
+						orderGoodsId: item.orderGoodsId,
+					})
+					.then((res) => {
+						if (res.data.code == 200) {
+							uni.navigateToMiniProgram({
+								appId: res.data.data.url,
+								success(res) {
+									// 打开成功
+								},
+							});
+						} else {
+							uni.showModal({
+								title: "提示",
+								content: res.data.msg,
+								showCancel: false,
+							});
+						}
+					});
+			},
+			courseGoodsList() {
+				let self = this;
+				// /course/goodsList 查询用户拥有的商品
+				this.$api.courseGoodsList(this.param).then((res) => {
+					if (res.data.code == 200) {
+						self.goodsList.push.apply(self.goodsList, res.data.rows);
+						self.total = res.data.total;
+					}
+				});
+			},
+			async studyIn(v, i, item, index) {
+				this.activeItem = item;
+				if (item.interfaceAccountId > 0) {
+					//学习账号已开通
 
-        if (item.learnStatus > 0) {
-          //跳转第三方h5
-          // this.showMark = true;
-          uni.navigateTo({
-            url: `/pages3/polyv/detail?goodsId=${item.goodsId}&orderGoodsId=${item.orderGoodsId}&isOther=1`,
-          });
-          return;
-          // uni.navigateTo({
-          // 	url:'/pages5/webview/index?url='+item.officialLearningUrl
-          // })
-          // return;
-        } else {
-          // ,请联系020-87085982
-          uni.showModal({
-            showCancel: false,
-            content: "您的学习账号未开通,请稍后再尝试,有疑问!",
-          });
-          return;
-        }
+					if (item.learnStatus > 0) {
+						//跳转第三方h5
+						// this.showMark = true;
+						uni.navigateTo({
+						  url: `/pages3/polyv/detail?goodsId=${item.goodsId}&orderGoodsId=${item.orderGoodsId}&isOther=1`,
+						});
+						return;
+						// uni.navigateTo({
+						// 	url:'/pages5/webview/index?url='+item.officialLearningUrl
+						// })
+						// return;
+					} else {
+						// ,请联系020-87085982
+						uni.showModal({
+							showCancel: false,
+							content: "您的学习账号未开通,请稍后再尝试,有疑问!",
+						});
+						return;
+					}
 
-        return;
-      }
+					return;
+				}
 
-      if (
-        item.serviceStartTime &&
-        (this.sysTime <= item.serviceStartTime ||
-          this.sysTime >= item.serviceEndTime)
-      ) {
-        uni.showToast({
-          icon: "none",
-          title: "不在学习服务期,不能进入学习",
-        });
-        return;
-      }
+				if (
+					item.serviceStartTime &&
+					(this.sysTime <= item.serviceStartTime ||
+						this.sysTime >= item.serviceEndTime)
+				) {
+					uni.showToast({
+						icon: "none",
+						title: "不在学习服务期,不能进入学习",
+					});
+					return;
+				}
 
-      if (
-        (item.classStartTime && this.sysTime <= item.classStartTime) ||
-        (item.classEndTime && this.sysTime >= item.classEndTime)
-      ) {
-        uni.showToast({
-          icon: "none",
-          title: "不在班级有效期,不能进入学习",
-        });
-        return;
-      }
+				if (
+					(item.classStartTime && this.sysTime <= item.classStartTime) ||
+					(item.classEndTime && this.sysTime >= item.classEndTime)
+				) {
+					uni.showToast({
+						icon: "none",
+						title: "不在班级有效期,不能进入学习",
+					});
+					return;
+				}
 
-      if (item.learningStatus == 2) {
-        uni.showToast({
-          icon: "none",
-          title: "开放学习时间待定,不能进入学习",
-        });
-        return;
-      }
+				if (item.learningStatus == 2) {
+					uni.showToast({
+						icon: "none",
+						title: "开放学习时间待定,不能进入学习",
+					});
+					return;
+				}
 
-      if (item.classStatus == 0) {
-        uni.showToast({
-          icon: "none",
-          title: "尚未开班,不能进入学习",
-        });
-        return;
-      }
-      console.log(this.sysTime, item.learningTimeStart);
-      console.log(this.sysTime < item.learningTimeStart);
-      if (item.learningStatus == 3 && this.sysTime < item.learningTimeStart) {
-        uni.showToast({
-          icon: "none",
-          title: "不在开放学习时间,不能进入学习",
-        });
-        return;
-      }
+				if (item.classStatus == 0) {
+					uni.showToast({
+						icon: "none",
+						title: "尚未开班,不能进入学习",
+					});
+					return;
+				}
+				console.log(this.sysTime, item.learningTimeStart);
+				console.log(this.sysTime < item.learningTimeStart);
+				if (item.learningStatus == 3 && this.sysTime < item.learningTimeStart) {
+					uni.showToast({
+						icon: "none",
+						title: "不在开放学习时间,不能进入学习",
+					});
+					return;
+				}
 
-      var confirmDetail = true;
-      if (item.educationName == "继续教育") {
-        if (
-          item.officialName &&
-          item.businessName == "二级" &&
-          item.projectName == "建造师"
-        ) {
-          confirmDetail = await this.userConfirmInfoDetail();
-        }
-      }
+				var confirmDetail = true;
+				if (item.educationName == "继续教育") {
+					if (
+						item.officialName &&
+						item.businessName == "二级" &&
+						item.projectName == "建造师"
+					) {
+						confirmDetail = await this.userConfirmInfoDetail();
+					}
+				}
 
-      if (!confirmDetail) {
-        return;
-      }
+				if (!confirmDetail) {
+					return;
+				}
 
-      // //内部系统
-      // if (item.interfacePushId > 0 && item.officialStatus != 1) {
-      // 	uni.showModal({
-      // 		showCancel: false,
-      // 		content: '机构正在为您报名中,请耐心等待,有疑问请联系020-87085982!'
-      // 	});
-      // 	return;
-      // }
+				// //内部系统
+				// if (item.interfacePushId > 0 && item.officialStatus != 1) {
+				// 	uni.showModal({
+				// 		showCancel: false,
+				// 		content: '机构正在为您报名中,请耐心等待,有疑问请联系020-87085982!'
+				// 	});
+				// 	return;
+				// }
 
-      this.itemIndex = index;
+				this.itemIndex = index;
 
-      if (
-        item.gradeStatus == 1 &&
-        item.status == 1 &&
-        item.serviceEndTime > this.sysTime &&
-        item.classEndTime &&
-        item.classEndTime < this.sysTime &&
-        (item.periodStatus == 0 || item.periodStatus == -1) &&
-        item.studyCount > 0
-      ) {
-        this.selectClass(item, index);
-        return;
-      }
+				if (
+					item.gradeStatus == 1 &&
+					item.status == 1 &&
+					item.serviceEndTime > this.sysTime &&
+					item.classEndTime &&
+					item.classEndTime < this.sysTime &&
+					(item.periodStatus == 0 || item.periodStatus == -1) &&
+					item.studyCount > 0
+				) {
+					this.selectClass(item, index);
+					return;
+				}
 
-      let rebuildStatus = await this.courseGoodsRebuildStatus(
-        item.goodsId,
-        item.gradeId
-      );
+				let rebuildStatus = await this.courseGoodsRebuildStatus(
+					item.goodsId,
+					item.gradeId
+				);
 
-      if (rebuildStatus == 0) {
-        this.$navTo.togo("/pages2/learn/details", {
-          gradeId: item.gradeId,
-          goodsId: item.goodsId,
-          orderGoodsId: item.orderGoodsId,
-        });
-        return;
-      }
+				if (rebuildStatus == 0) {
+					this.$navTo.togo("/pages2/learn/details", {
+						gradeId: item.gradeId,
+						goodsId: item.goodsId,
+						orderGoodsId: item.orderGoodsId,
+					});
+					return;
+				}
 
-      // if (item.educationName == '继续教育') {
-      this.$method.checkLock("jxjy").then((res) => {
-        //可以学习
-        if (item.courseNum == 1) {
-          this.$api
-            .courseCourseList({
-              pageNum: 1,
-              pageSize: 1,
-              goodsId: item.goodsId,
-              gradeId: item.gradeId,
-              orderGoodsId: item.orderGoodsId,
-            })
-            .then((res) => {
-              if (res.data.code == 200) {
-                uni.navigateTo({
-                  url: `/pages3/polyv/detail?id=${res.data.rows[0].courseId}&goodsId=${item.goodsId}&orderGoodsId=${item.orderGoodsId}`,
-                });
-              }
-            });
-          return;
-        }
-        this.$navTo.togo(
-          `/pages2/wd/course?id=${v}&gid=${i}&orderGoodsId=${item.orderGoodsId}`
-        );
-      });
-    },
-    /**
-     * @param {Object} goodsId 商品id
-     * 查询商品重修状态
-     */
-    courseGoodsRebuildStatus(goodsId, gradeId) {
-      return new Promise((resolve) => {
-        this.$api
-          .courseGoodsRebuildStatus({
-            goodsId: goodsId,
-            gradeId: gradeId,
-          })
-          .then((res) => {
-            resolve(res.data.data);
-          });
-      });
-    },
-    appointment(item, appoint) {
-      var data = {
-        goodsId: item.goodsId,
-        gradeId: item.gradeId,
-        applyId: appoint.applyId,
-        orderGoodsId: item.orderGoodsId,
-      };
-      this.$api.getApplysubscribe(data).then((res) => {
-        if (res.data.code === 500) {
-          uni.showModal({
-            showCancel: false,
-            content: res.data.msg,
-          });
-        }
-        if (res.data.code === 200) {
-          this.$navTo.togo("/pages2/appointment/index", {
-            goodsId: item.goodsId,
-            gradeId: item.gradeId,
-            orderGoodsId: item.orderGoodsId,
-            applyId: appoint.applyId,
-          });
-        }
-      });
-    },
-    okPopup() {
-      if (this.gradeValue == -1) {
-        uni.showToast({
-          icon: "none",
-          title: "请选择班级",
-        });
-        return;
-      }
-      this.$api
-        .changeGrade({
-          goodsId: this.selectItem.goodsId,
-          gradeId: this.gradeValue,
-          oldGradeId: this.selectItem.gradeId,
-          orderGoodsId: this.selectItem.orderGoodsId,
-          userId: this.selectItem.userId,
-        })
-        .then((res) => {
-          if (res.data.code == 200) {
-            if (this.itemIndex !== "") {
-              this.refreshByIndex();
-            }
-            this.selectClassModal = false;
-            uni.showToast({
-              title: "选班成功",
-            });
-          } else {
-            uni.showToast({
-              icon: "none",
-              title: res.data.msg,
-            });
-          }
-        });
-    },
-    call() {
-      uni.makePhoneCall({
-        phoneNumber: "020-87085982", //仅为示例
-      });
-    },
-  },
-  components: { ClassTimeTip },
-};
+				// if (item.educationName == '继续教育') {
+				this.$method.checkLock("jxjy").then((res) => {
+					//可以学习
+					if (item.courseNum == 1) {
+						this.$api
+							.courseCourseList({
+								pageNum: 1,
+								pageSize: 1,
+								goodsId: item.goodsId,
+								gradeId: item.gradeId,
+								orderGoodsId: item.orderGoodsId,
+							})
+							.then((res) => {
+								if (res.data.code == 200) {
+									uni.navigateTo({
+										url: `/pages3/polyv/detail?id=${res.data.rows[0].courseId}&goodsId=${item.goodsId}&orderGoodsId=${item.orderGoodsId}`,
+									});
+								}
+							});
+						return;
+					}
+					this.$navTo.togo(
+						`/pages2/wd/course?id=${v}&gid=${i}&orderGoodsId=${item.orderGoodsId}`
+					);
+				});
+			},
+			/**
+			 * @param {Object} goodsId 商品id
+			 * 查询商品重修状态
+			 */
+			courseGoodsRebuildStatus(goodsId, gradeId) {
+				return new Promise((resolve) => {
+					this.$api
+						.courseGoodsRebuildStatus({
+							goodsId: goodsId,
+							gradeId: gradeId,
+						})
+						.then((res) => {
+							resolve(res.data.data);
+						});
+				});
+			},
+			appointment(item, appoint) {
+				var data = {
+					goodsId: item.goodsId,
+					gradeId: item.gradeId,
+					applyId: appoint.applyId,
+					orderGoodsId: item.orderGoodsId,
+				};
+				this.$api.getApplysubscribe(data).then((res) => {
+					if (res.data.code === 500) {
+						uni.showModal({
+							showCancel: false,
+							content: res.data.msg,
+						});
+					}
+					if (res.data.code === 200) {
+						this.$navTo.togo("/pages2/appointment/index", {
+							goodsId: item.goodsId,
+							gradeId: item.gradeId,
+							orderGoodsId: item.orderGoodsId,
+							applyId: appoint.applyId,
+						});
+					}
+				});
+			},
+			okPopup() {
+				if (this.gradeValue == -1) {
+					uni.showToast({
+						icon: "none",
+						title: "请选择班级",
+					});
+					return;
+				}
+				this.$api
+					.changeGrade({
+						goodsId: this.selectItem.goodsId,
+						gradeId: this.gradeValue,
+						oldGradeId: this.selectItem.gradeId,
+						orderGoodsId: this.selectItem.orderGoodsId,
+						userId: this.selectItem.userId,
+					})
+					.then((res) => {
+						if (res.data.code == 200) {
+							if (this.itemIndex !== "") {
+								this.refreshByIndex();
+							}
+							this.selectClassModal = false;
+							uni.showToast({
+								title: "选班成功",
+							});
+						} else {
+							uni.showToast({
+								icon: "none",
+								title: res.data.msg,
+							});
+						}
+					});
+			},
+			call() {
+				uni.makePhoneCall({
+					phoneNumber: "020-87085982", //仅为示例
+				});
+			},
+		},
+		components: {
+			ClassTimeTip
+		},
+	};
 </script>
 <style>
-page {
-  background: #eaeef1;
-}
+	page {
+		background: #eaeef1;
+	}
 </style>
 <style scope lang="scss">
-.box_progress {
-  display: flex;
-  justify-content: space-between;
-  align-items: center;
-  margin-top: 20rpx;
+	.box_progress {
+		display: flex;
+		justify-content: space-between;
+		align-items: center;
+		margin-top: 20rpx;
 
-  .disabled {
-    opacity: 0.6;
-  }
-}
+		.disabled {
+			opacity: 0.6;
+		}
+	}
 
-.bottomBox {
-  background: #ffffff;
-  width: 94%;
-  border-bottom-left-radius: 24rpx;
-  border-bottom-right-radius: 24rpx;
-  margin: 0 auto;
-  padding: 20rpx;
+	.bottomBox {
+		background: #ffffff;
+		width: 94%;
+		border-bottom-left-radius: 24rpx;
+		border-bottom-right-radius: 24rpx;
+		margin: 0 auto;
+		padding: 20rpx;
 
-  .restart {
-    margin: 0 auto;
-    text-align: center;
-    line-height: 80rpx;
-    color: #fff;
-    font-size: 30rpx;
-    width: 440rpx;
-    height: 80rpx;
-    background: #ff0000;
-    border-radius: 40rpx 40rpx 40rpx 40rpx;
-  }
-}
+		.restart {
+			margin: 0 auto;
+			text-align: center;
+			line-height: 80rpx;
+			color: #fff;
+			font-size: 30rpx;
+			width: 440rpx;
+			height: 80rpx;
+			background: #ff0000;
+			border-radius: 40rpx 40rpx 40rpx 40rpx;
+		}
+	}
 
-.content_box {
-  font-size: 24rpx;
-  display: flex;
-  align-items: center;
-  color: #999999;
-  margin-top: 8rpx;
-}
+	.content_box {
+		font-size: 24rpx;
+		display: flex;
+		align-items: center;
+		color: #999999;
+		margin-top: 8rpx;
+	}
 
-.content {
-  color: #000000;
-  margin: 0 8rpx;
-}
+	.content {
+		color: #000000;
+		margin: 0 8rpx;
+	}
 
-.wk_icon {
-  width: 24rpx;
-  height: 24rpx;
-  margin-right: 8rpx;
-}
+	.wk_icon {
+		width: 24rpx;
+		height: 24rpx;
+		margin-right: 8rpx;
+	}
 
-.class {
-  margin-bottom: 30rpx;
+	.class {
+		margin-bottom: 30rpx;
 
-  .class_item {
-    width: 100%;
-    background: #ffffff;
-    box-shadow: 0rpx 10rpx 9rpx 1rpx rgba(165, 196, 239, 0.1);
-    border-radius: 24rpx;
-    padding: 20rpx;
-    z-index: 999;
-    position: relative;
+		.class_item {
+			width: 100%;
+			background: #ffffff;
+			box-shadow: 0rpx 10rpx 9rpx 1rpx rgba(165, 196, 239, 0.1);
+			border-radius: 24rpx;
+			padding: 20rpx;
+			z-index: 999;
+			position: relative;
 
-    .class_img {
-      height: 367rpx;
-      width: 100%;
-      border-radius: 24rpx;
-    }
+			.class_img {
+				height: 367rpx;
+				width: 100%;
+				border-radius: 24rpx;
+			}
 
-    .class_text {
-      padding: 0 20rpx;
+			.class_text {
+				padding: 0 20rpx;
 
-      .class_title {
-        color: #333333;
-        font-weight: bold;
-        font-size: 32rpx;
-      }
-    }
+				.class_title {
+					color: #333333;
+					font-weight: bold;
+					font-size: 32rpx;
+				}
+			}
 
-    .class-warm {
-      padding: 10rpx 20rpx;
-      display: flex;
-      align-items: flex-start;
+			.class-warm {
+				padding: 10rpx 20rpx;
+				display: flex;
+				align-items: flex-start;
 
-      &__icon {
-        margin-right: 10rpx;
-      }
+				&__icon {
+					margin-right: 10rpx;
+				}
 
-      &__text {
-        .date {
-          font-size: 24rpx;
-          font-weight: bold;
-          color: #ff3b30;
-        }
+				&__text {
+					.date {
+						font-size: 24rpx;
+						font-weight: bold;
+						color: #ff3b30;
+					}
 
-        .state {
-          margin-top: 15rpx;
-          font-size: 24rpx;
-          font-weight: bold;
-          color: #ff3b30;
-        }
-      }
-    }
-  }
-}
+					.state {
+						margin-top: 15rpx;
+						font-size: 24rpx;
+						font-weight: bold;
+						color: #ff3b30;
+					}
+				}
+			}
+		}
+	}
 
-.popup_box {
-  height: 700rpx;
-  box-shadow: 0rpx 0rpx 16rpx 4rpx rgba(145, 156, 178, 0.1);
-  border-radius: 32rpx 32rpx 0rpx 0rpx;
+	.popup_box {
+		height: 700rpx;
+		box-shadow: 0rpx 0rpx 16rpx 4rpx rgba(145, 156, 178, 0.1);
+		border-radius: 32rpx 32rpx 0rpx 0rpx;
 
-  .line1 {
-    width: 80rpx;
-    height: 8rpx;
-    background: #999999;
-    border-radius: 4rpx;
-    margin: 0 auto;
-    margin-top: 15rpx;
-  }
+		.line1 {
+			width: 80rpx;
+			height: 8rpx;
+			background: #999999;
+			border-radius: 4rpx;
+			margin: 0 auto;
+			margin-top: 15rpx;
+		}
 
-  .grade {
-    height: 23rpx;
-    font-size: 24rpx;
-    color: #999999;
-    margin: 0 auto;
-    margin-top: 15rpx;
-    text-align: center;
-  }
+		.grade {
+			height: 23rpx;
+			font-size: 24rpx;
+			color: #999999;
+			margin: 0 auto;
+			margin-top: 15rpx;
+			text-align: center;
+		}
 
-  .confrim-btn {
-    height: 98rpx;
-    width: 100%;
-    display: flex;
-    align-items: center;
-    justify-content: center;
+		.confrim-btn {
+			height: 98rpx;
+			width: 100%;
+			display: flex;
+			align-items: center;
+			justify-content: center;
 
-    .okBtn {
-      width: 200rpx;
-      height: 64rpx;
-      background: linear-gradient(0deg, #015eea, #00c0fa);
-      border-radius: 32rpx;
-      color: #ffffff;
-      text-align: center;
-      line-height: 64rpx;
-    }
-  }
-}
+			.okBtn {
+				width: 200rpx;
+				height: 64rpx;
+				background: linear-gradient(0deg, #015eea, #00c0fa);
+				border-radius: 32rpx;
+				color: #ffffff;
+				text-align: center;
+				line-height: 64rpx;
+			}
+		}
+	}
 
-.slot-content {
-  padding: 0 20rpx;
-}
+	.slot-content {
+		padding: 0 20rpx;
+	}
 
-.confirm-modal {
-  .slot-content {
-    padding: 0 20rpx;
-    .content {
-      color: red;
+	.confirm-modal {
+		.slot-content {
+			padding: 0 20rpx;
 
-      .msg-list {
-        .item {
-          padding: 20rpx 0;
+			.content {
+				color: red;
 
-          &__left {
-            color: #666;
-            margin-right: 20rpx;
-          }
+				.msg-list {
+					.item {
+						padding: 20rpx 0;
 
-          &__right {
-            color: #333;
-          }
-        }
-      }
-    }
-  }
-}
-</style>
+						&__left {
+							color: #666;
+							margin-right: 20rpx;
+						}
+
+						&__right {
+							color: #333;
+						}
+					}
+				}
+			}
+		}
+	}
+</style>

+ 80 - 27
pages3/polyv/detail.vue

@@ -8,12 +8,19 @@
 					style="width: 100%; height: 421rpx">
 				</image>
 			</view>
-			<view v-else>
+			<view v-else-if="playSource == 1">
 				<my-player ref="player" :playVid="playVid" :autoplay="autoplay" :allowSeek="isAllowSeek"
 					:playbackRate="playbackRate" :videoCurrentTime="videoCurrentTime || 0" @playing="playing"
 					@pause="pause" @ended="ended" @loadedmetadata="loadedmetadata" @timeupdate="timeupdate"
 					@playerError="playerError" @studyLog="studyLog"></my-player>
 			</view>
+			<view v-else>
+				<!-- <my-player2 src="/pages3/tencent/detail?vid=xxx" vid="xxx"></my-player2> -->
+				<my-player2 ref="player2" :playFileId="playVid" :autoplay="autoplay" :controlBar=true
+					:playbackRate="playbackRate" :currentTime="videoCurrentTime || 0" @playing="playing" @isSeeking="isSeeking" @seeked="seeked" @pause="pause"
+					@ended="ended" @loadedmetadata="loadedmetadata" @timeupdate="timeupdate" @playerError="playerError"
+					@studyLog="studyLog"></my-player2>
+			</view>
 			<view class="course_name">
 				<view class="course_titles">
 					<view class="video_t1" :class="{ one: !goodsData.buyNote }">{{
@@ -177,6 +184,7 @@
 	import courseTree from "@/components/course/courseTree.vue";
 	import PopupCamera from "../../components/popup/camera.vue";
 	import myPlayer from "@/components/myPlayer/polyvPlayer.vue";
+	import myPlayer2 from "@/components/myPlayer2/tcPlayer.vue";
 	import noteBox from "@/components/course/noteBox.vue";
 	import answerBox from "@/components/course/answerBox.vue";
 	import {
@@ -195,6 +203,7 @@
 		components: {
 			handoutsBox,
 			myPlayer,
+			myPlayer2,
 			noteBox,
 			answerBox,
 			courseTree,
@@ -233,6 +242,7 @@
 				photoConfig: false, //是否配置好拍照次数
 				photoHistoryList: [], //已拍照历史的下标点
 				sectionItem: {},
+				// playSource: 2,
 				isRebuild: false, //视频是否从重修目录点击
 				livingItem: "",
 				option: null,
@@ -265,6 +275,7 @@
 				isLeave: false,
 				text: "",
 				throttleFn: throttle(this.postStudyRecord, 15000),
+				isSeekingIndex: false
 			};
 		},
 		computed: {
@@ -321,11 +332,19 @@
 			playVid() {
 				return this.sectionItem.recordingUrl;
 			},
+			playSource() {
+				return this.sectionItem.sectionId == 7969 ? 1 : 2;
+			},
 			isPlayRebuild() {
 				return this.sectionItem.rebuild != 1;
 			},
 		},
 		async onLoad(option) {
+			if (option.obj) {
+				console.log("检测option.obj", option)
+				console.log("解析后的option.obj", JSON.parse(decodeURIComponent(option.obj)))
+				option = JSON.parse(decodeURIComponent(option.obj));
+			}
 			if (option.isOther) {
 				this.showMark = true;
 				return;
@@ -351,8 +370,10 @@
 				},
 			});
 			if (skipPort) {
+				console.log("Jos")
 				await this.$method.skipLogin(skipPort);
 			}
+			console.log('come in')
 			if (this.$method.isGoLogin()) {
 				return;
 			}
@@ -404,6 +425,7 @@
 			}
 		},
 		onHide() {
+			console.log('隐藏页面')
 			this.beforeHideIsPlaying = this.isPlaying;
 			if (this.isPlaying) {
 				this.refPlv.playPause();
@@ -413,12 +435,16 @@
 		methods: {
 			...mapMutations(["updateChapterOpen", "updateLiveLast"]),
 			async init() {
-				// #ifdef MP-WEIXIN
-				this.isAllowSeek = "no";
-				// #endif
-				// #ifdef H5
-				this.isAllowSeek = "on";
-				// #endif
+				if (this.playSource == 2) {
+					this.isAllowSeek = true;
+				} else {
+					// #ifdef MP-WEIXIN
+					this.isAllowSeek = "no";
+					// #endif
+					// #ifdef H5
+					this.isAllowSeek = "on";
+					// #endif
+				}
 				this.photoList = [];
 				this.courseList = [];
 				this.photoConfig = false;
@@ -647,8 +673,14 @@
 				uni.$on(
 					"getSection",
 					debounce((item) => {
-						if (!this.refPlv && this.playVid) {
-							this.refPlv = this.$refs.player;
+						if (this.playSource == 2) {
+							if (!this.refPlv && this.playVid) {
+								this.refPlv = this.$refs.player2;
+							}
+						} else {
+							if (!this.refPlv && this.playVid) {
+								this.refPlv = this.$refs.player;
+							}
 						}
 						if (this.isPlaying) {
 							this.refPlv.playPause();
@@ -1025,7 +1057,7 @@
 								});
 								return Promise.reject();
 							}
-						}else if(data.status !== 1 && baseRes.data.data.checkStatus == 1){
+						} else if (data.status !== 1 && baseRes.data.data.checkStatus == 1) {
 							uni.showModal({
 								content: "资料正在审核中,暂无法学习,请耐心等待!如需加急审核,请联系客服人员",
 								cancelText: "返回",
@@ -1056,7 +1088,11 @@
 				return 100 / this.list.length + "%";
 			},
 			loadedmetadata(event) {
-				this.refPlv = this.$refs.player;
+				if (this.playSource == 2) {
+					this.refPlv = this.$refs.player2;
+				} else {
+					this.refPlv = this.$refs.player;
+				}
 			},
 			getPhotoLastRecord() {
 				let {
@@ -1171,7 +1207,7 @@
 			},
 			// 随机前后五分钟
 			commonConfig(totalVideoTime, fixS) {
-					let photoList = [];
+				let photoList = [];
 				// 固定间隔时间取
 				if (fixS) {
 					let num = Math.ceil(totalVideoTime / fixS);
@@ -1237,10 +1273,17 @@
 					await this.getPhotoLastRecord();
 				}
 				if (this.refPlv) {
-					this.refPlv.changeVid({
-						vid: recordingUrl,
-						videoCurrentTime: this.videoCurrentTime,
-					});
+					if (this.playSource == 2) {
+						this.refPlv.changeFileId({
+							fileId: recordingUrl,
+							currentTime: this.videoCurrentTime,
+						});
+					} else {
+						this.refPlv.changeVid({
+							vid: recordingUrl,
+							videoCurrentTime: this.videoCurrentTime,
+						});
+					}
 				}
 			},
 			getRecordLast(sectionItem) {
@@ -1428,7 +1471,7 @@
 				}).then((res) => {});
 			},
 			timeupdate(time) {
-				console.log("🚀 ~ file: detail.vue:1498 ~ timeupdate ~ time:");
+				// console.log("🚀 ~ file: detail.vue:1498 ~ timeupdate ~ time:");
 				if (this.noticeShow) {
 					this.refPlv.playPause();
 					return;
@@ -1438,16 +1481,20 @@
 				this.timeEvent(time);
 			},
 			playing() {
+				if(this.isSeekingIndex) return;
 				//特殊设备跳过拍照停止学习
 				if (this.showCamera) {
 					this.refPlv.playPause();
 					this.refPlv.exitFullScreen();
-					return
+					return;
 				}
-				console.log("播放");
 				this.isPlaying = true;
 				this.clearPauseTimer();
 			},
+			isSeeking(event) {
+				console.log("搜寻进度条", event)
+				this.isSeekingIndex = event;
+			},
 			openCamera() {
 				if (this.showCamera) return;
 				this.showCamera = true;
@@ -1459,12 +1506,14 @@
 				this.showCamera = false;
 			},
 			pause() {
-				console.log("暂停");
+				if(this.isSeekingIndex) return;
+				console.log("视频暂停");
 				this.isPlaying = false;
 				this.erJianErZaoPauseTip();
 			},
 			async ended() {
-				console.log("结束");
+				if(this.isSeekingIndex) return;
+				console.log("视频播放完毕");
 				this.isPlaying = false;
 				uni.showToast({
 					icon: "none",
@@ -1622,12 +1671,16 @@
 						this.autoplay = true;
 					}
 					if (this.goodsPlayConfig.drag > 0 && !this.erJianErZao) {
-						// #ifdef MP-WEIXIN
-						this.isAllowSeek = "yes";
-						// #endif
-						// #ifdef H5
-						this.isAllowSeek = "off";
-						// #endif
+						if (this.playSource == 2) {
+							this.isAllowSeek = false;
+						} else {
+							// #ifdef MP-WEIXIN
+							this.isAllowSeek = "yes";
+							// #endif
+							// #ifdef H5
+							this.isAllowSeek = "off";
+							// #endif
+						}
 					}
 					if (this.goodsPlayConfig.speed > 0) {
 						this.playbackRate = [0.5, 0.8, 1.0, 1.25, 1.5, 2.0];

+ 29 - 0
pages5/webview/detaillink.vue

@@ -0,0 +1,29 @@
+<template>
+  <view>
+    <web-view :webview-styles="webviewStyles" :src="url"></web-view>
+  </view>
+</template>
+
+<script>
+import { metaSetScalable } from "../../common/navTo";
+export default {
+  data() {
+    return {
+      webviewStyles: {
+        progress: {
+          color: "#007AFF",
+        },
+      },
+      url: "",
+    };
+  },
+  onLoad(option) {
+    this.url = decodeURIComponent(option.url);
+    // #ifdef H5
+    metaSetScalable();
+    // #endif
+  },
+};
+</script>
+
+<style></style>

+ 1 - 1
pages5/webview/sdlink.vue

@@ -26,4 +26,4 @@ export default {
 };
 </script>
 
-<style></style>
+<style></style>