parent
05da260225
commit
c9d0d17779
8 changed files with 2152 additions and 376 deletions
File diff suppressed because it is too large
Load Diff
@ -0,0 +1,819 @@ |
||||
<template> |
||||
<div class="wrap"> |
||||
<div class="inner"> |
||||
<Breadcrumb ref="breadcrumb" :data.sync="routes" /> |
||||
<div class="top"> |
||||
<el-carousel class="pics fadeInLeft" :interval="6000" height="278px" |
||||
:arrow="form.pics.length > 1 ? 'hover' : 'never'" :indicator-position="form.pics.length > 1 ? '' : 'none'"> |
||||
<el-carousel-item v-for="(item, i) in form.pics" :key="i"> |
||||
<el-image class="pic" :src="item" :preview-src-list="form.pics"> |
||||
</el-image> |
||||
</el-carousel-item> |
||||
</el-carousel> |
||||
<div class="right fadeInRight" id="fields"> |
||||
<h6>{{ form.mall.productName }}</h6> |
||||
<div v-if="isCourse" class="meta"> |
||||
共 <span class="val">{{ form.numberOfExperimentalItems }}</span> 个实验项目   |
||||
已有 <span class="val">{{ form.goodsRes.learningCount }}</span>人学过 |
||||
</div> |
||||
<div class="des" v-html="form.mall.productIntroduction"></div> |
||||
<div class="fields"> |
||||
<div class="field"> |
||||
<img src="@/assets/images/product/1.png" alt=""> 适用专业: |
||||
<el-tooltip class="text" effect="dark" :visible-arrow="false" :content="form.goodsRes.professionalName" |
||||
placement="bottom"> |
||||
<div> |
||||
{{ form.goodsRes.professionalName }} |
||||
</div> |
||||
</el-tooltip> |
||||
</div> |
||||
<div v-if="form.mall.applicationScenario" class="field"> |
||||
<img src="@/assets/images/product/2.png" alt=""> 适用场景: |
||||
<div class="text">{{ form.mall.applicationScenario }}</div> |
||||
</div> |
||||
<div v-if="form.mall.matchingCourse" class="field"> |
||||
<img src="@/assets/images/product/3.png" alt=""> 匹配课程: |
||||
<el-tooltip class="text" effect="dark" :visible-arrow="false" :content="form.mall.matchingCourse" |
||||
placement="bottom"> |
||||
<div class="text"> |
||||
{{ form.mall.matchingCourse }} |
||||
</div> |
||||
</el-tooltip> |
||||
</div> |
||||
<div v-if="form.mall.courseHours" class="field"> |
||||
<img src="@/assets/images/product/4.png" alt=""> 预计课时: |
||||
<div class="text">{{ form.mall.courseHours }}</div> |
||||
</div> |
||||
<div v-if="form.goodsRes.typeName" class="field"> |
||||
<img src="@/assets/images/product/5.png" alt=""> 产品类型: |
||||
<div class="text">{{ form.goodsRes.typeName }}</div> |
||||
</div> |
||||
</div> |
||||
<button v-if="!GTA" class="btn" @click="showQrcode">会员价采购</button> |
||||
</div> |
||||
</div> |
||||
<div class="course" id="part0"> |
||||
<div class="detail"> |
||||
<ul class="tab"> |
||||
<li v-for="(tab, i) in tabs" :key="i" :class="{ active: curTab === tab.id }" @click="tabChange(tab)">{{ |
||||
tab.name }}</li> |
||||
</ul> |
||||
<div class="courses"> |
||||
<div class="des" v-html="form.mall.detailedIntroduction"></div> |
||||
<div class="chapter" id="part1" v-for="(item, i) in chapterList" :key="i"> |
||||
<div class="chapterName">{{ item.name }}</div> |
||||
<div class="section" v-if="item.subsectionList.length"> |
||||
<div v-for="(section, j) in item.subsectionList" :key="j"> |
||||
<div class="sectionName" :title="section.name"> |
||||
<div class="val"> |
||||
<img v-if="section.fileType === 'pptx'" src="@/assets/images/exts/ppt.png" alt=""> |
||||
<img v-else-if="section.fileType === 'mp4'" src="@/assets/images/exts/video.png" alt=""> |
||||
<img v-else-if="section.fileType === 'doc' || section.fileType === 'docx'" |
||||
src="@/assets/images/exts/word.png" alt=""> |
||||
<img v-else-if="section.fileType === 'txt'" src="@/assets/images/exts/txt.png" alt=""> |
||||
<img v-else-if="section.fileType === 'pdf'" src="@/assets/images/exts/pdf.png" alt=""> |
||||
<img v-else src="@/assets/images/exts/pic.png" alt=""> |
||||
{{ section.name }} |
||||
</div> |
||||
</div> |
||||
</div> |
||||
</div> |
||||
</div> |
||||
</div> |
||||
</div> |
||||
<div class="products"> |
||||
<h6 class="fadeInUp">热门产品推荐</h6> |
||||
<ul class="product fadeInDown"> |
||||
<li v-for="(item, i) in hots" :key="i" @click="toDetail(item.mallId)"> |
||||
<img :src="item.coverDrawing" alt="" /> |
||||
<img v-if="item.logoOfOurSchool" class="my-school" src="@/assets/images/my-school.png" alt=""> |
||||
<div class="texts"> |
||||
<div class="title">{{ item.productName }}</div> |
||||
<div :class="['desc', { 'not-tag': !item.tagsName }]" v-html="item.productIntroduction"></div> |
||||
<div v-if="item.tagsName" class="tags"> |
||||
<el-tag v-for="(tag, i) in item.tagsName.split(',')" :key="i" class="tag">{{ tag }}</el-tag> |
||||
</div> |
||||
<div class="metas"> |
||||
<el-tag v-if="item.selected" type="danger" effect="dark"> |
||||
官方精选 |
||||
</el-tag> |
||||
<div v-if="item.isCourse" class="meta">{{ item.learningCount }}人学过</div> |
||||
</div> |
||||
</div> |
||||
</li> |
||||
</ul> |
||||
</div> |
||||
</div> |
||||
</div> |
||||
|
||||
<!-- 选择链接 --> |
||||
<el-dialog title="请选择链接" :visible.sync="linkVisible" width="420px" center :close-on-click-modal="false"> |
||||
<div v-if="withLink" class="buy"> |
||||
<div v-for="(link, i) in form.mallNonAssociatedLinks" :key="i" class="link-line"> |
||||
{{ link.urlName }}: |
||||
<a class="url" :href="link.url" target="_blank">{{ link.url }}</a> |
||||
</div> |
||||
</div> |
||||
</el-dialog> |
||||
|
||||
<el-dialog title="" :visible.sync="qrcodeVisible" width="500px" center :top="qrcodeTop" custom-class="qrcode-dia"> |
||||
<div> |
||||
<img width="100%" src="@/assets/images/occupationlab.png" alt=""> |
||||
</div> |
||||
</el-dialog> |
||||
</div> |
||||
</template> |
||||
|
||||
<script> |
||||
import Util from "@/libs/util" |
||||
import Setting from "@/setting" |
||||
import Breadcrumb from '@/components/breadcrumb' |
||||
import ScrollReveal from 'scrollreveal' |
||||
export default { |
||||
data () { |
||||
return { |
||||
id: this.$route.query.id, |
||||
routes: {}, |
||||
curTab: 0, |
||||
tabs: [ |
||||
{ |
||||
id: 0, |
||||
name: '详情介绍' |
||||
}, |
||||
], |
||||
form: { |
||||
pics: [], |
||||
classificationIds: [], |
||||
mall: { |
||||
coverDrawing: '' |
||||
}, |
||||
goodsRes: {} |
||||
}, |
||||
chapterList: [], |
||||
hots: [], |
||||
linkVisible: false, |
||||
height: '', |
||||
qrcodeVisible: false, |
||||
qrcodeTop: '100px' |
||||
}; |
||||
}, |
||||
components: { |
||||
Breadcrumb, |
||||
}, |
||||
computed: { |
||||
// 是否没关联产品或者产品类型是数据前瞻,并且设置了链接 |
||||
withLink () { |
||||
const links = this.form.mallNonAssociatedLinks |
||||
const id = this.form.classificationIds |
||||
return (this.form.mall.isAssociatedProduct || (id && id[0] == 5)) && links && links.length |
||||
}, |
||||
// 课程 |
||||
isCourse () { |
||||
let id = this.form.classificationIds |
||||
if (id) { |
||||
id = id[0] |
||||
const isCourse = (id == 1 || id == 2) && this.form.mall.isAssociatedProduct === 0 |
||||
this.tabs = [ |
||||
{ |
||||
id: 0, |
||||
name: '详情介绍' |
||||
}, |
||||
] |
||||
isCourse && this.tabs.push({ |
||||
id: 1, |
||||
name: '课程目录' |
||||
}) |
||||
return isCourse |
||||
} |
||||
return false |
||||
}, |
||||
// 职站增值应用 |
||||
isValueModule () { |
||||
let id = this.form.classificationIds |
||||
if (id) return id[0] == 3 |
||||
return false |
||||
}, |
||||
// 数据前瞻 |
||||
isDataforward () { |
||||
let id = this.form.classificationIds |
||||
if (id) return id[0] == 5 |
||||
return false |
||||
}, |
||||
}, |
||||
mounted () { |
||||
const height = (window.innerHeight - 758) / 2 |
||||
this.qrcodeTop = (height > 0 ? height : 0) + 'px' |
||||
this.getData() |
||||
this.getHot() |
||||
}, |
||||
methods: { |
||||
// 产品详情 |
||||
getData () { |
||||
this.$get(`${this.api.detailsOfGoods}?mallId=${this.id}`).then(res => { |
||||
const e = res.orderDetails |
||||
e.pics = [e.mall.coverDrawing] |
||||
if (e.mall.interfaceDiagram) { |
||||
const pics = e.mall.interfaceDiagram.split(',').slice(0, 3) |
||||
e.pics.push(...pics) |
||||
e.interfaceDiagrams = pics |
||||
} |
||||
this.form = e |
||||
this.routes = [ |
||||
{ |
||||
name: '职站商城', |
||||
path: '/index', |
||||
query: { |
||||
id: 13, |
||||
siteId: 1 |
||||
} |
||||
}, |
||||
{ |
||||
name: e.mall.productName |
||||
} |
||||
] |
||||
this.chapterList = '' |
||||
e.mall.associatedProduct && this.getChapter() |
||||
this.$nextTick(() => { |
||||
this.height = document.querySelector('#fields').clientHeight + 'px' |
||||
this.initAnimate() |
||||
}) |
||||
}).catch(err => { }) |
||||
}, |
||||
// 获取章节小节 |
||||
async getChapter () { |
||||
let res = await this.$get(this.api.curriculumChapter + '/' + this.form.mall.associatedProduct) |
||||
this.chapterList = res.chapterList |
||||
}, |
||||
// 初始化动画 |
||||
initAnimate () { |
||||
const sr = ScrollReveal() |
||||
sr.reveal('.animate', { |
||||
reset: true, // 滚动鼠标时,动画开关(如果为true, 动画可以执行n次) |
||||
// origin: 'bottom', // 动画开始的方向 |
||||
distance: '50px',//移动距离 |
||||
duration: 1000, // 动画持续时间 |
||||
scale: 0.8, |
||||
// viewFactor: 100, |
||||
}) |
||||
|
||||
sr.reveal('.fadeInUp', { |
||||
reset: true, // 滚动鼠标时,动画开关(如果为true, 动画可以执行n次) |
||||
origin: 'top', // 动画开始的方向 |
||||
distance: '100px',//移动距离 |
||||
duration: 1000, // 动画持续时间 |
||||
// scale: 0.8, |
||||
// viewFactor: 100, |
||||
}) |
||||
|
||||
sr.reveal('.fadeInDown', { |
||||
reset: true, // 滚动鼠标时,动画开关(如果为true, 动画可以执行n次) |
||||
origin: 'bottom', // 动画开始的方向 |
||||
distance: '100px',//移动距离 |
||||
duration: 1000, // 动画持续时间 |
||||
// scale: 0.8, |
||||
// viewFactor: 100, |
||||
}) |
||||
|
||||
|
||||
ScrollReveal().reveal('.fadeInDown0', { |
||||
reset: true, // 滚动鼠标时,动画开关(如果为true, 动画可以执行n次) |
||||
origin: 'bottom', // 动画开始的方向 |
||||
distance: '150px',//移动距离 |
||||
duration: 1000, // 动画持续时间 |
||||
// scale: 0.8, |
||||
// viewFactor: 100, |
||||
}) |
||||
|
||||
ScrollReveal().reveal('.fadeInDown1', { |
||||
reset: true, // 滚动鼠标时,动画开关(如果为true, 动画可以执行n次) |
||||
origin: 'bottom', // 动画开始的方向 |
||||
distance: '150px',//移动距离 |
||||
duration: 1000, // 动画持续时间 |
||||
delay: 100, |
||||
// scale: 0.8, |
||||
// viewFactor: 100, |
||||
}) |
||||
|
||||
ScrollReveal().reveal('.fadeInDown2', { |
||||
reset: true, // 滚动鼠标时,动画开关(如果为true, 动画可以执行n次) |
||||
origin: 'bottom', // 动画开始的方向 |
||||
distance: '150px',//移动距离 |
||||
duration: 1000, // 动画持续时间 |
||||
delay: 200, |
||||
// scale: 0.8, |
||||
// viewFactor: 100, |
||||
}) |
||||
|
||||
sr.reveal('.fadeInLeft', { |
||||
reset: true, // 滚动鼠标时,动画开关(如果为true, 动画可以执行n次) |
||||
origin: this.$store.getters.getModelType ? 'left' : 'top', // 动画开始的方向 |
||||
distance: '100px',//移动距离 |
||||
duration: 1000, // 动画持续时间 |
||||
// scale: 0.8, |
||||
// viewFactor: 100, |
||||
}) |
||||
|
||||
sr.reveal('.fadeInRight', { |
||||
reset: true, // 滚动鼠标时,动画开关(如果为true, 动画可以执行n次) |
||||
origin: this.$store.getters.getModelType ? 'right' : 'bottom', // 动画开始的方向 |
||||
distance: '100px',//移动距离 |
||||
duration: 1000, // 动画持续时间 |
||||
// scale: 0.8, |
||||
// viewFactor: 100, |
||||
}) |
||||
}, |
||||
// tab切换 |
||||
tabChange ({ id }) { |
||||
this.curTab = id |
||||
document.querySelector(`#part${id}`).scrollIntoView({ |
||||
behavior: 'smooth' |
||||
}) |
||||
}, |
||||
// 跳转播放资源 |
||||
toPreview (i, j) { |
||||
this.qrcodeVisible = true |
||||
// this.form.goodsRes.logoOfOurSchool ? |
||||
// this.$router.push(`/station/preview?courseId=${this.form.mall.associatedProduct}&curriculumName=${this.form.mall.productName}&mallId=${this.id}&chapter=${i}§ion=${j}&admin=1`) : |
||||
// this.toTrail() |
||||
}, |
||||
// 勾选/取消勾选学习进度 |
||||
studySection (item) { |
||||
item.whetherToStudyOrNot ? |
||||
this.$post(`${this.api.deleteLearningProgress}?id=${item.learningProgressId}`).then(res => { |
||||
this.getChapter() |
||||
}).catch(res => { }) : |
||||
this.$post(this.api.saveLearningProgress, { |
||||
cid: this.form.mall.associatedProduct, |
||||
projectId: item.projectId, |
||||
}).then(res => { |
||||
this.getChapter() |
||||
}).catch(res => { }) |
||||
}, |
||||
// 弹框显示小程序二维码 |
||||
showQrcode () { |
||||
this.qrcodeVisible = true |
||||
}, |
||||
// 跳转实验台 |
||||
toStation () { |
||||
if (this.isCourse) { // 如果是课程,直接进入实验台 |
||||
this.$post(`${this.api.addLearningRecord}?mallId=${this.id}`).then(res => { |
||||
this.$router.push('/station/preview?courseId=' + this.form.mall.associatedProduct + '&curriculumName=' + this.form.mall.productName + '&mallId=' + this.id) |
||||
}).catch(res => { }) |
||||
} else if (this.withLink) { // 如果没有绑定产品,并且有设置关联链接,则弹框选择链接 |
||||
this.linkVisible = true |
||||
} |
||||
}, |
||||
// 进入系统 |
||||
toSystem () { |
||||
this.$router.push(`/match`) |
||||
}, |
||||
// 热门产品 |
||||
getHot () { |
||||
this.$post(this.api.websiteProductList, { |
||||
hotTag: 1, |
||||
sort: 1, |
||||
pageNum: 1, |
||||
pageSize: 2, |
||||
}).then(({ page }) => { |
||||
const list = page.records |
||||
list.forEach(e => { |
||||
// 简介去掉标签图片 |
||||
const el = document.createElement('div') |
||||
el.innerHTML = e.productIntroduction |
||||
e.productIntroduction = el.innerText |
||||
const cid = e.classificationId |
||||
e.isCourse = (cid === 1 || cid === 2) && !e.isAssociatedProduct |
||||
}) |
||||
this.hots = list |
||||
}).catch(res => { }) |
||||
}, |
||||
// 跳转详情 |
||||
toDetail (id) { |
||||
this.$router.push(`/index/show?id=${id}`) |
||||
this.id = id |
||||
this.getData() |
||||
}, |
||||
} |
||||
}; |
||||
</script> |
||||
|
||||
<style lang="scss" scoped> |
||||
.wrap { |
||||
padding: 24px; |
||||
background: url(../../../assets/images/product/bg1.png) 0 373px no-repeat, |
||||
url(../../../assets/images/product/bg2.png) bottom right no-repeat; |
||||
background-color: #f3f6fa; |
||||
|
||||
.inner { |
||||
width: 1146px; |
||||
margin: 0 auto; |
||||
} |
||||
|
||||
.top { |
||||
display: flex; |
||||
padding: 24px; |
||||
background-color: #fff; |
||||
border-radius: 10px; |
||||
|
||||
.pics { |
||||
width: 484px; |
||||
margin-right: 20px; |
||||
|
||||
.pic { |
||||
width: 100%; |
||||
height: 100%; |
||||
border-radius: 8px; |
||||
} |
||||
} |
||||
|
||||
.right { |
||||
width: 592px; |
||||
overflow: hidden; |
||||
} |
||||
|
||||
h6 { |
||||
font-size: 24px; |
||||
font-weight: 600; |
||||
color: #2e2d31; |
||||
} |
||||
|
||||
.meta { |
||||
margin: 10px 0; |
||||
font-size: 12px; |
||||
color: #2e2d31; |
||||
|
||||
.val { |
||||
color: #007eff; |
||||
} |
||||
} |
||||
|
||||
.des { |
||||
margin-bottom: 15px; |
||||
font-size: 14px; |
||||
color: #666; |
||||
line-height: 20px; |
||||
@include mul-ellipsis(3); |
||||
} |
||||
|
||||
.field { |
||||
display: inline-flex; |
||||
align-items: center; |
||||
margin: 0 20px 10px 0; |
||||
font-size: 14px; |
||||
color: #2e2d31; |
||||
|
||||
&:last-child { |
||||
margin-right: 0; |
||||
} |
||||
|
||||
.label { |
||||
color: #333; |
||||
} |
||||
|
||||
.text { |
||||
max-width: 160px; |
||||
@include ellipsis; |
||||
} |
||||
|
||||
img { |
||||
margin-right: 5px; |
||||
} |
||||
} |
||||
|
||||
.fields { |
||||
display: flex; |
||||
// justify-content: space-between; |
||||
flex-wrap: wrap; |
||||
height: 60px; |
||||
margin: 10px 0 10px; |
||||
overflow: hidden; |
||||
} |
||||
|
||||
.btn { |
||||
width: 119px; |
||||
height: 46px; |
||||
color: #fff; |
||||
background: #007eff; |
||||
border-radius: 6px; |
||||
border: 0; |
||||
cursor: pointer; |
||||
|
||||
&:hover { |
||||
opacity: 0.9; |
||||
} |
||||
|
||||
&:first-child { |
||||
margin-left: 11px; |
||||
} |
||||
} |
||||
} |
||||
|
||||
.tab { |
||||
z-index: 100; |
||||
position: sticky; |
||||
top: 90px; |
||||
display: flex; |
||||
padding: 10px 10px 20px; |
||||
background-color: #fff; |
||||
|
||||
li { |
||||
position: relative; |
||||
margin-right: 20px; |
||||
font-size: 18px; |
||||
line-height: 25px; |
||||
color: #0b1d30; |
||||
cursor: pointer; |
||||
|
||||
&:after { |
||||
content: ''; |
||||
position: absolute; |
||||
bottom: -10px; |
||||
left: 50%; |
||||
width: 53px; |
||||
height: 4px; |
||||
transform: translateX(-50%); |
||||
} |
||||
|
||||
&.active:after { |
||||
background-color: #007eff; |
||||
} |
||||
} |
||||
} |
||||
|
||||
.course { |
||||
display: flex; |
||||
margin-top: 20px; |
||||
|
||||
.detail { |
||||
width: calc(100% - 294px); |
||||
padding: 20px 24px; |
||||
background-color: #fff; |
||||
border-radius: 10px; |
||||
} |
||||
} |
||||
|
||||
.courses { |
||||
padding-top: 10px; |
||||
overflow: hidden; |
||||
|
||||
/deep/.des { |
||||
div, |
||||
p, |
||||
span { |
||||
font-family: PingFangSC-Regular !important; |
||||
} |
||||
|
||||
img { |
||||
max-width: 100%; |
||||
object-fit: cover; |
||||
} |
||||
} |
||||
|
||||
.chapters { |
||||
margin-top: 16px; |
||||
max-height: calc(100% - 53px); |
||||
overflow: auto; |
||||
} |
||||
|
||||
.chapter { |
||||
padding-top: 60px; |
||||
margin-bottom: 20px; |
||||
} |
||||
|
||||
.chapterName { |
||||
padding: 0 12px; |
||||
margin-bottom: 15px; |
||||
color: #333; |
||||
font-size: 14px; |
||||
} |
||||
|
||||
.sectionName { |
||||
position: relative; |
||||
display: flex; |
||||
justify-content: space-between; |
||||
padding: 12px; |
||||
font-size: 14px; |
||||
color: #666; |
||||
border-radius: 8px; |
||||
@include ellipsis; |
||||
|
||||
img { |
||||
margin-right: 8px; |
||||
} |
||||
|
||||
&:hover { |
||||
color: #007eff; |
||||
background: #f6fbff; |
||||
} |
||||
|
||||
.val { |
||||
display: inline-flex; |
||||
align-items: center; |
||||
} |
||||
|
||||
.icon { |
||||
font-size: 18px; |
||||
color: #666; |
||||
} |
||||
} |
||||
} |
||||
|
||||
.products { |
||||
width: 270px; |
||||
margin-left: 24px; |
||||
|
||||
&>h6 { |
||||
font-size: 16px; |
||||
color: #0b1d30; |
||||
} |
||||
} |
||||
|
||||
.product { |
||||
margin-top: 11px; |
||||
|
||||
li { |
||||
position: relative; |
||||
margin-bottom: 15px; |
||||
cursor: pointer; |
||||
border-radius: 10px; |
||||
background-color: #fff; |
||||
transition: all 0.3s; |
||||
overflow: hidden; |
||||
|
||||
img { |
||||
width: 100%; |
||||
height: 140px; |
||||
transition: 0.3s; |
||||
object-fit: cover; |
||||
} |
||||
|
||||
.my-school { |
||||
position: absolute; |
||||
top: 0; |
||||
right: 0; |
||||
width: 57px; |
||||
height: 22px; |
||||
} |
||||
|
||||
.texts { |
||||
padding: 10px; |
||||
} |
||||
|
||||
.title { |
||||
margin-bottom: 10px; |
||||
color: #0b1d30; |
||||
font-size: 14px; |
||||
font-weight: 600; |
||||
word-wrap: break-word; |
||||
word-break: break-all; |
||||
overflow: hidden; |
||||
text-overflow: ellipsis; |
||||
white-space: nowrap; |
||||
} |
||||
|
||||
.desc { |
||||
min-height: 34px; |
||||
color: #757f92; |
||||
font-size: 12px; |
||||
display: -webkit-box; |
||||
-webkit-box-orient: vertical; |
||||
-webkit-line-clamp: 2; |
||||
overflow: hidden; |
||||
|
||||
&.not-tag { |
||||
-webkit-line-clamp: 3; |
||||
} |
||||
} |
||||
|
||||
.tags { |
||||
margin-top: 10px; |
||||
} |
||||
|
||||
.tag { |
||||
margin-right: 8px; |
||||
color: #007eff; |
||||
background-color: #f9f9f9; |
||||
border: 0; |
||||
} |
||||
|
||||
.type { |
||||
display: inline-block; |
||||
padding: 4px 11px; |
||||
font-size: 12px; |
||||
color: #666; |
||||
border: 1px solid #dadada; |
||||
border-radius: 20px; |
||||
} |
||||
|
||||
.metas { |
||||
display: flex; |
||||
justify-content: space-between; |
||||
align-items: center; |
||||
margin-top: 10px; |
||||
} |
||||
|
||||
.meta { |
||||
display: inline-flex; |
||||
align-items: center; |
||||
color: #b5bfd5; |
||||
font-size: 12px; |
||||
|
||||
.icon { |
||||
width: 14px; |
||||
max-height: 14px; |
||||
margin-right: 3px; |
||||
} |
||||
} |
||||
|
||||
&:hover { |
||||
box-shadow: 0px 5px 12px 4px rgba(142, 123, 253, 0.09), 0px 3px 6px 0px rgba(142, 123, 253, 0.12), |
||||
0px 1px 2px -2px rgba(142, 123, 253, 0.16); |
||||
|
||||
img { |
||||
transform: scale(1.05); |
||||
} |
||||
} |
||||
} |
||||
} |
||||
} |
||||
|
||||
.link-line { |
||||
margin: 5px 0; |
||||
|
||||
.url { |
||||
color: #007eff; |
||||
text-decoration: underline; |
||||
} |
||||
} |
||||
|
||||
.buy { |
||||
text-align: center; |
||||
|
||||
.tips { |
||||
margin-bottom: 10px; |
||||
font-size: 14px; |
||||
} |
||||
|
||||
img { |
||||
width: 85%; |
||||
} |
||||
} |
||||
|
||||
/deep/.qrcode-dia { |
||||
.el-dialog__header, |
||||
.el-dialog__body { |
||||
padding: 0; |
||||
} |
||||
|
||||
.el-dialog__headerbtn .el-dialog__close { |
||||
color: #fff; |
||||
} |
||||
} |
||||
|
||||
@media (max-width: 1200px) { |
||||
.wrap { |
||||
.inner { |
||||
width: 100%; |
||||
} |
||||
|
||||
.top { |
||||
flex-direction: column; |
||||
|
||||
.pics { |
||||
width: 100%; |
||||
margin-bottom: 20px; |
||||
} |
||||
|
||||
.el-image__preview { |
||||
object-fit: cover; |
||||
} |
||||
|
||||
.right { |
||||
width: 100%; |
||||
} |
||||
} |
||||
|
||||
.course { |
||||
flex-direction: column; |
||||
|
||||
.detail { |
||||
width: 100%; |
||||
margin-bottom: 20px; |
||||
} |
||||
|
||||
.products { |
||||
width: 100%; |
||||
margin-left: 0; |
||||
} |
||||
} |
||||
} |
||||
} |
||||
|
||||
@media (max-width: 480px) { |
||||
.wrap { |
||||
.tab { |
||||
position: static; |
||||
} |
||||
} |
||||
} |
||||
</style> |
Loading…
Reference in new issue