<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="true"
						:page-gesture="true"
						:vslide-gesture="true"
						:vslide-gesture-in-fullscreen="true"
            :isAllowSeek="isAllowSeek"
            :playbackRate="playbackRate"
            :startTime="startTime"
            :enableAutoRotation="enableAutoRotation"
						@loadedmetadata="loadedmetadata"
          ></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"
						:page-gesture="true"
						:vslide-gesture="true"
						:vslide-gesture-in-fullscreen="true"
            @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="top__header" v-if="livingItem" @click="goLive(livingItem)">
						<image class="img" src="/pages5/static/live.png" mode="widthFix"></image>
						<view class="note">正在直播中</view>
						<view class="title">{{livingItem.name}}</view>
					</view>
          <view class="menuBox" v-for="(item, index) in menuList" :key="index">
            <!--模块 -->
            <view v-if="item.type == 1"
              ><courseModule
								:orderGoodsId="orderGoodsId"
                :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
								:orderGoodsId="orderGoodsId"
                :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
								:orderGoodsId="orderGoodsId"
                :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 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) && playChannelId ==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"
								:focus="isFocus"
                :placeholder="placeholder"
                type="input"
								@blur="blur"
                :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
								:orderGoodsId="orderGoodsId"
                :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
								:orderGoodsId="orderGoodsId"
                :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
								:orderGoodsId="orderGoodsId"
                :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-popup
      v-model="noticeShow"
      class="notice_modal"
			@close="closeNotice"
      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 {WEBVIEW_URL} from '@/common/request.js'
// import { websocket } from "@/common/socket.js";
import { mapGetters, mapMutations } from "vuex";
export default {
  components: {
    courseModule,
    courseChapter,
    courseSection,
  },
  data() {
    return {
			hasStart:false,
			channelItem:null,
      lockTimer: null,
      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, //视频是否从重修目录点击
			isFocus:false,
			clearTimer:null,
			livingItem:'',
			option:null,
    };
  },
  computed: {
    ...mapGetters(["userInfo", "playSectionId", "playChannelId", "playVID"]),
  },
  onLoad(option) {
    this.courseId = Number(option.id);
    this.goodsId = Number(option.goodsId);
    this.orderGoodsId = Number(option.orderGoodsId) || '';
		this.option = option
  //   this.courseDetail();
  //   this.getGoodsDetail();
  //   this.getAnswerList();
		// this.studyRecordMenuAllList();
  //   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");
			
		// 	this.playNoteVideo(item)
  //   } else {
		// 	this.studyRecordQueryLiveLast();
		// }
  },
  onShow() {
    var self = this;
    //相机授权
		// this.userConfirmInfoDetail().then(res => {
			
		// })
		
		this.getbaseprofiletplists().then(res => {
			this.courseDetail();
			this.getGoodsDetail();
			this.getAnswerList();
			this.studyRecordMenuAllList();
			this.answerTimer = setInterval(() => {
			  this.getAnswerList();
			}, 5000);
			let noteSecond = Number(this.option.noteSecond);
			if (noteSecond > 0) {
			  //我的消息跳过来,播放节
			  let item = {
			    sectionId: Number(this.option.sectionId),
			    recordingUrl: this.option.recordingUrl,
			    noteSecond: noteSecond,
			    studyDuration: noteSecond,
			  };
			  let playNextId = `moduleId${this.option.moduleId}chapterId${
			    this.option.chapterId
			  }sectionId${this.option.sectionId}${this.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");
				
				this.playNoteVideo(item)
			} else {
				this.studyRecordQueryLiveLast();
			}
		});
    
    console.log(this.gradeId, 7512);
    
  },
	onHide() {
		
	},
  onUnload() {
    if (this.playSectionId > 0 && this.hasStart) {
      //退出提交记录
      this.postStudyRecord();
    }
    //清除正在播放的节ID
		// this.$store.commit('setPlayObj',null)
    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);
    }
    console.log(this.lockTimer, "this.lockTimer");
    if (this.lockTimer) {
      clearInterval(this.lockTimer);
      this.$api
        .lockDelLock({
          action: "jxjy",
					uuid:this.$method.getUuid()
        })
        .then((res) => {});
    }
    // websocket.sendMsg("delAction");
  },
  mounted() {
    uni.$on("changeSection", (oldSectionId) => {
      console.log(this.playVID);
				this.hasStart = false;
      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.hasStart = false;
      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.hasStart = false;
      this.$store.commit("setPlayVID", { playVID: null });
      this.getPhotoLastRecord();
      this.playChannel(item);
			this.channelItem = item;
    });
    uni.$on("isRebuild", (item) => {
      console.log(item);
      this.isRebuild = item;
    });
    this.updateChapterOpen(true);
  },
  methods: {
    ...mapMutations(["updateChapterOpen","updateLiveLast"]),
		closeNotice() {
			this.$api.baseHandoutTip({
				orderGoodsId:this.orderGoodsId
			}).then(res => {
				
			})
		},
		baseHandoutTipList() {
			this.$api.baseHandoutTipList({
				orderGoodsId:this.orderGoodsId
			}).then(res => {
				if(res.data.rows.length == 0) {
					this.noticeShow = true;
				}
			})
		},
		/**
		 * 获取上次观看的直播
		 */
		studyRecordGetLastLive() {
			this.$api.studyRecordGetLastLive({
				orderGoodsId:this.orderGoodsId,
				courseId:this.courseId
			}).then(res => {
				console.log(res,'liveres')
				this.updateLiveLast(res.data.data)
			})
		},
		studyRecordQueryLiveLast() {
			this.$api.studyRecordQueryLiveLast({
				orderGoodsId:this.orderGoodsId,
				courseId:this.courseId
			}).then(res => {
				console.log(res,'couse')
				if(res.data.data) {
					if(res.data.data.sectionType == 1) { //录播
					this.$store.commit("setPlaySectionId", { playSectionId: res.data.data.sectionId });
					this.$store.commit("setPlayVID", { playVID: res.data.data.recordingUrl });
					this.sectionItem = res.data.data;
						this.playVideo(res.data.data)
					} else if(res.data.data.sectionType == 2) { //直播
						this.studyRecordGetLastLive();
					} else if(res.data.data.sectionType == 3) { //回放
					this.$store.commit("setPlaySectionId", { playSectionId: res.data.data.sectionId });
					this.$store.commit("setPlayVID", { playVID: res.data.data.recordingUrl });
						this.sectionItem = res.data.data;
						this.playVideo(res.data.data)
					}
					
				}
			})
		},
    /**
     * 模块大节播放完毕，刷新列表
     */
    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({
							orderGoodsId: this.orderGoodsId,
              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,orderGoodsId: this.orderGoodsId, })
            .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,orderGoodsId: this.orderGoodsId, })
            .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({
							orderGoodsId: this.orderGoodsId,
              courseId: this.courseId,
              rebuild: 1,
              gradeId: this.gradeId,
            })
            .then((res) => {
              console.log("Rebuild2");
              if (res.data.code == 200) {
                if (res.data.rows.length) {
                  // 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 = res.data.rows;
                } 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;
                    }
                  }
                });
              }
            });
        }
      } else {
        //没有重修目录
        this.$api
          .reMenuList({ courseId: this.courseId, gradeId: this.gradeId ,orderGoodsId: this.orderGoodsId,})
          .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]);
            }
          });
      }
    },
		goLive(item) {
			let moduleId = item.moduleId || 0;
			let chapterId = item.chapterId || 0;
			let sectionId = item.sectionId || item.menuId;
			let encode = encodeURIComponent(WEBVIEW_URL+'pages/live/index?token='+uni.getStorageSync('token')+'&userInfo='+JSON.stringify(this.userInfo)+'&channelId='+item.liveUrl+'&gradeId='+this.gradeId+'&courseId='+this.courseId+'&goodsId='+this.goodsId+'&orderGoodsId='+this.orderGoodsId+'&sectionId='+sectionId+'&chapterId='+chapterId+'&moduleId='+moduleId)
			uni.navigateTo({
				url:`../../pages/webview/index?url=`+encode
			})
		},
		studyRecordMenuAllList() {
			this.$api.studyRecordMenuAllList({
				courseId:this.courseId,
				gradeId:this.gradeId,
				goodsId:this.goodsId
			}).then(res => {
				let nowTime = Number(new  Date().getTime()/1000).toFixed(0)
				// this.livingItem = res.data.data[0]
				this.livingItem = res.data.data.find(item => item.liveStartTime<=nowTime&&item.liveEndTime>nowTime);
			})
		},
		getbaseprofiletplists() {
			return new Promise(resolve => {
				let self = this;
				this.getCameraSetting();
				this.$api.getbaseprofiletplists({ goodsId: self.goodsId,orderGoodsId: this.orderGoodsId, }).then((res) => {
				  console.log(res, "res1");
				  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,
				                            });
				                          }
				                          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,
				                            });
				                          }
				                          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,
				                                      }
				                                    );
				                                  }
				                                  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,
				                                      }
				                                    );
				                                  }
				                                  if (resultst.cancel) {
				                                    uni.navigateBack();
				                                  }
				                                },
				                              });
				                            }
				                          } else {
																		
																			resolve();
																	}
				                        }
				                      });
				                  } else {
														
															resolve();
													}
				                }
				              });
				          } else {
										
											resolve();
									}
				        }
				      });
				    } else {
							
								resolve();
						}
				  } else {
						resolve();
					}
				});
				
				if (this.gradeId > 0) {
				  //提交完资料返回判断是否已开班
				
				  this.getGradeInfo();
				}
			})
			
		},
		
    /**
     * 获取业务层次详情
     */
    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 {};
    },
		loadedmetadata(e) {
			var polyvPlayerContext = this.selectComponent("#playerVideo");
			this.hasStart = true;
			uni.$off('playPause')
			uni.$on('playPause',() => {
				polyvPlayerContext.pause()
			})
			if(!this.recordObj.videoCurrentTime) { //新视频直接提交一条观看记录
				this.postStudyRecord(0)
			}
		},
    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),
				orderGoodsId: this.orderGoodsId,
      };
      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(",") : "",
					orderGoodsId: this.orderGoodsId,
        };
        console.log("提交接口", data);
        this.$api
          .coursePhotoRecord(data)
          .then((res) => {
						console.log(res,'postCoursePhotoRecord')
            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(0);
            } else if (photoNum == 3) {
              //拍3张
              this.photoList.push(0); //开头拍一张
              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(0);
            } else if (photoNum == 3) {
              //拍2张
              if (totalVideoTime <= 300) {
                //小于5分钟
                this.photoList.push(0); //开头拍一张
                let endTakeTime = this.randomNum(10, totalVideoTime); //中间随机取一张
                this.photoList.push(endTakeTime);
              } else {
                this.photoList.push(0); //开头拍一张
                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,
					orderGoodsId: this.orderGoodsId,
        };
        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秒拍照
						console.log(this.channelItem)
						console.log(this.photoHistoryList,'this.photoHistoryList')
            if (
              this.goodsPhotographConfig && this.goodsPhotographConfig.livephotograph == 1 &&
              this.channelItem.learning != 1 && this.photoHistoryList.length == 0
            ) {
              //开启直播拍照
              this.openPhoto();
            } else {
							this.postStudyRecord(0);
						}
          }
        }
      }
    },
    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") {
				this.hasStart = false;
        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,'222');
      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 = 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),
					orderGoodsId: this.orderGoodsId,
        };
        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,
				orderGoodsId: this.orderGoodsId,
      };
      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,
				orderGoodsId: this.orderGoodsId,
      };
      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 ,orderGoodsId: this.orderGoodsId,};
      this.$api.delAnswer(data).then((res) => {
        if (res.data.code == 200) {
          self.getAnswerList();
        }
      });
    },
    clearCtx() {
      console.log(4234);
      this.placeholder = "您可以在这里输入答疑内容";
      this.ctxValue = "";
      this.assignUserId = 0;
    },
		blur() {
			this.clearTimer = setTimeout(() => {
				this.ctxValue = ""
				this.isFocus = false;
				this.assignUserId = 0;
				this.placeholder = '您可以在这里输入答疑内容';
			},2000)
		},
    replyContent(item) {
			this.isFocus = true;
      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,
				orderGoodsId: this.orderGoodsId,
      };
      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.isFocus = false;
          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),
				orderGoodsId: this.orderGoodsId,
        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) {
			console.log(options)
      var self = this;
      return new Promise((resolve, reject) => {
        var data = {
          imageStatus: int,
          gradeId: this.gradeId,
					orderGoodsId: this.orderGoodsId,
        };
        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.hasStart = false;
        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;
						console.log({
                imageA: base64,
                orderGoodsId: this.orderGoodsId,
                gradeId: this.gradeId,
              },'base64Data')
            this.$api
              .faceCertificationCompareFace({
                imageA: base64,
                orderGoodsId: this.orderGoodsId,
                gradeId: this.gradeId,
              })
              .then((res) => {
                console.log(res, "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();
			console.log(compareFaceData,'compareFaceData')
      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();
          });
      } else {
				uni.showToast({
				  title: "人脸匹配不通过，请重新拍照上传",
				  icon: "none",
				  duration: 2000,
				});
				
				setTimeout(() => {
				  this.uploadLock = false;
				  this.openPhoto();
				}, 2000);
				return;
			}
    },
    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;
				if(self.goodsData.buyNote) {
						this.baseHandoutTipList()
				}
        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,orderGoodsId: this.orderGoodsId, })
        .then((res) => {
          if (res.data.code == 200) {
            self.answerList = res.data.rows;
          }
        });
    },
    getReMenuList() {
      let self = this;
      this.$api
        .reMenuList({
					orderGoodsId: this.orderGoodsId,
          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,orderGoodsId: this.orderGoodsId, })
        .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 == "继续教育") {
            this.$api
              .lockLockAction({
                action: "jxjy",
								uuid:this.$method.getUuid()
              })
              .then((res) => {});
            this.lockTimer = setInterval(() => {
              this.$api
                .lockLockAction({
                  action: "jxjy",
									uuid:this.$method.getUuid()
                })
                .then((res) => {});
            }, 10000);

            // 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>
	.top {
		&__header {
			position:relative;
			width:100%;
			height:150rpx;
			padding:24rpx 150rpx 24rpx 24rpx;
			
			.img {
				position:absolute;
				left:0;
				top:0;
				width:100%;
			}
			
			.note {
				position:relative;
				z-index: 10;
				font-size: 24rpx;
				font-family: PingFang SC;
				font-weight: bold;
				color: #EFDBFF;
			}
			
			.title {
				position:relative;
				z-index: 10;
				font-size: 26rpx;
				font-family: PingFang SC;
				font-weight: bold;
				color: #FFFFFF;
			}
			
			.desc {
				
			}
		}
	}
.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;
}
.btnReply {
  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;
}
.btnReply {
  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;
  }
}

.lecture-content {
  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;
    }
  }
}
.chat_box {
  display: flex;
  padding: 20rpx;
  justify-content: space-between;
}
.chat3 {
  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;
}
.chat1 {
  font-size: 24rpx;
  font-family: PingFang SC;
  font-weight: 500;
  color: #333333;
}
.leftPadding {
  margin-left: 8rpx;
}
.t2Content {
  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;
}
.tBox {
  display: flex;
  align-items: center;
  padding-top: 10rpx;
}
.title {
  font-size: 24rpx;
  color: #999999;
}

page {
  // 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;
  }
}
.noteBox {
  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;
}
.t_content1 {
  color: #007aff;
  margin-left: 10rpx;
}
.tag1 {
  border: 2rpx solid #007aff;
  border-radius: 8rpx;
  font-size: 20rpx;
  color: #007aff;
  padding: 5rpx;
}
.b_title {
  color: #333333;
  font-size: 30rpx;
  font-weight: bold;
}
page {
  background: #eaeef1;
}
.menuBox {
  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;
}
.btnspric > .lefprL {
  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);
}
.yhj,
.hdyhj {
  padding: 24rpx 29rpx 24rpx 34rpx;
}
.yhj {
  border-bottom: 16rpx solid #f9f9f9;
}
.yhjtit {
  font-size: 30rpx;
  color: #0c141f;
  font-weight: 500;
  margin-bottom: 14rpx;
}
.yhjList {
  display: flex;
  align-items: center;
  justify-content: space-between;
  margin-bottom: 14rpx;
}
.yhjList > .yhjLefts {
  display: flex;
  align-items: center;
}
.yhjLefts > .yhl {
  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;
}
.ts {
  font-size: 24rpx;
  color: #999;
  margin: 14rpx 0rpx;
  padding-right: 29rpx;
  padding-left: 34rpx;
}
.yh {
  padding-top: 20rpx;
}
.yh > .yhtitle {
  display: flex;
  align-items: center;
  justify-content: space-between;
  padding-right: 29rpx;
  padding-left: 34rpx;
}
.priceBxs {
  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;
}
.topBox {
  padding: 32rpx 32rpx 24rpx;
  border-bottom: 1rpx solid #eeeeee;
}
.topBox > .boldFonstType {
  font-weight: 500;
  font-size: 30rpx;
  margin: 16rpx 0rpx 23rpx;
}
.topBox > .firstTopL {
  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);
}
.topBox > .firstTopL > .imageBs > image {
  width: 100%;
  height: 100%;
}
.topBox > .firstTopL > .textBs {
  font-size: 30rpx;
  font-weight: bold;
  color: #0c141f;
}
.content {
  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;
}
.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;
}
.catalogBox > .activesq {
  border-color: #1677ff;
}
.changeCatalogBox {
  display: block;
}
.catalogBox::-webkit-scrollbar {
  display: none; /* Chrome Safari */
}
.price_t2 {
  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;
}
.sc_t {
  font-size: 22rpx;
  color: #000000;
}
.sc {
  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;
}
.video_body {
  padding-bottom: 96rpx;
}
.footer_tab {
  position: fixed;
  bottom: 0;
  height: 96rpx;
  width: 100%;
  background-color: #ffffff;
}
.tj_box {
  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;
}
.teacher_img {
  width: 87rpx;
  height: 129rpx;
}
.t2 {
  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;
}
.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;
}
.r_sliper {
  padding: 0 20rpx;
}
.top_line {
  width: 6rpx;
  height: 22rpx;
  background: #32467b;
  margin-right: 10rpx;
}
.video_t2 {
  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;
}

.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;
  }
}
.video_play {
  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);
  }
}
.rotoct {
  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;
    }
  }
}


</style>
