yujialong 6 months ago
parent 6a2dd7ce78
commit d6c7ff0402
  1. BIN
      src/assets/images/about-bg.png
  2. 19
      src/components/menuTree/index.vue
  3. 132
      src/layouts/footer/index.vue
  4. 64
      src/layouts/header/index.vue
  5. 4
      src/layouts/home/index.vue
  6. 62
      src/layouts/navbar/index.vue
  7. 15
      src/mixins/page/index.js
  8. 380
      src/pages/aboutUs/index.vue
  9. 61
      src/pages/article/index.vue
  10. 416
      src/pages/column/index.vue
  11. 303
      src/pages/home/index.vue
  12. 252
      src/pages/index/list/index.vue
  13. 246
      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>
<div class="menu-child">
<template v-for="item in this.menuList">
<el-submenu :popper-class="site == 2 && $store.getters.getModelType ? 'iasf-menu-popup' : ''"
:class="{active: $route.query.id == item.id}"
:key="item.id"
:index="String(item.id)"
:id="item.id"
<el-submenu :popper-class="$store.getters.getModelType ? 'iasf-menu-popup' : isHome ? 'home-menu-popup' : ''"
:class="{ active: $route.query.id == item.id }" :key="item.id" :index="String(item.id)" :id="item.id"
v-if="item.children && item.children.length && item.children.find(i => i.menuVisible !== 1)">
<template slot="title">
<span slot="title"
:id="item.id">{{item.columnName}}</span>
<span slot="title" :id="item.id">{{ item.columnName }}</span>
</template>
<menuTree :menuList="item.children"></menuTree>
</el-submenu>
<template v-else>
<template v-if="item.menuVisible !== 1">
<el-menu-item :key="item.id"
:id="item.id"
:index="String(item.id)"
<el-menu-item :key="item.id" :id="item.id" :index="String(item.id)"
:class="{ active: $route.query.id == item.id }">
<span slot="title"
:id="item.id">{{item.columnName}}</span>
<span slot="title" :id="item.id">{{ item.columnName }}</span>
</el-menu-item>
</template>
</template>
@ -63,6 +56,7 @@ export default {
background-color: transparent !important;
}
}
@media (max-width: 1200px) {
.menu-child {
/deep/ .el-menu-item {
@ -81,6 +75,7 @@ export default {
&:focus-visible {
outline: none;
}
/deep/ .el-submenu__title {
height: 40px;
line-height: 40px;

@ -1,82 +1,58 @@
<template>
<div>
<div v-if="showDefaultPath.includes($route.path)"
:class="['footer', {iasf: isIasf}]">
<div v-if="showDefaultPath.includes($route.path)" :class="['footer', { iasf: isIasf }]">
<template v-if="isIasf">
<div class="mask"></div>
<ul v-if="isIasf"
class="entry">
<li :class="{'cursor-pointer': isLink(modules[13].form.link.linkName)}"
@click="openLink(modules[14].form)">
<img class="icon"
:src="modules[14].form.pic"
alt="">
<ul v-if="isIasf" class="entry">
<li :class="{ 'cursor-pointer': isLink(modules[13].form.link.linkName) }" @click="openLink(modules[14].form)">
<img class="icon" :src="modules[14].form.pic" alt="">
<p class="text">{{ modules[14].form.title }}</p>
</li>
<li :class="{'cursor-pointer': isLink(modules[14].form.link.linkName)}"
@click="openLink(modules[15].form)">
<img class="icon"
:src="modules[15].form.pic"
alt="">
<li :class="{ 'cursor-pointer': isLink(modules[14].form.link.linkName) }" @click="openLink(modules[15].form)">
<img class="icon" :src="modules[15].form.pic" alt="">
<p class="text">{{ modules[15].form.title }}</p>
</li>
<li :class="{'cursor-pointer': isLink(modules[15].form.link.linkName)}"
@click="openLink(modules[16].form)">
<img class="icon"
:src="modules[16].form.pic"
alt="">
<li :class="{ 'cursor-pointer': isLink(modules[15].form.link.linkName) }" @click="openLink(modules[16].form)">
<img class="icon" :src="modules[16].form.pic" alt="">
<p class="text">{{ modules[16].form.title }}</p>
</li>
<li :class="{'cursor-pointer': isLink(modules[16].form.link.linkName)}"
@click="openLink(modules[17].form)">
<img class="icon"
:src="modules[17].form.pic"
alt="">
<li :class="{ 'cursor-pointer': isLink(modules[16].form.link.linkName) }" @click="openLink(modules[17].form)">
<img class="icon" :src="modules[17].form.pic" alt="">
<p class="text">{{ modules[17].form.title }}</p>
</li>
<li :class="{'cursor-pointer': isLink(modules[17].form.link.linkName)}"
@click="openLink(modules[18].form)">
<img class="icon"
:src="modules[18].form.pic"
alt="">
<li :class="{ 'cursor-pointer': isLink(modules[17].form.link.linkName) }" @click="openLink(modules[18].form)">
<img class="icon" :src="modules[18].form.pic" alt="">
<p class="text">{{ modules[18].form.title }}</p>
</li>
</ul>
</template>
<div class="relative">
<div class="info">
<div class="leftBox">
<p class="meta">Copyright ©2002- 2021</p>
<p class="meta">Institute of Advanced Science Facilities, ShenzhenIASF</p>
<p class="meta">Tel400-0010-998</p>
</div>
<div v-for="(item, i) in columns"
:key="i"
class="column">
<div class="relative text-center">
<img src="https://huorantech.com/images/about/logo.png" alt="">
<div class="flex j-center a-center m-t-20">
<div class="flex">
<div v-for="(item, i) in columns" :key="i" class="column">
<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 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>
<a class="copyright">粤ICP备2020131940号 粤公安网34565432456765432号</a>
</div>
<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 v-if="showContactPath.includes($route.path)"
class="contact">
<div v-if="showContactPath.includes($route.path)" class="contact">
<div class="inner">
<div class="title">
<h6>Contact us</h6>
<p class="text">CONTACT US</p>
</div>
<div class="region">
<img class="dot"
src="@/assets/images/dot.png"
alt="">
<img class="dot" src="@/assets/images/dot.png" alt="">
<p class="name">Shenzhen</p>
</div>
<div class="info">
@ -86,22 +62,17 @@
<div class="texts">
<div class="lines">
<div class="line">
<img class="icon"
src="@/assets/images/mail.png"
alt="">
<img class="icon" src="@/assets/images/mail.png" alt="">
Email: {{ isSfel ? 'fel@mail.iasf.ac.cn' : 'std@mail.iasf.ac.cn' }}
</div>
<div class="line">
<img class="icon"
src="@/assets/images/tel.png"
alt="">
<img class="icon" src="@/assets/images/tel.png" alt="">
Telephone: {{ isSfel ? '0755-21096052' : '0086-755-21096026' }}
</div>
<div class="line">
<img class="icon"
src="@/assets/images/address.png"
alt="">
Address: {{ isSfel ? '自由电子激光工程经理部' : '268 Zhenyuan St, Building A3, Floor 3-6, Guangming District, Shenzhen, Guangdong, P.R.China' }}
<img class="icon" src="@/assets/images/address.png" alt="">
Address: {{ isSfel ? '自由电子激光工程经理部' :
'268 Zhenyuan St, Building A3, Floor 3-6, Guangming District, Shenzhen, Guangdong, P.R.China' }}
</div>
</div>
<div class="qrcode">
@ -244,24 +215,25 @@ export default {
};
</script>
<style lang="scss" scoped>
.leftBox {
margin-right: 100px;
}
.footer {
position: relative;
padding: 64px 20% 25px;
padding: 48px 20% 25px;
color: #fff;
background-color: #091733;
overflow: hidden;
.info {
display: flex;
}
.meta {
margin-bottom: 10px;
font-size: 14px;
}
.column {
margin: 0 20px;
h6 {
margin-bottom: 20px;
font-size: 16px;
@ -269,6 +241,7 @@ export default {
cursor: pointer;
}
}
.children {
li {
margin: 12px 0;
@ -278,19 +251,23 @@ export default {
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 {
li {
color: #fff;
}
}
.mask {
position: absolute;
top: 0;
@ -301,11 +278,13 @@ export default {
}
}
}
.entry {
position: relative;
display: flex;
justify-content: space-between;
margin-bottom: 100px;
li {
display: inline-flex;
flex-direction: column;
@ -313,9 +292,11 @@ export default {
align-items: center;
text-align: center;
}
img {
max-width: 100px;
}
.text {
margin-top: 15px;
font-size: 1rem;
@ -323,19 +304,23 @@ export default {
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;
@ -345,6 +330,7 @@ export default {
font-weight: 600;
color: #fff;
}
.text {
margin-top: -65px;
font-size: 48px;
@ -352,6 +338,7 @@ export default {
-webkit-text-stroke: 1px #4073e5;
}
}
.region {
position: absolute;
top: 152px;
@ -360,33 +347,41 @@ export default {
align-items: center;
font-size: 20px;
color: #fff;
img {
margin-right: 20px;
}
}
.info {
margin: 55px 0 0 8px;
.texts {
display: flex;
align-items: center;
margin-top: 24px;
}
.item {
margin-right: 75px;
}
.line {
display: flex;
align-items: center;
margin-bottom: 20px;
font-size: 16px;
color: #fff;
img {
margin-right: 8px;
}
}
}
.qrcode {
text-align: center;
.text {
margin-top: 10px;
font-size: 12px;
@ -394,37 +389,46 @@ export default {
}
}
}
@media (max-width: 1500px) {
.footer {
padding: 64px 10% 25px;
}
}
@media (max-width: 1350px) {
.inner {
width: 100% !important;
.title {
width: 100%;
text-align: center;
}
.region {
top: 300px;
left: 50%;
}
.info {
margin-top: 90px;
}
}
.footer {
.info {
flex-direction: column;
.column {
margin-top: 20px;
margin-left: 0;
}
}
}
.entry {
flex-direction: column;
li {
margin-bottom: 30px;
}

@ -1,47 +1,30 @@
<template>
<div :class="['header', { estate: isEstate, iasf: isIasf }]">
<a class="logo"
@click="toIndex">
<div :class="['header', { channel: isHome, estate: isEstate, iasf: isIasf }]">
<a class="logo" @click="toIndex">
<template v-if="GTA">
<img src="@/assets/images/logo2.png"
alt="">
<img src="@/assets/images/logo2.png" alt="">
产业学院平台
</template>
<img v-else
src="@/assets/images/logo.png"
alt="">
<img v-else src="@/assets/images/logo.png" alt="">
</a>
<!-- pc端 -->
<template v-if="$store.getters.getModelType">
<navbar v-if="navShow"
ref="nav"
:isHome.sync="isHome"
:isEstate.sync="isEstate"
:isIasf.sync="isIasf"
<navbar v-if="navShow" ref="nav" :isHome.sync="isHome" :isEstate.sync="isEstate" :isIasf.sync="isIasf"
@showMoreBtns="updateBtnsType"></navbar>
<div class="tools">
<div class="login"
@click="toLogin">
<img src="@/assets/images/user.png"
alt="">
<div class="login" @click="toLogin">
<img src="@/assets/images/user.png" alt="">
<span>注册登录</span>
</div>
</div>
</template>
<!-- 手机端 -->
<div v-else
class="mobile-tools">
<i class="login el-icon-user-solid"
@click="toLogin"></i>
<i class="menu-icon"
: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 v-else class="mobile-tools">
<i class="login el-icon-user-solid" @click="toLogin"></i>
<i class="menu-icon" :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>
@ -187,6 +170,7 @@ export default {
</script>
<style scoped lang="scss">
$height: 90px;
.header {
z-index: 10;
position: fixed;
@ -198,13 +182,16 @@ $height: 90px;
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;
@ -212,18 +199,22 @@ $height: 90px;
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;
@ -231,18 +222,22 @@ $height: 90px;
}
}
}
.search {
margin-right: 43px;
}
.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;
@ -250,6 +245,7 @@ $height: 90px;
cursor: pointer;
}
}
.search-wrap {
position: absolute;
top: 67px;
@ -259,6 +255,7 @@ $height: 90px;
padding: 10px 15px 10px 10px;
background-color: #fff;
box-shadow: 0px 6px 9px 0px rgba(0, 0, 0, 0.3);
input {
width: 300px;
height: 40px;
@ -270,22 +267,26 @@ $height: 90px;
border-radius: 4px;
outline: none;
}
.search-icon {
padding-right: 15px;
margin: 0 15px;
cursor: pointer;
border-right: 1px solid #ccc;
}
.close-icon {
font-size: 2rem;
cursor: pointer;
}
}
.menu-child {
/deep/ .el-submenu__title {
font-size: 1rem;
}
}
.contentBox {
width: 100%;
position: absolute;
@ -296,14 +297,17 @@ $height: 90px;
max-height: 30rem;
overflow-y: scroll;
}
@media (max-width: 1660px) {
.header {
.logo {
left: 10px;
}
.search {
margin-right: 20px !important;
}
.tools {
right: 30px;
}
@ -315,10 +319,12 @@ $height: 90px;
color: black !important;
background-color: #fff;
}
.search-wrap {
right: 10px;
top: 0;
width: 70%;
input {
width: 15rem;
padding: 0 0.5rem 0 0.1rem;

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

@ -1,19 +1,12 @@
<template>
<div>
<el-menu :class="['nav', {estate: isEstate,changing: !showMenu}]"
ref="elMenu"
:key="menuRefresh"
:mode="$store.getters.getModelType ? 'horizontal' : 'vertical' "
:background-color="bgColor"
:text-color="textColor"
:active-text-color="activeTextColor"
@open="jump"
@select="jump"
<el-menu :class="['nav', { home: isHome, estate: isEstate, changing: !showMenu }]" ref="elMenu" :key="menuRefresh"
:mode="$store.getters.getModelType ? 'horizontal' : 'vertical'" :background-color="bgColor"
:text-color="textColor" :active-text-color="activeTextColor" @open="jump" @select="jump"
:default-active="String(active)">
<menuTree :menuList="menus" />
<el-submenu :popper-class="site == 2 && $store.getters.getModelType ? 'iasf-menu-popup' : ''"
v-show="showMoreBtns"
index="522222">
<el-submenu :popper-class="$store.getters.getModelType ? 'iasf-menu-popup' : isHome ? 'home-menu-popup' : ''"
v-show="showMoreBtns" index="522222">
<template slot="title">
<div class="moreBtns">{{ $t('column.more') }}</div>
</template>
@ -30,7 +23,7 @@ import mixins from '@/mixins/article'
import { mapMutations, mapGetters } from 'vuex'
import Setting from '@/setting'
export default {
props: ['isEstate', 'isIasf'],
props: ['isHome', 'isEstate', 'isIasf'],
mixins: [mixins],
data () {
return {
@ -65,12 +58,18 @@ export default {
this.getColumn()
this.setSite(siteId)
}
this.handleColor()
},
isHome () {
this.handleColor()
},
getNavSum () {
this.getColumn()
}
},
mounted () {
this.lastHome = this.isHome
this.handleColor()
this.getColumn()
},
methods: {
@ -120,6 +119,19 @@ export default {
}
}).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) {
for (const e of data) {
@ -146,14 +158,17 @@ export default {
<style lang="scss" scoped>
$height: 90px;
.moreBtns {
font-size: 1rem;
font-weight: bold;
padding-top: 0.2rem;
}
.changing {
opacity: 0;
}
/deep/.nav.el-menu--horizontal {
display: flex;
position: absolute;
@ -162,60 +177,75 @@ $height: 90px;
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: #1583ff;
color: #499eff;
}
}
}
.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 {
color: #333 !important;
}
.active,
.active .el-submenu__title {
color: #1583ff !important;
}
&.home {
.el-menu-item,
.el-submenu__title {
&:hover {
background-color: transparent !important;
span {
color: #fff;
color: #499eff;
}
}
}
.is-active {
color: #f9f9f9 !important;
}
.active,
.active .el-submenu__title {
color: #fff !important;
color: #1583ff !important;
}
}
}
@media (max-width: 1200px) {
/deep/.nav {
.el-menu-item {

@ -1,10 +1,10 @@
import Setting from '@/setting'
import Util from '@/libs/util'
export default {
data () {
return {
id: this.$route.query.id,
preview: this.$route.query.preview,
listPreview: this.$route.query.listPreview,
modules: [],
articles: []
}
@ -15,9 +15,20 @@ export default {
}
},
mounted () {
this.getInfo && this.$route.query.id && this.getInfo()
this.getInfo && this.$route.query.id && this.init()
},
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) {
const { link } = item

File diff suppressed because it is too large Load Diff

@ -1,42 +1,35 @@
<template>
<div v-show="loaded"
class="wrap">
<div v-show="loaded" class="wrap">
<!-- 人物详情不展示banner -->
<div v-if="form.articleTemplate !== 23 && !isPeople"
class="banner"
<div v-if="form.articleTemplate !== 23 && !isPeople" class="banner"
:style="{ backgroundImage: form.bannerImg ? ('url(' + form.bannerImg + ')') : '' }">
{{ form.columnName }}
</div>
<div class="content">
<Breadcrumb ref="breadcrumb"
:data.sync="routes" />
<Breadcrumb ref="breadcrumb" :data.sync="routes" />
<div class="article">
<div class="left">
<template v-if="!isPeople">
<h2>{{ form.title }}</h2>
<div class="meta">{{ form.source && form.source + ' | ' }} {{ form.author && form.author + ' | ' }} {{ 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>
<div class="meta">{{ form.source && form.source + ' | ' }} {{ form.author && form.author + ' | ' }} {{
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>
<p v-if="form.summary"
class="brief">{{ form.summary }}</p>
<div class="des"
id="mainBody"
v-html="form.mainBody"></div>
<div v-if="form.fileList && form.fileList.length"
class="annex">
<p v-if="form.summary" class="brief">{{ form.summary }}</p>
<div class="des" id="mainBody" v-html="form.mainBody"></div>
<div v-if="form.fileList && form.fileList.length" class="annex">
<h6>{{ $t('column.attachmentDownload') }}</h6>
<ul class="files">
<li v-for="(file, i) in form.fileList"
:key="i">
<li v-for="(file, i) in form.fileList" :key="i">
<span class="name">{{ file.fileName }}</span>
<span class="download"
@click="download(file)">{{$t('column.download')}}</span>
<span class="download" @click="download(file)">{{ $t('column.download') }}</span>
</li>
</ul>
</div>
</div>
<RightColumns ref="right"
:party="isParty" />
<RightColumns ref="right" :party="isParty" />
</div>
</div>
</div>
@ -189,12 +182,15 @@ export default {
<style lang="scss" scoped>
@import './editor.css';
.content {
width: 1200px;
/deep/ .el-breadcrumb {
font-size: 0.98rem;
}
}
.banner {
display: flex;
align-items: center;
@ -206,21 +202,26 @@ export default {
background: url(../../assets/images/intro-bg.png) center center/cover no-repeat;
object-fit: cover;
}
.article {
display: flex;
justify-content: space-between;
.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;
@ -229,6 +230,7 @@ export default {
color: #606060;
border-bottom: 1px solid #d8d8d8;
}
/deep/.des {
// width: 100%;
// overflow: auto;
@ -236,27 +238,34 @@ export default {
color: rgb(0, 0, 238);
word-wrap: break-word;
}
img {
max-width: 100%;
object-fit: cover;
}
ul {
// padding-left: 40px;
list-style: disc;
li {
list-style: inherit;
}
}
ol {
// padding-left: 40px;
list-style: decimal;
li {
list-style: inherit;
}
}
}
.annex {
margin-top: 30px;
h6 {
padding-left: 8px;
margin-bottom: 20px;
@ -267,15 +276,18 @@ export default {
color: #333;
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;
@ -288,6 +300,7 @@ export default {
width: 98%;
}
}
@media (max-width: 1200px) {
.article {
/deep/.des {
@ -297,19 +310,24 @@ export default {
}
}
}
.banner {
font-size: 1.5rem;
}
.article {
flex-direction: column;
.left {
width: 100%;
margin-bottom: 20px;
h2 {
font-size: 1.5rem;
}
}
}
.article {
.des {
img {
@ -317,6 +335,7 @@ export default {
}
}
}
.right {
width: 100%;
}

@ -1,11 +1,8 @@
<template>
<div v-show="loaded"
<div v-show="loaded" v-loading="loading"
:class="['wrap', { activity: info.listStyleId === 15, party: info.listStyleId === 68 }]">
<div class="banner fadeInUp">
<img width="100%"
height="280"
:src="info.columnBanner"
alt="" />
<img width="100%" height="280" :src="info.columnBanner" alt="" />
<div class="texts">
<p class="text">{{ info.columnName }}</p>
<p class="sub">{{ info.subtitle }}</p>
@ -15,37 +12,24 @@
<div class="article">
<div class="left">
<!-- 文章侧边栏+搜索+新闻列表 -->
<div v-if="info.listStyleId === 10"
class="forms">
<div v-if="info.listStyleId === 10" class="forms">
<div class="item">
<span class="label">{{ $t('column.classification') }}</span>
<el-select v-model="form.classificationId"
@change="filter">
<el-option :label="$t('column.all')"
:value="null"></el-option>
<el-option v-for="item in classifications"
:key="item.id"
:label="item.classificationName"
<el-select v-model="form.classificationId" @change="filter">
<el-option :label="$t('column.all')" :value="null"></el-option>
<el-option v-for="item in classifications" :key="item.id" :label="item.classificationName"
:value="item.id">
</el-option>
</el-select>
</div>
<div class="item">
<span class="label">{{ $t('column.label') }}</span>
<el-select ref="search"
v-model="lableId"
multiple
@change="filter">
<el-option v-for="item in labels"
:key="item.id"
:label="item.labelName"
:value="item.id"> </el-option>
<el-select ref="search" v-model="lableId" multiple @change="filter">
<el-option v-for="item in labels" :key="item.id" :label="item.labelName" :value="item.id"> </el-option>
</el-select>
</div>
<div class="search">
<input type="text"
:placeholder="$t('column.titlePlaceholder')"
v-model="form.title" />
<input type="text" :placeholder="$t('column.titlePlaceholder')" v-model="form.title" />
<!-- <i class="icon">
<img src="@/assets/images/search-white.png" alt="" />
@ -53,62 +37,42 @@
</div>
</div>
<!-- 侧导航+新闻列表(含文章概述) -->
<div v-if="info.listStyleId === 12"
class="forms">
<div v-if="info.listStyleId === 12" class="forms">
<div class="item">
<span class="label">{{ $t('column.classification') }}</span>
<el-select v-model="form.classificationId"
@change="filter">
<el-option :label="$t('column.all')"
:value="null"></el-option>
<el-option v-for="item in classifications"
:key="item.id"
:label="item.classificationName"
<el-select v-model="form.classificationId" @change="filter">
<el-option :label="$t('column.all')" :value="null"></el-option>
<el-option v-for="item in classifications" :key="item.id" :label="item.classificationName"
:value="item.id">
</el-option>
</el-select>
</div>
<div class="item">
<span class="label">{{ $t('column.label') }}</span>
<el-select ref="search"
v-model="lableId"
multiple
@change="filter">
<el-option v-for="item in labels"
:key="item.id"
:label="item.labelName"
:value="item.id"> </el-option>
<el-select ref="search" v-model="lableId" multiple @change="filter">
<el-option v-for="item in labels" :key="item.id" :label="item.labelName" :value="item.id"> </el-option>
</el-select>
</div>
<div class="search">
<input type="text"
:placeholder="$t('column.titlePlaceholder')"
v-model="form.title" />
<input type="text" :placeholder="$t('column.titlePlaceholder')" v-model="form.title" />
<!-- <i class="icon">
<img src="@/assets/images/search-white.png" alt="" />
</i> -->
</div>
</div>
<!-- 会议活动筛选+会议活动列表 -->
<div v-if="info.listStyleId === 15"
class="forms">
<div v-if="info.listStyleId === 15" class="forms">
<ul class="switch">
<li v-for="(item, i) in convokeTypes"
:key="i"
:class="{ active: item.id === form.convokeType }"
<li v-for="(item, i) in convokeTypes" :key="i" :class="{ active: item.id === form.convokeType }"
@click="switchChange(item)">
{{ item.name }}
</li>
</ul>
<div class="item">
<span class="label">{{ $t('column.classification') }}</span>
<el-select v-model="form.classificationId"
@change="filter">
<el-option :label="$t('column.all')"
:value="null"></el-option>
<el-option v-for="item in classifications"
:key="item.id"
:label="item.classificationName"
<el-select v-model="form.classificationId" @change="filter">
<el-option :label="$t('column.all')" :value="null"></el-option>
<el-option v-for="item in classifications" :key="item.id" :label="item.classificationName"
:value="item.id">
</el-option>
</el-select>
@ -116,48 +80,33 @@
</div>
<div class="contents">
<el-tree v-if="columns.length && columns.find(e => e.children.length) && !isFilter && showNav && info.listStyleId !== 15"
class="columns"
ref="leftColumn"
:data="columns"
highlight-current
:expand-on-click-node="false"
default-expand-all
:props="defaultProps"
node-key="id"
icon-class="el-icon-arrow-down"
@node-click="(item) => columnClick(item, 1)"
@current-change="(item) => columnClick(item, 1)">
<span class="custom-tree-node"
slot-scope="{ node, data }"
style="padding-left: 10px;">
<el-tree
v-if="columns.length && columns.find(e => e.children.length) && !isFilter && showNav && info.listStyleId !== 15"
class="columns" ref="leftColumn" :data="columns" highlight-current :expand-on-click-node="false"
default-expand-all :props="defaultProps" node-key="id" icon-class="el-icon-arrow-down"
@node-click="(item) => columnClick(item, 1)" @current-change="(item) => columnClick(item, 1)">
<span class="custom-tree-node" slot-scope="{ node, data }" style="padding-left: 10px;">
<span :title="node.label">{{ node.label }}</span>
</span>
</el-tree>
<template v-if="articles.length && !loading">
<!-- 列表样式选的是列表详情则直接显示最新一篇文章的详情 -->
<div v-if="info.listStyleId === 77"
class="detail">
<div v-if="info.listStyleId === 77" class="detail">
<template v-if="article.articleTemplate != 72">
<h2>{{ article.title }}</h2>
<!-- <div class="meta">{{ article.source && article.source + ' | ' }} {{ article.author && article.author + ' | ' }} {{ article.releaseTime }}</div>
<div class="meta">{{ article.edit && $t('column.edit') + ':' + article.edit }} {{ article.audit && ' | ' + $t('column.auditor') + ':' + article.audit }} {{ article.label && ' | ' + $t('column.label') + ':' + article.label }}</div> -->
</template>
<p v-if="article.summary"
class="brief">{{ article.summary }}</p>
<div class="des"
v-html="article.mainBody"></div>
<div v-if="article.fileList && article.fileList.length"
class="annex">
<p v-if="article.summary" class="brief">{{ article.summary }}</p>
<div class="des" v-html="article.mainBody"></div>
<div v-if="article.fileList && article.fileList.length" class="annex">
<h6>{{ $t('column.attachmentDownload') }}</h6>
<ul class="files">
<li v-for="(file, i) in article.fileList"
:key="i">
<li v-for="(file, i) in article.fileList" :key="i">
<span class="name">{{ file.fileName }}</span>
<span class="download"
@click="download(file)">{{$t('column.download')}}</span>
<span class="download" @click="download(file)">{{ $t('column.download') }}</span>
</li>
</ul>
</div>
@ -167,11 +116,8 @@
<template v-if="info.listStyleId === 12">
<div class="article-wrap">
<ul class="articles">
<li v-for="(item, i) in articles"
:key="i"
:class="{'news-notice': info.listStyleId === 55}"
class="readDetail"
@click="toArtice(item)">
<li v-for="(item, i) in articles" :key="i" :class="{ 'news-notice': info.listStyleId === 55 }"
class="readDetail" @click="toArtice(item)">
<template v-if="info.listStyleId === 55">
<div class="releaseTime">
<p class="d">{{ item.date }}</p>
@ -180,9 +126,7 @@
<div class="news-title">{{ item.title }}</div>
</template>
<template v-else>
<img class="pic"
:src="item.titleImg"
alt=""
<img class="pic" :src="item.titleImg" alt=""
onerror="javascript:this.src='./images/1.png?id=1';" />
<div class="texts">
<p v-if="(item.listStyleId === 10 || item.listStyleId === 15) && item.classificationName"
@ -192,63 +136,43 @@
<h6 class="titleDes">{{ item.title }}</h6>
<template v-if="item.listStyleId === 11 || item.listStyleId == 12">
<span class="meta">{{ item.releaseTime }}</span>
<div class="des"
v-html="item.mainBody"></div>
<div class="des" v-html="item.mainBody"></div>
</template>
<span v-if="item.listStyleId === 10 "
class="meta">{{ item.releaseTime }} {{ item.labelName && ' | ' +
<span v-if="item.listStyleId === 10" class="meta">{{ item.releaseTime }} {{ item.labelName
&& ' | ' +
item.labelName }}</span>
<template v-if="item.listStyleId === 15 || item.listStyleId === 16">
<div v-if="item.keynoteSpeaker"
class="meta m-b-10">
<img class="icon"
src="@/assets/images/mine.png"
alt="" /> {{ item.keynoteSpeaker }}
<div v-if="item.keynoteSpeaker" class="meta m-b-10">
<img class="icon" src="@/assets/images/mine.png" alt="" /> {{ item.keynoteSpeaker }}
</div>
<div v-if="item.activityStartTime"
class="meta m-b-10">
<img class="icon"
src="@/assets/images/time.png"
alt="" />
<div v-if="item.activityStartTime" class="meta m-b-10">
<img class="icon" src="@/assets/images/time.png" alt="" />
{{ item.activityStartTime }}
</div>
<div v-if="item.offlineLocation"
class="meta m-b-10">
<img class="icon"
src="@/assets/images/location.png"
alt="" /> {{ item.offlineLocation }}
<div v-if="item.offlineLocation" class="meta m-b-10">
<img class="icon" src="@/assets/images/location.png" alt="" /> {{ item.offlineLocation
}}
</div>
<div v-if="item.onlineLocation"
class="meta">
<img class="icon"
src="@/assets/images/online.png"
alt="" /> {{ item.onlineLocation }}
<div v-if="item.onlineLocation" class="meta">
<img class="icon" src="@/assets/images/online.png" alt="" /> {{ item.onlineLocation }}
</div>
</template>
<el-button type="primary"
class="readDetailBtn">{{ $t('column.readDetail') }}</el-button>
<el-button type="primary" class="readDetailBtn">{{ $t('column.readDetail') }}</el-button>
</div>
</template>
</li>
</ul>
<div v-if="articles.length"
class="pagination">
<el-pagination background
@current-change="currentChange"
:current-page="page"
:page-size="pageSize"
layout="total, prev, pager, next"
:total="total"></el-pagination>
<div v-if="articles.length" class="pagination">
<el-pagination background @current-change="currentChange" :current-page="page"
:page-size="pageSize" layout="total, prev, pager, next" :total="total"></el-pagination>
</div>
</div>
</template>
<template v-else-if="info.listStyleId === 11 || info.listStyleId === 15 || info.listStyleId === 10">
<div class="article-wrap">
<ul class="articles">
<li v-for="(item, i) in articles"
:key="i"
:class="{'news-notice': info.listStyleId === 55}"
<li v-for="(item, i) in articles" :key="i" :class="{ 'news-notice': info.listStyleId === 55 }"
@click="toArtice(item)">
<template v-if="info.listStyleId === 55">
<div class="releaseTime">
@ -271,63 +195,43 @@
</template>
</span>
</template>
<span v-if="item.listStyleId === 10 "
class="meta">{{ item.releaseTime }} {{ item.labelName && ' | ' +
<span v-if="item.listStyleId === 10" class="meta">{{ item.releaseTime }} {{ item.labelName
&& ' | ' +
item.labelName }}</span>
<template v-if="item.listStyleId === 15 || item.listStyleId === 16">
<div v-if="item.keynoteSpeaker"
class="meta m-b-10">
<img class="icon"
src="@/assets/images/mine.png"
alt="" /> {{ item.keynoteSpeaker }}
<div v-if="item.keynoteSpeaker" class="meta m-b-10">
<img class="icon" src="@/assets/images/mine.png" alt="" /> {{ item.keynoteSpeaker }}
</div>
<div v-if="item.activityStartTime"
class="meta m-b-10">
<img class="icon"
src="@/assets/images/time.png"
alt="" />
<div v-if="item.activityStartTime" class="meta m-b-10">
<img class="icon" src="@/assets/images/time.png" alt="" />
{{ item.activityStartTime }}
</div>
<div v-if="item.offlineLocation"
class="meta m-b-10">
<img class="icon"
src="@/assets/images/location.png"
alt="" /> {{ item.offlineLocation }}
<div v-if="item.offlineLocation" class="meta m-b-10">
<img class="icon" src="@/assets/images/location.png" alt="" /> {{ item.offlineLocation
}}
</div>
<div v-if="item.onlineLocation"
class="meta">
<img class="icon"
src="@/assets/images/online.png"
alt="" /> {{ item.onlineLocation }}
<div v-if="item.onlineLocation" class="meta">
<img class="icon" src="@/assets/images/online.png" alt="" /> {{ item.onlineLocation }}
</div>
</template>
</div>
<img class="pic"
:src="item.titleImg"
alt=""
<img class="pic" :src="item.titleImg" alt=""
onerror="javascript:this.src='./images/1.png?id=1';" />
</template>
</li>
</ul>
<div v-if="articles.length"
class="pagination">
<el-pagination background
@current-change="currentChange"
:current-page="page"
:page-size="pageSize"
layout="total, prev, pager, next"
:total="total"></el-pagination>
<div v-if="articles.length" class="pagination">
<el-pagination background @current-change="currentChange" :current-page="page"
:page-size="pageSize" layout="total, prev, pager, next" :total="total"></el-pagination>
</div>
</div>
</template>
<template v-else>
<div class="article-wrap">
<ul :class="['articles', { media: info.listStyleId === 74 }]">
<li v-for="(item, i) in articles"
:key="i"
<li v-for="(item, i) in articles" :key="i"
:class="{ 'news-notice': info.listStyleId === 55, 'org': info.listStyleId === 68 }"
class="overDetail"
@click="toArtice(item)">
class="overDetail" @click="toArtice(item)">
<template v-if="info.listStyleId === 55">
<div class="releaseTime">
<p class="d">{{ item.date }}</p>
@ -336,10 +240,7 @@
<div class="news-title">{{ item.title }}</div>
</template>
<template v-else>
<img v-if="info.listStyleId !== 74"
class="pic"
:src="item.titleImg"
alt=""
<img v-if="info.listStyleId !== 74" class="pic" :src="item.titleImg" alt=""
onerror="javascript:this.src='./images/1.png?id=1';" />
<template v-else-if="item.fileList">
@ -348,20 +249,14 @@
src="https://huorantech.com/iasf/sysFiles/preview/1706961813193707521"
:preview-src-list="['https://huorantech.com/iasf/sysFiles/preview/1706961813193707521']">
</el-image> -->
<video v-if="Util.isVideo(item.fileList[0].fileName.substring(item.fileList[0].fileName.lastIndexOf('.') + 1))"
class="media-video"
controls
x5-playsinline
x5-video-player-type="h5"
:poster="isIphone ? 'https://huorantech.com/images/about/12.png' : ''"
preload>
<source :src="item.fileList[0].filePath"
type="video/mp4">
<video
v-if="Util.isVideo(item.fileList[0].fileName.substring(item.fileList[0].fileName.lastIndexOf('.') + 1))"
class="media-video" controls x5-playsinline x5-video-player-type="h5"
:poster="isIphone ? 'https://huorantech.com/images/about/12.png' : ''" preload>
<source :src="item.fileList[0].filePath" type="video/mp4">
您的浏览器不支持 video 标签
</video>
<el-image v-else
class="media-pic"
:src="item.fileList[0].filePath"
<el-image v-else class="media-pic" :src="item.fileList[0].filePath"
:preview-src-list="[item.fileList[0].filePath]">
</el-image>
</template>
@ -371,67 +266,48 @@
class="type">
{{ item.classificationName }}
</p>
<h6 class="titleDes"
:title="item.title">{{ item.title }}</h6>
<template v-if="item.listStyleId === 11 || item.listStyleId == 12 || item.listStyleId == 68">
<h6 class="titleDes" :title="item.title">{{ item.title }}</h6>
<template
v-if="item.listStyleId === 11 || item.listStyleId == 12 || item.listStyleId == 68">
<span class="meta">{{ item.releaseTime }}</span>
<div class="des"
v-html="item.mainBody"></div>
<div class="des" v-html="item.mainBody"></div>
</template>
<span v-if="item.listStyleId === 10 "
class="meta">{{ item.releaseTime }} {{ item.labelName && ' | ' +
<span v-if="item.listStyleId === 10" class="meta">{{ item.releaseTime }} {{ item.labelName
&& ' | ' +
item.labelName }}</span>
<template v-if="item.listStyleId === 15 || item.listStyleId === 16">
<div v-if="item.keynoteSpeaker"
class="meta m-b-10">
<img class="icon"
src="@/assets/images/mine.png"
alt="" /> {{ item.keynoteSpeaker }}
<div v-if="item.keynoteSpeaker" class="meta m-b-10">
<img class="icon" src="@/assets/images/mine.png" alt="" /> {{ item.keynoteSpeaker }}
</div>
<div v-if="item.activityStartTime"
class="meta m-b-10">
<img class="icon"
src="@/assets/images/time.png"
alt="" />
<div v-if="item.activityStartTime" class="meta m-b-10">
<img class="icon" src="@/assets/images/time.png" alt="" />
{{ item.activityStartTime }}
</div>
<div v-if="item.offlineLocation"
class="meta m-b-10">
<img class="icon"
src="@/assets/images/location.png"
alt="" /> {{ item.offlineLocation }}
<div v-if="item.offlineLocation" class="meta m-b-10">
<img class="icon" src="@/assets/images/location.png" alt="" /> {{ item.offlineLocation
}}
</div>
<div v-if="item.onlineLocation"
class="meta">
<img class="icon"
src="@/assets/images/online.png"
alt="" /> {{ item.onlineLocation }}
<div v-if="item.onlineLocation" class="meta">
<img class="icon" src="@/assets/images/online.png" alt="" /> {{ item.onlineLocation }}
</div>
</template>
<el-button v-if="item.listStyleId === 15 || item.listStyleId == 68"
type="primary"
class="readDetailBtn">{{ $t('column.readDetail') }}</el-button>
<el-button v-if="item.listStyleId === 15 || item.listStyleId == 68" type="primary"
class="readDetailBtn">{{
$t('column.readDetail') }}</el-button>
</div>
</template>
</li>
</ul>
<div v-if="total > articles.length"
class="pagination">
<el-pagination background
@current-change="currentChange"
:current-page="page"
:page-size="pageSize"
layout="total, prev, pager, next"
:total="total"></el-pagination>
<div v-if="total > articles.length" class="pagination">
<el-pagination background @current-change="currentChange" :current-page="page"
:page-size="pageSize" layout="total, prev, pager, next" :total="total"></el-pagination>
</div>
</div>
</template>
</template>
</template>
<div v-else
class="none">
<img src="@/assets/images/none.png"
alt="">
<div v-else class="none">
<img src="@/assets/images/none.png" alt="">
<p class="text">{{ $t('column.comming') }}</p>
</div>
</div>
@ -442,10 +318,7 @@
<div class="right">
<p class="l-title">{{ $t('column.hot') }}</p>
<ul class="list">
<li v-for="(item, i) in hots"
:key="i"
:title="item.title"
@click="toArtice(item)">
<li v-for="(item, i) in hots" :key="i" :title="item.title" @click="toArtice(item)">
<p class="text">{{ item.title }}</p>
<span class="date">{{ item.releaseTime }}</span>
</li>
@ -453,10 +326,7 @@
<p class="l-title">{{ $t('column.latestNews') }}</p>
<ul class="list">
<li v-for="(item, i) in news"
:key="i"
:title="item.title"
@click="toArtice(item)">
<li v-for="(item, i) in news" :key="i" :title="item.title" @click="toArtice(item)">
<p class="text">{{ item.title }}</p>
<span class="date">{{ item.releaseTime }}</span>
</li>
@ -479,7 +349,7 @@ export default {
data () {
return {
Util,
loaded: false,
loaded: true,
fromColumn: this.$route.query.column,
isIphone: false,
columnId: '',
@ -563,13 +433,13 @@ export default {
//
getInfo () {
this.loading = true
this.loaded = false
this.loaded = true
this.id &&
this.$post(`${this.api.findColumn}?id=${this.id}`)
.then(({ data }) => {
this.columnClick(data);
if (data.typeId !== 3 && !data.menuVisible) {
this.loaded = true; //
if (data.typeId === 3 || data.menuVisible) {
this.loaded = false; //
}
this.info = data
this.pageSize = data.pageSize || 10
@ -878,10 +748,12 @@ export default {
position: relative;
height: 24rem;
color: #fff;
img {
height: 24rem;
object-fit: cover;
}
.texts {
position: absolute;
top: 160px;
@ -899,9 +771,11 @@ export default {
font-size: 1.6rem;
}
}
.el-tree-node__content {
padding-left: 10px !important;
}
.l-title {
font-weight: 600;
}
@ -921,8 +795,10 @@ export default {
.left {
width: 83%;
&:only-child {
width: 100%;
.detail:only-child {
max-width: none;
}
@ -1022,9 +898,11 @@ export default {
&+.detail {
padding-left: 10px;
}
width: 22%;
margin-right: 0.6rem;
overflow: auto;
span {
white-space: nowrap;
overflow: hidden;
@ -1100,33 +978,41 @@ export default {
padding: 10px 20px;
justify-content: flex-start;
align-items: center;
.texts {
padding-left: 1.5rem;
.titleDes {
margin-bottom: 10px;
font-size: 1.2rem;
margin-top: 0;
}
.des {
margin-top: 10px;
}
}
.titleDes {
margin-top: 0.8rem;
-webkit-line-clamp: 1;
}
.readDetailBtn {
margin-top: 10px;
}
.texts {
flex-grow: 1;
}
}
.overDetail {
.texts {
width: 70%;
}
}
li {
display: flex;
justify-content: space-between;
@ -1178,34 +1064,42 @@ export default {
object-fit: cover;
}
}
.media {
display: flex;
flex-wrap: wrap;
margin-left: 10px;
li {
flex-direction: column;
width: calc(33% - 30px);
margin-right: 30px;
background-color: transparent;
&:nth-child(3n) {
margin-right: 0;
}
}
.media-video {
width: 100%;
height: 155px;
}
/deep/.media-pic {
width: 100%;
height: 155px;
img {
object-fit: cover;
}
}
.texts {
width: 100% !important;
padding-left: 0;
}
h6 {
margin-top: 10px;
margin-bottom: 0;
@ -1214,6 +1108,7 @@ export default {
-webkit-line-clamp: 1;
}
}
.news-notice {
.releaseTime {
width: 88px;
@ -1224,16 +1119,19 @@ export default {
text-align: center;
background: #0b5086;
}
.d {
font-size: 2rem;
font-family: DINCondensed-Bold, DINCondensed;
font-weight: bold;
line-height: 43px;
}
.m {
font-size: 0.9rem;
line-height: 20px;
}
.news-title {
width: calc(100% - 110px);
font-size: 1.1rem;
@ -1242,9 +1140,11 @@ export default {
@include mul-ellipsis(2);
}
}
.org {
padding: 15px;
}
.right {
width: 17%;
padding-left: 20px;
@ -1304,6 +1204,7 @@ export default {
}
}
}
.party {
/deep/.columns {
.el-tree-node__content {
@ -1311,8 +1212,10 @@ export default {
color: $partyTheme;
}
}
.is-current>.el-tree-node__content {
background-color: $lightPartyTheme;
&:after {
background-color: $partyTheme;
}
@ -1323,6 +1226,7 @@ export default {
}
}
}
.article {
.readDetailBtn {
width: 100px;
@ -1332,26 +1236,31 @@ export default {
border-color: $partyTheme;
}
}
/deep/.el-pagination.is-background .el-pager li:not(.disabled).active {
background-color: $partyTheme !important;
}
}
.detail {
flex: 1;
max-width: 77%;
padding: 10px 15px;
background-color: #fff;
overflow: auto;
h2 {
margin-bottom: 1rem;
font-size: 1.9rem;
color: #1c1c1c;
}
.meta {
margin: 1rem 0;
font-size: 0.88rem;
color: #9b9b9b;
}
.brief {
padding-bottom: 1.5rem;
margin-bottom: 1rem;
@ -1360,18 +1269,22 @@ export default {
color: #606060;
border-bottom: 1px solid #d8d8d8;
}
/deep/.des {
a {
color: rgb(0, 0, 238);
word-wrap: break-word;
}
img {
max-width: 100%;
object-fit: cover;
}
}
.annex {
margin-top: 30px;
h6 {
padding-left: 8px;
margin-bottom: 20px;
@ -1382,21 +1295,25 @@ export default {
color: #333;
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;
}
}
}
.none {
display: inline-flex;
flex-direction: column;
@ -1404,6 +1321,7 @@ export default {
align-items: center;
flex: 1;
text-align: center;
.text {
margin-top: 20px;
font-size: 0.9rem;
@ -1414,22 +1332,28 @@ export default {
@media (max-width: 1200px) {
.banner {
height: 15rem !important;
img {
height: 15rem !important;
}
.texts {
top: 6rem;
left: 3rem;
}
}
.article {
flex-direction: column;
width: 90%;
.columns {
width: 40%;
}
.left {
width: 100%;
.forms {
flex-direction: column;
justify-content: center;
@ -1461,19 +1385,23 @@ export default {
align-items: flex-start;
padding: 1rem;
margin-top: 1rem;
.pic {
width: 100%;
margin: 10px 0;
}
}
.readDetail {
align-items: flex-start;
.texts {
width: 100%;
padding-left: 0;
}
}
}
.media {
li {
padding: 0;
@ -1490,56 +1418,69 @@ export default {
@media (max-width: 640px) {
.banner {
height: 12rem !important;
img {
height: 12rem !important;
}
.texts {
left: 2rem;
bottom: 2rem;
.text {
font-size: 1.5rem;
}
}
}
.article {
.contents {
flex-direction: column;
padding: 0 15px;
}
.columns,
.article-wrap {
width: 100%;
margin-right: 0;
}
.articles {
li {
.leftBox {
padding-left: 0;
.titleDes {
line-height: 1.368rem;
}
}
}
}
.media {
margin-left: 0;
li {
width: calc(50% - 20px);
margin-right: 20px;
&:nth-child(2n) {
margin-right: 0;
}
&:nth-child(3n) {
margin-right: 20px;
}
}
}
}
.forms {
.switch {
width: 100%;
flex-direction: column;
margin-right: 0;
li {
width: 90%;
margin: 0 auto;
@ -1547,13 +1488,16 @@ export default {
}
}
}
.detail {
h2 {
font-size: 1.3rem;
}
.meta {
font-size: 0.7rem;
}
.brief {
font-size: 1rem;
}

File diff suppressed because it is too large Load Diff

@ -1,21 +1,14 @@
<template>
<div class="wrap">
<el-carousel class="carousel fadeInUp"
:interval="6000"
height="354px"
<el-carousel class="carousel fadeInUp" :interval="6000" height="354px"
:arrow="(modules[0] && modules[0].list.filter(e => e.isEnable).length > 1) ? 'hover' : 'never'"
:indicator-position="modules[0].list.filter(e => e.isEnable).length > 1 ? '' : 'none'">
<template v-for="(item, i) in modules[0].list">
<el-carousel-item v-if="item.pic && item.isEnable"
:key="i">
<div class="pic"
:style="{backgroundImage: 'url(' + item.pic + ')'}"></div>
<el-carousel-item v-if="item.pic && item.isEnable" :key="i">
<div class="pic" :style="{ backgroundImage: 'url(' + item.pic + ')' }"></div>
<div class="text-wrap">
<div v-if="!GTA && !i"
class="qrcode-wrap">
<img class="qrcode"
src="https://www.occupationlab.com/images/mini-program.jpg"
alt="">
<div v-if="!GTA && !i" class="qrcode-wrap">
<img class="qrcode" src="https://www.occupationlab.com/images/mini-program.jpg" alt="">
<p class="text">扫小程序下单</p>
</div>
<div class="texts">
@ -30,12 +23,9 @@
<div class="inner">
<ul class="intro">
<template v-for="(item, i) in modules[1].list">
<li v-if="item.isEnable"
:key="i"
:class="[{'cursor-pointer': isLink(item.link.linkName)}, 'fadeInDown' + i]"
<li v-if="item.isEnable" :key="i" :class="[{ 'cursor-pointer': isLink(item.link.linkName) }, 'fadeInDown' + i]"
@click="openLink(item)">
<img :src="item.pic"
alt="">
<img :src="item.pic" alt="">
<div class="text">
<h6>{{ item.title }}</h6>
<p class="desc">{{ item.des }}</p>
@ -50,28 +40,19 @@
<div class="type-wrap">
<div class="tab-wrap">
<div>
<img src="@/assets/images/hot.png"
alt="">
<img class="m-l-5 m-r-10"
src="@/assets/images/type.png"
alt="">
<img src="@/assets/images/hot.png" alt="">
<img class="m-l-5 m-r-10" src="@/assets/images/type.png" alt="">
</div>
<div class="tab-con">
<ul class="tab">
<li v-for="(tab, i) in tabs"
:key="i"
:class="{active: curTab === tab.id}"
@click="tabChange(tab)">{{ tab.name }}</li>
<li v-for="(tab, i) in tabs" :key="i" :class="{ active: curTab === tab.id }" @click="tabChange(tab)">{{
tab.name }}</li>
</ul>
</div>
</div>
<div class="search">
<img class="icon"
src="@/assets/images/search.png"
alt="">
<input type="text"
placeholder="请输入产品名称"
v-model="form.productName">
<img class="icon" src="@/assets/images/search.png" alt="">
<input type="text" placeholder="请输入产品名称" v-model="form.productName">
</div>
</div>
<div class="filter">
@ -79,36 +60,27 @@
<dl>
<dt>学科类别</dt>
<div class="vals">
<dd :class="{active: categoryId === ''}"
@click="categoryClick({id: ''}, 1)">全部</dd>
<dd :class="{active: categoryId === 1}"
style="margin-right: 20px"
@click="categoryClick({id: 1}, 1)">不限</dd>
<dd v-for="(item, i) in category"
:key="i"
:class="{active: categoryId === item.id}"
<dd :class="{ active: categoryId === '' }" @click="categoryClick({ id: '' }, 1)">全部</dd>
<dd :class="{ active: categoryId === 1 }" style="margin-right: 20px" @click="categoryClick({ id: 1 }, 1)">不限
</dd>
<dd v-for="(item, i) in category" :key="i" :class="{ active: categoryId === item.id }"
@click="categoryClick(item, 1)">{{ item.name }}</dd>
</div>
</dl>
<dl v-if="categoryId && categoryId !== 1">
<dt>专业类</dt>
<div class="vals">
<dd :class="{active: professionalCategoryId === ''}"
@click="categoryClick({id: ''}, 2)">全部</dd>
<dd v-for="(item, i) in professionalClasses"
:key="i"
:class="{active: professionalCategoryId === item.id}"
@click="categoryClick(item, 2)">{{ item.name }}</dd>
<dd :class="{ active: professionalCategoryId === '' }" @click="categoryClick({ id: '' }, 2)">全部</dd>
<dd v-for="(item, i) in professionalClasses" :key="i"
:class="{ active: professionalCategoryId === item.id }" @click="categoryClick(item, 2)">{{ item.name }}
</dd>
</div>
</dl>
<dl v-if="professionalCategoryId && professionalCategoryId !== 1">
<dt>专业</dt>
<div class="vals">
<dd :class="{active: professionalId === ''}"
@click="categoryClick({id: ''}, 3)">全部</dd>
<dd v-for="(item, i) in professionals"
:key="i"
:class="{active: professionalId === item.id}"
<dd :class="{ active: professionalId === '' }" @click="categoryClick({ id: '' }, 3)">全部</dd>
<dd v-for="(item, i) in professionals" :key="i" :class="{ active: professionalId === item.id }"
@click="categoryClick(item, 3)">{{ item.name }}</dd>
</div>
</dl>
@ -116,11 +88,8 @@
<dl v-if="curTab == 3">
<dt>产品标签</dt>
<div class="vals">
<dd :class="{active: form.tagId === ''}"
@click="filterChange('', 'tagId')">全部</dd>
<dd v-for="(item, i) in labels"
:key="i"
:class="{active: form.tagId === item.tagsId}"
<dd :class="{ active: form.tagId === '' }" @click="filterChange('', 'tagId')">全部</dd>
<dd v-for="(item, i) in labels" :key="i" :class="{ active: form.tagId === item.tagsId }"
@click="filterChange(item.tagsId, 'tagId')">{{ item.tagsName }}</dd>
</div>
</dl>
@ -130,8 +99,7 @@
<div class="vals">
<dd :class="{ active: form.productClassification === '' }"
@click="filterChange('', 'productClassification')">全部</dd>
<dd v-for="(item, i) in classifications"
:key="i"
<dd v-for="(item, i) in classifications" :key="i"
:class="{ active: form.productClassification === item.id }"
@click="filterChange(item.id, 'productClassification')">{{ item.classificationName }}</dd>
</div>
@ -139,11 +107,8 @@
<dl>
<dt>方案名称</dt>
<div class="vals">
<dd :class="{active: form.websiteMallId === ''}"
@click="filterChange('', 'websiteMallId')">全部</dd>
<dd v-for="(item, i) in schemes"
:key="i"
:class="{active: form.websiteMallId === item.id}"
<dd :class="{ active: form.websiteMallId === '' }" @click="filterChange('', 'websiteMallId')">全部</dd>
<dd v-for="(item, i) in schemes" :key="i" :class="{ active: form.websiteMallId === item.id }"
@click="filterChange(item.id, 'websiteMallId')">{{ item.title }}</dd>
</div>
</dl>
@ -151,11 +116,8 @@
<dl>
<dt>产品类型</dt>
<div class="vals">
<dd :class="{active: form.productType === ''}"
@click="filterChange('', 'productType')">全部</dd>
<dd v-for="(item, i) in types"
:key="i"
:class="{active: form.productType === item.typeId}"
<dd :class="{ active: form.productType === '' }" @click="filterChange('', 'productType')">全部</dd>
<dd v-for="(item, i) in types" :key="i" :class="{ active: form.productType === item.typeId }"
@click="filterChange(item.typeId, 'productType')">{{ item.typeName }}</dd>
</div>
</dl>
@ -163,14 +125,10 @@
<div class="filter m-t-20">
<dl>
<dd v-for="(item, i) in sorts"
:key="i"
:class="{active: form.sort === item.id}"
<dd v-for="(item, i) in sorts" :key="i" :class="{ active: form.sort === item.id }"
@click="filterChange(item.id, 'sort')">{{ item.name }}</dd>
<dd :class="{active: form.sort === 2 || form.sort === 5}"
@click="sort">发布时间</dd>
<span class="caret"
@click="sort">
<dd :class="{ active: form.sort === 2 || form.sort === 5 }" @click="sort">发布时间</dd>
<span class="caret" @click="sort">
<i :class="['asc', { active: form.sort === 2 }]"></i>
<i :class="['desc', { active: form.sort === 5 }]"></i>
</span>
@ -180,61 +138,37 @@
<div class="courses">
<template v-if="list.length">
<ul>
<li v-for="(item, i) in list"
: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="">
<li v-for="(item, i) in list" :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">
<el-tooltip effect="dark"
:visible-arrow="false"
:content="item.productName"
placement="bottom">
<el-tooltip effect="dark" :visible-arrow="false" :content="item.productName" placement="bottom">
<div class="title">{{ item.productName }}</div>
</el-tooltip>
<div class="desc"
v-html="item.productIntroduction"></div>
<div class="desc" v-html="item.productIntroduction"></div>
<div class="tags">
<el-tooltip v-if="item.tagsName"
class="item"
effect="dark"
:visible-arrow="false"
:content="item.tagsName"
placement="bottom">
<el-tooltip v-if="item.tagsName" class="item" effect="dark" :visible-arrow="false"
:content="item.tagsName" placement="bottom">
<div>
<el-tag v-for="(tag, i) in item.tagsName.split(',')"
:key="i"
class="tag">{{ tag }}</el-tag>
<el-tag v-for="(tag, i) in item.tagsName.split(',')" :key="i" class="tag">{{ tag }}</el-tag>
</div>
</el-tooltip>
</div>
<div :class="['metas']">
<el-tag v-if="item.selected"
type="danger"
effect="dark">
<el-tag v-if="item.selected" type="danger" effect="dark">
官方精选
</el-tag>
<el-tag v-if="item.typeName"
effect="dark">
<el-tag v-if="item.typeName" effect="dark">
{{ item.typeName }}
</el-tag>
<div v-if="item.isCourse"
class="meta">{{ item.learningCount }}人学过</div>
<div v-if="item.isCourse" class="meta">{{ item.learningCount }}人学过</div>
</div>
</div>
</li>
</ul>
<div class="pagination">
<el-pagination background
layout="total, prev, pager, next"
:page-size="pageSize"
:total="total"
@current-change="handleCurrentChange"
:current-page="page"></el-pagination>
<el-pagination background layout="total, prev, pager, next" :page-size="pageSize" :total="total"
@current-change="handleCurrentChange" :current-page="page"></el-pagination>
</div>
</template>
</div>
@ -243,8 +177,7 @@
<div class="copyright">
<!-- <span>© Copyright 2021 Occupation Lab 职站</span> -->
<a href="https://beian.miit.gov.cn/#/Integrated/index"
target="_blank">粤ICP备20072679号</a>
<a href="https://beian.miit.gov.cn/#/Integrated/index" target="_blank">粤ICP备20072679号</a>
</div>
</div>
</template>
@ -589,12 +522,15 @@ export default {
background-repeat: no-repeat;
background-size: cover;
}
img {
height: 100%;
}
/deep/.el-carousel__container {
height: 100%;
}
.text-wrap {
position: absolute;
top: 55%;
@ -604,13 +540,16 @@ export default {
color: #fff;
transform: translateY(-50%);
}
h6 {
margin-bottom: 25px;
font-size: 2.2rem;
}
.sub {
font-size: 1.5rem;
}
.qrcode-wrap {
display: inline-block;
padding: 5px;
@ -618,12 +557,14 @@ export default {
text-align: center;
background-color: #fff;
border-radius: 12px;
.text {
margin-top: 5px;
font-size: 12px;
color: #979797;
}
}
.qrcode {
width: 120px;
height: 120px;
@ -636,63 +577,78 @@ export default {
align-items: center;
padding: 20px 0;
background-color: #fff;
li {
display: inline-flex;
align-items: center;
transition: 0.3s;
&.active {
h6,
.desc {
color: #006eff;
}
}
&:hover {
margin-top: -15px;
h6,
.desc {
color: #006eff;
}
}
}
img {
width: 50px;
margin-right: 15px;
}
h6 {
margin-bottom: 5px;
font-size: 16px;
color: #0b1d30;
transition: 0.5s;
}
.desc {
font-size: 13px;
color: #757f92;
transition: 0.5s;
}
}
.inner-wrap {
padding: 18px 0;
background: url(../../../assets/images/product/bg1.png) 0 159px no-repeat,
url(../../../assets/images/product/bg2.png) bottom right no-repeat;
background-color: #f3f6fa;
}
.inner {
width: 1146px;
margin: 0 auto;
}
.type-wrap {
display: flex;
justify-content: space-between;
margin-bottom: 18px;
.left {
display: inline-flex;
}
.tab-wrap {
display: inline-flex;
align-items: center;
}
.tab {
display: inline-flex;
li {
position: relative;
margin: 0 20px;
@ -703,6 +659,7 @@ export default {
color: #0b1d30;
white-space: nowrap;
cursor: pointer;
&:after {
content: '';
position: absolute;
@ -713,12 +670,14 @@ export default {
transform: translateX(-50%);
border-radius: 2px;
}
&.active:after {
background-color: #1583ff;
}
}
}
}
.search {
position: relative;
display: flex;
@ -728,6 +687,7 @@ export default {
padding: 0 18px;
background-color: #fff;
border-radius: 31px;
input {
height: 40px;
margin-left: 7px;
@ -737,15 +697,18 @@ export default {
outline: none !important;
}
}
.filter {
padding: 5px 30px;
background-color: #fff;
border-radius: 10px;
dl {
position: relative;
display: flex;
flex-wrap: wrap;
margin: 20px 0;
dt {
min-width: 60px;
padding: 5px 0;
@ -756,6 +719,7 @@ export default {
font-weight: 600;
white-space: nowrap;
}
dd {
padding: 5px 15px;
color: #333;
@ -763,35 +727,43 @@ export default {
font-family: PingFangSC-Regular, PingFang SC;
white-space: nowrap;
cursor: pointer;
&.active {
font-weight: 600;
color: #1583ff;
}
}
.category {
margin: 5px 10px 0;
}
/deep/.category-item {
display: inline-flex;
align-items: center;
margin-right: 20px;
.name {
position: relative;
font-size: 14px;
color: #333;
cursor: pointer;
&+.el-cascader {
width: 30px;
}
}
&.active {
.name {
color: #1583ff;
}
}
}
/deep/.el-cascader {
width: auto;
.el-input {
.el-input__inner {
font-size: 14px;
@ -799,6 +771,7 @@ export default {
border: 0;
}
}
&.active {
.el-input .el-input__inner {
color: #1583ff;
@ -806,12 +779,14 @@ export default {
}
}
}
.vals {
display: inline-flex;
flex-wrap: wrap;
align-items: center;
width: 920px;
}
.caret {
position: absolute;
top: 4px;
@ -819,36 +794,44 @@ export default {
width: 20px;
height: 20px;
cursor: pointer;
i {
position: absolute;
width: 0;
height: 0;
border: 5px solid transparent;
}
.asc {
top: 0;
border-bottom-color: #c0c4cc;
&.active {
border-bottom-color: #409eff;
}
}
.desc {
top: 12px;
border-top-color: #c0c4cc;
&.active {
border-top-color: #409eff;
}
}
}
}
.courses {
position: relative;
margin-top: 24px;
ul {
position: relative;
display: flex;
flex-wrap: wrap;
}
li {
position: relative;
width: calc((100% - 66px) / 4);
@ -859,15 +842,18 @@ export default {
background-color: #fff;
transition: all 0.3s;
overflow: hidden;
&:nth-child(4n) {
margin-right: 0;
}
img {
width: 100%;
height: 155px;
transition: 0.3s;
object-fit: cover;
}
.my-school {
position: absolute;
top: 0;
@ -875,9 +861,11 @@ export default {
width: 57px;
height: 22px;
}
.texts {
padding: 10px;
}
.title {
margin-bottom: 10px;
color: #0b1d30;
@ -889,6 +877,7 @@ export default {
text-overflow: ellipsis;
white-space: nowrap;
}
.desc {
min-height: 34px;
color: #757f92;
@ -899,11 +888,13 @@ export default {
-webkit-line-clamp: 2;
overflow: hidden;
}
.tags {
height: 24px;
margin-top: 10px;
overflow: hidden;
}
.tag {
margin-right: 8px;
font-family: PingFangSC-Regular, PingFang SC;
@ -911,6 +902,7 @@ export default {
background-color: #f9f9f9;
border: 0;
}
.type {
display: inline-block;
padding: 4px 11px;
@ -919,30 +911,36 @@ export default {
border: 1px solid #dadada;
border-radius: 20px;
}
.metas {
display: flex;
justify-content: space-between;
align-items: center;
margin-top: 10px;
&.not-selected {
justify-content: flex-end;
}
}
.meta {
display: inline-flex;
align-items: center;
color: #b5bfd5;
font-family: PingFangSC-Regular, PingFang SC;
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);
}
@ -957,18 +955,22 @@ export default {
text-align: center;
line-height: 17px;
background-color: #0f1d2e;
span {
margin-right: 20px;
color: #757f8a;
}
a {
color: #757f8a;
font-size: 12px;
&:hover {
color: #c7c7c7;
}
}
}
@media (max-width: 1200px) {
.wrap {
.carousel {
@ -976,15 +978,19 @@ export default {
margin-right: 20px;
}
}
.inner {
width: 90%;
}
.type-wrap {
flex-direction: column;
}
.search {
margin-top: 20px;
}
.filter {
.vals {
width: calc(100% - 100px);
@ -992,40 +998,49 @@ export default {
}
}
}
@media (max-width: 1000px) {
.wrap {
.carousel {
.text-wrap {
top: 49%;
}
h6 {
font-size: 1.8rem;
}
.sub {
font-size: 1.3rem;
}
}
.intro {
flex-direction: column;
justify-content: center;
align-items: flex-start;
li {
flex: 1;
margin-bottom: 20px;
}
}
.type-wrap {
.tab-wrap {
flex-direction: column;
align-items: flex-start;
}
.tab {
margin-top: 10px;
}
}
.courses {
li {
width: calc((100% - 22px) / 2);
&:nth-child(2n) {
margin-right: 0;
}
@ -1033,42 +1048,51 @@ export default {
}
}
}
@media (max-width: 640px) {
.wrap {
/deep/.carousel {
.el-carousel__container {
height: 240px !important;
}
.text-wrap {
left: 20px;
}
.qrcode {
width: 80px;
height: 80px;
}
h6 {
font-size: 1.4rem;
}
.sub {
font-size: 1rem;
}
}
.type-wrap {
.tab-con {
max-width: 100%;
margin-bottom: 10px;
overflow: auto;
}
.tab {
li {
margin-bottom: 20px;
}
}
}
.search {
width: 100%;
margin-top: 0;
}
.courses {
li {
width: 100%;

@ -1,126 +1,78 @@
<template>
<div class="wrap">
<div class="inner">
<Breadcrumb ref="breadcrumb"
:data.sync="routes" />
<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-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">
<div class="right fadeInRight" id="fields">
<h6>{{ form.mall.productName }}</h6>
<div v-if="isCourse"
class="meta">
<div v-if="isCourse" class="meta">
<span class="val">{{ form.numberOfExperimentalItems }}</span> 个实验项目&emsp;&emsp;
已有 <span class="val">{{ form.goodsRes.learningCount }}</span>人学过
</div>
<div class="des"
v-html="form.mall.productIntroduction"></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"
<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 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"
<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 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 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>
<button v-if="!GTA" class="btn" @click="showQrcode">会员价采购</button>
</div>
</div>
<div class="course"
id="part0">
<div class="course" id="part0">
<div class="detail">
<ul class="tab fadeInDown">
<li v-for="(tab, i) in tabs"
:key="i"
:class="{active: curTab === tab.id}"
@click="tabChange(tab)">{{ tab.name }}</li>
<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 fadeInUp">
<div class="des"
v-html="form.mall.detailedIntroduction"></div>
<div class="chapter"
id="part1"
v-for="(item, i) in chapterList"
:key="i">
<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="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-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="">
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>
@ -132,33 +84,20 @@
<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="">
<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 :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 v-if="item.selected" type="danger" effect="dark">
官方精选
</el-tag>
<div v-if="item.isCourse"
class="meta">{{ item.learningCount }}人学过</div>
<div v-if="item.isCourse" class="meta">{{ item.learningCount }}人学过</div>
</div>
</div>
</li>
@ -168,34 +107,18 @@
</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">
<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>
<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">
<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="">
<img width="100%" src="@/assets/images/occupationlab.png" alt="">
</div>
</el-dialog>
</div>
@ -480,41 +403,50 @@ export default {
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;
@ -522,26 +454,32 @@ export default {
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;
@ -550,6 +488,7 @@ export default {
margin: 10px 0 10px;
overflow: hidden;
}
.btn {
width: 119px;
height: 46px;
@ -558,21 +497,25 @@ export default {
border-radius: 6px;
border: 0;
cursor: pointer;
&:hover {
opacity: 0.9;
}
&:first-child {
margin-left: 11px;
}
}
}
.tab {
z-index: 100;
position: sticky;
top: 20px;
top: 90px;
display: flex;
padding: 10px 10px 20px;
background-color: #fff;
li {
position: relative;
margin-right: 20px;
@ -580,6 +523,7 @@ export default {
line-height: 25px;
color: #0b1d30;
cursor: pointer;
&:after {
content: '';
position: absolute;
@ -589,14 +533,17 @@ export default {
height: 4px;
transform: translateX(-50%);
}
&.active:after {
background-color: #007eff;
}
}
}
.course {
display: flex;
margin-top: 20px;
.detail {
width: calc(100% - 294px);
padding: 20px 24px;
@ -604,35 +551,42 @@ export default {
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;
@ -642,33 +596,41 @@ export default {
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;
@ -677,12 +639,14 @@ export default {
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;
@ -690,9 +654,11 @@ export default {
width: 57px;
height: 22px;
}
.texts {
padding: 10px;
}
.title {
margin-bottom: 10px;
color: #0b1d30;
@ -704,6 +670,7 @@ export default {
text-overflow: ellipsis;
white-space: nowrap;
}
.desc {
min-height: 34px;
color: #757f92;
@ -712,19 +679,23 @@ export default {
-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;
@ -733,26 +704,31 @@ export default {
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);
}
@ -760,56 +736,71 @@ export default {
}
}
}
.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;
@ -817,6 +808,7 @@ export default {
}
}
}
@media (max-width: 480px) {
.wrap {
.tab {

Loading…
Cancel
Save