Просмотр исходного кода

Merge branch 'stage-5' into stage-5-2

# Conflicts:
#	common/request.js
#	components/course/courseChapter.vue
#	pages2/wd/course.vue
#	pages3/polyv/detail.vue
chenxiong 3 лет назад
Родитель
Сommit
557037dc61
3 измененных файлов с 3463 добавлено и 2951 удалено
  1. 614 472
      components/course/courseChapter.vue
  2. 219 184
      pages2/wd/course.vue
  3. 2630 2295
      pages3/polyv/detail.vue

+ 614 - 472
components/course/courseChapter.vue

@@ -1,483 +1,625 @@
 <template>
-	<view style="margin: 20rpx 0;">
-		<view class="title" @click="openChapter(menuItem)">
-		<image src="/static/icon/up1.png" class="icon_up" v-if="down"></image>
-		<image src="/static/icon/down1.png" class="icon_up" v-if="!down"></image>
-		<text style="margin-left: 30rpx;">{{menuItem.name}}</text>
-		</view>
-		<view v-show="!down">
-			<view v-for="(itemM,indexM) in list" :key="indexM">
-				<view v-if="itemM.type!=2">
-					<courseSection :sectionMaxNum="sectionMaxNum" :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">
-					<u-line ></u-line>
-					<view class="examBox"  @click="toDo(itemM.typeId,goodsId,itemM.moduleId,itemM.chapterId,itemM,indexM)">
-						<view class="exam">
-							<view class="eTag">{{itemM.doType==1?'练习':'考试'}}</view>
-							<view style="margin-left: 15rpx;">{{itemM.name}}</view>
-						</view>
-						<view v-if="isRebuild||itemM.rebuild>0" class="tagRe">待重修</view>
-						<view v-else>
-							<view :class="{tagGreen:itemM.learning == 1,tagRe:itemM.learning == 0 || itemM.rebuild>0}">
-								<text v-if="itemM.rebuild > 0">待重测</text>
-								<text v-else-if="itemM.learning == 1">合格</text>
-								<text v-else-if="itemM.learning == 0">不合格</text>
-							
-							</view>
-						</view>
-						
-					</view>
-				</view>
-			</view>
-			
-		</view>
-	</view>
+  <view style="margin: 20rpx 0">
+    <view class="title" @click="openChapter(menuItem)">
+      <image src="/static/icon/up1.png" class="icon_up" v-if="down"></image>
+      <image src="/static/icon/down1.png" class="icon_up" v-if="!down"></image>
+      <text style="margin-left: 30rpx">{{ menuItem.name }}</text>
+    </view>
+    <view v-show="!down">
+      <view v-for="(itemM, indexM) in list" :key="indexM">
+        <view v-if="itemM.type != 2">
+          <courseSection
+            :sectionMaxNum="sectionMaxNum"
+            :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">
+          <u-line></u-line>
+          <view
+            class="examBox"
+            @click="
+              toDo(
+                itemM.typeId,
+                goodsId,
+                itemM.moduleId,
+                itemM.chapterId,
+                itemM,
+                indexM
+              )
+            "
+          >
+            <view class="exam">
+              <view class="eTag">{{
+                itemM.doType == 1 ? "练习" : "考试"
+              }}</view>
+              <view style="margin-left: 15rpx">{{ itemM.name }}</view>
+            </view>
+            <view v-if="isRebuild || itemM.rebuild > 0" class="tagRe"
+              >待重修</view
+            >
+            <view v-else>
+              <view
+                :class="{
+                  tagGreen: itemM.learning == 1,
+                  tagRe: itemM.learning == 0 || itemM.rebuild > 0,
+                }"
+              >
+                <text v-if="itemM.rebuild > 0">待重测</text>
+                <text v-else-if="itemM.learning == 1">合格</text>
+                <text v-else-if="itemM.learning == 0">不合格</text>
+              </view>
+            </view>
+          </view>
+        </view>
+      </view>
+    </view>
+  </view>
 </template>
 
 <script>
-import { mapGetters,mapMutations } from 'vuex';
-import courseSection from '@/components/course/courseSection.vue';
+import { mapGetters, mapMutations } from "vuex";
+import courseSection from "@/components/course/courseSection.vue";
 export default {
-	name: 'courseChapter',
-	props: {
-		preItem:{
-			default:undefined
-		},
-		learningOrder:{ //是否设置学习顺序 1 章节顺序 0不设置 2从头学到尾顺序
-			type:Number,
-			default:0
-		},
-		needOpen:{ //是否默认展开
-			type:Boolean,
-			default:false,
-		},
-		menuItem: {
-			type: Object,
-			default: {}
-		},
-		isBuy: {
-			type: Boolean,
-			default: false
-		},
-		levelId: {
-			type: String,
-			default: ""
-		},
-		goodsId: {
-			type: Number,
-			default: 0
-		},
-		courseId: {
-			type: Number,
-			default: 0
-		},
-		isRebuild: {
-			type: Boolean,
-			default: false
-		},
-		gradeId: {
-			type: Number,
-			default: 0
-		},
-		sectionMaxNum:{
-			default:undefined
-		}
-	},
-	components: {
-		courseSection
-	},
-	data() {
-		return {
-			down:true,
-			list:[],
-			examList:{},
-			canLearn:false, //是否全部视频看完才可以练习、测试
-		};
-	},
-	onLoad() {},
-	created() {
-	},
-	mounted() {
-		if(this.needOpen && this.chapterOpen) {
-			this.updateChapterOpen(false)
-			this.openChapter(this.menuItem)
-		}
-	},
-	onPageShow() {
-		if(this.isBuy) {
-			this.refreshList({isRebuild:this.isRebuild});
-		}
-		
-	},
-	methods: {
-		 ...mapMutations(['updateChapterOpen']),
-		 goodsTodayStudySectionNum() {
-		 	return new Promise(resolve => {
-		 		this.$api.goodsTodayStudySectionNum({goodsId:this.goodsId,gradeId:this.gradeId}).then(res => {
-		 			if(res.data.code == 200) {
-		 				resolve(res.data.data)
-		 			}
-		 		})
-		 	})
-		 },
-		refreshList(isRebuild) {
-			console.log(9999)
-			let moduleId = this.menuItem.moduleId?this.menuItem.moduleId:0
-			if(this.isRebuild){
-				this.getReSectionList(this.menuItem.id,this.menuItem.courseId,moduleId)
-			}else{
-				this.getBuySectionList(this.menuItem.id,this.menuItem.courseId,moduleId)
-//				this.getMenuExamList(item.id,item.courseId,moduleId)
-			}
-			
-			
-			this.$emit('playEnd',{isRebuild:isRebuild.isRebuild})
-			console.log(10000)
-			// let moduleId = this.menuItem.moduleId?this.menuItem.moduleId:0
-			// this.getBuySectionList(this.menuItem.id,this.menuItem.courseId,moduleId)
-		},
-		findNextSection(index){
-			for(let i=index+1;i<this.list.length;i++){
-				return this.list[i];
-			}
-			return {}
-		},
-		studyRecordMenuAllList() {
-			return new Promise(resolve => {
-				
-				this.$api.studyRecordMenuAllList({
-					courseId:this.courseId,
-					gradeId:this.gradeId,
-					goodsId:this.goodsId
-				}).then(res => {
-					if(res.data.code == 200) {
-						resolve(res.data.data)
-					}
-				})
-			})
-		},
-		/**
-		 * 去做题
-		 */
-		async toDo(id,goodsId =0,moduleId = 0, chapterId = 0,item,index) {
-			
-			// let learnNum = await this.goodsTodayStudySectionNum()
-			
-			// if(this.sectionMaxNum > 0) {
-			// 	if(learnNum >= this.sectionMaxNum) {
-			// 		uni.showToast({
-			// 			icon:'none',
-			// 			title:`每天最多学习${this.sectionMaxNum}节`
-			// 		})
-			// 		return;
-			// 	}
-			// }
-			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; 
-				let rows = await this.studyRecordMenuAllList();
-				let isStop = false;
-				let newRows = [];
-				for(let i = 0; i < rows.length; i++ ) {
-					let moduleTrue = rows[i].moduleId == moduleId;
-					let chapterTrue = rows[i].chapterId == chapterId;
-					if(moduleTrue && chapterTrue) {
-						isStop = true;
-						if(rows[i].sectionType != 2) {//忽略直播
-							newRows.push(rows[i])
-						}
-					} else {
-						if(!isStop) {
-							if(rows[i].sectionType != 2) { //忽略直播
-								newRows.push(rows[i])
-							}
-							
-						} else {
-							break;
-						}
-						
-					}
-				}
-				console.log(newRows)
-				let isAllLearn = newRows.every(item => {
-					return item.studyStatus == 1;
-				})
-				
-				if(isAllLearn) { //之前的都学完了
-					
-				// if(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 {
-				let num = await this.bankRecordDoNum(item.typeId)
-				//有次数限制
-				if(item.answerNum - item.doNum > 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;
-				}
-			}
-			
-		},
-		bankRecordDoNum(examId) {
-			return new Promise(resolve => {
-				this.$api.bankRecordDoNum({
-					goodsId:this.goodsId,
-					gradeId:this.gradeId,
-					chapterId:this.menuItem.id,
-					courseId:this.courseId,
-					moduleId:0,
-					examId:examId,
-				}).then(res => {
-					resolve(res.data.data)
-				})
-			})
-		},
-		openChapter(item){
-			console.log(this.menuItem)
-			this.down = !this.down
-			if(!this.down&&this.list.length==0){
-				console.log(item.id,69)
-				if(this.isBuy){
-					let moduleId = item.moduleId?item.moduleId:0
-					if(this.isRebuild){
-						this.getReSectionList(item.id,item.courseId,moduleId)
-					}else{
-						this.getBuySectionList(item.id,item.courseId,moduleId)
-		//				this.getMenuExamList(item.id,item.courseId,moduleId)
-					}
-				}else{
-					this.getSectionList(item.id)
-				}
-				
-			}
-		},
-		getMenuExamList(chapterId,courseId,moduleId) {
-			let self = this
-			this.$api.menuExamList({chapterId:chapterId,courseId:courseId,moduleId:moduleId}).then(res => {
-				if(res.data.code==200){
-					self.examList = res.data.rows
-				}
-			});
-		},
-		getSectionList(chapterId) {
-			let self = this
-			this.$api.sectionList(chapterId).then(res => {
-				if(res.data.code==200){
-					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){
-							item.tryListen = true
-						}	
-					}
-					
-					let newArr = res.data.data.filter(item => {
-						console.log(item)
-						return item.type != 2;
-					})
-					this.canLearn = newArr.every(item => {
-						console.log(item)
-						if(item.learning == 1) {
-							return true;
-						} else {
-							return false;
-						}
-					})
-					self.list = res.data.data
-				}
-			});
-		},
-		getReSectionList(chapterId,courseId,moduleId) {
-			let self = this
-			this.$api.reSectionList({chapterId:chapterId,gradeId:this.gradeId,courseId:courseId,rebuild:1,moduleId:moduleId}).then(res => {
-				if(res.data.code==200){
-					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){
-							item.tryListen = true
-						}	
-					}
-					let newArr = res.data.data.filter(item => {
-						console.log(item)
-						return item.type != 2;
-					})
-					this.canLearn = newArr.every(item => {
-						console.log(item)
-						if(item.learning == 1) {
-							return true;
-						} else {
-							return false;
-						}
-					})
-					self.list = res.data.data
-				}
-			});
-		},
-		getBuySectionList(chapterId,courseId,moduleId) {
-			let self = this
-			this.$api.reSectionList({chapterId:chapterId,gradeId:this.gradeId,courseId:courseId,moduleId:moduleId}).then(res => {
-				if(res.data.code==200){
-					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){
-							item.tryListen = true
-						}	
-					}
-					let newArr = res.data.data.filter(item => {
-						return item.type != 2;
-					})
-					this.canLearn = newArr.every(item => {
-						console.log(item)
-						if(item.learning == 1) {
-							return true;
-						} else {
-							return false;
-						}
-					})
-					self.list = res.data.data
-				}
-			});
-		},
-	},computed: { ...mapGetters(['goodsAuditionConfigIdList','chapterOpen']) },
+  name: "courseChapter",
+  props: {
+    preItem: {
+      default: undefined,
+    },
+    learningOrder: {
+      //是否设置学习顺序 1 章节顺序 0不设置 2从头学到尾顺序
+      type: Number,
+      default: 0,
+    },
+    needOpen: {
+      //是否默认展开
+      type: Boolean,
+      default: false,
+    },
+    menuItem: {
+      type: Object,
+      default: {},
+    },
+    isBuy: {
+      type: Boolean,
+      default: false,
+    },
+    levelId: {
+      type: String,
+      default: "",
+    },
+    goodsId: {
+      type: Number,
+      default: 0,
+    },
+    courseId: {
+      type: Number,
+      default: 0,
+    },
+    isRebuild: {
+      type: Boolean,
+      default: false,
+    },
+    gradeId: {
+      type: Number,
+      default: 0,
+    },
+    sectionMaxNum: {
+      default: undefined,
+    },
+  },
+  components: {
+    courseSection,
+  },
+  data() {
+    return {
+      down: true,
+      list: [],
+      examList: {},
+      canLearn: false, //是否全部视频看完才可以练习、测试
+    };
+  },
+  onLoad() {},
+  created() {},
+  mounted() {
+    if (this.needOpen && this.chapterOpen) {
+      this.updateChapterOpen(false);
+      this.openChapter(this.menuItem);
+    }
+  },
+  onPageShow() {
+    if (this.isBuy) {
+      this.refreshList({ isRebuild: this.isRebuild });
+    }
+  },
+  methods: {
+    ...mapMutations(["updateChapterOpen"]),
+    goodsTodayStudySectionNum() {
+      return new Promise((resolve) => {
+        this.$api
+          .goodsTodayStudySectionNum({
+            goodsId: this.goodsId,
+            gradeId: this.gradeId,
+          })
+          .then((res) => {
+            if (res.data.code == 200) {
+              resolve(res.data.data);
+            }
+          });
+      });
+    },
+    refreshList(isRebuild) {
+      console.log(9999);
+      let moduleId = this.menuItem.moduleId ? this.menuItem.moduleId : 0;
+      if (this.isRebuild) {
+        this.getReSectionList(
+          this.menuItem.id,
+          this.menuItem.courseId,
+          moduleId
+        );
+      } else {
+        this.getBuySectionList(
+          this.menuItem.id,
+          this.menuItem.courseId,
+          moduleId
+        );
+        //				this.getMenuExamList(item.id,item.courseId,moduleId)
+      }
+
+      this.$emit("playEnd", { isRebuild: isRebuild.isRebuild });
+      console.log(10000);
+      // let moduleId = this.menuItem.moduleId?this.menuItem.moduleId:0
+      // this.getBuySectionList(this.menuItem.id,this.menuItem.courseId,moduleId)
+    },
+    findNextSection(index) {
+      for (let i = index + 1; i < this.list.length; i++) {
+        return this.list[i];
+      }
+      return {};
+    },
+    studyRecordMenuAllList() {
+      return new Promise((resolve) => {
+        this.$api
+          .studyRecordMenuAllList({
+            courseId: this.courseId,
+            gradeId: this.gradeId,
+            goodsId: this.goodsId,
+          })
+          .then((res) => {
+            if (res.data.code == 200) {
+              resolve(res.data.data);
+            }
+          });
+      });
+    },
+    /**
+     * 去做题
+     */
+    async toDo(id, goodsId = 0, moduleId = 0, chapterId = 0, item, index) {
+      // let learnNum = await this.goodsTodayStudySectionNum()
+
+      // if(this.sectionMaxNum > 0) {
+      // 	if(learnNum >= this.sectionMaxNum) {
+      // 		uni.showToast({
+      // 			icon:'none',
+      // 			title:`每天最多学习${this.sectionMaxNum}节`
+      // 		})
+      // 		return;
+      // 	}
+      // }
+      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;
+        let rows = await this.studyRecordMenuAllList();
+        let isStop = false;
+        let newRows = [];
+        for (let i = 0; i < rows.length; i++) {
+          let moduleTrue = rows[i].moduleId == moduleId;
+          let chapterTrue = rows[i].chapterId == chapterId;
+          if (moduleTrue && chapterTrue) {
+            isStop = true;
+            if (rows[i].sectionType != 2) {
+              //忽略直播
+              newRows.push(rows[i]);
+            }
+          } else {
+            if (!isStop) {
+              if (rows[i].sectionType != 2) {
+                //忽略直播
+                newRows.push(rows[i]);
+              }
+            } else {
+              break;
+            }
+          }
+        }
+        console.log(newRows);
+        let isAllLearn = newRows.every((item) => {
+          return item.studyStatus == 1;
+        });
+
+        if (isAllLearn) {
+          //之前的都学完了
+
+          // if(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 {
+        let num = await this.bankRecordDoNum(item.typeId);
+        //有次数限制
+        if (item.answerNum - item.doNum > 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;
+        }
+      }
+    },
+    bankRecordDoNum(examId) {
+      return new Promise((resolve) => {
+        this.$api
+          .bankRecordDoNum({
+            goodsId: this.goodsId,
+            gradeId: this.gradeId,
+            chapterId: this.menuItem.id,
+            courseId: this.courseId,
+            moduleId: 0,
+            examId: examId,
+          })
+          .then((res) => {
+            resolve(res.data.data);
+          });
+      });
+    },
+    openChapter(item) {
+      console.log(this.menuItem);
+      this.down = !this.down;
+      if (!this.down && this.list.length == 0) {
+        console.log(item.id, 69);
+        if (this.isBuy) {
+          let moduleId = item.moduleId ? item.moduleId : 0;
+          if (this.isRebuild) {
+            this.getReSectionList(item.id, item.courseId, moduleId);
+          } else {
+            this.getBuySectionList(item.id, item.courseId, moduleId);
+            //				this.getMenuExamList(item.id,item.courseId,moduleId)
+          }
+        } else {
+          this.getSectionList(item.id);
+        }
+      }
+    },
+    getMenuExamList(chapterId, courseId, moduleId) {
+      let self = this;
+      this.$api
+        .menuExamList({
+          chapterId: chapterId,
+          courseId: courseId,
+          moduleId: moduleId,
+        })
+        .then((res) => {
+          if (res.data.code == 200) {
+            self.examList = res.data.rows;
+          }
+        });
+    },
+    getSectionList(chapterId) {
+      let self = this;
+      this.$api.sectionList(chapterId).then((res) => {
+        if (res.data.code == 200) {
+          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) {
+              item.tryListen = true;
+            }
+          }
+
+          let newArr = res.data.data.filter((item) => {
+            console.log(item);
+            return item.type != 2;
+          });
+          this.canLearn = newArr.every((item) => {
+            console.log(item);
+            if (item.learning == 1) {
+              return true;
+            } else {
+              return false;
+            }
+          });
+          self.list = res.data.data;
+        }
+      });
+    },
+    getReSectionList(chapterId, courseId, moduleId) {
+      let self = this;
+      this.$api
+        .reSectionList({
+          chapterId: chapterId,
+          gradeId: this.gradeId,
+          courseId: courseId,
+          rebuild: 1,
+          moduleId: moduleId,
+        })
+        .then((res) => {
+          if (res.data.code == 200) {
+            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) {
+                item.tryListen = true;
+              }
+            }
+            let newArr = res.data.data.filter((item) => {
+              console.log(item);
+              return item.type != 2;
+            });
+            this.canLearn = newArr.every((item) => {
+              console.log(item);
+              if (item.learning == 1) {
+                return true;
+              } else {
+                return false;
+              }
+            });
+            self.list = res.data.data;
+          }
+        });
+    },
+    getBuySectionList(chapterId, courseId, moduleId) {
+      let self = this;
+      this.$api
+        .reSectionList({
+          chapterId: chapterId,
+          gradeId: this.gradeId,
+          courseId: courseId,
+          moduleId: moduleId,
+        })
+        .then((res) => {
+          if (res.data.code == 200) {
+            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) {
+                item.tryListen = true;
+              }
+            }
+            let newArr = res.data.data.filter((item) => {
+              return item.type != 2;
+            });
+            this.canLearn = newArr.every((item) => {
+              console.log(item);
+              if (item.learning == 1) {
+                return true;
+              } else {
+                return false;
+              }
+            });
+            self.list = res.data.data;
+          }
+        });
+    },
+  },
+  computed: { ...mapGetters(["goodsAuditionConfigIdList", "chapterOpen"]) },
 };
 </script>
 
 <style scoped>
-
-	.tagRe{
-		width: 80rpx;
-		height: 28rpx;
-		background: #FF3B30;
-		border-radius: 8rpx;
-		font-size: 20rpx;
-		color: #FFFFFF;
-		text-align: center;
-	}
-	.tagGreen{
-		width: 80rpx;
-		height: 28rpx;
-		background: #34C759;
-		border-radius: 8rpx;
-		font-size: 20rpx;
-		color: #FFFFFF;
-		text-align: center;
-	}
-	.eTag{
-		width: 56rpx;
-		height: 28rpx;
-		background: #007AFF;
-		border-radius: 8rpx;
-		color: #FFFFFF;
-		font-size: 20rpx;
-		text-align: center;
-		line-height: 28rpx;
-	}
-	.examBox{
-		display: flex;
-		align-items: center;
-		justify-content: space-between;
-	}
-	.exam{
-		display: flex;
-		align-items: center;
-		margin: 20rpx 0;
-	}
-	.icon_up{
-		width: 24rpx;
-		height: 24rpx;
-	}
-.title{
-	font-size: 30rpx;
-	font-family: PingFang SC;
-	font-weight: bold;
-	color: #666666;
-	white-space:nowrap;
-	overflow:hidden;
-	text-overflow:ellipsis; 
-	margin-bottom:30rpx;
+.tagRe {
+  width: 80rpx;
+  height: 28rpx;
+  background: #ff3b30;
+  border-radius: 8rpx;
+  font-size: 20rpx;
+  color: #ffffff;
+  text-align: center;
+}
+.tagGreen {
+  width: 80rpx;
+  height: 28rpx;
+  background: #34c759;
+  border-radius: 8rpx;
+  font-size: 20rpx;
+  color: #ffffff;
+  text-align: center;
+}
+.eTag {
+  width: 56rpx;
+  height: 28rpx;
+  background: #007aff;
+  border-radius: 8rpx;
+  color: #ffffff;
+  font-size: 20rpx;
+  text-align: center;
+  line-height: 28rpx;
+}
+.examBox {
+  display: flex;
+  align-items: center;
+  justify-content: space-between;
+}
+.exam {
+  display: flex;
+  align-items: center;
+  margin: 20rpx 0;
+}
+.icon_up {
+  width: 24rpx;
+  height: 24rpx;
+}
+.title {
+  font-size: 30rpx;
+  font-family: PingFang SC;
+  font-weight: bold;
+  color: #666666;
+  white-space: nowrap;
+  overflow: hidden;
+  text-overflow: ellipsis;
+  margin-bottom: 30rpx;
 }
 </style>

+ 219 - 184
pages2/wd/course.vue

@@ -1,210 +1,245 @@
 <template>
-	<view style="padding: 30rpx;">
-		<nav-bar title="所有课程"></nav-bar>
-		<view v-if="!courseList.length">
-			<u-empty text="暂无课程" mode="list"></u-empty>
-		</view>
-		<view v-else @click="jump(item,index)" v-for="(item, index) in courseList" :key="index" style="margin-bottom: 30rpx;">
-			<view class="class_item">
-				<image :src="$method.splitImgHost(item.coverUrl, true)" style="height: 316rpx;width: 100%;border-radius: 24rpx;"></image>
-				<view style="color: #333333;font-weight: bold;font-size: 32rpx;">{{ item.courseName }}</view>
-			</view>
-			<view class="bottomBox">
-				<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 height="22" :show-percent="false" active-color="#ff9900" :percent="(item.stuAllNum / item.secAllNum) * 100"></u-line-progress></view>
-					<view><u-button type="warning" size="mini">进入学习</u-button></view>
-				</view>
-			</view>
-		</view>
-	</view>
+  <view style="padding: 30rpx">
+    <nav-bar title="所有课程"></nav-bar>
+    <view v-if="!courseList.length">
+      <u-empty text="暂无课程" mode="list"></u-empty>
+    </view>
+    <view
+      v-else
+      @click="jump(item, index)"
+      v-for="(item, index) in courseList"
+      :key="index"
+      style="margin-bottom: 30rpx"
+    >
+      <view class="class_item">
+        <image
+          :src="$method.splitImgHost(item.coverUrl, true)"
+          style="height: 316rpx; width: 100%; border-radius: 24rpx"
+        ></image>
+        <view style="color: #333333; font-weight: bold; font-size: 32rpx">{{
+          item.courseName
+        }}</view>
+      </view>
+      <view class="bottomBox">
+        <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
+              height="22"
+              :show-percent="false"
+              active-color="#ff9900"
+              :percent="(item.stuAllNum / item.secAllNum) * 100"
+            ></u-line-progress
+          ></view>
+          <view
+            ><u-button
+              type="warning"
+              size="mini"
+              @click.stop="jump(item, index)"
+              >进入学习</u-button
+            ></view
+          >
+        </view>
+      </view>
+    </view>
+  </view>
 </template>
 
 <script>
 export default {
-	data() {
-		return {
-			goodsId: 0,
-			gradeId:0,
-			courseList: [],
-			orderGoodsId:0,
-			param:{
-				pageNum: 1,
-				pageSize: 10,
-				total: 0
-			},
-			businessData:{},
-			itemIndex:''
-		};
-	},
-	onLoad(option) {
-		this.goodsId = Number(option.id);
-		this.gradeId = Number(option.gid)
-		this.orderGoodsId = Number(option.orderGoodsId)
-		// uni.setStorageSync('courseGoodsId', this.goodsId);
-		this.courseCourseList();
-		this.$store.getters.dictObj
-	},
-	onShow(){
-		if(this.itemIndex !== '') {
-			this.refreshByIndex();
-		}
-	},
-	onReachBottom() {
-		if (this.courseList.length < this.param.total) {
-			this.param.pageNum++;
-			this.courseCourseList();
-		}
-	},
-	methods: {
-		/**
-		 * 返回刷新之前进入的课程数据
-		 */
-		refreshByIndex() {
-			this.$api.courseCourseList({
-				pageNum: this.itemIndex+1,
-				pageSize: 1,
-				goodsId:this.goodsId,
-				gradeId:this.gradeId
-			}).then(res => {
-				if (res.data.code == 200) {
-					this.$set(this.courseList,this.itemIndex,res.data.rows[0])
-				}
-			});
-		},
-		/**
-		 * 获取业务层次详情
-		 */
-		courseBusiness(businessId){
-			this.$api.courseBusiness(businessId).then(res => {
-				this.businessData = res.data.data;
-			})
-		},
-		jump(item,index) {
-			this.itemIndex = index;
-			
-			if(index == 0) {
-				if(item.rebuild === 0) {  //未重修
-					this.$navTo.togo('/pages2/learn/details', {
-						id: item.courseId,
-						gradeId:item.gradeId,
-						goodsId: this.goodsId
-					});
-					return;
-				}
-				 this.$navTo.togo('/pages3/polyv/detail', {
-					id: item.courseId,
-					goodsId: this.goodsId,
-					orderGoodsId:this.orderGoodsId
-				}); 
-			} else {
-				if(this.businessData.goodsLearningOrder == 2) { //学习顺序是从头到尾学习,没学完上一课不能学习下一课
-					let prevItem = this.courseList[index-1];  //上一课
-					if( (prevItem.stuAllNum+prevItem.recordNum) == (prevItem.secAllNum+prevItem.examNum) ) {
-						if(item.rebuild === 0) {  //未重修
-							this.$navTo.togo('/pages2/learn/details', {
-								id: item.courseId,
-								gradeId:item.gradeId,
-								goodsId: this.goodsId
-							});
-							return;
-						}
-						 this.$navTo.togo('/pages3/polyv/detail', {
-							id: item.courseId,
-							goodsId: this.goodsId,
-							orderGoodsId:this.orderGoodsId
-						}); 
-					} else {
-						uni.showToast({
-							icon:'none',
-							title:'请按顺序学完上一课再学习这一课'
-						})
-					}
-				} else {
-					if(item.rebuild === 0) {  //未重修
-						this.$navTo.togo('/pages2/learn/details', {
-							id: item.courseId,
-							gradeId:item.gradeId,
-							goodsId: this.goodsId
-						});
-						return;
-					}
-					 this.$navTo.togo('/pages3/polyv/detail', {
-						id: item.courseId,
-						goodsId: this.goodsId,
-						orderGoodsId:this.orderGoodsId
-					}); 
-				}
-			}
-			
-		},
-		courseCourseList() {
-			let self = this;
-			this.param.goodsId =this.goodsId
-			this.param.gradeId = this.gradeId
-			this.$api.courseCourseList(this.param).then(res => {
-				if (res.data.code == 200) {
-					self.courseList.push.apply(self.courseList, res.data.rows);
-					self.param.total = res.data.total;
-					
-					if(res.data.rows.length) {
-						this.courseBusiness(res.data.rows[0].businessId)
-					}
-				}
-			});
-		},
-		appointment() {
-			this.$navTo.togo('/pages2/appointment/index');
-		}
-	}
+  data() {
+    return {
+      goodsId: 0,
+      gradeId: 0,
+      courseList: [],
+      orderGoodsId: 0,
+      param: {
+        pageNum: 1,
+        pageSize: 10,
+        total: 0,
+      },
+      businessData: {},
+      itemIndex: "",
+    };
+  },
+  onLoad(option) {
+    this.goodsId = Number(option.id);
+    this.gradeId = Number(option.gid);
+    this.orderGoodsId = Number(option.orderGoodsId);
+    // uni.setStorageSync('courseGoodsId', this.goodsId);
+    this.courseCourseList();
+    this.$store.getters.dictObj;
+  },
+  onShow() {
+    if (this.itemIndex !== "") {
+      this.refreshByIndex();
+    }
+  },
+  onReachBottom() {
+    if (this.courseList.length < this.param.total) {
+      this.param.pageNum++;
+      this.courseCourseList();
+    }
+  },
+  methods: {
+    /**
+     * 返回刷新之前进入的课程数据
+     */
+    refreshByIndex() {
+      this.$api
+        .courseCourseList({
+          pageNum: this.itemIndex + 1,
+          pageSize: 1,
+          goodsId: this.goodsId,
+          gradeId: this.gradeId,
+        })
+        .then((res) => {
+          if (res.data.code == 200) {
+            this.$set(this.courseList, this.itemIndex, res.data.rows[0]);
+          }
+        });
+    },
+    /**
+     * 获取业务层次详情
+     */
+    courseBusiness(businessId) {
+      this.$api.courseBusiness(businessId).then((res) => {
+        this.businessData = res.data.data;
+      });
+    },
+    jump(item, index) {
+      this.itemIndex = index;
+
+      if (index == 0) {
+        if (item.rebuild === 0) {
+          //未重修
+          this.$navTo.togo("/pages2/learn/details", {
+            id: item.courseId,
+            gradeId: item.gradeId,
+            goodsId: this.goodsId,
+          });
+          return;
+        }
+        this.$navTo.togo("/pages3/polyv/detail", {
+          id: item.courseId,
+          goodsId: this.goodsId,
+          orderGoodsId: this.orderGoodsId,
+        });
+      } else {
+        if (this.businessData.goodsLearningOrder == 2) {
+          //学习顺序是从头到尾学习,没学完上一课不能学习下一课
+          let prevItem = this.courseList[index - 1]; //上一课
+          if (
+            prevItem.stuAllNum + prevItem.recordNum ==
+            prevItem.secAllNum + prevItem.examNum
+          ) {
+            if (item.rebuild === 0) {
+              //未重修
+              this.$navTo.togo("/pages2/learn/details", {
+                id: item.courseId,
+                gradeId: item.gradeId,
+                goodsId: this.goodsId,
+              });
+              return;
+            }
+            this.$navTo.togo("/pages3/polyv/detail", {
+              id: item.courseId,
+              goodsId: this.goodsId,
+              orderGoodsId: this.orderGoodsId,
+            });
+          } else {
+            uni.showToast({
+              icon: "none",
+              title: "请按顺序学完上一课再学习这一课",
+            });
+          }
+        } else {
+          if (item.rebuild === 0) {
+            //未重修
+            this.$navTo.togo("/pages2/learn/details", {
+              id: item.courseId,
+              gradeId: item.gradeId,
+              goodsId: this.goodsId,
+            });
+            return;
+          }
+          this.$navTo.togo("/pages3/polyv/detail", {
+            id: item.courseId,
+            goodsId: this.goodsId,
+            orderGoodsId: this.orderGoodsId,
+          });
+        }
+      }
+    },
+    courseCourseList() {
+      let self = this;
+      this.param.goodsId = this.goodsId;
+      this.param.gradeId = this.gradeId;
+      this.$api.courseCourseList(this.param).then((res) => {
+        if (res.data.code == 200) {
+          self.courseList.push.apply(self.courseList, res.data.rows);
+          self.param.total = res.data.total;
+
+          if (res.data.rows.length) {
+            this.courseBusiness(res.data.rows[0].businessId);
+          }
+        }
+      });
+    },
+    appointment() {
+      this.$navTo.togo("/pages2/appointment/index");
+    },
+  },
 };
 </script>
 <style>
 page {
-	background: #eaeef1;
+  background: #eaeef1;
 }
 </style>
 <style scope>
 .box_progress {
-	display: flex;
-	justify-content: space-between;
-	align-items: center;
-	margin-top: 20rpx;
+  display: flex;
+  justify-content: space-between;
+  align-items: center;
+  margin-top: 20rpx;
 }
 .bottomBox {
-	background: #ffffff;
-	width: 94%;
-	border-bottom-left-radius: 24rpx;
-	border-bottom-right-radius: 24rpx;
-	margin: 0 auto;
-	padding: 20rpx;
+  background: #ffffff;
+  width: 94%;
+  border-bottom-left-radius: 24rpx;
+  border-bottom-right-radius: 24rpx;
+  margin: 0 auto;
+  padding: 20rpx;
 }
 .content_box {
-	display: flex;
-	align-items: center;
-	color: #999999;
-	margin-top: 8rpx;
+  display: flex;
+  align-items: center;
+  color: #999999;
+  margin-top: 8rpx;
 }
 .content {
-	color: #000000;
-	margin: 0 8rpx;
+  color: #000000;
+  margin: 0 8rpx;
 }
 .wk_icon {
-	width: 24rpx;
-	height: 24rpx;
-	margin-right: 8rpx;
+  width: 24rpx;
+  height: 24rpx;
+  margin-right: 8rpx;
 }
 
 .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;
+  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;
 }
 </style>

+ 2630 - 2295
pages3/polyv/detail.vue

@@ -1,2473 +1,2808 @@
 <template>
-	<view  class="polyv_detail">
-		<nav-bar :title="detail.courseName || '课程详情'" v-show="navShow"></nav-bar>
-		<view id="top">
-			<view class="video_box" v-if="!startStatus">
-				<image :src="$method.splitImgHost(detail.coverUrl)" mode="widthFix" style="width: 100%;height: 460rpx;"></image>
-				<image v-if="false" class="video_play" src="/static/play.png" @click="startVideo"></image>
-			</view>
-			<view v-else>
-				<view   class="video_box" style="width: 100%;height: 460rpx;" v-if="playVID">
-					<polyv-player
-						id="playerVideo"
-						playerId="playerVideo"
-						height="460rpx"
-						:vid="vid"
-						:showSettingBtn="true"
-						:enablePlayGesture="true"
-						:custom-cache="false"
-						:object-fit="'contain'"
-						@statechange="onStateChange"
-						@fullscreenchange="fullscreenchange"
-						@error="playError"
-						:autoplay="autoplay"
-						:isAllowSeek="isAllowSeek"
-						:playbackRate="playbackRate"
-						:startTime="startTime"
-						:enableAutoRotation="enableAutoRotation"
-					></polyv-player>
-					<cover-view class="video-toast__close" v-if="videoToastShow" @click="closeToast()">X</cover-view>
-					<cover-view class="video-toast" v-if="videoToastShow">
-						<cover-view class="video-toast__text">您上次看到 {{seekTime}},正在自动续播</cover-view>
-						<cover-view class="video-toast__btn" @click="restart()">从头播放</cover-view>
-					</cover-view>
-				</view>
-				<view class="video_box" style="width: 100%;height: 460rpx;" v-if="playChannelId>0">
-				  <player
-				    class="plv-mp-demo-player"
-				    :videoOption="videoOption"
-					@onLiveStatusChange="playerLiveStatusChange"
-				  />
-				</view> 
-			</view>
-			
-			<view>
-				<u-row>
-					<u-col span="10">
-						<view class="video_t1">{{ detail.courseName }}</view>
-					</u-col>
-					<u-col span="2" >
-						<div class="notice_wrap" v-if="goodsData.buyNote">
-							<view class="video_t1_t" @click="studyNotice">
-								学员须知
-							</view>
-						</div>
-					</u-col>
-				</u-row>
-			</view>
-			<u-line color="#D6D6DB" />
-			<view>
-				<view><u-tabs gutter="0" :item-width="itemWidth()" :list="list" font-size="32" bar-width="24" :current="current" @change="change" active-color="#007AFF"></u-tabs></view>
-			</view>
-			<u-line color="#D6D6DB" />
-		</view>
-		<view class="box">
-			<scroll-view class="box_in" scroll-y="true">
-				<!--目录 -->
-				<view v-show="current == 0">
-					<view class="menuBox" v-for="(item, index) in menuList" :key="index">
-						<!--模块 -->
-						<view v-if="item.type == 1"><courseModule :sectionMaxNum="goodsData.sectionMaxNum" :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 :sectionMaxNum="goodsData.sectionMaxNum" :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 :sectionMaxNum="goodsData.sectionMaxNum" @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>
-				<!--讲义 -->
-				<view v-show="current == 1">
-					<view class="lecture-box" v-if="courseHandoutsData">
-						<view class="title">
-							{{courseHandoutsData.handoutsName}}
-							<!-- 这是后台配置的讲义标题过长省略这是后台配置的讲义标题过长省略 -->
-						</view>
-						<view class="btn" @click="openDocument">
-							<u-icon name="download" color="#007AFF" size="40"></u-icon>
-						</view>
-					</view>
-					
-					<view style="text-align: center;" v-else>暂无讲义</view>
-					<!-- <view class="lecture-content">
+  <view class="polyv_detail">
+    <nav-bar
+      :title="detail.courseName || '课程详情'"
+      v-show="navShow"
+    ></nav-bar>
+    <view id="top">
+      <view class="video_box" v-if="!startStatus">
+        <image
+          :src="$method.splitImgHost(detail.coverUrl)"
+          mode="widthFix"
+          style="width: 100%; height: 460rpx"
+        ></image>
+        <image
+          v-if="false"
+          class="video_play"
+          src="/static/play.png"
+          @click="startVideo"
+        ></image>
+      </view>
+      <view v-else>
+        <view
+          class="video_box"
+          style="width: 100%; height: 460rpx"
+          v-if="playVID"
+        >
+          <polyv-player
+            id="playerVideo"
+            playerId="playerVideo"
+            height="460rpx"
+            :vid="vid"
+            :showSettingBtn="true"
+            :enablePlayGesture="true"
+            :custom-cache="false"
+            :object-fit="'contain'"
+            @statechange="onStateChange"
+            @fullscreenchange="fullscreenchange"
+            @error="playError"
+            :autoplay="autoplay"
+            :isAllowSeek="isAllowSeek"
+            :playbackRate="playbackRate"
+            :startTime="startTime"
+            :enableAutoRotation="enableAutoRotation"
+          ></polyv-player>
+          <cover-view
+            class="video-toast__close"
+            v-if="videoToastShow"
+            @click="closeToast()"
+            >X</cover-view
+          >
+          <cover-view class="video-toast" v-if="videoToastShow">
+            <cover-view class="video-toast__text"
+              >您上次看到 {{ seekTime }},正在自动续播</cover-view
+            >
+            <cover-view class="video-toast__btn" @click="restart()"
+              >从头播放</cover-view
+            >
+          </cover-view>
+        </view>
+        <view
+          class="video_box"
+          style="width: 100%; height: 460rpx"
+          v-if="playChannelId > 0"
+        >
+          <player
+            class="plv-mp-demo-player"
+            :videoOption="videoOption"
+            @onLiveStatusChange="playerLiveStatusChange"
+          />
+        </view>
+      </view>
+
+      <view>
+        <u-row>
+          <u-col span="10">
+            <view class="video_t1">{{ detail.courseName }}</view>
+          </u-col>
+          <u-col span="2">
+            <div class="notice_wrap" v-if="goodsData.buyNote">
+              <view class="video_t1_t" @click="studyNotice"> 学员须知 </view>
+            </div>
+          </u-col>
+        </u-row>
+      </view>
+      <u-line color="#D6D6DB" />
+      <view>
+        <view
+          ><u-tabs
+            gutter="0"
+            :item-width="itemWidth()"
+            :list="list"
+            font-size="32"
+            bar-width="24"
+            :current="current"
+            @change="change"
+            active-color="#007AFF"
+          ></u-tabs
+        ></view>
+      </view>
+      <u-line color="#D6D6DB" />
+    </view>
+    <view class="box">
+      <scroll-view class="box_in" scroll-y="true">
+        <!--目录 -->
+        <view v-show="current == 0">
+          <view class="menuBox" v-for="(item, index) in menuList" :key="index">
+            <!--模块 -->
+            <view v-if="item.type == 1"
+              ><courseModule
+                :sectionMaxNum="goodsData.sectionMaxNum"
+                :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
+                :sectionMaxNum="goodsData.sectionMaxNum"
+                :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
+                :sectionMaxNum="goodsData.sectionMaxNum"
+                @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>
+        <!--讲义 -->
+        <view v-show="current == 1">
+          <view class="lecture-box" v-if="courseHandoutsData">
+            <view class="title">
+              {{ courseHandoutsData.handoutsName }}
+              <!-- 这是后台配置的讲义标题过长省略这是后台配置的讲义标题过长省略 -->
+            </view>
+            <view class="btn" @click="openDocument">
+              <u-icon name="download" color="#007AFF" size="40"></u-icon>
+            </view>
+          </view>
+
+          <view style="text-align: center" v-else>暂无讲义</view>
+          <!-- <view class="lecture-content">
 						<rich-text :nodes="'讲义内容讲义内容讲义内容讲义内容讲义内容讲义内容讲义内容讲义内容讲义内容讲义内容讲义内容讲义内容讲义内容讲义内容讲义内容讲义内容讲义内容讲义内容讲义内容讲义内容讲义内容讲义内容讲义内容讲义内容讲义内容讲义内容讲义内容讲义内容讲义内容讲义内容讲义内容讲义内容讲义内容讲义内容讲义内容讲义内容讲义内容讲义内容讲义内容讲义内容讲义内容讲义内容讲义内容讲义内容讲义内容讲义内容讲义内容讲义内容讲义内容讲义内容讲义内容讲义内容讲义内容讲义内容讲义内容讲义内容讲义内容讲义内容讲义内容讲义内容讲义内容讲义内容讲义内容讲义内容讲义内容讲义内容讲义内容讲义内容讲义内容讲义内容讲义内容讲义内容讲义内容讲义内容讲义内容讲义内容讲义内容'"></rich-text>
 					</view> -->
-					
-				<!-- 	<view class="inputBottom">
+
+          <!-- 	<view class="inputBottom">
 						<view style="width: 10%;"><image src="/static/icon/note3.png" style="width: 39rpx;height: 39rpx;margin:0 29rpx;"></image></view>
 						<view style="width: 73%;height: 100%;padding: 10rpx 0;">
 							<u-input class="input" height="60" fixed="true" placeholder="您可以在这里输入笔记内容" type="textarea" :custom-style="inputStyle" v-model="noteValue" />
 						</view>
 						<view style="color: #007AFF;font-size: 30rpx;font-weight: bold;width: 15%;text-align: center;" @click="postNote">提交</view>
 					</view> -->
-					
-				</view>
-				<!--笔记 -->
-				<view v-show="current == 2">
-					<view v-if="noteList.length == 0" style="text-align: center;">暂无笔记</view>
-					<view class="inputBottom" v-if="!(isPlayRebuild > 0)">
-						<view style="width: 10%;"><image src="/static/icon/note3.png" style="width: 39rpx;height: 39rpx;margin:0 29rpx;"></image></view>
-						<view style="width: 73%;height: 100%;padding: 10rpx 0;">
-							<u-input class="input" height="60" fixed="true" placeholder="您可以在这里输入笔记内容" type="input" :custom-style="inputStyle" v-model="noteValue" />
-						</view>
-						<view style="color: #007AFF;font-size: 30rpx;font-weight: bold;width: 15%;text-align: center;" @click="postNote">提交</view>
-					</view>
-					<view v-for="(item, index) in noteList" :key="index">
-						<view class="dateBox">{{ $method.timestampToTime(item.dateNote) }}</view>
-						<view class="noteBox">
-							<view v-for="(item1, index1) in item.userNotes" :key="index1" style="margin-top: 30rpx;" @click="jumpNote(item1)">
-								<view style="display: flex;">
-									<view>
-										<view>
-											<image src="/static/icon/note2.png" v-if="noteId != item1.noteId" style="width: 39rpx;height: 39rpx;margin:0 29rpx;"></image>
-											<image src="/static/icon/note1.png" v-if="noteId == item1.noteId" style="width: 39rpx;height: 39rpx;margin:0 29rpx;"></image>
-										</view>
-										<view class="title" style="width: 39rpx;height: 39rpx;margin:0 29rpx;">{{ $method.secondToDate(item1.noteSecond) }}</view>
-									</view>
-									<view style="margin-left: 10rpx;">
-										<view class="t2Content leftPadding">{{ item1.sectionName }}</view>
-										<view class="tBox2">{{ item1.noteText }}</view>
-									</view>
-								</view>
-							</view>
-						</view>
-					</view>
-				</view>
-				<!--答疑 -->
-				<view v-show="current == 3">
-					<view class="inputBottom">
-						<view class="flex_auto">
-							<u-input height="60" fixed="true" :placeholder="placeholder" type="input" :custom-style="inputStyle" v-model="ctxValue" />
-						</view>
-						<view class="btn" @click="postContent">提交</view>
-					</view>
-					<view v-for="(item, index) in answerList" :key="index" style="background-color: #FFFFFF;margin-bottom: 20rpx;">
-						<view class="chat_box" @click.stop="clearCtx">
-							<view style="display: flex;flex:1;">
-								<view><image :src="item.assignUserId > 0 && !item.realname  ? '/static/logo_xcx.png' :$method.splitImgHost(item.avatar)" style="width: 64rpx;height: 64rpx;"></image></view>
-								<view style="margin-left: 15rpx;">
-									<view class="chat1">{{ item.assignUserId > 0 && !item.realname ? '祥粤老师' : item.realname }}</view>
-									<view class="chat2">{{ $method.timestampToTime(item.createTime,false) }}</view>
-									<view class="chat3">
-										<text v-if="item.assignUserId > 0">回复</text>
-										<text v-if="item.assignUserId > 0" style="color: #007AFF;">@{{ item.assignRealname }}</text>
-										<view style="word-break: break-all;">{{ item.answerText }}</view>
-									</view>
-								</view>
-							</view>
-							<view class="btnReply" @click.stop="replyContent(item)" v-if="item.userId != userInfo.userId">回复</view>
-							<view v-else class="btnDel" @click.stop="delContent(item)">删除</view>
-						</view>
-						<u-line color="#D6D6DB" />
-					</view>
-					<view v-if="answerList.length == 0" style="text-align: center;">暂无记录</view>
-				</view>
-				<!--目录 -->
-				<view v-show="current == 4" >
-					<view class="menuBox" v-for="(item, index) in reMenuList" :key="index">
-						<!--模块 -->
-						<view v-if="item.type == 1"><courseModule :sectionMaxNum="goodsData.sectionMaxNum" :courseId="courseId" :goodsId="goodsId" :gradeId="gradeId" :isRebuild="true" :isBuy="true" :menuItem="item" :levelId="item.menuId"></courseModule></view>
-						<!--章 -->
-						<view v-if="item.type == 2">
-							<courseChapter :courseId="courseId" :sectionMaxNum="goodsData.sectionMaxNum" @playEnd="sectionPlayEnd($event,index)" :gradeId="gradeId" :goodsId="goodsId" :isRebuild="true" :isBuy="true" :menuItem="item" :levelId="'0-' + item.menuId"></courseChapter>			
-						</view>
-						<!--节 -->
-						<view v-if="item.type == 3">
-							<courseSection :courseId="courseId" :sectionMaxNum="goodsData.sectionMaxNum" @playEnd="sectionPlayEnd($event,index)" :gradeId="gradeId" :goodsId="goodsId" :isRebuild="true" :isBuy="true" :nextMenuItem="findMenuNextSection(index)"  :menuItem="item" :levelId="'0-0-' + item.menuId"></courseSection>
-						</view>
-					</view>
-				</view>
-			</scroll-view>
-			
-		</view>
-		<!-- 播放前拍照end -->
-		<u-popup v-model="showSet" :mask-close-able="false" mode="center" border-radius="24">
-			<view style="align-items:center;padding: 0 40rpx;display: flex;flex-direction: column;justify-content:center;">
-				<view style="font-weight: bold;color: #333333;font-size: 30rpx;margin-top: 30rpx;">温馨提示</view>
-				<view style="width: 457rpx;color: #666666;font-size: 30rpx;margin-top: 30rpx;">学习过程中需要拍照验证学员身份,
-拍照功能需要使用您的相机。
-是否授权使用?</view>
-				<view style="margin: 40rpx 0;">
-					<button open-type="openSetting" @bindopensetting="openSetting" class="btnSet">去授权</button>
-				</view>
-			</view>
-		</u-popup>
-		
-		<u-mask :show="photoPopup" >
-		<!-- 播放前拍照start -->
-		<view v-if="photoPopup"  :mask-close-able="false" style="bottom: 0;position: fixed;width: 100%;z-index: 999;">
-			<view class="photoBox">
-				<view class="photoTop">
-					<view class="sqzz" v-if="false"><u-icon name="close" color="#333333" size="30" @click="closePhoto"></u-icon></view>
-					<view class="centersq">请正视手机屏幕</view>
-					<view class="sqzz"></view>
-				</view>
-				<view class="photoCenter">
-					<view style="width: 100%; height: 979rpx;position: fixed;" v-if="photoPopup && isTaking">
-						<camera device-position="front" flash="off" @error="error" style="width: 100%; height: 100%;" ></camera>
-					</view>
-					<view class="custom" v-if="!isTaking" ><image :src="avatarUrl" mode=""></image></view>
-				</view>
-				<view class="btns">
-					<view class="btnResult" v-if="isTaking" @click="takePhoto">拍照</view>
-					<view class="btnResult" v-if="!isTaking" @click="reTake">重拍</view>
-					<view class="btnResult" v-if="!isTaking" @click="submit">确认</view>
-				</view>
-				
-			</view>
-		</view>
+        </view>
+        <!--笔记 -->
+        <view v-show="current == 2">
+          <view v-if="noteList.length == 0" style="text-align: center"
+            >暂无笔记</view
+          >
+          <view class="inputBottom" v-if="!(isPlayRebuild > 0)">
+            <view style="width: 10%"
+              ><image
+                src="/static/icon/note3.png"
+                style="width: 39rpx; height: 39rpx; margin: 0 29rpx"
+              ></image
+            ></view>
+            <view style="width: 73%; height: 100%; padding: 10rpx 0">
+              <u-input
+                class="input"
+                height="60"
+                fixed="true"
+                placeholder="您可以在这里输入笔记内容"
+                type="input"
+                :custom-style="inputStyle"
+                v-model="noteValue"
+              />
+            </view>
+            <view
+              style="
+                color: #007aff;
+                font-size: 30rpx;
+                font-weight: bold;
+                width: 15%;
+                text-align: center;
+              "
+              @click="postNote"
+              >提交</view
+            >
+          </view>
+          <view v-for="(item, index) in noteList" :key="index">
+            <view class="dateBox">{{
+              $method.timestampToTime(item.dateNote)
+            }}</view>
+            <view class="noteBox">
+              <view
+                v-for="(item1, index1) in item.userNotes"
+                :key="index1"
+                style="margin-top: 30rpx"
+                @click="jumpNote(item1)"
+              >
+                <view style="display: flex">
+                  <view>
+                    <view>
+                      <image
+                        src="/static/icon/note2.png"
+                        v-if="noteId != item1.noteId"
+                        style="width: 39rpx; height: 39rpx; margin: 0 29rpx"
+                      ></image>
+                      <image
+                        src="/static/icon/note1.png"
+                        v-if="noteId == item1.noteId"
+                        style="width: 39rpx; height: 39rpx; margin: 0 29rpx"
+                      ></image>
+                    </view>
+                    <view
+                      class="title"
+                      style="width: 39rpx; height: 39rpx; margin: 0 29rpx"
+                      >{{ $method.secondToDate(item1.noteSecond) }}</view
+                    >
+                  </view>
+                  <view style="margin-left: 10rpx">
+                    <view class="t2Content leftPadding">{{
+                      item1.sectionName
+                    }}</view>
+                    <view class="tBox2">{{ item1.noteText }}</view>
+                  </view>
+                </view>
+              </view>
+            </view>
+          </view>
+        </view>
+        <!--答疑 -->
+        <view v-show="current == 3">
+          <view class="inputBottom">
+            <view class="flex_auto">
+              <u-input
+                height="60"
+                fixed="true"
+                :placeholder="placeholder"
+                type="input"
+                :custom-style="inputStyle"
+                v-model="ctxValue"
+              />
+            </view>
+            <view class="btn" @click="postContent">提交</view>
+          </view>
+          <view
+            v-for="(item, index) in answerList"
+            :key="index"
+            style="background-color: #ffffff; margin-bottom: 20rpx"
+          >
+            <view class="chat_box" @click.stop="clearCtx">
+              <view style="display: flex; flex: 1">
+                <view
+                  ><image
+                    :src="
+                      item.assignUserId > 0 && !item.realname
+                        ? '/static/logo_xcx.png'
+                        : $method.splitImgHost(item.avatar)
+                    "
+                    style="width: 64rpx; height: 64rpx"
+                  ></image
+                ></view>
+                <view style="margin-left: 15rpx">
+                  <view class="chat1">{{
+                    item.assignUserId > 0 && !item.realname
+                      ? "祥粤老师"
+                      : item.realname
+                  }}</view>
+                  <view class="chat2">{{
+                    $method.timestampToTime(item.createTime, false)
+                  }}</view>
+                  <view class="chat3">
+                    <text v-if="item.assignUserId > 0">回复</text>
+                    <text v-if="item.assignUserId > 0" style="color: #007aff"
+                      >@{{ item.assignRealname }}</text
+                    >
+                    <view style="word-break: break-all">{{
+                      item.answerText
+                    }}</view>
+                  </view>
+                </view>
+              </view>
+              <view
+                class="btnReply"
+                @click.stop="replyContent(item)"
+                v-if="item.userId != userInfo.userId"
+                >回复</view
+              >
+              <view v-else class="btnDel" @click.stop="delContent(item)"
+                >删除</view
+              >
+            </view>
+            <u-line color="#D6D6DB" />
+          </view>
+          <view v-if="answerList.length == 0" style="text-align: center"
+            >暂无记录</view
+          >
+        </view>
+        <!--目录 -->
+        <view v-show="current == 4">
+          <view
+            class="menuBox"
+            v-for="(item, index) in reMenuList"
+            :key="index"
+          >
+            <!--模块 -->
+            <view v-if="item.type == 1"
+              ><courseModule
+                :sectionMaxNum="goodsData.sectionMaxNum"
+                :courseId="courseId"
+                :goodsId="goodsId"
+                :gradeId="gradeId"
+                :isRebuild="true"
+                :isBuy="true"
+                :menuItem="item"
+                :levelId="item.menuId"
+              ></courseModule
+            ></view>
+            <!--章 -->
+            <view v-if="item.type == 2">
+              <courseChapter
+                :courseId="courseId"
+                :sectionMaxNum="goodsData.sectionMaxNum"
+                @playEnd="sectionPlayEnd($event, index)"
+                :gradeId="gradeId"
+                :goodsId="goodsId"
+                :isRebuild="true"
+                :isBuy="true"
+                :menuItem="item"
+                :levelId="'0-' + item.menuId"
+              ></courseChapter>
+            </view>
+            <!--节 -->
+            <view v-if="item.type == 3">
+              <courseSection
+                :courseId="courseId"
+                :sectionMaxNum="goodsData.sectionMaxNum"
+                @playEnd="sectionPlayEnd($event, index)"
+                :gradeId="gradeId"
+                :goodsId="goodsId"
+                :isRebuild="true"
+                :isBuy="true"
+                :nextMenuItem="findMenuNextSection(index)"
+                :menuItem="item"
+                :levelId="'0-0-' + item.menuId"
+              ></courseSection>
+            </view>
+          </view>
+        </view>
+      </scroll-view>
+    </view>
+    <!-- 播放前拍照end -->
+    <u-popup
+      v-model="showSet"
+      :mask-close-able="false"
+      mode="center"
+      border-radius="24"
+    >
+      <view
+        style="
+          align-items: center;
+          padding: 0 40rpx;
+          display: flex;
+          flex-direction: column;
+          justify-content: center;
+        "
+      >
+        <view
+          style="
+            font-weight: bold;
+            color: #333333;
+            font-size: 30rpx;
+            margin-top: 30rpx;
+          "
+          >温馨提示</view
+        >
+        <view
+          style="
+            width: 457rpx;
+            color: #666666;
+            font-size: 30rpx;
+            margin-top: 30rpx;
+          "
+          >学习过程中需要拍照验证学员身份, 拍照功能需要使用您的相机。
+          是否授权使用?</view
+        >
+        <view style="margin: 40rpx 0">
+          <button
+            open-type="openSetting"
+            @bindopensetting="openSetting"
+            class="btnSet"
+          >
+            去授权
+          </button>
+        </view>
+      </view>
+    </u-popup>
+
+    <u-mask :show="photoPopup">
+      <!-- 播放前拍照start -->
+      <view
+        v-if="photoPopup"
+        :mask-close-able="false"
+        style="bottom: 0; position: fixed; width: 100%; z-index: 999"
+      >
+        <view class="photoBox">
+          <view class="photoTop">
+            <view class="sqzz" v-if="false"
+              ><u-icon
+                name="close"
+                color="#333333"
+                size="30"
+                @click="closePhoto"
+              ></u-icon
+            ></view>
+            <view class="centersq">请正视手机屏幕</view>
+            <view class="sqzz"></view>
+          </view>
+          <view class="photoCenter">
+            <view
+              style="width: 100%; height: 979rpx; position: fixed"
+              v-if="photoPopup && isTaking"
+            >
+              <camera
+                device-position="front"
+                flash="off"
+                @error="error"
+                style="width: 100%; height: 100%"
+              ></camera>
+            </view>
+            <view class="custom" v-if="!isTaking"
+              ><image :src="avatarUrl" mode=""></image
+            ></view>
+          </view>
+          <view class="btns">
+            <view class="btnResult" v-if="isTaking" @click="takePhoto"
+              >拍照</view
+            >
+            <view class="btnResult" v-if="!isTaking" @click="reTake">重拍</view>
+            <view class="btnResult" v-if="!isTaking" @click="submit">确认</view>
+          </view>
+        </view>
+      </view>
+    </u-mask>
 
-		</u-mask>
-		
-		<u-popup v-model="noticeShow" class="notice_modal"  mode="center"  border-radius="14"  width="700rpx" height="900rpx">
-			<div class="content">
-				
-				<scroll-view scroll-y="true" style="height: 100%;">
-					<view class="title">学员须知</view>
-					<text class="text">
-						{{goodsData.buyNote}}
-					</text>
-				</scroll-view>
-			</div>
-			
-		</u-popup>
-	</view>
-	
+    <u-popup
+      v-model="noticeShow"
+      class="notice_modal"
+      mode="center"
+      border-radius="14"
+      width="700rpx"
+      height="900rpx"
+    >
+      <div class="content">
+        <scroll-view scroll-y="true" style="height: 100%">
+          <view class="title">学员须知</view>
+          <text class="text">
+            {{ goodsData.buyNote }}
+          </text>
+        </scroll-view>
+      </div>
+    </u-popup>
+  </view>
 </template>
 
 <script>
-import plv from '../static/polyv-sdk/index';
-import courseModule from '@/components/course/courseModule.vue';
-import courseChapter from '@/components/course/courseChapter.vue';
-import courseSection from '@/components/course/courseSection.vue';
-import { websocket } from '@/common/socket.js';
-import { mapGetters, mapMutations } from 'vuex';
+import plv from "../static/polyv-sdk/index";
+import courseModule from "@/components/course/courseModule.vue";
+import courseChapter from "@/components/course/courseChapter.vue";
+import courseSection from "@/components/course/courseSection.vue";
+import { websocket } from "@/common/socket.js";
+import { mapGetters, mapMutations } from "vuex";
 export default {
-	components: {
-		courseModule,
-		courseChapter,
-		courseSection
-	},
-	data() {
-		return {
-			orderGoodsId:0,
-			noticeShow:false,
-			navShow:true,
-			enableAutoRotation:true,
-			seekTime:'',
-			toastTimer:null,
-			videoToastShow:false,
-			initLiveOk:false,
-			livePlay:false, //是否正在播放直播,不含暂停
-			liveDuration:0, //直播观看时长
-			videoOption:{
-				mode: 'live',
-				uid: '',
-				cid: '',
-				openId: '',
-				isAutoChange: false,
-				forceVideo: false, 
-			},
-			courseHandoutsData:'',
-			liveDetail:{},
-			showSet:false,
-			startStatus: false,
-			detail: {},
-			courseId: 0,
-			placeholder: '您可以在这里输入笔记内容\n还可以点击左侧图标为笔记加上时间标记',
-			inputStyle: {
-				background: 'rgba(244, 244, 244, 0.98)',
-				borderRadius: '24rpx',
-				padding: '8rpx',
-				marginBottom: '10rpx'
-			},
-			list: [],
-			menuList: [],
-			current: 0,
-			vid: '',
-			goodsId: 0,
-			goodsData: {},
-			photoPopup: false,
-			goodsPlayConfig: null,
-			autoplay: false,
-			isAllowSeek: 'no',
-			playbackRate: [1.0],
-			timer: null,
-			answerTimer:null,
-			goodsPhotographConfig: null,
-			intervalTimeList: [], // 间隔拍照时长
-			intervalTimeIndex: 0, //当前处于哪个时间段拍照
-			playTime: 0, //页面播放时长,不含暂停
-			currentTime: 0,
-			avatarUrl: '',
-			ossAvatarUrl: '',
-			studyDuration: 0, // 当前视频时长
-			gradeId: 0,
-			chapterId: 0,
-			moduleId: 0,
-			reMenuList: [],
-			answerList: [],
-			assignUserId: 0,
-			placeholder: '您可以在这里输入答疑内容',
-			ctxValue: '',
-			noteList: [],
-			noteValue: '',
-			noteId: 0,
-			recordObj: 0,
-			gradeDetail:{},
-			isTaking:true, //是否正在拍照
-			needSeek: false, //第一次播放是否需要跳转
-			needProfileModal:false, //是否需要资料审核弹框
-			liveObj:{},
-			photoNum:0,
-			photoList:[], //拍照的时间点
-			photoConfig:false, //是否配置好拍照次数
-			photoIndex:0, //当前位于拍照的区间下标 从0开始
-			photoHistoryList:[], //已拍照历史的下标点
-			sectionItem:null,
-			businessData:{},
-			showNotes:true,
-			menuIndex:[],
-			uploadLock:false, //上传图片
-			isPlayRebuild:false, //是否正在播放重修视频
-			isRebuild:false, //视频是否从重修目录点击
-		};
-	},
-	computed: { ...mapGetters(['userInfo', 'playSectionId','playChannelId','playVID']) },
-	onLoad(option) {
-		this.courseId = Number(option.id);
-		this.goodsId = Number(option.goodsId);
-		this.orderGoodsId = Number(option.orderGoodsId)
-		this.courseDetail();
-		this.getGoodsDetail();
-		this.getAnswerList();
-		this.answerTimer = setInterval(() => {
-			this.getAnswerList();
-		},5000)
-		let noteSecond = Number(option.noteSecond);
-		if(noteSecond>0){
-			//我的消息跳过来,播放节
-			let item = {
-				sectionId:Number(option.sectionId),
-				recordingUrl:option.recordingUrl,
-				noteSecond:noteSecond,
-				studyDuration:noteSecond
-			}
-			let playNextId = `moduleId${option.moduleId}chapterId${option.chapterId}sectionId${option.sectionId}${option.isRebuild?'isRebuild':''}`;
-			this.$store.commit('setPlaySectionId', {playSectionId  :item.sectionId});
-			this.$store.commit('setPlayVID', {playVID  :item.recordingUrl});
-			this.$store.commit('updatePlayNextId',playNextId)
-			console.log('this.playNoteVideo')
-		}
-		
-	},
-	onShow() {
-		var self = this;
-		//相机授权
-		this.getCameraSetting()
-		this.$api.getbaseprofiletplists({ goodsId: self.goodsId }).then(res => {
-			console.log(res,'res')
-			if (res.data.code === 200 && res.data.rows.length) {
-				if (res.data.rows[0].keyValue) {
-					self.$api.getbaseprofiletpId(self.goodsId).then(baseRes => {
-						if(baseRes.data.code === 200) {
-							if(baseRes.data.data) {
-								self.$api.getbaseprofiletpgetInfo({ goodsId: self.goodsId,orderGoodsId:self.orderGoodsId }).then(result => {
-									console.log(result,'result')
-									if (result.data.code === 200) {
-										if (!result.data.data || (result.data.data.status === 3 && result.data.data.changeStatus === 1)) {								
-											if (!result.data.data) {
-												self.needProfileModal = true
-												uni.showModal({
-													content: '请前往填写资料',
-													cancelText: '返回',
-													success: function(resultst) {
-														if (resultst.confirm) {
-															self.$navTo.togo('/pages2/verify/input', {
-																id: self.goodsId,
-																orderGoodsId:self.orderGoodsId,
-																gradeId:self.gradeId
-															});
-														}
-														if (resultst.cancel) {
-															uni.navigateBack();
-														}
-													}
-												});
-											} else {
-												self.needProfileModal = true
-												uni.showModal({
-													content: '资料审核不通过,请前往重新填写',
-													cancelText: '返回',
-													success: function(resultst) {
-														if (resultst.confirm) {
-															self.$navTo.togo('/pages2/verify/input', {
-																id: self.goodsId,
-																orderGoodsId:self.orderGoodsId,
-																gradeId:self.gradeId
-															});
-														}
-														if (resultst.cancel) {
-															uni.navigateBack();
-														}
-													}
-												});
-											}
-										} else if (result.data.data.status === 1 && JSON.parse(res.data.rows[0].keyValue2)[0]) {
-											self.$api.getbaseprofileStampgetInfo({ goodsId: self.goodsId,orderGoodsId:self.orderGoodsId }).then(k => {
-												
-												if (k.data.code === 200) {
-													if (!k.data.data || (k.data.data.status === 3 && k.data.data.changeStatus === 1)) {
-														if (!k.data.data) {
-															self.needProfileModal = true
-															uni.showModal({
-																cancelText: '返回',
-																content: '请前往填写盖章资料',
-																success: function(resultst) {
-																	if (resultst.confirm) {
-																		self.$navTo.togo('/pages2/verify/input2', {
-																			id: self.goodsId,
-																			orderGoodsId:self.orderGoodsId,
-																			gradeId:self.gradeId
-																		});
-																	}
-																	if (resultst.cancel) {
-																		uni.navigateBack();
-																	}
-																}
-															});
-														} else {
-															self.needProfileModal = true
-															uni.showModal({
-																cancelText: '返回',
-																content: '资料盖章审核不通过,请前往重新填写',
-																success: function(resultst) {
-																	if (resultst.confirm) {
-																		self.$navTo.togo('/pages2/verify/input2', {
-																			id: self.goodsId,
-																			orderGoodsId:self.orderGoodsId,
-																			gradeId:self.gradeId
-																		});
-																	}
-																	if (resultst.cancel) {
-																		uni.navigateBack();
-																	}
-																}
-															});
-														}
-													}
-												}
-											});
-										}
-									}
-								});
-							}
-						}
-					})
-					
-				}
-			}
-		});
-		console.log(this.gradeId,7512)
-		if(this.gradeId>0){
-			//提交完资料返回判断是否已开班
-			
-			this.getGradeInfo()
-		}
-	},
-	onUnload() {
-		if (this.playSectionId > 0) {
-			//退出提交记录
-			this.postStudyRecord();
-		}
-		//清除正在播放的节ID
-		this.$store.commit('setPlaySectionId', { playSectionId: 0 });
-		this.$store.commit('setPlayChannelId', { playChannelId: 0 });
-		this.$store.commit('setPlayVID', { playVID: null });
-		this.closePlv()
-		console.log('onUnload')
-		//移除所有的事件监听器
-		uni.$off();
-		clearInterval(this.answerTimer)
-		if (this.timer) {
-			clearInterval(this.timer);
-		}
-		websocket.sendMsg('delAction')
-	},
-	mounted() {
-		uni.$on('changeSection', oldSectionId => {
-			console.log(this.playVID)
-			this.photoConfig = false
-			this.photoIndex = 0
-			var polyvPlayerContext = this.selectComponent('#playerVideo');
-			if(polyvPlayerContext){
-				//解决同个节视频切换问题
-				polyvPlayerContext.seek(0)
-				polyvPlayerContext.pause();
-			}
-			//清除直播
-			this.$store.commit('setPlayChannelId', { playChannelId: 0 });
-			this.postStudyRecord(0, oldSectionId);
-		});
-		uni.$on('getSection', item => {
-			//清除直播
-			this.isPlayRebuild = item.rebuild
-			this.photoConfig = false
-			this.photoIndex = 0
-			this.sectionItem = item;
-			this.$store.commit('setPlayChannelId', { playChannelId: 0 });
-			//获取拍照历史
-			this.getPhotoLastRecord()
-			this.playVideo(item);
-		});
-		uni.$on('levelId', item => {
-			let arr = item.split('-');
-			//点击节获取的各层级ID
-			this.moduleId = arr[0];
-			this.chapterId = arr[1];
-		});
-		uni.$on('getChannel', item => {
-			//清除录播
-			this.$store.commit('setPlayVID', {playVID  :null});
-			this.playChannel(item);
-		});
-		uni.$on('isRebuild',item => {
-			console.log(item)
-			this.isRebuild = item;
-		})
-		this.updateChapterOpen(true)
-	},
-	methods: {
-		 ...mapMutations(['updateChapterOpen']),
-		/**
-		 * 模块大节播放完毕,刷新列表 
-		 */
-		sectionPlayEnd(isRebuild,index) {
-			console.log('sectionPlayEnd')
-			console.log('isRebuild',isRebuild),
-			console.log('index',index)
-			if(this.reMenuList.length>0) {  //有重修目录
-				if(isRebuild.isRebuild) { //从重修点击
-					this.$api.reMenuList({ courseId: this.courseId, rebuild: 1, gradeId: this.gradeId }).then(res => {
-						console.log('Rebuild1')
-						if (res.data.code == 200) {
-							if(res.data.rows.length) {
-								// res.data.rows[index].name = res.data.rows[index].menuName;
-								// this.$set(this.reMenuList,index,res.data.rows[index])
-								for (let i = 0; i < res.data.rows.length; i++) {
-									let item = res.data.rows[i];
-									item.down = true;
-									item.id = item.menuId;
-									item.name = item.menuName;
-								}
-								this.reMenuList = []
-								this.$nextTick(() => {
-									this.reMenuList = res.data.rows;
-									console.log(this.reMenuList,'this.reMenuList1')
-								})
-								
-							} else {
-								this.reMenuList = []
-							}
-							
-							this.$nextTick(() => {
-								if(this.reMenuList.length>0){
-									this.list = [
-										
-										{
-											name: '目录'
-										},
-										{
-											name: '讲义'
-										},
-										{
-											name: '笔记'
-										},
-										{
-											name: '答疑'
-										},
-										{name:'重修目录'}
-									];
-								} else {
-									this.list = [
-										
-										{
-											name: '目录'
-										},
-										{
-											name: '讲义'
-										},
-										{
-											name: '笔记'
-										},
-										{
-											name: '答疑'
-										}
-									];
-									if(this.current == 4) {
-										this.current = 0;
-									}
-									
-								}
-							})
-							
-							
-						}
-					});
-					
-					this.$api.reMenuList({ courseId: this.courseId, gradeId: this.gradeId }).then(res => {
-						console.log('noRebuild1')
-						if (res.data.code == 200) {
-							for (let i = 0; i < res.data.rows.length; i++) {
-								let item = res.data.rows[i];
-								item.down = true;
-								item.id = item.menuId;
-								item.name = item.menuName;
-								item.menuType = item.type;
-							}
-							this.menuList = []
-							this.$nextTick(() => {
-								this.menuList = res.data.rows;
-							})
-							
-						}
-					});
-				} else {  //从普通目录点击
-					this.$api.reMenuList({ courseId: this.courseId, gradeId: this.gradeId }).then(res => {
-						console.log('noRebuild2')
-						if (res.data.code == 200) {
-							res.data.rows[index].name = res.data.rows[index].menuName;
-							res.data.rows[index].id = res.data.rows[index].menuId;
-							this.$set(this.menuList,index,res.data.rows[index])
-						}
-					});
-					
-					this.$api.reMenuList({ courseId: this.courseId, rebuild: 1, gradeId: this.gradeId }).then(res => {
-						console.log('Rebuild2')
-						if (res.data.code == 200) {
-							for (let i = 0; i < res.data.rows.length; i++) {
-								let item = res.data.rows[i];
-								item.down = true;
-								item.id = item.menuId;
-								item.name = item.menuName;
-							}
-							this.reMenuList = []
-							this.$nextTick(() => {
-								this.reMenuList = res.data.rows;
-								if(this.reMenuList.length>0){
-									this.list = [
-										
-										{
-											name: '目录'
-										},
-										{
-											name: '讲义'
-										},
-										{  
-											name: '笔记'
-										},
-										{
-											name: '答疑'
-										},
-										{name:'重修目录'}
-									];
-								} else {
-									this.list = [
-										
-										{
-											name: '目录'
-										},
-										{
-											name: '讲义'
-										},
-										{
-											name: '笔记'
-										},
-										{
-											name: '答疑'
-										}
-									];
-									if(this.current == 4) {
-										this.current = 0;
-									}
-								}
-							})
-							
-						}
-					});
-				}
-				
-			} else { //没有重修目录
-				this.$api.reMenuList({ courseId: this.courseId, gradeId: this.gradeId }).then(res => {
-						console.log('noRebuild3')
-						console.log('noRebuild3index',index)
-					if (res.data.code == 200) {
-						res.data.rows[index].name = res.data.rows[index].menuName;
-						res.data.rows[index].id = res.data.rows[index].menuId;
-						this.$set(this.menuList,index,res.data.rows[index])
-					}
-				});
-				
-				
-			}
-			
-			
-			
-		},
-		/**
-		 * 获取业务层次详情
-		 */
-		courseBusiness(){
-			this.$api.courseBusiness(this.goodsData.businessId).then(res => {
-				this.businessData = res.data.data;
-			})
-		},
-		/**
-		 * 计算tabs宽度
-		 */
-		itemWidth() {
-			return 100/this.list.length + '%'
-		},
-		/**
-		 * 获取讲义权限
-		 */
-		courseHandouts() {
-			this.$api.courseHandouts(this.goodsData.handoutsId).then(res => {
-				this.courseHandoutsData = res.data.data
-			})
-		},
-		findMenuNextSection(index){
-			for(let i=index+1;i<this.reMenuList.length;i++){
-				let item = this.reMenuList[i]
-				if(item.type==3){
-					return item;
-				}
-			}
-			return {}
-		},
-		getPhotoLastRecord() {
-			let self = this;
-			let data = {
-				sectionId: parseInt(self.playSectionId),
-				goodsId: parseInt(self.goodsId),
-				courseId: parseInt(self.courseId),
-				gradeId: parseInt(self.gradeId),
-				chapterId: parseInt(self.chapterId),
-				moduleId: parseInt(self.moduleId)}
-				this.$api.getPhotoLastRecord(data).then(res => {
-					if(res.data.code==200){
-						//清空历史数据
-						self.photoHistoryList = []
-						this.photoIndex = 0 
-						self.photoList = []
-						for(let i=0;i<res.data.data.length;i++){
-							//-2存储随机拍照数组
-							 if(res.data.data[i].photoIndex==-2){
-								 self.photoList = res.data.data[i].timeInterval.split(',')
-							 }else{
-								 self.photoHistoryList.push(res.data.data[i].photoIndex)
-							 }
-						}
-						
-						
-					}
-					
-				});
-			
-		},
-		//postTime 只提交随机时间
-		postCoursePhotoRecord(postTime=false) {
-			return new Promise((resolve,reject) => {
-				
-				let currentTime = 0;
-				var polyvPlayerContext = this.selectComponent('#playerVideo');
-				if (polyvPlayerContext) {
-					currentTime = polyvPlayerContext.getCurrentTime();
-				}
-				let self = this;
-				let photoIndex = self.photoIndex
-				let data = {
-					photo: self.ossAvatarUrl,
-					sectionId: parseInt(self.playSectionId),
-					goodsId: parseInt(self.goodsId),
-					courseId: parseInt(self.courseId),
-					photoTime: parseInt(currentTime > 0 ? currentTime : 0),
-					gradeId: parseInt(self.gradeId),
-					photoIndex: postTime?-2:parseInt(photoIndex),//从0算起,-2只提交随机时间
-					photoNum:parseInt(self.photoNum),
-					chapterId: parseInt(self.chapterId),
-					moduleId: parseInt(self.moduleId),
-					timeInterval: postTime?self.photoList.join(','):''
-				};
-				console.log('提交接口', data);
-				this.$api.coursePhotoRecord(data).then(res => {
-					if(res.data.code == 200) {
-						resolve()
-					} else {
-						reject()
-					}
-				}).catch(err => {
-					reject()
-				});
-			})
-		},
-		randomNum(minNum,maxNum){ 
-		    switch(arguments.length){ 
-		        case 1: 
-		            return parseInt(Math.random()*minNum+1,10); 
-		        break; 
-		        case 2: 
-		            return parseInt(Math.random()*(maxNum-minNum+1)+minNum,10); 
-		        break; 
-		            default: 
-		                return 0; 
-		            break; 
-		    } 
-		},
-		//配置随机拍照时间
-		configPhoto(){
-			var polyvPlayerContext = this.selectComponent('#playerVideo');
-			let totalVideoTime = polyvPlayerContext.getDuration()
-			let duration = polyvPlayerContext.getCurrentTime()
-			let photoNum = this.photoNum
-			if(!this.photoConfig){
-				this.photoConfig = true
-				// let  spaceTime = Math.floor(totalVideoTime/photoNum) //拍照时间区间
-				// if(spaceTime<5){//区间小于5秒
-				// 	photoNum = Math.floor(totalVideoTime/5)
-				// 	spaceTime = 5
-				// }
-				// if(photoNum<1){
-				// 	photoNum = 1 //只要设置,至少拍一次
-				// 	spaceTime = totalVideoTime
-				// }
-				// let initSpace = 0
-				//没有历史拍照间隔数据
-				if(this.photoList.length==0){
-					if(totalVideoTime >= 900) { //大于15分钟
-						if(photoNum == 1) { //开头拍1张
-							this.photoList.push(1)
-						} else if(photoNum == 3){ //拍3张
-							this.photoList.push(1) //开头拍一张
-							let centerTime = Math.floor(totalVideoTime / 2); //获取中间时间
-							let centerMinTime = centerTime-300; //前后5分钟
-							let centerMaxTime = centerTime+300;
-							let centerTakeTime = this.randomNum(centerMinTime,centerMaxTime)
-							this.photoList.push(centerTakeTime) //中间拍一张
-							let endMaxTime = totalVideoTime - 60;
-							let endMinTime = totalVideoTime - 300;
-							let endTakeTime = this.randomNum(endMinTime,endMaxTime)
-							this.photoList.push(endTakeTime) //最后拍一张
-						}
-					} else { //小于15分钟,只拍前后各一张
-						if(photoNum == 1) { //开头拍1张
-							this.photoList.push(1)
-						} else if(photoNum == 3){ //拍2张
-							this.photoList.push(1) //开头拍一张
-							let endMaxTime = totalVideoTime - 60;
-							let endMinTime = totalVideoTime - 300;
-							let endTakeTime = this.randomNum(endMinTime,endMaxTime)
-							this.photoList.push(endTakeTime) //最后拍一张
-						}
-					}
-					// for(let i=0;i<photoNum;i++){
-					// 	let s = this.randomNum(initSpace,initSpace+spaceTime)
-					// 	if(s>totalVideoTime){
-					// 		s = totalVideoTime-1
-					// 	}
-					// 	if(s<=5){
-					// 		s =5 //避免出现5秒内拍照时间
-					// 	}
-					// 	this.photoList.push(s)
-					// 	initSpace+=spaceTime
-					// }
-					console.log(this.photoList,"随机拍照时间数组11",photoNum)
-					this.postCoursePhotoRecord(true)//提交随机拍照时间数组
-				}
-				console.log(this.photoList,"随机拍照时间数组")
-				//兼容已有观看历史
-				for(let i=0;i<this.photoList.length-1;i++){
-					if(this.photoList[i]<duration&&this.photoList[i+1]>duration){
-						this.photoIndex = i+1
-		//				console.log("我的修改了photoIndex")
-						break
-					}
-					if(duration>this.photoList[this.photoList.length-1]){
-						this.photoIndex = this.photoList.length-1 //取最后一个下标
-		//				console.log("我的修改了photoIndex")
-						break
-					}
-				}
-			}
-		},
-		getLiveUid(channelId) {
-			let self = this;
-			return new Promise(resolve => {
-				let data = {
-					channelId: channelId
-				};
-				self.$api.polyvSign(data).then(res => {
-					resolve(res.data.data);
-				});
-			});
-		},
-		timeEventLiving() {
-			if (plv != null) {
-				if(this.livePlay){
-					this.liveDuration = this.liveDuration +1 //每隔1秒
-					if(this.liveDuration==2){ //直播第2秒拍照
-						if(this.goodsPhotographConfig.livephotograph==1 && this.channelItem.learning != 1){
-							//开启直播拍照
-							
-							this.openPhoto();
-						}
-					}
-				}
-				
-			}
-		},
-		playerLiveStatusChange(e) {
-		    const status = e.detail.status;
-			console.log('直播状态',status);
-		    if (status === 'live') {
-		      console.log('开始直播');
-			  //开始播放
-			  if (this.timer) {
-			  	clearInterval(this.timer);
-			  }
-			  this.livePlay = true
-			  this.timer = setInterval(this.timeEventLiving, 1000); //定时器
-		    }
-		    if (status === 'end') {
-				if(this.livePlay){
-					//只有播放过的结束才提交,避免未开播触发结束
-					this.postStudyRecord(1);
-				}
-				 console.log('结束直播');
-				this.livePlay = false
-		      // 未开始
-		     
-			  
-		    }
-		},
-		closePlv(){
-			if(plv){
-				plv.destroy();
-			}
-			
-		},
-		playChannel(item){
-			if (this.timer) {
-				clearInterval(this.timer);
-			}
-			this.startStatus = true
-			this.initLive()
-		},
-		setLiveOption(status) {
-			    const { userId, channelId, recordFileSimpleModel, playbackEnabled } = this.detail;
-			    const playRecordFile = playbackEnabled && recordFileSimpleModel && status === 'end';
-			
-			    this.videoOption = { 
-					mode: 'live',
-					uid: this.liveObj.uid, //this.playChannelId  egsxlptzdq
-					cid: this.playChannelId,
-					openId: this.userInfo.userAccount,
-					isAutoChange: false,
-					forceVideo: false, 
-				  }
-	},
-		async initLive(){
-			console.log(this.playChannelId,7111)
-			this.liveObj = await this.getLiveUid(this.playChannelId);
-			this.initLiveOk = true
-			let optionsData = {}
-			optionsData.mode = 'live';
-			optionsData.forceVideo = false;
-		    optionsData.channelId = this.playChannelId; // 频道ID '2553128'
-		    optionsData.openId = this.userInfo.userAccount; // 用户openId  this.userInfo.userAccount 'oQ5eX5BCtSjkE1ct8CzvxGWgh0hQ'
-		    optionsData.userId = this.liveObj.uid  // 2.0.0及以上版本的demo需要使用 userId 设置学员唯一id 'egsxlptzdq' 
-			let self = this
-			this.closePlv()
-			plv.init(optionsData)
-			  .then(({ detail, chat }) => {
-			    self.liveDetail = detail
-			
-			    // 设置mode为live的videoOption
-					this.setLiveOption();
-			    if (detail.isPPT) {
-			      chat.on(chat.events.SLICESTART, () => {
-			        // 开始直播
-			      });
-			    } else {
-			      plv.api.getOrdinaryLiveStatus(detail.stream);
-			    }
-			  });
-		},
-		openSetting(res){
-			console.log(res,98)
-		},
-		getCameraSetting () {
-		    const self = this
-		    wx.getSetting({
-		      success: res => {
-		        if (res.authSetting['scope.camera']) {
-		          // 用户已经授权
-		           self.showSet = false
-		        } else {
-		          // 用户还没有授权,向用户发起授权请求
-		          wx.authorize({
-		            scope: 'scope.camera',
-		            success() { // 用户同意授权
-		              self.showSet = false
-		            },
-		            fail() { // 用户不同意授权
-		             self.showSet = true
-		             /* wx.showToast({
+  components: {
+    courseModule,
+    courseChapter,
+    courseSection,
+  },
+  data() {
+    return {
+      orderGoodsId: 0,
+      noticeShow: false,
+      navShow: true,
+      enableAutoRotation: true,
+      seekTime: "",
+      toastTimer: null,
+      videoToastShow: false,
+      initLiveOk: false,
+      livePlay: false, //是否正在播放直播,不含暂停
+      liveDuration: 0, //直播观看时长
+      videoOption: {
+        mode: "live",
+        uid: "",
+        cid: "",
+        openId: "",
+        isAutoChange: false,
+        forceVideo: false,
+      },
+      courseHandoutsData: "",
+      liveDetail: {},
+      showSet: false,
+      startStatus: false,
+      detail: {},
+      courseId: 0,
+      placeholder:
+        "您可以在这里输入笔记内容\n还可以点击左侧图标为笔记加上时间标记",
+      inputStyle: {
+        background: "rgba(244, 244, 244, 0.98)",
+        borderRadius: "24rpx",
+        padding: "8rpx",
+        marginBottom: "10rpx",
+      },
+      list: [],
+      menuList: [],
+      current: 0,
+      vid: "",
+      goodsId: 0,
+      goodsData: {},
+      photoPopup: false,
+      goodsPlayConfig: null,
+      autoplay: false,
+      isAllowSeek: "no",
+      playbackRate: [1.0],
+      timer: null,
+      answerTimer: null,
+      goodsPhotographConfig: null,
+      intervalTimeList: [], // 间隔拍照时长
+      intervalTimeIndex: 0, //当前处于哪个时间段拍照
+      playTime: 0, //页面播放时长,不含暂停
+      currentTime: 0,
+      avatarUrl: "",
+      ossAvatarUrl: "",
+      studyDuration: 0, // 当前视频时长
+      gradeId: 0,
+      chapterId: 0,
+      moduleId: 0,
+      reMenuList: [],
+      answerList: [],
+      assignUserId: 0,
+      placeholder: "您可以在这里输入答疑内容",
+      ctxValue: "",
+      noteList: [],
+      noteValue: "",
+      noteId: 0,
+      recordObj: 0,
+      gradeDetail: {},
+      isTaking: true, //是否正在拍照
+      needSeek: false, //第一次播放是否需要跳转
+      needProfileModal: false, //是否需要资料审核弹框
+      liveObj: {},
+      photoNum: 0,
+      photoList: [], //拍照的时间点
+      photoConfig: false, //是否配置好拍照次数
+      photoIndex: 0, //当前位于拍照的区间下标 从0开始
+      photoHistoryList: [], //已拍照历史的下标点
+      sectionItem: null,
+      businessData: {},
+      showNotes: true,
+      menuIndex: [],
+      uploadLock: false, //上传图片
+      isPlayRebuild: false, //是否正在播放重修视频
+      isRebuild: false, //视频是否从重修目录点击
+    };
+  },
+  computed: {
+    ...mapGetters(["userInfo", "playSectionId", "playChannelId", "playVID"]),
+  },
+  onLoad(option) {
+    this.courseId = Number(option.id);
+    this.goodsId = Number(option.goodsId);
+    this.orderGoodsId = Number(option.orderGoodsId);
+    this.courseDetail();
+    this.getGoodsDetail();
+    this.getAnswerList();
+    this.answerTimer = setInterval(() => {
+      this.getAnswerList();
+    }, 5000);
+    let noteSecond = Number(option.noteSecond);
+    if (noteSecond > 0) {
+      //我的消息跳过来,播放节
+      let item = {
+        sectionId: Number(option.sectionId),
+        recordingUrl: option.recordingUrl,
+        noteSecond: noteSecond,
+        studyDuration: noteSecond,
+      };
+      let playNextId = `moduleId${option.moduleId}chapterId${
+        option.chapterId
+      }sectionId${option.sectionId}${option.isRebuild ? "isRebuild" : ""}`;
+      this.$store.commit("setPlaySectionId", { playSectionId: item.sectionId });
+      this.$store.commit("setPlayVID", { playVID: item.recordingUrl });
+      this.$store.commit("updatePlayNextId", playNextId);
+      console.log("this.playNoteVideo");
+    }
+  },
+  onShow() {
+    var self = this;
+    //相机授权
+    this.getCameraSetting();
+    this.$api.getbaseprofiletplists({ goodsId: self.goodsId }).then((res) => {
+      console.log(res, "res");
+      if (res.data.code === 200 && res.data.rows.length) {
+        if (res.data.rows[0].keyValue) {
+          self.$api.getbaseprofiletpId(self.goodsId).then((baseRes) => {
+            if (baseRes.data.code === 200) {
+              if (baseRes.data.data) {
+                self.$api
+                  .getbaseprofiletpgetInfo({
+                    goodsId: self.goodsId,
+                    orderGoodsId: self.orderGoodsId,
+                  })
+                  .then((result) => {
+                    console.log(result, "result");
+                    if (result.data.code === 200) {
+                      if (
+                        !result.data.data ||
+                        (result.data.data.status === 3 &&
+                          result.data.data.changeStatus === 1)
+                      ) {
+                        if (!result.data.data) {
+                          self.needProfileModal = true;
+                          uni.showModal({
+                            content: "请前往填写资料",
+                            cancelText: "返回",
+                            success: function (resultst) {
+                              if (resultst.confirm) {
+                                self.$navTo.togo("/pages2/verify/input", {
+                                  id: self.goodsId,
+                                  orderGoodsId: self.orderGoodsId,
+                                  gradeId: self.gradeId,
+                                });
+                              }
+                              if (resultst.cancel) {
+                                uni.navigateBack();
+                              }
+                            },
+                          });
+                        } else {
+                          self.needProfileModal = true;
+                          uni.showModal({
+                            content: "资料审核不通过,请前往重新填写",
+                            cancelText: "返回",
+                            success: function (resultst) {
+                              if (resultst.confirm) {
+                                self.$navTo.togo("/pages2/verify/input", {
+                                  id: self.goodsId,
+                                  orderGoodsId: self.orderGoodsId,
+                                  gradeId: self.gradeId,
+                                });
+                              }
+                              if (resultst.cancel) {
+                                uni.navigateBack();
+                              }
+                            },
+                          });
+                        }
+                      } else if (
+                        result.data.data.status === 1 &&
+                        JSON.parse(res.data.rows[0].keyValue2)[0]
+                      ) {
+                        self.$api
+                          .getbaseprofileStampgetInfo({
+                            goodsId: self.goodsId,
+                            orderGoodsId: self.orderGoodsId,
+                          })
+                          .then((k) => {
+                            if (k.data.code === 200) {
+                              if (
+                                !k.data.data ||
+                                (k.data.data.status === 3 &&
+                                  k.data.data.changeStatus === 1)
+                              ) {
+                                if (!k.data.data) {
+                                  self.needProfileModal = true;
+                                  uni.showModal({
+                                    cancelText: "返回",
+                                    content: "请前往填写盖章资料",
+                                    success: function (resultst) {
+                                      if (resultst.confirm) {
+                                        self.$navTo.togo(
+                                          "/pages2/verify/input2",
+                                          {
+                                            id: self.goodsId,
+                                            orderGoodsId: self.orderGoodsId,
+                                            gradeId: self.gradeId,
+                                          }
+                                        );
+                                      }
+                                      if (resultst.cancel) {
+                                        uni.navigateBack();
+                                      }
+                                    },
+                                  });
+                                } else {
+                                  self.needProfileModal = true;
+                                  uni.showModal({
+                                    cancelText: "返回",
+                                    content:
+                                      "资料盖章审核不通过,请前往重新填写",
+                                    success: function (resultst) {
+                                      if (resultst.confirm) {
+                                        self.$navTo.togo(
+                                          "/pages2/verify/input2",
+                                          {
+                                            id: self.goodsId,
+                                            orderGoodsId: self.orderGoodsId,
+                                            gradeId: self.gradeId,
+                                          }
+                                        );
+                                      }
+                                      if (resultst.cancel) {
+                                        uni.navigateBack();
+                                      }
+                                    },
+                                  });
+                                }
+                              }
+                            }
+                          });
+                      }
+                    }
+                  });
+              }
+            }
+          });
+        }
+      }
+    });
+    console.log(this.gradeId, 7512);
+    if (this.gradeId > 0) {
+      //提交完资料返回判断是否已开班
+
+      this.getGradeInfo();
+    }
+  },
+  onUnload() {
+    if (this.playSectionId > 0) {
+      //退出提交记录
+      this.postStudyRecord();
+    }
+    //清除正在播放的节ID
+    this.$store.commit("setPlaySectionId", { playSectionId: 0 });
+    this.$store.commit("setPlayChannelId", { playChannelId: 0 });
+    this.$store.commit("setPlayVID", { playVID: null });
+    this.closePlv();
+    console.log("onUnload");
+    //移除所有的事件监听器
+    uni.$off();
+    clearInterval(this.answerTimer);
+    if (this.timer) {
+      clearInterval(this.timer);
+    }
+    websocket.sendMsg("delAction");
+  },
+  mounted() {
+    uni.$on("changeSection", (oldSectionId) => {
+      console.log(this.playVID);
+      this.photoConfig = false;
+      this.photoIndex = 0;
+      var polyvPlayerContext = this.selectComponent("#playerVideo");
+      if (polyvPlayerContext) {
+        //解决同个节视频切换问题
+        polyvPlayerContext.seek(0);
+        polyvPlayerContext.pause();
+      }
+      //清除直播
+      this.$store.commit("setPlayChannelId", { playChannelId: 0 });
+      this.postStudyRecord(0, oldSectionId);
+    });
+    uni.$on("getSection", (item) => {
+      //清除直播
+      this.isPlayRebuild = item.rebuild;
+      this.photoConfig = false;
+      this.photoIndex = 0;
+      this.sectionItem = item;
+      this.$store.commit("setPlayChannelId", { playChannelId: 0 });
+      //获取拍照历史
+      this.getPhotoLastRecord();
+      this.playVideo(item);
+    });
+    uni.$on("levelId", (item) => {
+      let arr = item.split("-");
+      //点击节获取的各层级ID
+      this.moduleId = arr[0];
+      this.chapterId = arr[1];
+    });
+    uni.$on("getChannel", (item) => {
+      //清除录播
+      this.$store.commit("setPlayVID", { playVID: null });
+      this.playChannel(item);
+    });
+    uni.$on("isRebuild", (item) => {
+      console.log(item);
+      this.isRebuild = item;
+    });
+    this.updateChapterOpen(true);
+  },
+  methods: {
+    ...mapMutations(["updateChapterOpen"]),
+    /**
+     * 模块大节播放完毕,刷新列表
+     */
+    sectionPlayEnd(isRebuild, index) {
+      console.log("sectionPlayEnd");
+      console.log("isRebuild", isRebuild), console.log("index", index);
+      if (this.reMenuList.length > 0) {
+        //有重修目录
+        if (isRebuild.isRebuild) {
+          //从重修点击
+          this.$api
+            .reMenuList({
+              courseId: this.courseId,
+              rebuild: 1,
+              gradeId: this.gradeId,
+            })
+            .then((res) => {
+              console.log("Rebuild1");
+              if (res.data.code == 200) {
+                if (res.data.rows.length) {
+                  // res.data.rows[index].name = res.data.rows[index].menuName;
+                  // this.$set(this.reMenuList,index,res.data.rows[index])
+                  for (let i = 0; i < res.data.rows.length; i++) {
+                    let item = res.data.rows[i];
+                    item.down = true;
+                    item.id = item.menuId;
+                    item.name = item.menuName;
+                  }
+                  this.reMenuList = [];
+                  this.$nextTick(() => {
+                    this.reMenuList = res.data.rows;
+                    console.log(this.reMenuList, "this.reMenuList1");
+                  });
+                } else {
+                  this.reMenuList = [];
+                }
+
+                this.$nextTick(() => {
+                  if (this.reMenuList.length > 0) {
+                    this.list = [
+                      {
+                        name: "目录",
+                      },
+                      {
+                        name: "讲义",
+                      },
+                      {
+                        name: "笔记",
+                      },
+                      {
+                        name: "答疑",
+                      },
+                      { name: "重修目录" },
+                    ];
+                  } else {
+                    this.list = [
+                      {
+                        name: "目录",
+                      },
+                      {
+                        name: "讲义",
+                      },
+                      {
+                        name: "笔记",
+                      },
+                      {
+                        name: "答疑",
+                      },
+                    ];
+                    if (this.current == 4) {
+                      this.current = 0;
+                    }
+                  }
+                });
+              }
+            });
+
+          this.$api
+            .reMenuList({ courseId: this.courseId, gradeId: this.gradeId })
+            .then((res) => {
+              console.log("noRebuild1");
+              if (res.data.code == 200) {
+                for (let i = 0; i < res.data.rows.length; i++) {
+                  let item = res.data.rows[i];
+                  item.down = true;
+                  item.id = item.menuId;
+                  item.name = item.menuName;
+                  item.menuType = item.type;
+                }
+                this.menuList = [];
+                this.$nextTick(() => {
+                  this.menuList = res.data.rows;
+                });
+              }
+            });
+        } else {
+          //从普通目录点击
+          this.$api
+            .reMenuList({ courseId: this.courseId, gradeId: this.gradeId })
+            .then((res) => {
+              console.log("noRebuild2");
+              if (res.data.code == 200) {
+                res.data.rows[index].name = res.data.rows[index].menuName;
+                res.data.rows[index].id = res.data.rows[index].menuId;
+                this.$set(this.menuList, index, res.data.rows[index]);
+              }
+            });
+
+          this.$api
+            .reMenuList({
+              courseId: this.courseId,
+              rebuild: 1,
+              gradeId: this.gradeId,
+            })
+            .then((res) => {
+              console.log("Rebuild2");
+              if (res.data.code == 200) {
+                for (let i = 0; i < res.data.rows.length; i++) {
+                  let item = res.data.rows[i];
+                  item.down = true;
+                  item.id = item.menuId;
+                  item.name = item.menuName;
+                }
+                this.reMenuList = [];
+                this.$nextTick(() => {
+                  this.reMenuList = res.data.rows;
+                  if (this.reMenuList.length > 0) {
+                    this.list = [
+                      {
+                        name: "目录",
+                      },
+                      {
+                        name: "讲义",
+                      },
+                      {
+                        name: "笔记",
+                      },
+                      {
+                        name: "答疑",
+                      },
+                      { name: "重修目录" },
+                    ];
+                  } else {
+                    this.list = [
+                      {
+                        name: "目录",
+                      },
+                      {
+                        name: "讲义",
+                      },
+                      {
+                        name: "笔记",
+                      },
+                      {
+                        name: "答疑",
+                      },
+                    ];
+                    if (this.current == 4) {
+                      this.current = 0;
+                    }
+                  }
+                });
+              }
+            });
+        }
+      } else {
+        //没有重修目录
+        this.$api
+          .reMenuList({ courseId: this.courseId, gradeId: this.gradeId })
+          .then((res) => {
+            console.log("noRebuild3");
+            console.log("noRebuild3index", index);
+            if (res.data.code == 200) {
+              res.data.rows[index].name = res.data.rows[index].menuName;
+              res.data.rows[index].id = res.data.rows[index].menuId;
+              this.$set(this.menuList, index, res.data.rows[index]);
+            }
+          });
+      }
+    },
+    /**
+     * 获取业务层次详情
+     */
+    courseBusiness() {
+      this.$api.courseBusiness(this.goodsData.businessId).then((res) => {
+        this.businessData = res.data.data;
+      });
+    },
+    /**
+     * 计算tabs宽度
+     */
+    itemWidth() {
+      return 100 / this.list.length + "%";
+    },
+    /**
+     * 获取讲义权限
+     */
+    courseHandouts() {
+      this.$api.courseHandouts(this.goodsData.handoutsId).then((res) => {
+        this.courseHandoutsData = res.data.data;
+      });
+    },
+    findMenuNextSection(index) {
+      for (let i = index + 1; i < this.reMenuList.length; i++) {
+        let item = this.reMenuList[i];
+        if (item.type == 3) {
+          return item;
+        }
+      }
+      return {};
+    },
+    getPhotoLastRecord() {
+      let self = this;
+      let data = {
+        sectionId: parseInt(self.playSectionId),
+        goodsId: parseInt(self.goodsId),
+        courseId: parseInt(self.courseId),
+        gradeId: parseInt(self.gradeId),
+        chapterId: parseInt(self.chapterId),
+        moduleId: parseInt(self.moduleId),
+      };
+      this.$api.getPhotoLastRecord(data).then((res) => {
+        if (res.data.code == 200) {
+          //清空历史数据
+          self.photoHistoryList = [];
+          this.photoIndex = 0;
+          self.photoList = [];
+          for (let i = 0; i < res.data.data.length; i++) {
+            //-2存储随机拍照数组
+            if (res.data.data[i].photoIndex == -2) {
+              self.photoList = res.data.data[i].timeInterval.split(",");
+            } else {
+              self.photoHistoryList.push(res.data.data[i].photoIndex);
+            }
+          }
+        }
+      });
+    },
+    //postTime 只提交随机时间
+    postCoursePhotoRecord(postTime = false) {
+      return new Promise((resolve, reject) => {
+        let currentTime = 0;
+        var polyvPlayerContext = this.selectComponent("#playerVideo");
+        if (polyvPlayerContext) {
+          currentTime = polyvPlayerContext.getCurrentTime();
+        }
+        let self = this;
+        let photoIndex = self.photoIndex;
+        let data = {
+          photo: self.ossAvatarUrl,
+          sectionId: parseInt(self.playSectionId),
+          goodsId: parseInt(self.goodsId),
+          courseId: parseInt(self.courseId),
+          photoTime: parseInt(currentTime > 0 ? currentTime : 0),
+          gradeId: parseInt(self.gradeId),
+          photoIndex: postTime ? -2 : parseInt(photoIndex), //从0算起,-2只提交随机时间
+          photoNum: parseInt(self.photoNum),
+          chapterId: parseInt(self.chapterId),
+          moduleId: parseInt(self.moduleId),
+          timeInterval: postTime ? self.photoList.join(",") : "",
+        };
+        console.log("提交接口", data);
+        this.$api
+          .coursePhotoRecord(data)
+          .then((res) => {
+            if (res.data.code == 200) {
+              resolve();
+            } else {
+              reject();
+            }
+          })
+          .catch((err) => {
+            reject();
+          });
+      });
+    },
+    randomNum(minNum, maxNum) {
+      switch (arguments.length) {
+        case 1:
+          return parseInt(Math.random() * minNum + 1, 10);
+          break;
+        case 2:
+          return parseInt(Math.random() * (maxNum - minNum + 1) + minNum, 10);
+          break;
+        default:
+          return 0;
+          break;
+      }
+    },
+    //配置随机拍照时间
+    configPhoto() {
+      var polyvPlayerContext = this.selectComponent("#playerVideo");
+      let totalVideoTime = polyvPlayerContext.getDuration();
+      let duration = polyvPlayerContext.getCurrentTime();
+      let photoNum = this.photoNum;
+      if (!this.photoConfig) {
+        this.photoConfig = true;
+        // let  spaceTime = Math.floor(totalVideoTime/photoNum) //拍照时间区间
+        // if(spaceTime<5){//区间小于5秒
+        // 	photoNum = Math.floor(totalVideoTime/5)
+        // 	spaceTime = 5
+        // }
+        // if(photoNum<1){
+        // 	photoNum = 1 //只要设置,至少拍一次
+        // 	spaceTime = totalVideoTime
+        // }
+        // let initSpace = 0
+        //没有历史拍照间隔数据
+        if (this.photoList.length == 0) {
+          if (totalVideoTime >= 900) {
+            //大于15分钟
+            if (photoNum == 1) {
+              //开头拍1张
+              this.photoList.push(1);
+            } else if (photoNum == 3) {
+              //拍3张
+              this.photoList.push(1); //开头拍一张
+              let centerTime = Math.floor(totalVideoTime / 2); //获取中间时间
+              let centerMinTime = centerTime - 300; //前后5分钟
+              let centerMaxTime = centerTime + 300;
+              let centerTakeTime = this.randomNum(centerMinTime, centerMaxTime);
+              this.photoList.push(centerTakeTime); //中间拍一张
+              let endMaxTime = totalVideoTime - 60;
+              let endMinTime = totalVideoTime - 300;
+              let endTakeTime = this.randomNum(endMinTime, endMaxTime);
+              this.photoList.push(endTakeTime); //最后拍一张
+            }
+          } else {
+            //小于15分钟,只拍前后各一张
+            if (photoNum == 1) {
+              //开头拍1张
+              this.photoList.push(1);
+            } else if (photoNum == 3) {
+              //拍2张
+              if (totalVideoTime <= 300) {
+                //小于5分钟
+                this.photoList.push(1); //开头拍一张
+                let endTakeTime = this.randomNum(10, totalVideoTime); //中间随机取一张
+                this.photoList.push(endTakeTime);
+              } else {
+                this.photoList.push(1); //开头拍一张
+                let endMaxTime = totalVideoTime - 60;
+                let endMinTime = totalVideoTime - 300;
+                let endTakeTime = this.randomNum(endMinTime, endMaxTime);
+                this.photoList.push(endTakeTime); //最后1-5分钟拍一张
+              }
+            }
+          }
+          // for(let i=0;i<photoNum;i++){
+          // 	let s = this.randomNum(initSpace,initSpace+spaceTime)
+          // 	if(s>totalVideoTime){
+          // 		s = totalVideoTime-1
+          // 	}
+          // 	if(s<=5){
+          // 		s =5 //避免出现5秒内拍照时间
+          // 	}
+          // 	this.photoList.push(s)
+          // 	initSpace+=spaceTime
+          // }
+          console.log(this.photoList, "随机拍照时间数组11", photoNum);
+          this.postCoursePhotoRecord(true); //提交随机拍照时间数组
+        }
+        console.log(this.photoList, "随机拍照时间数组");
+        //兼容已有观看历史
+        for (let i = 0; i < this.photoList.length - 1; i++) {
+          if (
+            this.photoList[i] < duration &&
+            this.photoList[i + 1] > duration
+          ) {
+            this.photoIndex = i + 1;
+            //				console.log("我的修改了photoIndex")
+            break;
+          }
+          if (duration > this.photoList[this.photoList.length - 1]) {
+            this.photoIndex = this.photoList.length - 1; //取最后一个下标
+            //				console.log("我的修改了photoIndex")
+            break;
+          }
+        }
+      }
+    },
+    getLiveUid(channelId) {
+      let self = this;
+      return new Promise((resolve) => {
+        let data = {
+          channelId: channelId,
+        };
+        self.$api.polyvSign(data).then((res) => {
+          resolve(res.data.data);
+        });
+      });
+    },
+    timeEventLiving() {
+      if (plv != null) {
+        if (this.livePlay) {
+          this.liveDuration = this.liveDuration + 1; //每隔1秒
+          if (this.liveDuration == 2) {
+            //直播第2秒拍照
+            if (
+              this.goodsPhotographConfig.livephotograph == 1 &&
+              this.channelItem.learning != 1
+            ) {
+              //开启直播拍照
+
+              this.openPhoto();
+            }
+          }
+        }
+      }
+    },
+    playerLiveStatusChange(e) {
+      const status = e.detail.status;
+      console.log("直播状态", status);
+      if (status === "live") {
+        console.log("开始直播");
+        //开始播放
+        if (this.timer) {
+          clearInterval(this.timer);
+        }
+        this.livePlay = true;
+        this.timer = setInterval(this.timeEventLiving, 1000); //定时器
+      }
+      if (status === "end") {
+        if (this.livePlay) {
+          //只有播放过的结束才提交,避免未开播触发结束
+          this.postStudyRecord(1);
+        }
+        console.log("结束直播");
+        this.livePlay = false;
+        // 未开始
+      }
+    },
+    closePlv() {
+      if (plv) {
+        plv.destroy();
+      }
+    },
+    playChannel(item) {
+      if (this.timer) {
+        clearInterval(this.timer);
+      }
+      this.startStatus = true;
+      this.initLive();
+    },
+    setLiveOption(status) {
+      const { userId, channelId, recordFileSimpleModel, playbackEnabled } =
+        this.detail;
+      const playRecordFile =
+        playbackEnabled && recordFileSimpleModel && status === "end";
+
+      this.videoOption = {
+        mode: "live",
+        uid: this.liveObj.uid, //this.playChannelId  egsxlptzdq
+        cid: this.playChannelId,
+        openId: this.userInfo.userAccount,
+        isAutoChange: false,
+        forceVideo: false,
+      };
+    },
+    async initLive() {
+      console.log(this.playChannelId, 7111);
+      this.liveObj = await this.getLiveUid(this.playChannelId);
+      this.initLiveOk = true;
+      let optionsData = {};
+      optionsData.mode = "live";
+      optionsData.forceVideo = false;
+      optionsData.channelId = this.playChannelId; // 频道ID '2553128'
+      optionsData.openId = this.userInfo.userAccount; // 用户openId  this.userInfo.userAccount 'oQ5eX5BCtSjkE1ct8CzvxGWgh0hQ'
+      optionsData.userId = this.liveObj.uid; // 2.0.0及以上版本的demo需要使用 userId 设置学员唯一id 'egsxlptzdq'
+      let self = this;
+      this.closePlv();
+      plv.init(optionsData).then(({ detail, chat }) => {
+        self.liveDetail = detail;
+
+        // 设置mode为live的videoOption
+        this.setLiveOption();
+        if (detail.isPPT) {
+          chat.on(chat.events.SLICESTART, () => {
+            // 开始直播
+          });
+        } else {
+          plv.api.getOrdinaryLiveStatus(detail.stream);
+        }
+      });
+    },
+    openSetting(res) {
+      console.log(res, 98);
+    },
+    getCameraSetting() {
+      const self = this;
+      wx.getSetting({
+        success: (res) => {
+          if (res.authSetting["scope.camera"]) {
+            // 用户已经授权
+            self.showSet = false;
+          } else {
+            // 用户还没有授权,向用户发起授权请求
+            wx.authorize({
+              scope: "scope.camera",
+              success() {
+                // 用户同意授权
+                self.showSet = false;
+              },
+              fail() {
+                // 用户不同意授权
+                self.showSet = true;
+                /* wx.showToast({
 		                title: '摄像头授权失败',
 		                icon: 'none',
 		                duration: 3000
 		              }) */
-		            }
-		          })
-		        }
-		      },
-		      fail: res => {
-		       
-		       
-		      }
-		    })
-		  },
-		studyNotice(){
-			this.noticeShow = true;
-		},
-		//播放笔记视频
-		async playNoteVideo(item) {
-			console.log(item,'noteItem')
-			if (this.timer) {
-				clearInterval(this.timer);
-			}
-			if (this.vid) {
-				//切换视频
-				var polyvPlayerContext = this.selectComponent('#playerVideo');
-				polyvPlayerContext.changeVid(item.recordingUrl);
-			} else {
-				this.vid = item.recordingUrl;
-			}
-			this.recordObj = {videoCurrentTime:item.noteSecond}
-			if (this.recordObj.videoCurrentTime) {
-				this.needSeek = true; //需要跳转到播放记录
-			}
-			this.startStatus = true;
-			//获取节笔记
-			this.getNoteList();
-		},
-		//正常播放视频
-		async playVideo(item) {
-			console.log(item)
-			if (this.timer) {
-				clearInterval(this.timer);
-			}
-			if (this.vid) {
-				//切换视频
-				var polyvPlayerContext = this.selectComponent('#playerVideo');
-				console.log(polyvPlayerContext,'polyvPlayerContext')
-				polyvPlayerContext.changeVid(item.recordingUrl);
-			} else {
-				this.vid = item.recordingUrl;
-			}
-			this.recordObj = null
-			this.recordObj = await this.getRecordLast();
-			this.needSeek = true; //跳转到播放记录
-			this.startStatus = true;
-			
-			//获取节笔记
-			this.getNoteList();
-		},
-		getRecordLast() {
-			let self = this;
-			return new Promise(resolve => {
-				let data = {
-					gradeId: Number(self.gradeId),
-					goodsId: Number(self.goodsId),
-					sectionId: Number(self.playSectionId),
-					courseId: Number(self.courseId),
-					chapterId: parseInt(self.chapterId),
-					moduleId: parseInt(self.moduleId)
-				};
-				self.$api.recordLast(data).then(res => {
-					resolve(res.data.data);
-				});
-			});
-		},
-		
-		jumpNote(item) {
-			this.noteId = item.noteId;
-			//没视频播放
-			if(this.playSectionId==0){
-				console.log('即将跳到笔记位置1')
-				this.$u.toast('即将跳到笔记位置');  
-				this.$store.commit('setPlaySectionId', {playSectionId  :item.sectionId});
-				this.$store.commit('setPlayVID', {playVID  :item.recordingUrl});
-				this.playNoteVideo(item);
-			}else{
-				//正在看当前笔记视频
-				console.log('即将跳到笔记位置2')
-				this.$u.toast('即将跳到笔记位置');
-				//跳到笔记时刻
-				var polyvPlayerContext = this.selectComponent('#playerVideo');
-				polyvPlayerContext.seek(item.noteSecond);
-				polyvPlayerContext.play();
-			}
-			
-		},
-		postNote() {
-			let self = this;
-			if (!(this.playSectionId > 0)) {
-				this.$u.toast('目前无播放视频');
-				return;
-			}
-			if (!this.noteValue) {
-				this.$u.toast('请输入内容');
-				return;
-			}
-			if(!this.gradeId){
-				this.$u.toast('暂无班级数据');
-				return;
-			}
-			var polyvPlayerContext = this.selectComponent('#playerVideo');
-			let noteDate = this.$method.getZeroTime();
-			let noteSecond = polyvPlayerContext.getCurrentTime();
-			console.log(noteSecond,698)
-			if (!noteSecond) {
-				if(noteSecond==0){
-					//播放结束
-					noteSecond = polyvPlayerContext.getDuration();
-					console.log(noteSecond,63398)
-				}
-				if(!noteSecond){
-					this.$u.toast('视频暂未开始');
-					return;
-				}
-				
-			}
-			let data = {
-				gradeId: this.gradeId,
-				goodsId: this.goodsId,
-				sectionId: this.playSectionId,
-				courseId: this.courseId,
-				noteText: this.noteValue,
-				noteDate: noteDate,
-				noteSecond: noteSecond
-			};
-			this.$api.postNote(data).then(res => {
-				if (res.data.code == 200) {
-					this.$u.toast('发布成功');
-					self.getNoteList();
-					this.noteValue = '';
-				}
-			});
-		},
-		getGradeInfo() {
-			let self = this;
-			this.$store.state.allowLoading = false;
-			this.$api.goodsGradeInfo(this.gradeId).then(res => {
-				if (res.data.code == 200) {
-					self.gradeDetail = res.data.data;
-					if(self.needProfileModal){
-						return
-					}
-					if(self.gradeDetail.learningStatus==2){
-						uni.showModal({
-							showCancel:false,
-							confirmText: '确定',
-							content: '当前课程正在申请中,正式开班后方可进行学习,请耐心等候!',
-							success: function(resultst) {
-								uni.navigateBack();
-							}
-						});
-					}
-					if(self.gradeDetail.learningStatus==3&&(Number(self.gradeDetail.learningTimeStart)>Number((new Date())/1000))){
-						uni.showModal({
-							showCancel:false,
-							cancelText: '返回',
-							content: '当前课程正在申请中,正式开班后方可进行学习,请耐心等候!',
-							success: function(resultst) {
-								uni.navigateBack();
-							}
-						});
-					}
-				}
-			});
-			this.$store.state.allowLoading = true;
-		},
-		getNoteList() {
-			let self = this;
-			self.noteList = [];
-			let data = { courseId: this.courseId, gradeId: this.gradeId, goodsId: this.goodsId }
-			if(this.playSectionId>0){
-				data.sectionId = this.playSectionId
-			}
-			this.$api.noteList(data).then(res => {
-				if (res.data.code == 200) {
-					self.noteList = res.data.rows;
-				}
-			});
-		},
-		delAnswer(answerId) {
-			let self = this;
-			let data = { answerId: answerId, status: -1 };
-			this.$api.delAnswer(data).then(res => {
-				if (res.data.code == 200) {
-					self.getAnswerList();
-				}
-			});
-		},
-		clearCtx() {
-			console.log(4234);
-			this.placeholder = '您可以在这里输入答疑内容';
-			this.ctxValue = '';
-			this.assignUserId = 0;
-		},
-		replyContent(item) {
-			this.assignUserId = item.userId;
-			this.placeholder = '@' + item.realname;
-		},
-		delContent(item) {
-			this.delAnswer(item.answerId);
-		},
-		postAnswer() {
-			let self = this;
-			let data = { courseId: this.courseId, answerText: this.ctxValue, goodsId: this.goodsId };
-			if (this.assignUserId > 0) {
-				data.assignUserId = this.assignUserId;
-			}
-			this.$api.postAnswer(data).then(res => {
-				if (res.data.code == 200) {
-					this.$u.toast('发布成功');
-					self.getAnswerList();
-					this.placeholder = '您可以在这里输入答疑内容';
-					this.ctxValue = '';
-					this.assignUserId = 0;
-				}
-			});
-		},
-		postContent() {
-			if (!this.ctxValue||this.ctxValue=='') {
-				this.$u.toast('请输入内容');
-				return
-			}
-			this.postAnswer();
-		},
-		postStudyRecord(status = 0, sectionId = this.playSectionId) {
-			console.log('status',status)
-			let currentTime = 0;
-			let PlayDuration = 0
-			var polyvPlayerContext = this.selectComponent('#playerVideo');
-			if (polyvPlayerContext) {
-				currentTime = polyvPlayerContext.getCurrentTime(); //总的视频播放时刻
-				PlayDuration = polyvPlayerContext.getVideoPlayDuration();//本次看的时长
-			}
-			if(this.playChannelId>0){
-				currentTime = 2;//直播无法获取,无论开始结束都传2秒
-			}
-			let self = this;
-			let data = {
-				photo: self.ossAvatarUrl,
-				sectionId: parseInt(sectionId),
-				goodsId: parseInt(self.goodsId),
-				courseId: parseInt(self.courseId),
-				studyDuration: parseInt(PlayDuration > 0 ? PlayDuration : self.studyDuration),
-				gradeId: parseInt(self.gradeId),
-				chapterId: parseInt(self.chapterId),
-				moduleId: parseInt(self.moduleId),
-				videoCurrentTime: parseInt(currentTime > 0 ? currentTime : self.studyDuration)
-			};
-			if (status > 0) {
-				console.log(sectionId,'sectionId')
-				data.status = status;
-				
-					
-			}
-			console.log('提交接口', data);
-			this.$api.studyRecord(data).then(res => {
-				if(res.data.code == 200) {
-					
-					if (status > 0) {
-						let moduleId = this.moduleId || 0;
-						let chapterId = this.chapterId || 0;
-						let playNextIdisRebuild = `moduleId${moduleId}chapterId${chapterId}sectionId${sectionId}isRebuild`;
-						let playNextId = `moduleId${moduleId}chapterId${chapterId}sectionId${sectionId}`;  //拼接对应章节唯一id
-						console.log(playNextId,'playNextId')
-						console.log(playNextIdisRebuild,'playNextIdisRebuild')
-						
-						uni.$emit('playNext'+playNextIdisRebuild,{fromRebuild:this.isRebuild}); //通知播放结束,不来自重修目录的点击不用弹窗学习下一节
-						uni.$emit('playNext'+playNextId); //通知播放结束
-					}
-					
-					self.ossAvatarUrl = ''
-				} else {
-					this.uploadLock = false;
-					uni.showToast({
-						icon:'none',
-						title:res.data.msg
-					})
-				}
-				console.log(res,'res');
-			});
-		},
-		uploadFile(options, int) {
-			var self = this;
-			return new Promise((resolve, reject) => {
-				var data = {
-					imageStatus: int,
-					gradeId:this.gradeId
-				};
-				self.$api.aliyunpolicy(data).then(res => {
-					if (res.data.code != 200) {
-						self.$method.showToast('签名错误' + JSON.stringify(res.data));
-						return;
-					}
-					var ossToken = res.data.data.resultContent;
-					if (ossToken.host == null || ossToken.host == undefined) {
-						self.$method.showToast('上传路径报错' + JSON.stringify(res.data));
-						return;
-					}
-					uni.uploadFile({
-						url: ossToken.host,
-						name: 'file',
-						filePath: options,
-						fileType: 'image',
-						header: {
-							AuthorizationToken: 'WX ' + uni.getStorageSync('token')
-						},
-						formData: {
-							key: ossToken.dir,
-							OSSAccessKeyId: ossToken.accessid,
-							policy: ossToken.policy,
-							Signature: ossToken.signature,
-							callback: ossToken.callback,
-							success_action_status: 200
-						},
-						success: result => {
-							if (result.statusCode === 200) {
-								self.ossAvatarUrl = ossToken.dir;
-								resolve();
-							} else {
-								uni.showToast({
-									title: '上传失败',
-									icon: 'none'
-								});
-								this.openPhoto();
-								return;
-							}
-						},
-						fail: error => {
-							uni.showToast({
-								title: '上传接口报错,请重新拍照上传' + error,
-								icon: 'none'
-							});
-							this.openPhoto();
-							return;
-						}
-					});
-				});
-			});
-		},
-		imageInfos() {
-			var self = this;
-			return new Promise((resolve, reject) => {
-				uni.getImageInfo({
-					src: self.avatarUrl,
-					success: async res => {
-						let canvasWidth = res.width; //图片原始长宽
-						let canvasHeight = res.height;
-						if (canvasWidth > 2000 || canvasHeight > 2000) {
-							uni.compressImage({
-								src: self.avatarUrl,
-								quality: 75,
-								width: '35%',
-								height: '35%',
-								success: async rest => {
-									const waitUpload = await self.uploadFile(rest.tempFilePath, 0);
-									resolve(waitUpload);
-								}
-							});
-						} else if (canvasWidth > 1000 || canvasHeight > 1000) {
-							uni.compressImage({
-								src: self.avatarUrl,
-								quality: 75,
-								width: '50%',
-								height: '50%',
-								success: async rest => {
-									const waitUpload = await self.uploadFile(rest.tempFilePath, 0);
-									resolve(waitUpload);
-								}
-							});
-						} else {
-							console.log('无需压缩');
-							const waitUpload = await self.uploadFile(self.avatarUrl, 0);
-							resolve(waitUpload);
-						}
-					}
-				});
-			});
-		},
-		timeEvent() {
-			let self = this;
-			var polyvPlayerContext = this.selectComponent('#playerVideo');
-			if (polyvPlayerContext != null) {
-				
-				this.playTime = polyvPlayerContext.getCurrentTime() //播放时刻
-			//	console.log(this.playTime,789,this.photoHistoryList)
-				//判断是否需要拍照
-				if (this.photoNum > 0) {
-					this.configPhoto()
-					let photoTime =0; //获取拍照秒数
-					for(let i=0;i<this.photoList.length;i++){
-						photoTime = Number(this.photoList[i]); //获取拍照秒数
-						if (photoTime < this.playTime&&photoTime>this.playTime-8) { //3秒区间内才触发拍照,避免拉动滚动条
-							if(this.photoHistoryList.indexOf(i)<0 &&  this.sectionItem.learning != 1){ //不存在拍照历史,没有重修过,没有学过,则拍照
-								//启动拍照
-								//暂停
-								polyvPlayerContext.exitFullScreen();
-								polyvPlayerContext.pause();
-								this.photoIndex = i
-								this.openPhoto();
-								
-								
-							}
-							
-						}
-					}
-					
-				}
-			}
-		},
-		closeToast() {
-			clearTimeout(this.toastTimer)
-			this.videoToastShow = false;
-			
-		},
-		restart() {
-			var polyvPlayerContext = this.selectComponent('#playerVideo');
-			polyvPlayerContext.seek(0);
-						console.log('seek1')
-			clearTimeout(this.toastTimer)
-			this.videoToastShow = false;
-		},
-		onStateChange(newstate, oldstate) {
-			if (newstate.detail.newstate == 'playing') {
-				if (this.needSeek) {  
-					var polyvPlayerContext = this.selectComponent('#playerVideo');
-					if(this.recordObj.videoCurrentTime){
-						console.log('seek2')
-						polyvPlayerContext.seek(this.recordObj.videoCurrentTime);
-						this.seekTime = this.$method.secondToDate(this.recordObj.videoCurrentTime)
-						this.videoToastShow = true;
-						this.toastTimer = setTimeout(() => {
-							this.videoToastShow = false;
-						},3000)
-						
-					}else{
-						polyvPlayerContext.seek(1);//避免相同节继续播放
-						console.log('seek3')
-						
-					}
-					
-					polyvPlayerContext.play();
-					this.needSeek = false;
-				}
-				//开始播放
-				if (this.timer) {
-					clearInterval(this.timer);
-				}
-				this.timer = setInterval(this.timeEvent, 1000); //定时器
-			}
-			if (newstate.detail.newstate == 'pause') {
-				clearInterval(this.timer);
-				//暂停提交记录
-				/* this.ossAvatarUrl = ""
+              },
+            });
+          }
+        },
+        fail: (res) => {},
+      });
+    },
+    studyNotice() {
+      this.noticeShow = true;
+    },
+    //播放笔记视频
+    async playNoteVideo(item) {
+      console.log(item, "noteItem");
+      if (this.timer) {
+        clearInterval(this.timer);
+      }
+      if (this.vid) {
+        //切换视频
+        var polyvPlayerContext = this.selectComponent("#playerVideo");
+        polyvPlayerContext.changeVid(item.recordingUrl);
+      } else {
+        this.vid = item.recordingUrl;
+      }
+      this.recordObj = { videoCurrentTime: item.noteSecond };
+      if (this.recordObj.videoCurrentTime) {
+        this.needSeek = true; //需要跳转到播放记录
+      }
+      this.startStatus = true;
+      //获取节笔记
+      this.getNoteList();
+    },
+    //正常播放视频
+    async playVideo(item) {
+      console.log(item);
+      if (this.timer) {
+        clearInterval(this.timer);
+      }
+      if (this.vid) {
+        //切换视频
+        var polyvPlayerContext = this.selectComponent("#playerVideo");
+        console.log(polyvPlayerContext, "polyvPlayerContext");
+        polyvPlayerContext.changeVid(item.recordingUrl);
+      } else {
+        this.vid = item.recordingUrl;
+      }
+      this.recordObj = null;
+      this.recordObj = await this.getRecordLast();
+      this.needSeek = true; //跳转到播放记录
+      this.startStatus = true;
+
+      //获取节笔记
+      this.getNoteList();
+    },
+    getRecordLast() {
+      let self = this;
+      return new Promise((resolve) => {
+        let data = {
+          gradeId: Number(self.gradeId),
+          goodsId: Number(self.goodsId),
+          sectionId: Number(self.playSectionId),
+          courseId: Number(self.courseId),
+          chapterId: parseInt(self.chapterId),
+          moduleId: parseInt(self.moduleId),
+        };
+        self.$api.recordLast(data).then((res) => {
+          resolve(res.data.data);
+        });
+      });
+    },
+
+    jumpNote(item) {
+      this.noteId = item.noteId;
+      //没视频播放
+      if (this.playSectionId == 0) {
+        console.log("即将跳到笔记位置1");
+        this.$u.toast("即将跳到笔记位置");
+        this.$store.commit("setPlaySectionId", {
+          playSectionId: item.sectionId,
+        });
+        this.$store.commit("setPlayVID", { playVID: item.recordingUrl });
+        this.playNoteVideo(item);
+      } else {
+        //正在看当前笔记视频
+        console.log("即将跳到笔记位置2");
+        this.$u.toast("即将跳到笔记位置");
+        //跳到笔记时刻
+        var polyvPlayerContext = this.selectComponent("#playerVideo");
+        polyvPlayerContext.seek(item.noteSecond);
+        polyvPlayerContext.play();
+      }
+    },
+    postNote() {
+      let self = this;
+      if (!(this.playSectionId > 0)) {
+        this.$u.toast("目前无播放视频");
+        return;
+      }
+      if (!this.noteValue) {
+        this.$u.toast("请输入内容");
+        return;
+      }
+      if (!this.gradeId) {
+        this.$u.toast("暂无班级数据");
+        return;
+      }
+      var polyvPlayerContext = this.selectComponent("#playerVideo");
+      let noteDate = this.$method.getZeroTime();
+      let noteSecond = polyvPlayerContext.getCurrentTime();
+      console.log(noteSecond, 698);
+      if (!noteSecond) {
+        if (noteSecond == 0) {
+          //播放结束
+          noteSecond = polyvPlayerContext.getDuration();
+          console.log(noteSecond, 63398);
+        }
+        if (!noteSecond) {
+          this.$u.toast("视频暂未开始");
+          return;
+        }
+      }
+      let data = {
+        gradeId: this.gradeId,
+        goodsId: this.goodsId,
+        sectionId: this.playSectionId,
+        courseId: this.courseId,
+        noteText: this.noteValue,
+        noteDate: noteDate,
+        noteSecond: noteSecond,
+      };
+      this.$api.postNote(data).then((res) => {
+        if (res.data.code == 200) {
+          this.$u.toast("发布成功");
+          self.getNoteList();
+          this.noteValue = "";
+        }
+      });
+    },
+    getGradeInfo() {
+      let self = this;
+      this.$store.state.allowLoading = false;
+      this.$api.goodsGradeInfo(this.gradeId).then((res) => {
+        if (res.data.code == 200) {
+          self.gradeDetail = res.data.data;
+          if (self.needProfileModal) {
+            return;
+          }
+          if (self.gradeDetail.learningStatus == 2) {
+            uni.showModal({
+              showCancel: false,
+              confirmText: "确定",
+              content:
+                "当前课程正在申请中,正式开班后方可进行学习,请耐心等候!",
+              success: function (resultst) {
+                uni.navigateBack();
+              },
+            });
+          }
+          if (
+            self.gradeDetail.learningStatus == 3 &&
+            Number(self.gradeDetail.learningTimeStart) >
+              Number(new Date() / 1000)
+          ) {
+            uni.showModal({
+              showCancel: false,
+              cancelText: "返回",
+              content:
+                "当前课程正在申请中,正式开班后方可进行学习,请耐心等候!",
+              success: function (resultst) {
+                uni.navigateBack();
+              },
+            });
+          }
+        }
+      });
+      this.$store.state.allowLoading = true;
+    },
+    getNoteList() {
+      let self = this;
+      self.noteList = [];
+      let data = {
+        courseId: this.courseId,
+        gradeId: this.gradeId,
+        goodsId: this.goodsId,
+      };
+      if (this.playSectionId > 0) {
+        data.sectionId = this.playSectionId;
+      }
+      this.$api.noteList(data).then((res) => {
+        if (res.data.code == 200) {
+          self.noteList = res.data.rows;
+        }
+      });
+    },
+    delAnswer(answerId) {
+      let self = this;
+      let data = { answerId: answerId, status: -1 };
+      this.$api.delAnswer(data).then((res) => {
+        if (res.data.code == 200) {
+          self.getAnswerList();
+        }
+      });
+    },
+    clearCtx() {
+      console.log(4234);
+      this.placeholder = "您可以在这里输入答疑内容";
+      this.ctxValue = "";
+      this.assignUserId = 0;
+    },
+    replyContent(item) {
+      this.assignUserId = item.userId;
+      this.placeholder = "@" + item.realname;
+    },
+    delContent(item) {
+      this.delAnswer(item.answerId);
+    },
+    postAnswer() {
+      let self = this;
+      let data = {
+        courseId: this.courseId,
+        answerText: this.ctxValue,
+        goodsId: this.goodsId,
+      };
+      if (this.assignUserId > 0) {
+        data.assignUserId = this.assignUserId;
+      }
+      this.$api.postAnswer(data).then((res) => {
+        if (res.data.code == 200) {
+          this.$u.toast("发布成功");
+          self.getAnswerList();
+          this.placeholder = "您可以在这里输入答疑内容";
+          this.ctxValue = "";
+          this.assignUserId = 0;
+        }
+      });
+    },
+    postContent() {
+      if (!this.ctxValue || this.ctxValue == "") {
+        this.$u.toast("请输入内容");
+        return;
+      }
+      this.postAnswer();
+    },
+    postStudyRecord(status = 0, sectionId = this.playSectionId) {
+      console.log("status", status);
+      let currentTime = 0;
+      let PlayDuration = 0;
+      var polyvPlayerContext = this.selectComponent("#playerVideo");
+      if (polyvPlayerContext) {
+        currentTime = polyvPlayerContext.getCurrentTime(); //总的视频播放时刻
+        PlayDuration = polyvPlayerContext.getVideoPlayDuration(); //本次看的时长
+      }
+      if (this.playChannelId > 0) {
+        currentTime = 2; //直播无法获取,无论开始结束都传2秒
+      }
+      let self = this;
+      let data = {
+        photo: self.ossAvatarUrl,
+        sectionId: parseInt(sectionId),
+        goodsId: parseInt(self.goodsId),
+        courseId: parseInt(self.courseId),
+        studyDuration: parseInt(
+          PlayDuration > 0 ? PlayDuration : self.studyDuration
+        ),
+        gradeId: parseInt(self.gradeId),
+        chapterId: parseInt(self.chapterId),
+        moduleId: parseInt(self.moduleId),
+        videoCurrentTime: parseInt(
+          currentTime > 0 ? currentTime : self.studyDuration
+        ),
+      };
+      if (status > 0) {
+        console.log(sectionId, "sectionId");
+        data.status = status;
+      }
+      console.log("提交接口", data);
+      this.$api.studyRecord(data).then((res) => {
+        if (res.data.code == 200) {
+          if (status > 0) {
+            let moduleId = this.moduleId || 0;
+            let chapterId = this.chapterId || 0;
+            let playNextIdisRebuild = `moduleId${moduleId}chapterId${chapterId}sectionId${sectionId}isRebuild`;
+            let playNextId = `moduleId${moduleId}chapterId${chapterId}sectionId${sectionId}`; //拼接对应章节唯一id
+            console.log(playNextId, "playNextId");
+            console.log(playNextIdisRebuild, "playNextIdisRebuild");
+
+            uni.$emit("playNext" + playNextIdisRebuild, {
+              fromRebuild: this.isRebuild,
+            }); //通知播放结束,不来自重修目录的点击不用弹窗学习下一节
+            uni.$emit("playNext" + playNextId); //通知播放结束
+          }
+
+          self.ossAvatarUrl = "";
+        } else {
+          this.uploadLock = false;
+          uni.showToast({
+            icon: "none",
+            title: res.data.msg,
+          });
+        }
+        console.log(res, "res");
+      });
+    },
+    uploadFile(options, int) {
+      var self = this;
+      return new Promise((resolve, reject) => {
+        var data = {
+          imageStatus: int,
+          gradeId: this.gradeId,
+        };
+        self.$api.aliyunpolicy(data).then((res) => {
+          if (res.data.code != 200) {
+            self.$method.showToast("签名错误" + JSON.stringify(res.data));
+            return;
+          }
+          var ossToken = res.data.data.resultContent;
+          if (ossToken.host == null || ossToken.host == undefined) {
+            self.$method.showToast("上传路径报错" + JSON.stringify(res.data));
+            return;
+          }
+          uni.uploadFile({
+            url: ossToken.host,
+            name: "file",
+            filePath: options,
+            fileType: "image",
+            header: {
+              AuthorizationToken: "WX " + uni.getStorageSync("token"),
+            },
+            formData: {
+              key: ossToken.dir,
+              OSSAccessKeyId: ossToken.accessid,
+              policy: ossToken.policy,
+              Signature: ossToken.signature,
+              callback: ossToken.callback,
+              success_action_status: 200,
+            },
+            success: (result) => {
+              if (result.statusCode === 200) {
+                self.ossAvatarUrl = ossToken.dir;
+                resolve();
+              } else {
+                uni.showToast({
+                  title: "上传失败",
+                  icon: "none",
+                });
+                this.openPhoto();
+                return;
+              }
+            },
+            fail: (error) => {
+              uni.showToast({
+                title: "上传接口报错,请重新拍照上传" + error,
+                icon: "none",
+              });
+              this.openPhoto();
+              return;
+            },
+          });
+        });
+      });
+    },
+    imageInfos() {
+      var self = this;
+      return new Promise((resolve, reject) => {
+        uni.getImageInfo({
+          src: self.avatarUrl,
+          success: async (res) => {
+            let canvasWidth = res.width; //图片原始长宽
+            let canvasHeight = res.height;
+            if (canvasWidth > 2000 || canvasHeight > 2000) {
+              uni.compressImage({
+                src: self.avatarUrl,
+                quality: 75,
+                width: "35%",
+                height: "35%",
+                success: async (rest) => {
+                  const waitUpload = await self.uploadFile(
+                    rest.tempFilePath,
+                    0
+                  );
+                  resolve(waitUpload);
+                },
+              });
+            } else if (canvasWidth > 1000 || canvasHeight > 1000) {
+              uni.compressImage({
+                src: self.avatarUrl,
+                quality: 75,
+                width: "50%",
+                height: "50%",
+                success: async (rest) => {
+                  const waitUpload = await self.uploadFile(
+                    rest.tempFilePath,
+                    0
+                  );
+                  resolve(waitUpload);
+                },
+              });
+            } else {
+              console.log("无需压缩");
+              const waitUpload = await self.uploadFile(self.avatarUrl, 0);
+              resolve(waitUpload);
+            }
+          },
+        });
+      });
+    },
+    timeEvent() {
+      let self = this;
+      var polyvPlayerContext = this.selectComponent("#playerVideo");
+      if (polyvPlayerContext != null) {
+        this.playTime = polyvPlayerContext.getCurrentTime(); //播放时刻
+        //	console.log(this.playTime,789,this.photoHistoryList)
+        //判断是否需要拍照
+        if (this.photoNum > 0) {
+          this.configPhoto();
+          let photoTime = 0; //获取拍照秒数
+          for (let i = 0; i < this.photoList.length; i++) {
+            photoTime = Number(this.photoList[i]); //获取拍照秒数
+            if (photoTime < this.playTime && photoTime > this.playTime - 8) {
+              //3秒区间内才触发拍照,避免拉动滚动条
+              if (
+                this.photoHistoryList.indexOf(i) < 0 &&
+                this.sectionItem.learning != 1
+              ) {
+                //不存在拍照历史,没有重修过,没有学过,则拍照
+                //启动拍照
+                //暂停
+                polyvPlayerContext.exitFullScreen();
+                polyvPlayerContext.pause();
+                this.photoIndex = i;
+                this.openPhoto();
+              }
+            }
+          }
+        }
+      }
+    },
+    closeToast() {
+      clearTimeout(this.toastTimer);
+      this.videoToastShow = false;
+    },
+    restart() {
+      var polyvPlayerContext = this.selectComponent("#playerVideo");
+      polyvPlayerContext.seek(0);
+      console.log("seek1");
+      clearTimeout(this.toastTimer);
+      this.videoToastShow = false;
+    },
+    onStateChange(newstate, oldstate) {
+      if (newstate.detail.newstate == "playing") {
+        if (this.needSeek) {
+          var polyvPlayerContext = this.selectComponent("#playerVideo");
+          if (this.recordObj.videoCurrentTime) {
+            console.log("seek2");
+            polyvPlayerContext.seek(this.recordObj.videoCurrentTime);
+            this.seekTime = this.$method.secondToDate(
+              this.recordObj.videoCurrentTime
+            );
+            this.videoToastShow = true;
+            this.toastTimer = setTimeout(() => {
+              this.videoToastShow = false;
+            }, 3000);
+          } else {
+            polyvPlayerContext.seek(1); //避免相同节继续播放
+            console.log("seek3");
+          }
+
+          polyvPlayerContext.play();
+          this.needSeek = false;
+        }
+        //开始播放
+        if (this.timer) {
+          clearInterval(this.timer);
+        }
+        this.timer = setInterval(this.timeEvent, 1000); //定时器
+      }
+      if (newstate.detail.newstate == "pause") {
+        clearInterval(this.timer);
+        //暂停提交记录
+        /* this.ossAvatarUrl = ""
 				this.postStudyRecord() */
-			}
-			if (newstate.detail.newstate == 'ended') {
-				clearInterval(this.timer);
-				uni.showToast({
-					icon:'none',
-					title:'播放完毕'
-				})
-				this.postStudyRecord(1);
-				// uni.$emit('playNext') //播放重修下一节
-			}
-		},
-		//拍照
-		openPhoto() {
-			var polyvPlayerContext = this.selectComponent('#playerVideo');
-			if(polyvPlayerContext) {
-				polyvPlayerContext.exitFullScreen();
-			}
-			
-			this.enableAutoRotation = false;
-			this.photoPopup = true;
-			this.isTaking = true;
-			uni.setKeepScreenOn({
-			    keepScreenOn: true
-			});
-			uni.authorize({
-			     scope: 'scope.camera',
-			     success() {
-			        
-			     }
-			 })
-		},
-		/**
-		 * 人脸匹配
-		 */
-		faceRecognition() {
-			return new Promise(resolve => {
-				let fileSystem = uni.getFileSystemManager();
-				fileSystem.readFile({
-				  filePath: `${this.avatarUrl}`,
-				  encoding: 'base64',
-				  position: 0,
-				  success:(res) => {
-					  console.log(res)
-					  let base64 = 'data:image/jpg;base64,' + res.data;
-					  
-					  this.$api.faceCertificationCompareFace({
-						  imageA:base64,
-						  orderGoodsId:this.orderGoodsId,
-						  gradeId:this.gradeId
-					  }).then(res => {
-						  resolve(res.data.data)
-					  })
-				  },
-				  fail(err) {
-					console.error(err,'err')
-				  }
-				})
-			})
-		},
-		
-		async submit() {
-			if(this.uploadLock) {
-				return;
-			}
-			this.uploadLock = true;
-			
-			let compareFaceData = await this.faceRecognition();
-			
-			if(compareFaceData == 0) {
-				uni.showToast({
-				  title:'人脸匹配不通过,请重新拍照上传',
-				  icon:'none',
-				  duration:2000,
-				})
-				
-				this.uploadLock = false;
-				this.openPhoto();
-				return;
-			}
-			
-			if(compareFaceData >= 80) {
-				const waitYS = await this.imageInfos();
-				this.postCoursePhotoRecord().then(res => {
-					this.photoHistoryList.push(this.photoIndex)
-					this.postStudyRecord(); //提交记录
-					//恢复播放
-					
-					uni.setKeepScreenOn({
-					    keepScreenOn: false
-					});
-					this.photoPopup = false;
-					this.uploadLock = false;
-					this.enableAutoRotation = true;
-					var polyvPlayerContext = this.selectComponent('#playerVideo');
-					if (polyvPlayerContext != null) {
-						polyvPlayerContext.play();
-					}
-				}).catch(err => {
-					uni.showToast({
-						title: '上传接口报错,请重新拍照上传' + err,
-						icon: 'none'
-					});
-					this.uploadLock = false;
-					this.openPhoto();
-				})
-			}
-			
-			
-				
-			
-		},
-		reTake() {
-			this.isTaking = true;
-		},
-		//确认拍照
-		takePhoto() {
-			var self = this;
-			const ctx = uni.createCameraContext();
-			ctx.takePhoto({
-				quality: 'high',
-				success: res => {
-					console.log(res.tempImagePath);
-					self.avatarUrl = res.tempImagePath;
-					this.isTaking = false;
-					// self.submit();
+      }
+      if (newstate.detail.newstate == "ended") {
+        clearInterval(this.timer);
+        uni.showToast({
+          icon: "none",
+          title: "播放完毕",
+        });
+        this.postStudyRecord(1);
+        // uni.$emit('playNext') //播放重修下一节
+      }
+    },
+    //拍照
+    openPhoto() {
+      var polyvPlayerContext = this.selectComponent("#playerVideo");
+      if (polyvPlayerContext) {
+        polyvPlayerContext.exitFullScreen();
+      }
+
+      this.enableAutoRotation = false;
+      this.photoPopup = true;
+      this.isTaking = true;
+      uni.setKeepScreenOn({
+        keepScreenOn: true,
+      });
+      uni.authorize({
+        scope: "scope.camera",
+        success() {},
+      });
+    },
+    /**
+     * 人脸匹配
+     */
+    faceRecognition() {
+      return new Promise((resolve) => {
+        let fileSystem = uni.getFileSystemManager();
+        fileSystem.readFile({
+          filePath: `${this.avatarUrl}`,
+          encoding: "base64",
+          position: 0,
+          success: (res) => {
+            console.log(res);
+            let base64 = "data:image/jpg;base64," + res.data;
+
+            this.$api
+              .faceCertificationCompareFace({
+                imageA: base64,
+                orderGoodsId: this.orderGoodsId,
+                gradeId: this.gradeId,
+              })
+              .then((res) => {
+                resolve(res.data.data);
+              });
+          },
+          fail(err) {
+            console.error(err, "err");
+          },
+        });
+      });
+    },
+
+    async submit() {
+      if (this.uploadLock) {
+        return;
+      }
+      this.uploadLock = true;
+
+      let compareFaceData = await this.faceRecognition();
+
+      if (compareFaceData == 0) {
+        uni.showToast({
+          title: "人脸匹配不通过,请重新拍照上传",
+          icon: "none",
+          duration: 2000,
+        });
+
+        this.uploadLock = false;
+        this.openPhoto();
+        return;
+      }
 
-					// self.photoPopup = false;
-					// self.enableAutoRotation = true;
-				},
-				fail: err => {
-					console.log(err);
-				}
-			});
-		},
-		playError(e) {
-			console.log(e)
-		},
-		//拍照报错
-		error(e) {
-			console.log(e.detail);
-		},
-		//关闭相机
-		closePhoto() {
-			this.photoPopup = false;
-			self.enableAutoRotation = true;
-		},
-		/**
-		 * 进入全屏
-		 */
-		fullscreenchange(event) {
-			console.log(event)
-			if(event.detail.direction == 'vertical') {
-				this.navShow = true;
-			} else if(event.detail.direction == 'horizontal') {
-				this.navShow = false;
-				
-			}
-		},
-		getGoodsDetail() {
-			let self = this;
-			this.$api.goodsDetail(this.goodsId).then(res => {
-				self.goodsData = res.data.data;
-				self.gradeId = self.goodsData.gradeId;
-				console.log(self.gradeId, "班级ID");
-				this.courseBusiness()
-				this.courseHandouts();
-				self.getMenuList();
-				self.getReMenuList(); //获取重修目录
-				setTimeout(function(){
-					if(!self.needProfileModal){
-						self.getGradeInfo()
-					}
-				},500)
-				
-				//获取节笔记
-				this.getNoteList();
-				if (self.goodsData.goodsPlayConfig) {
-					self.goodsPlayConfig = JSON.parse(self.goodsData.goodsPlayConfig);
-					if (self.goodsPlayConfig.autoPlay > 0) {
-						self.autoplay = true;
-					}
-					if (self.goodsPlayConfig.drag > 0) {
-						self.isAllowSeek = 'yes';
-					}
-					if (self.goodsPlayConfig.speed > 0) {
-						self.playbackRate = [0.5, 0.8, 1.0, 1.25, 1.5, 2.0];
-					}
-				}
-				if (self.goodsData.goodsPhotographConfig) {
-					self.goodsPhotographConfig = JSON.parse(self.goodsData.goodsPhotographConfig);
-					if (self.goodsPhotographConfig.photoNum>0) {
-						self.photoNum = self.goodsPhotographConfig.photoNum
-						console.log(self.photoNum,777777)
-					}
-				}
-			});
-		},
-		startVideo() {
-			this.startStatus = true;
-		},
-		getAnswerList() {
-			let self = this;
-			this.$api.answerList({ courseId: this.courseId,goodsId: this.goodsId }).then(res => {
-				if (res.data.code == 200) {
-					self.answerList = res.data.rows;
-				}
-			});
-		},
-		getReMenuList() {
-			let self = this;
-			this.$api.reMenuList({ courseId: this.courseId, rebuild: 1, gradeId: this.gradeId }).then(res => {
-				if (res.data.code == 200) {
-					for (let i = 0; i < res.data.rows.length; i++) {
-						let item = res.data.rows[i];
-						item.down = true;
-						item.id = item.menuId;
-						item.name = item.menuName;
-					}
-					self.reMenuList = res.data.rows;
-					if(self.reMenuList.length>0){
-						this.showNotes = false;
-						self.list = [
-							
-							{
-								name: '目录'
-							},
-							{
-								name: '讲义'
-							},
-							{
-								name: '笔记'
-							},
-							{
-								name: '答疑'
-							},
-							{name:'重修目录'}
-						];
-						this.current = 0;
-					} else {
-						self.list = [
-							
-							{
-								name: '目录'
-							},
-							{
-								name: '讲义'
-							},
-							{
-								name: '笔记'
-							},
-							{
-								name: '答疑'
-							}
-						];
-						this.current = 0;
-					}
-				}
-			});
-		},
-		getMenuList() {
-			let self = this;
-			this.$api.reMenuList({ courseId: this.courseId, gradeId: this.gradeId }).then(res => {
-				if (res.data.code == 200) {
-					for (let i = 0; i < res.data.rows.length; i++) {
-						let item = res.data.rows[i];
-						item.down = true;
-						item.id = item.menuId;
-						item.name = item.menuName;
-						item.menuType = item.type;
-					}
-					self.menuList = res.data.rows;
-					
-					for(let i=0;i<res.data.rows.length;i++){
-						if(res.data.rows[i].type == 1) {
-							this.menuIndex = [i];
-							break;
-						} else if(res.data.rows[i].type == 2) {
-							this.menuIndex = [i];
-							break;
-						}
-					}
-				}
-			});
-		},
-		courseDetail() {
-			let self = this;
-			this.$api.courseDetail(this.courseId).then(res => {
-				if (res.data.code == 200) {
-					if(res.data.data.educationName == '继续教育') {
-						websocket.sendMsg('doCourse')
-					}
-					self.detail = res.data.data;
-					
-				}
-			});
-		},
-		open(item) {
-			item.showChildren = !item.showChildren;
-		},
-		change(index) {
-			this.current = index;
-		},
-		openDocument() {
-			let self = this;
-			let url = this.$method.splitImgHost(this.courseHandoutsData.handoutsUrl)
-			console.log(url)
-			uni.downloadFile({
-			  url: url,
-			  success: function (res) {
-				  console.log(999)
-			    var filePath = res.tempFilePath;
-			    uni.openDocument({
-			      filePath: filePath,
-			      showMenu: self.courseHandoutsData.canDownload == 1 ? true : false,
-			      success: function (res) {
-			        console.log(res,'打开文档成功');
-			      },
-				  fail:function(err) {
-					  console.log(err)
-					uni.showToast({
-						icon:'none',
-						title:'文档地址错误'
-					})
-				  }
-			    });
-			  },
-			  fail:(err) => {
-				  uni.showModal({
-				  	title:'提示',
-					content:'文档错误,'+err.errMsg,
-					showCancel:false
-				  })
-			  }
-			});
-		}
-	}
+      if (compareFaceData >= 80) {
+        const waitYS = await this.imageInfos();
+        this.postCoursePhotoRecord()
+          .then((res) => {
+            this.photoHistoryList.push(this.photoIndex);
+            this.postStudyRecord(); //提交记录
+            //恢复播放
+
+            uni.setKeepScreenOn({
+              keepScreenOn: false,
+            });
+            this.photoPopup = false;
+            this.uploadLock = false;
+            this.enableAutoRotation = true;
+            var polyvPlayerContext = this.selectComponent("#playerVideo");
+            if (polyvPlayerContext != null) {
+              polyvPlayerContext.play();
+            }
+          })
+          .catch((err) => {
+            uni.showToast({
+              title: "上传接口报错,请重新拍照上传" + err,
+              icon: "none",
+            });
+            this.uploadLock = false;
+            this.openPhoto();
+          });
+      }
+    },
+    reTake() {
+      this.isTaking = true;
+    },
+    //确认拍照
+    takePhoto() {
+      var self = this;
+      const ctx = uni.createCameraContext();
+      ctx.takePhoto({
+        quality: "high",
+        success: (res) => {
+          console.log(res.tempImagePath);
+          self.avatarUrl = res.tempImagePath;
+          this.isTaking = false;
+          // self.submit();
+
+          // self.photoPopup = false;
+          // self.enableAutoRotation = true;
+        },
+        fail: (err) => {
+          console.log(err);
+        },
+      });
+    },
+    playError(e) {
+      console.log(e);
+    },
+    //拍照报错
+    error(e) {
+      console.log(e.detail);
+    },
+    //关闭相机
+    closePhoto() {
+      this.photoPopup = false;
+      self.enableAutoRotation = true;
+    },
+    /**
+     * 进入全屏
+     */
+    fullscreenchange(event) {
+      console.log(event);
+      if (event.detail.direction == "vertical") {
+        this.navShow = true;
+      } else if (event.detail.direction == "horizontal") {
+        this.navShow = false;
+      }
+    },
+    getGoodsDetail() {
+      let self = this;
+      this.$api.goodsDetail(this.goodsId).then((res) => {
+        self.goodsData = res.data.data;
+        self.gradeId = self.goodsData.gradeId;
+        console.log(self.gradeId, "班级ID");
+        this.courseBusiness();
+        this.courseHandouts();
+        self.getMenuList();
+        self.getReMenuList(); //获取重修目录
+        setTimeout(function () {
+          if (!self.needProfileModal) {
+            self.getGradeInfo();
+          }
+        }, 500);
+
+        //获取节笔记
+        this.getNoteList();
+        if (self.goodsData.goodsPlayConfig) {
+          self.goodsPlayConfig = JSON.parse(self.goodsData.goodsPlayConfig);
+          if (self.goodsPlayConfig.autoPlay > 0) {
+            self.autoplay = true;
+          }
+          if (self.goodsPlayConfig.drag > 0) {
+            self.isAllowSeek = "yes";
+          }
+          if (self.goodsPlayConfig.speed > 0) {
+            self.playbackRate = [0.5, 0.8, 1.0, 1.25, 1.5, 2.0];
+          }
+        }
+        if (self.goodsData.goodsPhotographConfig) {
+          self.goodsPhotographConfig = JSON.parse(
+            self.goodsData.goodsPhotographConfig
+          );
+          if (self.goodsPhotographConfig.photoNum > 0) {
+            self.photoNum = self.goodsPhotographConfig.photoNum;
+            console.log(self.photoNum, 777777);
+          }
+        }
+      });
+    },
+    startVideo() {
+      this.startStatus = true;
+    },
+    getAnswerList() {
+      let self = this;
+      this.$api
+        .answerList({ courseId: this.courseId, goodsId: this.goodsId })
+        .then((res) => {
+          if (res.data.code == 200) {
+            self.answerList = res.data.rows;
+          }
+        });
+    },
+    getReMenuList() {
+      let self = this;
+      this.$api
+        .reMenuList({
+          courseId: this.courseId,
+          rebuild: 1,
+          gradeId: this.gradeId,
+        })
+        .then((res) => {
+          if (res.data.code == 200) {
+            for (let i = 0; i < res.data.rows.length; i++) {
+              let item = res.data.rows[i];
+              item.down = true;
+              item.id = item.menuId;
+              item.name = item.menuName;
+            }
+            self.reMenuList = res.data.rows;
+            if (self.reMenuList.length > 0) {
+              this.showNotes = false;
+              self.list = [
+                {
+                  name: "目录",
+                },
+                {
+                  name: "讲义",
+                },
+                {
+                  name: "笔记",
+                },
+                {
+                  name: "答疑",
+                },
+                { name: "重修目录" },
+              ];
+              this.current = 0;
+            } else {
+              self.list = [
+                {
+                  name: "目录",
+                },
+                {
+                  name: "讲义",
+                },
+                {
+                  name: "笔记",
+                },
+                {
+                  name: "答疑",
+                },
+              ];
+              this.current = 0;
+            }
+          }
+        });
+    },
+    getMenuList() {
+      let self = this;
+      this.$api
+        .reMenuList({ courseId: this.courseId, gradeId: this.gradeId })
+        .then((res) => {
+          if (res.data.code == 200) {
+            for (let i = 0; i < res.data.rows.length; i++) {
+              let item = res.data.rows[i];
+              item.down = true;
+              item.id = item.menuId;
+              item.name = item.menuName;
+              item.menuType = item.type;
+            }
+            self.menuList = res.data.rows;
+
+            for (let i = 0; i < res.data.rows.length; i++) {
+              if (res.data.rows[i].type == 1) {
+                this.menuIndex = [i];
+                break;
+              } else if (res.data.rows[i].type == 2) {
+                this.menuIndex = [i];
+                break;
+              }
+            }
+          }
+        });
+    },
+    courseDetail() {
+      let self = this;
+      this.$api.courseDetail(this.courseId).then((res) => {
+        if (res.data.code == 200) {
+          if (res.data.data.educationName == "继续教育") {
+            websocket.sendMsg("doCourse");
+          }
+          self.detail = res.data.data;
+        }
+      });
+    },
+    open(item) {
+      item.showChildren = !item.showChildren;
+    },
+    change(index) {
+      this.current = index;
+    },
+    openDocument() {
+      let self = this;
+      let url = this.$method.splitImgHost(this.courseHandoutsData.handoutsUrl);
+      console.log(url);
+      uni.downloadFile({
+        url: url,
+        success: function (res) {
+          console.log(999);
+          var filePath = res.tempFilePath;
+          uni.openDocument({
+            filePath: filePath,
+            showMenu: self.courseHandoutsData.canDownload == 1 ? true : false,
+            success: function (res) {
+              console.log(res, "打开文档成功");
+            },
+            fail: function (err) {
+              console.log(err);
+              uni.showToast({
+                icon: "none",
+                title: "文档地址错误",
+              });
+            },
+          });
+        },
+        fail: (err) => {
+          uni.showModal({
+            title: "提示",
+            content: "文档错误," + err.errMsg,
+            showCancel: false,
+          });
+        },
+      });
+    },
+  },
 };
 </script>
 
 <style lang="scss" scope>
 .polyv_detail {
-	display: flex;
-	flex-direction: column;
-	height:100vh;
-	
-	.box {
-		flex:1;
-		overflow: hidden;
-		margin: 20rpx;
-		
-		.box_in {
-			height:100%;
-		}
-	}
-}
-.btnSet{
-	width: 440rpx;
-	height: 80rpx;
-	background: #007AFF;
-	border-radius: 40rpx;
-	color: #FFFFFF;
-	font-size: 28rpx;
-	line-height: 80rpx;
+  display: flex;
+  flex-direction: column;
+  height: 100vh;
+
+  .box {
+    flex: 1;
+    overflow: hidden;
+    margin: 20rpx;
+
+    .box_in {
+      height: 100%;
+    }
+  }
+}
+.btnSet {
+  width: 440rpx;
+  height: 80rpx;
+  background: #007aff;
+  border-radius: 40rpx;
+  color: #ffffff;
+  font-size: 28rpx;
+  line-height: 80rpx;
 }
 .btnReply {
-	width: 80rpx;
-	height: 40rpx;
-	background: #e3f0ff;
-	border-radius: 16rpx;
-	text-align: center;
-	color: #007aff;
+  width: 80rpx;
+  height: 40rpx;
+  background: #e3f0ff;
+  border-radius: 16rpx;
+  text-align: center;
+  color: #007aff;
 }
 .btnDel {
-	width: 80rpx;
-	height: 40rpx;
-	background: #ffedf0;
-	border-radius: 16rpx;
-	text-align: center;
-	color: #ff2d55;
+  width: 80rpx;
+  height: 40rpx;
+  background: #ffedf0;
+  border-radius: 16rpx;
+  text-align: center;
+  color: #ff2d55;
 }
 .btnReply {
-	width: 80rpx;
-	height: 40rpx;
-	background: #e3f0ff;
-	border-radius: 16rpx;
-	font-size: 24rpx;
+  width: 80rpx;
+  height: 40rpx;
+  background: #e3f0ff;
+  border-radius: 16rpx;
+  font-size: 24rpx;
 }
 .lecture-box {
-	display: flex;
-	align-items: center;
-	height: 80rpx;
-	background: #FFFFFF;
-	border-radius: 16rpx 16rpx 16rpx 16rpx;
-	
-	.title {
-		padding:10rpx;
-		flex:1;
-		overflow: hidden;
-		text-overflow: ellipsis;
-		white-space: nowrap;
-		color:#333;
-		font-weight: bold;
-		font-size: 32rpx;
-	}
-	
-	.btn {
-		display: flex;
-		align-items: center;
-		justify-content: center;
-		width:80rpx;
-		height:80rpx;
-		background: #FFFFFF;
-		box-shadow: -4rpx 0rpx 4rpx 0rpx rgba(0,0,0,0.1);
-		border-radius: 16rpx 16rpx 16rpx 16rpx;
-	}
+  display: flex;
+  align-items: center;
+  height: 80rpx;
+  background: #ffffff;
+  border-radius: 16rpx 16rpx 16rpx 16rpx;
+
+  .title {
+    padding: 10rpx;
+    flex: 1;
+    overflow: hidden;
+    text-overflow: ellipsis;
+    white-space: nowrap;
+    color: #333;
+    font-weight: bold;
+    font-size: 32rpx;
+  }
+
+  .btn {
+    display: flex;
+    align-items: center;
+    justify-content: center;
+    width: 80rpx;
+    height: 80rpx;
+    background: #ffffff;
+    box-shadow: -4rpx 0rpx 4rpx 0rpx rgba(0, 0, 0, 0.1);
+    border-radius: 16rpx 16rpx 16rpx 16rpx;
+  }
 }
 
 .lecture-content {
-	background:#fff;
-	margin-top:10rpx;
-	padding:10rpx;
-	border-radius:16rpx;
+  background: #fff;
+  margin-top: 10rpx;
+  padding: 10rpx;
+  border-radius: 16rpx;
 }
 .photoBox {
-	background-color: #FFFFFF;
-	border-radius: 32px 32px 0px 0px;
-	.photoTop {
-		height: 74rpx;
-		display: flex;
-		align-items: center;
-		justify-content: space-between;
-		padding: 0rpx 38rpx;
-		.sqzz {
-			width: 28rpx;
-			height: 28rpx;
-			display: flex;
-			align-items: center;
-			justify-content: center;
-		}
-		.centersq {
-			color: #333;
-			font-size: 30rpx;
-			font-weight: 500;
-		}
-	}
-	.photoCenter {
-		width: 750rpx;
-		height: 979rpx;
-		position: relative;
-		.custom {
-			width: 750rpx;
-			height: 979rpx;
-			position: absolute;
-			z-index: 1000;
-			top: 0;
-			left: 0;
-			image {
-				width: 100%;
-				height: 100%;
-			}
-		}
-	}
-	
-	.btns {
-		display: flex;
-		
-		
-		.btnResult {
-			height: 100rpx;
-			flex:1;
-			background-color: #07c160;
-			text-align: center;
-			line-height: 100rpx;
-			color: #fff;
-			font-size: 32rpx;
-			font-weight: bold;
-		}
-	}
+  background-color: #ffffff;
+  border-radius: 32px 32px 0px 0px;
+  .photoTop {
+    height: 74rpx;
+    display: flex;
+    align-items: center;
+    justify-content: space-between;
+    padding: 0rpx 38rpx;
+    .sqzz {
+      width: 28rpx;
+      height: 28rpx;
+      display: flex;
+      align-items: center;
+      justify-content: center;
+    }
+    .centersq {
+      color: #333;
+      font-size: 30rpx;
+      font-weight: 500;
+    }
+  }
+  .photoCenter {
+    width: 750rpx;
+    height: 979rpx;
+    position: relative;
+    .custom {
+      width: 750rpx;
+      height: 979rpx;
+      position: absolute;
+      z-index: 1000;
+      top: 0;
+      left: 0;
+      image {
+        width: 100%;
+        height: 100%;
+      }
+    }
+  }
+
+  .btns {
+    display: flex;
+
+    .btnResult {
+      height: 100rpx;
+      flex: 1;
+      background-color: #07c160;
+      text-align: center;
+      line-height: 100rpx;
+      color: #fff;
+      font-size: 32rpx;
+      font-weight: bold;
+    }
+  }
 }
 .chat_box {
-	display: flex;
-	padding: 20rpx;
-	justify-content: space-between;
+  display: flex;
+  padding: 20rpx;
+  justify-content: space-between;
 }
 .chat3 {
-	font-size: 30rpx;
-	font-family: PingFang SC;
-	font-weight: 500;
-	color: #666666;
-	margin-top: 10rpx;
+  font-size: 30rpx;
+  font-family: PingFang SC;
+  font-weight: 500;
+  color: #666666;
+  margin-top: 10rpx;
 }
 .chat2 {
-	font-size: 20rpx;
-	font-family: PingFang SC;
-	font-weight: 500;
-	color: #999999;
-	margin-top: 10rpx;
+  font-size: 20rpx;
+  font-family: PingFang SC;
+  font-weight: 500;
+  color: #999999;
+  margin-top: 10rpx;
 }
 .chat1 {
-	font-size: 24rpx;
-	font-family: PingFang SC;
-	font-weight: 500;
-	color: #333333;
+  font-size: 24rpx;
+  font-family: PingFang SC;
+  font-weight: 500;
+  color: #333333;
 }
 .leftPadding {
-	margin-left: 8rpx;
+  margin-left: 8rpx;
 }
 .t2Content {
-	font-size: 28rpx;
-	font-family: PingFang SC;
-	font-weight: bold;
-	color: #999999;
-	line-height: 48rpx;
+  font-size: 28rpx;
+  font-family: PingFang SC;
+  font-weight: bold;
+  color: #999999;
+  line-height: 48rpx;
 }
 .tBox2 {
-	display: flex;
-	padding-top: 10rpx;
-	color: #333333;
-	font-size: 30rpx;
+  display: flex;
+  padding-top: 10rpx;
+  color: #333333;
+  font-size: 30rpx;
 }
 .tBox {
-	display: flex;
-	align-items: center;
-	padding-top: 10rpx;
+  display: flex;
+  align-items: center;
+  padding-top: 10rpx;
 }
 .title {
-	font-size: 24rpx;
-	color: #999999;
+  font-size: 24rpx;
+  color: #999999;
 }
 
 page {
-	// padding-top: 10px;
-	// padding-top: constant(safe-area-inset-top);
-	// padding-top: env(safe-area-inset-top);
+  // padding-top: 10px;
+  // padding-top: constant(safe-area-inset-top);
+  // padding-top: env(safe-area-inset-top);
 }
 .inputBottom {
-	position: fixed;
-	left: 0;
-	bottom: 0;
-	background: #ffffff;
-	height: 98rpx;
-	display: flex;
-	align-items: center;
-	width: 100%;
-	
-	.flex_auto {
-		flex:1;
-		margin-left: 10% ;
-		
-		.input {
-			height:60rpx;
-		}
-	}
-	
-	.btn {
-		color: #007AFF;font-size: 30rpx;font-weight: bold;width: 15%;text-align: center;
-	}
+  position: fixed;
+  left: 0;
+  bottom: 0;
+  background: #ffffff;
+  height: 98rpx;
+  display: flex;
+  align-items: center;
+  width: 100%;
+
+  .flex_auto {
+    flex: 1;
+    margin-left: 10%;
+
+    .input {
+      height: 60rpx;
+    }
+  }
+
+  .btn {
+    color: #007aff;
+    font-size: 30rpx;
+    font-weight: bold;
+    width: 15%;
+    text-align: center;
+  }
 }
 .noteBox {
-	width: 100%;
-	background: #ffffff;
-	padding: 10rpx;
-	border-radius: 16rpx;
+  width: 100%;
+  background: #ffffff;
+  padding: 10rpx;
+  border-radius: 16rpx;
 }
 .dateBox {
-	width: 216rpx;
-	height: 48rpx;
-	background: #ffffff;
-	border-radius: 24rpx;
-	font-size: 24rpx;
-	color: #666666;
-	text-align: center;
-	line-height: 48rpx;
-	margin: 20rpx 0;
+  width: 216rpx;
+  height: 48rpx;
+  background: #ffffff;
+  border-radius: 24rpx;
+  font-size: 24rpx;
+  color: #666666;
+  text-align: center;
+  line-height: 48rpx;
+  margin: 20rpx 0;
 }
 .t_content1 {
-	color: #007aff;
-	margin-left: 10rpx;
+  color: #007aff;
+  margin-left: 10rpx;
 }
 .tag1 {
-	border: 2rpx solid #007aff;
-	border-radius: 8rpx;
-	font-size: 20rpx;
-	color: #007aff;
-	padding: 5rpx;
+  border: 2rpx solid #007aff;
+  border-radius: 8rpx;
+  font-size: 20rpx;
+  color: #007aff;
+  padding: 5rpx;
 }
 .b_title {
-	color: #333333;
-	font-size: 30rpx;
-	font-weight: bold;
+  color: #333333;
+  font-size: 30rpx;
+  font-weight: bold;
 }
 page {
-	background: #eaeef1;
+  background: #eaeef1;
 }
 .menuBox {
-	width: 100%;
-	background: #ffffff;
-	border-radius: 16rpx;
-	padding: 20rpx;
-	margin-bottom: 20rpx;
+  width: 100%;
+  background: #ffffff;
+  border-radius: 16rpx;
+  padding: 20rpx;
+  margin-bottom: 20rpx;
 }
 .btnspric {
-	border-top: 1rpx solid #eee;
-	display: flex;
-	align-items: center;
-	justify-content: space-between;
-	height: 108rpx;
-	padding-left: 43rpx;
-	padding-right: 32rpx;
+  border-top: 1rpx solid #eee;
+  display: flex;
+  align-items: center;
+  justify-content: space-between;
+  height: 108rpx;
+  padding-left: 43rpx;
+  padding-right: 32rpx;
 }
 .btnspric > .lefprL {
-	font-size: 36rpx;
-	color: #0c141f;
-	font-weight: bold;
+  font-size: 36rpx;
+  color: #0c141f;
+  font-weight: bold;
 }
 .btnspric > .lefprR {
-	padding: 0rpx 24rpx;
-	height: 60rpx;
-	line-height: 60rpx;
-	text-align: center;
-	color: #fff;
-	background: #32467b;
-	border-radius: 24rpx;
-	box-shadow: 0rpx 0rpx 16rpx 4rpx rgba(145, 156, 178, 0.1);
+  padding: 0rpx 24rpx;
+  height: 60rpx;
+  line-height: 60rpx;
+  text-align: center;
+  color: #fff;
+  background: #32467b;
+  border-radius: 24rpx;
+  box-shadow: 0rpx 0rpx 16rpx 4rpx rgba(145, 156, 178, 0.1);
 }
 .yhj,
 .hdyhj {
-	padding: 24rpx 29rpx 24rpx 34rpx;
+  padding: 24rpx 29rpx 24rpx 34rpx;
 }
 .yhj {
-	border-bottom: 16rpx solid #f9f9f9;
+  border-bottom: 16rpx solid #f9f9f9;
 }
 .yhjtit {
-	font-size: 30rpx;
-	color: #0c141f;
-	font-weight: 500;
-	margin-bottom: 14rpx;
+  font-size: 30rpx;
+  color: #0c141f;
+  font-weight: 500;
+  margin-bottom: 14rpx;
 }
 .yhjList {
-	display: flex;
-	align-items: center;
-	justify-content: space-between;
-	margin-bottom: 14rpx;
+  display: flex;
+  align-items: center;
+  justify-content: space-between;
+  margin-bottom: 14rpx;
 }
 .yhjList > .yhjLefts {
-	display: flex;
-	align-items: center;
+  display: flex;
+  align-items: center;
 }
 .yhjLefts > .yhl {
-	color: #32467b;
-	font-size: 30rpx;
-	margin-right: 31rpx;
+  color: #32467b;
+  font-size: 30rpx;
+  margin-right: 31rpx;
 }
 .yhjLefts > .yhbq {
-	font-size: 24rpx;
-	color: #ff9500;
-	border-radius: 18rpx;
-	background-color: rgba(255, 149, 0, 0.2);
-	border: 2rpx solid #ff9500;
-	height: 38rpx;
-	line-height: 38rpx;
-	padding: 0rpx 16rpx;
+  font-size: 24rpx;
+  color: #ff9500;
+  border-radius: 18rpx;
+  background-color: rgba(255, 149, 0, 0.2);
+  border: 2rpx solid #ff9500;
+  height: 38rpx;
+  line-height: 38rpx;
+  padding: 0rpx 16rpx;
 }
 .ts {
-	font-size: 24rpx;
-	color: #999;
-	margin: 14rpx 0rpx;
-	padding-right: 29rpx;
-	padding-left: 34rpx;
+  font-size: 24rpx;
+  color: #999;
+  margin: 14rpx 0rpx;
+  padding-right: 29rpx;
+  padding-left: 34rpx;
 }
 .yh {
-	padding-top: 20rpx;
+  padding-top: 20rpx;
 }
 .yh > .yhtitle {
-	display: flex;
-	align-items: center;
-	justify-content: space-between;
-	padding-right: 29rpx;
-	padding-left: 34rpx;
+  display: flex;
+  align-items: center;
+  justify-content: space-between;
+  padding-right: 29rpx;
+  padding-left: 34rpx;
 }
 .priceBxs {
-	display: flex;
-	align-items: center;
+  display: flex;
+  align-items: center;
 }
 .priceBxs > .pricleft {
-	border-radius: 24rpx;
-	border: 1rpx solid #e91313;
-	background-color: rgba(233, 19, 19, 0.1);
-	padding: 0rpx 18rpx;
-	height: 49rpx;
-	line-height: 49rpx;
-	text-align: center;
-	font-size: 30rpx;
-	font-weight: 500;
-	color: #e91313;
-	margin-right: 13rpx;
+  border-radius: 24rpx;
+  border: 1rpx solid #e91313;
+  background-color: rgba(233, 19, 19, 0.1);
+  padding: 0rpx 18rpx;
+  height: 49rpx;
+  line-height: 49rpx;
+  text-align: center;
+  font-size: 30rpx;
+  font-weight: 500;
+  color: #e91313;
+  margin-right: 13rpx;
 }
 .topBox {
-	padding: 32rpx 32rpx 24rpx;
-	border-bottom: 1rpx solid #eeeeee;
+  padding: 32rpx 32rpx 24rpx;
+  border-bottom: 1rpx solid #eeeeee;
 }
 .topBox > .boldFonstType {
-	font-weight: 500;
-	font-size: 30rpx;
-	margin: 16rpx 0rpx 23rpx;
+  font-weight: 500;
+  font-size: 30rpx;
+  margin: 16rpx 0rpx 23rpx;
 }
 .topBox > .firstTopL {
-	display: flex;
-	align-items: center;
+  display: flex;
+  align-items: center;
 }
 .topBox > .firstTopL > .imageBs {
-	width: 331rpx;
-	height: 160rpx;
-	border-radius: 6rpx;
-	overflow: hidden;
-	margin-right: 8rpx;
-	box-shadow: 0rpx 6rpx 6rpx 0rpx rgba(47, 67, 121, 0.08);
+  width: 331rpx;
+  height: 160rpx;
+  border-radius: 6rpx;
+  overflow: hidden;
+  margin-right: 8rpx;
+  box-shadow: 0rpx 6rpx 6rpx 0rpx rgba(47, 67, 121, 0.08);
 }
 .topBox > .firstTopL > .imageBs > image {
-	width: 100%;
-	height: 100%;
+  width: 100%;
+  height: 100%;
 }
 .topBox > .firstTopL > .textBs {
-	font-size: 30rpx;
-	font-weight: bold;
-	color: #0c141f;
+  font-size: 30rpx;
+  font-weight: bold;
+  color: #0c141f;
 }
 .content {
-	padding: 24rpx;
-	text-align: left;
+  padding: 24rpx;
+  text-align: left;
 }
 .catalogBox {
-	display: flex;
-	align-items: center;
-	flex-wrap: nowrap;
-	overflow-x: auto;
-	padding-left: 38rpx;
-	max-height: 305rpx;
-	overflow-y: auto;
-	transition: all 0.4s;
+  display: flex;
+  align-items: center;
+  flex-wrap: nowrap;
+  overflow-x: auto;
+  padding-left: 38rpx;
+  max-height: 305rpx;
+  overflow-y: auto;
+  transition: all 0.4s;
 }
 .catalogBox > .catalogA {
-	min-width: 200rpx;
-	height: 48rpx;
-	line-height: 48rpx;
-	// text-align: center;
-	border: 2rpx solid transparent;
-	white-space: nowrap;
-	text-overflow: ellipsis;
-	overflow: hidden;
-	word-break: break-all;
-	border-radius: 10rpx;
-	background: rgba(22, 119, 255, 0.05);
-	padding-left: 19rpx;
-	box-sizing: border-box;
-	padding-right: 15rpx;
-	margin-right: 16rpx;
-	margin-bottom: 20rpx;
-	margin-top: 15rpx;
-	font-size: 24rpx;
-	color: #666;
+  min-width: 200rpx;
+  height: 48rpx;
+  line-height: 48rpx;
+  // text-align: center;
+  border: 2rpx solid transparent;
+  white-space: nowrap;
+  text-overflow: ellipsis;
+  overflow: hidden;
+  word-break: break-all;
+  border-radius: 10rpx;
+  background: rgba(22, 119, 255, 0.05);
+  padding-left: 19rpx;
+  box-sizing: border-box;
+  padding-right: 15rpx;
+  margin-right: 16rpx;
+  margin-bottom: 20rpx;
+  margin-top: 15rpx;
+  font-size: 24rpx;
+  color: #666;
 }
 .catalogBox > .activesq {
-	border-color: #1677ff;
+  border-color: #1677ff;
 }
 .changeCatalogBox {
-	display: block;
+  display: block;
 }
 .catalogBox::-webkit-scrollbar {
-	display: none; /* Chrome Safari */
+  display: none; /* Chrome Safari */
 }
 .price_t2 {
-	font-size: 18rpx;
-	font-family: PingFang SC;
-	font-weight: 500;
-	text-decoration: line-through;
-	color: #999999;
+  font-size: 18rpx;
+  font-family: PingFang SC;
+  font-weight: 500;
+  text-decoration: line-through;
+  color: #999999;
 }
 .price_t1 {
-	font-size: 33rpx;
-	font-family: PingFang SC;
-	font-weight: bold;
-	color: #e91313;
+  font-size: 33rpx;
+  font-family: PingFang SC;
+  font-weight: bold;
+  color: #e91313;
 }
 .sc_t {
-	font-size: 22rpx;
-	color: #000000;
+  font-size: 22rpx;
+  color: #000000;
 }
 .sc {
-	width: 29rpx;
-	height: 29rpx;
+  width: 29rpx;
+  height: 29rpx;
 }
 .buy {
-	width: 138rpx;
-	height: 48rpx;
-	line-height: 48rpx;
-	background: #32467b;
-	border-radius: 10rpx;
-	color: #ffffff;
-	font-size: 28rpx;
-	text-align: center;
-	vertical-align: middle;
-	position: absolute;
-	right: 30rpx;
+  width: 138rpx;
+  height: 48rpx;
+  line-height: 48rpx;
+  background: #32467b;
+  border-radius: 10rpx;
+  color: #ffffff;
+  font-size: 28rpx;
+  text-align: center;
+  vertical-align: middle;
+  position: absolute;
+  right: 30rpx;
 }
 .video_body {
-	padding-bottom: 96rpx;
+  padding-bottom: 96rpx;
 }
 .footer_tab {
-	position: fixed;
-	bottom: 0;
-	height: 96rpx;
-	width: 100%;
-	background-color: #ffffff;
+  position: fixed;
+  bottom: 0;
+  height: 96rpx;
+  width: 100%;
+  background-color: #ffffff;
 }
 .tj_box {
-	width: 50%;
-	display: inline-block;
-	text-align: center;
-	margin: 10rpx 0;
+  width: 50%;
+  display: inline-block;
+  text-align: center;
+  margin: 10rpx 0;
 }
 .teacher_t {
-	font-size: 24rpx;
-	font-family: PingFang SC;
-	font-weight: 400;
-	color: #666666;
-	line-height: 36rpx;
-	margin-left: 15rpx;
+  font-size: 24rpx;
+  font-family: PingFang SC;
+  font-weight: 400;
+  color: #666666;
+  line-height: 36rpx;
+  margin-left: 15rpx;
 }
 .teacher_img {
-	width: 87rpx;
-	height: 129rpx;
+  width: 87rpx;
+  height: 129rpx;
 }
 .t2 {
-	font-size: 24rpx;
-	font-family: PingFang SC;
-	color: #666666;
-	line-height: 36rpx;
-	margin: 15rpx;
+  font-size: 24rpx;
+  font-family: PingFang SC;
+  color: #666666;
+  line-height: 36rpx;
+  margin: 15rpx;
 }
 .r_t2 {
-	width: 201rpx;
-	height: 49rpx;
-	background: rgba(22, 119, 255, 0.05);
-	border: 1rpx solid #32467b;
-	border-radius: 16rpx;
-	color: #666666;
-	font-size: 23rpx;
-	text-align: center;
-	display: flex;
-	align-items: center;
-	padding: 5rpx;
+  width: 201rpx;
+  height: 49rpx;
+  background: rgba(22, 119, 255, 0.05);
+  border: 1rpx solid #32467b;
+  border-radius: 16rpx;
+  color: #666666;
+  font-size: 23rpx;
+  text-align: center;
+  display: flex;
+  align-items: center;
+  padding: 5rpx;
 }
 .scroll_box {
-	width: 100%;
-	height: 60rpx;
-	background: #ffffff;
-	box-shadow: 0rpx 0rpx 16rpx 4rpx rgba(145, 156, 178, 0.1);
-	white-space: nowrap;
-	overflow: hidden;
-	margin: 15rpx 0;
+  width: 100%;
+  height: 60rpx;
+  background: #ffffff;
+  box-shadow: 0rpx 0rpx 16rpx 4rpx rgba(145, 156, 178, 0.1);
+  white-space: nowrap;
+  overflow: hidden;
+  margin: 15rpx 0;
 }
 .r_sliper {
-	padding: 0 20rpx;
+  padding: 0 20rpx;
 }
 .top_line {
-	width: 6rpx;
-	height: 22rpx;
-	background: #32467b;
-	margin-right: 10rpx;
+  width: 6rpx;
+  height: 22rpx;
+  background: #32467b;
+  margin-right: 10rpx;
 }
 .video_t2 {
-	font-size: 24rpx;
-	font-family: PingFang SC;
-	font-weight: 500;
-	color: #666666;
+  font-size: 24rpx;
+  font-family: PingFang SC;
+  font-weight: 500;
+  color: #666666;
 }
 .video_t1 {
-	height: 80rpx;
-	color: #333333;
-	line-height: 80rpx;
-	font-size: 30rpx;
-	font-family: PingFang SC;
-	font-weight: bold;
-	color: #333333;
-	overflow: hidden;
-	text-overflow: ellipsis;
-	white-space: nowrap;
+  height: 80rpx;
+  color: #333333;
+  line-height: 80rpx;
+  font-size: 30rpx;
+  font-family: PingFang SC;
+  font-weight: bold;
+  color: #333333;
+  overflow: hidden;
+  text-overflow: ellipsis;
+  white-space: nowrap;
 }
 
 .notice_wrap {
-	height:80rpx;
-	display: flex;
-	align-items: center;
-	justify-content: flex-end;
-	
-	.video_t1_t {
-		width:100%;
-		height:40rpx;
-		line-height: 40rpx;
-		text-align: center;
-		background:rgba(245,154,35,1);
-		color:#333;
-		border-radius:10rpx;
-		font-size: 24rpx;
-	}
+  height: 80rpx;
+  display: flex;
+  align-items: center;
+  justify-content: flex-end;
+
+  .video_t1_t {
+    width: 100%;
+    height: 40rpx;
+    line-height: 40rpx;
+    text-align: center;
+    background: rgba(245, 154, 35, 1);
+    color: #333;
+    border-radius: 10rpx;
+    font-size: 24rpx;
+  }
 }
 .video_play {
-	position: absolute;
-	width: 95rpx;
-	height: 95rpx;
-	top: 0;
-	left: 0;
-	right: 0;
-	bottom: 0;
-	margin: auto;
+  position: absolute;
+  width: 95rpx;
+  height: 95rpx;
+  top: 0;
+  left: 0;
+  right: 0;
+  bottom: 0;
+  margin: auto;
 }
 .video_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;
-		
-		&__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)
-	}
+  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;
+
+    &__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);
+  }
 }
 .rotoct {
-	transform: rotate(90deg);
+  transform: rotate(90deg);
 }
 
 .notice_modal {
-	.content {
-		width:100%;
-		height:100%;
-		padding:20rpx;
-		
-		.title {
-			color:#333;
-			line-height: 40rpx;
-			font-size: 30rpx;
-			text-align: center;
-			font-weight: bold;
-		}
-		.text {
-			line-height: 40rpx;
-		}
-	}
+  .content {
+    width: 100%;
+    height: 100%;
+    padding: 20rpx;
+
+    .title {
+      color: #333;
+      line-height: 40rpx;
+      font-size: 30rpx;
+      text-align: center;
+      font-weight: bold;
+    }
+    .text {
+      line-height: 40rpx;
+    }
+  }
 }
 </style>