Browse Source

feat DP-1212 学习班响应式

pull/4/head
Wangwei 2 years ago
parent
commit
d6b93cecbf
  1. 24
      src/assets/css/base.css
  2. 105
      src/assets/css/m.css
  3. BIN
      src/assets/img/fcrp2022.png
  4. 30
      src/components/banner.vue
  5. 6
      src/router.js
  6. 19
      src/utils/advertisementSDK.js
  7. 470
      src/views/class/class.vue
  8. 77
      src/views/class/classMenu.vue
  9. 343
      src/views/class/class_homework.vue
  10. 317
      src/views/class/class_lesson.vue
  11. 1377
      src/views/class/indexClass.vue
  12. 190
      src/views/class/play.vue
  13. 1420
      src/views/video/indexVideo.vue

24
src/assets/css/base.css

@ -120,6 +120,14 @@ a:hover {
flex-direction: row;
}
/* 列表 */
.flex-7 {
display: flex;
justify-content: space-between;
flex-wrap: wrap;
}
/* 文字居中 */
.font-center {
@ -407,6 +415,9 @@ a:hover {
.colf26 {
color: #f26c4f;
}
.colffa {
color: #ffa940;
}
.col28c {
color: #28c346;
@ -414,12 +425,21 @@ a:hover {
.col27c {
color: #27c346;
}
.col52c {
color: #52c41a;
}
.col333 {
color: #333;
}
.col000 {
color: #000;
}
.col808 {
color: #808696;
}
.col515 {
color: #515a6e;
}
.mt24 {
margin-top: 24px;
@ -566,10 +586,10 @@ a:hover {
width: 200px;
height: 44px;
line-height: 44px;
background: linear-gradient(270deg, #FF7C6B 0%, #FF4B72 100%);
background: linear-gradient(270deg, #ff7c6b 0%, #ff4b72 100%);
border-radius: 8px;
}
.btn-hot:hover{
.btn-hot:hover {
color: #fff;
}

105
src/assets/css/m.css

@ -1,61 +1,70 @@
@media screen and (max-width: 1200px) {
.mainbox {
width: 100%;
padding: 0 20px;
}
.m-pd20{
padding: 0 20px;
}
.w1200 {
width: 100%;
}
/* 头部 */
.header,
.edu-nav-box {
display: none !important;
}
.edu-nav-box-m,
.ad-m {
display: block;
}
/* end 头部 */
.m-dn {
display: none !important;
}
.m-db {
display: block !important;
}
.m-f12{font-size: 12px !important;}
.m-f14{font-size: 14px !important;}
.mainbox {
width: 100%;
padding: 0 20px;
}
.m-pd20 {
padding: 0 20px;
}
.w1200 {
width: 100%;
}
/* 头部 */
.header,
.edu-nav-box {
display: none !important;
}
.edu-nav-box-m,
.ad-m {
display: block;
}
/* end 头部 */
.m-dn {
display: none !important;
}
.m-db {
display: block !important;
}
.m-f12 {
font-size: 12px !important;
}
.m-f14 {
font-size: 14px !important;
}
.m-bd-box {
width: 100%;
background: #fff;
border-radius: 8px;
border: 1px solid #ceddf2;
}
}
@media screen and (max-width: 800px) {
.m-dn-800 {
display: none !important;
}
.m-dn-800 {
display: none !important;
}
.m-db-800 {
display: block !important;
}
.m-db-800 {
display: block !important;
}
}
:root {
--van-red: #0082fc;
--van-red: #0082fc;
}
// 移动端
@media screen and (max-width: 500px) {
.m-dn-500 {
display: none !important;
}
.m-dn-500 {
display: none !important;
}
.m-db-500 {
display: block !important;
}
.m-db-500 {
display: block !important;
}
}

BIN
src/assets/img/fcrp2022.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 536 KiB

30
src/components/banner.vue

@ -112,15 +112,7 @@
</div>
<div class="mbg ad-m dn">
<a :href="cover.click_url" target="_blank">
<el-image :src="cover.img_url" style=" width: 100%; position: static">
<template #error>
<div style="width: 100%; height: 200px;" class="flex-5">
<i class="el-icon-loading f24 colb3c"></i>
</div>
</template>
</el-image>
</a>
<div id="AD-M-1d4b2f969fcd43a99205e88c53b05d8d"></div>
</div>
</template>
@ -155,7 +147,20 @@ export default {
// fetchgetCover();
// banner 广
window.fineAd.getAdvertisement({ adId: "1d4b2f969fcd43a99205e88c53b05d8d" });
let needMobile = document.body.clientWidth < 1200;
if (needMobile) {
window.fineAd.getAdvertisement({ adId: "1d4b2f969fcd43a99205e88c53b05d8d", needMobile: needMobile, className: "ad-m-banner" });
} else {
window.fineAd.getAdvertisement({ adId: "1d4b2f969fcd43a99205e88c53b05d8d" });
}
window.addEventListener("resize", function() {
let needMobile = document.body.clientWidth < 1200;
if (needMobile) {
window.fineAd.getAdvertisement({ adId: "1d4b2f969fcd43a99205e88c53b05d8d", needMobile: needMobile, className: "ad-m-banner", resize: true });
} else {
window.fineAd.getAdvertisement({ adId: "1d4b2f969fcd43a99205e88c53b05d8d", resize: true });
}
});
const fetchgetcateHot = async (class1) => {
const res = await getcateHot(class1);
@ -425,5 +430,10 @@ export default {
margin: 0 auto;
display: block;
}
::v-deep .ad-m-banner {
width: 100% !important;
height: auto !important;
border-radius: 8px;
}
}
</style>

6
src/router.js

@ -73,6 +73,7 @@ const routes = [
component: () => import('@/views/class/indexClass.vue'),
meta: {
title: '学习班 - 帆软学院',
isMobile: 1,
},
},
@ -86,6 +87,7 @@ const routes = [
meta: {
title: '课程章节 - 学习班',
active: 'class',
isMobile: 1,
},
children: [
{
@ -96,6 +98,7 @@ const routes = [
title: '课程章节 - 学习班',
active: 'class',
tab: 'class_lesson',
isMobile: 1,
},
},
{
@ -105,6 +108,7 @@ const routes = [
meta: {
title: '我的作业 - 学习班',
active: 'class',
isMobile: 1,
},
},
{
@ -115,6 +119,7 @@ const routes = [
title: '班级论坛 - 学习班',
active: 'class',
tab: 'class_forum',
isMobile: 1,
},
},
{
@ -125,6 +130,7 @@ const routes = [
title: '班级论坛 - 学习班',
active: 'class',
tab: 'class_forum',
isMobile: 1,
},
},
],

19
src/utils/advertisementSDK.js

@ -32,11 +32,16 @@ const config = ({ debug = false, dev = false, adApiUrl }) => {
* @param adId2 如果adId没有匹配到则显示第二个广告位
* @param top 顶边距
* @param bottom 底边距
* @param needMobile 兼容移动端ID显示广告
* @param className 样式名称
*/
const getAdvertisement = async ({adId, adId2, top, bottom}) => {
const getAdvertisement = async ({adId, adId2, top, bottom, needMobile, className, resize = false}) => {
const { debug, dev } = fineAd.options;
const dataPath = dev ? 'test' : 'prod';
await axios.get("https://shequ-oss.obs.cn-east-2.myhuaweicloud.com/digit/ad/data/" + dataPath + "/advertisement.json?v=" + Date.now())
const getClassName = className ? `class="${className}"` : '';
const dateNow = resize ? '1' : Date.now();
fineAd.options.domId = needMobile ? 'AD-M-' : 'AD-';
await axios.get("https://shequ-oss.obs.cn-east-2.myhuaweicloud.com/digit/ad/data/" + dataPath + "/advertisement.json?v=" + dateNow)
.then(function (res) {
var isAdId = false;
res.data.forEach((item) => {
@ -49,9 +54,11 @@ const getAdvertisement = async ({adId, adId2, top, bottom}) => {
console.log('picSize',getSize);
console.log('top',top);
console.log('bottom',bottom);
console.log('className',className);
console.log('needMobile',needMobile);
console.groupEnd();
}
let adDomId = document.getElementById('AD-' + adId);
let adDomId = document.getElementById(fineAd.options.domId + adId);
adDomId.innerHTML='';
window.fineAd.adMargin({ adId:adId, top:top });
// 无链接图片广告
@ -60,7 +67,7 @@ const getAdvertisement = async ({adId, adId2, top, bottom}) => {
}
// 有链接图片广告
if(item.adLink && item.type===1){
adDomId.innerHTML+=`<a onClick="window.fineAd.advertisementHits('${adId}');" href="${item.adLink}" target="_blank"><img width="${getSize.w}" height="${getSize.h}" src="${item.picUrl}"></a>`;
adDomId.innerHTML+=`<a onClick="window.fineAd.advertisementHits('${adId}');" href="${item.adLink}" target="_blank"><img ${getClassName} width="${getSize.w}" height="${getSize.h}" src="${item.picUrl}"></a>`;
}
// 有链接文本广告
if(item.adLink && item.type===2){
@ -84,7 +91,7 @@ const getAdvertisement = async ({adId, adId2, top, bottom}) => {
console.log('bottom',bottom);
console.groupEnd();
}
let adDomId = document.getElementById('AD-' + adId2);
let adDomId = document.getElementById(fineAd.options.domId + adId2);
adDomId.innerHTML='';
window.fineAd.adMargin({ adId:adId2, top:top });
// 有链接图片广告
@ -112,7 +119,7 @@ const getAdvertisement = async ({adId, adId2, top, bottom}) => {
* @param bottom 底边距
*/
const adMargin = ({ adId, top = 0, bottom = 0 }) => {
let adDomId = document.getElementById('AD-' + adId);
let adDomId = document.getElementById(fineAd.options.domId + adId);
if(top > 0){
adDomId.innerHTML+=`<div style="height:${top}px;"></div>`;
}else if(bottom > 0){

470
src/views/class/class.vue

@ -3,39 +3,54 @@
<div class="mainbox topbox">
<div class="infobox">
<div class="til flex-1">
<h1>{{topInfo.class_title}}</h1>
<div class="end_time f12 colfff flex-1" v-if="topInfo.end_time">{{topInfo.end_time}}</div>
<h1>{{ topInfo.class_title }}</h1>
<div class="end_time f12 colfff flex-1" v-if="topInfo.end_time">{{ topInfo.end_time }}</div>
</div>
<div class="ress flex-3" v-if="topInfo.progress_learning">
<div class="ressbox study-progress flex-2">
<p class="fw500">我的学习进度 {{topInfo.progress_learning.progress}}/{{topInfo.progress_learning.total}}</p>
<el-progress class="progress" :show-text="false" color="#0082FC" :percentage="topInfo.proLearning">
</el-progress>
<p class="fw500 my-progress-text">我的学习进度 {{ topInfo.progress_learning.progress }}/{{ topInfo.progress_learning.total }}</p>
<el-progress class="progress" :show-text="false" color="#0082FC" :percentage="topInfo.proLearning"> </el-progress>
<div class="last-class f12 flex-1">
<span class="col617">上次学至</span>
<a class="last-til col008" :href="'play/'+classid+'/'+topInfo.last_study.lid">
<el-tooltip class="item" effect="dark" :content="'点击继续学习:'+topInfo.last_study.title" placement="bottom">
<span>{{topInfo.last_study.title}}</span>
<a class="last-til col008" :href="'play/' + classid + '/' + topInfo.last_study.lid">
<el-tooltip class="item" effect="dark" :content="'点击继续学习:' + topInfo.last_study.title" placement="bottom">
<span>{{ topInfo.last_study.title }}</span>
</el-tooltip>
</a>
</div>
</div>
<div class="ressbox task-progress flex-2">
<p class="fw500">我的作业进度 {{topInfo.progress_homework.progress}}/{{topInfo.progress_homework.total}}</p>
<el-progress class="progress" :show-text="false" color="#27C346" :percentage="topInfo.proHomework">
</el-progress>
<p class="fw500 my-progress-text">我的作业进度 {{ topInfo.progress_homework.progress }}/{{ topInfo.progress_homework.total }}</p>
<el-progress class="progress" :show-text="false" color="#27C346" :percentage="topInfo.proHomework"> </el-progress>
<div class="meta flex-1">
<div class="li col617 flex-1" style="margin-right: 38px;"><span>我的作业平均分</span>
<strong>{{topInfo.average}}</strong>
<div class="li col617 flex-1" style="margin-right: 38px;">
<span>我的作业平均分</span>
<strong>{{ topInfo.average }}</strong>
</div>
<div class="li col617 flex-1">
<span>班级排名</span> <strong>{{ topInfo.class_rank }}</strong>
</div>
<div class="li col617 flex-1"><span>班级排名</span> <strong>{{topInfo.class_rank}}</strong></div>
</div>
</div>
</div>
</div>
<div>
<div></div>
</div>
</div>
<div class="mainbox mian-news-box" v-if="isAuth && com_user_token && classNews.length > 0">
<div class="m-bd-box dn m-db">
<div class="clss-news-box">
<h3 class="til">课程须知</h3>
<ul class="flex-7 ul-box">
<li class="item" v-for="(item, i) in classNews" :key="i">
<a v-if="item.url" :href="item.url" target="_blank" class="col008 f12">
<div v-html="item.title" class="hide-txt"></div>
</a>
<div v-else><span v-html="item.title" class="hide-txt"></span></div>
</li>
</ul>
</div>
</div>
</div>
@ -47,43 +62,28 @@
<div class="listbox flex-3">
<!-- 左侧布局 -->
<div class="lf-box">
<div v-if="topInfo.teacher===1">
<el-menu :router="true" :default-active=" $route.name === 'class_lesson' ? `/class/${classid}` : 0"
class="el-menu-demo" mode="horizontal" text-color="#617288" active-text-color="#0082fc">
<!--
<el-menu-item><a :href="'https://bbs.fanruan.com/classroom/'+classid+'/student'" target="_blank">学生管理</a></el-menu-item>
<el-menu-item><a :href="'https://bbs.fanruan.com/classroom/'+classid+'/homework'" target="_blank">批改作业</a></el-menu-item>
<el-menu-item><a :href="'https://bbs.fanruan.com/classroom/'+classid+'/schedule'" target="_blank">教学进度管理</a></el-menu-item>
<el-menu-item><a :href="'https://bbs.fanruan.com/classroom/'+classid+'/board'" target="_blank">公告栏管理</a></el-menu-item> -->
<el-menu-item :index="'/class/'+classid" :class="$route.name === 'class_lesson' ? 'is-active':'' ">课程章节
</el-menu-item>
<el-menu-item :index="'/class/admin/student/'+classid"
:class="$route.name === 'student_admin_class' ? 'is-active':'' ">学生管理</el-menu-item>
<el-menu-item :index="'/class/admin/homework/'+classid"
:class="$route.name === 'homework_admin_class' ? 'is-active':'' ">批改作业</el-menu-item>
<el-menu-item :index="'/class/admin/schedule/'+classid"
:class="$route.name === 'schedule_admin_class' ? 'is-active':'' ">教学进度管理</el-menu-item>
<el-menu-item :index="'/class/admin/notice/'+classid"
:class="$route.name === 'notice_admin_class' ? 'is-active':'' ">公告栏管理</el-menu-item>
<div v-if="topInfo.teacher === 1">
<el-menu :router="true" :default-active="$route.name === 'class_lesson' ? `/class/${classid}` : 0" class="el-menu-demo" mode="horizontal" text-color="#617288" active-text-color="#0082fc">
<el-menu-item :index="'/class/' + classid" :class="$route.name === 'class_lesson' ? 'is-active' : ''">课程章节 </el-menu-item>
<el-menu-item :index="'/class/admin/student/' + classid" :class="$route.name === 'student_admin_class' ? 'is-active' : ''" v-if="isPc">学生管理</el-menu-item>
<el-menu-item :index="'/class/admin/homework/' + classid" :class="$route.name === 'homework_admin_class' ? 'is-active' : ''" v-if="isPc">批改作业</el-menu-item>
<el-menu-item :index="'/class/admin/schedule/' + classid" :class="$route.name === 'schedule_admin_class' ? 'is-active' : ''" v-if="isPc">教学进度管理</el-menu-item>
<el-menu-item :index="'/class/admin/notice/' + classid" :class="$route.name === 'notice_admin_class' ? 'is-active' : ''" v-if="isPc">公告栏管理</el-menu-item>
</el-menu>
</div>
<div v-else>
<el-menu :router="true" :default-active=" $route.name === 'class_lesson' ? `/class/${classid}` : 0"
class="el-menu-demo" mode="horizontal" text-color="#617288" active-text-color="#0082fc">
<el-menu-item :index="'/class/'+classid" :class="$route.name === 'class_lesson' ? 'is-active':'' ">课程章节
</el-menu-item>
<el-menu-item :index="'/class/homework/'+classid"
:class="$route.name === 'class_homework' ? 'is-active':'' ">我的作业</el-menu-item>
<el-menu-item index="4"><a :href="certId? com_cert_url+'/detail/'+certId : com_cert_url" target="_blank" style="vertical-align: top;">相关认证</a></el-menu-item>
<el-menu :router="true" :default-active="$route.name === 'class_lesson' ? `/class/${classid}` : 0" class="el-menu-demo" mode="horizontal" text-color="#617288" active-text-color="#0082fc">
<el-menu-item :index="'/class/' + classid" :class="$route.name === 'class_lesson' ? 'is-active' : ''">课程章节 </el-menu-item>
<el-menu-item :index="'/class/homework/' + classid" :class="$route.name === 'class_homework' ? 'is-active' : ''">我的作业</el-menu-item>
<li class="el-menu-item"><a :href="certId ? com_cert_url + '/detail/' + certId : com_cert_url" target="_blank" style="vertical-align: top;">相关认证</a></li>
</el-menu>
</div>
<router-view />
</div>
<!-- 右侧布局 -->
<div class="rt-box">
<classRight @getCertId="getCertId"/>
<div class="rt-box m-dn">
<classRight @getCertId="getCertId" />
</div>
</div>
</div>
</div>
@ -91,88 +91,133 @@
<div v-else>
<el-empty :image-size="200" :description="msg" v-if="empty"></el-empty>
</div>
</template>
<script>
import { useRoute } from 'vue-router'
import { getPublicTop } from "@/api/study";
import { reactive, toRefs } from "vue";
import classRight from "@/views/class/classRight.vue";
import msgLogin from "@/components/msgLogin";
export default {
components: {
classRight,
msgLogin,
},
setup() {
const route = useRoute()
const classid = route.params.classid;
const state = reactive({
topInfo: [],
isAuth: false,
msg: 0,
empty: false,
certId: undefined, // id
});
const resPublicTop = async () => {
const res = await getPublicTop(classid);
if (res.code === 200) {
state.topInfo = res.data;
//
state.msg = res.message;
if (res.status === -1) {
state.isAuth = false;
state.empty = true;
} else {
state.isAuth = true;
}
setTimeout(function () {
state.topInfo.proLearning = calcProgress(res.data.progress_learning.progress, res.data.progress_learning.total);
state.topInfo.proHomework = calcProgress(res.data.progress_homework.progress, res.data.progress_homework.total);
}, 500);
import { useRoute } from "vue-router";
import { getPublicTop, getClassInfo } from "@/api/study";
import { reactive, toRefs } from "vue";
import classRight from "@/views/class/classRight.vue";
import msgLogin from "@/components/msgLogin";
export default {
components: {
classRight,
msgLogin,
},
setup() {
const route = useRoute();
const classid = route.params.classid;
const state = reactive({
topInfo: [],
isAuth: false,
msg: 0,
empty: false,
certId: undefined, // id
isPc: document.body.clientWidth > 1200,
classNews: [],
needResNews: true,
});
window.addEventListener("resize", function() {
state.isPc = document.body.clientWidth > 1200;
if (!state.isPc && state.needResNews && state.classNews.length <= 0) {
resPublicRight();
}
});
const resPublicRight = async () => {
const res = await getClassInfo(classid);
if (res.code === 200) {
state.classNews = res.data["classNews"];
if (state.classNews.length <= 0) {
state.needResNews = false;
}
};
resPublicTop();
}
};
if (!state.isPc) {
resPublicRight();
}
const calcProgress = (progress, total) => {
const curProgress = (progress * 100) / total;
return parseInt(curProgress);
};
const resPublicTop = async () => {
const res = await getPublicTop(classid);
if (res.code === 200) {
state.topInfo = res.data;
//
state.msg = res.message;
if (res.status === -1) {
state.isAuth = false;
state.empty = true;
} else {
state.isAuth = true;
}
const getCertId = (res) => {
state.certId = res;
setTimeout(function() {
state.topInfo.proLearning = calcProgress(res.data.progress_learning.progress, res.data.progress_learning.total);
state.topInfo.proHomework = calcProgress(res.data.progress_homework.progress, res.data.progress_homework.total);
}, 500);
}
};
resPublicTop();
const calcProgress = (progress, total) => {
const curProgress = (progress * 100) / total;
return parseInt(curProgress);
};
const getCertId = (res) => {
state.certId = res;
};
return {
classid,
getCertId,
calcProgress,
...toRefs(state),
};
},
};
</script>
<style lang="scss">
/*响应式-移动端*/
@import "~@/assets/css/m.css";
@media screen and (max-width: 1200px) {
.listbox {
padding: 0 20px;
}
return {
classid,
getCertId,
calcProgress,
...toRefs(state),
.lf-box {
width: 100% !important;
.otile {
height: 36px !important;
h2 {
font-size: 14px !important;
font-weight: 500 !important;
}
}
}
</script>
<style lang="scss" scoped>
.main {
width: 100%;
height: 204px;
background: #F1F8FF;
margin-bottom: 24px;
.el-menu-item {
height: 44px !important;
line-height: 46px !important;
font-size: 16px !important;
}
.topbox {
height: 204px;
display: flex;
align-items: center;
background: #F1F8FF url("~@/assets/class/classtop.png") right center no-repeat;
background-size: auto 100%;
.mian-news-box {
margin-bottom: 12px;
}
.clss-news-box {
padding: 12px;
.til {
font-size: 14px;
margin-bottom: 6px;
}
.ul-box {
.item {
width: 48%;
padding: 6px 0;
}
}
}
.infobox {
@ -182,32 +227,40 @@
flex-direction: column;
.til {
padding: 16px 0 16px;
padding: 6px 0 12px !important;
h1 {
font-size: 28px;
font-size: 18px !important;
line-height: 20px;
margin-right: 18px;
margin-right: 4px !important;
font-weight: 600;
}
.end_time {
height: 24px;
padding: 0 10px;
height: 22px !important;
padding: 0 8px !important;
border-radius: 4px;
background: linear-gradient(90deg, #00B8FE 0%, #0082FC 100%);
background: linear-gradient(90deg, #00b8fe 0%, #0082fc 100%);
}
}
.ress {
width: 620px;
width: 100% !important;
display: block !important;
.ressbox {
width: 280px;
height: 68px;
height: 60px !important;
.el-progress-bar__outer {
background-color: #BBD8FA;
background-color: #bbd8fa;
}
&.study-progress {
margin-bottom: 12px;
}
.my-progress-text {
font-size: 12px;
}
.last-til {
@ -232,53 +285,162 @@
color: #333;
}
}
}
}
}
}
}
</style>
.rt-box {
margin-top: 56px;
<style lang="scss">
@media screen and (max-width: 600px) {
.topbox {
background: #f1f8ff right center no-repeat !important;
}
::v-deep .edu-nav-box {
box-shadow: none;
.clss-news-box {
.ul-box {
.item {
width: 98% !important;
}
}
}
/* menu */
.el-menu-item {
height: 56px;
line-height: 56px;
font-size: 20px;
border-bottom: none !important;
.lf-box {
width: 100% !important;
.otile {
height: 36px !important;
h2 {
display: inline-block;
width: 100%;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
font-size: 14px !important;
font-weight: 500 !important;
}
.til-rt-info {
display: none;
}
}
}
}
</style>
.el-menu-item.is-active::after {
content: "";
position: absolute;
width: 50%;
left: 50%;
margin-left: -25%;
bottom: -1px;
background-color: #0082fc;
height: 2px;
}
<style lang="scss" scoped>
.main {
width: 100%;
height: 204px;
background: #f1f8ff;
margin-bottom: 24px;
}
.topbox {
height: 204px;
display: flex;
align-items: center;
background: #f1f8ff url("~@/assets/class/classtop.png") right center no-repeat;
background-size: auto 100%;
}
.infobox {
height: 160px;
display: flex;
justify-content: space-around;
flex-direction: column;
.til {
padding: 16px 0 16px;
h1 {
font-size: 28px;
line-height: 20px;
margin-right: 18px;
}
.el-tabs__nav-wrap::after {
background-color: #CEDDF2;
height: 1px;
.end_time {
height: 24px;
padding: 0 10px;
border-radius: 4px;
background: linear-gradient(90deg, #00b8fe 0%, #0082fc 100%);
}
}
.el-menu.el-menu--horizontal {
border-bottom: solid 1px #CEDDF2;
.ress {
width: 620px;
.ressbox {
width: 280px;
height: 68px;
.el-progress-bar__outer {
background-color: #bbd8fa;
}
.last-til {
display: inline-block;
padding-left: 8px;
width: 230px;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
}
.meta {
.li {
span {
padding-right: 10px;
font-size: 12px;
}
strong {
font-weight: 500;
font-size: 18px;
color: #333;
}
}
}
}
}
}
.rt-box {
margin-top: 56px;
}
::v-deep .edu-nav-box {
box-shadow: none;
}
/* menu */
.el-menu-item {
height: 56px;
line-height: 56px;
font-size: 20px;
border-bottom: none !important;
}
.el-menu-item.is-active::after {
content: "";
position: absolute;
width: 50%;
left: 50%;
margin-left: -25%;
bottom: -1px;
background-color: #0082fc;
height: 2px;
}
.el-tabs__nav-wrap::after {
background-color: #ceddf2;
height: 1px;
}
.el-menu.el-menu--horizontal {
border-bottom: solid 1px #ceddf2;
}
</style>
<style>
.ressbox .el-progress-bar__outer {
background-color: #BBD8FA;
}
.ressbox .el-progress-bar__outer {
background-color: #bbd8fa;
}
</style>

77
src/views/class/classMenu.vue

@ -1,50 +1,49 @@
<template>
<el-menu :router="true" :default-active=" $route.name === 'class_lesson' ? `/class/${classid}` : 0" class="el-menu-demo" mode="horizontal" text-color="#617288" active-text-color="#0082fc">
<el-menu-item :index="'/class/'+classid" :class="$route.name === 'class_lesson' ? 'is-active':'' ">课程章节</el-menu-item>
<el-menu-item :index="'/class/homework/'+classid" :class="$route.name === 'class_homework' ? 'is-active':'' ">我的作业</el-menu-item>
<el-menu-item index="4"><a :href="com_shequ_url+'/certification'" target="_blank">相关认证</a></el-menu-item>
<el-menu :router="true" :default-active="$route.name === 'class_lesson' ? `/class/${classid}` : 0" class="el-menu-demo" mode="horizontal" text-color="#617288" active-text-color="#0082fc">
<el-menu-item :index="'/class/' + classid" :class="$route.name === 'class_lesson' ? 'is-active' : ''">课程章节</el-menu-item>
<el-menu-item :index="'/class/homework/' + classid" :class="$route.name === 'class_homework' ? 'is-active' : ''">我的作业</el-menu-item>
<el-menu-item><a :href="com_shequ_url + '/certification'" target="_blank">相关认证</a></el-menu-item>
</el-menu>
</template>
<script>
import { useRoute } from 'vue-router'
export default{
setup() {
const route = useRoute()
const classid = route.params.classid;
return{
classid
}
}
}
import { useRoute } from "vue-router";
export default {
setup() {
const route = useRoute();
const classid = route.params.classid;
return {
classid,
};
},
};
</script>
<style lang="scss" scoped>
.el-menu-item {
height: 56px;
line-height: 56px;
font-size: 20px;
border-bottom: none !important;
}
.el-menu-item {
height: 56px;
line-height: 56px;
font-size: 20px;
border-bottom: none !important;
}
.el-menu-item.is-active::after {
content: "";
position: absolute;
width: 50%;
left: 50%;
margin-left: -25%;
bottom: -1px;
background-color: #0082fc;
height: 2px;
}
.el-menu-item.is-active::after {
content: "";
position: absolute;
width: 50%;
left: 50%;
margin-left: -25%;
bottom: -1px;
background-color: #0082fc;
height: 2px;
}
.el-tabs__nav-wrap::after {
background-color: #CEDDF2;
height: 1px;
}
.el-tabs__nav-wrap::after {
background-color: #ceddf2;
height: 1px;
}
.el-menu.el-menu--horizontal {
border-bottom: solid 1px #CEDDF2;
}
</style>
.el-menu.el-menu--horizontal {
border-bottom: solid 1px #ceddf2;
}
</style>

343
src/views/class/class_homework.vue

@ -1,5 +1,4 @@
<template>
<el-skeleton :loading="loading" animated>
<template #template>
<el-skeleton-item variant="h1" style="margin-top: 24px;" animated />
@ -7,8 +6,7 @@
</template>
<template #default>
<table class="worktab">
<table class="worktab" v-if="isPc">
<tr>
<th style=" border-radius: 8px 0 0 8px ;">作业列表</th>
<th width="120">作业得分</th>
@ -18,62 +16,95 @@
<tr v-for="(item, i) in looplist" :key="i">
<td>
<a :href="com_shequ_url+'/classroom/download/'+classid+'/'+item.id" target="_blank">
<i class="iconfont icon-icon_attachment"></i> {{item.title}}
</a>
<a :href="com_shequ_url + '/classroom/download/' + classid + '/' + item.id" target="_blank"> <i class="iconfont icon-icon_attachment"></i> {{ item.title }} </a>
</td>
<td>
<div class="colff3" v-if="item.zuoye?.fenshu">{{item.zuoye?.fenshu}}</div>
<div class="colff3" v-if="item.zuoye?.fenshu">{{ item.zuoye?.fenshu }}</div>
<div class="col617" v-else>--</div>
</td>
<td>
<div class="ptlist">
<li v-for="(item, i) in item.data" :key="i">
{{item.post_time}}
{{ item.post_time }}
<el-tooltip :content="item.til" placement="left">
<a :href="item.obsurl" target="_blank" class="col008" v-if="item.obsurl">
查看作业
</a>
<a :href="com_shequ_url+'/plugin.php?id=fr_class:dload&lod='+item.downloadId+'&kid='+classid"
target="_blank" class="col008" v-else>
<a :href="com_shequ_url + '/plugin.php?id=fr_class:dload&lod=' + item.downloadId + '&kid=' + classid" target="_blank" class="col008" v-else>
查看作业
</a>
</el-tooltip>
</li>
</div>
<el-upload class="upload-demo"
:action="'/v1/edu/studyclass/postHomeWork/'+classid+'/?filetype=file&pid='+item.pid+'&zid='+item.id"
:headers="headers" :on-success="UploadSuccess">
<el-button size="mini" class="frbtn min-pd"><i class="iconfont icon-shangchuan1 ico-lf f14"></i>提交作业
</el-button>
<el-upload class="upload-demo" :action="'/v1/edu/studyclass/postHomeWork/' + classid + '/?filetype=file&pid=' + item.pid + '&zid=' + item.id" :headers="headers" :on-success="UploadSuccess">
<el-button size="mini" class="frbtn min-pd"><i class="iconfont icon-shangchuan1 ico-lf f14"></i>提交作业 </el-button>
</el-upload>
</td>
<td class="ifprt">
<div class="f14" v-if="item.zuoye?.info.length>50">
<div class="f14" v-if="item.zuoye?.info.length > 50">
<div class="cur-p" @click="setItem(item)">
{{item.zuoye?.info.substring(0,30)}}...
{{ item.zuoye?.info.substring(0, 30) }}...
<em class="col008">查看详情</em>
</div>
</div>
<div class="f14" v-else>
{{item.zuoye?.info}}
{{ item.zuoye?.info }}
</div>
</td>
</tr>
</table>
<!-- 移动端 -->
<div class="my-work" v-else>
<ul>
<li class="item m-bd-box" v-for="(item, i) in looplist" :key="i">
<div class="t-plate">
<a class="til f14" :href="com_shequ_url + '/classroom/download/' + classid + '/' + item.id" target="_blank">
<div class="hide-txt"><i class="iconfont icon-icon_attachment"></i> {{ item.title }}</div>
</a>
<el-upload class="upload-demo" :action="'/v1/edu/studyclass/postHomeWork/' + classid + '/?filetype=file&pid=' + item.pid + '&zid=' + item.id" :headers="headers" :on-success="UploadSuccess">
<el-button size="mini" class="frbtn min-pd"><i class="iconfont icon-shangchuan1 ico-lf f14"></i>提交作业 </el-button>
</el-upload>
<div class="ptlist">
<li v-for="(item, i) in item.data" :key="i">
{{ item.post_time }}
<el-tooltip :content="item.til" placement="left">
<a :href="item.obsurl" target="_blank" class="col008" v-if="item.obsurl">
查看作业
</a>
<a :href="com_shequ_url + '/plugin.php?id=fr_class:dload&lod=' + item.downloadId + '&kid=' + classid" target="_blank" class="col008" v-else>
查看作业
</a>
</el-tooltip>
</li>
</div>
</div>
<div class="b-plate">
<div class="col808 f14">
作业得分
<span class="col515" v-if="item.zuoye?.fenshu">{{ item.zuoye?.fenshu }}</span>
<span class="col515" v-else>--</span>
</div>
<div class="col808 f14">
老师评语
<div class="col515" v-if="item.zuoye?.info">{{ item.zuoye?.info }}</div>
<div class="col515" v-else>暂无评语</div>
</div>
</div>
</li>
</ul>
</div>
</template>
</el-skeleton>
<el-dialog title="老师评语" v-model="isShowItem" width="600px">
<el-scrollbar>
<div class="infobox">
{{item.zuoye.info}}
{{ item.zuoye.info }}
</div>
</el-scrollbar>
</el-dialog>
@ -81,147 +112,181 @@
<el-empty :image-size="150" description=" " v-if="isdata">
<div class="col617">当前班级下暂无作业</div>
</el-empty>
</template>
<script>
import { useRoute } from 'vue-router'
import { myHomeWork } from "@/api/study";
import { toRefs, reactive, getCurrentInstance } from 'vue';
import store from '@/store'
export default {
name: 'class_homework',
setup() {
const { proxy } = getCurrentInstance()
const route = useRoute()
const classid = route.params.classid;
const state = reactive({
looplist: [],
isAuth: false,
msg: 0,
empty: false,
activeIndex: 1,
item: {},
isShowItem: false,
isdata: false,
loading: true,
headers: {
'authentication': store.getters.get_authentication
},
})
const reshomeWork = async () => {
const res = await myHomeWork(classid);
if (res.code === 200) {
state.looplist = res.data;
state.msg = res.message;
state.loading = false;
if (res.data.length <= 0) {
state.isdata = true;
}
if (res.status === -1) {
state.isAuth = false;
state.empty = true;
} else {
state.isAuth = true;
}
}
};
reshomeWork();
import { useRoute } from "vue-router";
import { myHomeWork } from "@/api/study";
import { toRefs, reactive, getCurrentInstance } from "vue";
import store from "@/store";
export default {
name: "class_homework",
setup() {
const { proxy } = getCurrentInstance();
const route = useRoute();
const classid = route.params.classid;
const state = reactive({
looplist: [],
isAuth: false,
msg: 0,
empty: false,
activeIndex: 1,
item: {},
isShowItem: false,
isdata: false,
loading: true,
headers: {
authentication: store.getters.get_authentication,
},
isPc: document.body.clientWidth > 1200,
});
// item
const setItem = (item) => {
state.item = item
state.isShowItem = true
}
window.addEventListener("resize", function() {
state.isPc = document.body.clientWidth > 1200;
});
const UploadSuccess = (res) => {
proxy.$message({
type: res.status=='-1' ? 'error' : 'success',
message: res.message,
center: true
});
const reshomeWork = async () => {
const res = await myHomeWork(classid);
if (res.code === 200) {
state.looplist = res.data;
state.msg = res.message;
state.loading = false;
if (res.data.length <= 0) {
state.isdata = true;
}
if (res.status === -1) {
state.isAuth = false;
state.empty = true;
} else {
state.isAuth = true;
}
}
};
reshomeWork();
return {
classid,
...toRefs(state),
setItem,
UploadSuccess,
}
}
}
// item
const setItem = (item) => {
state.item = item;
state.isShowItem = true;
};
const UploadSuccess = (res) => {
proxy.$message({
type: res.status == "-1" ? "error" : "success",
message: res.message,
center: true,
});
};
return {
classid,
...toRefs(state),
setItem,
UploadSuccess,
};
},
};
</script>
<style lang="scss" scoped>
.worktab {
<style lang="scss">
/*响应式-pad端*/
@media screen and (max-width: 1200px) {
.my-work {
width: 100%;
margin-top: 24px;
th {
height: 40px;
font-size: 14px;
padding-left: 18px;
text-align: left;
background: #F3F8FF;
border-collapse: separate;
.item {
margin-top: 16px;
.t-plate {
padding: 12px;
line-height: 24px;
.til {
margin-bottom: 6px;
}
}
.b-plate {
line-height: 24px;
padding: 12px;
border-top: 1px solid #ceddf2;
}
}
}
}
</style>
td {
height: 60px;
padding: 16px 0 16px 18px;
text-align: left;
border-bottom: 1px solid #CEDDF2;
}
<style lang="scss">
/*响应式-移动端*/
@media screen and (max-width: 600px) {
}
</style>
tr:hover {
background-color: #F3F8FF;
}
}
<style lang="scss" scoped>
.worktab {
width: 100%;
margin-top: 24px;
.ptlist {
padding: 6px 0;
overflow-y: auto;
th {
height: 40px;
font-size: 14px;
li {
padding: 2px 0;
}
padding-left: 18px;
text-align: left;
background: #f3f8ff;
border-collapse: separate;
}
.ifprt {
padding-right: 10px !important;
td {
height: 60px;
padding: 16px 0 16px 18px;
text-align: left;
border-bottom: 1px solid #ceddf2;
}
.infobox {
line-height: 24px;
padding: 0 20px;
tr:hover {
background-color: #f3f8ff;
}
}
.scrollbar {
height: 106px;
overflow: hidden;
}
.ptlist {
padding: 6px 0;
overflow-y: auto;
font-size: 14px;
.min-pd {
padding: 6px 10px;
li {
padding: 2px 0;
}
}
::v-deep .el-scrollbar__wrap {
max-height: 300px;
overflow-x: hidden;
}
.ifprt {
padding-right: 10px !important;
}
::v-deep .el-icon-close {
display: none !important;
}
::v-deep .el-icon-close-tip {
display: none !important;
}
.infobox {
line-height: 24px;
padding: 0 20px;
}
.scrollbar {
height: 106px;
overflow: hidden;
}
.min-pd {
padding: 6px 10px;
}
::v-deep .el-scrollbar__wrap {
max-height: 300px;
overflow-x: hidden;
}
::v-deep .el-icon-close {
display: none !important;
}
::v-deep .el-icon-close-tip {
display: none !important;
}
</style>
<style>
.el-dialog__body {
padding: 20px 30px 30px 30px;
}
</style>
.el-dialog__body {
padding: 20px 30px 30px 30px;
}
</style>

317
src/views/class/class_lesson.vue

@ -1,5 +1,4 @@
<template>
<el-skeleton :loading="loading" animated>
<template #template>
<el-skeleton-item variant="h1" style="margin-top: 24px;" animated />
@ -15,206 +14,246 @@
<el-skeleton-item variant="h3" style="width: 20px; margin-right: 12px;" animated />
<el-skeleton-item variant="h3" style="width: 80%" animated />
</div>
</template>
</template>
<template #default>
<div class="lesson">
<div class="looplist" v-for="(item, i) in lessonList" :key="i">
<div class="otile flex-1">
<h2>{{item.title}}</h2>
<span>{{item.num_video}}课时 {{item.video_time}}</span>
<h2>{{ item.title }}</h2>
<span class="til-rt-info">{{ item.num_video }}课时 {{ item.video_time }}</span>
</div>
<div v-if="item.video.length===0" class="novideo col617">等待老师发布...</div>
<div v-if="item.video.length === 0" class="novideo col617">等待老师发布...</div>
<ul class="vlist">
<li class="item" v-for="(item, i) in item.video" :key="i">
<router-link class="a-play flex-1" :to="'/class/play/'+classid+'/'+item.id">
<router-link class="a-play flex-1" :to="'/class/play/' + classid + '/' + item.id">
<i class="iconfont icon-bofang2"></i>
<div class="vdtitle" v-if="item.title.length > 40">{{item.title.substring(0,40)}}...</div>
<div class="vdtitle" v-else>{{item.title}}</div>
<div class="vdtitle" v-if="item.title.length > 40">{{ item.title.substring(0, 40) }}...</div>
<div class="vdtitle" v-else>{{ item.title }}</div>
<div class="progress" v-if="item.play_progress">
<el-progress :show-text="false" color="#0082FC" :percentage="item.progress"></el-progress>
<span :style="'left:'+item.progress+'%'">
<div v-if="item.play_progress===100">已看完</div>
<div v-else>{{item.progress}}%</div>
<span :style="'left:' + item.progress + '%'">
<div v-if="item.play_progress === 100">已看完</div>
<div v-else>{{ item.progress }}%</div>
<i class="el-icon-caret-bottom"></i>
</span>
</div>
</router-link>
<div class="rtinfo flex-1">
<el-tooltip v-if="item.attachmentId" effect="dark" content="下载课件" placement="top">
<a class="zip" :href="'https://bbs.fanruan.com/classroom/download/'+classid+'/'+item.attachmentId"
target="_blank"></a>
<a class="zip" :href="'https://bbs.fanruan.com/classroom/download/' + classid + '/' + item.attachmentId" target="_blank"></a>
</el-tooltip>
<div class="time">{{item.videoTime}}</div>
<div v-if="isMobile">
<div v-if="item.progress" class="f12">
<div v-if="item.play_progress === 100" class="col52c">已看完</div>
<div v-else class="colffa">已看 {{ item.play_progress }}%</div>
</div>
<div class="time" v-else>{{ item.videoTime }}</div>
</div>
<div class="time" v-else>{{ item.videoTime }}</div>
</div>
</li>
</ul>
</div>
</div>
</template>
</el-skeleton>
</template>
<script>
import { useRoute } from 'vue-router'
import { getLessonList } from "@/api/study";
import { toRefs, reactive } from 'vue';
export default {
name: 'listLesson',
setup() {
const route = useRoute()
const classid = route.params.classid;
const state = reactive({
lessonList: [],
activeIndex: 1,
loading: true,
})
const resLessonList = async () => {
const res = await getLessonList(classid);
if (res.code === 200) {
state.lessonList = res.data;
state.loading = false;
state.lessonList.forEach((item, index) => {
state.lessonList[index].video.forEach((item, i) => {
setTimeout(function () {
state.lessonList[index].video[i].progress = item.play_progress;
}, 500);
});
import { useRoute } from "vue-router";
import { getLessonList } from "@/api/study";
import { toRefs, reactive } from "vue";
export default {
name: "listLesson",
setup() {
const route = useRoute();
const classid = route.params.classid;
const state = reactive({
lessonList: [],
activeIndex: 1,
loading: true,
isMobile: document.body.clientWidth < 600,
});
window.addEventListener("resize", function() {
state.isMobile = document.body.clientWidth < 600;
});
const resLessonList = async () => {
const res = await getLessonList(classid);
if (res.code === 200) {
state.lessonList = res.data;
state.loading = false;
state.lessonList.forEach((item, index) => {
state.lessonList[index].video.forEach((item, i) => {
setTimeout(function() {
state.lessonList[index].video[i].progress = item.play_progress;
}, 500);
});
}
};
resLessonList();
return {
classid,
...toRefs(state),
});
}
}
}
};
resLessonList();
return {
classid,
...toRefs(state),
};
},
};
</script>
<style lang="scss" scoped>
<style lang="scss">
/*响应式-移动端*/
@media screen and (max-width: 1200px) {
.looplist {
margin-top: 24px;
.otile {
padding: 0 18px;
height: 40px;
background: #F3F8FF;
border-radius: 8px;
h2 {
font-size: 18px;
font-weight: 600;
}
span {
margin-left: 18px;
font-size: 14px;
color: #7E8FA3;
.vlist {
.item {
padding-left: 6px;
}
}
}
}
</style>
.novideo {
padding: 18px 0 0 24px;
font-size: 16px;
}
<style lang="scss">
/*响应式-移动端*/
@media screen and (max-width: 600px) {
.looplist {
.vlist {
.item {
border-bottom: solid 1px #f3f3f3;
font-size: 14px;
display: flex;
justify-content: space-between;
align-items: center;
&.last {
border-bottom: none;
.progress {
display: none;
}
.a-play {
padding: 26px 0;
border-radius: 6px;
width: 80%;
.vdtitle {
display: inline-block;
width: 100%;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
}
}
.a-play:hover .icon-bofang2 {
color: #0082fc;
.rtinfo {
.zip {
margin-left: 2px !important;
}
}
}
}
}
}
</style>
.icon-bofang2 {
font-size: 14px;
color: #B3C1D3;
margin-right: 12px;
}
<style lang="scss" scoped>
.looplist {
margin-top: 24px;
.otile {
padding: 0 18px;
height: 40px;
background: #f3f8ff;
border-radius: 8px;
h2 {
font-size: 18px;
font-weight: 600;
}
.progress {
margin-left: 14px;
width: 100px;
position: relative;
span {
margin-left: 18px;
font-size: 14px;
color: #7e8fa3;
}
}
.novideo {
padding: 18px 0 0 24px;
font-size: 16px;
}
span {
text-align: center;
position: absolute;
width: 40px;
left: 0;
font-size: 12px;
color: #fff;
margin-top: -30px;
margin-left: -22px;
background: #0082fc;
border-radius: 3px;
padding: 1px 2px;
transition: all .6s;
i {
position: absolute;
color: #0082fc;
bottom: -8px;
left: 15px;
}
}
.vlist {
.item {
border-bottom: solid 1px #f3f3f3;
font-size: 14px;
display: flex;
justify-content: space-between;
align-items: center;
}
&.last {
border-bottom: none;
}
.rtinfo {
margin-left: auto;
.a-play {
padding: 26px 0;
border-radius: 6px;
}
.zip {
display: inline-block;
background: url('~@/assets/class/zip.png');
background-size: 100% auto;
height: 22px;
width: 22px;
margin-right: 20px;
.a-play:hover .icon-bofang2 {
color: #0082fc;
}
}
.icon-bofang2 {
font-size: 14px;
color: #b3c1d3;
margin-right: 12px;
}
.time {
color: #7E8FA3;
.progress {
margin-left: 14px;
width: 100px;
position: relative;
span {
text-align: center;
position: absolute;
width: 40px;
left: 0;
font-size: 12px;
color: #fff;
margin-top: -30px;
margin-left: -22px;
background: #0082fc;
border-radius: 3px;
padding: 1px 2px;
transition: all 0.6s;
i {
position: absolute;
color: #0082fc;
bottom: -8px;
left: 15px;
}
}
}
.rtinfo {
margin-left: auto;
.zip {
display: inline-block;
background: url("~@/assets/class/zip.png");
background-size: 100% auto;
height: 22px;
width: 22px;
margin-right: 20px;
}
.time {
color: #7e8fa3;
}
}
}
}
}
</style>
<style>
/* .el-progress-bar__outer {
/* .el-progress-bar__outer {
overflow: visible;
}

1377
src/views/class/indexClass.vue

File diff suppressed because it is too large Load Diff

190
src/views/class/play.vue

@ -10,7 +10,7 @@
<div class="viewtil" style="min-height:8%">
<el-page-header @back="goBack" title="返回班级" :content="video.title"> </el-page-header>
</div>
<div id="VideoPlay" style=" width:100%; height: 92%; margin-top: auto;"></div>
<div id="VideoPlay" style=" width:100%; height: 92%; margin-top: auto;" :class="{ affixcss: is_scroll }"></div>
<div class="autotime" v-show="showAutoBox">
<div class="pssbox flex-5">
@ -62,7 +62,14 @@
<i class="iconfont icon-bofang2" v-else></i>
<div class="title hide-txt">{{ item.title }}</div>
<div class="time">{{ item.videoTime }}</div>
<div v-if="isMobile" class="time">
<div v-if="item.play_progress" class="f12">
<div v-if="item.play_progress === 100" class="col52c">已看完</div>
<div v-else class="colffa">已看 {{ item.play_progress }}%</div>
</div>
<div v-else>{{ item.videoTime }}</div>
</div>
<div class="time" v-else>{{ item.videoTime }}</div>
</a>
<!-- </el-tooltip> -->
</li>
@ -134,6 +141,12 @@ export default {
showAutoBox: false,
is_duration: true,
playThisId: route.params.videoid,
is_scroll: false,
isMobile: document.body.clientWidth < 1200,
});
window.addEventListener("resize", function() {
state.isMobile = document.body.clientWidth < 1200;
});
// MARKET-4168
@ -424,6 +437,15 @@ export default {
setTimeout("top.location.href = '" + target.href + "'", 100);
}
}
window.addEventListener("scroll", function() {
var scrollTop = document.documentElement.scrollTop || document.body.scrollTop;
if (scrollTop > 50) {
state.is_scroll = true;
} else {
state.is_scroll = false;
}
});
});
onUnmounted(() => {
@ -696,3 +718,167 @@ body {
color: #0082fc;
}
</style>
<style lang="scss">
/*响应式-移动端*/
@import "~@/assets/css/m.css";
@media screen and (max-width: 1200px) {
.affix {
height: 35vh;
background-color: #fff;
}
.affixcss {
position: fixed !important;
top: 0 !important;
z-index: 8;
}
.main {
position: static !important;
.flex-2 {
display: block !important;
}
.autotime {
height: 35vh;
top: 50px;
}
#VideoPlay {
height: 35vh !important;
}
.videoBox {
position: static !important;
width: auto !important;
.viewtil {
position: absolute;
top: 0;
left: 0;
z-index: 99;
background-color: #fff;
color: #333;
height: 50px;
padding-top: 13px !important;
min-height: auto !important;
overflow: hidden;
.el-page-header__left {
min-width: 80px;
}
.el-page-header__content {
color: #333;
flex: 1;
display: inline-block;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
}
}
}
.navbox {
position: static !important;
width: 100%;
background-color: #fff;
.cate {
background-color: #fff;
color: #333;
border-bottom: solid 1px #ceddf2;
}
}
.looplist {
.otile {
border-bottom: solid 1px #ceddf2;
padding-bottom: 12px;
color: #333;
}
.vlist {
.item {
margin-left: 20px;
border-bottom: solid 1px #ceddf2;
color: #333;
.icon-bofang2 {
color: #b3c1d3 !important;
}
}
}
}
}
.nullData {
position: absolute;
z-index: 999999 !important;
top: 20vh;
font-size: 16px !important;
.ff18 {
font-size: 14px !important;
}
.medium {
padding: 6px 12px !important;
}
}
.m-footr {
margin-top: 0;
}
}
</style>
<style lang="scss">
@media screen and (max-width: 700px) {
.main {
.videoBox {
.viewtil {
width: 100%;
}
}
.looplist {
.otile {
border-bottom: solid 1px #ceddf2;
padding-bottom: 12px;
color: #333;
}
.vlist {
.item {
margin-left: 10px !important;
border-bottom: solid 1px #ceddf2;
color: #333;
.icon-bofang2 {
color: #b3c1d3 !important;
}
a {
padding: 10px 0;
width: 100%;
color: #617288;
.title {
padding-left: 6px;
width: 77% !important;
}
.time {
margin-left: auto;
}
}
}
}
}
}
}
</style>

1420
src/views/video/indexVideo.vue

File diff suppressed because it is too large Load Diff
Loading…
Cancel
Save