<template>
  <view class="polyv_detail">
    <uni-nav-bar
      left-icon="back"
      :statusBar="true"
      fixed='true'
      :title="detail.courseName || '课程详情'"
      @clickLeft="clickLeft"
    ></uni-nav-bar>
    <!-- <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: 421rpx"
        ></image>
        <image
          v-if="false"
          class="video_play"
          src="/static/play.png"
          @click="startVideo"
        ></image>
      </view>
      <view v-else>
        <!-- v-if="playVID" -->
        <view
          class="video_box"
          style="width: 100%; height: 421rpx"
          
        >
          <polyv-player
            v-if="playVID"
            id="playerVideo"
            playerId="playerVideo"
            height="421rpx"
            :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: 421rpx"
          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 class="course_name">
        <view class="course_titles">
            <view class="video_t1" :class="{'one': !goodsData.buyNote}">{{ detail.courseName }}</view>
            <view class="notice_wrap" v-if="goodsData.buyNote">
              <view class="video_t1_t" @click="studyNotice"> 学员须知 </view>
            </view>
            <view v-if="courseTotal > 1" class="toggle_course" @click="changeCourses()">
              <image class="img" src="/pages3/static/imgs/toggle.png"></image>
              <view class="toggle_name">切换课程</view>
              <view class="numbers">共{{ courseTotal }}门</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" :class="{'first_ml': current == 0}">
      <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="/pages3/static/imgs/live.png" mode="widthFix"></image>
						<view class="note">正在直播中</view>
						<view class="title">{{livingItem.sectionName}}</view>
					</view>
          <view class="menuBox" v-for="(item, index) in menuList" :key="index">
            <!--模块 -->
            <view v-if="item.type == 1"
              ><courseModule
                v-if="reStart"
								:isLive="true"
								: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"
                :sectionItem="sectionItem"
              ></courseModule
            ></view>
            <!--章 -->
            <view v-if="item.type == 2"
              ><courseChapter
                v-if="reStart"
								:isLive="true"
								: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"
                :goodsType='6'
              ></courseChapter
            ></view>
            <!--节 -->
            <view v-if="item.type == 3"
              ><courseSection
                v-if="reStart"
								:isLive="true"
								: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 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 class="left_ti">
                    <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;"
                      >{{ $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 == 2" class="Answering">
          <!-- <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;"
            class="answer_item"
          >
            <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 == 3">
				  
				  <view
				    v-for="(item, index) in historyChatMsgList"
				    :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.user.pic
				            "
				            style="width: 64rpx; height: 64rpx"
				          ></image
				        ></view>
				        <view style="margin-left: 15rpx">
				          <view class="chat1">{{
				            item.user.nickname
				          }}</view>
				          <view class="chat2">{{
				            item.time | formatDate
				          }}</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.content
									  }}</view>
									</view>
				        </view>
								
				      </view>
				    </view>
				    <u-line color="#D6D6DB" />
				  </view>
				  <view v-if="historyChatMsgList.length == 0" style="text-align: center"
				    >暂无记录</view
				  >
				</view>
      </scroll-view>

      <!-- 底部固定按钮 -->
        <!-- 笔记的输入框 -->
        <template v-if="current == 1">
          <view class="inputBottom" v-if="!(isPlayRebuild > 0) && playChannelId ==0" :style="{ bottom: bottomHeight + 'px' }">
            <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">
              <input
                v-model="noteValue"
                class="input"
                height="60"
                fixed="true"
                placeholder="您可以在这里输入笔记内容"
                type="text"
                :custom-style="inputStyle"
                :adjust-position="false"
                @focus="focusNote"
                @blur="blurNote"
              />
            </view>
            <view
              style="
                color: #007aff;
                font-size: 30rpx;
                font-weight: bold;
                width: 15%;
                text-align: center;
              "
              @click="postNote"
              >提交</view
            >
          </view>
        </template>
        <!-- 答疑 -->
        <view v-if="current == 2" class="inputBottom" :style="{ bottom: bottomHeight + 'px' }">
          <view class="flex_auto">
            <input
              v-model="ctxValue"
              height="60"
              fixed="true"
              :focus="isFocus"
              :placeholder="placeholder"
              type="text"
              :custom-style="inputStyle"
              :adjust-position="false"
              class="input"
              @focus="focusNote"
              @blur="blur"
            />
          </view>
          <view class="btn" @click="postContent">提交</view>
        </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-popup v-model="photoPopup" mode="bottom" border-radius="40" :mask-close-able="false">
      <!-- 播放前拍照start -->
       <!-- :mask-close-able="false" -->
      <!-- style="bottom: 0; position: fixed; width: 100%; z-index: 999" -->
      <view
        v-if="photoPopup"
      >
        <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
              class="center_camera"
              v-if="photoPopup && isTaking"
            >
              <!-- #ifdef MP-WEIXIN -->
              <camera
                device-position="front"
                flash="off"
                @error="error"
                style="width: 100%; height: 100%"
              >
                <!-- 加人脸框 -->
                <cover-view class="head_take">
                  <cover-view class="headTake_up color"></cover-view>
                  <cover-view class="headTake_minddle">
                    <cover-view class="min_left color"></cover-view>
                    <cover-view class="min_img"></cover-view>
                    <cover-view class="min_right color"></cover-view>
                  </cover-view>
                  <cover-view class="headTake_down color"></cover-view>
                </cover-view>
              </camera>
              <!-- #endif -->
              <!-- #ifdef H5 -->
              <video
                :controls='false'
                id="video"
                width="400"
                height="300"
                class="photo_v"
              ></video>
              <view class="mask"></view>
              <!-- #endif -->
            </view>
            <view class="custom" v-if="!isTaking">
              <!-- #ifdef MP-WEIXIN -->
              <image :src="avatarUrl" mode=""></image>
              <!-- #endif -->
              <!-- #ifdef H5 -->
              <image :src="faceUrl" mode=""></image>
              <!-- #endif -->
            </view>
          </view>
          <view class="btns">
            <!-- <view class="btnResult" v-if="isTaking" @click="takePhoto"
              >拍照</view
            > -->
            <view v-if="isTaking" class="takePhoto_btn">
              <view style='width: 100rpx;height: 2rpx;'></view>
              <view class="middle_btn" @click="takePhoto">
                <view class="square"></view>
              </view>
              <view class="rights" @click="takePhTips()">
                <text>拍照提示</text>
                <u-icon name="arrow-right" color="#FFFFFF" size="30"></u-icon>
              </view>
            </view> 
            <view class="btnResult" v-if="!isTaking" @click="reTake">重拍</view>
            <view class="btnResult" v-if="!isTaking" @click="submit">确认</view>
          </view>
        </view>
      </view>
    </u-popup>

    <u-popup
      v-model="noticeShow"
      class="notice_modal"
      mode="center"
      border-radius="28"
      width="650rpx"
      height="622rpx"
      :mask-close-able="false"
      @close="closeNotice"
    >
      <view class="content">
          <view class="title">学员须知</view>
          <scroll-view scroll-y="true">
            <view class="text" v-html="goodsData.buyNote && goodsData.buyNote.replace(/\n|\r\n/g, '<br>')">
            </view>
          </scroll-view>
          <view class="had_read" :class="{'gray': CountTo >= 0}" @click="noticeConfirm()">
            <text v-if="CountTo >= 0">请阅读学员须知，30s后可关闭</text>
            <text v-else>我已阅读学员须知</text>
            <text v-if="CountTo >= 0">{{ ' ' + CountTo + 's' }}</text>
          </view>
      </view>
    </u-popup>
		
		<!-- 切换课程弹窗 -->
    <u-popup v-model="toggleCourseShow" mode="bottom" border-radius="40" :mask-close-able='false'>
			<view class="popup_box">
				<view class="check_head">
            <view class="headers">
              <view class="grade">切换课程</view>
					    <u-icon name="close" color="#9C9C9C" size="40" @click="closePop()"></u-icon>
            </view>
            <view class="coruse_num">共{{ courseTotal }}门</view>
            <view class="menuSel">
              <scroll-view class="sub_sliper" scroll-x="true" >
                <view v-for="(item,index) in subList" :key="index" style="margin-right: 50rpx;display:inline-block">
                  <view class="r_t1" :class="{'nactive': subIndex == index}" @click="cMenu(item, index)">
                    {{item.subjectName}}
                  </view>
                </view>
              </scroll-view>
            </view>
				</view>
				<view class="check_con">
					<scroll-view scroll-y="true" style="height: 700rpx;">
						<view class="course_items"  v-for="(item, index) in s_courseList" :key="index">
                <view class="course_lefts">
                  <view class="course_title">{{ item.courseName }}</view>
                  <!-- <view class="course_pros">
                    学习进度
                    <text> {{ item.stuAllNum + item.recordNum }}/{{ item.secAllNum + item.examNum}}</text>
                  </view> -->
                </view>
                <view class="course_rights" @click="jump(item, index)">
                  <view class="cicles">
                    <u-icon name="arrow-right" color="#498AFE" size="20"></u-icon>
                  </view>
                  <view class="intoStudy">进入学习</view>
                </view>
						</view>
					</scroll-view>
				</view>
			</view>
		</u-popup>

    <!-- 拍照提示 -->
    <popup-photo :popupPhotoShow.sync="popupPhotoShow" @takePhoto='toTakePhoto()'></popup-photo>
  </view>
</template>

<script>
import plv from "@/pages3/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 PopupPhoto from '@/components/popup/index.vue'
import { mapGetters, mapMutations } from "vuex";
export default {
  components: {
    courseModule,
    courseChapter,
    courseSection,
    PopupPhoto,
  },
	filters: {
		formatDate(date) {
			const nDate = new Date(date)
			const nyear = nDate.getFullYear()
			const nmonth = (nDate.getMonth()+1).toString().padStart(2,0)
			const nday = nDate.getDate().toString().padStart(2,0)
			const hour = nDate.getHours()
			const mins = nDate.getMinutes()
			const seconds = nDate.getSeconds()
			return nyear+'-'+nmonth+'-'+nday+' '+hour+':'+(mins>=10 ? mins : '0'+mins)+':'+(seconds>=10 ? seconds : '0'+seconds)
		}
	},
  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: [{
					name: "目录",
				},
				{
					name: "笔记",
				},
				{
					name: "答疑",
				},
				{
					name: "聊天",
				}],
      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: {},
      businessData: {},
      showNotes: true,
      menuIndex: [],
      uploadLock: false, //上传图片
      isPlayRebuild: false, //是否正在播放重修视频
      isRebuild: false, //视频是否从重修目录点击
			isFocus:false,
			clearTimer:null,
			historyChatMsgList:[],
			livingItem:'',
      bottomHeight: 0,
      toggleCourseShow: false, // 切换课程弹窗
      informId: '', //消息id,从公众号消息模板进来的才有
      courseList: [], // 课程列表
      courseTotal: 0,
      options: {},
      reStart: false, // 是否显示模块/章/节
      s_courseList: [], // 筛选后的
      subList: [],
      subIndex: 0,
      compareFaceData: 0, // 拍照匹配相似度
      CountTo: 30, // 倒计时
      popupPhotoShow: false,
      // h5
      faceUrl: "",
    };
  },
  computed: {
    ...mapGetters(["userInfo", "playSectionId", "playChannelId", "playVID",'config']),
  },
  onLoad(option) {
    console.log('--option--', option);
    this.options = option
    this.courseId = option.courseId || ''
    this.goodsId = Number(option.goodsId);
		// this.gradeId = option.gradeId || 0
    this.orderGoodsId = Number(option.orderGoodsId) || '';

    // 公众号模板消息的数据埋点
    if (option.informId) {
      this.informId = option.informId
      // this.clickOfficial()
    }

  },
 async onShow() {
    // this.photoPopup = true;
    // this.isTaking = true;
    console.log('this.options:', this.options);
    if (this.options.skipPort) {
      await this.$method.skipLogin(this.options.skipPort)
    }
    if (this.$method.isGoLogin()) { // 从公众号消息进来的没登录需要跳到登录页，登录后返回
      return;
    }
    this.courseCourseList();
    this.informId && this.clickOfficial() // 从公众号消息点击进来上报一次
    this.$store.getters.dictObj;
    //相机授权
		// this.userConfirmInfoDetail().then(res => {
			
		// })
		// this.getbaseprofiletplists();    
  },
  onUnload() {
    this.originUnload()
  },
  onHide() {
    this.originUnload()
  },
  mounted() {
  },
  methods: {
    ...mapMutations(["updateChapterOpen","updateLiveLast"]),
    // 新增微信公众号模板消息点击数据
    clickOfficial() {
      this.$http({
        url: '/data/click',
        method: 'post',
        data: { informId: this.informId }
      }).then((res) => {
        if (res.data.code == 200) {
          console.log('埋点')
        }
      })
    },
     // 点击课程目录
    cMenu(item, index) {
      this.subIndex = index
      if (item.subjectId != 0) {
        this.s_courseList = this.courseList.filter((e) => e.subjectId == item.subjectId)
      } else {
        this.s_courseList = this.courseList
      }
    },
    courseCourseList() {
      this.courseList = []
      this.$api.courseCourseList({
        pageNum: 1,
        pageSize: 100,
        goodsId: this.goodsId,
        gradeId: this.gradeId,
        orderGoodsId: this.orderGoodsId,
      }).then((res) => {
        if (res.data.code == 200) {
          this.courseList.push.apply(this.courseList, res.data.rows)
          this.courseTotal = res.data.total || 0

          this.s_courseList = this.courseList
          let allItem = [{ subjectId: 0, subjectName: '所有'}]
          let ids = []
          const newArr = []
          this.courseList.forEach(item => {
            if (ids.indexOf(item.subjectId) == -1) {
              ids.push(item.subjectId)
              newArr.push(item)
            }
          })
					this.subList = [...allItem, ...newArr]

          if(res.data.total > 1) {
            this.getUserWatchLast()
          } else if(res.data.total == 1) {
            this.originOnShow()
            this.originOnMount()
          }
        }
      });
    },
    // 查询用户最后一次看的录播的信息
    getUserWatchLast() {
      this.$http({
        // url: '/study/record/getUserWatchLast',
        url: '/study/record/queryLiveLast',
        method: 'get',
        data: {
          goodsId: this.goodsId
        }
      }).then((res) => {
        if (res.data.code == 200) {
          this.sectionItem = res.data.data || {}
          if (res.data.data && Object.keys(res.data.data).length) { //有最后一次看的录播的信息
            this.courseId = res.data.data.courseId
          } else {
            this.courseId = this.courseList[0].courseId // 没有观看记录默认一个课程
            // this.toggleCourseShow = true
          }
        } else {
          this.courseId = this.courseList[0].courseId // 没有观看记录默认一个课程
        }
        this.originOnShow()
        this.originOnMount()
      })
    },
    // 原来onshow里面的内容
    originOnShow() {
      this.updateLiveLast(null)
      this.courseDetail();
      this.getGoodsDetail();
      this.getAnswerList();
      this.studyRecordMenuAllList();
      // this.answerTimer = setInterval(() => {
      //   this.getAnswerList();
      // }, 5000);
      let option = this.options
      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 || item.menuId });
        this.$store.commit("setPlayVID", { playVID: item.recordingUrl });
        this.$store.commit("updatePlayNextId", playNextId);
        
        this.playNoteVideo(item)
      } else {
        this.studyRecordQueryLiveLast();
      }
    },
    // 原来的mouted内容
    originOnMount() {
      uni.$on("changeSection", (oldSectionId) => {
				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.moduleId = item.moduleId || null
        this.chapterId = item.chapterId || null
        this.$store.commit("setPlayChannelId", { playChannelId: 0 });
        this.$store.commit("setPlaySectionId", { playSectionId: item.sectionId || item.menuId });
        console.log('清除直播节点胡：', this.moduleId,this.chapterId, this.playSectionId )
        //获取拍照历史
        this.getPhotoLastRecord();
        this.polyvLiveHistoryChatMsgList();
        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.moduleId = item.moduleId
        this.chapterId = item.chapterId
        this.$store.commit("setPlaySectionId", { playSectionId: item.sectionId || item.menuId });
        this.getPhotoLastRecord();
        this.playChannel(item);
        this.channelItem = item;
      });
      uni.$on("isRebuild", (item) => {
        this.isRebuild = item;
      });
      this.updateChapterOpen(true);
    },
    // 原来onUnload里面的内容
    originUnload() {
      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();
      //移除所有的事件监听器
      uni.$off();
      this.clearTimer && clearTimeout(this.clearTimer)
      this.toastTimer && clearTimeout(this.toastTimer)
      this.timer && clearInterval(this.timer);
      if (this.lockTimer) {
        clearInterval(this.lockTimer);
        this.$api
          .lockDelLock({
            uuid: this.$method.getUuid(),
            action: "jxjy",
          })
          .then((res) => {
            uni.hideLoading()
          });
      }
    },
    changeCourses() {
      this.toggleCourseShow = true
    },
    closePop() {
      this.toggleCourseShow = false
    },
    // 进入学习
    async jump(item, index) {
      this.vid = ''
      this.hasStart = true
      await this.originUnload()
      this.courseId = item.courseId
      this.reStart = false
      this.toggleCourseShow = false
      this.originOnShow()
      this.originOnMount()
    },
    clickLeft() {
      // uni.navigateBack()
      uni.switchTab({
				url:'/pages/learn/index'
			})
    },
		/**
		 * 获取上次观看的直播
		 */
		studyRecordGetLastLive() {
			this.$api.studyRecordGetLastLive({
				orderGoodsId:this.orderGoodsId,
				courseId:this.courseId
			}).then(res => {
				this.updateLiveLast(res.data.data)
			})
		},
		/**
		 * 获取最后一次看的节
		 */
		studyRecordQueryLiveLast() {
      // /study/record/queryLiveLast
			this.$api.studyRecordQueryLiveLast({
				orderGoodsId:this.orderGoodsId,
				courseId:this.courseId
			}).then(async res => {
				if(res.data.data) {
          this.moduleId = res.data.data.moduleId
          this.chapterId = res.data.data.chapterId
					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;
          await this.getPhotoLastRecord() // 获取拍照历史
						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.polyvLiveHistoryChatMsgList();
						if(!res.data.data.recordingUrl) {
							return;
						}
            await this.getPhotoLastRecord() // 获取拍照历史
						this.playVideo(res.data.data)
					}
					
				}
			})
		},
    async goLive(item) {
			let data = await this.studyRecordGetChannelBasicInfo(item.liveUrl);
			let nowTime = +this.$method.timest();
			
			if (item.liveStartTime > nowTime) {
				if (data.watchStatus == "end" || data.watchStatus == "playback") {
					uni.showToast({
						title: '直播未开始',
						icon: 'none'
					});
					return;
				}
			} else if (
				item.liveStartTime < nowTime &&
				item.liveEndTime > nowTime
			) {
				if (data.watchStatus == "end" || data.watchStatus == "playback") {
					uni.showToast({
						title: '暂无直播',
						icon: 'none'
					});
					return;
				}
			} else if (item.liveEndTime < nowTime) {
				if (data.watchStatus == "end" || data.watchStatus == "playback") {
					uni.showToast({
						title: '直播已结束',
						icon: 'none'
					});
					return;
				}
			}
			let moduleId = item.moduleId || 0;
			let chapterId = item.chapterId || 0;
			let sectionId = item.sectionId || item.menuId;
      let uuid = new Date().valueOf() + ""
      // buyCourse 是否购买课程：1是 0否
			let encode = encodeURIComponent(this.config.hostLive+'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+'&buyCourse=1'+'&ident='+uuid)
			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]
        if (res.data.data) {
				this.livingItem = res.data.data.find(item => item.liveStartTime<=nowTime&&item.liveEndTime>nowTime);
        let isShowNotice = res.data.data.every(e => e.studyStatus == -1)
          if (this.CountTo == 30 && isShowNotice) { // studyStatus 全部等于-1的时候就是没有看过
            this.noticeShow = true
            var timer = setInterval(() => {
              this.CountTo--
              if( this.CountTo < 0 ) {
                clearInterval(timer)
              }
            }, 1000)
          } else {
            this.CountTo = -1
          }
      } else {
        this.CountTo = -1
      }
			})
		},
    noticeConfirm() {
      console.log('CountTo:', this.CountTo);
      if (this.CountTo < 0) {
        this.noticeShow = false
      }
    },
		studyRecordGetChannelBasicInfo(channelId) {
			return new Promise((resolve) => {
				this.$api
					.studyRecordGetChannelBasicInfo({
						channelId,
					})
					.then((res) => {
						resolve(res.data.data);
					});
			});
		},
		polyvLiveHistoryChatMsgList() {
			this.$api.polyvLiveHistoryChatMsgList({
				sectionId:this.playSectionId,
				channelId:this.sectionItem.liveUrl
			}).then(res => {
				this.historyChatMsgList = res.data.data
			})
		},
		
    /**
     * 获取业务层次详情
     */
    // 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) {
                this.photoList.push(1);  
                let centerTime = this.randomNum(1/3*totalVideoTime, 2/3*totalVideoTime);; 
                this.photoList.push(centerTime); 
                let endTakeTime = this.randomNum(2/3*totalVideoTime, totalVideoTime);
                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;
            break;
          }
          if (duration > this.photoList[this.photoList.length - 1]) {
            this.photoIndex = this.photoList.length - 1; //取最后一个下标
            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";
			
			// if(this.channelItem.sectionType == 3) { //回放
				
			// 	// this.videoOption = {
			// 	//   mode: "live",
			// 	//   uid: this.liveObj.uid, //this.playChannelId  egsxlptzdq
			// 	//   cid: this.playChannelId,
			// 	//   openId: this.userInfo.userAccount,
			// 	//   isAutoChange: false,
			// 	//   forceVideo: false,
			// 	// };
			// } else {  //直播
				
				this.videoOption = {
				  mode: "live",
				  uid: this.liveObj.uid, //this.playChannelId  egsxlptzdq
				  cid: this.playChannelId,
				  openId: this.userInfo.userAccount,
				  isAutoChange: false,
				  forceVideo: false,
				};
			// }
    },
    async initLive() {
      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) {
      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, '2222222222');
      if (item.sectionType == 3) { // 回放的不播放
        return
      }
      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();
      // console.log('this.recordObj:', this.recordObj)
      this.needSeek = true; //跳转到播放记录
      this.startStatus = true;
      // 提交学习记录
      this.postStudyRecord(0)
      //获取节笔记
      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,
        };
        // 获取用户节的最后一次学习记录/study/record/last
        self.$api.recordLast(data).then((res) => {
          resolve(res.data.data);
        });
      });
    },

    jumpNote(item) {
      this.noteId = item.noteId;
      //没视频播放
      if (this.playSectionId == 0) {
        this.$u.toast("即将跳到笔记位置");
        this.$store.commit("setPlaySectionId", {
          playSectionId: item.sectionId || item.menuId,
        });
        this.$store.commit("setPlayVID", { playVID: item.recordingUrl });
        this.playNoteVideo(item);
      } else {
        //正在看当前笔记视频
        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) { // 直播课程没有班级，去掉判断，默认为0
      //   this.$u.toast("暂无班级数据");
      //   return;
      // }
      var polyvPlayerContext = this.selectComponent("#playerVideo");
      let noteDate = this.$method.getZeroTime();
      let noteSecond = polyvPlayerContext.getCurrentTime();
      if (!noteSecond) {
        if (noteSecond == 0) {
          //播放结束
          noteSecond = polyvPlayerContext.getDuration();
        }
        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,
      };
      // /user/note 新增用户笔记
      this.$api.postNote(data).then((res) => {
        if (res.data.code == 200) {
          this.$u.toast("发布成功");
          self.getNoteList();
          this.noteValue = "";
        }
      });
    },
    
    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() {
      this.placeholder = "您可以在这里输入答疑内容";
      this.ctxValue = "";
      this.assignUserId = 0;
    },
    focusNote(event) {
      this.bottomHeight = event.detail.height
    },
    blurNote() {
      this.bottomHeight = 0
    },
		blur() {
      this.bottomHeight = 0
			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) {
      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 = {
        fromPlat: 1, //来源平台 1小程序 2网站	
        photo: self.ossAvatarUrl,
        sectionId: sectionId || 0,
        goodsId: parseInt(self.goodsId),
        courseId: parseInt(self.courseId),
				orderGoodsId: this.orderGoodsId,
        studyDuration: parseInt(
          PlayDuration > 0 ? PlayDuration : self.studyDuration
        ),
        gradeId: parseInt(self.gradeId),
        chapterId: this.chapterId || 0,
        moduleId: this.moduleId || 0,
        videoCurrentTime: parseInt(
          currentTime > 0 ? currentTime : self.studyDuration
        ),
      };
      if (this.ossAvatarUrl) {
        data.similarity = this.compareFaceData // 相似度
      }
      if (status > 0) {
        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

            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,
          });
        }
      });
    },
    uploadFile(options, int) {
      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;
          }
          let filePath = "";
          // #ifdef H5
          var localData = options; //dataUrl为base64位
          let base = atob(localData.substring(localData.indexOf(",") + 1)); // base是将base64编码解码，去掉data:image/png;base64部分
          let length = base.length;
          let url = new Uint8Array(length);
          while (length--) {
            url[length] = base.charCodeAt(length);
          }
          filePath = new File([url], "a.jpg", {
            type: "image/jpg",
          });
          console.log("filePath:", filePath);

          uni.uploadFile({
            url: ossToken.host,
            name: "file",
            file: filePath,
            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) => {
              this.$u.toast("上传成功");
              this.ossAvatarUrl = ossToken.dir;
              console.log("h5上传成功--:", this.ossAvatarUrl);
              resolve();
            },
            fail: (error) => {
              console.log("h5上传失败:", error)
              uni.showToast({
                title: "上传接口报错，请重新拍照上传" + error,
                icon: "none",
              });
              this.openPhoto();
              return;
            },
          });
          // #endif
          // #ifdef MP-WEIXIN
          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) {
                this.$u.toast('上传成功')
                this.ossAvatarUrl = ossToken.dir;
                resolve();
              // } else {
              //   uni.showToast({
              //     title: "上传失败",
              //     icon: "none",
              //   });
              //   this.openPhoto();
              //   return;
              // }
            },
            fail: (error) => {
              uni.showToast({
                title: "上传接口报错，请重新拍照上传" + error,
                icon: "none",
              });
              this.openPhoto();
              return;
            },
          });
          // #endif
        });
      });
    },
    imageInfos() {
      var self = this;
      return new Promise(async (resolve, reject) => {
        // #ifdef MP-WEIXIN
        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);
            }
          },
          fail: (err) => {
						this.$u.toast('图片上传失败')
					}
        });
        // #endif
        // #ifdef H5
        const waitUpload = await this.uploadFile(this.faceUrl, 0);
        resolve(waitUpload);
        // #endif
      });
    },
    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();
                if (uni.getStorageSync('tabkePhotoShow')) {
                this.photoIndex = i;
                this.openPhoto();
                } else {
                  this.popupPhotoShow = true
                  uni.setStorageSync('tabkePhotoShow', 1) // 本地缓存用来判断是否已经弹出过弹窗
                }
              }
            }
          }
        }
      }
    },
    closeToast() {
      clearTimeout(this.toastTimer);
      this.videoToastShow = false;
    },
    restart() {
      var polyvPlayerContext = this.selectComponent("#playerVideo");
      polyvPlayerContext.seek(0);
      clearTimeout(this.toastTimer);
      this.videoToastShow = false;
    },
    // 新增用户视频学习日志
    studyLog() {
      this.$http({
        url: '/user/study/log',
        method: 'post',
        data: {
          goodsId: this.goodsId,
          courseId: this.courseId,
					moduleId: this.moduleId || 0,
					chapterId: this.chapterId || 0,
          sectionId: this.playSectionId || 0,
          fromPlat: 1, //来源平台 1小程序 2PC网站
          goodsType: 6, // 商品类型 1视频2题库 3补考 4前培 5虚拟赠送题库 6直播
          orderGoodsId: this.orderGoodsId,
        }
      }).then((res) => {
        // console.log('直播的用户学习日志:', res)
      })
    },
    onStateChange(newstate, oldstate) {
      if (newstate.detail.newstate == "playing") {
        if (this.needSeek) {
          var polyvPlayerContext = this.selectComponent("#playerVideo");
          if (this.recordObj.videoCurrentTime) {
            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); //避免相同节继续播放
          }

          polyvPlayerContext.play();
          this.needSeek = false;
          // 新增用户视频学习日志
          this.studyLog()
        }
        //开始播放
        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();
      }
      // #ifdef MP-WEIXIN
      this.enableAutoRotation = false;
      this.photoPopup = true;
      this.isTaking = true;
      uni.setKeepScreenOn({
        keepScreenOn: true,
      });
      uni.authorize({
        scope: "scope.camera",
        success() {},
      });
      // #endif
      // #ifdef H5
      if (
        (window.navigator.mediaDevices &&
          window.navigator.mediaDevices.getUserMedia) ||
        window.navigator.getUserMedia ||
        window.navigator.webkitGetUserMedia ||
        window.navigator.mozGetUserMedia
      ) {
        console.log("getUserMedia----");
        // 调用用户媒体设备, 访问摄像头
        this.getUserMedia(
          {
            video: {
              width: 400,
              height: 300,
            },
          },
          this.photographSuccess,
          this.photographError
        );
      } else {
        console.log("1111没有摄像");
        this.photographError();
      }
      // #endif
    },
    /**
     * 人脸匹配
     */
    faceRecognition() {
      return new Promise((resolve) => {
        // #ifdef MP-WEIXIN
        let fileSystem = uni.getFileSystemManager();
        fileSystem.readFile({
          filePath: `${this.avatarUrl}`,
          encoding: "base64",
          position: 0,
          success: (res) => {
            let base64 = "data:image/jpg;base64," + res.data;

            console.log('直播课-base64Data人脸识别参数：', {
              imageA: base64,
              orderGoodsId: this.orderGoodsId,
              gradeId: this.gradeId,
            })
            this.CompareFace(base64, resolve);
          },
          fail(err) {
            console.error(err, "err");
          },
        });
        // #endif
        // #ifdef H5
        this.CompareFace(this.faceUrl, resolve);
        // #endif
      });
    },

    CompareFace(url, resolve) {
      let timer = setTimeout(() => {
        uni.showToast({
          icon: "none",
          title: "拍照超时，请重新拍照",
          duration: 2000,
          success: () => {
            setTimeout(() => {
              uni.navigateBack();
            }, 1000);
          },
        });
      }, 10 * 1000);

      this.$api
        .faceCertificationCompareFace({
          imageA: url,
          orderGoodsId: this.orderGoodsId,
          gradeId: this.gradeId,
        })
        .then((res) => {
          clearTimeout(timer);
          console.log(res, "人脸识别成功res");
          resolve(res.data.data);
        })
        .catch((err) => {
          clearTimeout(timer);
          // 当前网络延迟，
          console.log("人脸识别错误:", err);
          uni.showModal({
            content: "当前网络延迟",
            showCancel: false,
            success: (resultst) => {
              if (resultst.confirm) {
                uni.navigateBack();
              }
            },
          });
        });
    },

    async submit() {
      if (this.uploadLock) {
        return;
      }
      this.uploadLock = true;

      let compareFaceData = await this.faceRecognition();
      this.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;
      // #ifdef H5
      this.faceUrl = "";
      this.getUserMedia({
        video: {
          width: 400,
          height: 300,
        },
      });
      // #endif
    },
    toTakePhoto() {
      this.popupPhotoShow = false
      this.openPhoto()
    },
    takePhTips() {
      this.popupPhotoShow = true
      this.isTaking = false
      this.photoPopup = false
      this.enableAutoRotation = false
    },
    //确认拍照
    takePhoto() {
      // #ifdef MP-WEIXIN
      const ctx = uni.createCameraContext();
      ctx.takePhoto({
        quality: "high",
        success: (res) => {
          this.avatarUrl = res.tempImagePath;
          this.isTaking = false;
        },
        fail: (err) => {
          console.log(err);
        },
      });
      // #endif
      // #ifdef H5
      const canvas = document.createElement("canvas");
      canvas.width = 400;
      canvas.height = 400;
      const context = canvas.getContext("2d");
      const video = document.querySelector("video");
      context.drawImage(video, 0, 0, 400, 400);
      this.faceUrl = canvas.toDataURL("image/png");
      this.isTaking = false;
      // #endif
    },
    playError(e) {
      console.log(e);
    },
    //拍照报错
    error(e) {
      console.log(e.detail);
    },
    //关闭相机
    closePhoto() {
      this.photoPopup = false;
      self.enableAutoRotation = true;
    },
    /**
     * 进入全屏
     */
    fullscreenchange(event) {
      if (event.detail.direction == "vertical") {
        this.navShow = true;
      } else if (event.detail.direction == "horizontal") {
        this.navShow = false;
      }
    },
    getGoodsDetail() {
      let self = this;
      // goods/'+ data
      this.$api.goodsDetail(this.goodsId).then((res) => {
        self.goodsData = res.data.data;
        // this.courseBusiness();
        // this.courseHandouts();
        self.getMenuList();
        //获取节笔记
        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;
          }
        }
      });
    },
    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;
          }
        });
    },
    getMenuList() {
      // let self = this;
      // /course/menuList
      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;
            }
            this.menuList = res.data.rows;
            this.reStart = true
            for (let i = 0; i < res.data.rows.length; i++) {
              if (res.data.rows[i].type == 1) {
                if (Object.keys(this.sectionItem).length) {
                  let playNextId = `moduleId${this.sectionItem.moduleId}chapterId${this.sectionItem.chapterId}sectionId${this.sectionItem.sectionId}`;
                  this.$store.commit("updatePlayNextId", playNextId)

                  if (res.data.rows[i].menuId == this.sectionItem.moduleId) {
                    this.menuIndex = [i];
                    break;
                  }
                } else {
                this.menuIndex = [i];
                break;
                }
              } else if (res.data.rows[i].type == 2) {
                // 章
                if (Object.keys(this.sectionItem).length) {
                  let playNextId = `moduleId${this.sectionItem.moduleId}chapterId${this.sectionItem.chapterId}sectionId${this.sectionItem.sectionId}`;
                  this.$store.commit("updatePlayNextId", playNextId)

                  if (res.data.rows[i].menuId == this.sectionItem.chapterId && (!this.sectionItem.moduleId || this.sectionItem.moduleId == 0)) {
                    this.menuIndex = [i];
                    break;
                  }
                } else {
                this.menuIndex = [i];
                break;
                }
              }
            }

          }
        });
    },
    courseDetail() {
      let self = this;
      // /course/'+data 获取课程详细信息
      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);
      uni.downloadFile({
        url: url,
        success: function (res) {
          var filePath = res.tempFilePath;
          uni.openDocument({
            filePath: filePath,
            showMenu: self.courseHandoutsData.canDownload == 1 ? true : false,
            success: function (res) {
              // console.log(res, "打开文档成功");
            },
            fail: function (err) {
              uni.showToast({
                icon: "none",
                title: "文档地址错误",
              });
            },
          });
        },
        fail: (err) => {
          uni.showModal({
            title: "提示",
            content: "文档错误," + err.errMsg,
            showCancel: false,
          });
        },
      });
    },
    /**
     * 退出全屏
     */
    exitFullscreen() {
      try {
        var de = document;
        // console.log(de);
        if (de.exitFullscreen) {
          de.exitFullscreen();
        } else if (de.mozCancelFullScreen) {
          de.mozCancelFullScreen();
        } else if (de.webkitCancelFullScreen) {
          de.webkitCancelFullScreen();
        }
      } catch (err) {}
    },

    fullele() {
      return (
        document.fullscreenElement ||
        document.webkitFullscreenElement ||
        document.msFullscreenElement ||
        document.mozFullScreenElement ||
        null
      );
    },
    //判断是否全屏
    isFullScreen() {
      return !!(document.webkitIsFullScreen || this.fullele());
    },
    getUserMedia(constraints, success, error) {
      console.log("getUserMedia===", constraints, "success:", success);
      if (window.navigator.mediaDevices.getUserMedia) {
        // 最新的标准API
        window.navigator.mediaDevices
          .getUserMedia(constraints)
          .then(success)
          .catch(error);
      } else if (window.navigator.webkitGetUserMedia) {
        // webkit核心浏览器
        window.navigator.webkitGetUserMedia(constraints, success, error);
      } else if (window.navigator.mozGetUserMedia) {
        // firfox浏览器
        window.navigator.mozGetUserMedia(constraints, success, error);
      } else if (window.navigator.getUserMedia) {
        // 旧版API
        window.navigator.getUserMedia(constraints, success, error);
      }
    },
    photographSuccess(stream) {
      console.log("有摄像头---", stream);
      this.photoPopup = true;
      this.isTaking = true;
      this.enableAutoRotation = false;

      this.$nextTick(() => {
        const video = document.querySelector("video");
        console.log('video:', video);
        video.srcObject = stream;
        video.play();
      })
    },
    photographError(err) {
      console.log("没有摄像头：", err);
      uni.showModal({
        title: "提示",
        content:
          "课程学习需要开启摄像头进行拍照，经检测您的设备无摄像头可使用，请检测环境是否支持。",
        cancelText: "取消",
        confirmText: "确定",
        success: (res) => {
          if (res.confirm) {
            uni.navigateBack();
          } else if (res.cancel) {
          }
        },
      });
    },

  },
};
</script>

<style lang="scss" scope>
@import '../polyv/css/detail.scss';
.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: 16rpx 16rpx 100rpx 16rpx;

    .box_in {
      height: 100%;
    }
  }
  .first_ml {
    margin: 16rpx 16rpx 16rpx 16rpx;
  }
}
.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 {
  width: 100%;
  // background-color: #ffffff;
  // border-radius: 24px 24px 0px 0px;
  .photoTop {
    width: 100%;
    height: 74rpx;
    border-radius: 20px 20px 0px 0px;
    background-color: #ffffff;
    display: flex;
    align-items: center;
    justify-content: center;
    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: 75vh;
    position: relative;
    .center_camera {
      width: 100%;
      height: 75vh;
      position: fixed;
      .head_take {
        width: 100%;
        height: 75vh;
        display: flex;
        flex-direction: column;
      }
      .headTake_up {
        width: 100%;
        height: 100rpx;
      }
      .headTake_minddle {
        display: flex;
        .min_img {
          width: 500rpx;
          height: 550rpx;
        }
        .min_left, .min_right {
          flex: 1;
          height: 550rpx;
        }
      }
      .headTake_down {
        width: 100%;
        flex: 1;
      }
      .color {
        background-color: #333;
        opacity: 0.5;
      }
      .photo_v {
        width: 100%;
        height: 100%;
      }
      .mask {
        width: 500rpx;
        height: 550rpx;
        position: absolute;
        top: 100rpx;
        left: 0;
        right: 0;
        bottom: 0;
        margin: 0 auto;
        box-shadow: 0 0 0 2000px rgba(0, 0, 0, 0.4);
      }
    }
    .custom {
      width: 750rpx;
      height: 75vh;
      position: absolute;
      z-index: 1000;
      top: 0;
      left: 0;
      image {
        width: 100%;
        height: 100%;
      }
    }
  }

  .btns {
    display: flex;
    .takePhoto_btn {
      width: 100%;
      display: flex;
      align-items: center;
      justify-content: space-between;
      background: #A9A7A9;
      padding: 40rpx 26rpx;
      .middle_btn {
        width: 120rpx;
        height: 120rpx;
        border-radius: 40rpx;
        border: 4rpx solid #FFFFFF;
        display: flex;
        align-items: center;
        justify-content: center;
      }
      .square {
        width: 96rpx;
        height: 96rpx;
        background: #FFFFFF;
        border-radius: 28rpx;
      }
      .rights {
        font-size: 32rpx;
        font-weight: 500;
        color: #FFFFFF;
      }
    }
    .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: 24rpx;
  font-family: PingFang SC;
  font-weight: bold;
  color: #999999;
  line-height: 48rpx;
}
.tBox2 {
  display: flex;
  padding-top: 10rpx;
  color: #333333;
  font-size: 30rpx;
  font-weight: 400;
}
.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);
}
.Answering {
  .answer_item {
    &:nth-child(2) {
      border-radius: 16rpx 16rpx 0rpx 0rpx;
    }
    &:nth-last-child(1) {
      border-radius: 0rpx 0rpx 16rpx 16rpx;
    }
  }
}
.inputBottom {
  position: fixed;
  left: 0;
  bottom: 0;
  background: #ffffff;
  height: 98rpx;
  display: flex;
  align-items: center;
  width: 100%;
  z-index: 99;
  .flex_auto {
    flex: 1;
    margin-left: 10%;
  }

  .btn {
    color: #007aff;
    font-size: 30rpx;
    font-weight: bold;
    width: 15%;
    text-align: center;
  }
  .input {
    background: rgba(244, 244, 244, 0.98);
    height: 60rpx;
    border-radius: 24rpx;
    margin-top: 12rpx;
  }
}
.noteBox {
  width: 100%;
  background: #ffffff;
  padding: 0rpx 10rpx 20rpx;
  border-radius: 16rpx;
  overflow: hidden;
  .left_ti {
    padding-top: 14rpx;
  }
}
.dateBox {
  width: 216rpx;
  height: 48rpx;
  background: #ffffff;
  border-radius: 24rpx;
  font-size: 24rpx;
  color: #666666;
  text-align: center;
  line-height: 48rpx;
  margin: 16rpx 0rpx 8rpx;
}
.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;
}
.course_name {
  height: 80rpx;
  background-color: #fff;
}
.video_t1 {
  height: 80rpx;
  color: #333333;
  line-height: 80rpx;
  font-size: 30rpx;
  font-family: PingFang SC;
  font-weight: bold;
  color: #333333;
  margin-left: 15rpx;
  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: 56rpx 56rpx 56rpx 64rpx;

    .title {
      color: #222;
      line-height: 40rpx;
      font-size: 36rpx;
      text-align: center;
      font-weight: bold;
      margin-bottom: 24rpx;
    }
    .text {
      height: 340rpx;
      line-height: 40rpx;
      text-indent: 2em;
      font-size: 32rpx;
      color: #222;
    }
    .had_read {
      width: 100%;
      height: 88rpx;
      line-height: 88rpx;
      text-align: center;
      background: #3577E8;
      border-radius: 240rpx;
      font-size: 32rpx;
      font-weight: 500;
      color: #fff;
      margin-top: 20rpx;
      &.gray {
        background: #BBBEC5;
      }
    }
  }
}


</style>
