chenxiong vor 3 Jahren
Ursprung
Commit
3f236bf0dd

+ 6 - 4
common/methodTool.js

@@ -132,7 +132,7 @@ export default {
 							height: '35%',
 							success:async rest => {
 								const waitUpload = await self.uploadFile(rest.tempFilePath, 0);
-								resolve();
+								resolve(waitUpload);
 							}
 						});
 					} else if(canvasWidth > 1000 || canvasHeight > 1000){
@@ -143,12 +143,14 @@ export default {
 							height: '50%',
 							success: async rest => {
 								const waitUpload = await self.uploadFile(rest.tempFilePath, 0);
-								resolve();
+								resolve(waitUpload);
 							}
 						});
 					} else {
-						console.log('无需压缩', url);
-						resolve(url);
+						const waitUpload = await self.uploadFile(url, 0);
+						resolve(waitUpload);
+						// console.log('无需压缩', url);
+						// resolve(url);
 					}
 				}
 			});

+ 43 - 6
components/course/courseChapter.vue

@@ -5,10 +5,10 @@
 		<image src="/static/icon/down1.png" class="icon_up" v-if="!down"></image>
 		<text style="margin-left: 30rpx;">{{menuItem.name}}</text>
 		</view>
-		<view v-if="!down">
+		<view v-show="!down">
 			<view v-for="(itemM,indexM) in list" :key="indexM">
 				<view v-if="itemM.type!=2">
-					<courseSection :courseId="courseId" @playEnd="refreshList($event)" :goodsId="goodsId" :isBuy="isBuy" :nextMenuItem="findNextSection(indexM)" :isRebuild="isRebuild" :gradeId="gradeId" :menuItem="itemM" :levelId="levelId+'-'+itemM.sectionId"></courseSection>
+					<courseSection :preItem="list[indexM-1] || preItem" :learningOrder="learningOrder" :courseId="courseId" @playEnd="refreshList($event)" :goodsId="goodsId" :isBuy="isBuy" :nextMenuItem="findNextSection(indexM)" :isRebuild="isRebuild" :gradeId="gradeId" :menuItem="itemM" :levelId="levelId+'-'+itemM.sectionId"></courseSection>
 					<u-line v-if="indexM<list.length-1"></u-line>
 				</view>
 				<view v-if="itemM.type==2">
@@ -42,9 +42,12 @@ import courseSection from '@/components/course/courseSection.vue';
 export default {
 	name: 'courseChapter',
 	props: {
-		learningOrder:{ //是否设置学习顺序 0 设置 1不设置
+		preItem:{
+			default:undefined
+		},
+		learningOrder:{ //是否设置学习顺序 1 章节顺序 0不设置 2从头学到尾顺序
 			type:Number,
-			default:1
+			default:0
 		},
 		needOpen:{ //是否默认展开
 			type:Boolean,
@@ -134,10 +137,41 @@ export default {
 		 */
 		async toDo(id,goodsId =0,moduleId = 0, chapterId = 0,item,index) {
 			
-			console.log(this.learningOrder)
-			if(this.learningOrder == 0) {
+			console.log(this.learningOrder,'this.learningOrder')
+			if(this.learningOrder == 1) {
 				if(this.canLearn) {
 					
+					let num = await this.bankRecordDoNum(item.typeId)
+					//有次数限制
+					if(item.answerNum - num > 0 && item.answerNum > 0) {
+						// this.$set(this.list[index],'doNum',(item.doNum+1))
+						console.log(this.list[index])
+						uni.navigateTo({
+							url:'/pages2/class/questionBank?courseId='+this.courseId+'&gradeId='+this.gradeId+'&isFromVideo=1&id='+id+'&goodsid='+goodsId+'&moduleId='+moduleId+'&chapterId='+chapterId+''
+						})
+					//没有答题次数限制
+					} else if(item.answerNum == 0) {
+						uni.navigateTo({
+							url:'/pages2/class/questionBank?courseId='+this.courseId+'&gradeId='+this.gradeId+'&isFromVideo=1&id='+id+'&goodsid='+goodsId+'&moduleId='+moduleId+'&chapterId='+chapterId+''
+						}) 
+					} else {
+						uni.showToast({
+							icon:'none',
+							title:'该试卷只能答题'+item.answerNum+'次'
+						})
+						
+						return;
+					}
+				} else {
+					uni.showToast({
+						icon:'none',
+						title:'请按顺序学完视频课程再进行练习和测试'
+					})
+				}
+			} else if(this.learningOrder == 2 && !item.rebuild) {
+				let canLearn = this.list[index-1].learning == 1; 
+				if(canLearn) { //视频的上一节学完
+					
 					let num = await this.bankRecordDoNum(item.typeId)
 					//有次数限制
 					if(item.answerNum - num > 0 && item.answerNum > 0) {
@@ -238,6 +272,7 @@ export default {
 					for(let i=0;i<res.data.data.length;i++){
 						let item = res.data.data[i]
 						item.id = item.sectionId
+						item.menuType = 3;
 						//判断是否试听
 						item.tryListen = false
 						if(self.goodsAuditionConfigIdList.indexOf(item.id)!==-1){
@@ -268,6 +303,7 @@ export default {
 					for(let i=0;i<res.data.data.length;i++){
 						let item = res.data.data[i]
 						item.id = item.sectionId
+						item.menuType = 3;
 						//判断是否试听
 						item.tryListen = false
 						if(self.goodsAuditionConfigIdList.indexOf(item.id)!==-1){
@@ -297,6 +333,7 @@ export default {
 					for(let i=0;i<res.data.data.length;i++){
 						let item = res.data.data[i]
 						item.id = item.sectionId
+						item.menuType = 3;
 						//判断是否试听
 						item.tryListen = false
 						if(self.goodsAuditionConfigIdList.indexOf(item.id)!==-1){

+ 9 - 6
components/course/courseModule.vue

@@ -5,9 +5,9 @@
 		<image src="/static/icon/down1.png" class="icon_up" v-if="!down"></image>
 		<text style="margin-left: 10rpx;">{{menuItem.name}}</text>
 		</view>
-		<view v-if="!down">
+		<view v-show="!down">
 			<view v-for="(itemM,indexM) in list" :key="indexM">
-				<courseChapter :needOpen="needOpen" @toDo="toDo($event)" :courseId="courseId" :learningOrder="learningOrder" :goodsId="goodsId" :isBuy="isBuy" :gradeId="gradeId" :isRebuild="isRebuild"  :menuItem="itemM" :levelId="levelId+'-'+itemM.chapterId"></courseChapter>
+				<courseChapter :preItem="list[indexM - 1] || preItem" :needOpen="needOpen" @toDo="toDo($event)" :courseId="courseId" :learningOrder="learningOrder" :goodsId="goodsId" :isBuy="isBuy" :gradeId="gradeId" :isRebuild="isRebuild"  :menuItem="itemM" :levelId="levelId+'-'+itemM.chapterId"></courseChapter>
 				<u-line v-if="indexM<list.length-1"></u-line>
 			</view>
 		</view>
@@ -20,9 +20,12 @@ import courseChapter from '@/components/course/courseChapter.vue';
 export default {
 	name: 'courseModule',
 	props: {
-		learningOrder:{ //是否设置学习顺序 0 设置 1不设置
+		preItem:{
+			default:undefined
+		},
+		learningOrder:{ //是否设置学习顺序 1 章节顺序 0不设置 2从头学到尾顺序
 			type:Number,
-			defaule:1
+			defaule:0
 		},
 		needOpen:{ //是否默认展开
 			type:Boolean,
@@ -101,7 +104,7 @@ export default {
 							for(let i=0;i<res.data.data.length;i++){
 								let item = res.data.data[i]
 								item.id = item.chapterId
-								
+								item.menuType = 2;
 							}
 							self.list = res.data.data
 						}
@@ -127,7 +130,7 @@ export default {
 					for(let i=0;i<res.data.data.length;i++){
 						let item = res.data.data[i]
 						item.id = item.chapterId
-						
+						item.menuType = 2;
 					}
 					self.list = res.data.data
 				}

+ 70 - 6
components/course/courseSection.vue

@@ -53,6 +53,13 @@ import eventHub from '@/common/eventHub.js'
 export default {
 	name: 'courseSection',
 	props: {
+		preItem:{
+			default:undefined,
+		},
+		learningOrder:{ //是否设置学习顺序 1 章节顺序 0不设置 2从头学到尾顺序
+			type:Number,
+			default:0
+		},
 		courseId: {
 			type: Number,
 			default: 0
@@ -162,6 +169,68 @@ export default {
 				return;
 			}
 			this.clickLock = true;
+			console.log(this.learningOrder,'this.learningOrder')
+			console.log(this.preItem,'this.preItem')
+			if(this.learningOrder == 2 && !this.isRebuild) { //要按从头到尾顺序学习, 且不是重修课程
+				if(this.preItem) {
+					if(this.preItem.menuType == 3) { //上一个是节
+						if(this.preItem.learning == 1) { //上一节学完
+							this.playVideo();
+						} else {
+							uni.showToast({
+								icon:'none',
+								title:'请按顺序学习视频课程'
+							})
+						}
+					} else if(this.preItem.menuType == 2) { //上一个是章
+						this.$api.reSectionList({chapterId: this.preItem.menuId || this.preItem.chapterId,gradeId:this.gradeId,courseId:this.courseId,moduleId:this.preItem.moduleId || 0}).then(res => {
+							if(res.data.code==200){
+								let lastItem = res.data.data[res.data.data.length -1];
+								if(lastItem.learning == 1) {
+									this.playVideo();
+								} else {
+									uni.showToast({
+										icon:'none',
+										title:'请按顺序学习视频课程'
+									})
+								}
+							}
+						});
+					} else if(this.preItem.menuType == 1) { //上一个是模块
+						this.$api.reChapterList({moduleId:this.preItem.menuId,gradeId:this.gradeId,courseId:this.courseId}).then(res => {
+							if(res.data.code==200){
+								let lastChapterItem = res.data.data[res.data.data.length -1];
+								
+								this.$api.reSectionList({chapterId:lastChapterItem.chapterId,gradeId:this.gradeId,courseId:this.courseId,moduleId:this.menuItem.menuId || this.menuItem.moduleId}).then(res => {
+									if(res.data.code==200){
+										let lastSectionItem = res.data.data[res.data.data.length -1];
+										if(lastSectionItem.learning == 1) {
+											this.playVideo();
+										} else {
+											uni.showToast({
+												icon:'none',
+												title:'请按顺序学习视频课程'
+											})
+										}
+									}
+								});
+							}
+						});
+					} 
+				} else { //第一章第一节
+					this.playVideo();
+				}
+			} else { 
+				this.playVideo();
+			}
+			
+			
+			setTimeout(() => {
+				this.clickLock = false;
+			},3000)
+			
+		},
+		playVideo() {
 			if(this.menuItem.sectionType==1||this.menuItem.sectionType==3){
 				//录播
 				if(!this.isBuy){
@@ -235,13 +304,8 @@ export default {
 				// 	this.$emit('playEnd',{isRebuild:this.isRebuild})
 				// })
 				console.log(888)
-
-			}
-			
-			setTimeout(() => {
-				this.clickLock = false;
-			},3000)
 			
+			}
 		}
 	},
 	computed: { ...mapGetters(['playSectionId','playChannelId','playVID']) }

+ 1 - 1
pages2/appointment/index.vue

@@ -144,7 +144,7 @@ export default {
 						this.$api.goodsList({ makeGoodsId: this.goodsId }).then(res => {
 							if (res.data.code === 200) {
 								if(res.data.rows.length){
-								this.goodsIdBK = res.data.rows[0].goodsId;
+								this.goodsIdBK = res.data.rows[1].goodsId;
 								}
 							}
 						});

+ 2 - 2
pages2/class/questionBank.vue

@@ -780,7 +780,7 @@ export default {
 								height: '35%',
 								success: async rest => {
 									const waitUpload = await self.uploadFile(rest.tempFilePath, 0);
-									resolve();
+									resolve(waitUpload);
 								}
 							});
 						} else if(canvasWidth > 1000 || canvasHeight > 1000){
@@ -791,7 +791,7 @@ export default {
 								height: '50%',
 								success: async rest => {
 									const waitUpload = await self.uploadFile(rest.tempFilePath, 0);
-									resolve();
+									resolve(waitUpload);
 								}
 							});
 						}  else {

+ 1 - 1
pages2/learn/menu.vue

@@ -3,7 +3,7 @@
 		<nav-bar title="目录"></nav-bar>
 		<view class="menuWrap">
 			<view class="videoMain">
-				<video id="myVideo" src="https://img.cdn.aliyun.dcloud.net.cn/guide/uniapp/%E7%AC%AC1%E8%AE%B2%EF%BC%88uni-app%E4%BA%A7%E5%93%81%E4%BB%8B%E7%BB%8D%EF%BC%89-%20DCloud%E5%AE%98%E6%96%B9%E8%A7%86%E9%A2%91%E6%95%99%E7%A8%8B@20200317.mp4" @error="videoErrorCallback" :danmu-list="danmuList" enable-danmu danmu-btn controls></video>
+				<video id="myVideo" src="https://img.cdn.aliyun.dcloud.net.cn/guide/uniapp/%E7%AC%AC1%E8%AE%B2%EF%BC%88uni-app%E4%BA%A7%E5%93%81%E4%BB%8B%E7%BB%8D%EF%BC%89-%20DCloud%E5%AE%98%E6%96%B9%E8%A7%86%E9%A2%91%E6%95%99%E7%A8%8B@20200317.mp4" @error="videoErrorCallback" :custom-cache="false" :danmu-list="danmuList" enable-danmu danmu-btn controls></video>
 				<view class="videoTitle">
 					<view class="left">承发包模式-施工合同与物资采购合...</view>
 					<view class="right">

+ 3 - 0
pages2/order/index.vue

@@ -341,12 +341,15 @@ export default {
 			this.$api.getorderlists(this.formData).then(res => {
 				if (res.data.code === 200) {
 					if (this.current === 0) {
+						this.list[0].count = res.data.total;
 						this.pageNum1 = res.data.total;
 					}
 					if (this.current === 1) {
+						this.list[1].count = res.data.total;
 						this.pageNum2 = res.data.total;
 					}
 					if (this.current === 2) {
+						this.list[2].count = res.data.total;
 						this.pageNum3 = res.data.total;
 					}
 					this.order = res.data.rows;

+ 6 - 3
pages2/register/register.vue

@@ -16,8 +16,11 @@
 			<view style="margin: 30rpx 0;">
 				<view  style="display: flex;align-items: center;font-size: 24rpx;justify-content:center;">
 					<u-checkbox v-model="read" :label-disabled="false"></u-checkbox>
-					<view style="color: #666666;">我已认真阅读并同意</view>
-					<view style="color: #007AFF;" @click="agreementModal = true;">《祥粤云学堂服务协议》</view>
+					<view>
+						<view style="color: #666666;">我已认真阅读并同意</view>
+						<view style="color: #007AFF;" @click="agreementModal = true;">《用户使用协议》及《个人信息保护政策》</view>
+					</view>
+					
 				</view>
 			</view>
 			<button :disabled="isUse" class="loginBtn" :class="{able:canRegister()}" @click="submit">
@@ -295,7 +298,7 @@
 				<view class="footer">
 					<view v-if="isAgree" class="btn close" @click="agreementModal = false">关闭</view>
 					<view v-if="!isAgree" class="btn cancel" @click="refuseAgreement">取消</view>
-					<view v-if="!isAgree" class="btn ok" @click="agree">确定</view>
+					<view v-if="!isAgree" class="btn ok" @click="agree">同意并继续</view>
 				</view>
 			</view>
 		</u-popup>

+ 9 - 3
pages2/verify/input.vue

@@ -552,9 +552,9 @@ export default {
 		},
 		agree() {
 			this.agreementModal = false;
-			this.$nextTick(() => {
+			setTimeout(() => {
 				this.$refs.collapse.init()
-			})
+			},1000)
 		},
 		refuseAgreement() {
 			uni.navigateBack({
@@ -711,6 +711,7 @@ export default {
 								}
 							} else {
 								this.errorType = ['message'];
+								console.log(this.form)
 								console.log('验证失败');
 							}
 						});
@@ -730,8 +731,10 @@ export default {
 			this.resultForm(1);
 		},
 		async changePhotoListHeader1(lists, name) {
+			console.log(lists)
 			if (lists.length) {
 				this.fileList1 = lists;
+				console.log(lists,'lists1')
 				if (lists[0].url.indexOf('//tmp') !== -1 || lists[0].url.indexOf('//temp') !== -1) {
 					this.$set(this.form, 'recent_photos', await this.$method.imageInfos(lists[0].url));
 				}
@@ -746,9 +749,10 @@ export default {
 			});
 		},
 		async changePhotoListHeader2(lists, name) {
+			console.log(lists)
 			if (lists.length) {
 				this.fileList2 = lists;
-				console.log(lists,'lists')
+				console.log(lists,'lists2')
 				if (lists[0].url.indexOf('//tmp') !== -1 || lists[0].url.indexOf('//temp') !== -1) {
 					this.$set(this.form, 'idcard_face_photo', await this.$method.imageInfos(lists[0].url));
 				}
@@ -761,8 +765,10 @@ export default {
 			});
 		},
 		async changePhotoListHeader3(lists, name) {
+			console.log(lists)
 			if (lists.length) {
 				this.fileList3 = lists;
+				console.log(lists,'lists3')
 				if (lists[0].url.indexOf('//tmp') !== -1 || lists[0].url.indexOf('//temp') !== -1) {
 					this.$set(this.form, 'idcard_national_photo', await this.$method.imageInfos(lists[0].url));
 				}

+ 3 - 3
pages2/wd/edu_info.vue

@@ -161,7 +161,7 @@
 									height: '35%',
 									success: async rest => {
 										const waitUpload = await self.uploadFile(rest.tempFilePath, 0);
-										resolve()
+										resolve(waitUpload)
 									} 
 								});
 							} else if (canvasWidth > 1000 || canvasHeight > 1000) {
@@ -172,13 +172,13 @@
 									height: '50%',
 									success: async rest => {
 										const waitUpload = await self.uploadFile(rest.tempFilePath, 0);
-										resolve()
+										resolve(waitUpload)
 									} 
 								});
 							} else {
 								console.log('无需压缩');
 								const waitUpload = await self.uploadFile(self.fileList[0].url, 0);
-								resolve()
+								resolve(waitUpload)
 							}
 						}
 					});

+ 18 - 4
pages3/polyv/detail.vue

@@ -15,8 +15,11 @@
 						:vid="vid"
 						:showSettingBtn="true"
 						:enablePlayGesture="true"
+						:custom-cache="false"
+						:object-fit="'contain'"
 						@statechange="onStateChange"
-						@fullscreenchange="fullscreenchange	"
+						@fullscreenchange="fullscreenchange"
+						@error="playError"
 						:autoplay="autoplay"
 						:isAllowSeek="isAllowSeek"
 						:playbackRate="playbackRate"
@@ -63,11 +66,11 @@
 			<view v-show="current == 0">
 				<view class="menuBox" v-for="(item, index) in menuList" :key="index">
 					<!--模块 -->
-					<view v-if="item.type == 1"><courseModule :needOpen="menuIndex[0] === index ? true : false" :courseId="courseId" :learningOrder="businessData.goodsLearningOrder" :goodsId="goodsId" :gradeId="gradeId" :isBuy="true" :menuItem="item" :levelId="item.menuId"></courseModule></view>
+					<view v-if="item.type == 1"><courseModule :needOpen="menuIndex[0] === index ? true : false" :courseId="courseId" :preItem="menuList[index-1]"  :learningOrder="businessData.goodsLearningOrder" :goodsId="goodsId" :gradeId="gradeId" :isBuy="true" :menuItem="item" :levelId="item.menuId"></courseModule></view>
 					<!--章 -->
-					<view v-if="item.type == 2"><courseChapter :needOpen="menuIndex[0] === index ? true : false" :courseId="courseId" @playEnd="sectionPlayEnd($event,index)" :learningOrder="businessData.goodsLearningOrder" :goodsId="goodsId" :gradeId="gradeId" :isBuy="true" :menuItem="item" :levelId="'0-' + item.menuId"></courseChapter></view>
+					<view v-if="item.type == 2"><courseChapter :needOpen="menuIndex[0] === index ? true : false" :courseId="courseId" :preItem="menuList[index-1]"  @playEnd="sectionPlayEnd($event,index)" :learningOrder="businessData.goodsLearningOrder" :goodsId="goodsId" :gradeId="gradeId" :isBuy="true" :menuItem="item" :levelId="'0-' + item.menuId"></courseChapter></view>
 					<!--节 -->
-					<view v-if="item.type == 3"><courseSection @playEnd="sectionPlayEnd($event,index)" :courseId="courseId" :goodsId="goodsId" :gradeId="gradeId" :isBuy="true" :menuItem="item" :levelId="'0-0-' + item.menuId"></courseSection></view>
+					<view v-if="item.type == 3"><courseSection @playEnd="sectionPlayEnd($event,index)" :courseId="courseId" :preItem="menuList[index-1]" :learningOrder="businessData.goodsLearningOrder"  :goodsId="goodsId" :gradeId="gradeId" :isBuy="true" :menuItem="item" :levelId="'0-0-' + item.menuId"></courseSection></view>
 				</view>
 			</view>
 			<!--讲义 -->
@@ -568,6 +571,7 @@ export default {
 								item.down = true;
 								item.id = item.menuId;
 								item.name = item.menuName;
+								item.menuType = item.type;
 							}
 							this.menuList = []
 							this.$nextTick(() => {
@@ -664,6 +668,7 @@ export default {
 		courseBusiness(){
 			this.$api.courseBusiness(this.goodsData.businessId).then(res => {
 				this.businessData = res.data.data;
+				this.businessData.goodsLearningOrder = 2;
 			})
 		},
 		/**
@@ -989,6 +994,7 @@ export default {
 			if (this.vid) {
 				//切换视频
 				var polyvPlayerContext = this.selectComponent('#playerVideo');
+				console.log(polyvPlayerContext,'polyvPlayerContext')
 				polyvPlayerContext.changeVid(item.recordingUrl);
 			} else {
 				this.vid = item.recordingUrl;
@@ -1395,6 +1401,10 @@ export default {
 				this.postStudyRecord() */
 			}
 			if (newstate.detail.newstate == 'ended') {
+				uni.showToast({
+					icon:'none',
+					title:'播放完毕'
+				})
 				this.postStudyRecord(1);
 				// uni.$emit('playNext') //播放重修下一节
 			}
@@ -1458,6 +1468,9 @@ export default {
 				}
 			});
 		},
+		playError(e) {
+			console.log(e)
+		},
 		//拍照报错
 		error(e) {
 			console.log(e.detail);
@@ -1588,6 +1601,7 @@ export default {
 						item.down = true;
 						item.id = item.menuId;
 						item.name = item.menuName;
+						item.menuType = item.type;
 					}
 					self.menuList = res.data.rows;
 					

+ 1 - 1
pages3/static/polyv-sdk/common/wxParse/wxParse.wxml

@@ -13,7 +13,7 @@
 <template name="wxParseVideo">
   <!--增加video标签支持,并循环添加-->
   <view class="wxParse-view {{item.classStr}} wxParse-{{item.tag}}" style="{{item.styleStr}}">
-    <video class="{{item.classStr}} wxParse-{{item.tag}}-video" src="{{item.attr.src}}"></video>
+    <video custom-cache="{{false}}" class="{{item.classStr}} wxParse-{{item.tag}}-video" src="{{item.attr.src}}"></video>
   </view>
 </template>
 

+ 1 - 0
pages3/static/polyv-sdk/components/live-player/live-player.wxml

@@ -80,6 +80,7 @@
     controls="{{ liveMode === 2 }}"
     enable-danmu="{{ true }}"
     autoplay="{{ true }}"
+	custom-cache="{{false}}"
     object-fit="{{ objectFit }}"
     picture-in-picture-mode="{{ pipMode }}"
     bindtap="showPlayControl"

+ 2 - 1
pages3/static/polyv-sdk/components/player/player.wxml

@@ -27,9 +27,10 @@
       src="{{ vodSrc }}"
       muted="{{ muted }}"
       autoplay
+	  custom-cache="{{false}}"
       picture-in-picture-mode="{{ pipMode }}"
       enable-danmu="{{ true }}"
-      object-fit="{{ objectFit }}"
+      object-fit="contain"
       bindtap="showSetControl"
       bindtimeupdate="onVodTimeUpdate"
       bindplay="onVodPlay"