Files
learning-system-portal/src/views/Index.vue
2024-04-30 15:06:34 +08:00

3013 lines
84 KiB
Vue
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<template>
<div>
<div class="course-banner">
<portal-header
current="index"
textColor="#000000"
style="z-index: 999; position: relative"
@showClass="showClass"
></portal-header>
<div id="container" style="z-index: 99" v-if="resonimg.length == 1">
<!-- 当轮播图等于一张时 -->
<swiper :options="swiperOptiontwo">
<swiper-slide
style="margin: 0 auto"
v-for="(item, idx) in resonimg"
:key="'a' + idx"
class="swiper-slide games pointer"
@click.native="banJump(item)"
>
<div
class="bannbox"
:style="{
background: `url(${
fileBaseUrl + item.image
}) no-repeat 100% / 100%`,
}"
></div>
<img
class="banner-img"
style="margin: 0 auto"
:src="fileBaseUrl + item.image"
alt=""
/>
</swiper-slide>
</swiper>
</div>
<div id="container" style="z-index: 99" v-else>
<swiper
:options="swiperOption"
ref="mySwiper"
v-if="resonimg.length > 1"
>
<swiper-slide
style="margin: 0 auto"
v-for="(item, idx) in resonimg"
:key="'b' + idx"
class="swiper-slide games pointer"
@click.native="banJump(item)"
>
<div
class="bannbox"
:style="{
background: `url(${
fileBaseUrl + item.image
}) no-repeat 100% / 100%`,
}"
></div>
<img
class="banner-img"
style="margin: 0 auto"
:src="fileBaseUrl + item.image"
alt=""
/>
</swiper-slide>
<div class="swiper-pagination" slot="pagination"></div>
<!-- <div class="swiper-button-prev" slot="button-prev"></div> -->
</swiper>
</div>
<div class="personal-panel">
<div class="personal-img">
<author-img
width="68px"
height="68px"
:avatar="userInfo.avatar"
:aid="userInfo.aid"
:noJump="false"
:sex="userInfo.sex"
></author-img>
<!-- {{ userInfo.avatar }} -->
</div>
<!-- <img style="width:68px;height:68px" src="/images/Avatarman.png" alt=""> -->
<p class="personal-name">
{{ userInfo.name }} {{ userInfo.userNo }}
<span class="grade">{{ userData.level }}</span>
</p>
<p class="personal-info">
{{ cutOrgNamePath(userInfo.departFullName) }}
</p>
<a href="uc/study/task">
<div class="personal-box" style="margin-bottom: 10px">
<span>学习任务</span>
<span v-if="studyTaskCount == 0" style="display: flex">
暂无任务
<div class="tobe-icon">
<img :src="`${webBaseUrl}/images/homeWu/Pending.png`" alt="" />
</div>
</span>
<span v-else style="display: flex"
>{{ studyTaskCount ? studyTaskCount : 0 }}个待学习
<div class="tobe-icon">
<img :src="`${webBaseUrl}/images/homeWu/Pending.png`" alt="" />
</div>
</span>
<!-- <img class="personal-box-img" :src="`${webBaseUrl}/images/homeWu/agency.png`" alt="" srcset=""> -->
</div>
</a>
<div class="last-study-info">
<div
class="one-line-ellipsis"
style="color: #333; font-size: 16px"
v-if="overlayShow"
>
<router-link :to="'/course/studyindex?id=' + lastStudy.courseId">
<img
class="Recent"
:src="`${webBaseUrl}/images/Recent.png`"
alt=""
/>
最近学习 {{ lastStudy.courseName }}
</router-link>
</div>
<!-- <div class="tobe-icon">
<img :src="`${webBaseUrl}/images/homeWu/Pending.png`" alt="">
</div> -->
</div>
<ul class="personal-ul">
<li>
<!-- <router-link to="/user/ranking"> -->
<span class="label">累计学习</span>
<p>
<span>{{ userData.totalStudyHour }}</span
>小时
</p>
<!-- </router-link> -->
</li>
<!-- <li>
<span class="label">经验值等级</span>
<p><span>{{userData.level}}</span></p>
</li> -->
<li>
<router-link @click.native="setCurIdentity(1)" to="/user/ucurrency">
<span class="label">我的U币</span>
<p>
<span>{{ userData.uvalue > 0 ? userData.uvalue : 0 }}</span
>
</p>
</router-link>
</li>
</ul>
</div>
</div>
<div class="xindex-content">
<!-- 推荐课程 -->
<div class="modules xcontent2">
<div class="xcontent2-main">
<!--内容块-->
<div class="modules-title xindex-main">
<span class="modules-text">推荐课程</span>
<span class="quyer-tag">
<a
:class="courseList.orderType == 2 ? 'current' : ''"
@click="orderTypeFilter(2)"
>最热</a
>
<a
:class="courseList.orderType == 1 ? 'current' : ''"
@click="orderTypeFilter(1)"
>最新</a
>
<span @click="uOnClick" class="Uxtext" style="">
U选小课堂
<span class="uxicon">
<svg-icon icon-class="hot" style="font-size: 22px"></svg-icon>
</span>
</span>
</span>
<span class="more">
<router-link to="/course">查看更多>></router-link>
</span>
</div>
<div class="modules-list">
<!-- 一个固定内容 -->
<!-- <div class="xindex-course">
<a href="course/boeframe?id=517CA622-238E-06BA-0AED-B1200D705800&type=online-course">
<div style="border-radius: 4px;" class="xindex-course-image">
<el-image style="border-radius: 4px;" class="course-image" :src="this.webBaseUrl+'/ad/index_course.png'" fit="fit"></el-image>
<span class="course-type">录播课</span>
</div>
<div style="display:flex">
<div style="flex:80%" title="高效谈判系列课" class="course-title portal-title-tow two-line-ellipsis">高效谈判系列课</div>
<div >
<svg-icon style="font-size: 32px;margin-top: 8px;" icon-class="collectedCourse"></svg-icon>
</div>
</div>
<div class="course-author">
<div>
<span class="study-num">3000+人学习</span>
</div>
<div style="display:flex">
<div style="padding-left:15px">
<div>
<span class="course-score-value">5.0</span>
</div>
</div>
</div>
</div>
</a>
</div> -->
<!--内容列表内容-->
<div
v-for="(course, ccidx) in courseComputedOneList"
:key="'cc' + ccidx"
class="xindex-course"
style="position: relative"
>
<div style="position: absolute; right: 25px; bottom: 72px">
<interactBar
nodeWidth="20px"
:courseExclusive="true"
:type="1"
:data="course"
:comments="false"
:praises="false"
:shares="false"
:views="false"
>
</interactBar>
<!-- <svg-icon style="font-size: 32px;margin-top: -5px;" icon-class="collectedCourse"></svg-icon> -->
</div>
<a @click="toCourseDetail(course)">
<div class="xindex-course-image">
<course-image :course="course"></course-image>
<span v-if="course.type == 20 || 10" class="course-type"
>录播课</span
>
</div>
<div
style="width: 80%"
:title="course.name"
class="course-title portal-title-tow two-line-ellipsis"
>
{{ course.name }}
</div>
<div class="course-author">
<div class="course-author-left">
{{ course.authorInfo.name }}
<span class="study-num"
>{{ formatNum(course.studys) }}人学习</span
>
</div>
<div style="display: flex">
<div v-if="course.score">
<span class="course-score-value" style="margin-left: 10px"
>{{ toScore(course.score) }}</span
>
</div>
<div v-else class="course-score-no">未评分</div>
</div>
</div>
</a>
</div>
<!-- 推荐课程内容列表 -->
<div
v-for="(course, ccidx) in recommendedList.list"
:key="'rr' + ccidx"
class="xindex-course"
style="position: relative"
>
<div style="position: absolute; right: 25px; bottom: 72px">
<interactBar
nodeWidth="20px"
:courseExclusive="true"
:type="1"
:data="course"
:comments="false"
:praises="false"
:shares="false"
:views="false"
>
</interactBar>
</div>
<a @click="toCourseDetail(course)">
<div class="xindex-course-image">
<course-image :course="course"></course-image>
<span v-if="course.type == 20 || 10" class="course-type"
>录播课</span
>
</div>
<div
style="width: 80%"
:title="course.name"
class="course-title portal-title-tow two-line-ellipsis"
>
{{ course.name }}
</div>
<div class="course-author">
<div class="course-author-left">
{{ course.authorInfo.name }}
<span class="study-num"
>{{ formatNum(course.studys) }}人学习</span
>
</div>
<div style="display: flex">
<div v-if="course.score">
<span class="course-score-value" style="margin-left: 10px"
>{{ toScore(course.score) }}</span
>
</div>
<div v-else class="course-score-no">未评分</div>
</div>
</div>
</a>
</div>
<!--内容列表内容-->
<div
v-for="(course, ccidx) in courseComputedTwoList"
:key="'cctwo' + ccidx"
class="xindex-course"
style="position: relative"
>
<div style="position: absolute; right: 25px; bottom: 72px">
<interactBar
nodeWidth="20px"
:courseExclusive="true"
:type="1"
:data="course"
:comments="false"
:praises="false"
:shares="false"
:views="false"
>
</interactBar>
<!-- <svg-icon style="font-size: 32px;margin-top: -5px;" icon-class="collectedCourse"></svg-icon> -->
</div>
<a @click="toCourseDetail(course)">
<div class="xindex-course-image">
<course-image :course="course"></course-image>
<span v-if="course.type == 20 || 10" class="course-type"
>录播课</span
>
</div>
<div
style="width: 80%"
:title="course.name"
class="course-title portal-title-tow two-line-ellipsis"
>
{{ course.name }}
</div>
<div class="course-author">
<div class="course-author-left">
{{ course.authorInfo.name }}
<span class="study-num"
>{{ formatNum(course.studys) }}人学习</span
>
</div>
<div style="display: flex">
<div v-if="course.score">
<span class="course-score-value" style="margin-left: 10px"
>{{ toScore(course.score) }}</span
>
</div>
<div v-else class="course-score-no">未评分</div>
</div>
</div>
</a>
</div>
</div>
</div>
<div class="xcontent2-minor" style="margin-top: 60px">
<div class="portal-ranking ranking-bg">
<p class="ranking-title">课程热度榜</p>
<ul class="xindex-ranking-course">
<li
class="xindex-ranking-li"
v-for="(item, cindex) in scorelist"
:key="'cc' + cindex"
>
<a style="display: inherit" @click="toCourseDetail(item)">
<span class="portal-right-text blue-one">
<img :src="getPic(cindex)" alt="" />
</span>
<span
class="portal-title-desc index-one-line-ellipsis title-line-ellipsis"
style="font-size: 14px; color: #04243c"
>{{ item.name }}</span
>
<div class="list-active">
<div class="list-content">
<div class="list-img">
<course-image
:text="false"
:course="item"
></course-image>
<span v-if="item.type < 21" class="course-type"
>录播</span
>
<span v-if="item.type == 30" class="course-type"
>线下课</span
>
<span v-if="item.type == 40" class="course-type"
>学习项目</span
>
</div>
<div class="list-text">
<h6 class="two-line-ellipsis">{{ item.name }}</h6>
<span>{{ item.publishTime }}</span>
</div>
</div>
<div class="list-bottom">
<couresinteract :type="1" :data="item"></couresinteract>
<!-- <interactBar :type="1" :data="item" :couseViews="false" :shares="false" :views="false"></interactBar> -->
</div>
</div>
</a>
</li>
</ul>
</div>
<div class="portal-ranking ranking-bg reviewTop">
<p class="ranking-title">课程好评榜</p>
<ul class="xindex-ranking-review" style="overflow: auto;margin: 0;top: 0;">
<li
@click="toCourseDetail(item)"
class="xindex-ranking-li title-line-ellipsis"
v-for="(item, index) in Positive"
:key="'bb' + index"
style="line-height: 22px"
>
<span class="portal-right-text orange-one">
<img :src="getPic(index)" alt="" />
</span>
<span
class="portal-title-desc index-one-line-ellipsis title-line-ellipsis"
style="font-size: 14px; color: #04243c; line-height: 26px"
>{{ item.name }}</span
>
</li>
</ul>
</div>
</div>
</div>
<!-- 推荐案例2版 -->
<div class="modules xcontent2">
<div class="xcontent2-main xindex-main">
<div class="modules-title">
<span class="modules-text">推荐案例</span>
<!-- <span class="quyer-tag">
<a
:class="caseList.orderType == 2 ? 'current' : ''"
@click="changeCaseOrder(2)"
>最热</a
>
<a
:class="caseList.orderType == 1 ? 'current' : ''"
@click="changeCaseOrder(1)"
>最新</a
>
</span> -->
<span class="more">
<router-link to="/case">查看更多>></router-link>
</span>
</div>
<div class="modules-list">
<div
class="xindex-case"
v-for="(ca, ind) in caseList.list"
:key="'aa' + ind"
>
<div class="case-index boe-case-index">
<div class="case-top"></div>
<div class="case-conent" @click="jumcasedet(ca)">
<p class="cast-time">
<span class="time-one" v-if="caseList.orderType == 2">
<svg-icon
style="margin-right: 0; font-size: 16px"
icon-class="crown"
></svg-icon
>人气榜NO.{{ ind + 1 }}
</span>
<span style="float: right">{{
ca.sysCreateTime.substring(0, 10)
}}</span>
</p>
<p :title="ca.title" class="two-line-ellipsis case-title">
{{ ca.title }}
</p>
<p class="case-text three-line-ellipsis">{{ ca.summary }}</p>
<p class="case-info">
<interactBar
:type="3"
:readonly="true"
:data="ca"
:shares="false"
:views="false"
></interactBar>
</p>
</div>
<div class="case-inter">
<div class="case-inter-box">
<div class="case-inter-left">
<div style="float: left">
<authorInfo
:avatar="ca.authorInfo.avatar"
:name="ca.authorInfo.name"
:sex="ca.authorInfo.sex"
:aid="userInfo.aid"
></authorInfo>
</div>
<div class="case-inter-orgin index-one-line-ellipsis">
{{ ca.authorInfo.orgInfo }}
</div>
</div>
<div
v-if="caseList.orderType == 2"
class="interact-bar-index"
style="
font-size: 12px;
color: #6e7b84;
display: flex;
line-height: 30px;
"
>
<interactBar
:type="3"
:readonly="true"
:comments="false"
:praises="false"
:favorites="false"
:data="ca"
:shares="false"
:views="true"
></interactBar
>人观看
</div>
</div>
<!-- -->
</div>
</div>
</div>
</div>
</div>
<div class="xcontent2-minor">
<div
class="portal-ranking ranking-bg"
style="margin-top: 60px; padding-right: 17px"
>
<p class="ranking-title">案例排行榜</p>
<ul class="xindex-ranking-case">
<li
@click="jumcasedet(item)"
class="xindex-ranking-li title-line-ellipsis"
v-for="(item, index) in Popularity"
:key="'bb' + index"
style="line-height: 22px"
>
<span class="portal-right-text orange-one">
<img :src="getPic(index)" alt="" />
</span>
<span
class="portal-title-desc two-line-ellipsis"
style="font-size: 14px; color: #04243c; line-height: 26px"
>{{ item.title }}</span
>
</li>
</ul>
</div>
</div>
</div>
<!-- 推荐文章 -->
<div class="modules xcontent2">
<div class="xcontent2-main xindex-main">
<div class="modules-title" style="margin-top: 22px">
<span class="modules-text">推荐文章</span>
<span class="quyer-tag">
<a
:class="articleList.orderType == 2 ? 'current' : ''"
@click="changeArticleOrder(2)"
>最热</a
>
<a
:class="articleList.orderType == 1 ? 'current' : ''"
@click="changeArticleOrder(1)"
>最新</a
>
</span>
<span class="more">
<router-link to="/article">查看更多>></router-link>
</span>
</div>
<div class="modules-list">
<div class="article-card boe-article-index" style="display: flex">
<!-- 首张 -->
<div
class="article-card-left"
v-if="articleList && articleList.first && articleList.first.id"
>
<div class="article-card-box">
<a
:href="`${webBaseUrl}/article/detail?id=${articleList.first.id}`"
style="font-weight: 700; font-size: 20px"
>
<div class="article-info-image-box">
<article-image
height="100%"
width="100%"
:article="articleList.first"
></article-image>
</div>
<div class="article-info">
<div class="article-info-title" style="margin-top: 10px">
<div class="one-line-ellipsis">
<span
style="
font-weight: 600;
font-size: 16px;
word-break: break-all;
color: #00253e;
"
>{{ articleList.first.title }}</span
>
</div>
</div>
<div
class="article-info-index-summary index-tive-line-ellipsis"
style="
min-height: 160px;
font-weight: 400;
margin-top: 14px;
word-break: break-all;
"
>
{{ articleList.first.summary }}
</div>
</div>
</a>
<div></div>
<div
class="article-info-time"
style="
font-size: 14px;
color: #6e7b84;
display: flex;
justify-content: space-between;
margin-top: 16px;
"
>
<span>{{
articleList.first &&
articleList.first.sysCreateTime &&
articleList.first.sysCreateTime.substring(0, 10)
}}</span>
<span
><a
:href="`${webBaseUrl}/article/detail?id=${articleList.first.id}`"
>查看详情</a
></span
>
</div>
<div class="article-other-info" style="margin-top: 17px">
<div>
<author-img
height="32px"
width="32px"
:avatar="articleList.first.authorInfo.avatar"
:aid="articleList.first.authorInfo.aid"
:sex="articleList.first.authorInfo.sex"
></author-img>
</div>
<div style="margin-top: 5px">
<interactBar
:type="2"
:readonly="true"
:data="articleList.first"
:views="false"
:shares="false"
>
</interactBar>
</div>
</div>
</div>
</div>
<!--内容列表内容-->
<div class="article-card-right" style="flex: 1">
<div
class="article-card-box"
v-for="article in articleList.list"
:key="'a1' + article.id"
>
<div class="article-li">
<div class="article-img" v-if="article.coverurl != ''">
<a
:href="`${webBaseUrl}/article/detail?id=${article.id}`"
style="font-weight: 700; font-size: 20px"
>
<el-image
style="width: 100%; height: 100%"
:src="fileBaseUrl + article.coverurl"
></el-image>
</a>
</div>
<div class="article-right">
<a
:href="`${webBaseUrl}/article/detail?id=${article.id}`"
style="font-weight: 700; font-size: 20px"
>
<p class="article-info-title index-one-line-ellipsis">
{{ article.title }}
</p>
<p class="article-info-summary two-line-ellipsis">
{{ article.summary }}
</p>
</a>
<div class="article-bottom">
<div style="display: flex">
<div>
<author-img
height="32px"
width="32px"
:avatar="article.authorInfo.avatar"
:aid="article.authorInfo.aid"
:sex="article.authorInfo.sex"
></author-img>
</div>
<div>
<span
style="
color: #6e7b84;
font-size: 14px;
margin: 6px 13px 0 10px;
"
>{{ article.authorInfo.name }}</span
>
</div>
<div style="padding-top: 0px">
<interactBar
:type="2"
:readonly="true"
:data="article"
:views="false"
:shares="false"
></interactBar>
</div>
</div>
<div>
<span class="article-info-time">{{
article.sysCreateTime.substring(0, 10)
}}</span>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<!--内容块-->
<div class="xcontent2-minor">
<div
style="margin-top: 82px; padding-right: 17px"
class="portal-ranking ranking-bg"
>
<!-- 排行榜位置 -->
<p class="ranking-title">文章排行榜</p>
<ul class="xindex-ranking-article">
<li
class="xindex-ranking-li"
v-for="(item, index) in ankingList"
:key="'a2' + item.id"
style="line-height: 22px"
>
<a
style="display: inherit"
:href="`${webBaseUrl}/article/detail?id=${item.id}`"
>
<span class="portal-right-text orange-one">
<img :src="getPic(index)" alt="" />
</span>
<span class="portal-index-summary two-line-ellipsis">{{
item.title
}}</span>
</a>
</li>
</ul>
</div>
</div>
</div>
<!-- 推荐问答 -->
<div class="modules xcontent2">
<div class="xcontent2-main xindex-main">
<!--内容块-->
<div class="modules-title" style="margin-top: 22px">
<span class="modules-text">推荐问答</span>
<span class="quyer-tag">
<a
:class="qaList.orderType == 'views' ? 'current' : ''"
@click="changeQaOrder('views')"
>最热</a
>
<a
:class="qaList.orderType == '' ? 'current' : ''"
@click="changeQaOrder('')"
>最新</a
>
</span>
<span class="more">
<router-link to="/qa">查看更多>></router-link>
</span>
</div>
<div class="modules-list">
<!--内容列表内容-->
<div
class="xindex-qa"
v-for="qa in qaList.list"
:key="'qa' + qa.id"
>
<div class="qa-card boe-qa-index">
<p class="qa-top">
<span>{{ formatNum(qa.views) }}正在关注</span
><span>{{ qa.sysCreateTime.substring(0, 10) }}</span>
</p>
<div class="qa-center">
<p
class="one-line-ellipsis portal-index-title"
style="color: #181818"
>
{{ qa.title }}
</p>
<p
class="boe-qa-sum two-line-ellipsis"
style="color: #6e7b84"
>
{{ qa.content }}
</p>
<p class="qa-views pointer" @click="jumpRouter(qa)">
查看详情
</p>
</div>
<div class="qa-char">
<author-img
:avatar="qa.authorInfo.avatar"
:aid="qa.authorInfo.aid"
:sex="qa.authorInfo.sex"
>
</author-img>
<div>
<p class="info-name">{{ qa.authorInfo.name }}</p>
<p class="info-bar">
<interactBar
:type="4"
:readonly="true"
:data="qa"
:comments="false"
:answers="true"
:shares="false"
:praises="false"
:views="false"
></interactBar>
</p>
</div>
</div>
</div>
</div>
</div>
</div>
<div class="xcontent2-minor">
<!-- 排行榜 -->
<div
class="portal-ranking ranking-bg"
style="margin-top: 80px; padding-right: 17px"
>
<p class="ranking-title">问答排行榜</p>
<ul class="xindex-ranking-qa">
<li
@click="jumpRouter(item)"
class="xindex-ranking-li"
v-for="(item, index) in answersList"
:key="'q' + item.id"
style="line-height: 22px"
>
<span class="portal-right-text orange-one">
<img :src="getPic(index)" alt="" />
</span>
<span class="portal-index-summary two-line-ellipsis">{{
item.title
}}</span>
</li>
</ul>
</div>
</div>
</div>
</div>
<div>
<a
href="course/boeframe?id=517CA622-238E-06BA-0AED-B1200D705800&type=online-course"
>&nbsp;&nbsp;&nbsp;</a
>
</div>
<portal-footer></portal-footer>
<portalFloatTools></portalFloatTools>
<interest-Collection
ref="userCollection"
@close="closeCollection"
></interest-Collection>
<!-- 兴趣偏好 -->
<guide-box ref="guide" @close="closeGuide"></guide-box>
<!-- 引导页 -->
<!-- <medalDlg></medalDlg> -->
<!--登录勋章-->
<el-dialog
width="540px"
class="medalbox"
:visible.sync="showLoginMedal"
:append-to-body="true"
>
<div
class="jinian-medal-img"
:style="`background: url(${webBaseUrl}/images/jinian_medal.png) no-repeat;`"
>
<!--登录勋章显示根据UI显示修改-->
<span
style="position: absolute; right: 60px; top: 60px; cursor: pointer"
>
<img
@click="closeJinian"
:src="`${webBaseUrl}/images/close.png`"
width="26px"
height="26px"
alt=""
/>
</span>
<div style="text-align: center; padding-right: 10px">
<img
:src="`${webBaseUrl}/images/login_medal.png`"
width="206px"
height="269px"
alt=""
/>
</div>
<div style="text-align: left; padding: 20px 60px 100px 60px">
<div class="jntext1">感谢有您 一路相伴</div>
<div class="jntext2">勋章领取条件:</div>
<div class="jntext3">2022年11月4日-11月19日登录过平台学习的校友</div>
</div>
</div>
</el-dialog>
<!-- U课堂弹窗 -->
<div class="u-class">
<el-dialog :visible.sync="showUClass" width="833px">
<div class="ClassBoxContent">
<img src="../assets/images/u_class.png" alt="" class="img" />
<div class="ContentBox">
<div class="left">
<div class="title">U选小课堂</div>
<div class="jy">项目简介</div>
<div class="msg">
于22年首推是一个面向全集团员工开放的职业通识类数字化培养项目旨在帮助员工开阔眼界加厚职业素养在原有外部精选通用力课程基础上2023年引入创新专区以新鲜的话题新颖的形式带给全员丰富有趣的学习体验
</div>
<div class="bottom"></div>
</div>
<div class="right">
<div class="tyl" @click="tylClick">
<div class="tyl_title">
<img
src="../assets/images/dc.png"
alt=""
class="tyl_title_img"
/>
<span class="tyl_title_msg">通用力专区</span>
</div>
<div class="tyl_jy">加厚职业素养轻学习快成长</div>
<div class="tyl_msg">
内容涵盖领导力市场营销职场技能财务知识法律常识人力资源经典国学人文社科
</div>
</div>
<div class="text_msg">
创新力专区课程版权已到期
</div>
<!-- <div class="cyl" @click="cylClick">
<div class="tyl_title">
<img
src="../assets/images/cyl.png"
alt=""
class="tyl_title_img"
/>
<span class="tyl_title_msg">创新力专区</span>
</div>
<div class="tyl_jy">激发创新潜力拓视野促思考</div>
<div class="tyl_msg">
内容涵盖组合创新单点破局错位竞争分形创新第二曲线数字化元宇宙<br/>
创新力专区课程版权将于2024年4月16日到期逾期将无法继续访问请尽快完成学习
</div>
</div> -->
</div>
</div>
</div>
</el-dialog>
</div>
</div>
</template>
<script>
import { mapGetters } from "vuex";
import apiCourseStudy from "@/api/modules/courseStudy.js";
import portalHeader from "@/components/PortalHeader.vue";
import portalFooter from "@/components/PortalFooter.vue";
import portalFloatTools from "@/components/PortalFloatTools.vue";
import authorInfo from "@/components/Portal/authorInfo.vue";
import apiCourse from "@/api/modules/coursePortal.js";
import apiCase from "@/api/modules/cases.js";
import apiArticle from "@/api/modules/article.js";
import apiQa from "@/api/modules/qa.js";
import apiGuide from "@/api/phase2/guide.js";
import apiUser from "@/api/system/user.js";
import apiCoursePortal from "@/api/modules/coursePortal.js";
import interactBar from "@/components/Portal/interactBar.vue";
import couresinteract from "@/components/Portal/course/couresinteract.vue";
import ad from "@/components/Portal/adFloat.vue";
import courseImage from "@/components/Course/courseImage.vue";
import articleImage from "@/components/Article/articleImage.vue";
import InterestCollection from "@/components/Portal/interestCollection.vue";
import GuideBox from "@/components/Portal/guideBox.vue";
import medalDlg from "@/components/Portal/medalDlg.vue";
import { toScore, formatUserNumber, cutOrgNamePath } from "@/utils/tools.js";
import { swiper, swiperSlide } from "vue-awesome-swiper";
import apiPlace from "@/api/phase2/place.js";
import authorImg from "@/components/Portal/authorImg.vue";
import apiStat from "@/api/phase2/stat.js";
import apiIndex from "@/api/phase2/index.js";
import apiUserhobby from "@/api/phase2/userhobby.js";
export default {
name: "index",
components: {
authorImg,
portalHeader,
ad,
portalFooter,
articleImage,
portalFloatTools,
authorInfo,
interactBar,
couresinteract,
courseImage,
InterestCollection,
GuideBox,
medalDlg,
},
created() {
this.$store.dispatch("refrashStudyTaskCount");
let $this = this;
//判断是否弹出登录勋章,设置截止日期
var nowDate = new Date();
var endDate = new Date("2022-11-18"); //先设置时间是11月18日
if (nowDate < endDate) {
apiStat.getUserLoginMedal().then((rs) => {
if (rs.status == 200) {
if (rs.result.show) {
//设置是否需要显示纪念勋章
$this.needLoginMedal = true;
}
}
});
}
//提取需要提示勋章
// apiStat.getUserMedalTips().then(res=>{
// if(res.status==200){
// $this.medalTips=res.result;
// }
// })
},
data() {
return {
Positive:[],
showUClass: false,
showLoginMedal: false, //是否显示登录勋章
needLoginMedal: false, //是否需要显示纪念勋章
medalTips: [
{ medalId: 1, medalLevel: 5, isShow: false },
{ medalId: 3, medalLevel: 4, isShow: false },
],
lastStudy: {},
overlayShow: false,
userData: { level: 1, uvalue: 0, totalStudyHour: 0 },
userHobby: {
needShow: false,
localKeyPre: "user-hobby-", //本地存储的key
},
needHobbyShow: false, //是否显示兴趣爱好
formatNum: formatUserNumber,
cutOrgNamePath: cutOrgNamePath,
// userInfo: {},
ankingList: [],
answersList: [],
Popularity: [],
reviewList:[],//好评
scorelist: [],
resonimg: [],
swiperOptiontwo: {
autoplay: false,
// noSwiping: true,
},
swiperOption: {
autoplay: {
delay: 2000,
disableOnInteraction: false, //解决滑动后不能轮播的问题
},
speed: 3000, //切换速度即slider自动滑动开始到结束的时间单位ms
loop: true, //循环切换
peed: 300, //循环速度
scrollbar: ".swiper-scrollbar",
pagination: {
el: ".swiper-pagination",
// type : 'progressbar', //分页器形状
clickable: true, //点击分页器的指示点分页器会控制Swiper切换
},
navigation: {
nextEl: ".swiper-button-next",
prevEl: ".swiper-button-prev",
},
},
couname: "",
isNext: true,
pageIndex: 1,
fileBaseUrl: process.env.VUE_APP_FILE_BASE_URL,
toScore,
courseList: {
num: 12,
orderType: 2,
list: [],
},
// 推荐课程
recommendedList:{
list: [],
},
caseList: {
num: 3,
orderType: 2,
list: [],
},
articleList: {
num: 4,
orderType: 2,
first: {
id: "",
authorInfo: {},
},
list: [],
},
qaList: {
num: 4,
orderType: "views",
list: [],
},
};
},
mounted() {
this.getCourseData(1);
this.getRecommendList();
this.getPositive()
this.getCaseData();
this.getArticleData();
this.getQaData();
this.couresreso();
this.getScoreList();
this.getPopularity();
this.getAnkingData();
this.getLevel();
this.getQaAnswers();
this.getLastStudy();
//检查兴趣爱好是否已填报,
//先检查本地session和 local 15天, 这两个值是在组件中设置的
let sessionHobby = sessionStorage.getItem(
"user-hobby-" + this.userInfo.aid
);
let localHobbyTime = localStorage.getItem("notYet" + this.userInfo.aid);
if (!sessionHobby) {
//只有session中不存在才会验证
//本地15天验证,localHobby,后续完善
let flag = true; //请求检查
if (localHobbyTime) {
let day =
(new Date() - new Date(localHobbyTime)) / (1000 * 60 * 60 * 24);
if (day < 15) {
flag = false;
}
}
if (flag) {
apiUserhobby.has().then((res) => {
if (res.status == 200) {
if (!res.result) {
//设置需要显示兴趣爱好收集窗口
this.userHobby.needShow = true;
}
} else {
console.log("兴趣爱好检查失败" + res.message);
}
//检查引导页
this.checkAndShowGuide();
});
} else {
this.checkAndShowGuide();
}
} else {
//检查引导页
this.checkAndShowGuide();
}
//this.$refs.userCollection.show();
},
computed: {
...mapGetters(["userInfo", "studyTaskCount"]),
swiper() {
return this.$refs.mySwiper.swiper;
},
courseComputedOneList(){
return this.courseList.list.slice(0,3)
},
courseComputedTwoList(){
return this.courseList.list.slice(3)
},
},
methods: {
getPositive() {
// 这个是案例的好评
// apiCase.queryComments(10).then(res => {
// if (res.status == 200) {
// this.Positive = res.result;
// console.log(res);
// }
// });
// 修改成课程的好评
apiCourse.scorelist(10, 2).then(res => {
if (res.status == 200) {
res.result.forEach(item => {
if (item.publishTime != '') {
item.coverImg = item.images;
let time = item.publishTime.split('-');
item.publishTime = `${time[0]}${time[1]}${time[2]}`
}
})
this.Positive = res.result;
}
});
},
tylClick() {
window.open("https://m.qingxuetang.com/x/?appId=qxtcorp306130");
},
cylClick() {
window.open("https://u.boe.com/pc/course?keyword=创新力专区");
},
showClass(flag) {
if (flag) {
this.showUClass = flag;
}
},
uOnClick(){
// this.showUClass = true;
window.open("https://m.qingxuetang.com/x/?appId=qxtcorp306130")
},
setCurIdentity(iden) {
this.$store.dispatch("SetCurIdentity", iden);
},
closeJinian() {
this.showLoginMedal = false;
},
banJump(item) {
if (item.JumpUrl) {
window.open(item.JumpUrl);
}
},
//上次学习记录
getLastStudy() {
apiCourseStudy.lastStudy().then((res) => {
if (res.status === 200) {
this.lastStudy = res.result;
if (res.result != "" && res.result.courseId) {
this.overlayShow = true;
}
} else {
this.$message.error(res.message);
}
});
},
//检查并弹出引导页
checkAndShowGuide() {
//引导页弹框是否显示
//检查本地,减少服务器请求的次数
let localGuide = localStorage.getItem("user-guide-" + this.userInfo.aid);
if (!localGuide) {
apiGuide.hasUser().then((res) => {
if (res.status == 200) {
if (!res.result) {
this.$refs.guide.show();
} else {
if (this.userHobby.needShow) {
this.$refs.userCollection.show();
} else {
if (this.needLoginMedal) {
this.showLoginMedal = true;
}
}
}
localStorage.setItem("user-guide-" + this.userInfo.aid, 1);
} else {
console.log("获取引导页检查失败" + res.message);
//this.$message.error('')
if (this.userHobby.needShow) {
this.$refs.userCollection.show();
}
}
});
} else {
if (this.userHobby.needShow) {
this.$refs.userCollection.show();
} else {
if (this.needLoginMedal) {
this.showLoginMedal = true;
}
}
}
//测试情况下
// this.$refs.guide.show();
},
closeGuide() {
//关闭引导页
if (this.userHobby.needShow) {
//需要弹出兴趣收集页,弹出兴趣收集页
this.$refs.userCollection.show();
}
},
closeCollection() {
if (this.needLoginMedal) {
this.showLoginMedal = true;
}
},
jumstudy() {
this.$router.push({ path: "../views/study/TaskList.vue" });
},
jumcasedet(item) {
this.$router.push({ path: "/case/detail", query: { id: item.id } });
},
getPic(index) {
return this.webBaseUrl + "/images/listblue0" + (index + 1) + ".png";
},
getLevel() {
//获取经验值和等级
apiStat.getUserStatTotalInfo(this.userInfo.aid).then((res) => {
if (res.status == 200) {
this.userData = res.result;
//console.log(this.userData,'this.userData')
}
});
},
getQaAnswers() {
apiIndex.qaAnswers(10).then((res) => {
if (res.status == 200) {
this.answersList = res.result;
}
});
},
getAnkingData() {
// 文章排行榜
apiIndex.articleViews(10).then((res) => {
if (res.status == 200) {
this.ankingList = res.result;
}
});
},
getPopularity() {
//案例排行榜
apiCase.queryPraises(10).then((res) => {
if (res.status == 200) {
this.Popularity = res.result;
// console.log(this.Popularity)
}
});
},
getScoreList() {
//课程排行榜
apiCourse.scorelist(10, 1).then((res) => {
if (res.status == 200) {
res.result.forEach((item) => {
if (item.publishTime != "") {
item.coverImg = item.images;
let time = item.publishTime.split("-");
item.publishTime = `${time[0]}${time[1]}${time[2]}`;
}
});
this.scorelist = res.result;
//console.log(this.scorelist,'this.scorelist');
}
});
},
// bgfun(){
// console.log(this.$refs.bannimg[0]);
// this.$nextTick(() => {
// console.log(this.$refs.bannimg[0])
// })
// },
couresreso() {
let key = "index";
apiPlace.detail(key).then((res) => {
let lmj = JSON.parse(res.result.content);
this.resonimg = lmj;
});
},
jumUX() {
window.open("https://m.qingxuetang.com/x/?appId=qxtcorp306130", "_blank");
},
toCourseDetail(item) {
//二期调整,直接改成一个地址
//return this.webBaseUrl + '/course/detail?id=' + item.id;
let $this = this;
if (item.type == 10) {
//return this.webBaseUrl + "/course/studyindex?id=" + item.id;
//console.log("直接进入学习页面");
this.$router.push("/course/studyindex?id=" + item.id);
} else if (item.type == 20) {
apiCourseStudy.hasSignup(item.id).then((rs) => {
if (rs.status == 200) {
//return $this.webBaseUrl + "/course/studyindex?id=" + item.id;
this.$router.push("/course/studyindex?id=" + item.id);
} else {
//return $this.webBaseUrl + "/course/detail?id=" + item.id;
this.$router.push("/course/detail?id=" + item.id);
}
});
//return $this.webBaseUrl + "/course/detail?id=" + item.id;
}
},
orderTypeFilter(val) {
this.courseList.orderType = val;
this.pageIndex = 1;
this.getCourseData();
},
nextPage() {
this.pageIndex += 1;
if (this.isNext) {
this.getCourseData(this.pageIndex);
}
},
// 获取推荐课程list
getRecommendList(){
apiIndex.getRecommendList(1,3).then((res) => {
if(res.code === 200){
console.log(res.data.records);
let courseIds = [];
res.data.records.forEach((item) => {
item.authorInfo = {
aid: "",
name: "",
orgInfo: "",
avatar: "",
code: "",
sex: null,
};
courseIds.push(item.id);
});
this.loadCouserTeacher(res.data.records, courseIds);
console.log(res.result,'lalalala');
this.recommendedList.list = res.data.records
}
})
},
getCourseData(pageIndex) {
this.isNext = false;
let { orderType, num } = this.courseList;
let course = {
pageSize: 6,
device: 1,
orderField: orderType == 1 ? "" : "studys",
orderAsc: false,
topOrder: true,
pageIndex: pageIndex,
};
apiIndex.courselist(course).then((res) => {
if (res.status == 200 && res.result.length > 0) {
let courseIds = [];
res.result.forEach((item) => {
item.authorInfo = {
aid: "",
name: "",
orgInfo: "",
avatar: "",
code: "",
sex: null,
};
courseIds.push(item.id);
});
this.loadCouserTeacher(res.result, courseIds);
console.log(res.result,'lalalala');
this.courseList.list = res.result;
//this.couname = res.result.list.name;
// if (res.result.count - pageIndex * num < 8) {
// this.pageIndex = 0;
// }
// this.isNext = true;
// }
} else {
console.log("加载课程信息失败:" + res.error);
}
});
// apiCourse.list({orderType,num,device:1}).then(res => {
// if(res.status==200){
// if(res.result.length>0){
// let courseIds=[];
// res.result.forEach(item=>{
// item.authorInfo={aid:'',name:'',orgInfo:'',avatar:'',code:''};
// courseIds.push(item.id);
// })
// this.loadCouserTeacher(res.result,courseIds);
// this.courseList.list=res.result;
// }
// }else{
// console.log('加载课程信息失败:'+res.error);
// }
// })
},
// 去掉案例的推荐课程
// changeCaseOrder(val) {
// this.caseList.orderType = val;
// this.getCaseData();
// },
//案例的参数等着需要改
getCaseData() {
apiIndex.newCases().then((res) => {
if (res.status == 200) {
if (res.result.length > 0) {
let userIds = [];
res.result.forEach((item) => {
item.authorInfo = {
aid: "",
name: "",
orgInfo: "",
avatar: "",
code: "",
sex: null,
};
if (item.authorId && item.authorId != "") {
userIds.push(item.authorId);
}
});
this.caseList.list = res.result;
this.loadCaseAuthorInfo(res.result, userIds);
}
// this.caseList.list = res.result;
} else {
console.log("加载案例错误:" + res.error);
}
});
},
loadCaseAuthorInfo(list, ids) {
//加载作者信息,头像,机构信息
if (ids.length == 0) {
return;
}
const noReapetIds = [...new Set(ids)];
apiUser.getByIds(ids).then((res) => {
if (res.status == 200) {
list.forEach((item, index) => {
res.result.some((author) => {
if (author.aid == item.authorId) {
author.orgInfo = cutOrgNamePath(author.orgInfo, 1);
item.authorInfo = author;
return true;
} else {
return false;
}
});
});
} else {
console.log("加载用户信息失败:" + res.error);
//this.$message.error(res.message);
}
});
},
getArticleData() {
let $this = this;
this.articleList.list = [];
apiIndex.articlelist(this.articleList.orderType).then((res) => {
if (res.status == 200) {
if (res.result.length > 0) {
let userIds = [];
res.result.forEach((item, idx) => {
item.authorInfo = {
aid: "",
name: "",
orgInfo: "",
avatar: "",
code: "",
sex: null,
};
userIds.push(item.sysCreateAid);
if (idx == 0) {
$this.articleList.first = item;
} else {
$this.articleList.list.push(item);
}
});
// console.log(res.result, 'res.result');
this.loadAuthorInfo(res.result, userIds);
}
} else {
console.log("加载文章错误:" + res.error);
}
});
},
changeArticleOrder(val) {
this.articleList.orderType = val;
this.getArticleData();
},
getQaData() {
let params = {
pageSize: this.qaList.num,
orderAsc: false,
orderField: this.qaList.orderType,
};
// if (this.qaList.orderType == 2) {
// params.orderField = 'praises';
// }
apiQa.indexList(params).then((res) => {
if (res.status == 200) {
if (res.result.length > 0) {
let userIds = [];
res.result.forEach((item) => {
item.authorInfo = {
aid: "",
name: "",
orgInfo: "",
avatar: "",
code: "",
sex: null,
};
userIds.push(item.sysCreateAid);
});
this.qaList.list = res.result;
this.loadAuthorInfo(res.result, userIds);
}
} else {
console.log("加载问答错误:" + res.error);
}
//console.log(res)
});
},
changeQaOrder(val) {
this.qaList.orderType = val;
this.getQaData();
},
loadCouserTeacher(list, ids) {
let that = this;
// 先查课程关联教师iD
apiCourse.getTeacherByCourseIDs(ids).then((cres) => {
if (cres.status == 200) {
let userIds = [];
list.forEach((item, index) => {
cres.result.some((courseTeahcer) => {
if (courseTeahcer.courseId == item.id) {
if (courseTeahcer.teacherIds) {
userIds.push(courseTeahcer.teacherIds[0]);
item.authorInfo.aid = courseTeahcer.teacherIds[0];
item.authorInfo.name = courseTeahcer.names[0];
if (item.authorInfo.name == "BOE教师") {
item.authorInfo.name = "";
}
}
return true;
} else {
return false;
}
});
});
//that.loadCourseAuthorInfo(list, userIds);
}
});
},
loadCourseAuthorInfo(list, ids) {
//加载作者信息,头像,机构信息
if (ids.length == 0) {
return;
}
const noReapetIds = [...new Set(ids)];
apiUser.getByIds(ids).then((res) => {
if (res.status == 200) {
list.forEach((item, index) => {
res.result.some((author) => {
if (author.aid == item.authorInfo.aid) {
item.authorInfo = author;
return true;
} else {
return false;
}
});
});
} else {
console.log("加载用户信息失败:" + res.error);
}
});
},
loadAuthorInfo(list, ids) {
//加载作者信息,头像,机构信息
if (ids.length == 0) {
return;
}
const noReapetIds = [...new Set(ids)];
apiUser.getByIds(ids).then((res) => {
if (res.status == 200) {
list.forEach((item, index) => {
res.result.some((author) => {
if (author.aid == item.sysCreateAid) {
item.authorInfo = author;
return true;
} else {
return false;
}
});
});
} else {
console.log("加载用户信息失败:" + res.error);
}
});
},
jumpRouter(item) {
this.$router.push({
path: "/qa/answer",
query: {
id: item.id,
},
});
},
},
};
</script>
<style scoped lang="scss">
.u-class {
::v-deep .el-dialog {
border-radius: 15px;
.el-dialog__headerbtn .el-dialog__close {
color: white;
position: absolute;
z-index: 99;
right: 15px;
}
}
::v-deep .el-dialog__body {
padding: 0px;
}
.ClassBoxContent {
width: 100%;
height: 396px;
// background: red;
border-radius: 15px;
.ContentBox {
width: 100%;
height: 100%;
position: absolute;
z-index: 9;
display: flex;
.left,
.right {
height: calc(100% - 30px);
}
.left {
padding-left: 30px;
width: 48%;
margin-top: -32px;
.title {
width: 200px;
height: 59px;
line-height: 59px;
text-align: center;
margin-left: -8px;
font-size: 38px;
color: white;
margin-top: 42.97px;
padding-top: 5px;
text-shadow: 0 6px 3px rgba(96, 85, 243, 0.4);
}
.jy {
color: white;
font-size: 20px;
margin-top: 87.53px;
font-weight: 400;
}
.msg {
margin-top: 5px;
color: rgba(255, 255, 255, 0.85);
width: 326px;
text-align: justify;
line-height: 20px;
}
.bottom {
width: 100px;
height: 1px;
background: rgba(255, 255, 255, 0.85);
margin-top: 40px;
}
}
.right {
// padding-left: 10px;
width: 50%;
.tyl {
cursor: pointer;
width: calc(100% - 20px);
background: rgba(255, 255, 255, 0.95);
box-shadow: 0px 2px 12px 0px rgba(0, 0, 0, 0.1);
border-radius: 4px;
height: 160px;
margin-top: 163px;
.tyl_title {
width: 100%;
padding-left: 20px;
padding-top: 20px;
.tyl_title_img {
width: 18px;
height: 18px;
}
.tyl_title_msg {
font-size: 20px;
margin-left: 10px;
color: #333333;
font-weight: 600;
}
}
.tyl_jy {
margin-top: 6.5px;
font-size: 14px;
font-weight: 600;
padding-left: 20px;
color: #333333;
}
.tyl_msg {
width: 350.36px;
margin-top: 13px;
margin-left: 20px;
font-size: 14px;
color: #666666;
font-weight: 400;
letter-spacing: 0;
text-align: justify;
}
}
.tyl:hover {
border: 0.96px solid rgba(140, 105, 242, 1);
box-shadow: 7px 5px 6px 0px rgba(76, 31, 221, 0.3);
}
.text_msg{
margin: 43px 0 0 222px;
font-size: 14px;
color: #000;
}
.cyl {
cursor: pointer;
width: calc(100% - 20px);
background: rgba(255, 255, 255, 0.95);
box-shadow: 0px 2px 12px 0px rgba(0, 0, 0, 0.1);
border-radius: 4px;
height: 180px;
margin-top: 10px;
.tyl_title {
width: 100%;
padding-left: 20px;
padding-top: 20px;
.tyl_title_img {
width: 18px;
height: 18px;
}
.tyl_title_msg {
font-size: 20px;
margin-left: 10px;
color: #333333;
font-weight: 600;
}
}
.tyl_jy {
margin-top: 6.5px;
font-size: 14px;
font-weight: 600;
padding-left: 20px;
color: #333333;
}
.tyl_msg {
width: 350.36px;
margin-top: 13px;
margin-left: 20px;
font-size: 14px;
color: #666666;
font-weight: 400;
letter-spacing: 0;
text-align: justify;
}
}
.cyl:hover {
border: 0.96px solid rgba(140, 105, 242, 1);
box-shadow: 7px 5px 6px 0px rgba(76, 31, 221, 0.24);
}
}
}
.img {
width: 835px;
height: 428px;
height: 428px;
margin-left: -1px;
margin-top: -1px;
position: absolute;
top: 0px;
}
}
}
.xindex-course-image:hover {
transform: scale(1.3) translateY(-15px);
transition: all 0.6s;
}
.Recent {
vertical-align: top;
width: 22px;
height: 22px;
}
.jinian-medal-img {
text-align: center;
padding-top: 10px;
.jntext1 {
height: 56px;
font-size: 40px;
font-family: PingFangSC-Semibold, PingFang SC;
font-weight: 600;
color: #924504;
line-height: 56px;
}
.jntext2 {
margin-top: 30px;
height: 30px;
font-size: 22px;
font-family: PingFangSC-Semibold, PingFang SC;
font-weight: 600;
color: #924504;
line-height: 30px;
}
.jntext3 {
margin-top: 10px;
height: 50px;
font-size: 18px;
font-family: PingFangSC-Regular, PingFang SC;
font-weight: 400;
color: #924504;
line-height: 25px;
}
}
.medalbox {
background: transparent !important;
::v-deep .el-dialog {
background: transparent !important;
box-shadow: none !important;
.el-dialog__header {
display: none !important;
}
.el-dialog__body {
// width: 320px !important;
// height: 420px !important;
background: transparent !important;
}
}
}
.case-inter-orgin {
// width: 45%;
// float: left;
margin-left: 5px;
line-height: 30px;
font-size: 14px;
color: #6e7b84;
}
.tobe-icon {
width: 8px;
height: 14px;
margin-top: 1.5px;
margin-left: 8px;
}
.grade {
width: 70px;
height: 30px;
display: inline-block;
font-size: 16px;
color: #9d6110;
line-height: 30px;
background: url("../../public/images/homeWu/gradebgimg.png");
}
.article-li {
display: flex;
width: 100%;
.article-img {
// width: 252px;
// height: 142px;
border-radius: 4px;
// margin-right: 20px;
img {
// width: 252px;
// height: 142px;
border-radius: 4px;
}
}
.article-right {
width: 100%;
.article-info-title {
font-size: 16px;
font-weight: 600;
color: #00253e;
margin-bottom: 9px;
// width: 50%;
}
.article-info-summary {
// font-size: 14px;
font-weight: 400;
color: #6e7b84;
margin-bottom: 15px;
}
.article-bottom {
display: flex;
justify-content: space-between;
::v-deep .uavatar {
// width: 32px;
// height: 32px;
}
}
.article-info-time {
font-size: 12px;
font-weight: 400;
color: #6e7b84;
}
}
}
.course-ran-bg {
background: linear-gradient(180deg, #d7eaff 1%, #fafafa 24%);
}
.personal-panel {
position: absolute;
right: 8%;
top: 105px;
// background: url('/images/homeWu/personal-bgimg.png');
background: rgba($color: #fff, $alpha: 0.46);
border-radius: 8px;
z-index: 999;
backdrop-filter: blur(10px);
text-align: center;
color: #fff;
.personal-img {
width: 68px;
height: 68px;
margin: 0 auto;
::v-deep .el-avatar {
width: 68px;
height: 68px;
img {
width: 100% !important;
}
}
}
.personal-name {
font-weight: 600;
font-size: 18px;
margin-top: 12px;
color: #333333;
}
.personal-info {
font-size: 14px;
color: #000000;
margin-top: 10px;
}
.last-study-info {
display: flex;
justify-content: space-between;
padding: 0 10px;
font-size: 16px;
}
.personal-box {
width: 100%;
height: 47px;
background: #387df7;
border-radius: 4px;
line-height: 47px;
padding-left: 15px;
padding-right: 32px;
box-sizing: border-box;
display: flex;
// margin-top: 20px;
justify-content: space-between;
position: relative;
.personal-box-img {
position: absolute;
width: 24px;
height: 24px;
left: 10px;
top: -8px;
}
}
.personal-ul {
display: flex;
li {
flex: 1;
text-align: center;
}
.label {
color: #999999;
font-size: 12px;
text-align: center;
}
p {
margin-top: 5px;
text-align: center;
color: #000;
span {
font-size: 22px;
text-align: center;
color: #333;
font-weight: 500;
}
}
}
}
.list-active {
display: none;
// width: 458px;
width: 135%;
height: 165px;
padding: 20px;
background: #ffffff;
box-sizing: border-box;
box-shadow: 0px 2px 12px 0px rgba(0, 0, 0, 0.05);
border-radius: 2px;
border: 1px solid #edeff0;
position: absolute;
top: 30px;
right: -22px;
z-index: 999;
.list-content {
display: flex;
padding-bottom: 20px;
border-bottom: 1px solid #edeff0;
.list-img {
width: 125px;
height: 70px;
position: relative;
::v-deep .el-image {
border-radius: 4px !important;
}
img {
width: 100%;
height: 100%;
}
.course-type {
position: absolute;
// left: 0;
top: 0;
right: 0;
height: 20;
line-height: 20px;
font-size: 12px;
color: #ffffff;
padding: 0px 8px;
background: #f99000;
border-radius: 0px 0px 0px 10px;
}
}
.list-text {
flex: 1;
margin-left: 12px;
h6 {
font-size: 14px;
margin: 0px;
font-weight: 500;
line-height: normal;
color: #04243c;
}
span {
font-size: 14px;
color: #6e7b84;
}
}
}
.list-bottom {
padding-top: 10px;
::v-deep .interact-bar-btns {
justify-content: space-between !important;
.interact-bar-btn {
margin: 0 !important;
}
}
}
}
.list-info {
position: relative;
.span {
display: flex;
}
}
.list-info:hover .list-active {
// transition: all 0.5s;
display: block;
}
// .swiper-pagination-fraction, .swiper-pagination-custom, .swiper-container-horizontal > .swiper-pagination-bullets {
// width: 108px;
// height: 38px;
// }
.bannbox {
width: 100%;
height: 520px;
text-align: center;
filter: blur(5px);
z-index: -1;
background-size: 100% 100%;
}
::v-deep.swiper-slide .games .swiper-slide-active {
text-align: center !important;
}
#container {
position: absolute;
height: 520px;
top: 0;
width: 100%;
}
.banner-img {
height: 520px;
position: absolute;
top: 0;
left: 0;
right: 0;
transform: (-50%, -50%);
}
.course-banner {
height: 520px;
// background: url('/images/course-banner.png');
.swiper-button-prev {
height: 38px;
// top:auto;
padding: 0 16px;
background: rgba($color: #000000, $alpha: 0.8)
url("../assets/images/icon/ban-left.png") no-repeat;
background-size: 12px 18px;
background-position: 16px 10px;
bottom: 66px;
border-radius: 19px 0 0 19px;
}
.swiper-button-next {
height: 38px;
// right: 52.65%;
bottom: 66px;
top: auto;
padding: 0 16px;
background: rgba($color: #000000, $alpha: 0.1)
url("../assets/images/icon/ban-right.png") no-repeat;
background-size: 12px 18px;
background-position: 6px 10px;
border-radius: 0 19px 19px 0;
}
.swiper-pagination-bullets {
// background: #000;
left: 60px;
bottom: 66px;
}
::v-deep .swiper-pagination {
line-height: 25px;
height: 32px;
border-radius: 19px;
// background: rgba($color: #000000, $alpha: 0.1);
width: auto;
left: 45%;
padding: 0 20px;
border-radius: 19px;
.swiper-pagination-bullet {
position: relative;
width: 25px;
height: 5px;
margin-top: 10px;
background: #fff;
opacity: 1 !important;
// background: rgba($color: #fff, $alpha: 0.5);
border-radius: 2px;
}
.swiper-pagination-bullet::before {
content: "";
position: absolute;
top: -20px;
bottom: -20px;
left: -2px;
right: -2px;
}
.swiper-pagination-bullet-active {
height: 5px;
opacity: 1 !important;
margin-top: 10px;
width: 25px;
background: #387df7;
// background: rgba($color: #fff, $alpha: 0.8);
border-radius: 2px;
}
.swiper-container {
// background-color: rgba($color: #000000, $alpha: 0.2);
}
}
}
.case-orginfo {
// line-height: 25px;
height: 45px;
}
.three-line-ellipsis {
overflow: hidden;
text-overflow: ellipsis;
box-sizing: border-box;
-webkit-line-clamp: 3;
word-break: break-all;
display: -webkit-box;
-webkit-box-orient: vertical;
}
// .case-box {
// display: flex;
.xindex-case {
&:nth-child(2) {
.case-top {
background: linear-gradient(333deg, #d2def3 0%, #b4c4e0 100%);
}
}
&:last-child {
.case-top {
background: linear-gradient(153deg, #a4d3df 0%, #b4dce6 100%);
}
}
.case-index {
position: relative;
// width: 408px;
// height: 396px;
background: linear-gradient(180deg, #ffffff 0%, #fafafa 100%);
border-radius: 8px;
box-sizing: border-box;
margin-right: 0;
}
.case-inter {
position: absolute;
width: 100%;
.case-inter-box {
display: flex;
margin-right: 46px;
.case-inter-left {
flex: 1;
// display: flex;
}
.interact-bar-index {
margin-left: auto;
::v-deep .svg-icon {
padding-top: 6px;
}
}
}
}
.case-top {
// height: 120px;
background: linear-gradient(153deg, #82a8d1 0%, #a4c5e8 100%);
border-radius: 8px 8px 0px 0px;
}
.case-conent {
position: absolute;
// transform:translate(-50%,-50%);
top: -50px;
left: 0;
right: 0;
bottom: 0;
margin: auto;
// width: 350px;
// height: 274px;
background: #ffffff;
box-shadow: 0px 1px 10px 0px rgba(4, 36, 60, 0.05);
border-radius: 4px;
// padding: 30px;
.cast-time {
font-size: 14px;
color: #6e7b84;
height: 24px;
.time-one {
height: 24px;
background: rgba($color: #387df7, $alpha: 0.1);
border-radius: 4px;
// padding: 3px 10px;
color: #387df7;
font-size: 12px;
}
}
.case-title {
// height: 48px;
// font-size: 16px;
font-weight: 600;
color: #00253e;
// line-height: 24px;
}
.case-text {
// height: 60px;
// font-size: 14px;
color: #6e7b84;
// line-height: 20px;
// margin-bottom: 30px;
}
::v-deep .case-info {
.interact-bar-btns {
justify-content: space-between !important;
.interact-bar-btn {
margin: 0;
}
}
}
}
}
//}
.casetwo {
border: 1px solid #f0f0f0;
width: 100%;
height: 245px;
margin-bottom: 15px;
position: relative;
background-color: #fff;
.case-top {
height: 70px;
background-image: linear-gradient(to right, #b8c7e2, #d0dcf3);
}
}
// .qa-dai{
// color: #5da1ff;
// }
.Uxtext {
font-weight: 450;
margin-top: 5px;
margin-left: 15px;
font-size: 14px;
color: #3d3d3d;
cursor: pointer;
position: relative;
}
.uxicon {
font-size: 10px;
position: absolute;
top: -14px;
left: 98%;
}
.text-status1 {
// padding:3px;
color: #1ea0fa;
}
.text-status2 {
// padding: 3px;
color: #00aa00;
}
.text-status3 {
// padding: 3px;
color: #588afc;
margin-left: -10px;
}
.qa-yi {
color: blue;
}
.el-card {
border: 1px solid #f0f0f0;
}
.portal-content {
font-family: "Noto Sans SC";
}
// .one-line-ellipsis {
// width: 100%;
// white-space: nowrap;
// word-break: break-all;
// text-overflow: ellipsis;
// display: -webkit-box;
// -webkit-box-orient: vertical;
// -webkit-line-clamp: 1; /* 这里是超出几行省略 */
// }
.two-line-ellipsis {
display: -webkit-box;
// white-space:pre-wrap;
overflow: hidden;
// text-overflow:ellipsis;
-webkit-box-orient: vertical;
-webkit-line-clamp: 2;
box-sizing: border-box;
}
.course-card {
// padding: 30px;
padding-bottom: 22px;
// width: 410px;
// margin-bottom: 30px;
// margin-right: 36px;
box-sizing: border-box;
position: relative;
background-color: #ffffff;
.course-image-box {
position: relative;
.course-type {
position: absolute;
top: 0px;
right: 0px;
width: 60px;
height: 24px;
line-height: 24px;
text-align: center;
background-color: #f99000;
border-radius: 2px 4px 2px 14px;
font-size: 12px;
color: #ffffff;
-moz-user-select: none;
/*火狐*/
-webkit-user-select: none;
/*webkit浏览器*/
-ms-user-select: none;
/*IE10*/
-khtml-user-select: none;
/*早期浏览器*/
user-select: none;
}
.course-type-title {
position: absolute;
top: 5px;
right: 0px;
width: 90px;
height: 30px;
line-height: 30px;
text-align: center;
color: #ffffff;
-moz-user-select: none;
/*火狐*/
-webkit-user-select: none;
/*webkit浏览器*/
-ms-user-select: none;
/*IE10*/
-khtml-user-select: none;
/*早期浏览器*/
user-select: none;
}
.course-flag {
height: 26px;
position: absolute;
top: 15px;
right: 0;
}
.course-tip {
width: 100%;
height: 26px;
position: absolute;
bottom: 0;
padding: 0 10px;
color: #fff;
font-size: 14px;
.course-study-count {
float: left;
}
.course-time {
float: right;
}
}
}
.course-title {
margin: 16px 0 16px 0;
height: 44px;
-moz-user-select: none;
/*火狐*/
-webkit-user-select: none;
/*webkit浏览器*/
-ms-user-select: none;
/*IE10*/
-khtml-user-select: none;
/*早期浏览器*/
user-select: none;
}
.course-title-box {
display: flex;
.interact-bar-index {
}
}
.course-author {
// margin: 5px 15px;
// padding-bottom: 10px;
display: flex;
justify-content: space-between;
.course-author-left {
font-size: 14px;
color: #6e7b84;
-moz-user-select: none;
/*火狐*/
-webkit-user-select: none;
/*webkit浏览器*/
-ms-user-select: none;
/*IE10*/
-khtml-user-select: none;
/*早期浏览器*/
user-select: none;
}
}
.study-num {
font-size: 14px;
color: #6e7b84;
// margin-left: 12px;
-moz-user-select: none;
/*火狐*/
-webkit-user-select: none;
/*webkit浏览器*/
-ms-user-select: none;
/*IE10*/
-khtml-user-select: none;
/*早期浏览器*/
user-select: none;
}
.course-score {
padding: 10px 15px;
height: 40px;
display: flex;
justify-content: space-between;
align-items: center;
// border-top: 1px solid #ccc;
.course-score-star {
flex: 1;
}
}
}
.modules {
margin-top: 20px;
// width: 100%;
display: flex;
.modules-title {
.modules-text {
height: 28px;
font-size: 20px;
font-family: PingFangSC-Semibold-, PingFangSC-Semibold;
font-weight: 700;
color: #333333;
}
.recommend {
vertical-align: text-bottom;
height: 26px;
}
.quyer-tag {
margin-left: 15px;
a {
color: #333333;
font-size: 14px;
margin: 0 15px;
display: inline-block;
text-decoration: none;
outline: none;
}
.current {
width: 44px;
height: 26px;
background: #387df7;
border-radius: 4px;
color: #fff;
line-height: 26px;
text-align: center;
}
// .current::after {
// content: '';
// width: 18px;
// height: 2px;
// background-color: #5da1ff;
// margin: 0 auto;
// display: block;
// }
}
.more {
float: right;
margin-top: 7px;
margin-right: 30px;
color: #333333;
font-size: 14px;
}
}
.modules-list {
margin-top: 30px;
// margin-bottom: 15px;
// margin-right: 36px;
.case-card {
// width: 593px;
margin-bottom: 15px;
.case-info-image-box {
position: relative;
.case-info {
width: 385px;
.case-info-title {
font-size: 18px;
color: #343434;
margin-bottom: 5px;
.case-info-time {
font-size: 12px;
color: #999999;
float: right;
margin-top: 8px;
}
}
.case-info-summary {
font-size: 12px;
color: #666666;
height: 82px;
line-height: 18px;
}
}
img {
width: 160px;
height: 105px;
position: absolute;
top: 5px;
right: 0;
}
}
.case-info-box {
.case-info {
.case-info-title {
font-size: 18px;
color: #343434;
margin-bottom: 5px;
.case-info-time {
font-size: 12px;
color: #999999;
float: right;
margin-top: 8px;
}
}
.case-info-summary {
font-size: 12px;
color: #666666;
height: 82px;
line-height: 18px;
}
}
}
.case-other-info {
height: 40px;
margin-top: 10px;
display: flex;
justify-content: space-between;
}
}
.article-card {
//width: 100%;
background: #fff;
// padding: 30px;
border-radius: 8px;
.article-card-left {
// float: left;
.article-card-box {
.article-info-image-box {
border-radius: 4px;
.article-info {
height: 400px;
.article-info-title {
font-size: 16px;
color: #00253e;
font-weight: 500;
margin-bottom: 5px;
margin-top: 5px;
}
.article-info-summary {
font-size: 14px;
color: #6e7b84;
height: 160px;
line-height: 22px;
}
}
img {
width: 470px;
height: 330px;
// width: 100%;
// height: 100%;
}
}
}
}
.article-card-right {
// float: right;
// width: 68%;
flex: 1;
margin-left: 28px;
.article-card-box {
// height: 160px;
margin-bottom: 16px;
padding-bottom: 16px;
&:last-child {
margin-bottom: 0px;
padding-bottom: 0px;
}
.article-info-box {
.article-info {
display: flex;
.article-image {
// width: 150px;
// height: 150px;
// margin-right: 10px;
width: 140px;
height: 105px;
margin-top: 10px;
margin-left: 20px;
}
.article-body {
flex: 1;
.article-info-title {
font-size: 18px;
color: #343434;
margin-bottom: 5px;
.article-info-time {
font-size: 12px;
color: #999999;
float: right;
margin-top: 8px;
font-weight: 500;
}
}
.article-info-summary {
padding-top: 9px;
font-size: 14px;
color: #666666;
height: 43px;
line-height: 18px;
font-weight: 500;
margin-bottom: 20px;
}
}
}
}
}
.article-card-box:not(:last-child) {
border-bottom: 1px solid #ededed;
}
}
.article-other-info {
display: flex;
}
}
.qa-card {
// width: 298px;
// height: 320px;
// padding: 30px;
box-sizing: border-box;
box-shadow: 0px 2px 12px 0px rgba(0, 0, 0, 0.05);
border-radius: 8px;
// margin-right: 36px;
background: #fff;
&:last-child {
margin-right: 0;
}
.qa-top {
& span:first-child {
height: 24px;
background: rgba($color: #387df7, $alpha: 0.05);
// padding: 3px 10px;
border-radius: 4px;
font-size: 12px;
color: #387df7;
// margin-right: 46px;
}
span {
// font-size: 14px;
color: #6e7b84;
}
}
.qa-center {
position: relative;
// margin-top: 20px;
// width: 238px;
// height: 152px;
background: rgba($color: #04243c, $alpha: 0.04);
border-radius: 4px;
// padding: 20px;
.qa-views {
position: absolute;
color: #6e7b84;
// font-size: 14px;
// left: 20px;
// bottom: 20px;
}
}
.qa-char {
display: flex;
}
}
}
}
</style>