{"version":3,"file":"graphic.ea70af5f.mjs","sources":["../../../../pages/course/graphic.vue"],"sourcesContent":["<template>\n  <NuxtLayout>\n\n    <div v-loading=\"ctrl.loading\" class=\"app_container detail_content\">\n      <div v-if=\"opts.info.id\" class=\"course_info\">\n        <div ref=\"head\" class=\"course_info_header\">\n          <div class=\"course_info_content\">\n            <div class=\"course_nav\">\n              <el-breadcrumb :separator-icon=\"ArrowRight\">\n                <el-breadcrumb-item :to=\"{ path: '/' }\"><span class=\"nav_course_title\">首页</span></el-breadcrumb-item>\n                <el-breadcrumb-item :to=\"{ path: '/course/list' }\"><span class=\"nav_course_title\">课程中心</span>\n                </el-breadcrumb-item>\n                <el-breadcrumb-item :to=\"{ path: '/course/list',query:{courseType:opts.info.courseType} }\">\n                  <span class=\"nav_course_title\">{{ opts.PeriodTypeEnum[opts.info.courseType] }}</span>\n                </el-breadcrumb-item>\n                <el-breadcrumb-item>\n                  <div class=\"nav_course_title tx-ov\">{{ opts.info.courseName }}</div>\n                </el-breadcrumb-item>\n              </el-breadcrumb>\n            </div>\n            <div class=\"course_message\">\n              <div class=\"course_cover\">\n                <img :src=\"opts.info.courseCover\" class=\"course_cover_img\">\n              </div>\n              <div class=\"course_msg_content\">\n                <div class=\"course_price_content\">\n                  <div class=\"course_name\">\n                    <span class=\"course_name_tag\">{{ opts.PeriodTypeEnum[opts.info.courseType] }}</span>\n                    <span>{{ opts.info.courseName }}</span>\n                  </div>\n                  <div class=\"course_int\">\n                    <div class=\"course_int_text tx-ov\">课程描述：{{ opts.info.courseDesc || '无' }}</div>\n                    <client-only v-if=\"opts.info.courseDesc.length > 35\">\n                      <el-popover\n                        :width=\"600\"\n                        placement=\"bottom-end\"\n                        :offset=\"-24\"\n                        :show-arrow=\"false\"\n                        trigger=\"hover\"\n                      >\n                        <span style=\"line-height: 1.6;font-size: 14px;color:#999\">{{ opts.info.courseDesc }}</span>\n                        <template #reference>\n                          <span class=\"loadmore\">更多</span>\n                        </template>\n                      </el-popover>\n                    </client-only>\n                  </div>\n                </div>\n                <div class=\"course_price_info\">\n                  <div class=\"course_price\">\n                    <span class=\"course_tip\">价格：</span>\n                    <span :style=\"{color: '#F01414' }\" class=\"price_now\">\n                  <span v-if=\"opts.info.price>0\" class=\"price_icon\">￥</span>\n                  {{ opts.info.price ? opts.info.price.toFixed(2) : '免费' }}\n                </span>\n                    <span v-if=\"opts.info.linePrice > 0\" class=\"price_old\">\n                  <span class=\"price_icon\">￥</span>\n                  {{ opts.info.linePrice.toFixed(2) }}\n                </span>\n                  </div>\n                </div>\n                <div v-if=\"opts.info.examExist || opts.info.practiceExist || opts.info.certIssue\" class=\"course_cell\">\n                  <span class=\"course_tip\">包含内容：</span>\n                  <span @click=\"handleChangeExam('exam')\" v-if=\"opts.info.examExist\" class=\"course_cell_item cu\"><img\n                      src=\"@/assets/along.svg\"/>&nbsp;随堂考试：1场</span>\n                  <span  @click=\"handleChangeExam('practice')\" v-if=\"opts.info.practiceExist\" class=\"course_cell_item cu\"><img src=\"@/assets/practice.svg\"/>&nbsp;随堂练习：1个</span>\n                  <span v-if=\"opts.info.certIssue\" class=\"course_cell_item\"><img src=\"@/assets/credential.svg\"/>&nbsp;课程证书：1张 </span>\n\n\n                </div>\n                <div class=\"course_int\" v-if=\"opts.info.courseAuthor\">\n                  <div class=\"course_int_text tx-ov\">课程作者：{{ opts.info.courseAuthor }}</div>\n                  <client-only v-if=\"opts.info.courseAuthor.length > 35\">\n                    <el-popover\n                      :width=\"600\"\n                      placement=\"bottom-end\"\n                      :offset=\"-24\"\n                      :show-arrow=\"false\"\n                      trigger=\"hover\"\n                    >\n                      <span style=\"line-height: 1.6;font-size: 14px;color:#999\">{{ opts.info.courseAuthor }}</span>\n                      <template #reference>\n                        <span class=\"loadmore\">更多</span>\n                      </template>\n                    </el-popover>\n                  </client-only>\n                </div>\n                <div v-if=\"opts.info.teacherExist\" class=\"course_cell\">\n                  <span class=\"course_tip\">授课教师：</span>\n                  <div class=\"flex_teacher\">\n                    <div class=\"course_cell_item teacher_wrap\">\n                      <div v-for=\"(teacher,i) in opts.info.teacherList.filter((item,i)=>i<5)\" class=\"teacher_warp_item\"\n                           @click=\"handleOpenTeacher(teacher)\">\n                        <img :key=\"i\" :src=\"teacher.headImg\" :title=\"teacher.nickname\" class=\"mgl3 cover_teacher\"/>\n                        <div class=\"teacher_name\">{{ teacher.nickname }}</div>\n                      </div>\n                    </div>\n                    <client-only>\n                      <el-popover\n                        v-if=\"opts.info.teacherList.length > 5\"\n                        :content=\"opts.info.courseDesc\"\n                        :width=\"600\"\n                        placement=\"bottom-end\"\n                        :offset=\"-24\"\n                        :show-arrow=\"false\"\n                        trigger=\"hover\"\n                    >\n                      <div class=\"course_cell_item\">\n                        <div v-for=\"(teacher,i) in opts.info.teacherList\" class=\"teacher_warp_item\"\n                             @click=\"handleOpenTeacher(teacher)\">\n                          <img :key=\"i\" :src=\"teacher.headImg\" :title=\"teacher.nickname\" class=\"mgl3 cover_teacher\"/>\n                          <div class=\"teacher_name\">{{ teacher.nickname }}</div>\n                        </div>\n                      </div>\n                      <template #reference>\n                        <div class=\"course_in_icon\" @click=\"handleChangeTeach\">\n                          更多\n                        </div>\n                      </template>\n                    </el-popover>\n                    </client-only>\n                  </div>\n                </div>\n                <div class=\"course_cell course_cell_valid\">\n                  <span class=\"course_tip\">有效期：</span>\n                  <template v-if=\"opts.info.courseStatus === 3\">\n                    <span class=\"valid_text\">已过期</span>\n                  </template>\n                  <template v-else>\n                    <span v-if=\"opts.info.validityType === 1\">永久有效</span>\n                    <span v-else-if=\"opts.info.validityType === 2\">{{ opts.info.beginTime }} 至\n                {{ opts.info.endTime }}\n              </span>\n                    <span v-else-if=\"opts.info.validityType === 3\">\n                {{ opts.info.days }}天\n              </span>\n                  </template>\n                </div>\n                <div class=\"course_bottom\">\n                  <div class=\"course_btn_info\">\n                    <div class=\"course_btn\">\n                      <template v-if=\"opts.info.courseStatus\">\n                        <el-button v-if=\"opts.info.courseStatus === 1\" class=\"buy_btn\" type=\"primary\" @click=\"handleMake\">\n                          预约课程\n                        </el-button>\n                        <el-button v-if=\"opts.info.courseStatus === 2\" class=\"buy_btn\" type=\"info\">待开课</el-button>\n                        <el-button v-if=\"opts.info.courseStatus === 3\" class=\"buy_btn\" type=\"primary\"\n                                   @click=\"handleOpenOther\">查看其它课程\n                        </el-button>\n                      </template>\n                      <el-button v-if=\"!opts.info.courseStatus && opts.info.buyStatus\" class=\"buy_btn\" type=\"primary\" @click=\"handleBuy\">\n                  {{ !opts.info.enableFirst ? '继续学习' : '开始学习' }}\n                </el-button>\n                <el-button v-if=\"!opts.info.courseStatus && !opts.info.buyStatus && opts.info.supportAloneSales\" class=\"buy_btn\" type=\"primary\" @click=\"handleBuy\">\n                  {{ opts.info.price ? '购买' : '开始学习' }}\n                </el-button>\n                <el-button disabled v-if=\"!opts.info.courseStatus && !opts.info.buyStatus && !opts.info.supportAloneSales\" class=\"buy_btn\" type=\"primary\" >\n                  不支持单独售卖\n                </el-button>\n                    </div>\n                    <div class=\"course_learn_msg\">\n                      <span class=\"learn_item\" v-if=\"shopData && shopData.config.showLearnUserCount && shopData.config.showCourseLearnUserCount\">{{ opts.info.studyNum }}人已学习</span>\n                      <span class=\"learn_item icon_btn\" @click=\"handleCollection\">\n                  <span :class=\"{'icon-collection':!opts.info.collectStatus,'icon-collections':opts.info.collectStatus}\"\n                        class=\"iconfont\"></span>\n                  <span class=\"icon_text_name\">收藏</span>\n                </span>\n                      <span class=\"learn_item icon_btn\" @click=\"handleShare\">\n                   <span class=\"iconfont icon-share\"></span>\n                  <span class=\"icon_text_name\">分享</span>\n                </span>\n                    </div>\n                  </div>\n                </div>\n              </div>\n\n            </div>\n          </div>\n          <div class=\"nav_tabs\">\n            <template v-for=\"item in tabEnum\">\n                <div\n                v-if=\"item.show\"\n                :key=\"item.command\"\n                :class=\"{active:map.tabs === item.command}\" class=\"nav_tabs_item\" @click=\"handleChangeType(item.command)\">\n                {{ item.label }}\n              </div>\n              </template>\n            <!-- <div class=\"nav_tabs_item\" @click=\"handleChangeType('details')\" :class=\"{active:map.tabs === 'details'}\">详情</div>\n            <div class=\"nav_tabs_item\" @click=\"handleChangeType('directory')\" :class=\"{active:map.tabs === 'directory'}\">目录</div>\n            <div class=\"nav_tabs_item\" @click=\"handleChangeType('comments')\" :class=\"{active:map.tabs === 'comments'}\">评论</div>\n            <div class=\"nav_tabs_item\" @click=\"handleChangeType('notes')\" :class=\"{active:map.tabs === 'notes'}\">笔记</div>\n            <div class=\"nav_tabs_item\" @click=\"handleChangeType('courseware')\" :class=\"{active:map.tabs === 'courseware'}\">课件</div> -->\n          </div>\n        </div>\n        <div v-show=\"map.tabs === 'details'\" class=\"detail_tab_pane\">\n          <div v-if=\"opts.info.courseViewDataList && opts.info.courseViewDataList.length > 0\" class=\"have_detail_list\">\n            <div class=\"have_detail_title\">包含该课程的还有</div>\n            <div class=\"have_scroll_view\">\n              <div v-if=\"opts.scrollX > 0\" class=\"have_scroll_left\" @click=\"lastScroll\">\n                <el-icon>\n                  <arrow-left/>\n                </el-icon>\n              </div>\n              <div ref=\"scroll\" :style=\"opts.style\" class=\"have_scroll_x\" @scroll=\"handleScrollX\">\n                <div v-for=\"(item,idx) in opts.info.courseViewDataList\" :key=\"idx\" class=\"course_have_item\"\n                     @click=\"handleOpenCourse(item)\">\n                  <img :src=\"item.courseCover\" class=\"course_have_img\" @click=\"handleOpenCourse(item)\"/>\n                  <div class=\"course_have_msg\">\n                    <div class=\"course_item_title\">{{ item.courseName }}</div>\n                    <span class=\"course_item_courseware\">{{ item.resourceCount }}个课件</span>\n                  </div>\n                </div>\n              </div>\n              <div v-if=\"getScrollRight()\" class=\"have_scroll_right\" @click=\"nextScroll\">\n                <el-icon>\n                  <arrow-right/>\n                </el-icon>\n              </div>\n            </div>\n          </div>\n          <div class=\"detail_desc_content\" v-html=\"opts.info.courseIntro\"></div>\n        </div>\n        <div v-show=\"map.tabs === 'directory'\" class=\"detail_tab_pane\">\n          <div class=\"single_menu_item\" @click=\"handleBuy\">\n            <div class=\"single_item_name\">\n              <span class=\"video_icon iconfont icon-img\"></span>\n              <div class=\"single_item_title tx-ov\">{{ opts.info.courseName }}</div>\n            </div>\n            <div class=\"single_item_status\">{{ formatDuring(opts.info.duration * 1000) }}</div>\n          </div>\n        </div>\n        <div v-show=\"map.tabs === 'notes'\" v-loading=\"ctrl.note\" class=\"detail_tab_pane note_pane\">\n          <div class=\"all_txt\">全部笔记&nbsp;{{ notePage.totalCount }}</div>\n          <div class=\"note_list\">\n            <div v-for=\"(note,index) in opts.noteList\" :key=\"index\" class=\"note_item\">\n              <div class=\"note_cover\">\n                <el-avatar :size=\"48\" :src=\"note.headImg\" class=\"note_img\"/>\n              </div>\n              <div class=\"note_info\">\n                <div class=\"note_info_header\">\n                  <span class=\"note_info_name tx-ov\">{{ note.userName }}</span>\n                  <span class=\"note_info_time\">{{ note.gmtCreate }}</span>\n                </div>\n                <div :class=\"{'tx-ov-2':!note.showChild,mgb30:!note.pic}\" class=\"note_info_content\">\n                  {{ note.content }}\n                </div>\n                <el-button v-if=\"note.content.length > 153\" type=\"text\" @click=\"note.showChild = !note.showChild\">\n                  {{ note.showChild ? '收起' : '展开' }}\n                </el-button>\n                <div v-if=\"note.pic\" class=\"pic\">\n                  <el-image\n                    v-for=\"(pic, index) in note.pic.split(',')\"\n                    :src=\"pic\"\n                    :preview-teleported=\"true\"\n                    :preview-src-list=\"[pic]\"\n                    fit=\"cover\"\n                    :key=\"index\"\n                  />\n                </div>\n              </div>\n            </div>\n            <div class=\"loading_btn\">\n              <el-button v-if=\"notePage.totalPage > notePage.pageCurrent && !ctrl.note\" type=\"text\" @click=\"handleScroll\">\n                查看更多\n              </el-button>\n              <span v-if=\"ctrl.note\" class=\"loading_text\">加载中...</span>\n              <span v-if=\"notePage.totalPage <= notePage.pageCurrent && !ctrl.note\"\n                    class=\"loading_text\">已经到底部，没有更多内容了</span>\n            </div>\n          </div>\n        </div>\n        <div v-show=\"map.tabs === 'comments'\" v-loading=\"ctrl.comment\" class=\"detail_tab_pane\">\n          <div v-if=\"token && opts.info.buyStatus && map.tabs === 'comments'\" class=\"comment_add_box relative\">\n            <div class=\"relative\">\n              <el-input\n                v-model=\"map.commentText\"\n                type=\"textarea\"\n                :rows=\"2\"\n                maxlength=\"500\"\n                show-word-limit\n                class=\"font14\"\n                placeholder=\"请输入...\"\n              ></el-input>\n              <span class=\"limit_count_box\">{{map.commentText.length}} / 500</span>\n            </div>\n            <div class=\"comment_add_btn\">\n              <emoji-box @select=\"handleSelectEmoji($event, map)\"></emoji-box>\n              <el-button :disabled=\"map.commentText === 0\" class=\"comment_btn\" type=\"primary\"\n                          @click=\"handleSaveComment(map.commentText)\">评论\n              </el-button>\n            </div>\n          </div>\n          <div class=\"all_txt\">全部评论&nbsp;{{ commentPage.totalCount }}</div>\n          <div class=\"course_comment_list\">\n            <div v-for=\"(comment,x) in opts.commentList\" :key=\"x\" class=\"course_comment_item\">\n              <div class=\"course_comment_cover\">\n                <el-avatar :size=\"48\" :src=\"comment.headPortrait\" class=\"comment_cover_img\"></el-avatar>\n              </div>\n              <div class=\"course_comment_content\">\n                <div class=\"course_comment_user\">{{ comment.userName }}</div>\n                <div :class=\"{'tx-ov-2':!comment.showContent}\" class=\"course_comment_int\">{{ comment.commentContent }}\n                </div>\n                <el-button v-if=\"comment.commentContent.length > 137\" type=\"text\"\n                           @click=\"comment.showContent = !comment.showContent\">{{ comment.showContent ? '收起' : '展开' }}\n                </el-button>\n                <div :class=\"{has:comment.replyList}\" class=\"course_comment_btn\">\n                  <div class=\"course_comment_time\">{{ comment.gmtCreate }}</div>\n                  <div class=\"comment_btn_list\">\n  <!--                  <div :class=\"{hover:comment.report}\" class=\"btn_icons\"-->\n  <!--                       @mouseleave=\"handleBlur(comment,'report')\" @mouseover=\"handleFocus(comment,'report')\">-->\n  <!--                    <span class=\"iconfont icon-report\"></span>-->\n  <!--                    <span class=\"btn_text\">举报</span>-->\n  <!--                  </div>-->\n                    <div v-if=\"userInfo&&userInfo.id !== comment.userId\" :class=\"{hover:comment.add}\"\n                         class=\"btn_icons\" @click=\"handleShowComment(comment)\"\n                         @mouseleave=\"handleBlur(comment,'add')\" @mouseover=\"handleFocus(comment,'add')\">\n                      <span class=\"iconfont icon-comment\"></span>\n                      <span class=\"btn_text\">回复</span>\n                    </div>\n  <!--                  <div :class=\"{hover:comment.love,active:comment.like}\" class=\"btn_icons\"-->\n  <!--                       @mouseleave=\"handleBlur(comment,'love')\" @mouseover=\"handleFocus(comment,'love')\">-->\n  <!--                    <span :class=\"{'icon-like':(!comment.love&&!comment.like),'icon-like1':comment.love||comment.like}\"-->\n  <!--                          class=\"iconfont\"></span>-->\n  <!--                    <span class=\"btn_text\">{{ comment.likeNum }}</span>-->\n  <!--                  </div>-->\n                  </div>\n                </div>\n                <div v-if=\"comment.showCommentChild && token\" class=\"comment_add_box relative\">\n                  <div class=\"relative\">\n                    <el-input\n                      v-model=\"comment.commentText\"\n                      type=\"textarea\"\n                      :rows=\"1\"\n                      maxlength=\"500\"\n                      show-word-limit\n                      class=\"font14\"\n                      :placeholder=\"`回复 ${comment.userName}`\"\n                    ></el-input>\n                    <span class=\"limit_count_box\">{{comment.commentText.length}} / 500</span>\n                  </div>\n                  <div class=\"comment_add_btn\">\n                    <emoji-box @select=\"handleSelectEmoji($event, comment)\"></emoji-box>\n                    <el-button :disabled=\"comment.commentText.length === 0\" class=\"comment_btn\"\n                                type=\"primary\" @click=\"handleSaveComment(comment.commentText,comment.id,comment)\">评论\n                    </el-button>\n                  </div>\n                </div>\n                <div v-if=\"comment.replyList\" class=\"course_child_comment\">\n                  <div v-for=\"(child,x) in comment.replyList\" :key=\"x\"\n                       :class=\"{hide:!comment.showAllReply && x > 1}\" class=\"course_comment_item\">\n                    <div class=\"course_comment_cover\">\n                      <el-avatar :size=\"48\" :src=\"child.headPortrait\" class=\"comment_cover_img\"></el-avatar>\n                    </div>\n                    <div class=\"course_comment_content\">\n                      <div class=\"course_comment_user\">{{ child.userName }}</div>\n                      <div :class=\"{'tx-ov-2':!child.showContent}\" class=\"course_comment_int\">回复 <span\n                          class=\"both\">{{ child.replyUserName }}</span> : {{ child.commentContent }}\n                      </div>\n                      <el-button v-if=\"child.commentContent.length > 137\" type=\"text\"\n                                 @click=\"child.showContent = !child.showContent\">{{ child.showContent ? '收起' : '展开' }}\n                      </el-button>\n                      <div class=\"course_comment_btn\">\n                        <div class=\"course_comment_time\">{{ formatDay(child.gmtCreate) }}</div>\n                        <div class=\"comment_btn_list\">\n  <!--                        <div :class=\"{hover:child.report}\" class=\"btn_icons\"-->\n  <!--                             @mouseleave=\"handleBlur(child,'report')\" @mouseover=\"handleFocus(child,'report')\">-->\n  <!--                          <span class=\"iconfont icon-report\"></span>-->\n  <!--                          <span class=\"btn_text\">举报</span>-->\n  <!--                        </div>-->\n                          <div v-if=\"userInfo&&userInfo.id !== child.userId\" :class=\"{hover:child.add}\"\n                               class=\"btn_icons\" @click=\"handleShowComment(child)\"\n                               @mouseleave=\"handleBlur(child,'add')\" @mouseover=\"handleFocus(child,'add')\">\n                            <span class=\"iconfont icon-comment\"></span>\n                            <span class=\"btn_text\">回复</span>\n                          </div>\n  <!--                        <div :class=\"{hover:child.love,active:child.like}\" class=\"btn_icons\"-->\n  <!--                             @mouseleave=\"handleBlur(child,'love')\" @mouseover=\"handleFocus(child,'love')\">-->\n  <!--                          <span :class=\"{'icon-like':(!child.love&&!child.like),'icon-like1':child.love||child.like}\"-->\n  <!--                                class=\"iconfont\"></span>-->\n  <!--                          <span class=\"btn_text\">{{ child.likeNum }}</span>-->\n  <!--                        </div>-->\n                        </div>\n                      </div>\n                      <div v-if=\"child.showCommentChild\" class=\"comment_add_box relative\">\n                        <div class=\"relative\">\n                          <el-input\n                            v-model=\"child.commentText\"\n                            type=\"textarea\"\n                            :rows=\"1\"\n                            maxlength=\"500\"\n                            show-word-limit\n                            class=\"font14\"\n                            :placeholder=\"`回复 ${child.userName}`\"\n                          ></el-input>\n                          <span class=\"limit_count_box\">{{child.commentText.length}} / 500</span>\n                        </div>\n                        <div class=\"comment_add_btn\">\n                          <emoji-box @select=\"handleSelectEmoji($event, child)\"></emoji-box>\n                          <el-button :disabled=\"child.commentText.length === 0\" class=\"comment_btn\"\n                                      type=\"primary\" @click=\"handleSaveComment(child.commentText,child.id,child)\">评论\n                          </el-button>\n                        </div>\n                      </div>\n                    </div>\n                  </div>\n                  <el-button v-if=\"comment.replyList.length > 2\" class=\"mgt20\" type=\"text\"\n                             @click=\"comment.showAllReply = !comment.showAllReply\">\n                    {{ comment.showAllReply ? '收起' : `查看全部${comment.replyList.length}条评论 >` }}\n                  </el-button>\n                </div>\n              </div>\n            </div>\n            <div class=\"loading_btn\">\n              <el-button v-if=\"commentPage.totalPage > commentPage.pageCurrent && !ctrl.comment\" class=\"warning_color\" type=\"text\"\n                         @click=\"handleScroll\">查看更多\n              </el-button>\n              <span v-if=\"ctrl.comment\" class=\"loading_text\">加载中...</span>\n              <span v-if=\"commentPage.totalPage <= commentPage.pageCurrent && !ctrl.comment\" class=\"loading_text\">已经到底部，没有更多内容了</span>\n            </div>\n          </div>\n        </div>\n        <div v-show=\"map.tabs === 'courseware'\" v-loading=\"ctrl.courseware\" class=\"detail_tab_pane\">\n          <div class=\"down_courseware_list\">\n            <div v-for=\"item in opts.coursewareList\" class=\"down_menu_item\">\n              <div class=\"down_item_name\">\n                <span class=\"iconfont icon-download mgr10\" @click=\"handleDown(item)\"></span>\n                <div class=\"down_item_title tx-ov\">{{ item.materialName }}</div>\n              </div>\n              <div class=\"down_item_status\">{{ getSize(item.materialSize) }}</div>\n            </div>\n          </div>\n        </div>\n        <div v-if=\"ctrl.fixed\" class=\"fixed_header\">\n          <div class=\"fixed_content\">\n            <a class=\"nav_logo\" href=\"/\">\n              <img v-if=\"componentInfo.websiteLogo\" :src=\"componentInfo.websiteLogo\" alt=\"\"/>\n            </a>\n            <div class=\"nav_tabs_header\">\n              <template v-for=\"item in tabEnum\">\n                <div\n                v-if=\"item.show\"\n                :key=\"item.command\"\n                :class=\"{active:map.tabs === item.command}\" class=\"nav_tabs_item\" @click=\"handleChangeType(item.command)\">\n                {{ item.label }}\n              </div>\n              </template>\n            </div>\n            <div class=\"course_btn\">\n              <template v-if=\"opts.info.courseStatus\">\n                <el-button v-if=\"opts.info.courseStatus === 1\" class=\"buy_btn\" type=\"primary\" @click=\"handleMake\">预约课程\n                </el-button>\n                <el-button v-if=\"opts.info.courseStatus === 2\" class=\"buy_btn\" type=\"info\">待开课</el-button>\n                <el-button v-if=\"opts.info.courseStatus === 3\" class=\"buy_btn\" type=\"primary\" @click=\"handleOpenOther\">\n                  查看其它课程\n                </el-button>\n              </template>\n              <el-button v-if=\"!opts.info.courseStatus && opts.info.buyStatus\" class=\"buy_btn\" type=\"primary\" @click=\"handleBuy\">\n                  {{ !opts.info.enableFirst ? '继续学习' : '开始学习' }}\n                </el-button>\n                <el-button v-if=\"!opts.info.courseStatus && !opts.info.buyStatus && opts.info.supportAloneSales\" class=\"buy_btn\" type=\"primary\" @click=\"handleBuy\">\n                  {{ opts.info.price ? '购买' : '开始学习' }}\n                </el-button>\n                <el-button disabled v-if=\"!opts.info.courseStatus && !opts.info.buyStatus && !opts.info.supportAloneSales\" class=\"buy_btn\" type=\"primary\" >\n                  不支持单独售卖\n                </el-button>\n            </div>\n          </div>\n        </div>\n      </div>\n      <client-only>\n        <course-share v-model=\"ctrl.share\" :info=\"opts.info\"></course-share>\n        <before-exam\n            v-if=\"ctrl.showBeforeExam\"\n            :dialogVisible=\"ctrl.showBeforeExam\"\n            :exam-name=\"opts.info.examName\"\n            :paper-id=\"opts.info.paperId\"\n            :resource-id=\"opts.info.id\"\n            :resource-type=\"2\"\n            @close=\"closeDialog\"\n        ></before-exam>\n        <before-exercise :practice-num=\"opts.info.practiceNum\" :exam-name=\"opts.info.practiceName\" v-if=\"ctrl.showBeforeExercise\" :support-alone-sales=\"opts.info.supportAloneSales\" v-model=\"ctrl.showBeforeExercise\" @close=\"handleCloseExercise\" @callback=\"handleOpenExercise\"></before-exercise>\n\n      </client-only>\n    </div>\n  </NuxtLayout>\n</template>\n\n<script setup>\nimport EmojiBox from '@/components/comment/emojiBox.vue'\nimport {ArrowLeft, ArrowRight} from '@element-plus/icons-vue'\nimport {useUserStore} from \"../../stores/user\";\nimport {courseApiListCourseware, courseAuthAppointment, courseAuthNotesListData, courseCommentPage, courseCommentReplySave, courseCommentSave, courseListCourseware, courseNotesListData, coursewareDownloadApi, coursewareDownloadAuth, getAuthCourseView, getCourseView} from \"../../api/course\";\nimport cookie from '@/utils/cookies'\nimport {forbidCopy, formatDay, formatDuring, getSize} from '../../utils'\nimport {getHearder} from \"@/api/layouts\";\nimport {collectionUserDelete, collectionUserSave} from \"../../api/system\";\nimport {ElMessage} from \"element-plus\";\nimport {ElMessageBox} from \"element-plus\";\nimport {paperCheckStatus, paperRecordCheck} from \"../../api/paper\";\nimport {setStore} from \"../../utils/storage\";\nimport BeforeExercise from \"@/components/exam/beforeExercise.vue\";\nimport BeforeExam from '@/components/exam/beforeExam.vue'\nconst route = useRoute()\n// console.log(route,'rotuer')\nconst {data: componentInfo} = await useAsyncData(\"header\", async (ctx) => {\n  return await getHearder();\n});\nlet cookieData = cookie.getShop()\n// console.log(route,'route')\n\n// console.log(courseInfo.value,'courseInfo')\n\nconst store = useUserStore()\nconst {getEnumList, getToken, userView, shopData} = store\nconst router = useRouter()\nconst head = ref(null)\nconst userInfo = computed(()=>store.userView)\nconst token = computed(() => {\n  return getToken()\n})\n\nconst map = reactive({\n  id: '',\n  tabs: 'details',\n  superiorResourceId: [],\n  commentText: '',\n  relevanceType: 1, //1:课程关联、2:专题关联\n  isExamination: false, //用户是否处于考试\n  recordId: '' // 考试记录id\n})\nconst opts = reactive({\n  errorNum: 0,\n  info: {},\n  style: {\n    width: '1100px'\n  },\n  infoTimer: null,\n  scrollX: 0,\n  PeriodTypeEnum: {},\n  commentList: [],\n  noteList: [],\n  coursewareList: []\n})\nconst notePage = reactive({\n  pageCurrent: 1,\n  pageSize: 10,\n  totalPage: 1,\n  totalCount: 0\n})\nconst commentPage = reactive({\n  pageCurrent: 1,\n  pageSize: 10,\n  totalPage: 1,\n  totalCount: 0\n})\nconst ctrl = reactive({\n  loading: false,\n  showDesc: false,\n  comment: false,\n  note: false,\n  courseware: false,\n  fixed: false,\n  share: false,\n  showBeforeExam: false,\n  showBeforeExercise:false\n})\nconst scroll = ref(null)\nconst handleChangeExam = (val) => { // 改变菜单\n  if(!opts.info.buyStatus && opts.info.price > 0){\n    ElMessage.error('你尚未购买本课程')\n    return false\n  }\n  if (val === 'practice') {\n    if (!handleBeforeValid()) {\n      return false\n    }\n    ctrl.showBeforeExercise = true\n  } else if (val === 'exam') {\n    if (!token.value) {\n      router.push({\n        path: '/login',\n        query: {\n          redirect: encodeURIComponent(route.fullPath)\n        }\n      })\n      return false\n    }\n    if (!handleBeforeValid()) {\n      return false\n    }\n    paperCheckStatus(opts.info.paperId)\n        .then((res) => {\n          if (res === 1) {\n            ctrl.showBeforeExam = true;\n          } else {\n            ElMessage.error(\"该试卷已下架\");\n          }\n        })\n        .catch((e) => {\n        });\n  }\n}\nconst closeDialog = (flag = false) => {\n  ctrl.showBeforeExam = false;\n  if (flag) {\n    if (!handleBeforeValid()) {\n      return false\n    }\n    paperRecordCheck().then((res) => {\n      if (!res.isExamination) {\n        map.isExamination = false;\n        // ctrl.showStartExam = true;\n        setStore('examInfo',opts.info)\n        router.push({\n          path: '/exam/startExam',\n          query: {\n            controlShow: true,\n            examType: 2,\n            isExamination: map.isExamination,\n            recordId: map.recordId,\n            relevanceType: map.relevanceType\n          }\n        })\n      } else {\n        ElMessageBox.confirm(\"请继续未完成的考试\", \"提示\", {\n          cancelButtonText: \"取消\",\n          confirmButtonText: \"确定\",\n          type: \"warning\",\n        })\n            .then(() => {\n              map.isExamination = true;\n              map.recordId = res.recordId;\n              // ctrl.showStartExam = true;\n              setStore('examInfo',opts.info)\n              router.push({\n                path: '/exam/startExam',\n                query: {\n                  controlShow: true,\n                  examType: 2,\n                  isExamination: map.isExamination,\n                  recordId: map.recordId,\n                  relevanceType: map.relevanceType\n                }\n              })\n            })\n            .catch(() => {\n            });\n      }\n    });\n  }\n}\nconst handleCloseExercise = () => {\n  ctrl.showBeforeExercise = false\n}\nconst handleOpenExercise = () => {\n  ctrl.showBeforeExercise = false\n  // ctrl.showStartPractice = true\n  setStore('practiceInfo',opts.info)\n  router.push({\n    path: '/practice/startPractice',\n    query: {\n      controlShow: true,\n      examType: 2,\n      courseId: opts.info.id,\n      courseTypeName: 'graphic'\n    }\n  })\n}\nconst handleOpenTeacher = (teacher) => { // 教师详情\n  router.push({\n    path: '/teacher/view',\n    query: {\n      id: teacher.id\n    }\n  })\n}\nconst getScrollRight = () => { // 获取右侧按钮是否显示\n  if (!opts.info.courseViewDataList) {\n    return false\n  } else {\n    if (scroll.value) {\n      let scrollLength = scroll.value.scrollWidth - scroll.value.offsetWidth\n      return scrollLength !== scroll.value.scrollLeft && opts.info.courseViewDataList.length > 3;\n    } else {\n      return false\n    }\n  }\n}\nconst handleShowComment = (comment) => { // 显示评论框\n  comment.showCommentChild = !comment.showCommentChild\n  if (comment.showCommentChild) {\n    comment.commentText = ''\n  }\n}\nconst handleDown = (row) => { // 下载\n  if (!handleBeforeValid()) {\n    return false\n  }\n  if(!opts.info.enableNotLoginWatch && !token.value) {\n    router.push({\n      path: '/login',\n      query: {\n        redirect: encodeURIComponent(route.fullPath)\n      }\n    })\n    return false\n  }\n  getDwnUrl(row)\n}\nconst getDwnUrl = async (row) => {\n  let url = \"\"\n  if (token.value) {\n    url = await coursewareDownloadAuth({id: route.query.id, materialId: row.materialId})\n  } else {\n    url = await coursewareDownloadApi({id: route.query.id, materialId: row.materialId})\n  }\n  const link = document.createElement('a');\n  link.href = url;\n  link.download = row.materialName;\n  link.click();\n}\nconst handleBeforeValid = () => {\n  // 课程是否已过期\n  if (opts.info.courseStatus === 3) {\n    ElMessage.error('课程已过期')\n    return false\n  } else {\n    return true\n  }\n}\nconst handleMake = () => { // 预约\n  if (!token.value) {\n    router.push({\n      path: '/login',\n      query: {\n        redirect: encodeURIComponent(route.fullPath)\n      }\n    })\n    return\n  }\n  courseAuthAppointment({id: opts.info.id}).then(res => {\n    if (res) {\n      ElMessageBox.alert('课程开课时，我们将以短信的形式通知您，请您留意哟~', '预约成功提醒', {\n        confirmButtonText: '知道了',\n        type: 'success',\n        center: true,\n      }).then(() => {\n      })\n      getInfo()\n    }\n  })\n}\nconst handleBuy = () => { // 购买\n  if (!handleBeforeValid()) {\n    return false\n  }\n  if (opts.info.courseStatus === 1) {\n    handleMake()\n    return\n  }\n  if (opts.info.courseStatus === 2) {\n    return\n  }\n  if (opts.info.courseStatus === 3) {\n    handleOpenOther()\n    return\n  }\n  if (opts.info.price > 0 && !opts.info.buyStatus) {\n    if (!shopData.config.enabledPay) {\n      ElMessage.error(shopData.config.disablePayTips)\n      return\n    }\n    if (!shopData.config.enabledAliPay && !shopData.config.enabledWxPay) {\n      ElMessage.error(shopData.config.disablePayTips)\n      return\n    }\n  }\n  if (opts.info.price > 0 && !opts.info.buyStatus) {\n    if (!opts.info.publishStatus) {\n      ElMessage.error('课程暂未发布')\n      return false\n    }\n    if (token.value) {\n      router.push({\n        path: '/pay/buy',\n        query: {\n          id: map.id\n        }\n      })\n    } else {\n      router.push({\n        path: '/login',\n        query: {\n          redirect: encodeURIComponent(route.fullPath)\n        }\n      })\n    }\n  } else {\n    if (!opts.info.enableNotLoginWatch && !opts.info.buyStatus && opts.info.price === 0 && !token.value) {\n      ElMessage.error('请登录后再进行观看')\n      router.push({\n        path: '/login',\n        query: {\n          redirect: encodeURIComponent(route.fullPath)\n        }\n      })\n      return\n    }\n    let query = route.query || {}\n    router.push({\n      path: '/course/single',\n      query: Object.assign(query, {id: map.id})\n    })\n  }\n}\nconst handleFocus = (row, key) => { // 悬浮\n  row[key] = !row[key]\n}\nconst handleBlur = (row, key) => { // 离开悬浮\n  row[key] = false\n}\n// 向右滚动\nconst nextScroll = () => {\n  scroll.value.scrollLeft += (327 * 3)\n  opts.scrollX = scroll.value.scrollLeft\n}\n// 向左滚动\nconst lastScroll = () => {\n  scroll.value.scrollLeft -= (327 * 3)\n  if (scroll.value.scrollLeft < 0) {\n    scroll.value.scrollLeft = 0\n  }\n  opts.scrollX = scroll.value.scrollLeft\n}\n// 滚动轴事件\nconst handleScrollX = () => {\n  if (scroll.value.scrollLeft < 0) {\n    scroll.value.scrollLeft = 0\n  }\n  opts.scrollX = scroll.value.scrollLeft\n}\nconst handleUpdate = () => {\n  getInfo()\n}\nconst handleOpenOther = () => {\n  router.push({\n    path: '/course/list'\n  })\n}\n// 获取详情\nconst getInfo = () => {\n  ctrl.loading = true\n  if (token.value) {\n    getAuthCourseView({id: map.id}).then(res => {\n      ctrl.loading = false\n      opts.info = res\n      if (opts.info.buyStatus) {\n        tabEnum.value = [{label: '课程介绍', command: 'details',show:true}, {label: '课件下载', command: 'courseware',show: opts.info && opts.info.coursewareExist}, {label: '学习笔记', command: 'notes',show:opts.info && opts.info.enableCourseNote}, {label: '课程评论', command: 'comments',show:opts.info && opts.info.enableCourseComment}]\n      }\n      // route.meta.title = opts.info.courseName\n      opts.info.courseIntro = opts.info.courseIntro.replace(/<a style=\"position: relative; width: 144px; height: 80px; margin:  10px; display: inline-block;/, '<a style=\"position: relative; width: 144px; height: auto; margin:  10px; display: inline-block;').replace(/<img/g, '<img style=\"width:100%\"')\n      if (opts.infoTimer) {\n        clearInterval(opts.infoTimer)\n        opts.infoTimer = null\n      }\n      nextTick(() => {\n        if (opts.info && opts.info.enableForbidContentCopy) {\n          forbidCopy('.detail_desc_content')\n        }\n      })\n    }).catch(() => {\n      ctrl.loading = false\n      opts.errorNum++\n      if (!opts.infoTimer) {\n        opts.infoTimer = setInterval(getInfo, 3000)\n      }\n      if (opts.errorNum > 5) {\n        if (opts.infoTimer) {\n          clearInterval(opts.infoTimer)\n          opts.infoTimer = null\n        }\n      }\n    })\n  } else {\n    getCourseView(map).then(res => {\n      ctrl.loading = false\n      opts.info = res\n      // route.meta.title = opts.info.courseName\n      opts.info.courseIntro = opts.info.courseIntro.replace(/<a style=\"position: relative; width: 144px; height: 80px; margin:  10px; display: inline-block;/, '<a style=\"position: relative; width: 144px; height: auto; margin:  10px; display: inline-block;').replace(/<img/g, '<img style=\"width:100%\"')\n      if (opts.infoTimer) {\n        clearInterval(opts.infoTimer)\n        opts.infoTimer = null\n      }\n      nextTick(() => {\n        if (opts.info && opts.info.enableForbidContentCopy) {\n          forbidCopy('.detail_desc_content')\n        }\n      })\n    }).catch(() => {\n      ctrl.loading = false\n    })\n  }\n}\nconst handleScroll = () => {\n  // 滚动到底翻页\n  if (map.tabs === \"notes\") {\n    if (notePage.totalPage > notePage.pageCurrent) {\n      notePage.pageCurrent++;\n      getNotes();\n    }\n  } else if (map.tabs === \"comments\") {\n    if (commentPage.totalPage > commentPage.pageCurrent) {\n      commentPage.pageCurrent++;\n      getComment();\n    }\n  }\n}\n// 显示描述\nconst handleChangeDesc = () => {\n  ctrl.showDesc = !ctrl.showDesc\n}\n// tabs切换\nconst handleChangeType = (item) => {\n  map.tabs = item\n  if (map.tabs === 'notes' && opts.noteList.length === 0) {\n    notePage.pageCurrent = 1\n    getNotes()\n  } else if (map.tabs === 'comments' && opts.commentList.length === 0) {\n    commentPage.pageCurrent = 1\n    getComment()\n  } else if (map.tabs === 'courseware' && opts.coursewareList.length === 0) {\n    getCourseware()\n  }\n}\nconst getCourseware = () => { // 课件\n  if (token.value) {\n    ctrl.courseware = true\n    courseListCourseware({id: map.id, coursewareType: true}).then(res => {\n      ctrl.courseware = false\n      opts.coursewareList = res || []\n    }).catch(() => {\n      ctrl.courseware = false\n    })\n  } else {\n    courseApiListCourseware({id: map.id, coursewareType: true}).then(res => {\n      ctrl.courseware = false\n      opts.coursewareList = res || []\n    }).catch(() => {\n      ctrl.courseware = false\n    })\n  }\n}\n// 评论列表\nconst getComment = () => {\n  ctrl.comment = true\n  courseCommentPage({courseId: map.id, goodsType: 1}, commentPage.pageCurrent, commentPage.pageSize).then(res => {\n    ctrl.comment = false\n    if (res.list) {\n      res.list.forEach(el => {\n        el.commentShow = false\n        el.showChild = false\n        if (el.replyList) {\n          el.replyList.forEach(e => {\n            e.commentShow = false\n          })\n        }\n      })\n    }\n    if (commentPage.pageCurrent === 1) {\n      opts.commentList = res.list || []\n    } else {\n      res.list = res.list || []\n      res.list.forEach(el => {\n        opts.commentList.push(el)\n      })\n    }\n    commentPage.pageCurrent = res.pageCurrent\n    commentPage.totalPage = res.totalPage\n    commentPage.totalCount = res.totalCount\n  })\n}\n// 笔记列表\nconst getNotes = () => {\n  ctrl.note = true\n  if (token.value) {\n    courseAuthNotesListData({\n      courseId: map.id,\n      oneStatus: map.oneStatus\n    }, notePage.pageCurrent, notePage.pageSize).then(res => {\n      ctrl.note = false\n      if (notePage.pageCurrent === 1) {\n        opts.noteList = res.list || []\n      } else {\n        res.list = res.list || []\n        res.list.forEach(el => {\n          opts.noteList.push(el)\n        })\n      }\n      notePage.pageCurrent = res.pageCurrent\n      notePage.totalPage = res.totalPage\n      notePage.totalCount = res.totalCount\n    }).catch(() => {\n      ctrl.note = false\n    })\n  } else {\n    courseNotesListData({courseId: map.id}, notePage.pageCurrent, notePage.pageSize).then(res => {\n      ctrl.note = false\n      if (notePage.pageCurrent === 1) {\n        opts.noteList = res.list || []\n      } else {\n        res.list = res.list || []\n        res.list.forEach(el => {\n          opts.noteList.push(el)\n        })\n      }\n      notePage.pageCurrent = res.pageCurrent\n      notePage.totalPage = res.totalPage\n      notePage.totalCount = res.totalCount\n    }).catch(() => {\n      ctrl.note = false\n    })\n  }\n}\nconst handleSelectEmoji = (emoji, obj) => {\n  if (!obj.commentText) {\n    obj.commentText = emoji + ''\n  } else {\n    if (obj.commentText.length + 2 <= 500) {\n      obj.commentText += emoji\n    }\n  }\n}\nconst handleSaveComment = (content, id, row) => { // 保存评论\n  if(content.length > 500) {\n    ElMessage.error('字数已超出限制！')\n    return\n  }\n  if (row) {\n    courseCommentReplySave({\n      commentContent: content,\n      goodsType: 1,\n      parentId: id\n    }).then(res => {\n      row.commentText = ''\n      ElMessage.success(res)\n      getComment()\n    })\n  } else {\n    courseCommentSave({\n      commentContent: content,\n      courseId: opts.info.id,\n      goodsType: 1\n    }).then(res => {\n      map.commentText = ''\n      ElMessage.success(res)\n      getComment()\n    })\n  }\n}\nconst handleScrollBody = () => {\n  const app = document.querySelector('#app')\n  let top = Math.floor(app.scrollTop || window.pageYOffset)\n  if (top >= head.value.clientHeight - 10) {\n    ctrl.fixed = true\n  } else {\n    ctrl.fixed = false\n  }\n}\nconst handleOpenCourse = (row) => { // 跳转专题课\n  router.push({\n    path: '/course/subject',\n    query: {\n      id: row.id\n    }\n  })\n}\nconst handleShare = () => {\n  // 分享\n  ctrl.share = true\n}\nconst handleCollection = () => { // 收藏\n  if (ctrl.isClick) {\n    return false\n  }\n  ctrl.isClick = true\n  if (!token.value) {\n    const route = useRoute()\n    router.push({\n      path: '/login',\n      query: {\n        redirect: encodeURIComponent(route.fullPath)\n      }\n    })\n    return\n  }\n  if (opts.info.collectStatus) {\n    collectionUserDelete({collectionType: 1, resourceId: opts.info.id}).then(res => {\n      ElMessage.success(res)\n      ctrl.isClick = false\n      getInfo()\n    }).catch(() => {\n      ctrl.isClick = false\n    })\n  } else {\n    collectionUserSave({collectionType: 1, resourceId: opts.info.id}).then(res => {\n      ElMessage.success(res)\n      ctrl.isClick = false\n      getInfo()\n    }).catch(() => {\n      ctrl.isClick = false\n    })\n  }\n\n}\nconst { data, pending, error } = await useAsyncData('courseVideoView'+route.query.id, () => {\n  return new Promise(async (resolve) => {\n    if (route.query.id) {\n      map.id = route.query.id\n    }\n    if (route.query.superiorResourceId) {\n      map.superiorResourceId = route.query.superiorResourceId\n    }\n    let courseFn = getAuthCourseView\n    if (!token.value) {\n      courseFn = getCourseView\n    }\n    Promise.allSettled([courseFn(map),getEnumList(\"CourseTypeEnum\", \"obj\")]).then(([course, CourseTypeEnum])=>{\n      let data = {};\n      if(course.status === 'fulfilled') {\n        data.course = course.value\n      } else {\n        data.course = {}\n      }\n      if(CourseTypeEnum.status === 'fulfilled') {\n        data.CourseTypeEnum = CourseTypeEnum.value\n      } else {\n        data.CourseTypeEnum = []\n      }\n      resolve(data)\n    })\n  })\n},{initialCache:false})\nif (!pending.value && data.value) {\n  const d = data.value\n  opts.PeriodTypeEnum = d.CourseTypeEnum\n  opts.info = d.course\n  opts.info.courseIntro = opts.info.courseIntro.replace(/<a style=\"position: relative; width: 144px; height: 80px; margin:  10px; display: inline-block;/, '<a style=\"position: relative; width: 144px; height: auto; margin:  10px; display: inline-block;').replace(/<img/g, '<img style=\"width:100%\"')\n  useHead({\n    title: computed(() => `${opts.info.courseName ? opts.info.courseName + '-' + cookieData.shopName : '图文课详情'}`),\n    meta: [{\n      hid: 'keywords',\n      name: 'keywords',\n      content: opts.info.courseName\n    },\n      {\n        hid: 'description',\n        name: 'description',\n        content: opts.info.courseDesc ? opts.info.courseDesc : opts.info.courseName\n      }]\n  })\n}\nonMounted(() => {\n  // else {\n  window.addEventListener('scroll', handleScrollBody, true)\n  // }\n  if (opts.info && opts.info.enableForbidContentCopy) {\n    forbidCopy('.detail_desc_content')\n  }\n\n      console.log('opts.info', opts.info)\n})\nonUnmounted(() => {\n  // if(!token.value) {\n  window.removeEventListener('scroll', handleScrollBody, true)\n  // }\n  if (opts.infoTimer) {\n    clearInterval(opts.infoTimer)\n    opts.infoTimer = null\n  }\n})\nconst tabEnum = ref([{label: '课程介绍', command: 'details',show:true}, {label: '课件下载', command: 'courseware',show: opts.info && opts.info.coursewareExist}, {label: '学习笔记', command: 'notes',show:opts.info && opts.info.enableCourseNote}, {label: '课程评论', command: 'comments',show:opts.info && opts.info.enableCourseComment}])\n\n</script>\n\n<style lang=\"scss\" scoped>\n.have_scroll_x {\n  overflow-x: auto;\n  display: inline-flex;\n\n  &::-webkit-scrollbar {\n    display: none\n  }\n\n  &:hover::-webkit-scrollbar {\n    display: block\n  }\n}\n\n.course_info_content {\n  padding: 20px calc((100vw - 1200px) / 2);\n  background-color: #FFFFFF;\n  border-top: 1px solid #EBEEF5;\n}\n\n.nav_tabs_header {\n  background-color: #FFFFFF;\n  display: flex;\n  flex: 1;\n  padding-left: 60px;\n\n  .nav_tabs_item {\n    display: flex;\n    align-items: center;\n    margin-right: 50px;\n    font-size: 16px;\n    line-height: 65px;\n    white-space: nowrap;\n  }\n\n  .nav_tabs_item:hover {\n    cursor: pointer;\n    position: relative;\n    color: var(--el-color-primary);\n  }\n\n  .nav_tabs_item:hover::after {\n    content: \"\";\n    position: absolute;\n    left: 0;\n    bottom: 0;\n    width: 64px;\n    height: 3px;\n    border-radius: 1.5px;\n    background-color: var(--el-color-primary);\n  }\n\n  .active {\n    position: relative;\n    color: var(--el-color-primary);\n  }\n\n  .active::after {\n    content: \"\";\n    position: absolute;\n    left: 0;\n    bottom: 0;\n    width: 64px;\n    height: 3px;\n    border-radius: 1.5px;\n    background-color: var(--el-color-primary);\n  }\n}\n\n.nav_tabs {\n  padding: 20px calc((100vw - 1200px) / 2) 0;\n  background-color: #FFFFFF;\n  display: flex;\n  justify-content: center;\n  align-items: center;\n\n  .nav_tabs_item {\n    margin-right: 60px;\n    font-style: normal;\n    font-weight: normal;\n    font-size: 16px;\n    padding-bottom: 20px;\n    color: #333333;\n    position: relative;\n    cursor: pointer;\n  }\n\n  .nav_tabs_item.active, .nav_tabs_item:hover {\n    color: #2256F6;\n\n    &:before {\n      content: '';\n      position: absolute;\n      bottom: 0;\n      background: #2256F6;\n      width: 64px;\n      padding-top: 3px;\n      left: 0;\n      border-radius: 10px;\n    }\n  }\n\n  .nav_tabs_item:last-child {\n    margin-right: 0;\n  }\n}\n\n.course_nav {\n  margin-bottom: 20px;\n}\n\n.nav_course_title {\n  color: #BECADB;\n  font-weight: 400;\n  max-width: 115px;\n}\n\n.course_name_tag {\n  padding: 5px 3px;\n  border-radius: 5px 0;\n  background: rgba(61, 127, 255, 0.1);\n  display: inline-block;\n  font-style: normal;\n  width: 46px;\n  position: relative;\n  top: -2px;\n  text-align: center;\n  font-weight: normal;\n  font-size: 10px;\n  color: #3D7FFF;\n  margin-right: 4px;\n}\n\n.course_cover_img {\n  width: 576px;\n  height: 320px;\n  object-fit: cover;\n  border-radius: 5px;\n}\n\n.course_name {\n  font-style: normal;\n  font-weight: 400;\n  font-size: 20px;\n  color: #333333;\n}\n\n.course_price_content {\n  width: 100%;\n}\n\n.course_msg_content {\n  width: 589px;\n  margin-left: 30px;\n  position: relative;\n}\n\n.course_message {\n  display: flex;\n  position: relative;\n}\n\n.course_int {\n  margin-top: 5px;\n  display: flex;\n\n  .course_in_icon {\n    min-width: 28px;\n    margin-left: 8px;\n    color: #666666;\n    cursor: pointer;\n  }\n\n  .course_int_text {\n    font-style: normal;\n    font-weight: normal;\n    font-size: 14px;\n    color: #999999;\n    width: 570px;\n  }\n  .loadmore {\n    font-size: 14px;\n    color: #666;\n  }\n}\n\n.course_cell {\n  overflow: hidden;\n  width: 100%;\n  display: flex;\n  align-items: center;\n\n  & + .course_cell {\n    margin-top: 12px;\n  }\n\n  .course_cell_item {\n    white-space: nowrap;\n    font-style: normal;\n    font-weight: normal;\n    font-size: 14px;\n    color: #333333;\n    display: flex;\n    align-items: center;\n    &.cu{\n      cursor: pointer;\n      &:hover{\n        color: #2256F6;\n      }\n    }\n  }\n\n  .course_cell_item + .course_cell_item {\n    padding-left: 24px;\n    position: relative;\n  }\n}\n\n.mgl3 {\n  margin-left: 3px;\n}\n\n.price_old {\n  color: #999999;\n  font-style: normal;\n  font-weight: normal;\n  font-size: 12px;\n  text-decoration-line: line-through;\n  margin-left: 5px;\n}\n\n.price_now {\n  font-style: normal;\n  font-weight: bold;\n  font-size: 26px;\n  color: #F01414;\n}\n\n.price_now .price_icon {\n  font-style: normal;\n  font-weight: normal;\n  font-size: 18px;\n  color: #F61818;\n}\n\n.course_btn_info {\n  display: flex;\n  justify-content: space-between;\n  align-items: center;\n  margin-top: 5px;\n}\n\n.buy_btn {\n  width: 154px;\n  height: 40px;\n  font-size: 16px;\n}\n\n.course_learn_msg {\n  display: flex;\n  align-items: center;\n}\n\n.learn_item {\n  position: relative;\n  font-style: normal;\n  font-weight: normal;\n  font-size: 14px;\n  color: #999999;\n\n  & + .learn_item {\n    padding-left: 20px;\n  }\n}\n\n.icon_text_name {\n  margin-left: 3px;\n}\n\n.icon_btn {\n  cursor: pointer;\n\n  .iconfont {\n    //margin-right: 5px;\n  }\n}\n\n.detail_tab_pane {\n  padding: 30px;\n  background-color: #FFFFFF;\n  border-radius: 5px;\n  width: 1200px;\n  margin: 10px auto auto;\n}\n\n.have_detail_list {\n  margin-bottom: 30px;\n}\n\n.have_detail_title {\n  font-style: normal;\n  font-weight: 550;\n  font-size: 16px;\n  color: #333333;\n  margin-bottom: 10px;\n}\n\n.have_scroll_view {\n  display: flex;\n  align-items: center;\n}\n\n.have_scroll_left {\n  margin-right: 10px;\n}\n\n.have_scroll_right {\n  margin-left: 10px;\n}\n\n.have_scroll_left, .have_scroll_right {\n  background: #F6F8FB;\n  border-radius: 5px;\n  padding: 27px 7px;\n  cursor: pointer;\n}\n\n.course_have_item {\n  cursor: pointer;\n  display: flex;\n  flex-direction: row;\n  align-items: center;\n  padding: 10px;\n  width: 317px;\n  max-width: 317px;\n  min-width: 317px;\n  border-radius: 10px;\n  background-color: #F6F8FB;\n  position: relative;\n\n  .course_have_img {\n    width: 90px;\n    height: 50px;\n    border-radius: 10px;\n    object-fit: cover;\n  }\n\n  & + .course_have_item {\n    margin-left: 10px;\n  }\n\n  .course_have_msg {\n    margin-left: 10px;\n    width: calc(100% - 20px - 90px - 10px);\n  }\n\n  .course_item_courseware {\n    font-style: normal;\n    font-weight: 400;\n    font-size: 12px;\n    color: #999999;\n  }\n\n  .course_item_title {\n    width: 100%;\n    font-style: normal;\n    font-weight: normal;\n    font-size: 14px;\n    color: #333333;\n    text-overflow: ellipsis;\n    overflow: hidden;\n    white-space: nowrap;\n  }\n\n  &:before {\n    content: '>';\n    position: absolute;\n    right: 13.5px;\n    color: #BECADB;\n\n  }\n}\n\n.slide-forward-leave-active {\n  transition: all 1s;\n  transform: translate(-100%);\n}\n\n// router2\n.v-enter {\n  transform: translateX(100%);\n}\n\n.v-enter-active {\n  transition: all 3s;\n}\n\n.single_item_title {\n  max-width: 550px;\n}\n\n.single_item_name .video_icon {\n  font-size: 24px;\n}\n\n.single_item_name {\n  display: flex;\n  align-items: center;\n}\n\n.down_menu_item {\n  display: flex;\n  padding: 20px;\n  justify-content: space-between;\n  align-items: center;\n  font-style: normal;\n  font-weight: normal;\n  font-size: 14px;\n  color: #999999;\n  border-bottom: 1px solid #EBEEF5;\n\n  .down_item_name {\n    display: flex;\n    align-items: center;\n  }\n\n  .iconfont {\n    color: #333333;\n    font-size: 24px;\n  }\n}\n\n.single_menu_item {\n  display: flex;\n  padding: 20px;\n  justify-content: space-between;\n  align-items: center;\n  font-style: normal;\n  font-weight: normal;\n  font-size: 14px;\n  color: #999999;\n  border-bottom: 1px solid #EBEEF5;\n\n  &:hover {\n    background: rgba(34, 86, 246, 0.05);\n  }\n}\n\n.all_txt {\n  font-style: normal;\n  font-weight: normal;\n  font-size: 16px;\n  color: #333333;\n  margin-bottom: 20px;\n}\n\n.note_pane {\n  padding-top: 20px;\n}\n\n.note_item {\n  display: flex;\n  padding-bottom: 20px;\n  border-bottom: 1px solid #EBEEF5;\n\n  & + .note_item {\n    padding-top: 20px;\n  }\n}\n\n.note_cover {\n  margin-right: 20px;\n}\n\n.note_info {\n  width: calc(100% - 68px);\n}\n.pic {\n  margin: 10px 0;\n  display: flex;\n  flex-wrap: wrap;\n  .el-image {\n    width: 144px;\n    height: 80px;\n    margin-right: 10px;\n    margin-bottom: 10px;\n  }\n}\n\n.flex_note_img {\n  display: flex;\n  flex-wrap: wrap;\n  width: 100%;\n}\n\n.note_bg_img {\n  width: 144px;\n  margin-bottom: 10px;\n}\n\n.note_info_header {\n  display: flex;\n  justify-content: space-between;\n  align-items: center;\n\n  .note_info_name {\n    font-style: normal;\n    font-weight: 550;\n    font-size: 16px;\n  }\n\n  .note_info_time {\n    font-style: normal;\n    font-weight: normal;\n    font-size: 14px;\n    color: #999999;\n  }\n}\n\n.loading_btn {\n  text-align: center;\n  padding-top: 11px;\n  padding-bottom: 11px;\n  margin-top: 20px;\n\n  .loading_text {\n    font-style: normal;\n    font-weight: normal;\n    font-size: 12px;\n    color: #999999;\n  }\n}\n\n.comment_add_box {\n  margin-bottom: 30px;\n  :deep(.el-textarea__inner){\n    padding: 10px 11px;\n  }\n}\n\n.comment_add_btn {\n  margin-top: 15px;\n  display: flex;\n  justify-content: space-between;\n  align-items: center;\n\n  .iconfont {\n    font-size: 24px;\n    color: #BECADB;\n  }\n\n  .comment_btn {\n    width: 100px;\n    height: 40px;\n    font-size: 14px;\n  }\n}\n\n.limit_count_box {\n  background: var(--el-fill-color-blank);\n  bottom: 5px;\n  color: var(--el-color-info);\n  font-size: 12px;\n  line-height: 14px;\n  position: absolute;\n  right: 10px;\n}\n\n.course_comment_item {\n  display: flex;\n  padding-bottom: 20px;\n  border-bottom: 1px solid #EBEEF5;\n\n  &.hide {\n    display: none;\n  }\n\n  & + .course_comment_item {\n    padding-top: 20px;\n  }\n\n  .course_comment_cover {\n    margin-right: 20px;\n  }\n\n  .course_comment_content {\n    width: calc(100% - 68px);\n  }\n\n  .course_comment_btn {\n    display: flex;\n    align-items: center;\n    justify-content: space-between;\n\n  }\n\n  .course_comment_btn.has {\n    padding-bottom: 20px;\n  }\n\n  .course_child_comment .course_comment_btn {\n    padding-bottom: 0;\n  }\n\n  .course_comment_time {\n    font-style: normal;\n    font-weight: normal;\n    font-size: 14px;\n    color: #999999;\n  }\n\n  .comment_btn_list {\n    display: flex;\n    align-items: center;\n    margin-top: 10px;\n  }\n\n  .btn_icons {\n    font-style: normal;\n    font-weight: normal;\n    font-size: 12px;\n    color: #999999;\n    display: flex;\n    align-items: center;\n    cursor: pointer;\n  }\n\n  .btn_icons.active, .btn_icons.hover {\n    color: #FF9D00;\n  }\n\n  .btn_icons:hover {\n    color: #FF9D00;\n  }\n\n  .btn_icons + .btn_icons {\n    margin-left: 15px;\n  }\n\n  .btn_icons .iconfont {\n    font-size: 16px;\n    margin-right: 3px;\n  }\n\n  .course_comment_user {\n    font-style: normal;\n    font-weight: 550;\n    font-size: 16px;\n  }\n\n  .course_comment_int {\n    font-style: normal;\n    font-weight: normal;\n    font-size: 14px;\n    margin-top: 10px;\n    margin-bottom: 10px;\n    color: #999999;\n  }\n}\n\n.warning_color {\n  color: #FF9D00;\n}\n\n.course_child_comment {\n  padding: 20px;\n  background: #F6F8FB;\n  border-radius: 5px;\n  position: relative;\n\n  &:before {\n    content: '';\n    width: 15px;\n    height: 15px;\n    position: absolute;\n    top: -7.5px;\n    transform: rotate(45deg);\n    background: #F6F8FB;\n  }\n}\n\n.course_bottom {\n  margin-top: 29px;\n  width: 100%;\n}\n\n.fixed_header {\n  position: fixed;\n  top: 0;\n  height: 66px;\n  background-color: #FFFFFF;\n  width: 100%;\n  z-index: 10000;\n\n  .fixed_content {\n    width: 1200px;\n    height: 100%;\n    margin: auto;\n    display: flex;\n    align-items: center;\n    justify-content: space-between;\n  }\n\n  .nav_logo {\n    width: 170px;\n    height: 36px;\n\n    img {\n      width: 170px;\n      height: 36px;\n      object-fit: cover;\n    }\n  }\n}\n\n.detail_content {\n  min-height: 100%;\n}\n\n.icon-img {\n  color: #0FB48C;\n  font-size: 24px;\n}\n\n.course_cell_valid {\n  margin-top: 5px;\n  font-style: normal;\n  font-weight: 400;\n  font-size: 14px;\n\n  .course_tip {\n    letter-spacing: 0.32em;\n  }\n}\n\n.cover_teacher {\n  width: 26px;\n  height: 26px;\n  border-radius: 50%;\n  cursor: pointer;\n\n  & + .cover_teacher {\n    transition: all 0.3s;\n    margin-left: 3px;\n  }\n\n  &.hover {\n    transform: scale(1.5);\n    // border: 1px solid #2256F6;\n    // box-shadow: 0px 5px 15px rgba(54, 41, 183, 0.06);\n  }\n}\n\n.course_price_info {\n  margin-top: 10px;\n  margin-bottom: 12px;\n  background: #F5F5F5;\n  padding: 13px 10px 17px;\n\n  .course_tip {\n    letter-spacing: 0.6em;\n  }\n}\n\n.course_tip {\n  font-style: normal;\n  font-weight: 400;\n  font-size: 14px;\n  color: #999999;\n}\n\n.teacher_warp_item {\n  display: flex;\n  align-items: center;\n  cursor: pointer;\n  margin-right: 10px;\n  height: 40px;\n  & + .teacher_warp_item {\n    margin-right: 10px;\n  }\n\n  .teacher_name {\n\n    margin-left: 4px;\n  }\n\n  &:hover .teacher_name {\n    color: #3D7FFF;\n  }\n}\n\n.flex_teacher {\n  display: flex;\n  align-items: center;\n  justify-content: space-between;\n  width: calc(100% - 70px);\n\n  .course_in_icon {\n    width: 29px;\n    cursor: pointer;\n  }\n\n  .course_cell_item.teacher_wrap {\n    padding-right: 10px;\n  }\n\n}\n\n.course_cell_item {\n  display: flex;\n  align-items: center;\n  flex-wrap: wrap;\n  word-break: break-all;\n  overflow: auto;\n}\n\n.course_cell_item.teacher_wrap {\n  display: flex;\n  align-items: center;\n  flex-wrap: nowrap;\n  text-overflow: clip;\n  overflow: hidden;\n}\n\n.valid_text {\n  font-weight: 400;\n  font-size: 14px;\n  color: #F01414;\n}\n</style>\n"],"names":["route","useRoute","data","componentInfo","__temp","__restore","_withAsyncContext","async","useAsyncData","ctx","getHearder","cookieData","cookie","getShop","store","useUserStore","getEnumList","getToken","userView","shopData","router","useRouter","head","ref","userInfo","computed","token","map","reactive","id","tabs","superiorResourceId","commentText","relevanceType","isExamination","recordId","opts","errorNum","info","style","width","infoTimer","scrollX","PeriodTypeEnum","commentList","noteList","coursewareList","notePage","pageCurrent","pageSize","totalPage","totalCount","commentPage","ctrl","loading","showDesc","comment","note","courseware","fixed","share","showBeforeExam","showBeforeExercise","scroll","handleChangeExam","val","buyStatus","price","ElMessage","error","handleBeforeValid","value","push","path","query","redirect","encodeURIComponent","fullPath","paperCheckStatus","paperId","then","res","catch","e","closeDialog","flag","paperRecordCheck","ElMessageBox","confirm","cancelButtonText","confirmButtonText","type","setStore","controlShow","examType","handleCloseExercise","handleOpenExercise","courseId","courseTypeName","handleOpenTeacher","teacher","getScrollRight","courseViewDataList","scrollWidth","offsetWidth","scrollLeft","length","handleShowComment","showCommentChild","getDwnUrl","row","url","coursewareDownloadAuth","materialId","coursewareDownloadApi","link","document","createElement","href","download","materialName","click","courseStatus","handleMake","courseAuthAppointment","alert","center","getInfo","handleBuy","config","enabledPay","disablePayTips","enabledAliPay","enabledWxPay","publishStatus","enableNotLoginWatch","Object","assign","handleOpenOther","handleFocus","key","handleBlur","nextScroll","lastScroll","handleScrollX","getAuthCourseView","tabEnum","label","command","show","coursewareExist","enableCourseNote","enableCourseComment","courseIntro","replace","clearInterval","nextTick","enableForbidContentCopy","forbidCopy","setInterval","getCourseView","handleScroll","handleChangeType","item","getNotes","getComment","getCourseware","courseListCourseware","coursewareType","courseApiListCourseware","courseCommentPage","goodsType","list","forEach","el","commentShow","showChild","replyList","courseAuthNotesListData","oneStatus","courseNotesListData","handleSelectEmoji","emoji","obj","handleSaveComment","content","courseCommentReplySave","commentContent","parentId","success","courseCommentSave","handleScrollBody","app","querySelector","Math","floor","scrollTop","window","pageYOffset","clientHeight","handleOpenCourse","handleShare","handleCollection","isClick","collectStatus","collectionUserDelete","collectionType","resourceId","collectionUserSave","pending","Promise","resolve","courseFn","allSettled","course","CourseTypeEnum","status","initialCache","d","useHead","title","courseName","shopName","meta","hid","name","courseDesc","onMounted","addEventListener","onUnmounted","removeEventListener"],"mappings":"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"}