Files
learning-system-portal/src/views/portal/course/Index.vue
2022-10-22 20:05:11 +08:00

1290 lines
38 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 id="couser-list-content" class="couser-list-content">
<portal-header current="course" @emitInput="emitInput"></portal-header>
<!-- <div class="course-input">
<el-input class="course-value" v-model.trim="course.keyword" maxlength="20" @input="inputOn($event)" clearable placeholder="请输入关键词搜索"><el-button slot="append" icon="el-icon-search" @click="searchData()" class="course-btn"></el-button></el-input>
</div> -->
<div class="xcontent portal-content">
<div class="xrow" style="display: flex;justify-content: space-between;">
<div style="flex: 1;" class="xcol content-div">
<el-row class="search-div">
<div class="searchbar" v-if="searchTags.length > 0">
<div style="line-height: 30px;">
<span class="item-title"> 搜索条件</span>
<el-tag closable v-for="(tag, tagIdx) in searchTags" :key="tagIdx" @close="tagsClose(tag,tagIdx)">{{ tag.name }}</el-tag>
</div>
</div>
<el-row class="search-item">
<el-col :span="24">
<div style="margin-top:10px; display: flex;">
<div style="line-height: 25px;padding-right: 10px;">
<span class="item-title" style="padding-right: 5px;">授课方式</span>
<span class="item-line"></span>
</div>
<!-- // 10微课21在线课(直播)20:在线课( 录播)30:面授课40:学习项目,90:混合式, -->
<div>
<el-radio-group v-model="category" size="mini" @change="searchData">
<el-radio-button :label="null">全部</el-radio-button>
<el-radio-button :label="20">录播课</el-radio-button>
<el-radio-button :label="30">线下课</el-radio-button>
<el-radio-button :label="40">学习项目</el-radio-button>
</el-radio-group>
</div>
</div>
</el-col>
</el-row>
<div :class="queryExpand ? 'search-div-expand' : 'search-div-collapse'">
<el-row class="search-item">
<el-col :span="24">
<div style="margin-top:10px;display: flex;">
<div style="line-height: 25px;padding-right: 10px;">
<span class="item-title" style="padding-right: 5px;">内容分类</span>
<span class="item-line"></span>
</div>
<el-radio-group v-model="types.sysTypes" size="mini" @change="changeType">
<el-radio-button :label="null">全部</el-radio-button>
<el-radio-button v-for="item in optionsList" :key="item.id" :label="item.id">{{item.name}}</el-radio-button>
</el-radio-group>
<span @click="jumUX()" class="Uxtext" style=""> U选小课堂
<span class="uxicon">
<svg-icon icon-class="hot" style="font-size:22px"></svg-icon>
</span>
</span>
</div>
<div class="search-item-sub" v-if="types.oneSubList.length != 0">
<el-radio-group v-model="types.subOne" size="mini" @change="changeTypeSub">
<el-radio-button label="0">全部</el-radio-button>
<el-radio-button v-for="item in types.oneSubList" :key="item.id" :label="item.id">{{item.name}}</el-radio-button>
</el-radio-group>
</div>
<div class="search-item-sub" v-if="types.towSubList.length != 0">
<el-radio-group v-model="types.subTow" size="mini" @change="changeTypeTow">
<el-radio-button label="0">全部</el-radio-button>
<el-radio-button v-for="item in types.towSubList" :key="item.id" :label="item.id">{{item.name}}</el-radio-button>
</el-radio-group>
</div>
</el-col>
</el-row>
</div>
</el-row>
<el-row class="order-div" v-if="listType == 1">
<span class="quyer-tag">
<el-button type="text" class="order-class" @click="orderChange('studys')" :class="{ actice: course.orderField == 'studys' }">最热</el-button>
<el-button type="text" class="order-class" @click="orderChange('publishTime')" :class="{ actice: course.orderField == 'publishTime' }">最新</el-button>
</span>
</el-row>
<div class="xrow data-content" v-if="listType == 1">
<!-- v-if="(courseList.length<=course.pageSize) || (cidx<parseInt(courseList.length/columns)*columns)" -->
<div class="xrow-course course-index" v-for="(cinfo,cidx) in courseList" :key="cinfo.id">
<el-card class="course-card" :body-style="{padding:'0px'}">
<a :href="toCourseDetail(cinfo)">
<div class="course-image-box">
<course-image height="146px" :course="cinfo"></course-image>
<span v-if="cinfo.type < 21" class="course-type-title course-type">录播课</span>
<span v-if="cinfo.type==30" class="course-type-title course-type">线下课</span>
<span v-if="cinfo.type==40" class="course-type-title course-type">学习项目</span>
</div>
<div :title="cinfo.title" class="course-title title-line-ellipsis" v-html="cinfo.name">
</div>
<div class="course-author">
<div class="course-author-left" v-if="cinfo.teacher" v-html="cinfo.teacher=='BOE教师'? '':cinfo.teacher"></div>
<div style="flex:1;text-align: center;">
<span class="study-num">{{cinfo.studies}}人学习</span>
</div>
<div style="padding-left:15px">
<div v-if="cinfo.score">
<span class="course-score-value">{{toScore(cinfo.score)}}</span>
</div>
<div v-else class="course-score-no">未评分</div>
</div>
</div>
</a>
<div class="cor-praises" v-if="cinfo.source == 2"><interactBar :type="1" :data="cinfo" :comments="false" :praises="false" :shares="false" :views="false"></interactBar> </div>
</el-card>
</div>
</div>
<!-- 分页 -->
<div class="pagination-div">
<span class="pag-text" @click="loadMore()" v-if="moreState == 1 && courseList.length>=course.pageSize">加载更多</span>
<span class="pag-text-msg" v-else-if="moreState == 2">数据加载中</span>
<span class="pag-text-msg" v-else-if="moreState == 3">没有更多数据了</span>
</div>
</div>
<div style="width: 245px;margin-left: 5px;">
<div>
<div id="fixd-box">
<div v-if="identity == 2 || identity == 3 || identity == 5">
<el-button style="width: 100%;margin-bottom:15px;height: 37px;border-radius: 0;" type="primary" @click="toNeedCourse">做课程</el-button>
</div>
<el-card class="ranking-card" >
<div slot="header">
<span style="font-size: 14px;font-weight: 600;color: #333333;">好评榜</span>
</div>
<div style="padding-bottom:10px">
<el-row class="ranking-title">
</el-row>
<el-row class="ranking-title bacolor" v-for="(item, index) in scorelist" :key="index" >
<el-col :span="6" style="height:34px">
<img v-if="index===0" :src="`${webBaseUrl}/images/first.png`"/>
<img v-if="index===1" :src="`${webBaseUrl}/images/second.png`"/>
<img v-if="index===2" :src="`${webBaseUrl}/images/third.png`"/>
<span style="margin-left: 10px" v-if="index!=2&&index!=0&&index!=1">{{index+1}}</span>
</el-col>
<!-- <el-tooltip :enterable="false" @click.native="jumpRouter(item)" effect="light" :content="item.name" placement="bottom" :visible-arrow="false" popper-class="text-tooltip"> -->
<div v-bind:title="item.name" @click="jumpRouter(item)">
<el-col :span="15" style="cursor: pointer;" class="title-line-ellipsis"> {{ item.name }}</el-col>
</div>
<!-- </el-tooltip> -->
</el-row>
</div>
</el-card>
<div style="height: 10px;"></div>
<el-card class="ranking-card">
<div slot="header">
<span style="font-size: 14px;font-weight: 600;color: #333333;">人气榜</span>
</div>
<div style="padding-bottom:10px">
<el-row class="ranking-title">
</el-row>
<el-row class="ranking-title bacolor" v-for="(item, index) in ankingList" :key="index">
<el-col :span="6" style="height:34px">
<img v-if="index===0" :src="`${webBaseUrl}/images/first.png`"/>
<img v-if="index===1" :src="`${webBaseUrl}/images/second.png`"/>
<img v-if="index===2" :src="`${webBaseUrl}/images/third.png`"/>
<span style="margin-left: 10px" v-if="index!=2&&index!=0&&index!=1">{{index+1}}</span>
</el-col>
<!-- <el-tooltip :enterable="false" @click.native="jumpRouter(item)" effect="light" :content="item.name" placement="bottom" :visible-arrow="false" popper-class="text-tooltip"> -->
<div :title="item.name" @click="jumpRouter(item)">
<el-col :span="15" style="cursor: pointer;" class="title-line-ellipsis"> {{ item.name }}</el-col>
</div>
<!-- </el-tooltip> -->
</el-row>
</div>
</el-card>
<div style="height: 10px;"></div>
<el-card class="ranking-card">
<div slot="header">
<span style="font-size: 14px;font-weight: 600;color: #333333;">热度榜</span>
</div>
<div style="padding-bottom:10px">
<el-row class="ranking-title">
</el-row>
<el-row class="ranking-title bacolor" v-for="(item, index) in hotList" :key="index">
<el-col :span="6" style="height:34px">
<img v-if="index===0" :src="`${webBaseUrl}/images/first.png`"/>
<img v-if="index===1" :src="`${webBaseUrl}/images/second.png`"/>
<img v-if="index===2" :src="`${webBaseUrl}/images/third.png`"/>
<span style="margin-left: 10px" v-if="index!=2&&index!=0&&index!=1">{{index+1}}</span>
</el-col>
<!-- <el-tooltip :enterable="false" @click.native="jumpRouter2(item)" effect="light" :content="item.courseName" placement="bottom" :visible-arrow="false" popper-class="text-tooltip"> -->
<div :title="item.courseName" @click="jumpRouter2(item)">
<el-col :span="15" style="cursor: pointer;" class="title-line-ellipsis"> {{ item.courseName }}</el-col>
</div>
<!-- </el-tooltip> -->
</el-row>
</div>
</el-card>
</div>
</div>
</div>
</div>
</div>
<portal-footer></portal-footer>
<portalFloatTools ref="floatTools"></portalFloatTools>
</div>
</template>
<script>
import { mapGetters, mapActions } from "vuex";
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 courseItem from "@/components/Portal/course/courseItem.vue";
import apiCoursePortal from "@/api/modules/coursePortal.js";
import courseForm from "@/components/Course/courseForm.vue";
import apiType from "@/api/modules/type.js";
import apiCourse from "@/api/modules/coursePortal.js";
import apiOldCourse from "@/api/boe/course.js";
import apiTeacher from "@/api/modules/teacher.js";
import apiUser from "@/api/system/user.js";
import scene from "@/api/modules/scene.js";
import apiUserGroup from "@/api/modules/usergroup.js";
import interactBar from "@/components/Portal/interactBar.vue";
import courseImage from "@/components/Course/courseImage.vue";
import { courseType, getType, toScore,formatDate } from "@/utils/tools.js";
import { deepClone, param } from "../../../utils";
import apiSearchterm from "@/api/modules/searchterm.js";
export default {
name: "index",
components: {
portalHeader,
portalFooter,
portalFloatTools,
courseItem,
courseForm,
authorInfo,
courseImage,
interactBar
},
computed: {
...mapGetters(["resOwnerMap", "sysTypeMap", "userInfo", "identity"])
},
data() {
return {
formatDate,
audiences:[],//当前用户的受众
couretitle: "",
toScore,
noPageList: true, //判断接口是否还有数据
noDataList: true, //判断接口是否还有数据
moreState: 1, // 1 加载更多 2 加载中 3无数据
columns: 3, //列的数量
fileBaseUrl: process.env.VUE_APP_FILE_BASE_URL,
// 查询信息
types: {
sysTypesSub: "",
subOne: "",
subTow: "",
sysTypes: null,
oneSubList: [],
towSubList: []
},
course: {
orderField: "studys",
topOrder: true,
orderAsc: false,
pageIndex: 1, // 第几页
pageSize: 9 //每页多少条
},
optionsList: [], //分类数据
sceneList: [], //场景
keyword: "",
anking: "",
isFind: false,
searchbar: {
top: false
},
ankingList: [],
scorelist: [],
searchTags: [],
queryExpand: true, // true更多false收起
category: null,
categorySub: 0,
type1: 0,
type2: [],
type3: 0,
type4: 0,
status: 1,
pager: {
total: 40
},
data: [{}, {}, {}, {}],
order: 1,
listType: 1,
courseList: [],
searchRecords: [],
hotList: [],
totalPages: 1
};
},
mounted() {
let screenWidth = window.screen.availWidth;
if (screenWidth < 1280) {
this.course.pageSize = 9;
this.columns = 3;
} else if (screenWidth < 1600) {
this.course.pageSize = 12;
this.columns = 4;
} else if (screenWidth >= 1600) {
this.course.pageSize = 15;
this.columns = 5;
}
let el_top = document.querySelector("#searchbar");
let el_search = document.querySelector("#searchbar");
let height = 200;
let flag = true;
let $this = this;
this.getAnkingData();
window.addEventListener("scroll",this.handleScroll);
if (this.$route.query !== {}) {
this.course.keyword = this.$route.query.keyword;
}
this.getSceneData();
this.getTypeData();
if (this.course.keyword != undefined) {
this.totalPages = 4;
}
this.loadSysTypes();
this.getScoreList();
this.getHotList();
//查询排行榜,页面打开只查询一次
let localKey="user_"+this.userInfo.sysId+"_gids";
if(this.audiences.length==0){
//let hasIds;
let hasIds=sessionStorage.getItem(localKey);
if(hasIds && hasIds.length>0){
this.audiences=hasIds.split(",");
this.search();
}else{
Promise.all([apiOldCourse.audience(this.userInfo.sysId),apiUserGroup.userGroupIds()]).then(rs=>{
//console.log(rs,'rs');
let aids=[];
if(rs[0].status==200){
aids.push(rs[0].result);
}
if(rs[1].status==200){
aids.push(rs[1].result);
}
this.audiences=aids;
sessionStorage.setItem(localKey,this.audiences);
this.search();
})
}
}
this.searchterm();
},
beforeDestroy() {
window.removeEventListener("scroll", this.handleScroll);
},
methods: {
jumUX() {
window.open("https://m.qingxuetang.com/x/?appId=qxtcorp306130", "_blank");
},
emitInput(val) {
this.course.keyword = val;
this.searchData();
},
handleScroll() {
let innerHeight = document.querySelector("#couser-list-content")
.clientHeight;
let outerHeight = document.documentElement.clientHeight;
let scrollTop = document.documentElement.scrollTop;
if (outerHeight + scrollTop + 350 >= innerHeight) {
if (this.moreState == 1 && this.course.pageIndex < 4) {
this.loadMore();
}
}
if (scrollTop > 630) {
document.querySelector("#fixd-box").style.cssText =
"position: fixed;top: -550px;width:242.5px";
} else {
document.querySelector("#fixd-box").style.cssText = "position: static";
}
},
toNeedCourse() {
// 需要先切换标签
//this.$store.dispatch('SetCurIdentity',2);
//this.$router.push('/need/course?open=new');
this.$refs.floatTools.toNeedCourse();
},
searchData() {
this.course.pageIndex = 1;
this.noPageList = true; //判断接口是否还有数据
this.noDataList = true; //判断接口是否还有数据
this.courseList = [];
this.totalPages = 4;
this.search();
},
inputOn() {
this.$forceUpdate();
},
...mapActions({
getResOwnerTree: "resOwner/getResOwnerTree",
loadResOwners: "resOwner/loadResOwners",
getSysTypeTree: "sysType/getSysTypeTree",
loadSysTypes: "sysType/loadSysTypes"
}),
sysTypeName(code) {
if (code == "") {
return "";
}
return this.sysTypeMap.get(code);
},
useHotword(item) {
this.$set(this.course, "keyword", item.keyword);
this.searchData();
},
searchterm() {
apiSearchterm.list(5, 1).then(res => {
if (res.status == 200) {
this.searchRecords = res.result;
}
});
},
toCourseDetail(item) {
if (item.source == 1) {
return `${this.webBaseUrl}/course/boeframe?id=${item.id}&type=${item.type}`;
//此处使用window.open有问题
//window.open(`${this.webBaseUrl}/course/boeframe?id=${item.id}&type=${item.type}`);
} else {
if (item.type == 10) {
return this.webBaseUrl + "/course/micro?id=" + item.id;
} else if (item.type == 20) {
return this.webBaseUrl + "/course/detail?id=" + item.id;
}
}
return "";
},
orderChange(id) {
this.course.orderField = id;
this.course.pageIndex = 1;
this.noPageList = true; //判断接口是否还有数据
this.noDataList = true; //判断接口是否还有数据
this.courseList = [];
this.totalPages = 1;
this.search();
},
tagsClose(tag, index) {
for (let i in this.course) {
if (tag.id === this.course[i]) {
this.course[i] = "";
if (i === "sysType1") {
this.types.sysTypes = "";
this.types.subOne = "";
this.types.subTow = "";
this.types.oneSubList = [];
this.types.towSubList = [];
}
if (i === "sysType2") {
this.types.subOne = "";
this.types.oneSubList = [];
}
if (i === "sysType3") {
this.types.subTow = "";
this.types.towSubList = [];
}
if (i === "type") {
this.category = "";
this.categorySub = "";
}
this.searchTags.splice(index, 1);
if(i === 'type') {
this.category = null;
this.categorySub = null;
}
if (i === "sysType1") {
this.types.sysTypes = null;
}
if (i === "sysType2") {
this.types.subOne = null;
}
if (i === "sysType3") {
this.types.subTow = null;
}
this.searchData();
}
}
},
// 分类
changeType(num) {
this.types.oneSubList = [];
this.types.subOne = "0";
this.types.subTow = "0";
this.types.towSubList = [];
let list = {};
if (num !== 0) {
list = this.optionsList.find(item => {
return item.id === num;
});
} else {
// this.types.towSubList = [];
}
if (list && list.children) {
this.types.oneSubList = list.children;
}
this.searchData();
},
// 子级分类
changeTypeSub(num) {
this.types.subTow = "0";
let list = {};
if (num != 0) {
apiType.list(1, num).then(res => {
if (res.status === 200) {
this.types.towSubList = res.result;
}
});
} else {
this.types.towSubList = [];
}
this.searchData();
},
changeTypeTow(num) {
if(num == 0) {
this.types.towSubList=[]
}
this.searchData();
},
//获取场景,保留
async getSceneData() {
try {
const { result, status } = await scene.list(1);
if (status === 200) {
this.sceneList = result;
}
} catch (error) {
console.log(error);
}
},
//获取分类,此处获取提内容分类
async getTypeData() {
try {
const { result, status } = await apiType.tree(1);
if (status === 200) {
this.optionsList = result;
}
} catch (error) {
console.log(error);
}
},
loadMore() {
this.course.pageIndex += 1;
this.search();
},
// 高亮搜索词
brightenKeyword(val, keyword) {
const Reg = new RegExp(keyword, 'i');
let res = '';
if (val) {
res = val.replace(Reg, `<span style="color: #3e7fff;">${keyword}</span>`);
return res;
}
},
async search() {
let that = this;
if (this.course.keyword) {
apiSearchterm.save({ keyword: this.course.keyword, type: 1 });
}
if(this.audiences.length>0){
this.course.audiences=this.audiences.join(",");
}
this.course.companyId=this.userInfo.companyId;
this.isFind = true;
this.course.type = this.category;
if (this.types.sysTypes == 0 || this.types.sysTypes == null) {
this.course.sysType1 = "";
this.course.sysType2 = "";
this.course.sysType3 = "";
} else {
this.course.sysType1 = this.types.sysTypes;
}
this.course.sysType2 = this.types.subOne;
this.course.sysType3 = this.types.subTow;
if (this.course.sysType2 == 0) {
this.course.sysType2 = "";
}
if (this.course.sysType3 == 0) {
this.course.sysType3 = "";
}
this.course.device = 1;
this.getTags();
// if(this.course.pageIndex == 1) {
// this.courseList = [];
// }
let isTopList = [];
// 隐藏loadMore
this.moreState = 2;
await apiCoursePortal
.courseSearch(this.course)
.then(res => {
if (res.status == 200 && res.result.list.length > 0) {
this.totalPages = res.result.totalPages;
res.result.list.forEach(item => {
//教师转化
if(item.teacher){
let dotIdx=item.teacher.indexOf(',');
if(dotIdx>0){
item.teacher=item.teacher.substring(0,dotIdx);
}
}
//转化标红显示
item.title=item.name;
if(that.course.keyword){
item.name=that.brightenKeyword(item.name,that.course.keyword);
}else{
item.name=item.name;
}
});
this.courseList.push(...res.result.list);
this.moreState = 1;
} else {
this.moreState = 3;
}
})
.catch(err => {
this.moreState = 3;
});
},
getTags() {
this.searchTags = [];
let courseData = deepClone(this.course);
for (let i in courseData) {
if (
courseData[i] !== "" &&
i !== "pageIndex" &&
i !== "pageSize" &&
i !== "orderField" &&
i !== "orderAsc" &&
i !== "topOrder" &&
i !== "device" &&
i !== "audiences" &&
i !== "companyId" &&
courseData[i] !== null &&
courseData[i] !== undefined
) {
let id = courseData[i];
if (i == "type" && courseData[i] !== 0) {
courseData[i] = courseType(courseData[i]);
}
if (i == "sysType1" || i == "sysType2" || i == "sysType3") {
if (courseData[i] !== "0") {
courseData[i] = this.sysTypeName(courseData[i]);
}
}
if (i == "type" && courseData[i] === 0) {
courseData[i] = "在线课";
}
if (courseData[i] !== "0") {
this.searchTags.push({
id: id,
name: courseData[i]
});
}
}
}
},
// goTarget(href) {
// window.open(this.webBaseUrl+href, "_blank");
// },
showInApply() {
this.inapply.show = true;
},
findOrg() {
//
},
pushEnter(type) {
this.type1.push(type);
},
deleteOut(type) {
this.type1 = this.type.filter(item => item != type);
},
chooseShow(type) {
return this.type1.some(item => item == type);
},
getAnkingData() {
apiCourse.ranking().then(res => {
if (res.status == 200) {
this.ankingList = res.result;
}
});
},
getScoreList() {
apiCourse.scorelist(5).then(res => {
if (res.status == 200) {
this.scorelist = res.result;
}
});
},
getHotList() {
apiCourse.studyCounts(5).then(res => {
if (res.status == 200) {
this.hotList = res.result;
}
});
},
jumpRouter(item) {
//console.log(item.type, "item.type");
// return console.log(id,type,"fihkj1")
if (item.type == 20) {
//录播课
// window.open(`${this.webBaseUrl}/course/detail?id=${id}`)
this.$router.push(`/course/detail?id=${item.id}`);
}
if (item.type == 10) {
//微课
// window.open(`${this.webBaseUrl}/course/micro?id=${id}`)
this.$router.push(`/course/micro?id=${item.id}`);
}
},
jumpRouter2(item) {
// console.log(item,"土豪包括九年")
let type = item.courseType;
let id = item.courseId;
//console.log(item.type,type,'item.type');
// return console.log(id,type,"fihkj1")
if (type == 20) {
//录播课
// window.open(`${this.webBaseUrl}/course/detail?id=${id}`)
this.$router.push(`/course/detail?id=${id}`);
}
if (type == 10) {
//微课
// window.open(`${this.webBaseUrl}/course/micro?id=${id}`)
this.$router.push(`/course/micro?id=${id}`);
}
}
}
};
</script>
<style scoped lang="scss">
::v-deep .el-radio-button{
margin-right:0px;
}
::v-deep .title-line-ellipsis {
// width: 100%;
display: -webkit-box;
overflow: hidden;
text-overflow: ellipsis;
-webkit-box-orient: vertical;
-webkit-line-clamp: 1;
box-sizing: border-box;
word-break: break-all;
}
::v-deep .el-card__body {
padding: 0;
}
::v-deep .bacolor:nth-child(odd) {
background-color: #fff;
padding: 0 5px;
}
::v-deep .bacolor:nth-child(even) {
background-color: #f6f6f6;
padding: 0 5px;
}
.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%;
}
// .el-radio-button{
// margin-right: 10px;
// margin-bottom: 10px;
// .el-radio-button__inner{
// background: #fff;
// border: none;
// height: 20px;
// }
// }
::v-deep .el-radio-button__inner,
.el-radio-group {
vertical-align: top;
}
::v-deep .el-radio-button__inner {
background: none;
}
::v-deep .el-radio-button:first-child .el-radio-button__inner {
border-left: none;
// border-radius: 4px 0 0 4px;
//box-shadow: none!important;
}
// .el-row{
// display: flex;
// flex-wrap: wrap;
// }
.item-title {
// margin-top: 10px;
// margin-bottom: 5px;
// margin-right: 10px;
// margin: 10px;
margin: 10px 10px 10px 0;
//font-size: 14px;
font-weight: 600;
color: #333333;
// line-height: 20px;
}
.item-line {
padding-left: 2px;
height: 20px;
background: #ddd;
}
.course-card {
// width: 290px;
margin-bottom: 15px;
position: relative;
::v-deep .cor-praises {
position: absolute;
left: 0;
top: 0;
-moz-user-select: none; /*火狐*/
-webkit-user-select: none; /*webkit浏览器*/
-ms-user-select: none; /*IE10*/
-khtml-user-select: none; /*早期浏览器*/
user-select: none;
.interact-bar-btn {
.interact-bar-value {
display: none;
}
}
}
.cor-icon {
position: absolute;
left: 100px;
top: 54px;
border-radius: 50%;
background: rgba(88, 138, 252, 0.37);
.el-icon-caret-right {
font-size: 36px;
color: #588afc;
}
}
.course-image-box {
position: relative;
height: 148px;
width: 100%;
.course-image {
width: 100%;
height: 148px;
}
.course-type {
position: absolute;
top: 5px;
right: 0px;
width: 90px;
height: 30px;
line-height: 30px;
text-align: center;
background-color: #292828;
opacity: 0.4;
border-top-left-radius: 15px;
border-bottom-left-radius: 15px;
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 {
// height: 70px;
margin: 10px 0;
padding: 0px 15px;
font-size: 18px;
font-weight: 600;
color: #343434;
-moz-user-select: none; /*火狐*/
-webkit-user-select: none; /*webkit浏览器*/
-ms-user-select: none; /*IE10*/
-khtml-user-select: none; /*早期浏览器*/
user-select: none;
}
.course-author {
margin: 5px 15px;
padding-bottom: 10px;
display: flex;
justify-content: space-between;
.course-author-left {
font-size: 12px;
line-height: 30px;
color: #666;
}
// .course-author-right{
// padding-top: 5px;
// }
}
.course-score {
padding: 5px 15px;
display: flex;
justify-content: space-between;
align-items: center;
margin-bottom: 10px;
.course-score-star {
flex: 1;
}
.course-score-value {
color: #ffb30f;
font-family: "Arial";
-moz-user-select: none; /*火狐*/
-webkit-user-select: none; /*webkit浏览器*/
-ms-user-select: none; /*IE10*/
-khtml-user-select: none; /*早期浏览器*/
user-select: none;
// font-size: 30px;
}
.course-score-no {
font-size: 12px;
color: #ffb30f;
-moz-user-select: none; /*火狐*/
-webkit-user-select: none; /*webkit浏览器*/
-ms-user-select: none; /*IE10*/
-khtml-user-select: none; /*早期浏览器*/
user-select: none;
}
}
}
.course-score-no {
text-align: right;
font-size: 12px;
color: #ffb30f;
line-height: 30px;
}
.course-score-value {
font-size: 14px;
color: #ffb30f;
margin-left: 32px;
line-height: 30px;
font-family: "Arial";
// font-size: 30px;
}
.study-num {
line-height: 30px;
font-size: 12px;
color: #8590a6;
-moz-user-select: none; /*火狐*/
-webkit-user-select: none; /*webkit浏览器*/
-ms-user-select: none; /*IE10*/
-khtml-user-select: none; /*早期浏览器*/
user-select: none;
}
.btn-label {
}
.btn-label {
position: relative;
display: inline-block;
outline: 0;
span {
padding: 7px 15px;
font-size: 12px;
border-radius: 0;
white-space: nowrap;
background: #fff;
border: 1px solid #dcdfe6;
font-weight: 500;
border-left: 0;
color: #606266;
-webkit-appearance: none;
text-align: center;
box-sizing: border-box;
outline: 0;
margin: 0;
position: relative;
cursor: pointer;
transition: all 0.3s cubic-bezier(0.645, 0.045, 0.355, 1);
}
}
.searchbar {
background-color: #ffffff;
// border: 1px solid #f3f3f3;
// width: 900px;
// padding: 5px 20px;
}
.fixed {
position: fixed;
top: 0px;
background-color: #f0f0f0;
z-index: 999;
height: 50px;
}
.content-div {
.quyer-tag {
// margin-left: 10px;
.order-class {
color: #666666;
text-align: left;
border: 1px solid #dfdfdf;
padding: 10px 20px;
}
.actice {
background: #3e7fff;
color: #fff;
}
}
/* 分页div */
.pagination-div {
text-align: center;
padding: 10px 0;
margin: 10px;
.pag-text {
border: 1px solid #292828;
padding: 10px 20px;
border-radius: 20px;
background: #fff;
cursor: pointer;
}
.pag-text-msg {
padding: 10px 20px;
background: #fff;
}
}
.search-div {
background: #fff;
padding: 10px 25px;
::v-deep .el-input {
width: 420px;
height: 38px;
margin-bottom: 13px;
.el-input__inner {
height: 38px;
border-radius: 0;
}
.el-input-group__append {
width: 44px;
height: 38px;
border: 0;
padding: 0;
background: #3e7fff;
border-radius: 0;
.el-button {
margin: 0;
border: 0;
width: 100%;
height: 38px;
padding: 0;
display: flex;
justify-content: center;
align-items: center;
.el-icon-search {
color: #fff;
font-size: 22px;
}
}
}
}
// .tip{
// color:#999999;
// font-size: 12px;
// >span{
// margin-right: 8px;
// cursor: pointer;
// }
// }
.search-item {
// padding: 10px 0;
}
.search-item:not(:last-child) {
// border-bottom: 1px solid #dfdfdf;
}
.search-item-sub {
// margin-top: 10px;
}
}
.search-div-collapse {
display: block;
}
.search-div-expand {
// display: none;
}
.search-div-more {
text-align: center;
}
.order-div {
padding: 10px 15px 0 0px;
}
.data-content {
padding: 5px 0px;
.course-card {
// width: 290px;
margin-bottom: 15px;
position: relative;
.course-image-box {
position: relative;
.course-image {
width: 288px;
height: 148px;
}
.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-info-box {
padding: 15px;
.course-info-title {
font-size: 18px;
font-weight: 600;
color: #343434;
height: 48px;
}
.course-other-info {
height: 40px;
margin-top: 10px;
.course-author {
float: left;
height: 40px;
font-size: 12px;
color: #666666;
line-height: 40px;
img {
margin-right: 10px;
width: 30px;
border: 1px solid #eee;
border-radius: 50%;
vertical-align: middle;
}
}
.course-score-info {
float: right;
height: 40px;
line-height: 40px;
.course-score {
color: #f8a114;
font-family: "Arial";
font-size: 36px;
}
.course-score-title {
font-size: 14px;
color: #787878;
}
}
}
}
.cardmark {
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
background: rgba(101, 101, 101, 0.8);
pointer-events: none;
border-radius: 5px;
padding: 10px;
opacity: 0;
-webkit-transition: all 1.5s;
-moz-transition: all 1.5s;
-ms-transition: all 1.5s;
-o-transition: all 1.5s;
transition: all 1.5s;
.cardmark-name {
font-size: 18px;
line-height: 30px;
font-weight: 600;
color: #fff;
}
.cardmark-info {
color: #fff;
font-size: 14px;
line-height: 20px;
}
}
}
.course-card:hover .cardmark {
opacity: 1;
}
}
}
.course-form {
width: 100%;
margin: 10px 0;
::v-deep.el-button {
width: 100%;
color: #fff;
}
}
.right-box {
.add-btn {
width: 100%;
padding: 15px 0;
}
.ranking-card {
margin-top: 0px;
}
.ranking-data {
margin: 10px 0;
color: #999999;
}
}
.ranking-title {
line-height: 34px;
font-size: 15px;
color: #333333;
.center-titlt {
font-size: 15px;
color: #333333;
}
.center {
text-align: right;
}
img {
margin-top: 5px;
}
}
</style>