<template>
  <view class="polyv_detail">
    <!-- <nav-bar
      :title="detail.courseName || '课程详情'"
      v-show="navShow"
    ></nav-bar> -->
    <uni-nav-bar
      left-icon="back"
      :statusBar="true"
      fixed="true"
      :title="detail.courseName || '课程详情'"
      @clickLeft="clickLeft"
    ></uni-nav-bar>
    <view id="top">
      <view class="video_box" v-if="!startStatus">
        <image
          :src="$method.splitImgHost(goodsData.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" -->
        <!-- #ifdef MP-WEIXIN -->
        <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="autoplay"
            :page-gesture="true"
            :vslide-gesture="true"
            :vslide-gesture-in-fullscreen="true"
            :isAllowSeek="isAllowSeek"
            :playbackRate="playbackRate"
            :enableAutoRotation="enableAutoRotation"
            @loadedmetadata="loadedmetadata"
          ></polyv-player>
          <!-- :startTime="startTime" -->
          <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>
        <!-- #endif -->
        <!-- #ifdef H5 -->
        <view class="video_box" style="width: 100%; height: 421rpx">
          <view v-show="vid" id="player"></view>
          <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>
        <!-- #endif -->
        <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
            class="toggle_course"
            v-if="goodsTeacher.length > 1"
            @click="changeCourses()"
          >
            <image
              class="img"
              src="/pages3/static/imgs/toggle.png"
              mode="widthFix"
            ></image>
            <view class="toggle_name">切换课程</view>
            <!-- courseTotal -->
            <view class="numbers">共{{ goodsTeacher.length }}门</view>
          </view>
        </view>
      </view>
      <u-line color="#D6D6DB" />
      <view>
        <view>
          <u-tabs
            :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
            v-if="teacherList && teacherList.length > 0"
            class="teacher_names"
          >
            <view
              v-for="(tea, index) in teacherList"
              :key="index"
              class="names"
              :class="{ nactive: teacherIndex == index }"
              @click="activeFunc(tea, index)"
            >
              {{ tea.aliasName }}
            </view>
          </view>
          <view
            class="menuBox onessss"
            v-for="(item, index) in menuList"
            :key="index"
          >
            <!--模块 -->
            <view v-if="item.type == 1"
              ><courseModule
                v-if="reStart"
                :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"
                :goodsType="1"
                :menuAllList="menuAllList"
                :sectionItem="sectionItem"
              ></courseModule
            ></view>
            <!--章 -->
            <view v-if="item.type == 2"
              ><courseChapter
                v-if="reStart"
                :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="1"
                :menuAllList="menuAllList"
              ></courseChapter
            ></view>
            <!--节 -->
            <view v-if="item.type == 3"
              ><courseSection
                ref="MoudleSection"
                v-if="reStart"
                :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"
                :goodsType="1"
                :testType="3"
                :menuAllList="menuAllList"
              ></courseSection
            ></view>
            <!-- @togoBack="togoBack($event)" -->
          </view>
        </view>
        <!--讲义 -->
        <view v-show="current == 1">
          <template v-if="courseHandoutsData.length">
            <view
              class="lecture-box"
              v-for="(item, index) in courseHandoutsData"
              :key="index"
            >
              <view class="title">
                {{ item.urlName }}
              </view>
              <view class="btn" @click="openDocument(item)">
                <image
                  v-if="!downLoading"
                  src="/pages3/static/imgs/downLoad.png"
                  style="width: 40rpx; height: 40rpx"
                ></image>
                <image
                  v-else
                  src="/pages3/static/imgs/downLoading.png"
                  class="loading_down"
                  style="width: 40rpx; height: 40rpx"
                ></image>
              </view>
            </view>
          </template>
          <view v-else style="text-align: center">暂无讲义</view>
        </view>
        <!--笔记 -->
        <view v-show="current == 2">
          <view v-if="noteList.length == 0" style="text-align: center"
            >暂无笔记</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; margin: 0 29rpx"
                      >{{ $method.secondToDate(item1.noteSecond) }}</view
                    >
                  </view>
                  <view style="margin-left: 10rpx">
                    <view class="t2Content leftPadding">{{
                      item1.sectionName
                    }}</view>
                    <view class="tBox2">{{ item1.noteText }}</view>
                  </view>
                </view>
              </view>
            </view>
          </view>
        </view>
        <!--答疑 -->
        <view v-show="current == 3" class="Answering">
          <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 == 4">
          <view
            class="menuBox"
            v-for="(item, index) in reMenuList"
            :key="index"
          >
            <!--模块 -->
            <view v-if="item.type == 1"
              ><courseModule
                :orderGoodsId="orderGoodsId"
                :sectionMaxNum="goodsData.sectionMaxNum"
                :courseId="courseId"
                :goodsId="goodsId"
                :gradeId="gradeId"
                :isRebuild="true"
                :isBuy="true"
                :menuItem="item"
                :levelId="item.menuId"
                :goodsType="1"
                :menuAllList="menuAllList"
                :sectionItem="sectionItem"
              ></courseModule
            ></view>
            <!--章 -->
            <view v-if="item.type == 2">
              <courseChapter
                :orderGoodsId="orderGoodsId"
                :courseId="courseId"
                :sectionMaxNum="goodsData.sectionMaxNum"
                @playEnd="sectionPlayEnd($event, index)"
                :gradeId="gradeId"
                :goodsId="goodsId"
                :isRebuild="true"
                :isBuy="true"
                :menuItem="item"
                :levelId="'0-' + item.menuId"
                :goodsType="1"
                :menuAllList="menuAllList"
              ></courseChapter>
            </view>
            <!--节 -->
            <view v-if="item.type == 3">
              <courseSection
                :orderGoodsId="orderGoodsId"
                :courseId="courseId"
                :sectionMaxNum="goodsData.sectionMaxNum"
                @playEnd="sectionPlayEnd($event, index)"
                :gradeId="gradeId"
                :goodsId="goodsId"
                :isRebuild="true"
                :isBuy="true"
                :nextMenuItem="findMenuNextSection(index)"
                :menuItem="item"
                :levelId="'0-0-' + item.menuId"
                :goodsType="1"
                :testType="3"
                :menuAllList="menuAllList"
              ></courseSection>
            </view>
          </view>
        </view>
      </scroll-view>

      <!-- 底部固定按钮 -->
      <!-- 笔记的输入框 -->
      <template v-if="current == 2">
        <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"
              height="60"
              fixed="true"
              placeholder="您可以在这里输入笔记内容"
              type="text"
              :custom-style="inputStyle"
              :adjust-position="false"
              class="input"
              @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 == 3"
        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-modal
      v-model="showMark"
      title="提示"
      @confirm="markConfirm"
      @cancel="markCancel"
      confirm-text="复制学习网址"
      :show-cancel-button="true"
      cancel-text="关闭"
    >
      <view class="slot-content">
        <view>您的学习账号已经开通，请按照步骤操作，进行学习。</view>
        <view>1.复制学习地址:{{ markContent }}</view>
        <view>2.在【浏览器中】打开复制的学习网址</view>
        <view>3.打开学习网址后，选择【个人用户】进行登录</view>
        <view>(1)账号：您个人的身份证号码</view>
        <view>(2)密码：身份证号码，再加111111</view>
      </view>
    </u-modal>

    <!-- 切换课程弹窗 -->
    <u-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">共{{ goodsTeacher.length }}门</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 v-for="(courseItem, gTindex) in goodsTeacher" :key="gTindex">
              <view
                v-for="(item, index) in courseItem.courseList"
                :key="index"
                v-show="
                  item.subjectId === newActiveSubjectId || !newActiveSubjectId
                "
              >
                <view class="course_items" v-if="item.show && item.show == 1">
                  <view class="course_lefts">
                    <view class="course_title">
                      {{ item.courseName }}
                    </view>
                    <view
                      v-if="courseItem.teaList && courseItem.teaList.length > 0"
                      class="teacher_names"
                    >
                      <view
                        v-for="(tea, tindex) in courseItem.teaList"
                        :key="tindex"
                        class="names"
                        >{{ tea.aliasName }}</view
                      >
                    </view>
                    <view class="course_pros">
                      学习进度
                      <text>
                        {{ item.stuAllNum + item.recordNum }}/{{
                          item.secAllNum + item.examNum
                        }}</text
                      >
                    </view>
                  </view>
                  <view
                    class="course_rights"
                    @click="jump(item, gTindex, 'jump')"
                  >
                    <view class="cicles">
                      <u-icon
                        name="arrow-right"
                        color="#498AFE"
                        size="20"
                      ></u-icon>
                    </view>
                    <view class="intoStudy">进入学习</view>
                  </view>
                </view>
              </view>
            </view>
          </scroll-view>
        </view>
      </view>
    </u-popup>

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

<script>
import plv from "../static/polyv-sdk/index";
import courseModule from "@/components/course/courseModule.vue";
import courseChapter from "@/components/course/courseChapter.vue";
import courseSection from "@/components/course/courseSection.vue";
import PopupPhoto from "@/components/popup/index.vue";
import { mapGetters, mapMutations } from "vuex";
var polyvPlayerContext = null;
export default {
  components: {
    courseModule,
    courseChapter,
    courseSection,
    PopupPhoto,
  },
  data() {
    return {
      markContent: "http://admin.zhujianpeixun.com/",
      showMark: false,
      hasStart: false,
      channelItem: null,
      lockTimer: null,
      orderGoodsId: 0,
      noticeShow: false,
      navShow: true,
      enableAutoRotation: true,
      seekTime: "",
      toastTimer: null,
      videoToastShow: false,
      initLiveOk: false,
      livePlay: false, //是否正在播放直播，不含暂停
      liveDuration: 0, //直播观看时长
      videoOption: {
        mode: "live",
        uid: "",
        cid: "",
        openId: "",
        isAutoChange: false,
        forceVideo: false,
      },
      courseHandoutsData: [],
      liveDetail: {},
      showSet: false,
      startStatus: false,
      detail: {},
      courseId: 0,
      placeholder:
        "您可以在这里输入笔记内容\n还可以点击左侧图标为笔记加上时间标记",
      inputStyle: {
        background: "rgba(244, 244, 244, 0.98)",
        borderRadius: "24rpx",
        padding: "8rpx",
        marginBottom: "10rpx",
      },
      list: [],
      menuList: [],
      current: 0,
      vid: "",
      goodsId: 0,
      goodsData: {},
      photoPopup: false,
      goodsPlayConfig: null,
      autoplay: false,
      isAllowSeek: "no",
      playbackRate: [1.0],
      timer: null,
      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,
      livingItem: "",
      option: null,
      downLoading: false, //下载讲义加载
      muluStyle: false, //显示和隐藏目录样式
      bottomHeight: 0,
      toggleCourseShow: false, // 切换课程弹窗
      courseList: [], // 课程列表
      reStart: false, // 是否显示模块/章/节
      subList: [],
      subIndex: 0,
      goodsTeacher: [],
      teacherList: [],
      teacherIndex: 0,
      newActiveSubjectId: "", //当前选中ID
      compareFaceData: 0, // 拍照匹配相似度
      prendreAutoCarme: false, // 是否发起授权相机
      studyTimer: null, // 学习记录定时器
      CountTo: 30, // 倒计时
      handoutTipLength: 0,
      menuAllList: [],
      popupPhotoShow: false,
      curPlayIndex: 0, // 正在播放的节的下标
      // h5
      vodPlayerJs: "https://player.polyv.net/script/player.js",
      player: "",
      H5isAllowSeek: "on",
      // stream: null,
      faceUrl: "",
      erJianErZao: false,
      pauseTime: 0,
      pauseTimer: null,
      barTimer: null,
    };
  },
  computed: {
    ...mapGetters([
      "userInfo",
      "playSectionId",
      "playChannelId",
      "playVID",
      "config",
    ]),
    playSecIsLearn() {
      return this.sectionItem.learning != 1;
    },
  },
  watch: {
    showSet(n) {
      if (n) {
        // var polyvPlayerContext = this.selectComponent("#playerVideo")
        if (polyvPlayerContext) {
          // #ifdef MP-WEIXIN
          polyvPlayerContext.pause();
          // #endif
          // #ifdef H5
          polyvPlayerContext.j2s_pauseVideo(); // 暂停播放视频
          // #endif
        }
      }
    },
    photoPopup(n) {
      if (n) {
        if (this.prendreAutoCarme) {
          this.photoPopup = false;
        }
        this.showSet && (this.photoPopup = false);
      }
    },
  },
  onLoad(option) {
    if (option.isOther) {
      this.showMark = true;
      return;
    }
    !this.userInfo && this.$api.refreshUserInfo();
    this.courseId = Number(option.id) || "";
    this.goodsId = Number(option.goodsId);
    this.orderGoodsId = Number(option.orderGoodsId) || "";
    this.gradeId = option.gradeId;
    this.option = option;
    // 公众号模板消息的数据埋点
    option.informId && this.clickOfficial(option.informId);
  },
  async onShow() {
    if (this.option.skipPort) {
      await this.$method.skipLogin(this.option.skipPort);
    }
    if (this.$method.isGoLogin()) {
      return;
    }
    this.courseCourseList();
  },
  onUnload() {
    console.log("onUnloadonUnloadonUnloadonUnload");
    this.originUnload();
    this.clears();
  },
  onHide() {
    this.originUnload();
  },
  mounted() {},
  methods: {
    ...mapMutations(["updateChapterOpen", "updateLiveLast"]),
    // 新增微信公众号模板消息点击数据
    clickOfficial(informId) {
      this.$http({
        url: "/data/click",
        method: "post",
        data: { informId },
      });
    },
    // 点击课程目录
    cMenu(item, index) {
      this.subIndex = index;
      this.newActiveSubjectId = item.subjectId;
    },
    courseCourseList() {
      // /course/courseList查询商品下的课程列表
      this.courseList = [];
      this.menuList = [];
      this.$api
        .courseCourseList({
          pageNum: 1,
          pageSize: 200,
          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);
            // 科目
            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.rows.length) {
              this.courseBusiness(res.data.rows[0].businessId);
            }
            if (res.data.total > 1) {
              this.getUserWatchLast();
              // this.$navTo.togo(`/pages2/wd/course?id=${v}&gid=${i}&orderGoodsId=${item.orderGoodsId}`);
            } else if (res.data.total == 1) {
              this.originOnShow();
              this.originMounted();
            }
          }
        });
    },
    /**
     * 获取业务层次详情
     */
    courseBusiness(businessId) {
      // '/app/common/course/business/'+data,
      this.$api.courseBusiness(businessId).then((res) => {
        this.businessData = res.data.data;
      });
    },
    // 查询用户最后一次看的录播的信息
    getUserWatchLast() {
      this.$http({
        url: "/study/record/getUserWatchLast",
        method: "get",
        data: {
          orderGoodsId: this.orderGoodsId,
        },
      }).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;
            // console.log('查询用户最后一次看的录播的信息', res.data, this.courseId)
          } else {
            this.courseId = this.courseList[0].courseId; // 没有观看记录默认一个课程
            // this.toggleCourseShow = true
          }
        } else {
          this.courseId = this.courseList[0].courseId; // 没有观看记录默认一个课程
        }
        this.originOnShow();
        this.originMounted();
        //获取商品双师资模板
        this.getCourseTeacher(this.courseList);
      });
    },
    getCourseTeacher(rows) {
      this.goodsTeacher = [];
      //获取商品双师资模板
      this.$api
        .courseTeacherList({
          goodsId: this.goodsId,
        })
        .then((res1) => {
          if (res1.data.data && res1.data.data.length > 0) {
            //课程老师模板
            let teacherTel = res1.data.data;
            //商品课程
            let courses = rows;
            teacherTel.forEach((tea) => {
              let dataList = [];
              let teacherList = [];
              courses.forEach((item) => {
                let data = tea.courseList.filter(
                  (x) => x.courseId == item.courseId
                );
                if (data && data.length > 0) {
                  dataList.push(item);
                  teacherList = tea.courseList;
                }
              });
              let result = {
                teaList: teacherList,
                courseList: dataList,
              };
              this.goodsTeacher.push(result);
            });
            if (this.goodsTeacher && this.goodsTeacher.length > 0) {
              let courseIds = [];
              this.goodsTeacher.forEach((item) => {
                item.courseList.forEach((course) => {
                  courseIds.push(course.courseId);
                });
              });
              if (courseIds.length > 0) {
                courses.forEach((item) => {
                  if (!courseIds.includes(item.courseId)) {
                    let data = {
                      teaList: [],
                      courseList: [],
                    };
                    data.courseList.push(item);
                    this.goodsTeacher.push(data);
                  }
                });
              }
              this.goodsTeacher.forEach((item) => {
                if (item.courseList && item.courseList.length > 0) {
                  item.courseList[0].show = 1;
                }
              });
            }
          } else {
            //没有双师资模板
            rows.forEach((item) => {
              item.show = 1;
              let data = {
                teaList: [],
                courseList: [],
              };
              data.courseList.push(item);
              this.goodsTeacher.push(data);
            });
          }
          // console.log(this.goodsTeacher,'this.goodsTeacher', this.courseId);
          this.goodsTeacher.forEach((item) => {
            if (item.courseList.some((x) => x.courseId == this.courseId)) {
              this.teacherList = item.teaList;
            }
          });
        });
    },
    erJianErZaoPauseTip() {
      if (this.playSecIsLearn && this.erJianErZao) {
        this.pauseTime = Date.now();
        this.pauseTimer = setInterval(() => {
          if (Date.now() - this.pauseTime > 60 * 1000) {
            let text = this.photoPopup ? "拍照停留" : "暂停";
            this.photoPopup = false;
            uni.showModal({
              title: "提示",
              showCancel: false,
              content: `检测${text}时间过长，刷新当前页面`,
              cancelText: "取消",
              confirmText: "确定",
              success: (res) => {
                if (res.confirm) {
                  // #ifdef H5
                  location.reload();
                  // #endif
                  // #ifdef MP-WEIXIN
                  let pages = getCurrentPages();
                  pages[pages.length - 1].onload();
                  // #endif
                }
              },
            });
            clearInterval(this.pauseTimer);

            this.pauseTimer = null;
          }
        }, 5000);
      }
    },
    // 原来onshow里面的内容
    originOnShow() {
      this.getbaseprofiletplists().then((res) => {
        this.courseDetail();
        this.getGoodsDetail();
        this.getAnswerList();
        this.studyRecordMenuAllList();
        // this.answerTimer = setInterval(() => {
        //   this.getAnswerList();
        // }, 5000);
        let noteSecond = Number(this.option.noteSecond);
        // console.log('noteSecondnoteSecond:', noteSecond, this.option)
        if (noteSecond > 0) {
          //我的消息跳过来,播放节
          let item = {
            sectionId: Number(this.option.sectionId),
            recordingUrl: this.option.recordingUrl,
            noteSecond: noteSecond,
            studyDuration: noteSecond,
          };
          let playNextId = `moduleId${this.option.moduleId}chapterId${
            this.option.chapterId
          }sectionId${this.option.sectionId}${
            this.option.isRebuild ? "isRebuild" : ""
          }`;
          this.$store.commit("setPlaySectionId", {
            playSectionId: item.sectionId || item.menuId,
          });
          this.$store.commit("setPlayVID", { playVID: item.recordingUrl });
          this.$store.commit("updatePlayNextId", playNextId);

          this.playNoteVideo(item);
        } else {
          this.studyRecordQueryLiveLast();
        }
      });
      this.current = uni.getStorageSync("current") || 0;
    },
    // 原来的mouted内容
    originMounted() {
      uni.$on("changeSection", (oldSectionId) => {
        console.log(
          "切换课程-originMounted->playVID:",
          this.playVID,
          oldSectionId
        );
        this.studyTimer && clearInterval(this.studyTimer); // 清除定时器
        this.hasStart = false;
        this.photoConfig = false;
        this.photoIndex = 0;
        // var polyvPlayerContext = this.selectComponent("#playerVideo");
        if (polyvPlayerContext) {
          //解决同个节视频切换问题
          // #ifdef MP-WEIXIN
          polyvPlayerContext.seek(0);
          polyvPlayerContext.pause();
          // #endif
          // #ifdef H5
          polyvPlayerContext.j2s_seekVideo(0);
          polyvPlayerContext.j2s_pauseVideo(); // 暂停播放视频
          // #endif
        }
        //清除直播
        this.$store.commit("setPlayChannelId", { playChannelId: 0 });
        this.postStudyRecord(0, oldSectionId);
      });
      uni.$on("getSection", (item) => {
        //清除直播
        this.studyTimer && clearInterval(this.studyTimer);
        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.hasStart
        );
        //获取拍照历史
        this.getPhotoLastRecord();
        this.playVideo(item);
      });
      uni.$on("levelId", (item) => {
        console.log("点击节获取的各层级ID", item);
        let arr = item.split("-");
        //点击节获取的各层级ID
        this.moduleId = arr[0];
        this.chapterId = arr[1];
      });
      uni.$on("getChannel", (item) => {
        //清除录播
        this.studyTimer && clearInterval(this.studyTimer);
        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);

      if (this.studyTimer) {
        clearInterval(this.studyTimer);
        this.hasStart = false;
      }
      if (this.pauseTimer) {
        clearInterval(this.pauseTimer);
        this.pauseTimer = null;
      }
      if (this.barTimer) {
        clearInterval(this.barTimer);
        this.barTimer = null;
      }
      this.timer && clearInterval(this.timer);
      if (this.lockTimer) {
        clearInterval(this.lockTimer);
        this.$api
          .lockDelLock({
            action: "jxjy",
            uuid: this.$method.getUuid(),
          })
          .then((res) => {
            uni.hideLoading();
          });
      }
      uni.removeStorageSync("current");
    },
    changeCourses() {
      this.toggleCourseShow = true;
    },
    closePop() {
      this.toggleCourseShow = false;
    },
    async activeFunc(item, index) {
      this.teacherIndex = index;
      let findResult = "";
      this.goodsTeacher.forEach((citem, index) => {
        citem.courseList.forEach((e, e_index) => {
          if (e.courseId == item.courseId) {
            findResult = e;
          }
        });
      });

      this.jump(findResult, 1);
    },
    // 进入学习
    async jump(item, index, type) {
      // console.log('item------>', index,item,this.goodsTeacher)

      if (index == 0) {
        await this.nextCourses(item, type);

        if (item.rebuild === 0) {
          //未重修
          this.$navTo.togo("/pages2/learn/details", {
            id: item.courseId,
            gradeId: item.gradeId,
            goodsId: this.goodsId,
            orderGoodsId: this.orderGoodsId,
          });
          return;
        }

        this.$api.courseDetail(item.courseId).then((res) => {
          if (res.data.code == 200) {
            // if (res.data.data.educationName == "继续教育") {
            this.$api
              .lockLockStatus({
                action: "jxjy",
                uuid: this.$method.getUuid(),
              })
              .then((res) => {
                if (res.data.code == 200) {
                  //有其他端在操作，不能学习
                  uni.showToast({
                    icon: "none",
                    title: res.data.msg,
                    mask: true,
                    duration: 3000,
                  });
                } else if (res.data.code == 500) {
                  //可以学习
                  // this.$navTo.togo("/pages3/polyv/detail", {
                  //   id: item.courseId,
                  //   goodsId: this.goodsId,
                  //   orderGoodsId: this.orderGoodsId,
                  // });
                  this.courseId = item.courseId;
                  this.originOnShow();
                  this.originMounted();
                }
              });
          }
        });
      } else {
        if (this.businessData.goodsLearningOrder == 2) {
          //学习顺序是从头到尾学习，没学完上一课不能学习下一课
          let prevItem = this.courseList[index - 1]; //上一课
          if (prevItem.stuAllNum == prevItem.secAllNum) {
            await this.nextCourses(item, type);

            if (item.rebuild === 0) {
              //未重修
              this.$navTo.togo("/pages2/learn/details", {
                id: item.courseId,
                gradeId: item.gradeId,
                goodsId: this.goodsId,
                orderGoodsId: this.orderGoodsId,
              });
              return;
            }

            this.$api.courseDetail(item.courseId).then((res) => {
              if (res.data.code == 200) {
                // if (res.data.data.educationName == "继续教育") {
                this.$api
                  .lockLockStatus({
                    action: "jxjy",
                    uuid: this.$method.getUuid(),
                  })
                  .then((res) => {
                    if (res.data.code == 200) {
                      //有其他端在操作，不能学习
                      uni.showToast({
                        icon: "none",
                        title: res.data.msg,
                        duration: 2000,
                      });
                    } else if (res.data.code == 500) {
                      //可以学习

                      // this.$navTo.togo("/pages3/polyv/detail", {
                      //   id: item.courseId,
                      //   goodsId: this.goodsId,
                      //   orderGoodsId: this.orderGoodsId,
                      // });
                      this.courseId = item.courseId;
                      this.originOnShow();
                      this.originMounted();
                    }
                  });
              }
            });
          } else {
            uni.showToast({
              icon: "none",
              title: "请按顺序学完上一课再学习这一课",
            });
          }
        } else {
          await this.nextCourses(item, type);
          if (item.rebuild === 0) {
            //未重修
            this.$navTo.togo("/pages2/learn/details", {
              id: item.courseId,
              gradeId: item.gradeId,
              goodsId: this.goodsId,
              orderGoodsId: this.orderGoodsId,
            });
            return;
          }

          this.$api.courseDetail(item.courseId).then((res) => {
            if (res.data.code == 200) {
              // if (res.data.data.educationName == "继续教育") {
              this.$api
                .lockLockStatus({
                  action: "jxjy",
                  uuid: this.$method.getUuid(),
                })
                .then((res) => {
                  if (res.data.code == 200) {
                    //有其他端在操作，不能学习
                    uni.showToast({
                      icon: "none",
                      title: res.data.msg,
                      duration: 2000,
                    });
                  } else if (res.data.code == 500) {
                    //可以学习
                    // this.$navTo.togo("/pages3/polyv/detail", {
                    //   id: item.courseId,
                    //   goodsId: this.goodsId,
                    //   orderGoodsId: this.orderGoodsId,
                    // });
                    this.courseId = item.courseId;
                    this.originOnShow();
                    this.originMounted();
                  }
                });
            }
          });
        }
      }
    },
    async nextCourses(item, type) {
      this.vid = "";
      this.hasStart = true;
      await this.originUnload();

      if (type) {
        this.teacherIndex = 0;
        this.goodsTeacher.forEach((citem) => {
          if (citem.courseList.some((x) => x.courseId == item.courseId)) {
            this.teacherList = citem.teaList;
          }
        });
      }
      this.reStart = false;
      this.courseId = item.courseId;
      this.gradeId = item.gradeId;
      this.toggleCourseShow = false;
    },
    clickLeft() {
      // uni.navigateBack()
      uni.switchTab({
        url: "/pages/learn/index",
      });
    },
    markCancel() {
      uni.navigateBack({
        delta: 1,
      });
    },
    markConfirm() {
      uni.setClipboardData({
        data: this.markContent,
        success: function () {
          setTimeout(() => {
            uni.navigateBack({
              delta: 1,
            });
          }, 1000);
        },
      });
    },
    closeNotice() {
      this.$api
        .baseHandoutTip({
          orderGoodsId: this.orderGoodsId,
        })
        .then((res) => {});
    },
    noticeConfirm() {
      if (this.CountTo < 0) {
        this.noticeShow = false;
        if (this.handoutTipLength == 0 && this.goodsPlayConfig.autoPlay > 0) {
          this.autoplay = true;
          // var polyvPlayerContext = this.selectComponent("#playerVideo")
          // #ifdef MP-WEIXIN
          polyvPlayerContext.play();
          // #endif
          // #ifdef H5
          polyvPlayerContext.j2s_resumeVideo();
          // #endif
        }
      }
    },
    baseHandoutTipList() {
      this.$api
        .baseHandoutTipList({
          orderGoodsId: this.orderGoodsId,
        })
        .then((res) => {
          this.handoutTipLength = res.data.rows.length;
          if (res.data.rows.length == 0) {
            this.noticeShow = true;
            if (this.CountTo == 30) {
              var timer = setInterval(() => {
                this.CountTo--;
                if (this.CountTo < 0) {
                  clearInterval(timer);
                }
              }, 1000);
            }
          } else {
            this.CountTo = -1;
            if (this.goodsPlayConfig && this.goodsPlayConfig.autoPlay > 0) {
              // #ifdef MP-WEIXIN
              this.autoplay = true;
              var polyvPlayerContext = this.selectComponent("#playerVideo");
              polyvPlayerContext.play();
              // #endif
              // #ifdef H5
              // polyvPlayerContext.j2s_resumeVideo()
              // #endif
            }
          }
        });
    },
    /**
     * 获取上次观看的直播
     */
    studyRecordGetLastLive() {
      this.$api
        .studyRecordGetLastLive({
          orderGoodsId: this.orderGoodsId,
          courseId: this.courseId,
        })
        .then((res) => {
          this.updateLiveLast(res.data.data);
        });
    },
    studyRecordQueryLiveLast() {
      // /study/record/queryLiveLast
      this.$api
        .studyRecordQueryLiveLast({
          gradeId: this.gradeId,
          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.playVideo(res.data.data);
            }

            // 查询用户最后一次看的录播的信息
            this.$http({
              url: "/study/record/getUserWatchLast",
              method: "get",
              data: {
                orderGoodsId: this.orderGoodsId,
              },
            }).then((res) => {
              if (res.data.code == 200) {
                this.sectionItem = res.data.data || {};
              }
            });
          }
        });
    },
    /**
     * 模块大节播放完毕，刷新列表
     */
    sectionPlayEnd(isRebuild, index) {
      if (this.reMenuList.length > 0) {
        //有重修目录
        if (isRebuild.isRebuild) {
          //从重修点击
          this.$api
            .reMenuList({
              orderGoodsId: this.orderGoodsId,
              courseId: this.courseId,
              rebuild: 1,
              gradeId: this.gradeId,
            })
            .then((res) => {
              if (res.data.code == 200) {
                if (res.data.rows.length) {
                  res.data.rows[index].name = res.data.rows[index].menuName;
                  this.$set(this.reMenuList, index, res.data.rows[index]);
                  for (let i = 0; i < res.data.rows.length; i++) {
                    let item = res.data.rows[i];
                    item.down = true;
                    item.id = item.menuId;
                    item.name = item.menuName;
                  }
                  this.reMenuList = [];
                  this.$nextTick(() => {
                    this.reMenuList = res.data.rows;
                    // console.log(this.reMenuList,'this.reMenuList1')
                  });
                } else {
                  this.reMenuList = [];
                }

                this.$nextTick(() => {
                  if (this.reMenuList.length > 0) {
                    this.list = [
                      {
                        name: "目录",
                      },
                      {
                        name: "讲义",
                      },
                      {
                        name: "笔记",
                      },
                      {
                        name: "答疑",
                      },
                      { name: "重修目录" },
                    ];
                  } else {
                    this.list = [
                      {
                        name: "目录",
                      },
                      {
                        name: "讲义",
                      },
                      {
                        name: "笔记",
                      },
                      {
                        name: "答疑",
                      },
                    ];
                    if (this.current == 4) {
                      this.current = 0;
                    }
                  }
                });
              }
            });

          this.$api
            .reMenuList({
              courseId: this.courseId,
              gradeId: this.gradeId,
              orderGoodsId: this.orderGoodsId,
            })
            .then((res) => {
              if (res.data.code == 200) {
                for (let i = 0; i < res.data.rows.length; i++) {
                  let item = res.data.rows[i];
                  item.down = true;
                  item.id = item.menuId;
                  item.name = item.menuName;
                  item.menuType = item.type;
                }
                this.menuList = [];
                this.$nextTick(() => {
                  this.menuList = res.data.rows;
                });
              }
            });
        } else {
          //从普通目录点击
          this.$api
            .reMenuList({
              courseId: this.courseId,
              gradeId: this.gradeId,
              orderGoodsId: this.orderGoodsId,
            })
            .then((res) => {
              if (res.data.code == 200) {
                res.data.rows[index].name = res.data.rows[index].menuName;
                res.data.rows[index].id = res.data.rows[index].menuId;
                this.$set(this.menuList, index, res.data.rows[index]);
              }
            });

          this.$api
            .reMenuList({
              orderGoodsId: this.orderGoodsId,
              courseId: this.courseId,
              rebuild: 1,
              gradeId: this.gradeId,
            })
            .then((res) => {
              if (res.data.code == 200) {
                if (res.data.rows.length) {
                  // for (let i = 0; i < res.data.rows.length; i++) {
                  // 	let item = res.data.rows[i];
                  // 	item.down = true;
                  // 	item.id = item.menuId;
                  // 	item.name = item.menuName;
                  // }
                  // this.reMenuList = res.data.rows;
                } else {
                  this.reMenuList = [];
                }

                this.$nextTick(() => {
                  if (this.reMenuList.length > 0) {
                    this.list = [
                      {
                        name: "目录",
                      },
                      {
                        name: "讲义",
                      },
                      {
                        name: "笔记",
                      },
                      {
                        name: "答疑",
                      },
                      { name: "重修目录" },
                    ];
                  } else {
                    this.list = [
                      {
                        name: "目录",
                      },
                      {
                        name: "讲义",
                      },
                      {
                        name: "笔记",
                      },
                      {
                        name: "答疑",
                      },
                    ];
                    if (this.current == 4) {
                      this.current = 0;
                    }
                  }
                });
              }
            });
        }
      } else {
        console.log("--模块大节播放完毕，刷新列表-");
        //没有重修目录
        this.$api
          .reMenuList({
            courseId: this.courseId,
            gradeId: this.gradeId,
            orderGoodsId: this.orderGoodsId,
          })
          .then((res) => {
            if (res.data.code == 200) {
              res.data.rows[index].name = res.data.rows[index].menuName;
              res.data.rows[index].id = res.data.rows[index].menuId;
              this.$set(this.menuList, index, res.data.rows[index]);
            }
          });
      }
    },
    goLive(item) {
      let moduleId = item.moduleId || 0;
      let chapterId = item.chapterId || 0;
      let sectionId = item.sectionId || item.menuId;
      let 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() {
      // study/record/menuAllList
      this.$api
        .studyRecordMenuAllList({
          courseId: this.courseId,
          gradeId: this.gradeId,
          goodsId: this.goodsId,
        })
        .then((res) => {
          let nowTime = Number(new Date().getTime() / 1000).toFixed(0);
          if (res.data.data) {
            this.menuAllList = res.data.data;
            // console.log('======0', this.sectionItem);
            this.livingItem = res.data.data.find(
              (item) =>
                item.liveStartTime <= nowTime && item.liveEndTime > nowTime
            );
          }
        });
    },
    getbaseprofiletplists() {
      return new Promise((resolve) => {
        let self = this;
        // #ifdef MP-WEIXIN
        this.getCameraSetting();
        // #endif
        this.$api
          .getbaseprofiletplists({
            goodsId: self.goodsId,
            orderGoodsId: this.orderGoodsId,
          })
          .then((res) => {
            if (res.data.code === 200 && res.data.rows.length) {
              if (res.data.rows[0].keyValue) {
                self.$api.getbaseprofiletpId(self.goodsId).then((baseRes) => {
                  if (baseRes.data.code === 200) {
                    if (baseRes.data.data) {
                      // base/profile/tp/getInfo
                      self.$api
                        .getbaseprofiletpgetInfo({
                          goodsId: self.goodsId,
                          orderGoodsId: self.orderGoodsId,
                        })
                        .then((result) => {
                          if (result.data.code === 200) {
                            if (
                              !result.data.data ||
                              (result.data.data.status === 3 &&
                                result.data.data.changeStatus === 1)
                            ) {
                              if (!result.data.data) {
                                self.needProfileModal = true;
                                uni.showModal({
                                  content: "请前往填写资料",
                                  cancelText: "返回",
                                  success: function (resultst) {
                                    if (resultst.confirm) {
                                      self.$navTo.togo("/pages2/verify/input", {
                                        id: self.goodsId,
                                        orderGoodsId: self.orderGoodsId,
                                      });
                                    }
                                    if (resultst.cancel) {
                                      uni.navigateBack();
                                    }
                                  },
                                });
                              } else {
                                self.needProfileModal = true;
                                uni.showModal({
                                  content: "资料审核不通过，请前往重新填写",
                                  cancelText: "返回",
                                  success: function (resultst) {
                                    if (resultst.confirm) {
                                      self.$navTo.togo("/pages2/verify/input", {
                                        id: self.goodsId,
                                        orderGoodsId: self.orderGoodsId,
                                      });
                                    }
                                    if (resultst.cancel) {
                                      uni.navigateBack();
                                    }
                                  },
                                });
                              }
                            } else if (
                              result.data.data.status === 1 &&
                              JSON.parse(res.data.rows[0].keyValue2)[0]
                            ) {
                              self.$api
                                .getbaseprofileStampgetInfo({
                                  goodsId: self.goodsId,
                                  orderGoodsId: self.orderGoodsId,
                                })
                                .then((k) => {
                                  if (k.data.code === 200) {
                                    if (
                                      !k.data.data ||
                                      (k.data.data.status === 3 &&
                                        k.data.data.changeStatus === 1)
                                    ) {
                                      if (!k.data.data) {
                                        self.needProfileModal = true;
                                        uni.showModal({
                                          cancelText: "返回",
                                          content: "请前往填写盖章资料",
                                          success: function (resultst) {
                                            if (resultst.confirm) {
                                              self.$navTo.togo(
                                                "/pages2/verify/input2",
                                                {
                                                  id: self.goodsId,
                                                  orderGoodsId:
                                                    self.orderGoodsId,
                                                }
                                              );
                                            }
                                            if (resultst.cancel) {
                                              uni.navigateBack();
                                            }
                                          },
                                        });
                                      } else {
                                        self.needProfileModal = true;
                                        uni.showModal({
                                          cancelText: "返回",
                                          content:
                                            "资料盖章审核不通过，请前往重新填写",
                                          success: function (resultst) {
                                            if (resultst.confirm) {
                                              self.$navTo.togo(
                                                "/pages2/verify/input2",
                                                {
                                                  id: self.goodsId,
                                                  orderGoodsId:
                                                    self.orderGoodsId,
                                                }
                                              );
                                            }
                                            if (resultst.cancel) {
                                              uni.navigateBack();
                                            }
                                          },
                                        });
                                      }
                                    } else {
                                      resolve();
                                    }
                                  }
                                });
                            } else {
                              resolve();
                            }
                          }
                        });
                    } else {
                      resolve();
                    }
                  }
                });
              } else {
                resolve();
              }
            } else {
              resolve();
            }
          });

        if (this.gradeId > 0) {
          //提交完资料返回判断是否已开班

          this.getGradeInfo();
        }
      });
    },

    // /**
    //  * 获取业务层次详情
    //  */
    // courseBusiness() {
    //   this.$api.courseBusiness(this.goodsData.businessId).then((res) => {
    //     this.businessData = res.data.data;
    //   });
    // },
    /**
     * 计算tabs宽度
     */
    itemWidth() {
      return 100 / this.list.length + "%";
    },
    /**
     * 获取讲义权限
     */
    courseHandouts() {
      if (!this.goodsData.handoutsId) {
        return;
      }
      this.$api
        .getHandoutList({ handoutsId: this.goodsData.handoutsId })
        .then((res) => {
          this.courseHandoutsData = res.data.rows;
        });
    },
    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(event) {
      console.log("------: loadedmetadata", this.hasStart, polyvPlayerContext);
      if (this.hasStart) {
        // 防止loadedmetadata事件第二次触发
        return;
      }
      // #ifdef MP-WEIXIN
      polyvPlayerContext = this.selectComponent("#playerVideo");
      // #endif
      this.hasStart = true;
      uni.$off("playPause");
      uni.$on("playPause", () => {
        // #ifdef MP-WEIXIN
        polyvPlayerContext.pause();
        // #endif
        // #ifdef H5
        polyvPlayerContext.j2s_pauseVideo(); // 暂停播放视频
        // #endif
      });
      if (!this.recordObj.videoCurrentTime) {
        //新视频直接提交一条观看记录
        this.postStudyRecord(0);
      }
      this.studyTimer && clearInterval(this.studyTimer);
      this.studyTimer = setInterval(() => {
        this.postStudyRecord(0);
      }, 15000);
    },
    getPhotoLastRecord() {
      if (this.erJianErZao) {
        return;
      }
      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,
      };
      // /course/photo/log/getLastInfo'
      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 &&
                res.data.data[i].timeInterval.split(",");
            } else {
              self.photoHistoryList.push(res.data.data[i].photoIndex);
            }
          }
          // console.log('7777', this.photoHistoryList, this.photoList);
        }
      });
    },
    //postTime 只提交随机时间
    postCoursePhotoRecord(postTime = false) {
      return new Promise((resolve, reject) => {
        let currentTime = 0;
        // var polyvPlayerContext = this.selectComponent("#playerVideo");
        if (polyvPlayerContext) {
          // #ifdef MP-WEIXIN
          currentTime = polyvPlayerContext.getCurrentTime();
          // #endif
          // #ifdef H5
          currentTime = polyvPlayerContext.j2s_getCurrentTime();
          // #endif
        }
        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) => {
            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 = 0;
      let duration = 0;
      // #ifdef MP-WEIXIN
      totalVideoTime = polyvPlayerContext.getDuration();
      duration = polyvPlayerContext.getCurrentTime();
      // #endif
      // #ifdef H5
      totalVideoTime = polyvPlayerContext.j2s_getDuration();
      duration = polyvPlayerContext.j2s_getCurrentTime();
      // #endif
      let photoNum = this.photoNum;
      if (!this.photoConfig) {
        this.photoConfig = true;
        if (this.erJianErZao) {
          this.photoList = this.randomConfig(totalVideoTime, duration);
          return;
        }
        //没有历史拍照间隔数据
        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);
            }
          }
          this.postCoursePhotoRecord(true); //提交随机拍照时间数组
        }
        //兼容已有观看历史
        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;
          }
        }
      }
    },
    // 随机拍摄时间
    randomConfig(totalVideoTime, duration) {
      this.photoHistoryList = [];
      let photoList = [duration];
      let pre = duration;
      if (totalVideoTime > 300) {
        while (pre <= totalVideoTime) {
          pre += this.randomNum(780, 900);
          pre <= totalVideoTime && photoList.push(pre);
        }
        if (totalVideoTime - 300 > photoList.slice(-1)[0]) {
          photoList.push(this.randomNum(totalVideoTime - 180, totalVideoTime));
        }
      }
      return photoList;
    },
    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秒拍照
            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;
      if (status === "live") {
        //开始播放
        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);
        }
        this.livePlay = false;
        // 未开始
      }
    },
    closePlv() {
      if (plv) {
        plv.destroy();
      }
    },
    playChannel(item) {
      if (this.timer) {
        clearInterval(this.timer);
      }
      this.startStatus = true;
      this.initLive();
    },
    setLiveOption(status) {
      const { userId, channelId, recordFileSimpleModel, playbackEnabled } =
        this.detail;
      const playRecordFile =
        playbackEnabled && recordFileSimpleModel && status === "end";

      this.videoOption = {
        mode: "live",
        uid: this.liveObj.uid, //this.playChannelId  egsxlptzdq
        cid: this.playChannelId,
        openId: this.userInfo.userAccount,
        isAutoChange: false,
        forceVideo: false,
      };
    },
    async initLive() {
      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;
      // 不支持h5
      wx.getSetting({
        success: (res) => {
          if (res.authSetting["scope.camera"]) {
            // 用户已经授权
            self.showSet = false;
            this.prendreAutoCarme = false;
          } else {
            this.prendreAutoCarme = true;
            // 用户还没有授权，向用户发起授权请求
            wx.authorize({
              scope: "scope.camera",
              success: () => {
                // 用户同意授权
                self.showSet = false;
                this.prendreAutoCarme = false;
              },
              fail: () => {
                // 用户不同意授权
                self.showSet = true;
              },
            });
          }
        },
        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) {
      if (this.timer) {
        clearInterval(this.timer);
      }
      // #ifdef H5
      await this.clears();
      // #endif
      if (this.vid) {
        //切换视频
        polyvPlayerContext && polyvPlayerContext.changeVid(item.recordingUrl);
      } else {
        this.vid = item.recordingUrl;
      }
      this.recordObj = null;
      this.recordObj = await this.getRecordLast();
      this.needSeek = true; //跳转到播放记录
      this.startStatus = true;
      // #ifdef H5
      await this.loadPlayerScript(this.loadPlayer);
      // #endif
      // 提交学习记录
      // #ifdef MP-WEIXIN
      this.postStudyRecord(0);
      // #endif
      //获取节笔记
      this.getNoteList();
    },
    getRecordLast() {
      return new Promise((resolve) => {
        let data = {
          gradeId:
            this.gradeId || this.gradeId == 0 ? Number(this.gradeId) : null,
          goodsId:
            this.goodsId || this.goodsId == 0 ? Number(this.goodsId) : null,
          sectionId: this.playSectionId || 0,
          courseId:
            this.courseId || this.courseId == 0 ? Number(this.courseId) : null,
          chapterId: this.chapterId || 0,
          moduleId: this.moduleId || 0,
          orderGoodsId: this.orderGoodsId,
        };
        this.$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");
        // #ifdef MP-WEIXIN
        polyvPlayerContext.seek(item.noteSecond);
        polyvPlayerContext.play();
        // #endif
        // #ifdef H5
        polyvPlayerContext.j2s_seekVideo(0);
        polyvPlayerContext.j2s_resumeVideo();
        // #endif
      }
    },
    postNote() {
      let self = this;
      if (!(this.playSectionId > 0)) {
        this.$u.toast("目前无播放视频");
        return;
      }
      if (!this.noteValue) {
        this.$u.toast("请输入内容");
        return;
      }
      if (!this.gradeId) {
        this.$u.toast("暂无班级数据");
        return;
      }
      // var polyvPlayerContext = this.selectComponent("#playerVideo");
      let noteDate = this.$method.getZeroTime();
      let noteSecond = 0;
      // #ifdef MP-WEIXIN
      noteSecond = polyvPlayerContext.getCurrentTime();
      // #endif
      // #ifdef H5
      noteSecond = polyvPlayerContext.j2s_getCurrentTime();
      // #endif
      if (!noteSecond) {
        if (noteSecond == 0) {
          //播放结束
          // #ifdef MP-WEIXIN
          noteSecond = polyvPlayerContext.getDuration();
          // #endif
          // #ifdef H5
          noteSecond = polyvPlayerContext.j2s_getCurrentTime();
          // #endif
        }
        if (!noteSecond) {
          this.$u.toast("视频暂未开始");
          return;
        }
      }
      let data = {
        gradeId: this.gradeId,
        goodsId: this.goodsId,
        sectionId: this.playSectionId,
        courseId: this.courseId,
        noteText: this.noteValue,
        noteDate: noteDate,
        noteSecond: noteSecond,
        orderGoodsId: this.orderGoodsId,
      };
      this.$api.postNote(data).then((res) => {
        if (res.data.code == 200) {
          this.$u.toast("发布成功");
          self.getNoteList();
          this.noteValue = "";
        }
      });
    },
    getGradeInfo() {
      let self = this;
      this.$store.state.allowLoading = false;
      this.$api.goodsGradeInfo(this.gradeId).then((res) => {
        if (res.data.code == 200) {
          self.gradeDetail = res.data.data;
          if (self.needProfileModal) {
            return;
          }
          if (self.gradeDetail.learningStatus == 2) {
            uni.showModal({
              showCancel: false,
              confirmText: "确定",
              content:
                "当前课程正在申请中，正式开班后方可进行学习，请耐心等候！",
              success: function (resultst) {
                uni.navigateBack();
              },
            });
          }
          if (
            self.gradeDetail.learningStatus == 3 &&
            Number(self.gradeDetail.learningTimeStart) >
              Number(new Date() / 1000)
          ) {
            uni.showModal({
              showCancel: false,
              cancelText: "返回",
              content:
                "当前课程正在申请中，正式开班后方可进行学习，请耐心等候！",
              success: function (resultst) {
                uni.navigateBack();
              },
            });
          }
        }
      });
      this.$store.state.allowLoading = true;
    },
    getNoteList() {
      let self = this;
      self.noteList = [];
      let data = {
        courseId: this.courseId,
        gradeId: this.gradeId,
        goodsId: this.goodsId,
        orderGoodsId: this.orderGoodsId,
      };
      if (this.playSectionId > 0) {
        data.sectionId = this.playSectionId;
      }
      this.$api.noteList(data).then((res) => {
        if (res.data.code == 200) {
          self.noteList = res.data.rows;
        }
      });
    },
    delAnswer(answerId) {
      let self = this;
      let data = {
        answerId: answerId,
        status: -1,
        orderGoodsId: this.orderGoodsId,
      };
      this.$api.delAnswer(data).then((res) => {
        if (res.data.code == 200) {
          self.getAnswerList();
        }
      });
    },
    clearCtx() {
      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) {
        // #ifdef MP-WEIXIN
        currentTime = polyvPlayerContext.getCurrentTime(); //获取视频当前的播放时刻
        PlayDuration = polyvPlayerContext.getVideoPlayDuration(); //本次看的时长
        // #endif
        // #ifdef H5
        currentTime = polyvPlayerContext.j2s_getCurrentTime(); //当前视频播放时刻
        PlayDuration = polyvPlayerContext.j2s_realPlayVideoTime(); //本次看的时长
        // #endif
      }
      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,'sectionId:', sectionId,'chapterId:', self.chapterId,'moduleId:', self.moduleId, 'courseId:', this.courseId);
      this.$api
        .studyRecord(data)
        .then((res) => {
          if (res.data.code == 200) {
            if (status > 0) {
              this.studyRecordMenuAllList();
              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,
            });
          }
        })
        .catch((err) => {
          this.studyRecordMenuAllList();
        });
    },
    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",
          });

          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("上传成功");
              self.ossAvatarUrl = ossToken.dir;
              resolve();
            },
            fail: (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("上传成功");
              self.ossAvatarUrl = ossToken.dir;
              resolve();
            },
            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) {
              // h5不支持
              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 {
              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() {
      // var polyvPlayerContext = this.selectComponent("#playerVideo");
      if (polyvPlayerContext != null) {
        // #ifdef MP-WEIXIN
        this.playTime = polyvPlayerContext.getCurrentTime(); //播放时刻
        // #endif
        // #ifdef H5
        this.playTime = polyvPlayerContext.j2s_getCurrentTime();
        // #endif
        this.configPhoto();
        console.info(this.photoList, "photoList");
        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) {
              //不存在拍照历史，没有重修过，没有学过，则拍照
              //启动拍照
              //暂停
              console.log("去拍照");
              // #ifdef MP-WEIXIN
              polyvPlayerContext.exitFullScreen();
              polyvPlayerContext.pause();
              // #endif
              // #ifdef H5
              polyvPlayerContext.j2s_pauseVideo();
              polyvPlayerContext.toggleFullscreen();
              // #endif
              this.photoIndex = i;
              if (
                uni.getStorageSync(`tabkePhotoShow${this.goodsId}`) ==
                this.goodsId
              ) {
                this.openPhoto();
              } else {
                this.popupPhotoShow = true;
                uni.setStorageSync(
                  `tabkePhotoShow${this.goodsId}`,
                  this.goodsId
                ); // 本地缓存用来判断是否已经弹出过弹窗
              }
            }
          }
        }
      }
    },
    closeToast() {
      clearTimeout(this.toastTimer);
      this.videoToastShow = false;
    },
    restart() {
      // var polyvPlayerContext = this.selectComponent("#playerVideo");
      // #ifdef MP-WEIXIN
      polyvPlayerContext.seek(0);
      // #endif
      // #ifdef H5
      polyvPlayerContext.j2s_seekVideo(0);
      // #endif
      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: 1, // 商品类型 1视频2题库 3补考 4前培 5虚拟赠送题库 6直播
          orderGoodsId: this.orderGoodsId,
        },
      }).then((res) => {});
    },
    onStateChange(newstate, oldstate) {
      polyvPlayerContext = this.selectComponent("#playerVideo");
      if (newstate.detail.newstate == "playing") {
        this.pauseTime = 0;
        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();
          // 提交学习记录
        }
        //开始播放
        this.timer && clearInterval(this.timer);
        if (this.playSecIsLearn && (this.erJianErZao || this.photoNum > 0)) {
          this.timer = setInterval(this.timeEvent, 1000); //定时器
        }
      }
      if (newstate.detail.newstate == "pause") {
        console.log("暂停");
        this.erJianErZaoPauseTip();
        clearInterval(this.timer);
        //暂停提交记录
      }
      if (newstate.detail.newstate == "ended") {
        clearInterval(this.timer);
        uni.showToast({
          icon: "none",
          title: "播放完毕",
        });
        this.hasStart = false;
        this.postStudyRecord(1);
        this.nextSection();
        // uni.$emit('playNext') //播放重修下一节
      }
    },
    //播放下一节
    nextSection() {
      if (!this.menuAllList.length) {
        return;
      }
      this.curPlayIndex = this.menuAllList.findIndex((item) => {
        let i_sectionId = item.sectionId || 0;
        let i_chapterId = item.chapterId || 0;
        let i_moduleId = item.moduleId || 0;
        return (
          i_sectionId == this.playSectionId &&
          i_chapterId == this.chapterId &&
          i_moduleId == this.moduleId
        );
      });
      let data = this.menuAllList[this.curPlayIndex + 1];
      if (!data) {
        //第二个弹窗
        uni.showModal({
          title: "温馨提示",
          content: "当前最后一节视频已学完 请检查所有章节是否学习完成？",
          showCancel: false,
          success: (res) => {
            if (res.confirm) {
            }
          },
        });
      } else {
        uni.showModal({
          title: "温馨提示",
          content: "当前节视频已学完，继续学习下一节？",
          success: async (res) => {
            if (res.confirm) {
              this.moduleId = data.moduleId;
              this.chapterId = data.chapterId;
              this.sectionId = data.sectionId;
              if (data.sectionType == 1) {
                //录播
                this.$store.commit("setPlaySectionId", {
                  playSectionId: data.sectionId,
                });
                this.$store.commit("setPlayVID", {
                  playVID: data.recordingUrl,
                });

                this.hasStart = false;
                this.photoConfig = false;
                this.photoIndex = 0;
                this.sectionItem = data;
                await this.getPhotoLastRecord(); // 获取拍照历史
                this.playVideo(data);
              } else if (data.sectionType == 2) {
                //直播
                this.studyRecordGetLastLive();
              } else if (data.sectionType == 3) {
                //回放
                this.$store.commit("setPlaySectionId", {
                  playSectionId: data.sectionId,
                });
                this.$store.commit("setPlayVID", {
                  playVID: data.recordingUrl,
                });
                this.sectionItem = data;
                this.playVideo(data);
              }
              let playNextId = `moduleId${data.moduleId}chapterId${data.chapterId}sectionId${data.sectionId}`;
              this.$store.commit("updatePlayNextId", playNextId);
              this.updateChapterOpen(true);
              this.reStart = false;
              this.getMenuList();
            }
          },
        });
      }
    },

    //拍照
    openPhoto() {
      if (polyvPlayerContext) {
        // #ifdef MP-WEIXIN
        polyvPlayerContext.exitFullScreen();
        // #endif
        // #ifdef H5
        if (this.isFullScreen()) {
          this.exitFullscreen();
        }
        // #endif
      }

      // #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) {
            // this.$u.toast('人脸识别错误!')
            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();
      console.log(compareFaceData, "compareFaceData");
      this.compareFaceData = compareFaceData;
      if (compareFaceData >= 80) {
        const waitYS = await this.imageInfos();
        this.postCoursePhotoRecord()
          .then((res) => {
            this.photoHistoryList.push(this.photoIndex);
            // console.log('拍照确定提交', this.photoHistoryList);
            this.postStudyRecord(); //提交记录
            //恢复播放
            // #ifdef MP-WEIXIN
            uni.setKeepScreenOn({
              keepScreenOn: false,
            });
            // #endif
            this.photoPopup = false;
            this.uploadLock = false;
            this.enableAutoRotation = true;
            // var polyvPlayerContext = this.selectComponent("#playerVideo");
            if (polyvPlayerContext != null) {
              // #ifdef MP-WEIXIN
              polyvPlayerContext.play();
              // #endif
              // #ifdef H5
              polyvPlayerContext.j2s_resumeVideo();
              // #endif
            }
          })
          .catch((err) => {
            console.log("拍照记录接口的err", 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);
      }
    },
    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;
          console.log("开始拍照this.avatarUrl:", this.avatarUrl);
          this.isTaking = false;
        },
        fail: (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) => {
        this.goodsData = res.data.data;
        if (self.goodsData.buyNote) {
          this.baseHandoutTipList();
        }
        self.gradeId = self.goodsData.gradeId;
        this.courseBusiness(this.goodsData.businessId);
        this.courseHandouts();
        self.getMenuList();
        self.getReMenuList(); //获取重修目录
        setTimeout(function () {
          if (!self.needProfileModal) {
            self.getGradeInfo();
          }
        }, 500);

        //获取节笔记
        this.getNoteList();
        if (self.goodsData.goodsPlayConfig) {
          self.goodsPlayConfig = JSON.parse(self.goodsData.goodsPlayConfig);
          if (self.goodsPlayConfig.autoPlay > 0) {
            // #ifdef H5
            self.autoplay = true;
            // #endif
          }
          if (self.goodsPlayConfig.drag > 0) {
            // #ifdef MP-WEIXIN
            self.isAllowSeek = "yes";
            // #endif
            // #ifdef H5
            self.H5isAllowSeek = "off";
            // #endif
          }
          if (self.goodsPlayConfig.speed > 0) {
            self.playbackRate = [0.5, 0.8, 1.0, 1.25, 1.5, 2.0];
          }
        }
        self.erJianErZao = self.goodsData.erJianErZao;
        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;
          }
        });
    },
    getReMenuList() {
      // console.log('重修的目录');
      let self = this;
      this.$api
        .reMenuList({
          orderGoodsId: this.orderGoodsId,
          courseId: this.courseId,
          rebuild: 1,
          gradeId: this.gradeId,
        })
        .then((res) => {
          if (res.data.code == 200) {
            for (let i = 0; i < res.data.rows.length; i++) {
              let item = res.data.rows[i];
              item.down = true;
              item.id = item.menuId;
              item.name = item.menuName;
            }
            self.reMenuList = res.data.rows;
            if (self.reMenuList.length > 0) {
              this.showNotes = false;
              self.list = [
                {
                  name: "目录",
                },
                {
                  name: "讲义",
                },
                {
                  name: "笔记",
                },
                {
                  name: "答疑",
                },
                { name: "重修目录" },
              ];
              this.current = 0;
              if (Object.keys(this.sectionItem).length) {
                let playNextIdisRebuild = `moduleId${this.sectionItem.moduleId}chapterId${this.sectionItem.chapterId}sectionId${this.sectionItem.sectionId}isRebuild`;
                this.$store.commit("updatePlayNextId", playNextIdisRebuild);
              }
            } else {
              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);
              }

              self.list = [
                {
                  name: "目录",
                },
                {
                  name: "讲义",
                },
                {
                  name: "笔记",
                },
                {
                  name: "答疑",
                },
              ];
              this.current = 0;
            }
          }
        });
    },
    getMenuList() {
      // console.log('menuList的目录');
      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;
            }
            self.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) {
                  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) {
                  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;
                }
              }
            }
            // console.log('menuList: ---', this.menuList, 'menuIndex:', this.menuIndex);
          }
        });
    },
    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(item) {
      let url = this.$method.splitImgHost(item.url);
      // #ifdef H5
      window.location.href = url;
      // #endif
      // #ifdef MP-WEIXIN
      this.downLoading = true;
      uni.downloadFile({
        url: url,
        success: (res) => {
          var filePath = res.tempFilePath;
          // h5不支持
          uni.openDocument({
            filePath: filePath,
            fileType: "pdf",
            showMenu: item.canDownload == 1 ? true : false,
            success: (res) => {
              this.downLoading = false;
              uni.setStorageSync("current", this.current);
            },
            fail: (err) => {
              this.downLoading = false;
              uni.showToast({
                icon: "none",
                title: "文档地址错误",
              });
            },
          });
        },
        fail: (err) => {
          this.downLoading = false;
          uni.showModal({
            title: "提示",
            content: "文档错误," + err.errMsg,
            showCancel: false,
          });
        },
      });
      // #endif
    },
    clickMulu() {
      this.muluStyle = !this.muluStyle;
    },
    loadPlayerScript(callback) {
      if (!window.polyvPlayer) {
        const myScript = document.createElement("script");
        myScript.setAttribute("src", this.vodPlayerJs);
        myScript.onload = callback;
        document.body.appendChild(myScript);
      } else {
        callback();
      }
    },
    // 播放视频
    loadPlayer() {
      const polyvPlayer = window.polyvPlayer;
      this.pauseTime = 0;
      this.$api.polyvVideoSign(this.vid).then(async (res) => {
        console.log("播放凭证res", res, 465555555555555555555);
        this.player = await polyvPlayer({
          wrap: "#player",
          width: "100%",
          showLine: "off",
          height: 218,
          ban_history_time: "on",
          vid: this.vid,
          forceH5: true,
          autoplay: this.autoplay, // 自动播放
          ban_seek: this.H5isAllowSeek, // 是否禁止拖拽进度条
          speed: this.playbackRate, // 倍数
          teaser_show: 1,
          tail_show: 1,
          hideSwitchPlayer: true,
          watchStartTime: this.recordObj.videoCurrentTime, // 播放开始时间，表示视频从第几秒开始播放，参数值需小于视频时长
          ts: res.data.data.ts, // 移动播放加密视频需传入的时间戳。
          sign: res.data.data.sign, // 移动端播放加密视频所需的签名
          // playsafe: (vid, next) => { // PC端播放加密视频所需的授权凭证
          // console.log('111111111111', vid);
          //   // this.$api.obtainpolyvvideopcsign(vid).then((res) => {
          //   //   console.log('请求完后', res);
          //   //   next(res.data.data);
          //   // });
          // },
        });

        polyvPlayerContext = this.player;
        console.log("this.player:", this.player);

        this.player.on("s2j_onPlayStart", (vid) => {
          // 视频初次播放时触发
          console.log("视频初次播放时触发:");
          // #ifdef H5
          // h5禁止拖动进度条
          clearInterval(this.barTimer);
          this.barTimer = null;
          let originTime = this.recordObj.videoCurrentTime || 0;
          if (this.H5isAllowSeek == "on" && !this.barTimer) {
            this.barTimer = setInterval(function () {
              const currentTime = polyvPlayerContext.j2s_getCurrentTime();
              // console.log(currentTime, originTime)
              if (
                currentTime - originTime > 1 ||
                currentTime - originTime < 0
              ) {
                polyvPlayerContext.j2s_seekVideo(originTime);
              } else {
                originTime = currentTime;
              }
            }, 500);
          }
          // #endif
          this.loadedmetadata();
          this.postStudyRecord(0);
        });

        this.player.on("s2j_onVideoPause", () => {
          // 视频暂停时触发
          console.log("视频暂停时触发", this.vid);
          this.erJianErZaoPauseTip();

          clearInterval(this.studyTimer);
          clearInterval(this.timer);
        });

        this.player.on("s2j_onVideoPlay", () => {
          // 视频初次播放或由暂停恢复播放时触发
          console.log("视频初次播放或由暂停恢复播放时触发");
          if (this.needSeek) {
            if (this.recordObj.videoCurrentTime) {
              this.seekTime = this.$method.secondToDate(
                this.recordObj.videoCurrentTime
              );

              this.videoToastShow = true;
              this.toastTimer = setTimeout(() => {
                this.videoToastShow = false;
              }, 3000);
            }

            this.needSeek = false;
            // 新增用户视频学习日志
            this.studyLog();
          }
          //开始播放
          this.timer && clearInterval(this.timer);
          if (this.playSecIsLearn && (this.erJianErZao || this.photoNum > 0)) {
            this.timer = setInterval(this.timeEvent, 1000); //定时器
          }

          this.studyTimer && clearInterval(this.studyTimer);
          this.studyTimer = setInterval(() => {
            this.postStudyRecord(0, this.playSectionId);
          }, 15000);
        });

        this.player.on("s2j_onPlayOver", () => {
          // 当前视频播放完毕时触发
          console.log("结束了结束了");
          this.hasStart = false;
          clearInterval(this.studyTimer);
          clearInterval(this.timer);
          uni.showToast({
            icon: "none",
            title: "播放完毕",
          });
          this.postStudyRecord(1);
          this.nextSection(); // 播放下一节
        });
      });
    },
    clears() {
      return new Promise((resolve, reject) => {
        this.vid = "";
        this.player && this.player.destroy();
        resolve();
      });
    },
    /**
     * 退出全屏
     */
    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 "./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;
    }
  }
}
#top {
  position: relative;
  z-index: 99;
}
.polyv_detail {
  display: flex;
  flex-direction: column;
  height: 100vh;
  position: relative;
  top: 0;
  left: 0;
  .pops {
    position: absolute;
    top: 0;
    left: 0;
    background: #ccc;
    opacity: 0.5;
    width: 100%;
    height: 300rpx;
    z-index: 9999;
  }
  .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;
  margin-bottom: 20rpx;
  .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;
  }
  @keyframes rotation {
    from {
      -webkit-transform: rotate(0deg);
    }
    to {
      -webkit-transform: rotate(360deg);
    }
  }
  .loading_down {
    transform: rotate(360deg);
    animation: rotation 3s linear infinite;
  }
}

.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;
}

.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%;

  .flex_auto {
    flex: 1;
    margin-left: 10%;
    word-break: break-all;
    // .input {
    //   height: 60rpx;
    // }
  }

  .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: 0rpx 20rpx;
  margin-bottom: 20rpx;
}
.btnspric {
  border-top: 1rpx solid #eee;
  display: flex;
  align-items: center;
  justify-content: space-between;
  height: 108rpx;
  padding-left: 43rpx;
  padding-right: 32rpx;
}
.btnspric > .lefprL {
  font-size: 36rpx;
  color: #0c141f;
  font-weight: bold;
}
.btnspric > .lefprR {
  padding: 0rpx 24rpx;
  height: 60rpx;
  line-height: 60rpx;
  text-align: center;
  color: #fff;
  background: #32467b;
  border-radius: 24rpx;
  box-shadow: 0rpx 0rpx 16rpx 4rpx rgba(145, 156, 178, 0.1);
}
.yhj,
.hdyhj {
  padding: 24rpx 29rpx 24rpx 34rpx;
}
.yhj {
  border-bottom: 16rpx solid #f9f9f9;
}
.yhjtit {
  font-size: 30rpx;
  color: #0c141f;
  font-weight: 500;
  margin-bottom: 14rpx;
}
.yhjList {
  display: flex;
  align-items: center;
  justify-content: space-between;
  margin-bottom: 14rpx;
}
.yhjList > .yhjLefts {
  display: flex;
  align-items: center;
}
.yhjLefts > .yhl {
  color: #32467b;
  font-size: 30rpx;
  margin-right: 31rpx;
}
.yhjLefts > .yhbq {
  font-size: 24rpx;
  color: #ff9500;
  border-radius: 18rpx;
  background-color: rgba(255, 149, 0, 0.2);
  border: 2rpx solid #ff9500;
  height: 38rpx;
  line-height: 38rpx;
  padding: 0rpx 16rpx;
}
.ts {
  font-size: 24rpx;
  color: #999;
  margin: 14rpx 0rpx;
  padding-right: 29rpx;
  padding-left: 34rpx;
}
.yh {
  padding-top: 20rpx;
}
.yh > .yhtitle {
  display: flex;
  align-items: center;
  justify-content: space-between;
  padding-right: 29rpx;
  padding-left: 34rpx;
}
.priceBxs {
  display: flex;
  align-items: center;
}
.priceBxs > .pricleft {
  border-radius: 24rpx;
  border: 1rpx solid #e91313;
  background-color: rgba(233, 19, 19, 0.1);
  padding: 0rpx 18rpx;
  height: 49rpx;
  line-height: 49rpx;
  text-align: center;
  font-size: 30rpx;
  font-weight: 500;
  color: #e91313;
  margin-right: 13rpx;
}
.topBox {
  padding: 32rpx 32rpx 24rpx;
  border-bottom: 1rpx solid #eeeeee;
}
.topBox > .boldFonstType {
  font-weight: 500;
  font-size: 30rpx;
  margin: 16rpx 0rpx 23rpx;
}
.topBox > .firstTopL {
  display: flex;
  align-items: center;
}
.topBox > .firstTopL > .imageBs {
  width: 331rpx;
  height: 160rpx;
  border-radius: 6rpx;
  overflow: hidden;
  margin-right: 8rpx;
  box-shadow: 0rpx 6rpx 6rpx 0rpx rgba(47, 67, 121, 0.08);
}
.topBox > .firstTopL > .imageBs > image {
  width: 100%;
  height: 100%;
}
.topBox > .firstTopL > .textBs {
  font-size: 30rpx;
  font-weight: bold;
  color: #0c141f;
}
.content {
  padding: 24rpx;
  text-align: left;
}
.catalogBox {
  display: flex;
  align-items: center;
  flex-wrap: nowrap;
  overflow-x: auto;
  padding-left: 38rpx;
  max-height: 305rpx;
  overflow-y: auto;
  transition: all 0.4s;
}
.catalogBox > .catalogA {
  min-width: 200rpx;
  height: 48rpx;
  line-height: 48rpx;
  // text-align: center;
  border: 2rpx solid transparent;
  white-space: nowrap;
  text-overflow: ellipsis;
  overflow: hidden;
  word-break: break-all;
  border-radius: 10rpx;
  background: rgba(22, 119, 255, 0.05);
  padding-left: 19rpx;
  box-sizing: border-box;
  padding-right: 15rpx;
  margin-right: 16rpx;
  margin-bottom: 20rpx;
  margin-top: 15rpx;
  font-size: 24rpx;
  color: #666;
}
.catalogBox > .activesq {
  border-color: #1677ff;
}
.changeCatalogBox {
  display: block;
}
.catalogBox::-webkit-scrollbar {
  display: none; /* Chrome Safari */
}
.price_t2 {
  font-size: 18rpx;
  font-family: PingFang SC;
  font-weight: 500;
  text-decoration: line-through;
  color: #999999;
}
.price_t1 {
  font-size: 33rpx;
  font-family: PingFang SC;
  font-weight: bold;
  color: #e91313;
}
.sc_t {
  font-size: 22rpx;
  color: #000000;
}
.sc {
  width: 29rpx;
  height: 29rpx;
}
.buy {
  width: 138rpx;
  height: 48rpx;
  line-height: 48rpx;
  background: #32467b;
  border-radius: 10rpx;
  color: #ffffff;
  font-size: 28rpx;
  text-align: center;
  vertical-align: middle;
  position: absolute;
  right: 30rpx;
}
.video_body {
  padding-bottom: 96rpx;
}
.footer_tab {
  position: fixed;
  bottom: 0;
  height: 96rpx;
  width: 100%;
  background-color: #ffffff;
}
.tj_box {
  width: 50%;
  display: inline-block;
  text-align: center;
  margin: 10rpx 0;
}
.teacher_t {
  font-size: 24rpx;
  font-family: PingFang SC;
  font-weight: 400;
  color: #666666;
  line-height: 36rpx;
  margin-left: 15rpx;
}
.teacher_img {
  width: 87rpx;
  height: 129rpx;
}
.t2 {
  font-size: 24rpx;
  font-family: PingFang SC;
  color: #666666;
  line-height: 36rpx;
  margin: 15rpx;
}
.r_t2 {
  width: 201rpx;
  height: 49rpx;
  background: rgba(22, 119, 255, 0.05);
  border: 1rpx solid #32467b;
  border-radius: 16rpx;
  color: #666666;
  font-size: 23rpx;
  text-align: center;
  display: flex;
  align-items: center;
  padding: 5rpx;
}
.scroll_box {
  width: 100%;
  height: 60rpx;
  background: #ffffff;
  box-shadow: 0rpx 0rpx 16rpx 4rpx rgba(145, 156, 178, 0.1);
  white-space: nowrap;
  overflow: hidden;
  margin: 15rpx 0;
}
.r_sliper {
  padding: 0 20rpx;
}
.top_line {
  width: 6rpx;
  height: 22rpx;
  background: #32467b;
  margin-right: 10rpx;
}
.video_t2 {
  font-size: 24rpx;
  font-family: PingFang SC;
  font-weight: 500;
  color: #666666;
}

.video_play {
  position: absolute;
  width: 95rpx;
  height: 95rpx;
  top: 0;
  left: 0;
  right: 0;
  bottom: 0;
  margin: auto;
}
.video_box {
  position: relative;
  #playerVideo {
    position: relative;
    z-index: 99;
  }

  .video-toast {
    position: absolute;
    width: 686rpx;
    height: 80rpx;
    background: rgba(0, 0, 0, 0.6);
    border-radius: 24rpx;
    bottom: 100rpx;
    left: 50%;
    transform: translateX(-50%);
    color: #fff;
    display: flex;
    font-size: 26rpx;
    align-items: center;
    overflow: visible;
    z-index: 999;
    &__text {
      flex: 1;
      margin-left: 40rpx;
    }

    &__btn {
      width: 180rpx;
      text-align: center;
      border-left: 1rpx solid #fff;
    }
  }

  .video-toast__close {
    position: absolute;
    right: 32rpx;
    bottom: 184rpx;
    width: 40rpx;
    height: 40rpx;
    line-height: 40rpx;
    text-align: center;
    background: rgba(0, 0, 0, 0.6);
    border-radius: 50%;
    color: rgba(255, 255, 255, 0.3);
  }
}
.rotoct {
  transform: rotate(90deg);
}

.slot-content {
  padding: 0 20rpx;
}

.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;
      }
    }
  }
}
.full_mulu {
  position: absolute;
  top: 100rpx;
  right: 20rpx;
  width: 700rpx;
  height: 515rpx;
  color: #333;
  display: flex;
  align-items: center;
  justify-content: space-between;
  z-index: 99999;
  .mulus {
    width: 623rpx;
    // height: 515rpx;
    height: 400rpx;
    overflow-y: scroll;
    // overflow: scroll;
  }
  .mulu_box_in {
    background-color: #b7b7b7;
    border-radius: 16rpx;
    // transition: all 0.5s;
    &::after {
      content: "";
      width: 0;
      height: 0;
      position: absolute;
      top: 235rpx;
      right: 27px;
      border-top: 16rpx solid transparent;
      border-right: 16rpx solid transparent;
      border-left: 16rpx solid #b7b7b7;
      border-bottom: 16rpx solid transparent;
    }
  }
  .mulu_box_out {
    // visibility: hidden;
    display: none;
  }
  .menuBox_mulu {
    // width: 100%;
    background: #ffffff;
    border-radius: 16rpx;
    padding: 0rpx 20rpx;
    margin-bottom: 20rpx;
  }
  .ml_img {
    position: absolute;
    right: 0;
    top: 100rpx;
  }
  .items {
    width: 620rpx;
    height: 100rpx;
    border: 1rpx solid red;
  }
}
</style>
