yujialong 6 months ago
parent 6a2dd7ce78
commit d6c7ff0402
  1. BIN
      src/assets/images/about-bg.png
  2. 73
      src/components/menuTree/index.vue
  3. 452
      src/layouts/footer/index.vue
  4. 304
      src/layouts/header/index.vue
  5. 12
      src/layouts/home/index.vue
  6. 174
      src/layouts/navbar/index.vue
  7. 39
      src/mixins/page/index.js
  8. 2214
      src/pages/aboutUs/index.vue
  9. 287
      src/pages/article/index.vue
  10. 1612
      src/pages/column/index.vue
  11. 1753
      src/pages/home/index.vue
  12. 1190
      src/pages/index/list/index.vue
  13. 898
      src/pages/index/show/index.vue

Binary file not shown.

Before

Width:  |  Height:  |  Size: 695 KiB

After

Width:  |  Height:  |  Size: 633 KiB

@ -1,26 +1,19 @@
<template> <template>
<div class="menu-child"> <div class="menu-child">
<template v-for="item in this.menuList"> <template v-for="item in this.menuList">
<el-submenu :popper-class="site == 2 && $store.getters.getModelType ? 'iasf-menu-popup' : ''" <el-submenu :popper-class="$store.getters.getModelType ? 'iasf-menu-popup' : isHome ? 'home-menu-popup' : ''"
:class="{active: $route.query.id == item.id}" :class="{ active: $route.query.id == item.id }" :key="item.id" :index="String(item.id)" :id="item.id"
:key="item.id" v-if="item.children && item.children.length && item.children.find(i => i.menuVisible !== 1)">
:index="String(item.id)"
:id="item.id"
v-if="item.children && item.children.length && item.children.find(i=>i.menuVisible !==1)">
<template slot="title"> <template slot="title">
<span slot="title" <span slot="title" :id="item.id">{{ item.columnName }}</span>
:id="item.id">{{item.columnName}}</span>
</template> </template>
<menuTree :menuList="item.children"></menuTree> <menuTree :menuList="item.children"></menuTree>
</el-submenu> </el-submenu>
<template v-else> <template v-else>
<template v-if="item.menuVisible!==1"> <template v-if="item.menuVisible !== 1">
<el-menu-item :key="item.id" <el-menu-item :key="item.id" :id="item.id" :index="String(item.id)"
:id="item.id" :class="{ active: $route.query.id == item.id }">
:index="String(item.id)" <span slot="title" :id="item.id">{{ item.columnName }}</span>
:class="{active: $route.query.id == item.id}">
<span slot="title"
:id="item.id">{{item.columnName}}</span>
</el-menu-item> </el-menu-item>
</template> </template>
</template> </template>
@ -55,38 +48,40 @@ export default {
</script> </script>
<style lang="scss" scoped> <style lang="scss" scoped>
.menu-child { .menu-child {
/deep/ .el-menu-item {
background-color: transparent !important;
}
&:hover {
background-color: transparent !important;
}
}
@media (max-width: 1200px) {
.menu-child {
/deep/ .el-menu-item { /deep/ .el-menu-item {
background-color: transparent !important; height: 40px;
line-height: 40px;
color: black !important;
background-color: transparent !important;
} }
&:hover { &:hover {
background-color: transparent !important; background-color: transparent !important;
} }
} }
@media (max-width: 1200px) {
.menu-child {
/deep/ .el-menu-item {
height: 40px;
line-height: 40px;
color: black !important;
background-color: transparent !important;
}
&:hover { .el-submenu {
background-color: transparent !important; &:focus-visible {
} outline: none;
} }
.el-submenu { /deep/ .el-submenu__title {
&:focus-visible { height: 40px;
outline: none; line-height: 40px;
} font-size: 1rem;
/deep/ .el-submenu__title { color: black !important;
height: 40px;
line-height: 40px;
font-size: 1rem;
color: black !important;
}
} }
}
} }
</style> </style>

@ -1,82 +1,58 @@
<template> <template>
<div> <div>
<div v-if="showDefaultPath.includes($route.path)" <div v-if="showDefaultPath.includes($route.path)" :class="['footer', { iasf: isIasf }]">
:class="['footer', {iasf: isIasf}]">
<template v-if="isIasf"> <template v-if="isIasf">
<div class="mask"></div> <div class="mask"></div>
<ul v-if="isIasf" <ul v-if="isIasf" class="entry">
class="entry"> <li :class="{ 'cursor-pointer': isLink(modules[13].form.link.linkName) }" @click="openLink(modules[14].form)">
<li :class="{'cursor-pointer': isLink(modules[13].form.link.linkName)}" <img class="icon" :src="modules[14].form.pic" alt="">
@click="openLink(modules[14].form)">
<img class="icon"
:src="modules[14].form.pic"
alt="">
<p class="text">{{ modules[14].form.title }}</p> <p class="text">{{ modules[14].form.title }}</p>
</li> </li>
<li :class="{'cursor-pointer': isLink(modules[14].form.link.linkName)}" <li :class="{ 'cursor-pointer': isLink(modules[14].form.link.linkName) }" @click="openLink(modules[15].form)">
@click="openLink(modules[15].form)"> <img class="icon" :src="modules[15].form.pic" alt="">
<img class="icon"
:src="modules[15].form.pic"
alt="">
<p class="text">{{ modules[15].form.title }}</p> <p class="text">{{ modules[15].form.title }}</p>
</li> </li>
<li :class="{'cursor-pointer': isLink(modules[15].form.link.linkName)}" <li :class="{ 'cursor-pointer': isLink(modules[15].form.link.linkName) }" @click="openLink(modules[16].form)">
@click="openLink(modules[16].form)"> <img class="icon" :src="modules[16].form.pic" alt="">
<img class="icon"
:src="modules[16].form.pic"
alt="">
<p class="text">{{ modules[16].form.title }}</p> <p class="text">{{ modules[16].form.title }}</p>
</li> </li>
<li :class="{'cursor-pointer': isLink(modules[16].form.link.linkName)}" <li :class="{ 'cursor-pointer': isLink(modules[16].form.link.linkName) }" @click="openLink(modules[17].form)">
@click="openLink(modules[17].form)"> <img class="icon" :src="modules[17].form.pic" alt="">
<img class="icon"
:src="modules[17].form.pic"
alt="">
<p class="text">{{ modules[17].form.title }}</p> <p class="text">{{ modules[17].form.title }}</p>
</li> </li>
<li :class="{'cursor-pointer': isLink(modules[17].form.link.linkName)}" <li :class="{ 'cursor-pointer': isLink(modules[17].form.link.linkName) }" @click="openLink(modules[18].form)">
@click="openLink(modules[18].form)"> <img class="icon" :src="modules[18].form.pic" alt="">
<img class="icon"
:src="modules[18].form.pic"
alt="">
<p class="text">{{ modules[18].form.title }}</p> <p class="text">{{ modules[18].form.title }}</p>
</li> </li>
</ul> </ul>
</template> </template>
<div class="relative"> <div class="relative text-center">
<div class="info"> <img src="https://huorantech.com/images/about/logo.png" alt="">
<div class="leftBox"> <div class="flex j-center a-center m-t-20">
<p class="meta">Copyright ©2002- 2021</p> <div class="flex">
<p class="meta">Institute of Advanced Science Facilities, ShenzhenIASF</p> <div v-for="(item, i) in columns" :key="i" class="column">
<p class="meta">Tel400-0010-998</p> <h6 @click="columnTo(item)">{{ item.columnName }}</h6>
</div> <ul v-if="item.children.length" class="children">
<div v-for="(item, i) in columns" <li v-for="(column, j) in item.children" :key="j" @click="columnTo(column)">{{ column.columnName }}</li>
:key="i" </ul>
class="column"> </div>
<h6 @click="columnTo(item)">{{ item.columnName }}</h6>
<ul v-if="item.children.length"
class="children">
<li v-for="(column, j) in item.children"
:key="j"
@click="columnTo(column)">{{ column.columnName }}</li>
</ul>
</div> </div>
</div> </div>
<a class="copyright">粤ICP备2020131940号 粤公安网34565432456765432号</a> <div class="text-center">
<p class="meta">广东省深圳市龙华区民治街道红山社区龙光玖钻商务中心南期A座2311</p>
<a class="copyright" href="https://beian.miit.gov.cn/#/Integrated/index" target="_blank">粤ICP备20072679号</a>
</div>
</div> </div>
</div> </div>
<div v-if="showContactPath.includes($route.path)" <div v-if="showContactPath.includes($route.path)" class="contact">
class="contact">
<div class="inner"> <div class="inner">
<div class="title"> <div class="title">
<h6>Contact us</h6> <h6>Contact us</h6>
<p class="text">CONTACT US</p> <p class="text">CONTACT US</p>
</div> </div>
<div class="region"> <div class="region">
<img class="dot" <img class="dot" src="@/assets/images/dot.png" alt="">
src="@/assets/images/dot.png"
alt="">
<p class="name">Shenzhen</p> <p class="name">Shenzhen</p>
</div> </div>
<div class="info"> <div class="info">
@ -86,22 +62,17 @@
<div class="texts"> <div class="texts">
<div class="lines"> <div class="lines">
<div class="line"> <div class="line">
<img class="icon" <img class="icon" src="@/assets/images/mail.png" alt="">
src="@/assets/images/mail.png"
alt="">
Email: {{ isSfel ? 'fel@mail.iasf.ac.cn' : 'std@mail.iasf.ac.cn' }} Email: {{ isSfel ? 'fel@mail.iasf.ac.cn' : 'std@mail.iasf.ac.cn' }}
</div> </div>
<div class="line"> <div class="line">
<img class="icon" <img class="icon" src="@/assets/images/tel.png" alt="">
src="@/assets/images/tel.png"
alt="">
Telephone: {{ isSfel ? '0755-21096052' : '0086-755-21096026' }} Telephone: {{ isSfel ? '0755-21096052' : '0086-755-21096026' }}
</div> </div>
<div class="line"> <div class="line">
<img class="icon" <img class="icon" src="@/assets/images/address.png" alt="">
src="@/assets/images/address.png" Address: {{ isSfel ? '自由电子激光工程经理部' :
alt=""> '268 Zhenyuan St, Building A3, Floor 3-6, Guangming District, Shenzhen, Guangdong, P.R.China' }}
Address: {{ isSfel ? '自由电子激光工程经理部' : '268 Zhenyuan St, Building A3, Floor 3-6, Guangming District, Shenzhen, Guangdong, P.R.China' }}
</div> </div>
</div> </div>
<div class="qrcode"> <div class="qrcode">
@ -244,190 +215,223 @@ export default {
}; };
</script> </script>
<style lang="scss" scoped> <style lang="scss" scoped>
.leftBox {
margin-right: 100px;
}
.footer { .footer {
position: relative; position: relative;
padding: 64px 20% 25px; padding: 48px 20% 25px;
color: #fff; color: #fff;
background-color: #091733; background-color: #091733;
overflow: hidden; overflow: hidden;
.info {
display: flex; .info {
} display: flex;
.meta { }
margin-bottom: 10px;
font-size: 14px; .meta {
margin-bottom: 10px;
font-size: 14px;
}
.column {
margin: 0 20px;
h6 {
margin-bottom: 20px;
font-size: 16px;
white-space: nowrap;
cursor: pointer;
} }
.column { }
margin: 0 20px;
h6 { .children {
margin-bottom: 20px; li {
font-size: 16px; margin: 12px 0;
white-space: nowrap; font-size: 14px;
cursor: pointer; color: #6d7384;
} white-space: nowrap;
cursor: pointer;
} }
}
.copyright {
font-size: 14px;
color: #6d7384;
}
&.iasf {
padding-top: 50px;
background: url(http://10.10.11.7/images/iasf/footer.jpg) 0 -400px/100% auto no-repeat;
background-color: #091733;
.children { .children {
li { li {
margin: 12px 0; color: #fff;
font-size: 14px; }
color: #6d7384;
white-space: nowrap;
cursor: pointer;
}
}
.copyright {
font-size: 14px;
color: #6d7384;
} }
&.iasf {
padding-top: 50px; .mask {
background: url(http://10.10.11.7/images/iasf/footer.jpg) 0 -400px/100% auto no-repeat; position: absolute;
background-color: #091733; top: 0;
.children { right: 0;
li { bottom: 0;
color: #fff; left: 0;
} background-color: rgba(0, 0, 0, 0.6);
}
.mask {
position: absolute;
top: 0;
right: 0;
bottom: 0;
left: 0;
background-color: rgba(0, 0, 0, 0.6);
}
} }
}
} }
.entry { .entry {
position: relative; position: relative;
display: flex; display: flex;
justify-content: space-between; justify-content: space-between;
margin-bottom: 100px; margin-bottom: 100px;
li {
display: inline-flex; li {
flex-direction: column; display: inline-flex;
justify-content: center; flex-direction: column;
align-items: center; justify-content: center;
text-align: center; align-items: center;
} text-align: center;
img { }
max-width: 100px;
img {
max-width: 100px;
}
.text {
margin-top: 15px;
font-size: 1rem;
font-family: PingFangSC-Medium, PingFang SC;
color: #fff;
}
}
.contact {
position: relative;
padding: 0 0 73px 0;
background: url(../../assets/images/map.png) 0 0 / cover no-repeat;
.inner {
width: 1082px;
margin: 0 auto;
}
.title {
width: 419px;
height: 263px;
padding: 147px 0 0 40px;
background-color: #0854fe;
h6 {
z-index: 2;
position: relative;
margin-bottom: 20px;
font-size: 45px;
font-family: PingFangSC-Semibold, PingFang SC;
font-weight: 600;
color: #fff;
} }
.text { .text {
margin-top: 15px; margin-top: -65px;
font-size: 1rem; font-size: 48px;
font-family: PingFangSC-Medium, PingFang SC; -webkit-text-fill-color: transparent;
color: #fff; -webkit-text-stroke: 1px #4073e5;
} }
} }
.contact {
position: relative; .region {
padding: 0 0 73px 0; position: absolute;
background: url(../../assets/images/map.png) 0 0 / cover no-repeat; top: 152px;
.inner { left: 70%;
width: 1082px; display: flex;
margin: 0 auto; align-items: center;
font-size: 20px;
color: #fff;
img {
margin-right: 20px;
} }
.title { }
width: 419px;
height: 263px; .info {
padding: 147px 0 0 40px; margin: 55px 0 0 8px;
background-color: #0854fe;
h6 { .texts {
z-index: 2; display: flex;
position: relative; align-items: center;
margin-bottom: 20px; margin-top: 24px;
font-size: 45px;
font-family: PingFangSC-Semibold, PingFang SC;
font-weight: 600;
color: #fff;
}
.text {
margin-top: -65px;
font-size: 48px;
-webkit-text-fill-color: transparent;
-webkit-text-stroke: 1px #4073e5;
}
} }
.region {
position: absolute; .item {
top: 152px; margin-right: 75px;
left: 70%;
display: flex;
align-items: center;
font-size: 20px;
color: #fff;
img {
margin-right: 20px;
}
} }
.info {
margin: 55px 0 0 8px; .line {
.texts { display: flex;
display: flex; align-items: center;
align-items: center; margin-bottom: 20px;
margin-top: 24px; font-size: 16px;
} color: #fff;
.item {
margin-right: 75px; img {
} margin-right: 8px;
.line { }
display: flex;
align-items: center;
margin-bottom: 20px;
font-size: 16px;
color: #fff;
img {
margin-right: 8px;
}
}
} }
.qrcode { }
text-align: center;
.text { .qrcode {
margin-top: 10px; text-align: center;
font-size: 12px;
color: #fff; .text {
} margin-top: 10px;
font-size: 12px;
color: #fff;
} }
}
} }
@media (max-width: 1500px) { @media (max-width: 1500px) {
.footer { .footer {
padding: 64px 10% 25px; padding: 64px 10% 25px;
} }
} }
@media (max-width: 1350px) { @media (max-width: 1350px) {
.inner { .inner {
width: 100% !important; width: 100% !important;
.title {
width: 100%; .title {
text-align: center; width: 100%;
} text-align: center;
.region {
top: 300px;
left: 50%;
}
.info {
margin-top: 90px;
}
} }
.footer {
.info { .region {
flex-direction: column; top: 300px;
.column { left: 50%;
margin-top: 20px;
margin-left: 0;
}
}
} }
.entry {
flex-direction: column; .info {
li { margin-top: 90px;
margin-bottom: 30px; }
} }
.footer {
.info {
flex-direction: column;
.column {
margin-top: 20px;
margin-left: 0;
}
}
}
.entry {
flex-direction: column;
li {
margin-bottom: 30px;
} }
}
} }
</style> </style>

@ -1,47 +1,30 @@
<template> <template>
<div :class="['header', { estate: isEstate, iasf: isIasf }]"> <div :class="['header', { channel: isHome, estate: isEstate, iasf: isIasf }]">
<a class="logo" <a class="logo" @click="toIndex">
@click="toIndex">
<template v-if="GTA"> <template v-if="GTA">
<img src="@/assets/images/logo2.png" <img src="@/assets/images/logo2.png" alt="">
alt="">
产业学院平台 产业学院平台
</template> </template>
<img v-else <img v-else src="@/assets/images/logo.png" alt="">
src="@/assets/images/logo.png"
alt="">
</a> </a>
<!-- pc端 --> <!-- pc端 -->
<template v-if="$store.getters.getModelType"> <template v-if="$store.getters.getModelType">
<navbar v-if="navShow" <navbar v-if="navShow" ref="nav" :isHome.sync="isHome" :isEstate.sync="isEstate" :isIasf.sync="isIasf"
ref="nav" @showMoreBtns="updateBtnsType"></navbar>
:isHome.sync="isHome"
:isEstate.sync="isEstate"
:isIasf.sync="isIasf"
@showMoreBtns="updateBtnsType"></navbar>
<div class="tools"> <div class="tools">
<div class="login" <div class="login" @click="toLogin">
@click="toLogin"> <img src="@/assets/images/user.png" alt="">
<img src="@/assets/images/user.png"
alt="">
<span>注册登录</span> <span>注册登录</span>
</div> </div>
</div> </div>
</template> </template>
<!-- 手机端 --> <!-- 手机端 -->
<div v-else <div v-else class="mobile-tools">
class="mobile-tools"> <i class="login el-icon-user-solid" @click="toLogin"></i>
<i class="login el-icon-user-solid" <i class="menu-icon" :class="modelType ? 'el-icon-s-fold' : 'el-icon-s-unfold'" @click.stop="updateModelType"></i>
@click="toLogin"></i> <div class="contentBox" v-show="modelType">
<i class="menu-icon" <navbar ref="nav" :isHome.sync="isHome" @updateModelType="updateType"></navbar>
:class="modelType ? 'el-icon-s-fold': 'el-icon-s-unfold' "
@click.stop="updateModelType"></i>
<div class="contentBox"
v-show="modelType">
<navbar ref="nav"
:isHome.sync="isHome"
@updateModelType="updateType"></navbar>
</div> </div>
</div> </div>
@ -187,142 +170,165 @@ export default {
</script> </script>
<style scoped lang="scss"> <style scoped lang="scss">
$height: 90px; $height: 90px;
.header { .header {
z-index: 10; z-index: 10;
position: fixed; position: fixed;
top: 0; top: 0;
left: 0; left: 0;
display: flex; display: flex;
justify-content: space-between; justify-content: space-between;
align-items: center;
width: 100%;
height: $height;
padding: 0 5% 0 5%;
&:not(.channel) {
background-color: #fff;
border-bottom: 1px solid #f7f7f7;
}
&.estate {
background-color: rgba(0, 0, 0, 0.15);
}
.logo {
display: inline-flex;
align-items: center; align-items: center;
width: 100%; font-size: 20px;
height: $height; font-weight: 600;
padding: 0 5% 0 5%; color: #333;
&:not(.channel) { cursor: pointer;
background-color: #fff;
border-bottom: 1px solid #f7f7f7; img {
} width: 150px;
&.estate {
background-color: rgba(0, 0, 0, 0.15);
}
.logo {
display: inline-flex;
align-items: center;
font-size: 20px;
font-weight: 600;
color: #333;
cursor: pointer;
img {
width: 150px;
}
}
.tools {
.login {
display: inline-flex;
align-items: center;
cursor: pointer;
&:hover {
opacity: 0.9;
}
span {
margin-left: 5px;
color: #666;
font-size: 14px;
}
}
}
.search {
margin-right: 43px;
} }
.mobile-tools { }
display: inline-flex;
align-items: center; .tools {
.login { .login {
font-size: 1.5rem; display: inline-flex;
color: #c1c1c1; align-items: center;
cursor: pointer; cursor: pointer;
}
&:hover {
opacity: 0.9;
}
span {
margin-left: 5px;
color: #666;
font-size: 14px;
}
} }
.menu-icon { }
margin-left: 10px;
font-size: 1.8rem; .search {
color: #c1c1c1; margin-right: 43px;
cursor: pointer; }
.mobile-tools {
display: inline-flex;
align-items: center;
.login {
font-size: 1.5rem;
color: #c1c1c1;
cursor: pointer;
} }
}
.menu-icon {
margin-left: 10px;
font-size: 1.8rem;
color: #c1c1c1;
cursor: pointer;
}
} }
.search-wrap { .search-wrap {
position: absolute; position: absolute;
top: 67px; top: 67px;
right: 89px; right: 89px;
display: flex; display: flex;
align-items: center; align-items: center;
padding: 10px 15px 10px 10px; padding: 10px 15px 10px 10px;
background-color: #fff; background-color: #fff;
box-shadow: 0px 6px 9px 0px rgba(0, 0, 0, 0.3); box-shadow: 0px 6px 9px 0px rgba(0, 0, 0, 0.3);
input {
width: 300px; input {
height: 40px; width: 300px;
padding: 0 40px 0 15px; height: 40px;
font-size: 1.14rem; padding: 0 40px 0 15px;
color: #333; font-size: 1.14rem;
line-height: 46px; color: #333;
border: 0; line-height: 46px;
border-radius: 4px; border: 0;
outline: none; border-radius: 4px;
} outline: none;
.search-icon { }
padding-right: 15px;
margin: 0 15px; .search-icon {
cursor: pointer; padding-right: 15px;
border-right: 1px solid #ccc; margin: 0 15px;
} cursor: pointer;
.close-icon { border-right: 1px solid #ccc;
font-size: 2rem; }
cursor: pointer;
} .close-icon {
font-size: 2rem;
cursor: pointer;
}
} }
.menu-child { .menu-child {
/deep/ .el-submenu__title { /deep/ .el-submenu__title {
font-size: 1rem; font-size: 1rem;
} }
} }
.contentBox { .contentBox {
width: 100%; width: 100%;
position: absolute; position: absolute;
top: 90px; top: 90px;
left: 0; left: 0;
background-color: white; background-color: white;
z-index: 9999; z-index: 9999;
max-height: 30rem; max-height: 30rem;
overflow-y: scroll; overflow-y: scroll;
} }
@media (max-width: 1660px) { @media (max-width: 1660px) {
.header { .header {
.logo { .logo {
left: 10px; left: 10px;
} }
.search {
margin-right: 20px !important; .search {
} margin-right: 20px !important;
.tools {
right: 30px;
}
} }
.tools {
right: 30px;
}
}
} }
@media (max-width: 1200px) { @media (max-width: 1200px) {
.header { .header {
color: black !important; color: black !important;
background-color: #fff; background-color: #fff;
} }
.search-wrap {
right: 10px; .search-wrap {
top: 0; right: 10px;
width: 70%; top: 0;
input { width: 70%;
width: 15rem;
padding: 0 0.5rem 0 0.1rem; input {
} width: 15rem;
padding: 0 0.5rem 0 0.1rem;
} }
}
} }
</style> </style>

@ -2,8 +2,7 @@
<div :class="['main', { channel: isHome, 'site-en': handleClass() }]"> <div :class="['main', { channel: isHome, 'site-en': handleClass() }]">
<v-head ref="header"></v-head> <v-head ref="header"></v-head>
<div class="layout"> <div class="layout">
<transition name="move" <transition name="move" mode="out-in">
mode="out-in">
<router-view class="view"></router-view> <router-view class="view"></router-view>
</transition> </transition>
<el-backtop target=".layout"></el-backtop> <el-backtop target=".layout"></el-backtop>
@ -77,9 +76,10 @@ export default {
</script> </script>
<style lang="scss" scoped> <style lang="scss" scoped>
.main:not(.channel) { .main:not(.channel) {
min-height: calc(100% - 90px); min-height: calc(100% - 90px);
.layout {
padding-top: 90px; .layout {
} padding-top: 90px;
}
} }
</style> </style>

@ -1,19 +1,12 @@
<template> <template>
<div> <div>
<el-menu :class="['nav', {estate: isEstate,changing: !showMenu}]" <el-menu :class="['nav', { home: isHome, estate: isEstate, changing: !showMenu }]" ref="elMenu" :key="menuRefresh"
ref="elMenu" :mode="$store.getters.getModelType ? 'horizontal' : 'vertical'" :background-color="bgColor"
:key="menuRefresh" :text-color="textColor" :active-text-color="activeTextColor" @open="jump" @select="jump"
:mode="$store.getters.getModelType ? 'horizontal' : 'vertical' " :default-active="String(active)">
:background-color="bgColor"
:text-color="textColor"
:active-text-color="activeTextColor"
@open="jump"
@select="jump"
:default-active="String(active)">
<menuTree :menuList="menus" /> <menuTree :menuList="menus" />
<el-submenu :popper-class="site == 2 && $store.getters.getModelType ? 'iasf-menu-popup' : ''" <el-submenu :popper-class="$store.getters.getModelType ? 'iasf-menu-popup' : isHome ? 'home-menu-popup' : ''"
v-show="showMoreBtns" v-show="showMoreBtns" index="522222">
index="522222">
<template slot="title"> <template slot="title">
<div class="moreBtns">{{ $t('column.more') }}</div> <div class="moreBtns">{{ $t('column.more') }}</div>
</template> </template>
@ -30,7 +23,7 @@ import mixins from '@/mixins/article'
import { mapMutations, mapGetters } from 'vuex' import { mapMutations, mapGetters } from 'vuex'
import Setting from '@/setting' import Setting from '@/setting'
export default { export default {
props: ['isEstate', 'isIasf'], props: ['isHome', 'isEstate', 'isIasf'],
mixins: [mixins], mixins: [mixins],
data () { data () {
return { return {
@ -65,12 +58,18 @@ export default {
this.getColumn() this.getColumn()
this.setSite(siteId) this.setSite(siteId)
} }
this.handleColor()
},
isHome () {
this.handleColor()
}, },
getNavSum () { getNavSum () {
this.getColumn() this.getColumn()
} }
}, },
mounted () { mounted () {
this.lastHome = this.isHome
this.handleColor()
this.getColumn() this.getColumn()
}, },
methods: { methods: {
@ -120,6 +119,19 @@ export default {
} }
}).catch(err => { }) }).catch(err => { })
}, },
//
handleColor () {
const home = this.isHome
if (this.lastHome !== home) this.showMenu = false
this.bgColor = home ? 'transparent' : '#fff'
this.lastHome !== home && this.$nextTick(() => {
setTimeout(() => {
this.showMenu = true
}, 200)
})
this.lastHome = home
// this.menuRefresh++
},
// //
getPath (data, id) { getPath (data, id) {
for (const e of data) { for (const e of data) {
@ -146,82 +158,100 @@ export default {
<style lang="scss" scoped> <style lang="scss" scoped>
$height: 90px; $height: 90px;
.moreBtns { .moreBtns {
font-size: 1rem; font-size: 1rem;
font-weight: bold; font-weight: bold;
padding-top: 0.2rem; padding-top: 0.2rem;
} }
.changing { .changing {
opacity: 0; opacity: 0;
} }
/deep/.nav.el-menu--horizontal { /deep/.nav.el-menu--horizontal {
display: flex;
position: absolute;
top: 0;
left: 50%;
transform: translateX(-50%);
border: 0;
outline: none;
.el-menu-item,
.el-submenu__title {
height: $height;
line-height: $height;
span {
font-size: 1rem;
font-weight: 600;
}
&:hover {
background-color: transparent !important;
span {
color: #499eff;
}
}
}
.el-submenu__title {
display: inline-flex;
justify-content: center;
align-items: center;
}
.menu-child {
display: flex; display: flex;
position: absolute; }
top: 0;
left: 50%; .el-submenu__icon-arrow {
transform: translateX(-50%); position: static;
border: 0; margin: 0 0 0 5px;
outline: none; color: inherit;
}
.is-active {
color: #333 !important;
}
.active,
.active .el-submenu__title {
color: #1583ff !important;
}
&.home {
.el-menu-item, .el-menu-item,
.el-submenu__title { .el-submenu__title {
height: $height; &:hover {
line-height: $height; background-color: transparent !important;
span { span {
font-size: 1rem; color: #499eff;
font-weight: 600;
} }
&:hover { }
background-color: transparent !important;
span {
color: #1583ff;
}
}
}
.el-submenu__title {
display: inline-flex;
justify-content: center;
align-items: center;
}
.menu-child {
display: flex;
}
.el-submenu__icon-arrow {
position: static;
margin: 0 0 0 5px;
color: inherit;
} }
.is-active { .is-active {
color: #333 !important; color: #f9f9f9 !important;
} }
.active, .active,
.active .el-submenu__title { .active .el-submenu__title {
color: #1583ff !important; color: #1583ff !important;
}
&.home {
.el-menu-item,
.el-submenu__title {
&:hover {
background-color: transparent !important;
span {
color: #fff;
}
}
}
.is-active {
color: #f9f9f9 !important;
}
.active,
.active .el-submenu__title {
color: #fff !important;
}
} }
}
} }
@media (max-width: 1200px) { @media (max-width: 1200px) {
/deep/.nav { /deep/.nav {
.el-menu-item { .el-menu-item {
padding: 0 8px; padding: 0 8px;
color: black !important; color: black !important;
}
} }
}
} }
</style> </style>

@ -1,25 +1,36 @@
import Setting from '@/setting'
import Util from '@/libs/util' import Util from '@/libs/util'
export default { export default {
data() { data () {
return { return {
id: this.$route.query.id, id: this.$route.query.id,
preview: this.$route.query.preview, preview: this.$route.query.preview,
listPreview: this.$route.query.listPreview,
modules: [], modules: [],
articles: [] articles: []
} }
}, },
computed: { computed: {
site() { site () {
return this.$route.query.siteId || this.$store.state.content.site return this.$route.query.siteId || this.$store.state.content.site
} }
}, },
mounted() { mounted () {
this.getInfo && this.$route.query.id && this.getInfo() this.getInfo && this.$route.query.id && this.init()
}, },
methods: { methods: {
// 初始化
async init () {
// 预览直接可以看长页
if (this.listPreview || this.preview) {
this.getInfo()
} else {
// 前台正常进入长页,则需要先判断该长页的导航菜单字段是否被禁用
const { data } = await this.$post(`${this.api.findColumn}?id=${this.id}`)
data.menuVisible || this.getInfo()
}
},
// 打开链接 // 打开链接
async openLink(item) { async openLink (item) {
const { link } = item const { link } = item
if (link.linkName === '无' || link.linkName === '') return false if (link.linkName === '无' || link.linkName === '') return false
let href = link.linkAddress let href = link.linkAddress
@ -58,19 +69,19 @@ export default {
this.$post(`${this.api.findColumn}?id=${this.id}`).then(({ data }) => { this.$post(`${this.api.findColumn}?id=${this.id}`).then(({ data }) => {
href = this.$router.resolve(href + '&id=' + this.id + '&columnName=' + data.columnName + '&path=' + this.$route.path.replace('/', '')).href href = this.$router.resolve(href + '&id=' + this.id + '&columnName=' + data.columnName + '&path=' + this.$route.path.replace('/', '')).href
this.toHref(link.isOpen, href) this.toHref(link.isOpen, href)
}).catch(res => {}) }).catch(res => { })
} else { } else {
this.toHref(link.isOpen, href) this.toHref(link.isOpen, href)
} }
}, },
// 跳转地址 // 跳转地址
toHref(isOpen, href) { toHref (isOpen, href) {
if (isOpen) { if (isOpen) {
var userAgent = navigator.userAgent; var userAgent = navigator.userAgent;
var isSafari = /Safari/.test(userAgent) && !/Chrome/.test(userAgent); var isSafari = /Safari/.test(userAgent) && !/Chrome/.test(userAgent);
if(isSafari) { if (isSafari) {
window.location.href = href window.location.href = href
}else { } else {
window.open(href) window.open(href)
} }
} else { } else {
@ -79,7 +90,7 @@ export default {
} }
}, },
// 跳转文章页面 // 跳转文章页面
toArtice(item, form) { toArtice (item, form) {
if (item.articleTemplate === 24) { // 链接 if (item.articleTemplate === 24) { // 链接
let href = item.linkAddress let href = item.linkAddress
const cType = item.connectionType const cType = item.connectionType
@ -103,15 +114,15 @@ export default {
} }
}, },
// 关联栏目的查看全部跳转 // 关联栏目的查看全部跳转
toAll(form) { toAll (form) {
this.$router.push(`/column?id=${form.column[form.column.length - 1]}&siteId=${form.site}`) this.$router.push(`/column?id=${form.column[form.column.length - 1]}&siteId=${form.site}`)
}, },
// 判断是否有添加链接 // 判断是否有添加链接
isLink(linkName) { isLink (linkName) {
return linkName !== '无' && linkName !== '' return linkName !== '无' && linkName !== ''
}, },
// 关联栏目专用,获取栏目标题 // 关联栏目专用,获取栏目标题
getColumnTitle(form) { getColumnTitle (form) {
return form.columnTitle == 1 ? form.columnName : form.columnTitleCustom return form.columnTitle == 1 ? form.columnName : form.columnTitleCustom
} }
} }

File diff suppressed because it is too large Load Diff

@ -1,42 +1,35 @@
<template> <template>
<div v-show="loaded" <div v-show="loaded" class="wrap">
class="wrap">
<!-- 人物详情不展示banner --> <!-- 人物详情不展示banner -->
<div v-if="form.articleTemplate !== 23 && !isPeople" <div v-if="form.articleTemplate !== 23 && !isPeople" class="banner"
class="banner" :style="{ backgroundImage: form.bannerImg ? ('url(' + form.bannerImg + ')') : '' }">
:style="{backgroundImage: form.bannerImg ? ('url(' + form.bannerImg + ')') : ''}">
{{ form.columnName }} {{ form.columnName }}
</div> </div>
<div class="content"> <div class="content">
<Breadcrumb ref="breadcrumb" <Breadcrumb ref="breadcrumb" :data.sync="routes" />
:data.sync="routes" />
<div class="article"> <div class="article">
<div class="left"> <div class="left">
<template v-if="!isPeople"> <template v-if="!isPeople">
<h2>{{ form.title }}</h2> <h2>{{ form.title }}</h2>
<div class="meta">{{ form.source && form.source + ' | ' }} {{ form.author && form.author + ' | ' }} {{ form.releaseTime }}</div> <div class="meta">{{ form.source && form.source + ' | ' }} {{ form.author && form.author + ' | ' }} {{
<div class="meta">{{ form.edit && $t('column.edit') + ':' + form.edit }} {{ form.audit && ' | ' + $t('column.auditor') + ':' + form.audit }} {{ form.label && ' | ' + $t('column.label') + ':' + form.label }}</div> form.releaseTime }}</div>
<div class="meta">{{ form.edit && $t('column.edit') + ':' + form.edit }} {{ form.audit && ' | ' +
$t('column.auditor') + ':' + form.audit }} {{ form.label && ' | ' + $t('column.label') + ':' + form.label
}}</div>
</template> </template>
<p v-if="form.summary" <p v-if="form.summary" class="brief">{{ form.summary }}</p>
class="brief">{{ form.summary }}</p> <div class="des" id="mainBody" v-html="form.mainBody"></div>
<div class="des" <div v-if="form.fileList && form.fileList.length" class="annex">
id="mainBody" <h6>{{ $t('column.attachmentDownload') }}</h6>
v-html="form.mainBody"></div>
<div v-if="form.fileList && form.fileList.length"
class="annex">
<h6>{{$t('column.attachmentDownload')}}</h6>
<ul class="files"> <ul class="files">
<li v-for="(file, i) in form.fileList" <li v-for="(file, i) in form.fileList" :key="i">
:key="i">
<span class="name">{{ file.fileName }}</span> <span class="name">{{ file.fileName }}</span>
<span class="download" <span class="download" @click="download(file)">{{ $t('column.download') }}</span>
@click="download(file)">{{$t('column.download')}}</span>
</li> </li>
</ul> </ul>
</div> </div>
</div> </div>
<RightColumns ref="right" <RightColumns ref="right" :party="isParty" />
:party="isParty" />
</div> </div>
</div> </div>
</div> </div>
@ -189,136 +182,162 @@ export default {
<style lang="scss" scoped> <style lang="scss" scoped>
@import './editor.css'; @import './editor.css';
.content { .content {
width: 1200px; width: 1200px;
/deep/ .el-breadcrumb {
font-size: 0.98rem; /deep/ .el-breadcrumb {
} font-size: 0.98rem;
}
} }
.banner { .banner {
display: flex; display: flex;
align-items: center; align-items: center;
height: 21.6rem; height: 21.6rem;
padding-left: 10%; padding-left: 10%;
font-size: 2rem; font-size: 2rem;
font-weight: 600; font-weight: 600;
color: #fff; color: #fff;
background: url(../../assets/images/intro-bg.png) center center/cover no-repeat; background: url(../../assets/images/intro-bg.png) center center/cover no-repeat;
object-fit: cover; object-fit: cover;
} }
.article { .article {
display: flex; display: flex;
justify-content: space-between; justify-content: space-between;
.left {
width: 70%; .left {
width: 70%;
}
h2 {
font-size: 1.9rem;
color: #1c1c1c;
}
.meta {
margin: 1rem 0;
font-size: 0.88rem;
color: #9b9b9b;
}
.brief {
padding-bottom: 1.5rem;
margin: 1rem 0;
font-size: 1.2rem;
line-height: 1.6;
color: #606060;
border-bottom: 1px solid #d8d8d8;
}
/deep/.des {
// width: 100%;
// overflow: auto;
a {
color: rgb(0, 0, 238);
word-wrap: break-word;
} }
h2 {
font-size: 1.9rem; img {
color: #1c1c1c; max-width: 100%;
object-fit: cover;
} }
.meta {
margin: 1rem 0; ul {
font-size: 0.88rem; // padding-left: 40px;
color: #9b9b9b; list-style: disc;
li {
list-style: inherit;
}
} }
.brief {
padding-bottom: 1.5rem; ol {
margin: 1rem 0; // padding-left: 40px;
font-size: 1.2rem; list-style: decimal;
line-height: 1.6;
color: #606060; li {
border-bottom: 1px solid #d8d8d8; list-style: inherit;
}
} }
/deep/.des { }
// width: 100%;
// overflow: auto; .annex {
a { margin-top: 30px;
color: rgb(0, 0, 238);
word-wrap: break-word; h6 {
} padding-left: 8px;
img { margin-bottom: 20px;
max-width: 100%; font-size: 16px;
object-fit: cover; font-family: PingFangSC-Medium, PingFang SC;
} font-weight: 500;
ul { line-height: 1;
// padding-left: 40px; color: #333;
list-style: disc; border-left: 4px solid #1583ff;
li {
list-style: inherit;
}
}
ol {
// padding-left: 40px;
list-style: decimal;
li {
list-style: inherit;
}
}
} }
.annex {
margin-top: 30px; li {
h6 { display: flex;
padding-left: 8px; align-items: center;
margin-bottom: 20px; margin-bottom: 10px;
font-size: 16px; }
font-family: PingFangSC-Medium, PingFang SC;
font-weight: 500; .name {
line-height: 1; margin-right: 8px;
color: #333; font-size: 14px;
border-left: 4px solid #1583ff;
}
li {
display: flex;
align-items: center;
margin-bottom: 10px;
}
.name {
margin-right: 8px;
font-size: 14px;
}
.download {
color: #1583ff;
cursor: pointer;
}
} }
.download {
color: #1583ff;
cursor: pointer;
}
}
} }
@media (max-width: 1420px) { @media (max-width: 1420px) {
.content { .content {
width: 98%; width: 98%;
} }
} }
@media (max-width: 1200px) { @media (max-width: 1200px) {
.article { .article {
/deep/.des { /deep/.des {
img { img {
max-width: 100%; max-width: 100%;
max-height: 15rem; max-height: 15rem;
} }
}
} }
.banner { }
.banner {
font-size: 1.5rem;
}
.article {
flex-direction: column;
.left {
width: 100%;
margin-bottom: 20px;
h2 {
font-size: 1.5rem; font-size: 1.5rem;
}
} }
.article { }
flex-direction: column;
.left { .article {
width: 100%; .des {
margin-bottom: 20px; img {
h2 { height: 15rem !important;
font-size: 1.5rem; }
}
}
}
.article {
.des {
img {
height: 15rem !important;
}
}
}
.right {
width: 100%;
} }
}
.right {
width: 100%;
}
} }
</style> </style>

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

@ -1,126 +1,78 @@
<template> <template>
<div class="wrap"> <div class="wrap">
<div class="inner"> <div class="inner">
<Breadcrumb ref="breadcrumb" <Breadcrumb ref="breadcrumb" :data.sync="routes" />
:data.sync="routes" />
<div class="top"> <div class="top">
<el-carousel class="pics fadeInLeft" <el-carousel class="pics fadeInLeft" :interval="6000" height="278px"
:interval="6000" :arrow="form.pics.length > 1 ? 'hover' : 'never'" :indicator-position="form.pics.length > 1 ? '' : 'none'">
height="278px" <el-carousel-item v-for="(item, i) in form.pics" :key="i">
:arrow="form.pics.length > 1 ? 'hover' : 'never'" <el-image class="pic" :src="item" :preview-src-list="form.pics">
: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-image>
</el-carousel-item> </el-carousel-item>
</el-carousel> </el-carousel>
<div class="right fadeInRight" <div class="right fadeInRight" id="fields">
id="fields">
<h6>{{ form.mall.productName }}</h6> <h6>{{ form.mall.productName }}</h6>
<div v-if="isCourse" <div v-if="isCourse" class="meta">
class="meta">
<span class="val">{{ form.numberOfExperimentalItems }}</span> 个实验项目&emsp;&emsp; <span class="val">{{ form.numberOfExperimentalItems }}</span> 个实验项目&emsp;&emsp;
已有 <span class="val">{{ form.goodsRes.learningCount }}</span>人学过 已有 <span class="val">{{ form.goodsRes.learningCount }}</span>人学过
</div> </div>
<div class="des" <div class="des" v-html="form.mall.productIntroduction"></div>
v-html="form.mall.productIntroduction"></div>
<div class="fields"> <div class="fields">
<div class="field"> <div class="field">
<img src="@/assets/images/product/1.png" <img src="@/assets/images/product/1.png" alt=""> 适用专业
alt=""> 适用专业 <el-tooltip class="text" effect="dark" :visible-arrow="false" :content="form.goodsRes.professionalName"
<el-tooltip class="text" placement="bottom">
effect="dark"
:visible-arrow="false"
:content="form.goodsRes.professionalName"
placement="bottom">
<div> <div>
{{ form.goodsRes.professionalName }} {{ form.goodsRes.professionalName }}
</div> </div>
</el-tooltip> </el-tooltip>
</div> </div>
<div v-if="form.mall.applicationScenario" <div v-if="form.mall.applicationScenario" class="field">
class="field"> <img src="@/assets/images/product/2.png" alt=""> 适用场景
<img src="@/assets/images/product/2.png"
alt=""> 适用场景
<div class="text">{{ form.mall.applicationScenario }}</div> <div class="text">{{ form.mall.applicationScenario }}</div>
</div> </div>
<div v-if="form.mall.matchingCourse" <div v-if="form.mall.matchingCourse" class="field">
class="field"> <img src="@/assets/images/product/3.png" alt=""> 匹配课程
<img src="@/assets/images/product/3.png" <el-tooltip class="text" effect="dark" :visible-arrow="false" :content="form.mall.matchingCourse"
alt=""> 匹配课程 placement="bottom">
<el-tooltip class="text"
effect="dark"
:visible-arrow="false"
:content="form.mall.matchingCourse"
placement="bottom">
<div class="text"> <div class="text">
{{ form.mall.matchingCourse }} {{ form.mall.matchingCourse }}
</div> </div>
</el-tooltip> </el-tooltip>
</div> </div>
<div v-if="form.mall.courseHours" <div v-if="form.mall.courseHours" class="field">
class="field"> <img src="@/assets/images/product/4.png" alt=""> 预计课时
<img src="@/assets/images/product/4.png"
alt=""> 预计课时
<div class="text">{{ form.mall.courseHours }}</div> <div class="text">{{ form.mall.courseHours }}</div>
</div> </div>
<div v-if="form.goodsRes.typeName" <div v-if="form.goodsRes.typeName" class="field">
class="field"> <img src="@/assets/images/product/5.png" alt=""> 产品类型
<img src="@/assets/images/product/5.png"
alt=""> 产品类型
<div class="text">{{ form.goodsRes.typeName }}</div> <div class="text">{{ form.goodsRes.typeName }}</div>
</div> </div>
</div> </div>
<button v-if="!GTA" <button v-if="!GTA" class="btn" @click="showQrcode">会员价采购</button>
class="btn"
@click="showQrcode">会员价采购</button>
</div> </div>
</div> </div>
<div class="course" <div class="course" id="part0">
id="part0">
<div class="detail"> <div class="detail">
<ul class="tab fadeInDown"> <ul class="tab">
<li v-for="(tab, i) in tabs" <li v-for="(tab, i) in tabs" :key="i" :class="{ active: curTab === tab.id }" @click="tabChange(tab)">{{
:key="i" tab.name }}</li>
:class="{active: curTab === tab.id}"
@click="tabChange(tab)">{{ tab.name }}</li>
</ul> </ul>
<div class="courses fadeInUp"> <div class="courses fadeInUp">
<div class="des" <div class="des" v-html="form.mall.detailedIntroduction"></div>
v-html="form.mall.detailedIntroduction"></div> <div class="chapter" id="part1" v-for="(item, i) in chapterList" :key="i">
<div class="chapter"
id="part1"
v-for="(item, i) in chapterList"
:key="i">
<div class="chapterName">{{ item.name }}</div> <div class="chapterName">{{ item.name }}</div>
<div class="section" <div class="section" v-if="item.subsectionList.length">
v-if="item.subsectionList.length"> <div v-for="(section, j) in item.subsectionList" :key="j">
<div v-for="(section, j) in item.subsectionList" <div class="sectionName" :title="section.name">
:key="j">
<div class="sectionName"
:title="section.name">
<div class="val"> <div class="val">
<img v-if="section.fileType === 'pptx'" <img v-if="section.fileType === 'pptx'" src="@/assets/images/exts/ppt.png" alt="">
src="@/assets/images/exts/ppt.png" <img v-else-if="section.fileType === 'mp4'" src="@/assets/images/exts/video.png" alt="">
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'" <img v-else-if="section.fileType === 'doc' || section.fileType === 'docx'"
src="@/assets/images/exts/word.png" src="@/assets/images/exts/word.png" alt="">
alt=""> <img v-else-if="section.fileType === 'txt'" src="@/assets/images/exts/txt.png" alt="">
<img v-else-if="section.fileType === 'txt'" <img v-else-if="section.fileType === 'pdf'" src="@/assets/images/exts/pdf.png" alt="">
src="@/assets/images/exts/txt.png" <img v-else src="@/assets/images/exts/pic.png" alt="">
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 }} {{ section.name }}
</div> </div>
</div> </div>
@ -132,33 +84,20 @@
<div class="products"> <div class="products">
<h6 class="fadeInUp">热门产品推荐</h6> <h6 class="fadeInUp">热门产品推荐</h6>
<ul class="product fadeInDown"> <ul class="product fadeInDown">
<li v-for="(item, i) in hots" <li v-for="(item, i) in hots" :key="i" @click="toDetail(item.mallId)">
:key="i" <img :src="item.coverDrawing" alt="" />
@click="toDetail(item.mallId)"> <img v-if="item.logoOfOurSchool" class="my-school" src="@/assets/images/my-school.png" alt="">
<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="texts">
<div class="title">{{ item.productName }}</div> <div class="title">{{ item.productName }}</div>
<div :class="['desc', {'not-tag': !item.tagsName}]" <div :class="['desc', { 'not-tag': !item.tagsName }]" v-html="item.productIntroduction"></div>
v-html="item.productIntroduction"></div> <div v-if="item.tagsName" class="tags">
<div v-if="item.tagsName" <el-tag v-for="(tag, i) in item.tagsName.split(',')" :key="i" class="tag">{{ tag }}</el-tag>
class="tags">
<el-tag v-for="(tag, i) in item.tagsName.split(',')"
:key="i"
class="tag">{{ tag }}</el-tag>
</div> </div>
<div class="metas"> <div class="metas">
<el-tag v-if="item.selected" <el-tag v-if="item.selected" type="danger" effect="dark">
type="danger"
effect="dark">
官方精选 官方精选
</el-tag> </el-tag>
<div v-if="item.isCourse" <div v-if="item.isCourse" class="meta">{{ item.learningCount }}人学过</div>
class="meta">{{ item.learningCount }}人学过</div>
</div> </div>
</div> </div>
</li> </li>
@ -168,34 +107,18 @@
</div> </div>
<!-- 选择链接 --> <!-- 选择链接 -->
<el-dialog title="请选择链接" <el-dialog title="请选择链接" :visible.sync="linkVisible" width="420px" center :close-on-click-modal="false">
:visible.sync="linkVisible" <div v-if="withLink" class="buy">
width="420px" <div v-for="(link, i) in form.mallNonAssociatedLinks" :key="i" class="link-line">
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 }} {{ link.urlName }}
<a class="url" <a class="url" :href="link.url" target="_blank">{{ link.url }}</a>
:href="link.url"
target="_blank">{{ link.url }}</a>
</div> </div>
</div> </div>
</el-dialog> </el-dialog>
<el-dialog title="" <el-dialog title="" :visible.sync="qrcodeVisible" width="500px" center :top="qrcodeTop" custom-class="qrcode-dia">
:visible.sync="qrcodeVisible"
width="500px"
center
:top="qrcodeTop"
custom-class="qrcode-dia">
<div> <div>
<img width="100%" <img width="100%" src="@/assets/images/occupationlab.png" alt="">
src="@/assets/images/occupationlab.png"
alt="">
</div> </div>
</el-dialog> </el-dialog>
</div> </div>
@ -476,352 +399,421 @@ export default {
<style lang="scss" scoped> <style lang="scss" scoped>
.wrap { .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; padding: 24px;
background: url(../../../assets/images/product/bg1.png) 0 373px no-repeat, background-color: #fff;
url(../../../assets/images/product/bg2.png) bottom right no-repeat; border-radius: 10px;
background-color: #f3f6fa;
.inner { .pics {
width: 1146px; width: 484px;
margin: 0 auto; margin-right: 20px;
.pic {
width: 100%;
height: 100%;
border-radius: 8px;
}
} }
.top {
display: flex; .right {
padding: 24px; width: 592px;
background-color: #fff; overflow: hidden;
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; h6 {
position: sticky; font-size: 24px;
top: 20px; font-weight: 600;
display: flex; color: #2e2d31;
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; .meta {
margin-top: 20px; margin: 10px 0;
.detail { font-size: 12px;
width: calc(100% - 294px); color: #2e2d31;
padding: 20px 24px;
background-color: #fff; .val {
border-radius: 10px; 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;
}
} }
.courses {
padding-top: 10px; .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: 14px;
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; overflow: hidden;
/deep/.des { text-overflow: ellipsis;
div, white-space: nowrap;
p, }
span {
font-family: PingFangSC-Regular !important; .desc {
} min-height: 34px;
img { color: #757f92;
max-width: 100%; font-size: 12px;
object-fit: cover; display: -webkit-box;
} -webkit-box-orient: vertical;
} -webkit-line-clamp: 2;
.chapters { overflow: hidden;
margin-top: 16px;
max-height: calc(100% - 53px); &.not-tag {
overflow: auto; -webkit-line-clamp: 3;
}
.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; .tags {
margin-left: 24px; margin-top: 10px;
& > h6 { }
font-size: 14px;
color: #0b1d30; .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;
} }
} }
.product {
margin-top: 11px; &:hover {
li { box-shadow: 0px 5px 12px 4px rgba(142, 123, 253, 0.09), 0px 3px 6px 0px rgba(142, 123, 253, 0.12),
position: relative; 0px 1px 2px -2px rgba(142, 123, 253, 0.16);
margin-bottom: 15px;
cursor: pointer; img {
border-radius: 10px; transform: scale(1.05);
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 { .link-line {
margin: 5px 0; margin: 5px 0;
.url {
color: #007eff; .url {
text-decoration: underline; color: #007eff;
} text-decoration: underline;
}
} }
.buy { .buy {
text-align: center; text-align: center;
.tips {
margin-bottom: 10px; .tips {
font-size: 14px; margin-bottom: 10px;
} font-size: 14px;
img { }
width: 85%;
} img {
width: 85%;
}
} }
/deep/.qrcode-dia { /deep/.qrcode-dia {
.el-dialog__header, .el-dialog__header,
.el-dialog__body { .el-dialog__body {
padding: 0; padding: 0;
} }
.el-dialog__headerbtn .el-dialog__close {
color: #fff; .el-dialog__headerbtn .el-dialog__close {
} color: #fff;
}
} }
@media (max-width: 1200px) { @media (max-width: 1200px) {
.wrap { .wrap {
.inner { .inner {
width: 100%; width: 100%;
} }
.top {
flex-direction: column; .top {
.pics { flex-direction: column;
width: 100%;
margin-bottom: 20px; .pics {
} width: 100%;
.el-image__preview { margin-bottom: 20px;
object-fit: cover; }
}
.right { .el-image__preview {
width: 100%; object-fit: cover;
} }
}
.course { .right {
flex-direction: column; width: 100%;
.detail { }
width: 100%;
margin-bottom: 20px;
}
.products {
width: 100%;
margin-left: 0;
}
}
} }
.course {
flex-direction: column;
.detail {
width: 100%;
margin-bottom: 20px;
}
.products {
width: 100%;
margin-left: 0;
}
}
}
} }
@media (max-width: 480px) { @media (max-width: 480px) {
.wrap { .wrap {
.tab { .tab {
position: static; position: static;
}
} }
}
} }
</style> </style>
Loading…
Cancel
Save